title: S.O.L.I.D., unikanie domen anemicznych, wstrzykiwanie zależności?

text: Chociaż może to być pytanie niezależne od języka programowania, interesują mnie odpowiedzi dotyczące ekosystemu .NET. Oto scenariusz: załóżmy, że musimy stworzyć prostą aplikację konsolową dla administracji publicznej. Aplikacja dotyczy podatku od pojazdów. Mają (jedynie) następujące zasady biznesowe: 1.a) Jeśli pojazd jest samochodem, a ostatni raz jego właściciel zapłacił podatek 30 dni temu, właściciel musi zapłacić ponownie. 1.b) Jeśli pojazd jest motocyklem, a ostatni raz jego właściciel zapłacił podatek 60 dni temu, właściciel musi zapłacić ponownie. Innymi słowy, jeśli masz samochód, musisz płacić co 30 dni lub jeśli masz motocykl, musisz płacić co 60 dni. Dla każdego pojazdu w systemie aplikacja powinna przetestować te zasady i wydrukować te pojazdy (numer rejestracyjny i informacje o właścicielu), które ich nie spełniają. To, czego chcę, to: 2.a) Zgodność z S.O.L.I.D. zasady (zwłaszcza zasada otwarte/zamknięte). To czego nie chcę to (chyba): 2.b) Domena anemiczna, dlatego logika biznesowa powinna wnikać do wnętrza podmiotów gospodarczych. Zacząłem od tego: public class Person // Chciałeś banana, ale dostałeś goryla trzymającego banana i całą dżunglę. { ciąg publiczny Nazwa { get; ustawić; } public string Nazwisko { get; ustawić; } } public abstract class Vehicle { public string PlateNumber { get; ustawić; } public Person Owner { get; ustawić; } public DateTime LastPaidTime { get; ustawić; } public abstract bool HasToPay(); } public class Samochód : Pojazd { public override bool HasToPay() { return (DateTime.Today - this.LastPaidTime).TotalDays >= 30; } } public class Motocykl : Pojazd { public override bool HasToPay() { return (DateTime.Today - this.LastPaidTime).TotalDays >= 60; } } public class PublicAdministration { public IEnumerable<Pojazd> GetVehiclesThatHaveToPay() { return this.GetAllVehicles().Where(vehicle => vehicle.HasToPay()); } private IEnumerable<Pojazd> GetAllVehicles() { throw new NotImplementedException(); } } class Program { statyczny void Main(string[] args) { Administracja Publiczna = new PublicAdministration(); foreach (var pojazd w administracji.GetVehiclesThatHaveToPay()) { Console.WriteLine("Numer rejestracyjny: {0}\tWłaściciel: {1}, {2}", pojazd.Numer rejestracyjny, pojazd.Właściciel.Nazwisko, pojazd.Właściciel.Imię ); } } } 2.a: Gwarantowana jest zasada otwarcia/zamknięcia; jeśli chcą podatku rowerowego, który po prostu dziedziczysz z pojazdu, to zastępujesz metodę HasToPay i gotowe. Zasada otwarta/zamknięta spełniona przez proste dziedziczenie. „Problemy” to: 3.a) Dlaczego pojazd musi wiedzieć, czy musi zapłacić? Czy to nie problem administracji publicznej? Skoro zmienią się przepisy administracji publicznej dotyczące podatku od samochodów, to dlaczego samochód musi się zmienić? Myślę, że powinieneś zapytać: "to dlaczego umieściłeś metodę HasToPay w Vehicle?", a odpowiedź brzmi: ponieważ nie chcę testować typu pojazdu (typeof) w PublicAdministration. Czy widzisz lepszą alternatywę? 3.b) Może zapłata podatku jest w końcu problemem związanym z pojazdem, a może mój początkowy projekt Osoba-Samochód-Motocykl-Administracja Publiczna jest po prostu błędny, albo potrzebuję filozofa i lepszego analityka biznesowego. Rozwiązaniem może być: przeniesienie metody HasToPay do innej klasy, możemy to nazwać TaxPayment. Następnie tworzymy dwie klasy pochodne TaxPayment; CarTaxPayment i MotorbikeTaxPayment. Następnie do klasy Vehicle dodajemy abstrakcyjną właściwość Payment (typu TaxPayment) i zwracamy odpowiednią instancję TaxPayment z klas Car i Motorbike: public abstract class TaxPayment { public abstract bool HasToPay(); } public class CarTaxPayment : TaxPayment { public override bool HasToPay() { return (DateTime.Today - this.LastPaidTime).TotalDays >= 30; } } public class MotorbikeTaxPayment : TaxPayment { public override bool HasToPay() { return (DateTime.Today - this.LastPaidTime).TotalDays >= 60; } } public abstract class Vehicle { public string PlateNumber { get; ustawić; } public Person Owner { get; ustawić; } public DateTime LastPaidTime { get; ustawić; } public abstract Płatność podatku { get; } } public class Samochód : Pojazd { private Płatność CarTaxPayment = new CarTaxPayment(); public override TaxPayment Payment { get { return this.payment; } } } public class Motocykl : Pojazd { private Płatność MotorbikeTaxPayment = new MotorbikeTaxPayment(); public override TaxPayment Payment { get { return this.payment; } } } A stary proces wywołujemy w ten sposób: public IEnumerable<Vehicle> GetVehiclesThatHaveToPay() { return this.GetAllVehicles().Where(vehicle => vehicle.Payment.HasToPay()); } Ale teraz ten kod nie skompiluje się, ponieważ nie ma elementu LastPaidTime w CarTaxPayment/MotorbikeTaxPayment/TaxPayment. Zaczynam postrzegać CarTaxPayment i MotorbikeTaxPayment bardziej jako „wdrożenia algorytmów” niż podmioty gospodarcze. Jakoś teraz te "algorytmy" potrzebują wartości LastPaidTime. Jasne, możemy przekazać tę wartość konstruktorowi TaxPayment, ale to byłoby niezgodne z enkapsulacją pojazdu, obowiązkami, czy jak to nazywają ci ewangeliści OOP, prawda? 3.c) Załóżmy, że mamy już obiekt Entity Framework ObjectContext (który używa naszych obiektów domeny; Person, Vehicle, Car, Motorbike, PublicAdministration). Jak byś zrobił, aby uzyskać odwołanie do obiektu ObjectContext z metody PublicAdministration.GetAllVehicles i w związku z tym zaimplementować funkcjonalność? 3.d) Jeśli potrzebujemy również tej samej referencji ObjectContext dla CarTaxPayment.HasToPay, ale innej dla MotorbikeTaxPayment.HasToPay, kto odpowiada za „wstrzykiwanie” lub jak przekażesz te referencje do klas płatności? W takim razie unikanie anemicznej domeny (a tym samym brak obiektów usługowych) nie prowadzi nas do katastrofy? Jakie masz wybory projektowe dla tego prostego scenariusza? Oczywiście przykłady, które pokazałem, są „zbyt złożone”, aby wykonać łatwe zadanie, ale jednocześnie chodzi o przestrzeganie zasad S.O.L.I.D. zasady i zapobieganie anemicznym domenom (których zlecono zniszczenie).


title: Obsługa tablicy przekazanej do obiektu podczas tworzenia

text: Tworząc swój obiekt przekazuję mu tablicę wiersza z mojej bazy danych. (wszystko w tablicy, czego będziemy potrzebować, pomijając niepotrzebne elementy na poziomie zapytania sql) Kiedy potrzebuję uzyskać dostęp do niektórych elementów tablicy z poziomu mojej klasy, robię to w następujący sposób: $this->row['element'] Jednak w miarę rozwoju , czasami zapominam, co dokładnie jest w tej przekazanej tablicy.(to samo w sobie nie wydaje się dobre) Zastanawiam się, czy jest to profesjonalne podejście do radzenia sobie z tym, czy też jestem jedynym, który ma te "Zastanawiam się, co jest w myśli. Jednym ze sposobów rozwiązania tego problemu może być to, że gdy pierwotnie przekazujemy tablicę w konstruktorze, przypisujemy każdy element tablicy do jego własnej zmiennej, ale czy jest to uważane za praktykę zawodową? Dodatkowo, robiąc to, moglibyśmy uczynić te zmienne stałymi, próbując zachować niezmienność. Ogólnie staram się przestrzegać dobrego rzemiosła oprogramowania. Pozdrowienia.


Posiadam serwis internetowy. W tej chwili mam hasła przechowywane w postaci zwykłego tekstu w tabeli MySQL na moim serwerze. Wiem, że to nie jest najlepsza praktyka i dlatego nad tym pracuję. Dlaczego hasła powinny być szyfrowane, jeśli są przechowywane w bezpiecznej bazie danych? Zdaję sobie sprawę, że jeśli ktoś włamie się do mojej bazy danych, zdobędzie hasło wszystkich. Ale mam inne problemy, jeśli ktoś dostanie się do mojej bazy danych, na przykład skasując dane. Przychodzi mi do głowy scenariusz, w którym zostałeś zhakowany. Przywracasz bazę danych sprzed kilku godzin i wszystko jest w porządku. Jeśli jednak twoje hasła są zwykłym tekstem... Złodziej ma wszystkie hasła i musisz je wszystkie zresetować. Kłopot dla użytkowników. Jeśli hasła były zaszyfrowane, możesz po prostu przywrócić poprzednią bazę danych. Czy to prawidłowe myślenie?


title: Czy w tabeli wiele do wielu (łączenia) potrzebna jest kolumna Unique ID?

text: Rozpoczęcie kilku projektów z EF, ale miałem kilka pytań dotyczących tabel łączenia, kluczy itp. Powiedzmy, że mam tabelę aplikacji i tabelę uprawnień. Aplikacje mają wiele uprawnień, a każde uprawnienie może należeć do wielu aplikacji (wiele do wielu). Teraz tabele aplikacji i uprawnień są proste: Aplikacje -------------- PK ApplicationID Name Uprawnienia ------------------ PK PermissionID Name Ale co jest NAJLEPSZE sposób na łączenie tabeli? Mam dwie opcje: ApplicationPermissions ------------ PK ApplicationPermissionID CU ApplicationID CU PermissionID LUB ApplicationPermissions ------------ ----------- CPK ApplicationID CPK PermissionID PK = Klucz główny CPK = Główny klucz złożony CU = Złożony unikalny indeks Czy kiedykolwiek zostałeś spalony robiąc to w jedną stronę w drugą? czy to ściśle preferencja? Przyszło mi do głowy, że wiele „różnic” zostanie wyabstrahowanych przez mój wzorzec repozytorium (na przykład prawie nigdy nie utworzyłbym całego obiektu uprawnień i nie dodałby go do aplikacji, ale robiłbym to według identyfikatora lub unikalnej nazwy lub coś), ale myślę, że szukam opowieści grozy, w taki czy inny sposób.


title: Pierwsze kroki z wykrywaniem obiektów - Algorytm segmentacji obrazu

text: Dopiero zaczynam hobbystyczny projekt wykrywania obiektów. Moim celem jest zrozumienie podstawowych algorytmów iw tym celu ogólna dokładność wyników jest (obecnie) ważniejsza niż rzeczywisty czas działania. Zaczynam od znalezienia dobrego algorytmu segmentacji obrazu, który zapewni dobry punkt wyjścia dla fazy wykrywania obiektów. Docelowymi obrazami byłyby sceny z „rzeczywistego świata”. Znalazłem dwie techniki, które odzwierciedlają moje przemyślenia na temat tego, jak się do tego zabrać: 1. Segmentacja obrazu oparta na wykresach: http://www.cs.cornell.edu/~dph/papers/seg-ijcv.pdf 2. Kontur i tekstura Analiza segmentacji obrazu: http://www.eng.utah.edu/~bresee/compvision/files/MalikBLS.pdf Pierwszy z nich był naprawdę intuicyjny do zrozumienia i wydaje się dość prosty do wdrożenia, podczas gdy drugi był bliższy mojemu początkowemu przemyślenia, jak się do tego zabrać (połącz informacje o kolorze/intensywności i teksturze, aby znaleźć regiony). Ale jest to o rząd wielkości bardziej złożone (przynajmniej dla mnie). Moje pytanie brzmi - czy są jakieś inne algorytmy, którym powinienem się przyjrzeć, które zapewniają takie wyniki, jakie uzyskano w tych dwóch konkretnych artykułach? Czy istnieją już zaktualizowane wersje tych technik? Jak wspomniałem wcześniej, celem jest względna dokładność segmentacji obrazu (z ewentualnym celem osiągnięcia pewnego stopnia dokładności wykrywania obiektów) w czasie wykonywania, przy czym algorytm jest w stanie podzielić obraz na „naturalnie” lub percepcyjnie ważne komponenty, jak te dwa algorytmy robią (każdy w różnym stopniu). Znalazłem te dwa artykuły po kilku dniach doprecyzowania wyszukiwanych haseł i nauczenia się nowych, odpowiadających dokładnie tym rodzajom technik, których szukałem. Prawie osiągnąłem kres mojej osobistej kreatywności w Google, dlatego w końcu tu jestem! Nie wiem, czy lepiej pasuje to do cstheory.stackexchange (lub nawet cs.stackexchange). Spojrzałem, ale csteoria wydaje się bardziej odpowiednia do zawiłych dyskusji algorytmicznych niż tak szerokie pytanie. Również tam nie mogłem znaleźć żadnych odpowiednich tagów! Ale proszę, przesuń się, jeśli to konieczne.


title: Jak myślisz, co jest lepszą metodą nauki języków: korzystanie z książek czy przejście od razu do projektu?

text: Czy uważasz, że lepiej jest uczyć się poprzez czytanie książek, czy po prostu wskoczyć od razu do projektu i zdobyć to, co musisz wiedzieć, korzystając z Internetu, lub kombinację obu?


title: „Normalizacja” zorientowana obiektowo

text: W programowaniu baz danych istnieje technika zwana „normalizacją”, którą stosujesz do danych, które chcesz przechowywać. Czy ktoś próbował zastosować tę koncepcję do projektowania obiektów? Jak ci się udało? Jak to poszło? Edycja: Aby rozwinąć/wyjaśnić, normalizacja bazy danych to coś więcej niż zestaw zasad mających na celu zmniejszenie nadmiarowości. W rzeczywistości są kroki i etapy, przez które przechodzisz, i przynajmniej umiarkowanie obiektywne miary, które mówią ci, na jakim etapie się znajdujesz. Projektowanie obiektów ma swoje własne zasady i istnieje koncepcja zapachu, ale czy istnieje sposób na zrobienie czegoś podobnego, który by ci powiedział że jesteś w XX-formie0,1,2...itd...i metody przejścia do następnego najbardziej "znormalizowanego" poziomu?


title: Diagramy przypadków użycia — czy powinienem utworzyć diagram tylko do wyświetlania reguły biznesowej?

text: Modeluję UCD, w którym mam dwóch aktorów (producenta treści i programisty). Producent treści ma zamiar stworzyć i określić szczegóły funkcjonalności storyboardu, a drugi aktor (programista) będzie mógł tylko to zobaczyć storyboard (zaloguje się do aplikacji i przeczyta storyboard, aby zacząć rozwijać to, co mówi, poza aplikacją..) Pracuję nad specyfikacją funkcjonalności tego storyboardu i chciałbym wiedzieć, że będzie jak najlepiej -próbuj, jeśli opiszę coś w stylu „>aktor-programista”, „UCD – przeczytaj sceny z storyboardu” . To jest specyfikacja aplikacji, którą stworzyłem na potrzeby mojej pracy magisterskiej i poprosili mnie o dodanie specyfikacji...


title: Dlaczego bazy danych nie mają dobrych indeksów pełnotekstowych

text: Dlaczego żaden z głównych systemów RDBMS, takich jak MySQL, SQL Server, Oracle itp., nie ma dobrej obsługi indeksowania pełnotekstowego? Zdaję sobie sprawę, że większość baz danych obsługuje do pewnego stopnia indeksy pełnotekstowe, ale zwykle są one wolniejsze i mają mniejszy zestaw funkcji. Wydaje się, że za każdym razem, gdy chcesz mieć naprawdę dobry indeks pełnotekstowy, musisz wyjść poza bazę danych i użyć czegoś takiego jak Lucene/Solr lub Sphinx. Dlaczego technologia tych wyszukiwarek pełnotekstowych nie jest całkowicie zintegrowana z silnikiem bazy danych? Istnieje wiele problemów z przechowywaniem danych w innym systemie, takim jak Lucence, w tym aktualizowanie danych i brak możliwości łączenia wyników z innymi tabelami. Czy jest jakiś konkretny technologiczny powód, dla którego te dwie technologie nie mogą być zintegrowane?


title: Dlaczego w niektórych bibliotekach open source brakuje komentarzy?

text: Nie wiem, czy dzieje się tak z większością bibliotek Opensource, ale wiele z nich znam i używam (na przykład OpenSSL, Webkit, ...) wszystkie nie zawierają komentarzy lub zawierają bardzo mało komentarzy. Nie wspominając o ich bardzo niewielu dokumentach, trudno jest odczytać ich kod źródłowy. Trudno zrozumieć, co oznacza zmienna składowa lub co robi ta funkcja. Wydaje się to być sprzeczne ze standardową praktyką kodowania. Dlaczego tak jest? W jaki sposób ludzie mogą współpracować z tymi open source z bardzo małą liczbą komentarzy?


title: Czy uważasz, że zarządzane systemy operacyjne to dobry pomysł?

text: Zarządzane systemy operacyjne, takie jak Microsoft Singularity i JNode, to całkiem interesująca koncepcja. Zasadniczo system operacyjny jest ładowany kodem napisanym w języku niskiego poziomu (C/C++/Assembly), który zasadniczo implementuje maszynę wirtualną. Reszta systemu operacyjnego (i wszystkie aplikacje w przestrzeni użytkownika) działa na maszynie wirtualnej. Jest w tym kilka świetnych rzeczy. Na przykład, nagle arbitralne wskaźniki stają się przestarzałe. A jeśli dobrze napisane, pozbędziesz się mnóstwa spuścizny, którą ma obecnie większość nowoczesnych systemów operacyjnych. Jednak wadą jest to, że jesteś znacznie dalej od sprzętu, a jako programista tracisz możliwość zejścia na niższy poziom abstrakcji i ubrudzenia sobie rąk. Jakie są twoje opinie na ten temat?


title: Czy programowanie to sztuka czy praca przy biurku?

text: Tworzenie oprogramowania wymaga jasnego umysłu, pełnego kreatywnych pomysłów (sztuka) i dobrej znajomości informatyki, dziedziny oprogramowania i logiki (nauka). Wciąż wiele firm traktuje programowanie jako pracę biurową, w której masz zadania do wykonania. Ale to nie tylko składanie dokumentów na papierze, programiści są bardziej kreatywni w kilka dni niż inni, bardziej chętni do rozwiązywania problemów i problemów z oprogramowaniem jednego dnia, a drugiego dnia nie mają ochoty, nawet jeśli bardzo się starają. Jak kierownictwo działu IT powinno rozwiązać ten problem? Czy programiści powinni być traktowani jako artyści i mieć pełny czas na robienie tego, co lubią (wielu nie dostarcza oprogramowania na czas), czy też powinni być traktowani jako pracownicy montażowi, którzy muszą dokończyć swoje konkretne zadania bez względu na to, jak się z tym czują. (nie uzyska wysokiej jakości wyników)? Myślę, że powinno być gdzieś pośrodku, ale gdzie dokładnie?


title: Użytkownicy tworzący instancje z szablonu – czy istnieje wzorzec oprogramowania odpowiadający temu przypadkowi użycia?

text: Zastanawiam się nad zaprojektowaniem systemu, w którym użytkownicy budują element szablonu, a następnie tworzą wiele instancji na podstawie tego szablonu. Następnie muszą być w stanie dostosować każdą instancję, ale potrzebuję również, aby mogli wprowadzać zmiany w szablonie i mieć wszystko zaktualizowano instancje. Te elementy są dość złożone, a każdy składa się z wielu komponentów, które będą przechowywane w wielu tabelach bazy danych. Widzę dwie ścieżki realizacji. 1. Przechowuj kompletne kopie szablonów, aby tworzyć instancje i migrować aktualizacje do instancji. 2. Przechowuj rekordy tylko dla zmian i buduj każdą instancję z kombinacji zmian szablonu i instancji. Uważam, że pierwsza opcja stworzyłaby wiele niepotrzebnych dodatkowych danych, jednak druga droga wprowadza komplikacje w zapytaniu o dane. Wygląda na to, że prawdopodobnie zostało to już zaimplementowane wiele razy, ale mam problem ze znalezieniem wielu materiałów do czytania. Czy istnieją wspólne nazwy modeli danych lub opcji wzorców używanych w implementacjach takich systemów? Przydatne byłyby również wszelkie porady dotyczące korzyści lub pułapek każdej opcji, innych opcji lub wskazówek dotyczących wdrażania. **edytuj:** Przepraszam, że mogłem nie być jasny. Bardziej szukałem nazwy dla ogólnej architektury, a nie wzorca projektowego. To użytkownicy końcowi tworzą instancje, a nie deweloperzy. Na przykład system może umożliwiać użytkownikom definiowanie szablonów do modelowania procesów produkcyjnych wielu elementów. Następnie w różnych lokalizacjach, w których obiekty lub wymagania są różne, użytkownik końcowy użyje jednego z tych szablonów do zdefiniowania procesu specyficznego dla tej lokalizacji. Rzeczy będą dodawane, usuwane i modyfikowane dla każdej witryny. Uważam, że pójdę z opcją drugą wspomnianą powyżej - przechowywanie tylko zmian delta, a nie kompletnych kopii.


title: silnik skryptowy bez środowiska globalnego (java)

text: Jestem ciekaw, w jaki sposób silniki skryptowe obsługują zmienne globalne. Szukam silnika skryptów, który nie zachowuje stanu zmiennych globalnych po wywołaniu. Czy są tam takie silniki? Szukamy języka skryptowego, którego możemy użyć w ramach API silnika skryptów dla Javy. Podczas wielokrotnych wywołań silnika skryptów wywołania najwyższego poziomu metod eval() lub assessment() zachowują stan zmiennych globalnych, co oznacza, że kolejne wywołania metody eval() będą używać zmiennych globalnych pozostawionych przez ostatnie wywołanie . Czy istnieje aparat skryptów, który nie zachowuje stanu lub zapewnia możliwość zresetowania stanu, tak aby zmienne globalne były w stanie początkowym za każdym razem, gdy aparat skryptów jest wywoływany?


title: Jak wizualnie przedstawiasz umiejętności programistyczne?

text: Niedawno rozmawiałem z rekruterem, który sprawił, że żałowałem, że nie mogę wizualnie reprezentować umiejętności programistycznych. Próbując wyjaśnić związek między umiejętnościami, **jakie są ważne właściwości tych umiejętności?** Czy model tagowania zadziała (np. „Wzorzec projektowy”, „Język programowania”, „IDE” lub „VCS”)? Czy naprawdę są hierarchiczne? Wyjaśnienie: Prawdziwym problemem, który widzę, jest komunikowanie poziomu szczegółowości między zestawami umiejętności. Na przykład powiedzenie „ktoś zna Javę” jest bezużytecznym terminem opisującym to, co ktoś może ZROBIĆ. Jednak stwierdzenie, że wiedzą, jak pisać usługi internetowe w języku programowania Java, jest nieco lepsze. Idąc dalej, mówiąc, że znają Spring jako narzędzie pod tym wszystkim, co prawdopodobnie jest wystarczająco szczegółowe. Jak nazwać te poziomy szczegółowości? Jakie są relacje między używanymi przez nas terminami? tj. Framework to Language, Tool to Language, Framework to Solution (jak usługi sieciowe) itp.


title: Czy powinienem używać wielkich liter w adresach URL?

text: Obecnie decydujemy się na spójną konwencję nazewnictwa w witrynie z wieloma aplikacjami internetowymi. W przeszłości byłem zwolennikiem „wszystkich małych liter!”. podczas tworzenia adresów URL: http://example.com/mysystem/account/view/1551 Jednak w ciągu ostatniego roku lub dwóch, szczególnie odkąd zacząłem używać ASP.NET MVC i miałem więcej do czynienia z adresami URL opartymi na REST, stałem się fan pisania wielką literą każdej sekcji/słowa w adresie URL, ponieważ ułatwia to czytanie (imho). http://example.com/MójSystem/Konto/Widok/1551 Nie znajdujemy się w sytuacji, w której ludzie _muszą_ czytać lub rozumieć adresy URL, więc nie jest to sterownik per se. Najważniejsze, do czego dążymy, to konsekwentne podejście, które jest racjonalne i ma sens. Czy są jakieś standardy, które deklarują, że dobrze jest robić w taki czy inny sposób, lub problemy, które możemy napotkać w (przynajmniej realistycznie nowoczesnych) konfiguracjach, które wybrałyby preferencje nad innymi? Jaki jest obecnie ogólny konsensus w tej debacie?


title: Do czego służy dedykowana skrzynka Linux?

text: Więc to jest prawdopodobnie bardzo podstawowe i oczywiste pytanie dla większości ludzi, ale moje google-fu mnie zawodzi i wydaje się, że coś mi się kręci. Słyszałem, że wiele osób mówi o posiadaniu „dedykowanego pudełka dla Linuksa” jako centralnej części konfiguracji dewelopera. Zajmuję się programowaniem web-dev od około roku i rozumiem korzyści płynące z programowania w systemie Unix/Linux. Ale wydaje mi się, że brakuje mi roli, jaką w procesie rozwoju odgrywa „dedykowane pudełko linuxowe”. Przypuszczam, że jest używany jako jakiś serwer, ale jeszcze nie spotkałem się z potrzebą posiadania komputera przeznaczonego do uruchamiania serwera linuksowego. Czy po prostu jestem niegrzeczny i mylę powszechność programistów wolących pracować w Linuksie z narzędziem używanym przez programistów? Do czego większość programistów wykorzystuje swoje „dedykowane pudełko linuxowe”?


title: jak napisać skalowalny/elastyczny system php?

text: Próbuję napisać system typu joomla w PHP, aby poprawić moje umiejętności kodowania/programowania, aby to zrobić. to, co w zasadzie chcę zrobić, to utworzyć plik index.php, który będzie działał jako kontroler frontowy i przekieruje w sposób przezroczysty do „rozszerzeń/wtyczek” (nie ma potrzeby podążania za MVC, a zatem będzie bardziej elastyczny) co jakie są twoje rekomendacje na ten temat? **EDIT** Miałem na myśli, że próbuję go stworzyć przy użyciu CORE PHP (bez frameworków), ale istniejące biblioteki są dopuszczalne


title: Organizacja GUI, BLL, DAL w projekcie

text: Czytam o warstwach aplikacji i chcę użyć tego projektu w moim następnym projekcie (c#, .Net). Kilka pytań: 1. Czy separacja warstw odbywa się za pomocą przestrzeni nazw? Project.BLL.Whatever, Project.DAL.Whatever 2. Czy bardziej odpowiednie jest rozdzielanie według warstw, następnie komponentów (Project.BLL.Component1), czy według komponentów, a następnie warstw (Project.Component1.BLL) 3. Dla mojego DAL , czy ta warstwa jest dalej zorganizowana przy użyciu różnych klas? Jeśli wszystkie wywołania bazy danych są umieszczane w jednej klasie, nie ma organizacji. Czy lepiej byłoby podzielić je na różne klasy lub przestrzenie nazw? 4. Czy klasy DAL są zazwyczaj statyczne? Utworzenie instancji obiektu DAL przed każdym wywołaniem jednej z jego metod wydaje się kłopotliwe. Wszelkie inne wskazówki dotyczące robienia rzeczy we właściwy sposób z tymi warstwami byłyby mile widziane.


Dlaczego ludzie mówią, że VB daje ci złe nawyki programistyczne? Co przez to rozumieją?


title: Czy ważniejsze są potwierdzenia lub testy jednostkowe?

text: Zarówno potwierdzenia, jak i testy jednostkowe służą jako dokumentacja bazy kodu i środek do wykrywania błędów. Główne różnice polegają na tym, że sprawdzają funkcję jako kontrole rozsądku i widzą rzeczywiste dane wejściowe, podczas gdy testy jednostkowe są przeprowadzane na określonych symulowanych danych wejściowych i są testami z pojedynczą, dobrze zdefiniowaną „właściwą odpowiedzią”. Jakie są względne zalety stosowania asert vs. testów jednostkowych jako głównych środków weryfikacji poprawności? Na co Twoim zdaniem należy położyć większy nacisk?


title: Jak wytłumaczyć nowemu pracodawcy moje 5 wypalonych lat?

text: Pięć lat temu straciłem zdolność do długoterminowej koncentracji, a tym samym umiejętność kodowania z profesjonalną wydajnością. Wiem, dlaczego to się stało, rozumiałem, jak to się stało, a oprócz tego, że potrafiłem odtworzyć moje spokojne, a tym samym zrelaksowane skupienie, przezwyciężyłem pierwotny (zakorzeniony w dzieciństwie) powód, dla którego mój umysł przechylił się wtedy na ogólną sytuację; Moje rozumienie nie jest zakorzenione w słowach, które powiedział mi psycholog, właściwie obmacałem je z pierwszej ręki. Jestem prawie pewien, że będę w stanie zwiększyć produktywność, być może nawet bardziej niż przed wypaleniem. Nigdy też nie straciłem zainteresowania kodem ani nie odstąpiłem od próby odzyskania swoich umiejętności; Aktualizowałem swoją wiedzę (zawsze mogłem stosunkowo bezboleśnie nauczyć się rzeczy związanych z kodowaniem, po prostu ich nie stosować) i dlatego mogę powiedzieć, że jestem lepszym programistą niż wcześniej, nawet jeśli moja średnia LOC w tych latach jest fatalna niski. Z drugiej strony mam teraz biografię, która zawiera więcej czasu na zasiłku niż w pracy. Co przekonałoby Cię jako pracodawcę, aby dać szansę mojej aplikacji? Nie wierzę, że powinienem trzymać cały temat poza tym. **EDYTUJ:** Myślę, że powinienem dodać, że nie zacząłem szukać przyczyn w dzieciństwie, to rozwiązanie wskazało mi przyczynę. Niestety, nie robienie wszystkiego, co w mojej mocy, aby naprawić firmę (która rozpadała się po moim odejściu, a rok później całkowicie rozwiązana) jest głęboko zakorzenione w fakcie, że w dzieciństwie w pewnym momencie zrezygnowałem z naprawiania relacji rodziców, źle przypisując to z powodu mojej własnej porażki w empatii, zamiast tego, że jest to całkowicie beznadziejny przypadek i tak naprawdę nie widzę sposobu, aby to wyjaśnić bez odniesienia do dzieciństwa. Mogę to jednak doskonale powiedzieć, nie rozpłakając się. To powiedziawszy, tak, zdaję sobie sprawę, że piszę do was jako przyjaciele, a nie pracodawcy, właśnie teraz, dlatego okazuję wam nieufność, korzystając z konta jednorazowego .oO( ... ) Tak, planuję wydać trochę kodu OSS, zanim zgłoszę się gdziekolwiek. **EDYTUJ 2:** Jestem Niemcem i zamierzam złożyć podanie w niemieckiej firmie, więc „kreatywna prawda” zdecydowanie nie wchodzi w grę. **Jeśli chodzi o wybraną odpowiedź:** Wybrałem Renesisa zamiast Pierre'a, ponieważ podczas gdy ten ostatni wykonał świetną robotę w motywowaniu, przekonywał, że nie powinienem się poddawać i daje mi punkty, aby wzmocnić moją sekcję umiejętności społecznych, Renesis faktycznie odpowiedziałem na moje pytanie, podsumowując zaangażowane kluczowe czynniki.


title: Czy akcja atomowa ma być deterministyczna?

text: Czytałem o właściwości _co najwyżej raz_, która definiuje, czym jest akcja atomowa i byłem ciekaw tego przykładu: x = 0, y = 0 x = y + 1 || y = y + 1 Jeśli użyjemy definicji „co najwyżej raz”, możemy powiedzieć, że faktycznie, `x = y + 1` jest niepodzielne, ponieważ * `y` jest przywoływane tylko w innym wątku, a * `x` jest nie jest odczytywany przez żaden wątek Ale wynik tej akcji nie jest deterministyczny, może to być 1 lub 2 w zależności od tego, która operacja jest obliczana jako pierwsza. Mogę się mylić od samego początku, czy atomowość nie zakłada pewnego rodzaju determinizmu?


title: Uniezależnienie logiki serwera od interakcji z klientem

text: Próbuję stworzyć grę sieciową dla wielu graczy w czasie rzeczywistym w node.js z ekspresowym frameworkiem i biblioteką socket.io. Ale nie wydaje się, aby moja logika po stronie serwera była niezależna od interakcji z klientem. Chcę, aby klient wchodził w interakcję tylko wtedy, gdy chcę (logika po stronie serwera), ale wydaje się, że nie jestem w stanie tego zrobić. Na przykład: chcę, aby 2 użytkowników zaczęło grać w grę. Muszę najpierw zainicjować grę, na przykład skonfigurować środowisko, zmienne i inne rzeczy... wszystko w osobnym, nazwij to: Logika gry. Tylko wtedy mogę „pozwolić” klientom na interakcję. Ale jak mam postępować zgodnie z moją logiką gry, gdy moje zdarzenie `socket.on` to „określanie szans”? W przypadku socket.io musisz zdefiniować wyzwalacze, takie jak io.sockets.on('connection', function(socket) { socket.on('event', function(data) { //przypuszczalnie jest to uruchamiane, gdy klient natrafi na "interakcję" z przyciskiem X" }); } Cała moja logika wydaje się zależeć od tych wyzwalaczy. Chciałem, aby klient mógł odpalić to zdarzenie tylko wtedy, gdy _Chcę_ (po skonfigurowaniu środowiska gry itp.), ale zdefiniowanie go w taki sposób więc, oddzielona od mojej logiki gry, stwarza problemy typu **jak mam przenieść kontrolę wykonania z gniazda do mojej logiki gry**?A nawet jeśli mi się udało, jest cały ten problem z klientem „wywołania strzałów”. Nie mam wtedy kontroli, kiedy klient może chcieć wejść w interakcję.Jakaś rada, co powinienem zrobić?


title: Pisanie wysokiej jakości propozycji oprogramowania

text: Czytałem ostatnio kilka propozycji projektów oprogramowania i jestem trochę zaniepokojony tym, co widziałem. Często mam wrażenie, że propozycje były pospieszne i/lub źle przemyślane. Bardzo możliwe, że propozycje nie muszą wyglądać jak kosz owoców, ale jeśli rzucasz się do pracy lub ubiegasz o zgodę na finansowanie, muszą istnieć pewne wytyczne dotyczące tego, co stanowi „przyzwoitą” propozycję. Zastanawiałem się, czy ktoś znał dobre wytyczne dotyczące pisania propozycji oprogramowania lub mógłby wskazać mi książki/strony internetowe itp.?


title: Aplikacja push Bluetooth

text: Rozważam techniczną wykonalność oprogramowania, które chcę napisać. Czy istnieje sposób na przesyłanie danych do telefonu (iPhone lub Andriod) przez Bluetooth bez parowania z nim? Chcę móc wchodzić do pokoju i mieć komputer przesyłający dane do mojego telefonu, gdy znajdę się w pewnej odległości od niego, lub automatycznie przesyłać dane do dowolnego telefonu, gdy znajdzie się on w określonej odległości od urządzenia obsługującego technologię Bluetooth?


title: Tworzenie oprogramowania DVR przy użyciu zestawu sprzętowego

text: Obecnie zastanawiam się nad projektem na studia magisterskie. Rozpoczynam poszukiwania opcji stworzenia własnego oprogramowania do strumieniowego przesyłania wideo w oparciu o gotowy zestaw sprzętowy, nie mając zbyt dużej wiedzy na temat tego, czego dokładnie będę potrzebować, co będzie pasować do moich potrzeb. Moje poszukiwania doprowadziły mnie do kart `DVR` `(Digital Video Recorder)`, które wydają się być najbliższe tym, czego potrzebuję, ale wciąż nie mogę dowiedzieć się kilku podstawowych rzeczy, więc postanawiam poprosić o nie tutaj. Obecnie nie znalazłem zbyt wielu producentów, którzy oferują takie zestawy, więc gdzie mogę zajrzeć i mieć kilka opcji do wyboru? Na rynku jest wiele produktów `DVR`, ale mają już napisane dla nich oprogramowanie i nawet jeśli kupuję to po prostu nie dają żadnej dokumentacji ani sdk, więc zakup takiego nie wchodzi w grę Potrzebuję karty DVR zrobionej dokładnie dla programistów, a nie użytkowników końcowych. Czy są preferowani producenci, którzy dostarczają tego typu urządzenia z dobrą i przyjazną dla programistów dokumentacją? Poza tym - wolę to wszystko robić w Javie, czy to jest opcja (myślę, że zrobię to również z .NET, ale naprawdę wolę Javę jako wybrany język)


title: Jak zaprojektować algorytm antyspamowy w oparciu o profil korzystania z sieci?

text: Przyjrzałem się innym algorytmom antyspamowym, zwłaszcza Redditowi, ale wydają się one nieodpowiednie i naiwne: na przykład blokowanie tylko określonych słów (takich jak „spam”), które pojawiają się w tytule posta. Jak podejść do tego problemu? Czy są jakieś narzędzia, które pomogłyby w tym przypadku i ogólnie w przypadku witryn społecznościowych o wysokiej aktywności?


title: Projektowanie architektury DAO aplikacji internetowej i serwera dla usług poza siecią LAN

text: Potrzebuję tylko sugestii, jaką drogę powinienem obrać, aby się dalej kształcić. Sytuacja: W naszej firmie posiadamy wewnętrzną aplikację (tylko LAN), która między innymi służy do zamawiania aplikacji. Główna funkcjonalność to - ludzie mogą umówić się na jakąś usługę (np. konsultację techniczną, naprawę elektroniki itp.) na konkretną datę. Dzisiaj klienci zewnętrzni muszą osobiście podejść do pracownika, który stworzy ich bilet. Szef powiedział, że nie możemy już mieszkać w jaskiniach, więc musimy stworzyć aplikację webową do planowania zamówień. Tło: \- nasz wewnętrzny system oparty jest na Javie(swing) + DB(postgres) \- Serwer DB jest na dedykowanej maszynie \- dane w DB są kruche (ze względów bezpieczeństwa) \- ponieważ jest to trochę przestarzały kod, większość logiki znajduje się w procedurach składowanych w DB \- chcielibyśmy użyć Vaadin do stworzenia aplikacji webowej \- hostowanie aplikacji webowej na innej maszynie Główne zadania: \- oddzielenie serwera wewnętrznego (DB) od świata zewnętrznego \- obsługa tylko części danych z bazy danych potrzebnych do utworzenia biletu z aplikacji webowej \- znajdź i zabezpiecz lub wyeliminuj najsłabsze połączenie pomiędzy aplikacją webową a wewnętrznym systemem DB w wybranym rozwiązaniu \- aplikacja webowa musi być zsynchronizowana z wewnętrzną aplikacją zamawiającą (bez warunku wyścig o zaplanowanie konkretnej daty) Więc jak to naprawić?: \- hostuj aplikację internetową na komputerze lokalnym (innym niż DB i w DMZ) lub użyj zewnętrznego komercyjnego hostingu \- stwórz Web-Service, który będzie proxy aplikacji internetowej zapytania z zamówieniami klientów do DB, a następnie je przetwarzać? \- może użyć JMS do żądań użytkowników, a następnie sondować z JMS do bazy danych (może użyć Apache Camel do przetwarzania i przechowywania w bazie danych)? \- utworzyć drugą instancję bazy danych tylko dla aplikacji internetowej, a następnie zsynchronizować master-DB i web-app-DB w jakiś wyrafinowany sposób? \- w warstwie dostępu do danych aplikacji webowej chcielibyśmy stworzyć wysoką abstrakcję na wypadek, gdybyśmy musieli przełączyć się z jednego z powyższych na drugie. Jakie są twoje sugestie, które z nich, a może coś zupełnie innego powinniśmy rozważyć w tym projekcie ?


title: Dlaczego burza nie dostarcza mechanizmu dostarczania topologii niezbędnych słojów zależnych innych niż słój gruby?

text: Poniżej znajduje się pytanie, które umieściłem na liście dyskusyjnej inkubator-storm-user (dosłownie). Postanowiłem otworzyć pytanie również tutaj, ponieważ zawiera ono również koncepcyjną stronę, na którą mogą odpowiedzieć użytkownicy niebędący burzą. > Nie jestem ekspertem od Pythona, a także nowicjuszem do szturmu. > > Przejrzałem kod źródłowy burzy, aby zobaczyć, jak dodać jary do > ścieżki klas. Oczywiście preferowanym mechanizmem jest gruby słoik (jak określono w samouczku Micheala Nolla i innym poście na liście dyskusyjnej storm-user). Drugim pozornie dostępnym mechanizmem jest > `USER_CONF_DIR`, który sprowadza się do `os.path.expanduser("~/.storm")`, ale to > nie pozwala na niezależne od topologii wersjonowanie tych samych JAR (np. > `apache- commons-aaa` wersja x i wersja y). Wydaje się, że nie ma > trzeciego sposobu. Wiele innych technologii opartych na Javie daje możliwość zmiany > ścieżki klas. Dlaczego nie szturmuje? Aby nieco uogólnić pytanie, dlaczego (klastrowy) framework/kontener oprogramowania Java nie zapewnia mechanizmu dodawania zależnych jarów zależnych od aplikacji, ale zmusza do używania grubych jarów?


title: Jak zarządzasz żądaniami funkcji i zmianami oprogramowania?

text: Jestem inżynierem oprogramowania iw ciągu ostatnich kilku lat zostałem de facto kierownikiem projektu oprogramowania po prostu dlatego, że go nie ma. Aby więc zachować zdrowy rozsądek w dziale badań i rozwoju/inżynierii, klienci przyzwyczaili się do przychodzenia do mnie ze swoimi prośbami. Nie mam doświadczenia w tej dziedzinie, więc po raz pierwszy pełnię funkcję kierownika projektu przy projektach oprogramowania. Zarządzałem innymi rzeczami, ale nie oprogramowaniem. Jak więc zarządzasz projektami oprogramowania i wyznaczasz priorytety? Prośby przychodzą w rzadkich odstępach czasu, więc bardzo dobrze możemy pracować nad czymś dla kogoś innego, a potem przychodzi kolejna osoba z „pośpieszną” pracą, nad którą trzeba popracować. Czy łatwiej jest po prostu powiedzieć „kto pierwszy, ten lepszy”, czy jest to osoba z największą ilością pieniędzy?


title: Jak radzić sobie z nieprawidłowym plikiem zasobów?

text: Uruchamiam parser, który będzie obsługiwał jedną z kluczowych funkcji mojej aplikacji i zdaję sobie sprawę, jak łatwo byłoby mi zepsuć plik zasobów dostarczony do aplikacji. Na przykład prosty zasób, który dostarczam do mojej aplikacji, to plik JSON, który zawiera układ encji (nazwa, powięź, lokalizacja itp.). Byłoby mi łatwo pominąć nazwę jednostki lub błędnie przepisać klucz JSON. Oczywiście katastrofalne niepowodzenia podczas parsowania powinny być rozwiązywane w trybie try/catch, ale w jaki sposób można by poradzić sobie z subtelnymi niepowodzeniami (takimi jak dysleksyjna pisownia imienia)?


title: TDD do przetwarzania wsadowego: jak to zrobić?

text: Lubię „czerwony/zielony/refaktor” dla RoR itp. w porządku. Moja codzienna praca polega na przetwarzaniu wsadowym bardzo dużych plików od stron trzecich w Pythonie i innych niestandardowych narzędziach. Liczba atrybutów tych plików jest wysoka, więc istnieje wiele poprawek/ulepszeń, które są stosowane dość często. Testy regresji przy użyciu znanego zbioru danych testowych z oczekiwanymi wynikami nie istnieją. Najbliżej jest sprawdzenie ostatniej partii z ręcznie zakodowanymi nowymi przypadkami testowymi, upewnij się, że nie wybuchają, a następnie zastosuj kontrolę wyrywkową i testy statystyczne, aby sprawdzić, czy dane nadal wyglądają dobrze. P>> Jak wprowadzić zasady TDD do tego rodzaju środowiska?


title: Czy ASP.NET MVC jest zbyt dużym obciążeniem dla mniejszych projektów?

text: Będę szczery, nie wiem zbyt wiele o MVC poza tym, co można przeczytać online w 5 minut. Niestety to nie mówi mi, czy nadaje się do mniejszych projektów, czy nie. Czytam również to pytanie i wybraną odpowiedź, ale perspektywa biznesowa nie jest dla mnie w tym przypadku problemem, ponieważ jestem jedyną osobą, która to robi. Następna odpowiedź dotyczy tego, dlaczego jest bardziej elastyczny. Jasne, to świetnie. Ale moje pytanie brzmi ponownie, czy jest to idealny wybór dla małego projektu. Na przykład wolę używać winforms do stworzenia prostej makiety małego programu komputerowego niż robić to na WPF z powodu narzutu niestandardowego stylu. Mam więc projekt, który zasadniczo będzie miał około 6-8 stron, które czytają pliki Excela, a dane wejściowe użytkownika wykorzystują je do pobierania danych z baz danych i wyprowadzania wynikowych plików Excela. Będę jedyną osobą pracującą nad tym projektem. Gdybym korzystał z formularzy internetowych, spodziewałbym się, że zajmie to nie więcej niż 2-3 tygodnie. Teraz czuję się w 100% komfortowo z formularzami internetowymi. I wiem, że łatwo jest zrobić mały projekt w formularzach internetowych. Ale słyszałem tylko dobre rzeczy o MVC, więc poważnie się nad tym zastanawiam.


title: Porady dotyczące tworzenia stron internetowych dla rozproszonego zespołu programistycznego

text: Jestem programistą stron internetowych. Pracował w wielu projektach. Teraz zmieniłem miejsce pracy. To duża organizacja. Ja i moja grupa myślimy o nowym projekcie. Nie ma trudności z pisaniem projektu, ale nasza organizacja jest duża i ma małe biura w wielu miejscach (na terenie kraju). Nie ma problemu z internetem w centrum. Ale czasami jest problem z internetem na odległych obszarach. Moje pytanie brzmi: czy istnieje rozwiązanie problemu jako takiego? Jeśli ktoś stworzył taki projekt, proszę niewiele o tym, jakich technologii użyłeś. Dziękuję


title: Komentarze wydziałowe/sekcyjne, dobre czy złe?

text: Znam ogólny trend przeciwko komentarzom wyjaśniającym, jak coś działa i jak dobrym pomysłem jest używanie ich tylko do wyjaśnienia, dlaczego robisz to, co robisz, ale co z używaniem komentarzy jako sposobu na dzielenie kodu? Załóżmy, że masz skrypt, który wykonuje preambułę, przeszukuje kilka rekordów, drukuje rekordy, a następnie zamyka wszystko: // Preambuła ... kod preambuły, powiedzmy około 10-15 wierszy ... // Znajdź rekordy ... zapytanie sql ... ... umieść rekordy w tablicy ... ... inne rzeczy ... // Drukuj rekordy ... drukuj rekordy, 20-30 wierszy rekordu ... // Zamknij wszystko ... Bardziej sposób na wizualne podzielenie kodu, ułatwi odnalezienie określonej sekcji. Na przykład, gdybyś za miesiąc musiał naprawić kod drukowania, zamiast czytać kilkaset linijek, aby znaleźć właściwe miejsce, po prostu spójrz na komentarze, aby zobaczyć, gdzie on jest. Co właściwie dzieje się w każdej sekcji, która jest dość prosta i łatwa do określenia, co się dzieje, **czy takie podejście do komentarzy zostałoby uznane za dobre czy złe**? **Edycja:** Pracuję głównie ze skryptami PHP, gdzie albo nie można wstawić kodu do funkcji, albo jest to niepraktyczne. Jednak to samo dotyczyłoby dużych plików klas, z kilkoma metodami, które wykonują powiązane rzeczy, takie jak gettery/settery, aktualizacje baz danych itp.


title: Testowanie systemów BI (Business Intelligence) na stosie MS

text: Stawiam swoje pierwsze kroki w sektorze Business Intelligence i **Szukam dobrych sposobów na testowanie systemów BI.** Postaram się wyjaśnić na czym polega mój system, aby osoby nieznające systemów BI mogły również w kilku poradach. **Dla tych z Was, którzy nie są zaznajomieni z systemami BI, oto jak system BI zazwyczaj wygląda na stosie MS:** 1. Dane znajdują się w bazach danych MS SQL, plikach tekstowych, plikach XML itp. 2. Dane są umieścić w pojedynczej bazie danych MS SQL DB ( **hurtownia danych** ) przy użyciu pakietu (pakietów) **Sql Server Integration Services (SSIS)**. (ETL, Extract - Transform - Load) 3. „Kostka” zawierająca pomiary, wskaźniki KPI itp. jest przetwarzana w hurtowni danych za pomocą **Sql Server Analysis Services (SSAS)** 4. Raportowanie można zbudować na kostce za pomocą programu Excel , usługi raportowania, itp. **Jest wiele rzeczy, które możesz/powinieneś przetestować:** * Czy dane są poprawnie umieszczane w hurtowni danych * Czy pomiary i obliczenia są wykonane poprawnie Myślę, że środowisko testowe można wykonać w .NET przy użyciu puste bazy danych o takiej samej strukturze jak bazy produkcyjne i hurtownia danych. **Testy można napisać tak:** 1. Wstaw fikcyjne dane do produkcyjnych baz danych, o których wiesz, że powinny dawać określone pomiary, wartości KPI. Na przykład: Wstaw samochód o koszcie 100 i zysku 110 sprzedany w 2008 r. inny samochód o koszcie 100 i zysku 120 sprzedany w 2009 r. narzut w 2008 r. powinien wynosić 10%, aw 2009 r. 20%. 2. Uruchom pakiety SSIS. Sprawdziłem to i jest to możliwe w .net 3. Uruchom obliczenia SSAS. Nadal trzeba sprawdzić, jak to zrobić, ale powinno być to możliwe. 4. Pobierz dane KPI z bazy danych usług Analysis Services i sprawdź, czy są zgodne z oczekiwanymi wynikami. **Pewne wady, jakich spodziewam się po takim podejściu:** 1. Konfiguracja testowych baz danych, zabezpieczenie skryptu testowego,... zajmie trochę czasu. 2. Zmiany w produkcyjnych bazach danych i hurtowni danych będą musiały zostać skopiowane do środowiska testowego. 3. Tworzenie instrukcji wstawiania dla danych testowych może być trudne. W moim przykładzie samochodu jest to proste, ale w przypadku bardziej złożonych obliczeń może to być dość czasochłonne 4. Testy najprawdopodobniej będą działać dość wolno 5. Testy są podatne na błędy, zarówno w instrukcjach INSERT, jak i w części, w której pobierasz dane KPI . Ustalenie, co poszło nie tak, może być trudne. Podsumowując, pisanie **i** utrzymywanie tych testów może być dość czasochłonne. Z drugiej strony masz fajne podejście oparte na testach **, w którym najpierw piszesz test, a Twoja logika biznesowa jest wyjaśniana i dokumentowana w testach. Ponieważ nie mam zbyt dużego praktycznego doświadczenia z rozwojem BI, nie jestem pewien, czy to jest droga do zrobienia i jakie są alternatywy. Może ktoś bardziej doświadczony mógłby wyjaśnić, jak zwykle testuje się i dokumentuje systemy BI?


title: Lista kontrolna, aby uniknąć uzależnienia od dostawcy?

text: Czy istnieje zestaw zatwierdzonych w branży reguł, aby uniknąć uzależnienia od dostawcy? Mam na myśli coś, co można pokazać menedżerowi lub innemu decydentowi, co jest łatwe do zrozumienia i łatwe do zweryfikowania. * Czy istnieje jakiś powszechnie akceptowany zestaw reguł, list kontrolnych lub warunków, które pomagają wykrywać i zapobiegać uzależnieniu od dostawcy w obiektywny i mierzalny sposób? * Czy ktoś z was ostrzegł kierownika o ryzyku zablokowania dostawcy na początkowych etapach projektu?


title: Dlaczego Cem Kaner uważa test niewykrywający błędu za stratę czasu?

text: Co powiesz na potwierdzenie funkcjonalności w pozytywnych testach, udowodnienie, że działa – czy powinienem powiedzieć, że to strata czasu? Jaka koncepcja kryje się za tym cytatem? > Nieudane testy, czyli testy, które nie znajdują błędów to strata czasu. Web Engineering: The Discipline of Systematic Development of Web Applications, cytując Cema Kanera.


title: Jak ludzie zarabiają na pisaniu języków programowania?

text: Dlaczego ktoś w ogóle spróbuje napisać język programowania? Wydaje się, że jest to żmudne zadanie, a alternatywa (po prostu użycie istniejącego języka) wydaje się mieć znacznie bardziej ekonomiczny sens. Microsoft może zatrudnić ludzi do pisania .NET, ponieważ mają zbyt dużo wolnych pieniędzy do spalenia. Ale dlaczego ktokolwiek miałby pisać język, jeśli nie jest za to opłacany?


title: Jak usunąć plik .tmp w fileupload struts2?

text: Użyłem `file-upload` (wspólny fileuplod) w `strtus-2.3.15.3` . W moim `.jsp` jest jeden formularz z wieloma polami z wieloma typami różnic (pole tekstowe,obszar tekstowy,ukryty,plik), w tym `PLIK` i oczywiste `PRZEŚLIJ`. Kiedy przesyłam formularz, wybierając jeden plik i wpisując tekst we wszystkich innych polach, wygenerowany plik `.tmp` we wspomnianym folderze temp . Tylko plik `.tmp` związany z polem pliku zostanie usunięty po przesłaniu mojego pliku do mojego folderu, ale reszta pliku `.tmp` (o rozmiarze 1kb) pozostanie jako jego . Elementy listy = upload.parseRequest(servletRequest); Ta linia w poniższym kodzie generuje plik `.tmp` dla wszystkich pól, które mają jakąś wartość (jeśli nie wprowadzisz żadnego tekstu w polu tekstowym, nie zostanie on wygenerowany). `MonitoredMultiPartRequest.java` **:** public void parse(HttpServletRequest servletRequest, String saveDir) zgłasza IOException { System.setProperty("java.io.tmpdir", "D:\\ankit"); Listener UploadListener = nowy UploadListener(servletRequest); // Utwórz fabrykę dla elementów plików na dysku FileItemFactory factory = new MonitoredDiskFileItemFactory(listener); // Utwórz nowy program obsługi przesyłania plików ServletFileUpload upload = new ServletFileUpload(factory); } `MonitoredDiskFileItemFactory` : public class MonitoredDiskFileItemFactory rozszerza DiskFileItemFactory { żądanie HttpServletRequest; public MonitoredDiskFileItemFactory (odbiornik OutputStreamListener, żądanie HttpServletRequest) { this.listener = null; this.listener = słuchacz; this.request = żądanie; setTrackery(); } public void setTrackers() { FileCleaningTracker fileCleaningTracker = FileCleanerCleanup.getFileCleaningTracker(request.getServletContext()); Repozytorium plików = new File(System.getProperty("java.io.tmpdir")); Fabryka DiskFileItemFactory = nowa fabryka DiskFileItemFactory(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD, repozytorium); factory.setFileCleaningTracker(fileCleaningTracker); super.setFileCleaningTracker(fileCleaningTracker); super.setRepository(repozytorium); } public MonitoredDiskFileItemFactory(int sizeThreshold, repozytorium plików, odbiornik OutputStreamListener) { super(sizeThreshold, repozytorium); this.listener = null; this.listener = słuchacz; } public FileItem createItem(String fieldName, String contentType, boolean isFormField, String fileName) { MonitoredDiskFileItem result = new MonitoredDiskFileItem(fieldName, contentType, isFormField, fileName, getSizeThreshold(), getRepository(), listener); FileCleaningTracker tracker = getFileCleaningTracker(); if (tracker != null) { tracker.track(result.getTempFileOfDistFileItem(), wynik); } zwraca wynik; } prywatny odbiornik OutputStreamListener; } `MonitoredDiskFileItem` : public class MonitoredDiskFileItem extends DiskFileItem { public MonitoredDiskFileItem(String fieldName, String contentType, boolean isFormField, String fileName, int sizeThreshold, File Repository, OutputStreamListener listener) { super(fieldName, contenttoryType, isFormFi ; mos = null; this.listener = słuchacz; } public OutputStream getOutputStream() wyrzuca IOException { if (mos == null) mos = new MonitoredOutputStream(super.getOutputStream(), listener); powrót mos; } plik publiczny getTempFileOfDistFileItem() { return super.getTempFile(); } private MonitoredOutputStream mos; prywatny odbiornik OutputStreamListener; } `UploadListener` : public class UploadListener implementuje OutputStreamListener, Serializable { private static final long serialVersionUID = 1L; private int totalToRead = 0; private int totalBytesRead = 0; prywatne int procent wykonania = 0; prywatny int previou_percentDone = 0; prywatna długa prędkość wysyłania = 0; prywatny długi czas rozpoczęcia; prywatny długi stTime, EndTime; Sesja HTTPSession; liczba prywatnych int = 0; public UploadListener(żądanie HttpServletRequest) { totalToRead = request.getContentLength(); sesja = request.getSession(); } public void start() { session.setAttribute("percentageDone", 0); session.setAttribute("prędkość", 0); starttime = System.currentTimeMillis(); stTime = czas rozpoczęcia; } public String getMessage() { return "" + totalBytesRead + " przeczytanych bajtów (" + percentDone + "% zrobionych)"; } public void bytesRead(int bytesRead) { totalBytesRead = totalBytesRead + bytesRead; if (100,00 * totalBytesRead > totalToRead) { previou_percentDone = percentDone; percentDone = (int) Math.round(100,00 * totalBytesRead / totalToRead); if (previou_percentDone < percentDone) { długa prędkość = 0; spróbuj { double TimediffInSecond = (System.currentTimeMillis() - czas rozpoczęcia) / 1000; if (TimediffInSecond > 0) speed = Math.round(((totalBytesRead) / TimediffInSecond)/1048576); w przeciwnym razie prędkość = totalBytesRead / 1048576; } catch (Wyjątek e) { System.err.println(e.getMessage()); } } } } public void done() { EndTime = System.currentTimeMillis(); session.setAttribute("percentageDone", 100); session.setAttribute("prędkość", 100); } @Override public void error(String message) { // System.out.println(message); } public long getUploadspeed() { return uploadspeed; } public void setUploadspeed(long uploadspeed) { this.uploadspeed = uploadspeed; } } `EDIT` **:** 1> Dlaczego ten plik `.tmp` jest generowany dla pól (textarea ,hidden,textfield) . Jak możemy temu zapobiec? 2> chcę przestać generować plik `.tmp` dla wszystkich pól z wyjątkiem `type='file'`(pole pliku) . 3> W przeciwnym razie, jak mogę usunąć cały plik `.tmp`?


title: Prawidłowa odpowiedź na wstawkę REST - pełny nowy rekord, czy tylko wartość identyfikatora rekordu?

text: Buduję API REST, które umożliwia wstawianie (POST, nie idempotent) i aktualizacje (PUT, idempotent) żądań w celu dodania/aktualizacji bazy danych do naszej aplikacji. Zastanawiam się, czy istnieją jakieś standardy lub najlepsze praktyki dotyczące tego, jakie dane odsyłamy do klienta w odpowiedzi na operację POST (insert). Musimy odesłać co najmniej wartość identyfikatora rekordu (np. Twój nowy rekord to rekord nr 1234). Czy powinniśmy odpowiedzieć pełnym obiektem? (np. zasadniczo taka sama odpowiedź, jaką otrzymaliby z żądania „GET /object_type/1234”) Czy powinniśmy odpowiedzieć, podając tylko nową wartość identyfikatora? (np. „{ id: 1234 }”, co oznacza, że jeśli chcą pobrać cały rekord, muszą wykonać dodatkowe żądanie HTTP GET, aby pobrać pełny rekord) Nagłówek przekierowania wskazujący adres URL pełnego obiektu? Coś zupełnie innego?


title: Co oznacza „wada słońca” i czym różni się od bardziej ogólnego „syndromu NIH”?

text: Słyszę, jak ludzie mówią o „wady słońca”, często podając jako przykład cały bałagan wokół wyrębu. Czym różni się od syndromu nie-wymyślonego-tu, czyli bezużytecznego powielania dotychczasowej pracy?


title: Czy Python jest odpowiedni dla aplikacji do modelowania statystycznego, która przeszukuje tysiące przeszłych zdarzeń?

text: Obecnie pracuję nad projektem z partnerem, w którym analizujemy duże zbiory danych dotyczących minionych wydarzeń sportowych. Rocznie odbywa się około 30 000 wydarzeń i dysponujemy danymi historycznymi z pięciu lat. W związku z tym patrzymy na analizę 150 000 zdarzeń. Napisałem naszą pierwszą wersję w Pythonie, mocno opierając się na Pandach (nawiasem mówiąc, świetne narzędzie). Jednak za każdym razem, gdy dodaję „czynnik” lub obliczenie do procesu, spowalnia to trochę. Mówiąc najprościej, może odczytywać wszystkie potrzebne nam pliki danych i zapytania o dane z szybkością 25 zdarzeń na sekundę. Problem polega na tym, że gdy zaczynam pracę z danymi, szybko spadają. Jeśli dodam proste obliczenie, spadnie do 24... a każde następne obliczenie spadnie ponownie. Przy zaledwie 10-12 „czynnikach” obliczonych na podstawie danych (nie mówimy o skomplikowanych pętlach ani niczym szalonym), teraz sprowadza się do 6 zdarzeń na sekundę. ...i ledwo drapiemy powierzchnię. W tym tempie zajmie to kilka dni, aby przejść przez wszystkie 150 000 wydarzeń! Zoptymalizowałem nasze zapytania o dane, odczyty plików płaskich itp. To naprawdę nie jest problem. Mogę żyć z robieniem 15-20 zdarzeń na sekundę. Jednak nie mogę żyć z tak drastycznym spowolnieniem za każdym razem, gdy dodawany jest nowy współczynnik. Dużo czytałem, gdzie Python jako język interpretowany jest powolny itp., ale moje pytanie do ekspertów - w jakim języku powinien być wykonany ten projekt? **PRZYKŁAD...** Jeden z kluczy DataFrames, których używam w Pandas, jest dość duży. Jako przykład 350 wierszy x 70 kolumn. Nawet próbując po prostu pomnożyć wartość jednej kolumny przez inną... data['value'] = data['col1'] * data['col2'] ... Widzę, co można uznać za znaczny spadek wydajności. To bardzo zagadkowe i bardzo frustrujące. Rozumiem, że jest to duży zestaw danych, ale nie mogę uwierzyć, że jest to coś tak szalonego, że Python zwalniałby do indeksowania. Jeśli po prostu czytam pliki danych i nie robię na nich żadnych obliczeń, odczytuje 67 zdarzeń w 2.807 sekundy. Jeśli dodam jedno proste obliczenie, w którym wykonuję kod, jak w powyższym przykładzie, spowalnia on do 2,877 sekundy. W oparciu o nasze badania, musimy dodać ponad 100 obliczeń na danych… więc 7 sekund wartych spowolnienia? Zbyt trudno w to uwierzyć.


title: Tworzę aplikację na iPhone'a - czy ma znaczenie, którego iPhone'a kupię?

text: To podstawowa aplikacja - nic nadzwyczajnego (tj. nie gra) Mam możliwość zakupu iPhone'a 5 iPhone'a 5c iPhone'a 5s Zastanawiam się tylko, czy ma znaczenie, który iPhone kupię, aby przetestować moją aplikację, czy powinienem wybrać najpopularniejsze? Myślę, że prawdziwe pytanie brzmi, czy ludzie widzą jakieś błędy w oparciu o typ telefonu (mniej o typ systemu operacyjnego).


title: Czy IoC jest wykonalne w winformach?

text: Wracam do świata wininform po pewnym czasie spędzonym w świecie sieci. Czy programiści używają IoC w programie winform powszechnie lub w inny sposób wykonalny? Martwię się głównie o wydajność. Wyobrażam sobie, że będę musiał "bootstrap" lub zainicjować wszystkie moje odwrócone elementy, które są wymagane przez daną instancję formularza podczas inicjalizacji formularza. Jeśli ta inicjalizacja stanie się kosztowna, mogę przenieść zadanie do wątku, ale wymaga to przywrócenia utworzonych obiektów z powrotem do głównego wątku, w którym będą używane w pewnym momencie.


title: Jak dopasować wymagania do MVC?

text: Załóżmy, że mamy wymaganie dotyczące witryny, aby umożliwić użytkownikom funkcjonalność. Prosty! Tworzymy UserModel, UserController i UserView. Działa świetnie. Załóżmy jednak, że użytkownik ma podłączoną relacyjną tabelę „wiele do jednego” o nazwie „Child”, która również posiada własne komponenty MVC: ChildModel, ChildController, ChildView. Teraz, gdybyśmy mieli wymóg utworzenia pliku CSV do pobrania zawierającego kilka szczegółów z „Użytkownika” i kilka szczegółów z jego „Potomka”, jak moglibyśmy zaprojektować to wymaganie? „DownloadCSV” może zasadniczo mieć własne metody CRUD, własny kontroler, własny widok, ale jego model jest oparty na szczegółach z innych tabel, więc powinien mieć swój własny kontroler, widok, model (/DB View) lub po prostu być inną metodą niż CRUD w kontrolerze `User` lub `Child`?


title: Jakie są korzyści z używania abstrakcji bazy danych przez ORM?

text: Zaczynam używać ORM zalecanego przez wybrany przeze mnie framework i chociaż podoba mi się pomysł dodatkowej warstwy abstrakcji, którą zapewnia ORM, zaczynam zdawać sobie sprawę, co to naprawdę oznacza. Oznacza to, że nie pracuję już z moją bazą danych (mysql) i wszelkie specyficzne dla mysql funkcje zniknęły przez okno, jakby nie istniały. Ideą ORM jest to, że próbuje mi pomóc, czyniąc wszystko agnostycznym względem bazy danych. Brzmi świetnie, ale często jest powód, dla którego wybieram konkretny system baz danych. Ale idąc drogą niezależną od bazy danych, ORM przyjmuje najniższy wspólny mianownik, co oznacza, że mam najmniejszy zestaw funkcji (obsługiwanych przez wszystkie bazy danych). Co jeśli wiem, że na dłuższą metę nie będę przełączać bazowej bazy danych? Dlaczego nie uzyskać również dostępu do funkcji specyficznych dla bazy danych?


title: Projekt ogólnego synchronizatora danych lub [obiektu], który wykonuje [akcje] z pomocą [pomocników]

text: Chciałbym utworzyć ogólny „synchronizator” źródeł danych, w którym „typy” źródeł danych mogą obejmować między innymi bazy danych MySQL, dokumenty arkuszy kalkulacyjnych Google, pliki CSV. Próbowałem wymyślić, jak to ustrukturyzować pod względem klas i interfejsów, pamiętając (o czym czytałem) kompozycja vs. dziedziczenie i is-a vs. has-a, ale każdą trasę, którą przechodzę wydaje się naruszać jakąś zasadę. _Dla uproszczenia załóżmy, że wszystkie źródła danych mają format nagłówek-wiersz-wiersz-danych. Na przykład załóżmy, że pierwsze wiersze dokumentów Arkuszy kalkulacyjnych Google i plików CSV będą miały nagłówki kolumn, czyli „pola” (do równoległych pól bazy danych).__Ponadto chciałbym zaimplementować to w PHP, ale unikając specyficznych dyskusja prawdopodobnie byłaby bardziej produktywna._ Oto przegląd tego, czego próbowałem. * * * # Część 1/4: Klasa ISyncable CMySQL implementuje ISyncable GetFields() // zapytanie sql, instrukcja pdo, cokolwiek AddFields() RemFields() ... _dbh klasa CGoogleSpreadsheets implementuje ISyncable GetFields() // zend gdata api AddFields( ) RemFields() ... _spreadsheetKey _worksheetId klasa CCsvFile implementuje ISyncable GetFields() // odczyt z bufora AddFields() RemFields() ... _buffer interface ISyncable GetFields() AddFields($field1, $field2, ...) RemFields( $field1, $field2, ...) ... CanAddFields() // może arkusz kalkulacyjny jest zablokowany do zapisu lub CanRemFields() // może nie ma uprawnień do zmiany tabeli bazy danych ... AddRow() ModRow() RemRow () ... Otwórz() Zamknij() ... **F pierwsze pytanie:** Czy ma sens używanie interfejsu, jak powyżej? * * * # Część 2/4: CSyncer Następnie _rzecz, która wykonuje synchronizację_. class CSyncer __construct(ISyncable $A, ISyncable $B) Push() // synchronizacja A z B Pull() // synchronizacja B z A Sync() // Push() i Pull() różnią się tylko kierunkiem; czynnik. // Zadaniem Sync() jest upewnienie się, że pola po każdej stronie // pasują, dodawanie pól tam, gdzie jest to właściwe i możliwe, // uwzględnianie różnych porządków kolumn itp. i oczywiście // dodawaj i usuwaj wiersze w razie potrzeby do synchronizacji. ... _A _B **Drugie pytanie:** Czy ma sens definiowanie takiej klasy, czy też zbliżam się niebezpiecznie do „Królestwa Rzeczowników”? * * * # Część 3/4: Tłumacz? Tłumacz? Oto, gdzie właściwie się gubię, zakładając, że powyższe jest zadowalające. Czasami dwa `ISyncable`s mówią różnymi „dialektami”. Możesz na przykład wierzyć lub nie, ale arkusze kalkulacyjne Google (dostępne za pośrednictwem „kanału z listą danych” interfejsu API danych Google) zwracają nagłówki kolumn _małe litery i pozbawione wszystkich spacji i symboli_! Oznacza to, że `sys_TIMESTAMP` to `systimestamp`, o ile mój kod może to stwierdzić. (Tak, zdaję sobie sprawę, że „zasilanie komórkami” nie obnaża nazwy; jednak manipulacja komórka po komórce jest zbyt powolna w stosunku do tego, co robię.) Można sobie wyobrazić inne hipotetyczne przykłady. Być może nawet same dane mogą być w różnych „dialektach”. Ale przyjmijmy na razie to, co podano, i nie dyskutujmy z tym, jeśli to możliwe. **Trzecie pytanie:** Jak _ty_ zaimplementować „tłumaczenie”? Uwaga: traktując to wszystko jako ćwiczenie, bardziej interesuje mnie „wyidealizowany” projekt niż praktyczny. (Bóg wie, że _to_ wypłynęło, gdy zacząłem ten projekt.) * * * # Część 4/4: Dalsze myślenie Oto mój ciąg myśli, aby zademonstrować, że myślałem, aczkolwiek bezowocnie: 1. Najpierw pomyślałem prymitywnie: „Ja po prostu zmodyfikuje `CMySQL::GetFields()` tak, aby nazwy pól były pisane małymi literami i usuwały je, aby były zgodne z Arkuszami kalkulacyjnymi Google." Ale oczywiście wtedy moja klasa powinna naprawdę nazywać się „CMySQLForGoogleSpreadsheets”, a to nie może być właściwe. 2. Tak więc _rzecz, która tłumaczy_ musi istnieć poza implementatorem `ISyncable`. 3. I z pewnością nie może być właściwe, aby każde tłumaczenie było metodą w `CSyncer`. 4. Jeśli istnieje poza „ISyncable” i „CSyncer”, to co to jest? (Czy to nawet _"to"_?) 5. Czy jest to klasa abstrakcyjna, tj. `abstract CTranslator`? 6. Czy jest to interfejs, skoro tłumacz tylko _robi_ , a nie _ma_ , czyli `interfejs ITranslator`? 7. Czy to w ogóle wymaga tworzenia instancji? np. Jeśli jest to `ITranslator`, to czy jego metody tłumaczenia powinny być `statyczne`? (Dzisiaj dowiedziałem się, co oznacza „późne wiązanie statyczne”.) I, drogi Boże, cokolwiek to jest, jak powinien _używać_ tego `CSyncer`? Czy to „ma”? Czy _to_, _"to"_? Kim jestem? ...czy jestem "ja"? * * * Próbowałem podzielić pytanie na pytania podrzędne, ale zasadniczo moje pytanie jest pojedyncze: **Jak zaimplementować obiekt `A`, który koncepcyjnie „łączy” ( _ma_ ) dwa obiekty `b1` i ` b2` które mają wspólny interfejs `B`, ale gdzie pewne pary `b1` i `b2` wymagają helpera, np. tłumacz, który ma zająć się „A”?** Coś mi mówi, że zbyt skomplikowałem ten projekt lub złamałem zasadę znacznie wyżej. Bardzo dziękuję wszystkim za poświęcony czas i wszelkie porady.


title: Czy powinieneś spisać listę problemów, czy naprawiać problemy w miarę ich pojawiania się?

text: Zaobserwowałem dziwny trend w firmie, w której pracuję. Są ludzie, którzy upierają się, że powinna istnieć lista zadań. Szacują te zadania, realizują je i starają się wywiązywać ze swoich zobowiązań. Jednak podczas kodowania wymagania prawdopodobnie ulegną zmianie. Priorytety się zmieniają, zadania zwiększają się lub zmniejszają, a zakres może się po prostu zmienić, powodując, że cała praca zostanie odrzucona. A potem jest inny zespół, który rozwiązuje problemy i naprawia je w miarę ich pojawiania się. Nie ma szacunków, nie ma priorytetów, nie ma ustalonych terminów, a deklaracje misji dla sprintów brzmią mniej więcej tak: „Napraw błędy w [tu wstaw nazwę podsystemu]”. Jaki jest właściwy sposób na bycie zwinnym, gdy masz techniczne sprinty, które koncentrują się tylko na stabilizacji systemu? Czy powinieneś spróbować zebrać listę problemów, aby je zmienić, czy też spróbować naprawić na bieżąco, nie mówiąc, kiedy skończysz?


title: A* wyszukaj Sudoku

text: Mam problem z pracą domową z kursu Sztucznej Inteligencji, na który nie mogę odpowiedzieć. > Rozważ rozwiązanie problemu Sudoku za pomocą wyszukiwania A*. Stan początkowy ma > pewną liczbę wypełnionych komórek, a następcy każdego stanu są > legalnymi sposobami wypełnienia dodatkowej komórki. W każdej chwili dokładnie wiemy > liczbę komórek, które pozostały do wypełnienia. > > Zatem, jeśli K komórek pozostaje do wypełnienia w węźle n, wiemy, że h(n) = K. > Zatem jeśli ustawimy naszą funkcję heurystyczną h(n) na h(n)=K, będziemy mieli > doskonała wiedza heurystyczna w A. > > Wyjaśnij błąd w powyższym stwierdzeniu. Rozumiem, że ta heurystyka jest całkowicie bezcelowa, ponieważ gdyby istniała jakaś funkcja, która mogłaby znaleźć następców prawnych, równie dobrze można by przeprowadzić najpierw głębokie wyszukiwanie, ale co dokładnie jest nie tak z powyższym stwierdzeniem.


title: Wstępny test kodowania – Jak długo jest rozsądny?

text: **EDYTUJ** Po sporej ilości przemyśleń i autorefleksji na ten temat, zdałem sobie sprawę, że większość kwestii, które podniosłem w tym pytaniu, pochodziła tylko z osobistej, a nie zawodowej perspektywy. Stąd moderatorzy odłożyli to pytanie ze względu na wysoce osobisty, subiektywny charakter problemu, o którym starałem się mówić. Myślałem o przeformułowaniu pytania, ale tak naprawdę nie mogłem znaleźć sposobu, aby zamanifestować pytanie w bardziej obiektywny sposób, aby mogło być przedmiotem dyskusji, w której odpowiedzi mogą być poparte pewnymi dowodami lub odniesieniami. W trosce o tych, którzy są jeszcze zainteresowani, postaram się podsumować dyskusję, która wyłoniła się z tego pytania: * 4 godzinny wywiad wstępny, test programowania offsite nie jest zwykły ale * wiele osób zwróciło uwagę, że dla niektórych firm przeprowadzilibyście rozmowę kwalifikacyjną znacznie dłużej * to nasza osobista decyzja, czy przystępujemy do testu, czy nie, i możemy to ocenić w oparciu o nasze okoliczności i postrzegane korzyści z zatrudnienia w firmie * wszystkie firmy są różne , tak jak ludzie, i może być całkowicie rozsądne, aby firma zastosowała dłuższy test przed rozmową kwalifikacyjną poza siedzibą, jeśli odpowiada to ich potrzebom lub okolicznościom, chciałem, aby moje pierwotne pytanie dotyczyło tego, jak _rozsądnie_ jest oczekiwać ode mnie 4 godzin, i jak _etycznie_ podać problem, aby rozwiązanie (nie kod, ale projekt) mogło być wykorzystane w firmie. Jak teraz widzę, oba te pytania można (w najlepszym razie) zbadać tylko na forum, zamiast używać narzędzia społecznościowego typu pytanie-odpowiedź, takiego jak stackexchange. Jednak uważam, że wszystkie twoje odpowiedzi są cenne i dziękuję za udostępnienie. **ORIGINAL POST** Przeprowadzam rozmowę kwalifikacyjną na kilka stanowisk, a większość z nich obejmuje fazę pre-screeningu, w której muszę przedłożyć test z kodowania przed rozmową telefoniczną lub na miejscu. Przyzwyczaiłem się do tego pomysłu i wydaje mi się całkiem rozsądne, że firmy oczekują ode mnie tego, aby mogły sprawdzić, jaki rodzaj pracy mogę wykonać samodzielnie. Generalnie z mojego doświadczenia wynika, że tego typu ćwiczenia z kodowania są w większości małymi zadaniami programistycznymi. Zrób trochę logiki, może zaimplementuj mały algorytm, otwórz plik i odczytuj/zapisuj dane, takie tam. Nawet najprostsze zadanie można zrealizować z ładnym oddzieleniem logiki, testowalnych komponentów itp., aby zobaczyć, jak kandydat koduje, ogólnie jak dobrze jest przygotowany do rodzaju pracy, jaką chce wykonywać firma. Ostatnio natknąłem się na firma, która wysłała mi test kodowania z całym opisem swojego ćwiczenia, prosząc mnie o rozwiązanie rzeczywistego problemu w ich biznesie (nie chcę mówić konkretów, aby chronić firmę, ale test dotyczył głównie tego, co robią). Opisali dość skomplikowany system do wdrożenia, uwzględnili rzeczywiste dane i na koniec doszli do wniosku, że test kodowania nie powinien zająć więcej niż **4 godziny**. Czy to rozsądne ze strony firmy oczekiwać, że spędzę 4 godziny pracując nad ich fikcyjnym zadaniem w wolnym czasie, nawet zanim się ze mną przywitają? (rekruter przesłał mi test z kodowania) Nie zrozum mnie źle, jestem zmotywowany do szukania nowej pracy i nowych wyzwań, ale większość firm oczekuje, że na takie zadanie spędzę maksymalnie 1-2 godziny, a takie zadania zawsze była znacznie mniej skomplikowana. Doszedłem do wniosku z tą firmą, że albo: 1) moja motywacja nie jest dobra i prawdopodobnie szukają kogoś innego 2) nie szanują swoich przyszłych pracowników, oczekując tak długich testów kodowania nawet bez mówienia cześć 3) Chcą tylko ujawnić jeden z problemów, nad którymi pracują i zobaczyć, czy jest entuzjastyczny młody facet, który rozwiązałby go za nich za darmo (znowu, nie zrozum mnie źle Nie jestem teoretykiem spiskowym ale słyszałem takie historie ...) Jak myślisz, jak bardzo firma powinna oczekiwać, że kandydaci spędzają czas na testach z kodowania fikcyjnego bez rozmawiania z nimi? Jakie jest twoje ogólne doświadczenie?


title: Jaki jest związek między strukturami danych a algorytmami?

text: Szukałem dobrego kursu online w zakresie struktur danych, ale odkryłem, że Google zwraca również wyniki kursów algorytmów, które mówią takie rzeczy jak: > W tym kursie poznasz kilka podstawowych zasad algorytmu > projektowanie: metody dziel i zwyciężaj , algorytmy grafowe, **dane praktyczne > struktury (sterty, tablice mieszające, drzewa wyszukiwania)** , algorytmy randomizowane i > więcej. [źródło] i > Pod koniec tej lekcji zrozumiesz kluczowe pojęcia potrzebne do opracowania > nowych algorytmów dla wykresów **i innych ważnych struktur danych** oraz > oceny efektywności tych algorytmów. [źródło] oraz > Ten kurs stanowi wprowadzenie do matematycznego modelowania > problemów obliczeniowych. Obejmuje popularne algorytmy, > paradygmaty algorytmiczne, **i struktury danych używane do rozwiązywania tych problemów**. [źródło] Moje pytanie brzmi: czy algorytmy i struktury danych są ściśle powiązane, co oznacza, że muszą być rozumiane razem, czy też jeden temat jest bardziej fundamentalny od drugiego? _EDIT: Dla tych, którzy głosują, aby zamknąć to pytanie, czy możesz mi powiedzieć, dlaczego i może jak ulepszyć to pytanie? Nauka zadawania właściwych pytań jest częścią procesu edukacyjnego._


title: Zarządzanie wydaniami za pomocą Azure i Visual Studio Online (Cloud TFS)

text: Jakiej strategii użyjesz do zarządzania zwalnianiem oprogramowania z wersjami w usługach w chmurze platformy Azure (role sieci Web i proces roboczy)? Nie szukamy ciągłej integracji. Korzystamy z Visual Studio 2013 i Visual Studio Online (Cloud TFS). W pewnym momencie zwalnialiśmy bezpośrednio z programu Visual Studio za pomocą narzędzia Azure Cloud Project Publish. Moim zdaniem jest to naprawdę zła praktyka, ponieważ nigdy nie możesz być pewien, co tak naprawdę uwalniasz. Ponadto nie ma zautomatyzowanej kontroli nad etykietowaniem lub rozgałęzieniem kodu, ani też przeprowadzaniem testów jednostkowych i sprawdzaniem analizy kodu. Następnie zastosowaliśmy kompilacje Release w Visual Studio Online. Przed wdrożeniem należy edytować odpowiednią definicję kompilacji (niezależnie od tego, czy jest to testowa, czy produkcyjna przez i wypełniając etykietę kodu (pod właściwością kompilacji "Pobierz wersję"), która ma zostać wydana. W ten sposób uzyskany zostanie odpowiedni kod (przez określoną etykietę), skompiluj ją i zwolnij w dowolnej usłudze w chmurze, która jest określona w docelowym profilu projektu Cloud (jest to przy użyciu szablonu AzureContinuousDeployment.11.xaml).Nadal istnieje pewien stopień ręcznej interwencji.Ponadto fakt że wersja kodu jest budowana za każdym razem przed wydaniem, nie jest idealna (o ile rozumiem, byłoby lepiej, gdyby została spakowana raz).Narzędzia Microsoft Release Management wyglądają idealnie do pracy, ale nie są obsługiwane przez Visual Studio Online Czy istnieje lepszy sposób obsługi naszych wydań?


title: Zapisane role dyrektora ds. technologii

text: Kontynuacja tego pytania: Zapisane role kierownika ds. rozwoju oprogramowania Jaka jest rola i obowiązki dyrektora ds. technologii, gdy jest dobrze zrobione, ze szczególnym uwzględnieniem tego, jak może to odnosić się do programisty z aspiracjami na tego rodzaju stanowisko? (Powód, dla którego warto zapytać – jest to jeden potencjalny kierunek kariery dla programistów, którzy chcą odejść od roli czysto praktycznej, a dla tych z tego rodzaju ambicjami warto wiedzieć, co to właściwie oznacza).


title: Konwertowanie asynchronii opartej na zdarzeniach na asynchroniczną C#5

text: Obecnie mamy interfejs dla asynchronicznego dekodera wideo, który działa we własnym wątku. Zasadniczo dostarczasz mu trochę danych i ostatecznie oddzwoni do ciebie w swoim wątku przez niektóre zdarzenia, takie jak (nie prawdziwy kod): interface IDecoder { void Decode(parameters); Event FrameReady; Zrzucono ramkę zdarzenia; // wiele innych możliwości } Jest trochę niechlujny i chciałbym go przekonwertować na wersję C#5, asynchroniczną, coś takiego: interface IDecoder { async Task<DecodeResult> DecodeAsync(parameters); } Gdzie DecodeResult będzie zawierał wszystkie informacje, które w innym przypadku byłyby przesyłane przez zdarzenia, a kod klienta może być napisany czysto za pomocą async/await zamiast bałaganu z obsługą zdarzeń i rozsyłaniem wątków. Rozumiem, że zadania są domyślnie zaplanowane w puli wątków. Chcemy, aby wszystkie operacje Decode odbywały się sekwencyjnie w pojedynczym wątku specyficznym dla dekodera. Czy można to osiągnąć za pomocą zadań, jeśli tak, to w jaki sposób? Czy zadania są w ogóle odpowiednie do tego celu, czy może brakuje mi bardziej oczywistego wzorca?


title: Korzystanie z kropki w celu uzyskania dostępu do atrybutu obiektu i właściwej abstrakcji

text: Programuję w Pythonie i Javie od wielu lat i jedną rzeczą, którą robię, jest używanie seterów i getterów z Javy w Pythonie, ale wiele blogów wydaje się myśleć, że używanie notacji kropkowej do dostępu jest sposobem Pythona. Chciałbym wiedzieć, czy używanie kropki w celu uzyskania dostępu do metod nie narusza zasady abstrakcji? Jeśli na przykład zaimplementuję atrybut jako pojedynczy obiekt i użyję notacji kropkowej do uzyskania dostępu, gdybym chciał później zmienić kod, aby atrybut był reprezentowany przez listę obiektów, wymagałoby to dość dużego wysiłku, co narusza zasadę abstrakcji.


title: Projektowanie wyjątków dla niepowodzeń konwersji

text: Załóżmy, że istnieją metody konwersji z „X” na „Y” i odwrotnie; konwersja może w niektórych przypadkach zakończyć się niepowodzeniem i w takich przypadkach stosowane są wyjątki do sygnalizowania błędów konwersji. Która opcja byłaby najlepsza do zdefiniowania klas wyjątków w tym kontekście? 1. Pojedyncza klasa `XYConversionException` z _atrybutem_ (np. `enum`) określającym _kierunek konwersji_ (np. `ConversionFromXToY`, `ConversionFromYToX`). 2. Klasa `XYConversionException` z dwiema _klasami pochodnymi_ `ConversionFromXToYException` i `ConversionFromYToXException`. 3. Klasy `ConversionFromXToYException` i `ConversionFromYToXException` _bez_ klasy bazowej _common_.


title: Czy biblioteki statyczne C są mile widziane?

text: Istnieją 2 argumenty za posiadaniem bibliotek współdzielonych: 1. Pomaga zmniejszyć miejsce na dysku. 2. Gdy biblioteka współdzielona jest aktualizowana, wszystkie pliki binarne w zależności od niej otrzymują aktualizację. Biblioteki współdzielone mają głównie jedną wadę: * Mogą (mogą) wprowadzać piekło zależności. * * * Na komputerach stacjonarnych pierwsza przewaga nie ma już większego znaczenia. W dzisiejszych czasach marnowanie miejsca na dysku nie stanowi większego problemu. Posiadanie statycznych plików binarnych pozwoliłoby nam na uzyskanie lepszych menedżerów pakietów -- to znaczy, piekło zależności byłoby przeszłością. Dodanie programu byłoby po prostu dodaniem pliku binarnego; w końcu folder, aby mógł obsłużyć swoje pliki. Usunięcie programu byłoby po prostu usunięciem tego pliku. Zależności? Odszedł. Druga przewaga nadal istnieje, ale myślę, że przewaga statycznych plików binarnych na komputerach stacjonarnych przeważa nad tym. Mam na myśli, że nawet nowe języki, takie jak Go, kompilują wszystkie swoje pliki binarne pomimo zalet bibliotek współdzielonych, ze względu na wygodę. * * * Skoro jedna z głównych zalet bibliotek dzielonych nie jest już wielkim problemem, czy statyczne biblioteki C są nadal mile widziane? Jeśli tak, dlaczego?


title: Proces rozwoju Ruby on Rails

text: Jesteśmy małym zespołem, który wkrótce rozpocznie opracowywanie zlokalizowanej wersji popularnej amerykańskiej aplikacji internetowej w Korei przy użyciu RoR. Nasze pytanie brzmi: jaki proces poleciłbyś, abyśmy zastosowali przy tworzeniu aplikacji? Czy powinniśmy zacząć od modeli danych? Widoki w HTML, a następnie je zakodować? Wziąć jedną funkcję, rozwinąć ją, a następnie w razie potrzeby dodać kolejne? Kilka dodatkowych szczegółów na temat projektu: 1. jest to aplikacja internetowa dla właścicieli małych firm 2. zawiera zwykłe funkcje zarządzania dokumentami administracyjnymi dla użytkowników w crm-reporting-dashboard, które ma zwykle większość małych aplikacji biznesowych 3. wielkość zespołu jest początkowo 2 osoby: programista i projektant/guru CSS (tylko jeden programista) 4. poziom doświadczenia jest średni. dobra znajomość Git, Ruby, Rails i XHTML/CSS, mniej doświadczona w problemach z wdrażaniem. to pierwszy tego typu projekt, który realizujemy razem jako zespół


title: "Nie zajmuj się programowaniem po kilku latach rozpoczęcia kariery". Czy to uczciwa rada?

text: Jestem trochę doświadczonym programistą z około 5 letnim doświadczeniem w PHP i nieco mniej w Javie, C# i próbującym nauczyć się trochę Pythona w dzisiejszych czasach. Od początku mojej kariery jako programisty co jakiś czas słyszę od kolegów programistów, że programowanie nadaje się na kilka wczesnych lat kariery (większość z nich przyjmuje to jako 5 lat) i że trzeba później zmienić kierunek. to. Powodem, dla którego się prezentują, są bóle głowy i presje związane z programowaniem. Mówią też, że programiści są mniej towarzyski i zwykle nie lubią poświęcać czasu swoim rodzinom itp., a zwłaszcza „Och, daj spokój, nie możesz programować przez całe życie!” Jestem tu nieco zdezorientowany i muszę zapytać o to innych. Jeśli zostawię programowanie, to co mam zrobić?! Myślę, że w tym przypadku nauczanie może być dobrą opcją, ale być może będzie wymagało najpierw uzyskania stopnia doktora. Warto również zauważyć, że w moim kraju (Pakistan) życie programisty nie jest zbyt dobre, ponieważ zwykle musi on poświęcić 2-3 dodatkowe godziny w biurze na wykonanie pilnych zadań programistycznych. Mam wrażenie, że sytuacja jest nieco podobna w innych krajach i regionach. Czy uważasz, że to uczciwa rada, aby zmienić karierę z programowania na coś innego po spędzeniu 5 lat w tej dziedzinie? AKTUALIZACJA * * * O wow... Nigdy nie wiedziałem, że ludzie mogą mieć ponad 40-letnie doświadczenie w tej dziedzinie. Jestem zarówno podekscytowany, jak i zdumiony, widząc, że ludzie robią to od 1971 roku... To znaczy 15 lat przed moimi narodzinami! Fajnie jest móc rozmawiać z tak doświadczonymi ludźmi, u nas w Pakistanie nie mamy takiej szansy. * * * Jeszcze raz dziękuję za pomoc i dzielenie się. To było miłe doświadczenie, gdy zebrałeś swoje przemyślenia na ten temat.


title: Prosty kod JavaScript, aby zrozumieć podstawy OOP oparte na prototypach

text: Znam Javascript od jakiegoś czasu, chociaż nie jestem nałogowym użytkownikiem, znam go od czasu, gdy Netscape był moją przeglądarką. Dosyć dobrze rozumiem główne rzeczy, ale ponieważ podejście JavaScript do OOP jest prototypowe, mam pewien problem z jego zrozumieniem. Jeden problem, który można dodać do tego, wydaje się, że rzeczy można zrobić na więcej niż jeden sposób, i tutaj książki niewiele pomagają, ponieważ umieszczają wszystkie przykłady na stole, co utrudnia dotrzymanie tempa. To, czego potrzebuję na początek, to tylko jeden sposób na zrobienie tego, jeśli ktoś może mi pomóc z najprostszym możliwym kodem przykład, na którym mogę zobaczyć, jak działa prototypowy model OOP? Aby był pomocny, kod powinien mieć dziedziczony obiekt, aby uzyskać dostęp do właściwości rodzica i jej dziedziczonych właściwości oraz funkcji rodzica, nadpisać funkcję rodzica i mieć instancję wielokrotnego dziedziczenia, w której obiekt dziedziczy dwa inne obiekty.


title: Najlepsze praktyki dotyczące klonowania błędów

text: Próbuję wymyślić przyjemny i łatwy sposób na zrobienie tego, ale pomyślałem, że sprawdziłbym kilka osób w celu uzyskania drugiej opinii: Powiedzmy, że masz 8 klientów (jeden projekt dla każdego klienta) i każdy projekt pochodzi z głównego projektu. Jeśli zostanie zgłoszony błąd, który musi zostać naprawiony w rdzeniu, naszym obecnym podejściem jest stworzenie błędu i sklonowanie go dla każdego klienta (przy użyciu Bugzilli). Wielu programistów uważa, że ręczne klonowanie błędów we wszystkich klientach i upewnianie się, że są one umieszczane w każdym module do śledzenia wydań na klienta, jest czasochłonne. Przypuszczam, że jest to problem z przepływem pracy, więc czy ktoś ma sugestie dotyczące najlepszego sposobu obsługi błędów klonowania dla wielu klientów? Być może Bugzilla nie jest do tego najlepszym narzędziem. Większość z nas uważa, że nie da się tego w pełni zautomatyzować i będzie wymagała ręcznej interwencji niezależnie od tego, z jakiego narzędzia korzystamy. Jednym z pomysłów, jaki miałem, było stworzenie jednego problemu z błędem. Jeśli jest to błąd podstawowy i przypisując go do jednego wydania, nie oznaczamy go jako całkowicie rozwiązany, ponieważ nie został przetestowany dla wszystkich projektów klienckich, które wywodzą się z projektu podstawowego. Problem polega na tym, że potrzebowałbym sposobu na powiązanie pojedynczego błędu ze wszystkimi klientami i poinformowanie go, kiedy automatycznie ustawić go tak, aby został rozwiązany, gdy ostatni klient będzie miał wydanie. Nie wierzę, że Bugzilla ma taką funkcję. Wszelkie myśli lub pomysły byłyby mile widziane.


title: Czy JavaScript „zapis raz uruchamia się wszędzie”?

text: Mam wymóg biznesowy dla aplikacji javascript "napisz raz uruchomiona wszędzie". Zrobiłem badania i odkryłem, że istnieje kilka opcji między: FireFox OS, ChromeOS, NodeOS, Tizen i Dart. Nie wiem, czy 1) to oprogramowanie jest naprawdę zdolne do jednorazowego napisania jednej witryny i wyeksportowania do hostowanych lub pakietowych aplikacji natywnych. 2) Czy pojedyncza witryna JavaScript może naprawdę przemierzać platformę urządzeń jako aplikacja natywna za pośrednictwem tego rodzaju systemu operacyjnego JavaScript, czy nie? 3) Czy to proste, czy bolesne? Czy ktoś widział z pierwszej ręki pełną implementację przynajmniej w środowisku testowym lub produkcyjnym? Ponadto – czy spodziewane są pozytywne lub nieoczekiwane korzyści – i jakie są wady? Ogólnie: czy JavaScript jest raz uruchamiany wszędzie - czy nie? Do tego stopnia, że nie jest to „Native” – znalazłem to. Najwyższej klasy obywatelstwo Apple iOS7 JS. W zeszłym miesiącu. http://fluentconf.com/fluent2014/public/schedule/detail/32624 Nazywa się to frameworkiem JavaScriptCore. Zainstalowałem FireFox OS Open WebApp z emulatorem. https://developer.mozilla.org/en-US/Apps/Quickstart/Build/Your_first_app Nie wiem co to jest, ale było to łatwe i fajnie wygląda. Jak strona internetowa spakowana w natywną aplikację. Czy ktoś sprawdził tę klasę architektury JavaScript?


title: Aplikacja internetowa N-Tier MVC4 z aplikacją konsolową

text: Zbudowałem aplikację internetową MVC i muszę uruchomić kilka zadań w różnych odstępach czasu. Stworzyłem więc również aplikację konsolową do planowania tych zadań za pomocą menedżera zadań w systemie Windows. Na przykład aplikacja musi co tydzień wysyłać e-mail z podsumowaniem danych programu. Wybrałem pakiet Nuget RazorEngine do formatowania wiadomości e-mail, ponieważ muszę już wyświetlać te same dane na stronie internetowej, więc korzystając z pakietu RazorEngine, mogę ponownie użyć mojego modelu widoku zarówno dla wiadomości e-mail, jak i interfejsu użytkownika projekt sieciowy (wystarczy użyć go w szablonie sformatowanym do wiadomości e-mail zamiast do sieci). Ale na tym polega problem, ViewModel jest w projekcie UI. Nie sądzę, że właściwą rzeczą do zrobienia jest tutaj, aby moja aplikacja konsolowa uzależniała się od mojej warstwy interfejsu użytkownika. Na początku logiczną decyzją było dla mnie „po prostu utwórz kolejną warstwę, App.ViewModelBuilders (może też pomóż mi z lepszą nazwą?) I weź zależność zarówno w App.UI, jak i App.ConTasks”. Ale nigdy tego nie widziałem zrobione wcześniej, więc nie jestem pewien, czy to mądry wybór, czy nie... Oto moje obecne warstwy (projekty) dla rozwiązania: * App.DAL (bez zależności - wzorzec jednostki pracy i repozytorium) * App.Service (Zależy od DAL - używa DAL do operacji biznesowych, takich jak getDataWithCondition(), która zwraca odpowiednie obiekty (w rzeczywistości jest to IQueryable) * App.UI (Zależy od usługi - pobiera dane z powrotem z usługi i uruchamia je przez ViewModelBuilder do mapowania obiekty biznesowe do odpowiedniego modelu widoku, a następnie renderuje widok przy użyciu tego modelu widoku) * App.ConTasks (POWINNA zależeć tylko od usługi, ale nadal potrzebuje ViewModels - wykorzystuje dane zwrócone z usługi do renderowania widoku sformatowanego do wiadomości e-mail i wysłania e-maila ) W jakiej warstwie powinny znajdować się moje modele widoków i kreatory modeli widoków?


title: Jak mogę wykonać funkcję obliczania kodu pocztowego i odległości w architekturze?

text: Tworzę aplikację przy użyciu MVC 4/Razor i EF 4/.NET 4, w której można wyszukiwać elementy według kodu pocztowego, a tym samym pobierać elementy tylko w określonej odległości od bieżącego kodu pocztowego. Mam klasę, która oblicza odległość za pomocą plików spisu gazeteer (zip, lat i lon) i formuły Haversine. Mój konkretny problem dotyczy części kodu SQL. Mam widok, który używa pagera (20 wyników na stronę) i ma hiperłącza, które porządkują kolumny w kolejności asc i desc. Mam również 3 listy rozwijane, które mogą dodatkowo filtrować wyniki: Producent, Kategoria, Odległość. Kiedy filtruję przez powiedzmy 50 mil, moja klasa pobiera IEnumerable kodów pocztowych, które znajdują się w żądanej odległości. Czasami może to być na obszarze od 10 000 do 30 000. Każdy obiekt `Item` zawiera `int ZipCode` ![Relacje](http://i.stack.imgur.com/OQRfd.jpg) Problem generowany przez EF, gdy próbuję pobrać obiekty z bazy danych przy użyciu listy dopuszczalne kody pocztowe to _Jedno z Twoich zapytań jest zbyt głęboko zagnieżdżone. Spróbuj je rozbić_. Zakładam, że dzieje się tak dlatego, że nie można mieć klauzuli where z tysiącami warunków. To ma sens. Kilka dni temu znalazłem link, który zasadniczo zajmował się tworzeniem tymczasowej tabeli do użycia jako lista w warunku where, ale nie mogę już znaleźć linku. Dotyczyło to również surowego ADO.NET, w przeciwieństwie do EF. **Moje pytanie brzmi w zasadzie, jak mogę zaimplementować żądaną funkcjonalność bez wprowadzania dużych zmian?** using (var context = new JDMExchangeEntities()) { var results = context.Items.Include(P => P.Manufacturer ).Uwzględnij(P => P.Kategoria) .Uwzględnij(P => P.Produkcja Pojazdu).Uwzględnij(P => P.ModelPojazdu).Uwzględnij(P => P.RokPojazdu); //Logika kategorii if (!string.IsNullOrEmpty(Categories)) { results = results.Where(P => P.Category.Name == Categories); } //Logika producentów if (!string.IsNullOrEmpty(Manufacturers)) { results = results.Where(P => P.Manufacturer.Name == Producenci); } //Logika pojazdu if (Pojazd > 0) { results = results.Where(P => P.YearId == Vehicle); } if (acceptableCodes.Count > 0) { List<int> kody = akceptowalneCodes.Keys.ToList(); wyniki = wyniki.Where(P => kody.Zawiera((int)P.Kod pocztowy)); //zwróć _UoW.tblcoursebookingRepo.All //.Where(cb => AttendanceIDs.Contains(cb.Attended)) //.ToList(); } ////Wyjmij elementy, których nie ma w słowniku ManualQueryResults //if (!String.IsNullOrEmpty(ManualQuery)) //{ // var all = listB.Where(b => listA.Any(a => a .kod == b.kod)); // results = results.Where(r => ManualQueryResults.Any(a => a == r.id)); //} ////Wyjmij zipy spoza zmiennej closeCodes //if (!string.IsNullOrEmpty(DistanceLimit)) //{ // results = results.Where(P => closeCodes.Any(z => z. KodPocztowy == P.KodPocztowy)); //} switch (sortOrder) { case "Price_desc": results = results.OrderByDescending(P => P.Price); przerwanie; case "Cena": wyniki = wyniki.OrderBy(P => P.Cena); przerwanie; case "Date_asc": wyniki = wyniki.OrderBy(P => P.PostDate); przerwanie; domyślnie: results = results.OrderByDescending(P => P.PostDate); przerwanie; } int rozmiarStrony = 20; int numer_strony = (strona ?? 1); IPagedList<Item> cc = results.ToPagedList(pageNumber, pageSize); Mógłbym wywołać `.ToList()` gdzieś, zanim nacisnę `.ToPagedList()`, ale wtedy będę zwracał tysiące wpisów, a tym samym opóźniam czas odpowiedzi o kilka sekund. Po tym mogłem łatwo stworzyć listę stronicowaną z listy IEnumerable. Chcę spróbować zminimalizować czas odpowiedzi, więc myślę, że obszar, który muszę naprawić, znajduje się w kodzie SQL, aby nie wyciągać niepotrzebnych danych, a następnie je odfiltrować.


title: Równowaga między „właściwym narzędziem do pracy” a znajomością

text: Tak więc przy wyborze języka do wykorzystania w projekcie, w idealnym świecie język jest wybierany, ponieważ jest to właściwe narzędzie do pracy. Jednak często wolę używać języka, w którym _płynnie_ posługuję się, niż takiego, którego musiałbym się nauczyć lub w którym prowadzę tylko konwersację. Oczywiście biegłość językowa obejmuje również znajomość odpowiednich bibliotek w danym języku. To, że naprawdę lubię język ogólnego przeznaczenia, taki jak Java, nie oznacza, że powinienem go zawsze używać, ale jednocześnie nie oznacza, że powinienem wypuszczać coś takiego jak Perl za każdym razem, gdy trzeba coś przetworzyć. Jak tu znaleźć równowagę?


title: Jak najlepiej podejść do projektów wizualizacyjnych?

text: Zajmuję się kilkoma obszarami związanymi z wizualizacją informacji, powiązanymi danymi, wizją komputerową i innymi rzeczami, a więc głównie front-endem. Nie podoba mi się fakt, że wizualizacje wymagają wielu iteracji i dużo czasu od pierwszego prototypu do gotowego do produkcji kodu. Oto pytanie: co mogę zrobić, aby to poprawić? Czasem robimy prototyp w kilka godzin, dodajemy coś, robimy kolejny prototyp, przepisujemy go tak, aby używał jQuery zamiast Prototype, bo lepiej pasuje i tak dalej i tak dalej, ale prawie wszystkie wizualizacje przechodzą przez 15-20 iteracji (czasem do kilku miesięcy czasu rozwoju - kod również przejdzie z 300 linii pierwotnego prototypu do 2000 lub 3000 linii ze względu na zmieniające się wymagania i iteracje). Ponieważ pracuję przy wielu projektach, z mojego punktu widzenia fakt, że czasami może to trwać miesiącami, nie stanowi problemu, po prostu nie jestem zadowolony, ponieważ mógłbym zrobić 40 wizualizacji rocznie zamiast np. 15, gdybym będzie w stanie usprawnić ten proces jedynie poprzez zmniejszenie liczby iteracji lub w jakikolwiek inny sposób. Jeśli ktoś z wyższym wynikiem chce dodać wizualizację informacji do tagów, a następnie edytować moje pytanie, nie miałbym nic przeciwko. Z poważaniem!


title: Cykl życia oprogramowania w branży

text: Uczęszczam na moduł o nazwie „Analiza i projektowanie wymagań” na lokalnym uniwersytecie. Wspólny moduł, powiedziałbym (na cyklu życia oprogramowania (SDLC) i UML). Ale jest wiele rzeczy, które zastanawiam się, czy są one faktycznie (ściśle) praktykowane w branży. Na przykład, czy diagram klas domeny, nic więcej (z klasy projektu), będzie wyłącznie wynikiem fazy analizy lub odkrywania? Jestem pewien, że wiele razy zastanowisz się też nad implementacją techniczną? W przeciwnym razie możesz później otrzymać diagram klasy projektu, który bardzo różni się od oryginalnego diagramu klasy domeny? Trudno mi też zapamiętać, jakie diagramy pochodzą z inicjacji, odkrywania, projektowania itp. Plus te fazy różnią się od SDLC do SDLC, jak sądzę? Więc zazwyczaj tworzę diagram, kiedy myślę, że będzie to przydatne. Czy to zła droga?


title: Jakie są korzyści z używania geoprzestrzennych typów danych?

text: Obecnie przechowujemy punkty jako trzy zmiennoprzecinkowe (długość, długość, wysokość) i obsługujemy tylko jeden typ zapytania (punkty w danym promieniu), ale oczekujemy obsługi większej liczby zapytań. Używamy PHP i MySQL. Jakie są korzyści z używania typów geoprzestrzennych?


title: Czy rozsądne jest skoncentrowanie się na jednym temacie CS przez jeden semestr na uniwersytecie?

text: Jak zwykle muszę zrobić kursy z kilku różnych dziedzin informatyki na studia magisterskie. Skoncentruję się na algorytmach, informatyce teoretycznej (obliczalność i złożoność, podstawy,...) i obliczeniach równoległych/wysokiej wydajności plus może trochę języków programowania. Aby skończyć na czas, muszę zrobić 5-8 kursów w semestrze. Czy rozsądne jest koncentrowanie się na jednym temacie w semestrze? Np. zrobię około 5 kursów z algorytmów. Wychodzę z założenia, że jeśli zrobię to wszystko w ciągu jednego semestru, lepiej zrozumiem temat. A może lepiej byłoby dla mnie zrobić 1-2 kursy z każdego obszaru w semestrze?


title: Przełamywanie 1NF w celu ograniczenia podzbioru modelu. Czy to brzmi rozsądnie?

text: Moje pierwsze pytanie tutaj. Przeproś, jeśli jest na niewłaściwym forum, ale wydaje się to dość koncepcyjne. Zastanawiam się nad zrobieniem czegoś, co jest sprzeczne z konwencjonalną mądrością i chcę uzyskać informację zwrotną, czy jest to całkowicie szalone, czy spowoduje problemy, więc odrzucaj krytykę! Jestem na PostgreSQL 9.1, ale być może przechodzę do wersji 9.2 w tej części tego projektu. Powtórzę: czy łamanie 1NF w ten sposób wydaje się rozsądne? Nie szukam debugowania kodu tak bardzo, jak tam, gdzie ludzie widzą problemy, które może to prowadzić. # Problem W rachunkowości z podwójnym zapisem transakcje finansowe to zapisy księgowe z dowolną liczbą wierszy. Każdy wiersz ma wartość lewą (debet) lub prawą (kredyt), która może być modelowana jako pojedyncza wartość z ujemną wartością jako obciążeniem i dodatnią jako kredytem lub odwrotnie. Suma wszystkich obciążeń i uznań musi być równa zeru (więc jeśli pójdziemy z pojedynczym polem kwoty, suma(kwota) musi być równa zeru dla każdego wpisu do dziennika finansowego). Bazy danych oparte na SQL, prawie wymagane do tego rodzaju pracy, nie mają możliwości natywnego wyrażenia tego rodzaju ograniczenia, więc każde podejście do egzekwowania go w bazie danych wydaje się dość skomplikowane. # Model zapisu Wpisy dziennika są tylko dołączane. Istnieje możliwość, że dodamy model usuwania, ale będzie on podlegał innym zestawom ograniczeń i dlatego nie ma tu zastosowania. Jeśli i kiedy zezwolimy na usuwanie, prawdopodobnie wykonamy je za pomocą prostego oznaczenia ON DELETE CASCADE na kluczu obcym i wymagamy, aby usuwanie przechodziło przez dedykowaną procedurę składowaną, która może wymusić inne ograniczenia. Tak więc wstawki i selekcje muszą być uwzględnione, ale aktualizacje i usunięcia nie są przeznaczone do tego zadania. # Moje proponowane rozwiązanie Zaproponowane przeze mnie rozwiązanie polega na przełamaniu ograniczeń pierwszej formy normalnej i modelu na tablicach krotek, za pomocą wyzwalacza, który rozbija wiersze do innej tabeli. CREATE TABLE journal_line ( entry_id bigserial klucz podstawowy, account_id int nie null referencje account(id), journal_entry_id bigint null, -- dodawanie referencji później ilość numeryczna nie null ); Następnie dodałbym "metody tabeli", aby wyodrębnić debety i kredyty do celów raportowania: FUNKCJA CREATE OR REPLACE debits(journal_line) ZWRACA numeryczna JĘZYK sql NIEZMIENNA JAKO $$ WYBIERZ PRZYPADEK WHEN $1.kwota < 0 THEN $1.kwota * -1 ELSE NULL KONIEC; $$; CREATE OR REPLACE FUNCTION kredyty(journal_line) ZWRACA numeryczne JĘZYK sql NIEZMIENNY JAKO $$ WYBIERZ PRZYPADEK GDY $1.kwota > 0 THEN $1.kwota ELSE NULL END; $$; Następnie tabela wpisów dziennika (uproszczona dla tego przykładu): CREATE TABLE wpis_dziennika ( wpis_id_bigserial klucz główny, -- brak kluczy naturalnych :-( id_dziennika int nie jest null odwołania do dziennika(id), data_wysłania data nie jest null, tekst odniesienia nie jest null, opis text not null, journal_lines journal_line[] not null );Następnie metoda tabeli i i ograniczenia sprawdzające: FUNKCJA CREATE OR REPLACE running_total(journal_entry) zwraca niezmienną wartość języka numerycznego sql jako $$ SELECT sum(amount) FROM unnest($1.journal_lines); $$; ALTER TABLE journal_entry ADD CONSTRAINT CHECK (((journal_entry.running_total) = 0)); ALTER TABLE journal_line ADD FOREIGN KEY journal_entry_id REFERENCES journal_entry(entry_id);I na koniec otrzymamy wyzwalacz wybicia: CREATE OR REPLACE FUNCTION je_breakout( ) ZWRACA TRIGGER LANGUAGE PLPGSQL AS $$ BEGIN IF TG_OP = 'INSERT' THE N INSERT INTO journal_line (journal_entry_id, account_id, kwota) SELECT NEW.id, account_id, kwota FROM unnest(NEW.journal_lines); ZWROT NOWY; INNY WYJĄTEK PODNIESIENIA „Operacja niedozwolona”; KONIEC JEŚLI; KONIEC; $$; I wreszcie UTWÓRZ WYZWALANIE PO WSTAWIENIU LUB AKTUALIZACJI LUB USUNIĘCIU NA journal_entry DLA KAŻDEGO WIERSZU EXECUTE_PROCEDURE je_breaout(); Oczywiście powyższy przykład jest uproszczony. Pojawi się tabela statusów, która będzie śledzić status zatwierdzenia, pozwalając na oddzielenie obowiązków itp. Jednak celem tutaj jest zapobieganie niezbilansowanym transakcjom. Jakakolwiek informacja zwrotna? Czy to brzmi całkowicie szalenie? # Rozwiązania standardowe? Dochodząc do tego punktu, muszę powiedzieć, że przyjrzałem się czterem różnym bieżącym rozwiązaniom ERP dla tych problemów: 1. Przedstawiaj każdą pozycję jako debet i kredyt na różnych kontach. 2. Użycie kluczy obcych względem tabeli pozycji wierszy w celu wymuszenia ostatecznej sumy bieżącej równej 0 3. Użycie wyzwalaczy ograniczeń w PostgreSQL 4. Wymuszanie tutaj całej walidacji wyłącznie poprzez logikę aplikacji. Obawiam się, że #1 jest dość ograniczający i bardzo trudny do wewnętrznego audytu. Nie jest przejrzysty dla programistów, więc wydaje mi się, że w przyszłości trudno będzie z nim pracować. Druga wydaje mi się bardzo złożona i wymagała szeregu ograniczeń i obcych kluczy przeciwko sobie, aby wykonać pracę, dlatego wydaje mi się, że jest skomplikowana, trudna do uporządkowania przynajmniej w moim umyśle, a zatem trudna do pracy. Czwarty można zrobić, ponieważ i tak wymuszamy dostęp za pomocą procedur składowanych i jest to najczęstsze rozwiązanie (poproś aplikację o wszystko i wyrzuć błąd w przeciwnym razie). Uważam jednak, że dowód na to, że przestrzegane jest ograniczenie, jest lepszy od przypadków testowych, więc pojawia się pytanie, czy faktycznie generuje to anomie wstawiania, a nie je rozwiązuje. Jeśli jest to rozwiązany problem, to nie jest tak, że wszyscy zgadzają się co do rozwiązania....