title: Subskrybuj/publikuj model w aplikacji internetowej (c#) — najlepsze praktyki dla obsługi zdarzeń

text: Niedawno miałem kontakt z aplikacją komputerową, która używa modelu publikowania/subskrypcji do obsługi poleceń, zdarzeń itp. Nie mogę znaleźć żadnych dobrych przykładów użycia tego w aplikacji internetowej, więc zastanawiam się, czy jestem poza bazą w próbujesz użyć tego do tworzenia aplikacji internetowych (po stronie serwera)? Używam asp.net c#. Moje główne pytanie w odniesieniu do projektu brzmi: czy podczas korzystania z modelu publikowania/subskrybowania lepiej jest mieć ogólne polecenia/zdarzenia, które nie przekazują parametrów, a następnie kazać subskrybentom spojrzeć na statyczne obiekty kontekstowe, które zawierają dane istotne dla zdarzenia? A może lepiej utworzyć niestandardowe argumenty dla każdego zdarzenia, które zawierają dane związane ze zdarzeniem? Cała koncepcja globalnego kontenera wydaje się tak wygodna, ale jednocześnie wydaje się przełamywać hermetyzację. Jakieś przemyślenia lub najlepsze praktyki od każdego, kto zaimplementował tego typu model w aplikacji internetowej? Nawet sugestie dotyczące tego modelu wykraczające poza zakres mojego pytania są mile widziane.


title: Dodawanie możliwości skryptów do aplikacji .NET

text: Mam już działającą implementację, która dodaje skrypty do aplikacji. Aplikacja obecnie generuje i kompiluje skrypty z fragmentów kodu C# (pobrane od różnych plików konfiguracyjnych użytkownika) do zestawów przy użyciu CodeDOM. Ponieważ początkowo wydawało się to dobrym pomysłem, natknąłem się na następujące problemy: 1. trudna obsługa domeny AppDomain i potrzeba serializacji 2. problem z wydajnością => częste zmiany skryptu powodują ponowną kompilację 3. zmiany nie mogą być wprowadzane w skryptach podczas działania 4. trudne do zapewnienia GUI do debugowania (punkty przerwania), autor skryptów faktycznie potrzebuje debuggera... "Zhakowałem" rozwiązanie przeciwko 1, ładując wszystko do głównej domeny AppDomain. Problem w tym, że niczego nie da się wyładować... Po pewnym czasie zużycie pamięci jest ogromne. Z tego powodu ostatecznie rozważyłbym przejście na rozwiązanie interpretowane, ale chcę pozostać blisko języka C# ze względu na istniejącą bazę kodu. Istnieje kilka bibliotek wokół Vsa, S#, Script.NET, ... Muszę uzyskać dostęp do obiektów w mojej aplikacji ze skryptów, a także uruchamiać metody w skryptach z mojej aplikacji. Czy uważasz również, że przejście na język interpretowany jest właściwą strategią, czy też powinienem spróbować dodać tryb debugowania do istniejącej koncepcji, wstrzykując kod, taki jak wywoływanie metody między każdą linią skryptu, aby umożliwić wykonanie krok po kroku.... Jednak obsługa AppDomain pozostaje koszmarem do obsłużenia. Z pewnością nie pierwszy raz ktoś biegnie w takiej sytuacji. Nie mogłem znaleźć żadnej opakowującej/pomocniczej biblioteki FOSS, która ułatwiłaby obsługę CodeDOM, ani elementów GUI dostarczających bloków konstrukcyjnych dla minimalnego debuggera. Obecnie zbudowałem własne GUI i przechodzę przez wywołania w skryptach oraz pokazuję zmiany w obiektach aplikacji (przed/po wywołaniu) wewnątrz GUI. Proszę odnieść się tylko do źródeł/lib FOSS.


title: Jaka jest zaleta korzystania z bindera interfejsu użytkownika w GWT?

text: Wymień **za i wady** UIBindera w _GWT_. Chcę opracować duży projekt. Czy korzystanie z **UIBinder** w moim projekcie jest elastyczne?


title: Które zobowiązują się dodać numer zgłoszenia problemu/śledzenia błędów # do

text: W ciągu ostatnich kilku miesięcy wprowadzałem zmiany w gita do projektu. Chciałbym rozpocząć integrację Traca z moim przepływem pracy. Generalnie mam styl „git flow” repozytorium git. Utrzymuję master i rozwijam, a także rozgałęziam funkcje i poprawki błędów z gałęzi deweloperskiej. Widzę odpowiedzi w Które zatwierdzenie powinno zamykać problem na Github, gdy odpowiedzialnych jest wiele zatwierdzeń? że chcę połączyć "zatwierdzenie scalania" z biletem. Ponieważ mam już kilka funkcji w repozytorium git, chciałbym cofnąć się w czasie, aby powiązać je z biletem wprowadzonym w Tracu. W tym momencie mam dwie możliwości: 1. Przepisz historię od nowa. Mogę użyć `git rebase --interactive --preserve-merges`. Następnie dodaj informacje o bilecie do wiadomości. 2. Użyj `git notes add <rev>`, aby _dodać_ notatkę. **Szukam opinii, która opcja jest lepsza.** 1\. pozwala mi być bardziej w zgodzie z de facto standardami, podczas gdy 2. pozwala mi oddzielić zarządzanie biletami od repozytorium kodu. Mam pełną kontrolę nad repozytorium, serwerem Trac itp. Programista solo, bez wypychania (poza "kopią zapasową", ale mogę ją odbudować z lokalnego)


title: Jak testować funkcje lub kod wewnątrz $(document).ready() za pomocą Jasmine?

text: Mam wiele funkcji i dużo kodu wewnątrz `$(document).ready(function())`. Używam jasmine do testowania funkcji wewnątrz funkcji ready, jak również kodu wewnątrz funkcji `ready()`, ale kiedy przypadki testowe wewnątrz opisu są wykonywane, nie jest w stanie uzyskać dostępu do kodu wewnątrz funkcji `ready`. $(document).ready(function () { function testMe(){ testVar = true; } }); Zestaw testów Jasmine opisuje("zestaw testów", function(){ beforeEach(function () { testme = false }); it("Test Alert Box Message For Change Modal", function() { expect(testme).toEqual(true ); }); }); Uprzejmie zasugeruj, jakie podejście należy przyjąć w przypadku powyższego podejścia.


title: Podstawowa wartość programowania zorientowanego aspektowo

text: Niedawno dostałem się do PostSharp, narzędzia AOP do tkania kodu. Odnajduję duży opór u innych programistów przed rezygnacją z pisania kodu w celu wykonania zadań, które tkactwo miało uprościć. Na przykład znajduję kod rejestrowania lub obsługi błędów, w którym postsharp już to robi. Rozumiem, dlaczego tak się dzieje, ponieważ trudno jest zapamiętać wszystko, do czego zostało ustawione tkactwo (stosuję globalną definicję atrybutu). Biorąc to pod uwagę, biorąc pod uwagę poziomy doświadczenia itp., Czy AOP jest korzystny dla projektu? Jaka jest Twoja opinia? Dziękuję.


title: Czy oprogramowanie na licencji GNU General Public License v3 może być sprzedawane przez oryginalnego autora?

text: Jak wiem, oprogramowanie na licencji GNU GPL jest całkowicie darmowe i nie jest dopuszczone do sprzedaży. Jednak dzisiaj znalazłem ten program o nazwie Minitube i jest sprzedawany, mimo że jest na licencji GPLv3. Czy oryginalny autor ma pozwolenie na sprzedaż własnego oprogramowania, nawet jeśli wydaje je na licencji GPLv3?


title: Czy następująca jednostka domeny może zawierać logikę tworzenia/usuwania innych jednostek?

text: a) O ile rozumiem, w większości przypadków _Domain Model_ **DM** nie zawiera kodu do tworzenia/usuwania _domenowych jednostek_ , ale zamiast tego jest to zadanie warstw (tj. _service layer_ lub _UI layer_ ) na wierzchu **DM** tworzyć/usuwać _jednostki domeny_? b) _Eencje domeny_ są modelowane na podstawie _jednostek świata rzeczywistego_. Zakładając, że konkretna _rzeczywista encja_ będąca abstrakcją ma funkcję tworzenia/usuwania innych _rzeczywistych encji_ , to zakładam, że _domena_ abstrakcyjna ta _rzeczywista encja_ może również zawierać logikę tworzenia/usuwania innych encji? class RobotDestroyerCreator { ... void heavyThinking() { ... if(...) unitOfWork.registerDelete(robot); ... if(...) { var robotNew = new Robot(...); jednostkaPracy.rejestrNowy(robotNowy); {                       ...               }     }      Dziękuję Ci


title: Logistyka zespołu do zbudowania API usługi w chmurze na podstawie prototypu Matlab

text: Moim celem jest przejście od algorytmicznie brzmiącego prototypu oprogramowania do produktu SaaS API. Aby podać podobny i ilustrujący przykład, załóżmy, że mam prototyp skalowalnego oprogramowania do rozpoznawania twarzy w języku wysokiego poziomu, takim jak Matlab; algorytm ten pobiera obraz ze świata rzeczywistego jako dane wejściowe i wykrywa i rozpoznaje, powiedzmy, twarze celebrytów. Jest dokładny i przyzwoicie zoptymalizowany, działa około ~2 sekund na obraz na procesorze 2,4 GHz. W C powinien działać ~0,5 sekundy na obraz. Celem jest przejście z prototypu Matlab do usługi API opartej na chmurze, która może skalować ogromne ilości danych graficznych. Początkowy produkt testowy powinien obsłużyć ~100 wywołań na sekundę, ale w dłuższej perspektywie powinien być w stanie obsłużyć >10 000 wywołań na sekundę. Zostanie to ostatecznie połączone z aplikacją do indeksowania sieci w celu skalowania wszystkich danych graficznych w sieci. Biorąc pod uwagę kod źródłowy prototypu, jak zbudować, przetestować i wdrożyć w skalowalny sposób? Moje wykształcenie to matematyka i algorytmy, a nie inżynieria oprogramowania i systemów.


title: Jak właściwie licencjonować mój projekt open source?

text: Niedawno ukończyłem mój pierwszy projekt open source i chociaż jest to głównie narzędzie, nadal chcę go wydać jako open source, biorąc pod uwagę, że jest to C#, więc gdyby ktoś chciał, mógłby go zdekompilować. Poza tym nie zamierzam go sprzedawać. Szukałem licencji, ale sformułowanie jest trochę przesadzone. Przeważnie szukam licencji, która uzna mnie za twórcę i nie pozwoli nikomu innemu umieścić na niej swojego nazwiska i „ukraść”. Najprawdopodobniej użyję kodu google lub sourcefourge do hostowania projektu, a najlepiej mógłbym mieć przycisk darowizny. Nie jestem pewien, czy lub które licencje na oprogramowanie zapobiegłyby takim rzeczom? Poza tym nie jestem do końca pewien, jak „działają” licencje i prawa autorskie. Czy mam po prostu wybrać licencję i wkleić ją na górze każdego pliku źródłowego? Czy powinienem podać również swoje imię? Czy mogę również umieścić licencje w katalogu głównym projektu? Jak uzyskać prawa autorskie? Wygląda na to, że większość ludzi po prostu przykleja to do swoich rzeczy. Czy istnieje rzeczywisty proces uzyskania takiego? Jeśli chodzi o licencje na oprogramowanie, które do tej pory przeglądałem, wygląda na to, że szukam Apache 2.0 lub MIT/BSD, ale nie jestem do końca pewien. Zasadniczo nie chcę, aby ktokolwiek ukradła mój program i umieścił na nim swoje nazwisko. Poza tym nie przeszkadza mi to, że ludzie patrzą na kod źródłowy, modyfikują go lub biorą z niego fragmenty, o ile mnie uznają.


title: Jakie są naprawdę proste zasady, które pozwalają uporządkować bazę kodu PHP?

text: Jestem nowy w PHP w kontekście zawodowym. Chcę, aby kilka zasad kciuka makro trzymało mnie na oświeconej ścieżce. Oto kilka, które proponuję sobie: * brak ścieżek bezwzględnych w include|require(_once)? instrukcje * nie `..` `dirname(foo)` lub inne sposoby wejścia w to include|require(_once)? instrukcje * umieść libs na ścieżce include, a nie w podkatalogach Widać, że wszystko to skupia się na zarządzaniu zależnościami, bo to jest problem, z którym do tej pory się spotkałem. Jakie masz inne rozwiązania oparte na zasadzie kciuka dla problemów na poziomie makro?


title: Amazon Kindle - Wdrożenie Whispersync?

text: Dla tych, którzy nie wiedzą o synchronizmie Kindle, oto jak to działa (z amazon.com): „...Whispersync synchronizuje zakładki i najdalszą stronę czytaną wśród urządzeń zarejestrowanych na tym samym koncie. Whispersync jest domyślnie włączony, aby zapewnić bezproblemowe czytanie książki czytanej na wielu Kindle”. Czy ktoś może podać kilka szczegółów na temat implementacji funkcji Whispersync w Kindle i zapleczu Amazon? Zgaduję, że ta implementacja wymaga bardzo prostej mapy hash dla każdego konta użytkownika. Każda hashmapa mapuje Książki z informacjami satelitarnymi o książce. Informacje satelitarne zawierają zakładki, najdalszą przeczytaną stronę, urządzenie, na którym została odczytana itp. Dzięki!


title: Czy w językach, które nie pozwalają na podkreślenia w stałych całkowitych, dobrą praktyką jest tworzenie stałej dla 1 miliarda?

text: Czy w językach, które nie pozwalają na podkreślenie w literałach całkowitych, dobrym pomysłem jest utworzenie stałej dla 1 miliarda? np. w C++: size_t ONE_BILLION = 1000000000; Z pewnością nie powinniśmy tworzyć stałych dla małych liczb, takich jak 100. Ale przy 9 zerach prawdopodobnie łatwo jest pominąć zero lub dodać jedynkę w kodzie w następujący sposób: tv_sec = timeInNanosec / 1000000000; tv_nsec = czas w nanosekundach % 1000000000;


title: Jakie rzeczy, które przeczytałeś, zainspirowały cię i poprowadziły cię jako programistę?

text: Na przykład będąc początkującym, wiele inspiracji i wskazówek odnajduję w tym wpisie Bryana Woodsa.


title: Dlaczego strony internetowe (nawet ta) są czasami „niedostępne z powodu konserwacji”?

text: Osobiście nigdy tego nie robiłem. Nie rozumiem, dlaczego tak wiele witryn to robi, jeśli programujesz na serwerze programistycznym, dlaczego miałbyś kiedykolwiek zamykać witrynę produkcyjną? Zawsze się nad tym zastanawiałem. Co robią w tym czasie, czego to wymaga?


title: Decydowanie o tym, jak modelować klienta, kiedy może to być zarówno osoba fizyczna, jak i prawna

text: Załóżmy, że opracowujemy aplikację, która wymaga od nas możliwości zarządzania klientami i że tymi klientami mogą być zarówno osoby fizyczne, jak i prawne. Istnieje kilka różnych sposobów, w jakie możemy sobie z tym poradzić i nie jestem pewien, który z nich jest najlepszy pod względem rozszerzalności, ponownego wykorzystania kodu i tak dalej. Pierwszą rzeczą, o której pomyślałem, było skonstruowanie dwóch klas „NaturalCustomer” i „LegalCustomer”. Następnie współużytkowane właściwości zostałyby przeniesione do klasy bazowej „Customer”, a zarówno NaturalCustomer, jak i LegalCustomer odziedziczyłyby po niej. Drugą rzeczą, o której pomyślałem, było „traktuj każdego klienta jako osobę fizyczną, a klient będący osobą prawną to po prostu osoba fizyczna, która ma jedną lub więcej firm”. W takim przypadku utworzyłbym klasę „Klient”, a następnie klasę „KlientFirma”. Jeśli w aplikacji są inne firmy, które współdzielą nieruchomości z CustomerCompany, zbudowałbym nową klasę Company i odziedziczyłbym po niej. W tym podejściu istniałaby relacja zero-do-wielu między Klientem a KlientemFirma: klient może mieć jedną firmę lub nie mieć żadnej. Nie bardzo wiem, jak sobie radzić z tego rodzaju problemem. Dopiero zaczynam od analizy i projektowania obiektowego i nadal jestem zdezorientowany. Główny problem polega na tym, że jeśli wybiorę pierwsze podejście, nie wykorzystałbym ponownie dużej ilości kodu. Na przykład w aplikacji mogą znajdować się inne rodzaje osób fizycznych, takie jak „Pracownik”, które będą dzielić wiele nieruchomości z NaturalCustomer, podobnie jak firmy, mogą istnieć firmy takie jak „Dostawca”, które będą dzielić wiele nieruchomości z LegalCustomer i nadal nie używałbym go ponownie - więc gdybym miał dokonać zmiany na danych, które powinny być przechowywane dla firm, musiałbym zmienić wszędzie. Jak sobie radzimy w takiej sytuacji, gdy dziedziczenie wielokrotne nie jest dozwolone (czyli nie mogę sprawić, by LegalCustomer dziedziczył _oba_ po Customer i LegalPerson)? Z góry bardzo dziękuję!


title: Jak nazwać nowy interfejs, który zastępuje istniejący?

text: Przeprojektowujemy interfejs wtyczki naszej aplikacji, więc używamy wzorca Adapter z naszym projektem weryfikacyjnym, aby pokazać, że nowy interfejs będzie działał bez konieczności używania go w samej aplikacji. Nie wiemy, jak nazwać ten nowy interfejs. Służy temu samemu celowi co stary - nazwijmy go `CAbstractAppPlugin`. Co więcej, będzie prawdopodobnie, podobnie jak jego poprzednik, klasą abstrakcyjną, a nie czystym interfejsem wirtualnym (C++), co oznacza, że nadal powinniśmy używać "CAbstract" zamiast "I". Umieszczenie „nowego” lub „2” na nazwie wydaje się głupie, ale przyjęcie bardzo podobnej nazwy może prowadzić do zamieszania, dopóki stara nie zostanie odrzucona. Jak więc nazwać rzecz X, która zastępuje rzecz Y?


title: Jak ustrukturyzować aplikację, która odczytuje kody kreskowe UPC

text: Nie mam doświadczenia w tworzeniu projektu dla sprzedawcy, który będzie korzystał z czytnika kodów kreskowych. Próbuję złożyć mały projekt, ale nie wiem, jak elementy powinny się skleić. Stworzę próbkę za pomocą Motorola Scanner SDK do odczytu kodów kreskowych i od tego momentu mam kilka pytań: * Jak ogólnie działają kody kreskowe UPC? AFAIK, kod kreskowy przechowuje informacje o producencie i produkcie, ale nie ma danych o cenach. * Czy powinienem przechowywać informacje o cenach w bazie danych, która odpowiada danym z kodów kreskowych? Byłbym naprawdę wdzięczny, gdybyś mnie tutaj poprowadził.


title: Nowy Back End Development od czego zacząć?

text: Jestem studentem uczącym się samodzielnego tworzenia stron internetowych, jestem bardzo zainteresowany back-end developmentem, gdzie mogę zacząć się uczyć?


title: Czy języki niepełne Turinga są w ogóle uważane za języki programowania?

text: Czytając niedawne pytanie: Czy rzeczywiście możliwe jest posiadanie „użytecznego” języka programowania, który nie jest kompletny pod względem Turinga?, zacząłem się zastanawiać, czy języki programowania bez uzupełnienia Turinga są w ogóle uważane za języki programowania. Ponieważ kompletność Turinga oznacza, że język musi mieć zmienne do przechowywania wartości, a także struktury sterujące (dla, while )... Czy język, który nie ma tych funkcji, jest uważany za język programowania?


title: Czy parametry statyczne w API powinny być częścią każdej metody?

text: Obecnie tworzę bibliotekę, która jest opakowaniem dla internetowego API. Oczywistym celem końcowym jest jak najłatwiejsze korzystanie z niego innym. W związku z tym staram się określić najlepsze podejście, jeśli chodzi o wspólne parametry dla API. W mojej obecnej sytuacji są 3 (klucz klienta, tajny klucz klienta i token autoryzacji). Są one zasadniczo potrzebne w każdym wywołaniu API. Moje pytanie brzmi, czy powinienem wykonać te 3 parametry wymagane dla każdej metody, czy jest lepszy sposób. Moje obecne opcje są następujące: 1. Umieść parametry w każdej metodzie call public ApiObject callMethod(String consumerKey, String consumerSecret, String token, ...) Ta opcja wydaje się rozsądna, ale wydaje mi się strasznie powtarzalna. 2. Utwórz klasę singleton, którą użytkownik musi zainicjować przed wywołaniem jakichkolwiek metod api. Wydaje się to błędne i zasadniczo ograniczyłoby ich do dostępu do jednego konta na raz za pośrednictwem interfejsu API (co może być rozsądne, nie wiem). 3. Spraw, aby umieścili je w pliku właściwości w swoim projekcie. W ten sposób mogę załadować właściwości w ten sposób i je przechowywać. Wydaje mi się to podobne do singletona, ale nie musieliby jawnie wywoływać czegoś, aby zainicjować te wartości. Czy istnieje inna opcja, której nie widzę, lub bardziej powszechna praktyka w tej sytuacji, którą powinienem zastosować?


title: Czy C99 sprawia, że księga K&R staje się nieaktualna? Jeśli tak, to co na jego miejscu polecić?

text: C99 jest z nami już od jakiegoś czasu. Wprowadza wiele funkcji, których nie ma w K&Rs The C Programming Language. Żaden z nich nie jest szczególnie radykalny. Jednak nawet małe funkcje, takie jak możliwość łączenia deklaracji i kodu, zmieniają sposób organizacji kodu. Chociaż nadal uważam książkę K&R za nieocenione źródło i podobnie jak jej styl pisania, czy istnieje lepsza książka, która uwzględnia standard C99? Kupiłbym trzecią edycję K&R w mgnieniu oka, ale nie sądzę, żeby tak się stało.


title: Czy powinienem kontynuować naukę starych metod wprowadzania Java wraz z nowymi?

text: Od kilku lat prowadzę kurs wprowadzający do języka Java. Niektóre slajdy wyjaśniają, jak czytać z plików i klawiatury za pomocą `BufferedReaders, InputStreams, FileInputStreamReaders` itp. Dodaję slajdy wyjaśniające, jak to osiągnąć przy użyciu nowszych podejść, takich jak `Scanner`. Czy powinienem całkowicie pominąć stare slajdy `BufferedReaders, InputStreams i FileInputStreamReaders` i uczyć tylko nowych metod, czy też powinienem kontynuować nauczanie tych metod ze względu na kompletność? Czy moi uczniowie skorzystają na nauce czytania z plików i klawiatury w stary sposób?


title: Czy dobrym zwyczajem jest używanie wyrażeń C w kodzie C++?

text: W szkole zaczęliśmy uczyć się C w tym roku, mimo że jestem daleko przed klasą, a ja nauczyłem się Javy, C++ i C, podczas gdy klasa jest podstawą C. W każdym razie dokumentowałam siebie, czytając książki, artykułów, a ja zapytałem moją nauczycielkę, dlaczego powinienem uczyć się C, a ona powiedziała, że to podstawa C++. Kiedy po raz pierwszy zacząłem programować, C++ było o wiele łatwiejsze, później nauczyłem się C. Ale w książkach widać, że kod C działa w C++, ale nie działa odwrotnie. Moje pytanie jest całkiem proste ~ Czy używanie wyrażeń języka C w C++ to dobry zwyczaj? Podam przykład: Czy ten kod powinien #include <stdio.h> #include <iostream> int main() { int x; scanf("%d", &x); cout << "Wprowadzona liczba to " << x << "I podwójna to " << x*x; zwróć 0; } Bądź bardziej wydajny lub lepszy w jakikolwiek sposób niż to: #include <iostream> int main() { int x; cin >> x; cout << "Wprowadzona liczba to " << x << "I podwójna to " << x*x; zwróć 0; } Zrobiłem już trochę prostej dokumentacji na ten temat w zakurzonych starych książkach i z tego, co udało mi się znaleźć, użycie scanf zamiast cout również opróżnia strumień lub coś w tym rodzaju, więc w zasadzie pytam, czy lepiej użyć scanf i w jakich kontekstach. Dotyczy to również pliku IO, ponieważ zawsze uważałem, że FIle IO jest łatwiejszy w C niż w C++. To pytanie dotyczy prawie każdego ogólnego wyrażenia w C zastosowanego do C++. Warto również zauważyć, że używam nowoczesnego kompilatora, a mimo to nie powinno to mieć znaczenia, ponieważ pytam, czy dobrym nawykiem programistycznym jest używanie wyrażeń C w kodzie C++. Prawdopodobnie są wady i zalety takiego postępowania, ale szukam tylko odpowiedzi tak/dlaczego, nie/dlaczego. Jeśli są jakieś szczegóły, które pominąłem, dodaj komentarz.


title: Jaka jest różnica między formularzami sieci Web PHP i ASP.NET pod względem rozmiaru strony?

text: Planuję programować aplikacje webowe dla małych firm. Kiedy czytałem o ASP.NET Web Forms, spodobał mi się jego sposób budowania dynamicznych witryn. Jednak słyszałem od znajomego, że formularze internetowe mogą zwiększyć rozmiar stron z powodu danych wyjściowych ViewState. Czy różnica między rozmiarem stron PHP a generowanym HTML stron ASP.NET będzie dramatyczna?


title: main() prototypy funkcji

text: O ile mi wiadomo, funkcja main() ma następujące prototypy: int main(); int main(int argc, char **argv); Teraz C nie obsługuje przeciążania, więc w jaki sposób obsługiwanych jest wiele prototypów main()?


title: Czy powinienem dołączyć moduł programu uruchamiającego testy jako zależność w moim module?

text: Mój moduł nie jest niezależny od siebie, ale do przeprowadzania testów musisz zainstalować moduł `jasmine-node`. Czy powinienem dołączyć ten moduł jako zależność?


title: Bezpieczeństwo i wykonanie kodu

text:
Jeśli pobieram dane ze strony internetowej, na przykład aktualizacje statusu z Facebooka i wyświetlam je na mojej stronie. Jakie szkody mogę wyrządzić, jeśli nie biorę pod uwagę, że kod napisany jako aktualizacja statusu wykonałby się na mojej stronie? Na przykład pan Szymon umieścił swoją aktualizację statusu „
Uwielbiam kodować
” Teraz, kiedy wyświetlam to na mojej stronie, zmienia się w tekst ** Uwielbiam kodować** napisane na czerwono.


title: Jak zapisywać obrazy do plików w aplikacji internetowej i unikać ich usuwania przy każdej kompilacji?

text: Tworzę aplikację internetową i użytkownicy będą mogli przesyłać zdjęcia. I chcę przechowywać te obrazy w plikach zamiast przechowywać je w DB. Ale jeśli zapiszę te zdjęcia we względnych ścieżkach do aplikacji internetowej, zostaną one usunięte przy każdej kompilacji. Więc jak sobie z tym poradzę i najlepsze praktyki związane z tym problemem.


title: Projekt Open Source i przychody

text: Zacząłem projekt open source w 2010 roku i projekt zyskuje na widoczności. Jesteśmy teraz 2 aktywnymi autorami i mamy nadzieję, że w przyszłości zaangażujemy więcej współpracowników. Otrzymaliśmy dziś drugą ofertę na „współpracę” z firmą. Tym razem jest to firma hostingowa, która chce, abyśmy zaoferowali plan hostingowy z automatyczną instalacją oprogramowania i otrzymali wypłatę partnerską za każdego (firma jest dobrze znana). Pytanie brzmi: **Czy jest sposób, w jaki możemy podzielić się przychodami w ramach współtwórców projektu?** Naszym głównym celem na razie jest mieć więcej współtwórców i tworzyć lepsze oprogramowanie, a nie rentowność... PS: Jesteśmy również w trakcie aby przypisać projekt do Outercurve Foundation.


title: Niezwykłe języki do analizy numerycznej

text: To pytanie jest inspirowane tymi pytaniami (tu i tutaj). Zajmuję się głównie pracami numerycznymi i zwykle używam C++, Fortran i czasami Numpy. Staram się poszerzać swoje horyzonty i szukam języków programowania, które są dobre do pracy numerycznej (mają wiązania dla BLAS/LAPACK; szybkie, lekkie, wielowymiarowe tablice; itp.), ale są trochę poza głównym nurtem. Które „niezwykłe” języki są dobre do zdobywania nowych pomysłów na programowanie numeryczne?


title: jQuery UI Widget Factory Ograniczenia przestrzeni nazw

text: Jak mogę przeczytać w tym samouczku, „Istnieje ograniczenie polegające na tym, że przestrzenie nazw mają dokładnie jeden poziom głębokości – to znaczy, że nie możemy używać przestrzeni nazw takich jak nmk.foo”. To, co nie jest dla mnie jasne (i coś, czego nie mogłem znaleźć w żadnej dokumentacji), to _dlaczego_ stoi za tym rozumowaniem. Pochodząc z języków takich jak Java i C#, możliwość dalszego podziału przestrzeni nazw wydaje się niemal rażąco oczywista, jednak w „Fabryce Widgetów” jest to ograniczone projektowo, więc rezerwowanie przestrzeni nazw w celu zaimplementowania pewnego rodzaju logicznego oddzielenia typów widżetów nie jest możliwe . Czy ktoś może dać jakiś wgląd w to ograniczenie? Czy jest ku temu przyczyna techniczna?


title: Praca w domu dla młodszego programisty

text: Niedawno dostałem swoją pierwszą pracę programistyczną i uważam się za szczęściarza, że pracuję w domu. Potrzebuję jednak porady... Co powinienem zrobić, aby jak najlepiej wykorzystać moją nową pracę, jak mogę się upewnić, że odniosę sukces i jakie konkretne pułapki mogę napotkać? Mam już zarezerwowane biuro domowe, które nie rozprasza uwagi, dokąd mam się udać? Uwaga: czytałem tutaj niektóre z bardziej ogólnych prac związanych z domowymi rzeczami, ale interesuje mnie, na co uważać jako młodszy programista.


title: Składnia zapytania użytkownika końcowego?

text: Tworzę narzędzie wiersza poleceń, które pozwala użytkownikom końcowym wysyłać zapytania do bazy danych o schemacie statycznym; jednak chcę, aby użytkownicy mogli określać wartości logiczne w swoim zapytaniu (efektywnie rzeczy takie jak "get rows where (field1=abcd && field2=efgh) || field3=1234"). Wyszukałem w Google rozwiązanie, ale nie mogłem znaleźć niczego odpowiedniego dla użytkowników końcowych — nadal wydaje się, że byłby to bardzo powszechny problem, więc podejrzewam, że istnieje standardowe rozwiązanie. A więc: 1. Jakie (jeśli w ogóle) standardowe „języki” zapytań mogą być odpowiednie dla użytkowników końcowych? 2. Jakie (jeśli w ogóle) istnieją de facto standardy (na przykład narzędzia uniksowe, które rozwiązują podobne problemy). 3. W przypadku braku dwóch poprzednich opcji, czy możesz zaproponować składnię, która byłaby prosta, zwięzła i łatwa do sprawdzenia?


title: Czy potrzebuję licencji do tworzenia aplikacji internetowych w asp.net?

text: Moim celem jest tworzenie aplikacji internetowych dla małych firm, przychodni medycznych, małych supermarketów itp. Czy ja lub moi klienci potrzebujemy licencji?


title: Jak wypełnić lukę pokoleniową między menedżerami a programistami?

text: Zazwyczaj menedżerowie są starsi i mają większe doświadczenie niż pracujący pod nimi programiści. Podczas gdy młodzi programiści często mają większą wiedzę na temat „nowszych” technologii/wzorców (takich jak .NET, Rails, SOLID itp.), menedżerowie są bardziej zaznajomieni ze starszymi technologiami (COBOL, ASP). Jednak menedżer często ma udokumentowane doświadczenie w rozwiązywaniu problemów i dostarczaniu wartości dla klienta. Co więcej, wiele zasad dobrego programowania pozostaje niezmiennych. Ta luka pokoleniowa może powodować napięcie między menedżerem a deweloperem. Deweloper może czuć, że menedżer nie ma pojęcia, o czym mówi i jest przestarzały, podczas gdy menedżer uważa, że jest naiwny i po prostu podąża za obecnymi modami technologicznymi. W jaki sposób można wypełnić tę lukę pokoleniową, aby istniało zdrowe zaufanie i szacunek między programistami i menedżerami, nawet pomimo różnic wiekowych? Jak poradziłeś sobie z tym problemem?


title: Jak radzić sobie z nielicencjonowanym oprogramowaniem

text: Pracuję dla bardzo dużej firmy Fortune 500, która jest podwykonawcą innej firmy Fortune 500 na kontrakcie DoD. Jak można się domyślić biurokracja jest ogromna, jeśli chodzi o zrobienie czegokolwiek. Po prostu udostępniliśmy maszynę wirtualną, która jest załadowana narzędziami deweloperskimi Microsoft z czyjejś subskrypcji MSDN. Kiedy kwestionowałem naszą licencję MSDN, za każdym razem mówiono mi, że jest w toku. Trwa to już ponad rok. Mamy również inne używane przez nas produkty, które mają 30-dniowy okres próbny. Jeden z programistów znalazł exploita, który umożliwia nieskończenie 30-dniowy okres próbny. Nasze kierownictwo zachęcało do tego podejścia, gdy „działało” licencjonowanie. Skontaktowałem się z 4 poziomami menedżerów tego programu. Brak namacalnych działań od ponad roku. Co powinienem zrobić? Zgłosić je firmie Microsoft i innym odpowiednim dostawcom oprogramowania? Skontaktuj się z infolinią ds. etyki mojej firmy? STFU i płynąć z prądem? Dziękuję


title: Jako samotny programista Agile (PXP/PSP), jaka jest właściwa struktura formalnego projektu post mortem?

text: **Pytanie** : **Jako samotny programista Agile (PXP/PSP) jaka jest właściwa struktura formalnego projektu post mortem?** **Scenariusz** Używam metodologii PXP (która jest połączenie ekstremalnego programowania i osobistego procesu tworzenia oprogramowania) do pracy nad projektem licencjackim. Projekt koncentruje się wokół wizji i architektury komputerowej. Chociaż projekt ma duży potencjał do przyszłych ulepszeń, muszę napisać retrospektywę projektu dla tego wydania. Jestem przyzwyczajony do pracy z SRS (specyfikacja wymagań) i DSD (dokument specyfikacji projektu) o strukturze takiej jak: Wprowadzenie * Cel * Zakres * Definicje, akronimy itp. Opis * Perspektywa produktu * Interfejsy systemowe * Interfejsy * Interfejsy sprzętowe * Oprogramowanie interfejsy... ograniczenia itp. Wymagania * Wydajność, interfejsy itp... * Atrybuty związane z bezpieczeństwem, przenośnością itp. DSD * przegląd systemu - Rozważania na temat projektu * Architektura * szczegółowy projekt systemu ... itp. Jednak projekt zwinny, jak wiemy, obraca się bardziej wokół historii niż wymagań funkcjonalnych i mocnych projektów. Zalecana struktura non-agile dla tego raportu końcowego to: Wprowadzenie: \- Przegląd literatury: \- planowanie: - określenie zastosowanej metodologii. Projekt : * wymagania * cele projektu Implementacja - wybór języka, wytyczne do kodowania itp. Ewaluacja - ocena jakości algorytmów. Nie byłem w stanie znaleźć w Internecie przykładu określonej struktury postmortem projektu dla projektu PSP (nawet dokumentacja 1 nie wspomina, jak powinna być skonstruowana).


title: Jakie praktyki istnieją dla testów jednostkowych specyficznych dla ustawień regionalnych?

text: Niedawno wykryliśmy w naszej aplikacji problem związany z lokalizacją i chociaż był łatwy do naprawienia (kiedy już zorientowaliśmy się, co się dzieje), zespół, który zamierzam przemyśleć w tym zakresie, pozwolił na przeprowadzenie testów jednostkowych. Chcielibyśmy wychwycić te problemy wcześniej, najlepiej przed wykryciem ich przez klienta, i chcemy chronić się przed ponownym wprowadzaniem błędów specyficznych dla lokalizacji w przyszłości, ale powielanie każdego testu jednostkowego w co najmniej jednej innej kulturze wydaje się być bardzo trudne. nad głową. Jak ty lub jak podchodzisz do wielolokalnych testów jednostkowych?


title: Prędkości << >> mnożenia i dzielenia

text: Możesz użyć `<<` do mnożenia i `>>` do dzielenia liczb w pythonie, kiedy je mierzę, używając binarnego przesunięcia, które jest 10x szybsze niż dzielenie lub mnożenie w zwykły sposób. Dlaczego używanie `<<` i `>>` jest dużo szybsze niż `*` i `/`? Jakie zakulisowe procesy powodują, że `*` i `/` są tak wolne?


title: Jak udokumentować specyfikację formatu pliku

text: W przypadku projektu muszę pracować z różnymi typami plików ze starych gier i powiązanego oprogramowania — plików konfiguracyjnych, zapisów, archiwów zasobów i tak dalej. Większość z nich nie jest jeszcze udokumentowana, ani nie istnieją narzędzia do pracy z nimi, więc muszę dokonać inżynierii wstecznej formatów i zbudować własne biblioteki do ich obsługi. Choć nie sądzę, by było na to duże zapotrzebowanie, zamierzam opublikować wyniki moich starań. Czy są jakieś przyjęte standardy dokumentowania formatów plików? Rozglądając się, istnieje kilka używanych stylów: niektóre, takie jak Specyfikacja formatu pliku .ZIP, są bardzo rozwlekłe; inne, jak te na XentaxWiki, są znacznie bardziej zwięzłe — niektóre z nich są dla mnie trudne do odczytania; ten, który osobiście lubię najbardziej, to ten opis systemu plików kart pamięci PlayStation 2, który zawiera zarówno szczegółowy opisowy tekst, jak i kilka „map pamięci” z przesunięciami itp. – jest to również najbardziej zbliżone do mojego przypadku użycia. Będzie się trochę różnić dla różnych formatów, ale wydaje się, że powinny istnieć pewne ogólne zasady, których powinienem przestrzegać. Edycja: Wydaje mi się, że nie wyjaśniłem zbyt dobrze, co chcę zrobić. Pozwólcie, że skonstruuję przykład. Mogę mieć jakiś stary program, który przechowuje swoją konfigurację w pliku „binarnym” — szereg pól bitowych, liczb całkowitych, łańcuchów i innych elementów, które są sklejone i zrozumiałe przez program, ale nie do odczytania przez człowieka. Rozszyfruję to. Chciałbym dokładnie udokumentować, jaki jest format tego pliku, w sposób czytelny dla człowieka, jako specyfikację implementacji biblioteki do analizowania i modyfikowania tego pliku. Dodatkowo chciałbym, aby inni ludzie mogli to łatwo zrozumieć. Taki dokument można napisać na kilka sposobów. Powyższy przykład PKZIP jest bardzo obszerny i w większości opisuje format pliku w postaci wolnego tekstu. Przykład PS2 zawiera tabele typów wartości, przesunięć i rozmiarów wraz z obszernymi komentarzami na temat ich znaczenia. Wiele innych, takich jak te na XentaxWiki, podaje tylko typy i rozmiary zmiennych, z niewielkim komentarzem lub bez komentarza. Pytam, czy istnieje jakiś standard, podobny do przewodnika po stylu kodowania, który zawiera wskazówki, jak pisać tego rodzaju dokumentację. Jeśli nie, to czy jest jakiś dobrze znany doskonały przykład, który powinienem naśladować? Jeśli nie, czy ktoś mógłby przynajmniej podsumować kilka przydatnych rad?


title: Rekurencja lub pętle while

text: Czytałem o niektórych praktykach związanych z tworzeniem rozmów kwalifikacyjnych, w szczególności o pytaniach technicznych i testach zadawanych podczas rozmów kwalifikacyjnych i kilka razy natknąłem się na powiedzenia z gatunku „Ok, rozwiązałeś problem za pomocą pętli while, teraz możesz to zrobić za pomocą rekurencja” lub „każdy może rozwiązać to za pomocą pętli while o 100 wierszach, ale czy może to zrobić w funkcji rekurencyjnej o 5 wierszach?” itd. Moje pytanie brzmi, czy rekurencja jest generalnie lepsza niż if/while/for konstrukty? Szczerze mówiąc, zawsze myślałem, że rekurencja nie jest preferowana, ponieważ jest ograniczona do pamięci stosu, która jest znacznie mniejsza niż sterta, a także wykonywanie dużej liczby wywołań funkcji/metod jest nieoptymalne z punktu widzenia wydajności, ale mogę mylić się...


title: Rekurencja VS alokacja pamięci

text: Które podejście jest najbardziej popularne w rzeczywistych przykładach: rekurencja czy iteracja? Na przykład proste przechodzenie przez drzewo z rekurencją: void preorderTraversal( Node root ){ if( root == null ) return; root.printValue(); preorderTraversal( root.getLeft() ); preorderTraversal( root.getRight() ); } i z iteracją (używając stosu): Włóż węzeł główny na stos Gdy stos nie jest pusty Zdejmij węzeł Wydrukuj jego wartość Jeśli istnieje prawe dziecko, wsuń prawe dziecko węzła Jeśli istnieje lewe dziecko, wepchnij lewe dziecko węzła W W pierwszym przykładzie mamy rekurencyjne wywołania metod, aw drugim - nową pomocniczą strukturę danych. Złożoność jest podobna w obu przypadkach - O(n). Więc głównym pytaniem jest zapotrzebowanie na pamięć?


title: Czy istnieją zalety używania rekurencji nad iteracją — inne niż czasami czytelność i elegancja?

text: Mam zamiar poczynić dwa założenia. Proszę mnie poprawić, jeśli się mylą: 1. Nie ma algorytmu rekurencyjnego bez iteracyjnego odpowiednika. 2. Iteracja jest zawsze tańsza pod względem wydajności niż rekurencja (przynajmniej w językach ogólnego przeznaczenia, takich jak Java, C++, Python itp.). Jeśli to prawda, że rekurencja jest zawsze droższa niż iteracja i że zawsze można ją zastąpić algorytmem iteracyjnym (w językach, które na to pozwalają) – to myślę, że dwa pozostałe powody używania rekurencji to: elegancja i czytelność. Niektóre algorytmy są wyrażane bardziej elegancko za pomocą rekurencji. Np. skanowanie drzewa binarnego. Jednak poza tym, czy są jakieś powody, aby używać rekurencji zamiast iteracji? Czy rekurencja ma przewagę nad iteracją inną niż czasami elegancja i czytelność?


title: Zalety lub wady między funkcjami rekurencyjnymi a pętlami for

text: Jaka jest różnica między tymi dwiema procedurami? Kiedy powinienem używać funkcji rekurencyjnej zamiast normalnej pętli for?


title: Mapowanie 40 unikalnych liczb całkowitych na 41 i wstecz

text: To było pytanie zadane przez mojego przyjaciela. Zdefiniuj algorytm, który mając 40 unikalnych liczb całkowitych z zakresu 1-1000, zwraca 41 unikalnych liczb całkowitych z tego zakresu. Biorąc pod uwagę te 41 liczb całkowitych, musimy być w stanie zmapować je z powrotem do naszych oryginalnych 40. Czy ktoś ma jakieś spostrzeżenia? Mam pomysł, ale na pewno nie jest on wymowny. Dziękuję! EDYCJA: Myślę, że być może będę musiał wyjaśnić na przykładzie. Jednym naiwnym rozwiązaniem byłoby: znajdź największą liczbę ze zbioru 40. Zwiększ ją o 1 i to jest twoja 41. liczba. Podczas konwersji z powrotem pozbądź się największej liczby. To oczywiście zawodzi, gdy największa liczba w zestawie to 1000.


title: Co jest lepsze: kilka getterów czy 1 metoda z parametrem ciągu wyboru?

text: Nasza domena wiedzy obejmuje ludzi chodzących bosymi stopami po płytce do pomiaru nacisku. Wykonujemy rozpoznawanie obrazu, które skutkuje obiektami klasy 'Foot', jeśli w danych z czujnika rozpoznana jest ludzka stopa. Istnieje kilka obliczeń, które należy wykonać na danych stopy. Teraz, który interfejs API byłby lepszy: class Foot : public RecognizedObject { MaxPressureFrame getMaxPressureFrame(); FootAxis getFootAxis(); AnatomicalZones getAnatomicalZones(); // + podobne gettery do innych obliczeń // ... } Lub: class Foot : public RecognizedObject { virtual CalculationBase getCalculation(QString aName); // ... } Teraz jest wiele zalet i wad, które mogę wymyślić, ale tak naprawdę nie mogę zdecydować, które są najważniejsze. Pamiętaj, że jest to aplikacja dla użytkownika końcowego, a nie sprzedawana przez nas biblioteka oprogramowania. Jakakolwiek rada? Niektórzy zawodowcy przy pierwszym podejściu mogą być: * KISS - wszystko jest bardzo konkretne. API, ale i implementacja. * silnie wpisane wartości zwracane. * dziedziczenie z tej klasy jest niezawodne. Nic nie może być unieważnione, tylko dodane. * API jest bardzo zamknięte, nic nie wchodzi, nic nie może być nadpisane, więc mniej może się nie udać. Niektóre wady: * Liczba pobierających będzie rosła, ponieważ każda wymyślona przez nas kalkulacja zostanie dodana do listy * API będzie bardziej podatne na zmiany, a jeśli zostaną wprowadzone istotne zmiany, potrzebujemy nowej wersji API, Foot2. * w przypadku ponownego użycia klasy w innych projektach, możemy nie potrzebować wszystkich obliczeń. Niektóre plusy dla drugiego podejścia: * bardziej elastyczne * API jest mniej prawdopodobne, aby się zmienić (zakładając, że mamy poprawną abstrakcję, jeśli nie, zmiana będzie kosztować więcej) Niektóre minusy: * luźno wpisane. Potrzebuje rzutów na każde połączenie. * parametr ciągu — mam złe przeczucia (rozgałęzianie na wartościach ciągu...) * Nie ma aktualnego przypadku użycia/wymagania, który nakazywałby dodatkową elastyczność, ale może to nastąpić w przyszłości. * API nakłada ograniczenia: każde obliczenie musi pochodzić z klasy bazowej. Uzyskanie obliczenia będzie wymuszone tą metodą, a przekazywanie dodatkowych parametrów będzie niemożliwe, chyba że opracujemy jeszcze bardziej dynamiczny, superelastyczny sposób przekazywania parametrów, który jeszcze bardziej zwiększa złożoność.


title: Tworzenie definicji publicznego API dla istniejącej aplikacji

text: Załóżmy, że istnieje udana aplikacja open source (napisana w PHP, jeśli to ma znaczenie), która zapewnia użytkownikom wiele sposobów na jej rozszerzenie (pomyśl o czymś takim jak Drupal lub Wordpress, wiele niestandardowych wtyczek itp.). Teraz powiedzmy, że niestety nie ma formalnej definicji, co stanowi publiczne API dla tej aplikacji i chcemy zdefiniować takie publiczne API, abyśmy mogli a) kontrolować rozwój aplikacji i refaktoryzację i wiedzieć, że nie zepsuć rozszerzeń za pomocą następna wersja i b) dać extenderom pewne pojęcie, z czego mogą bezpiecznie korzystać, a czego lepiej nie używać. Więc pytanie brzmi – jak najlepiej do tego podejść i co tam powinno być? Na przykład, kilka konkretnych pytań: 1. Czy wszystkie klasy powinny być częścią publicznego API, czy też powinniśmy oznaczyć je jako publiczne, czy też oznaczyć te, które nie są? 2. Czy chronione metody powinny być częścią API (jeśli ktoś tworzy pochodną klasę niestandardową, będzie na niej polegał), a jeśli tak - czy powinniśmy wyraźnie oznaczać te, których nie chcemy, aby inni używali, lub te, których używamy pozwalając na użycie? 3. Czy właściwości publiczne również powinny być częścią API? A co z tymi chronionymi? 4. Jeśli chcemy dokonać zmiany/refaktoryzacji, która nie może być wstecznie kompatybilna (np. stare API było zbyt wadliwe lub nie pasuje już do aplikacji), jak najlepiej do tego podejść? 5. Jeśli chcemy całkowicie usunąć jakąś klasę/metodę, jaki powinien być proces? Wyobrażam sobie, że najpierw chcemy, aby była przestarzała, a następnie usunięta w późniejszych wersjach, ale czy na przykład powinniśmy dawać ostrzeżenia, gdy jest przestarzała, ale wywoływana jest wciąż istniejąca funkcja? Problem polega na tym, że nie możemy ostrzec przed agresywnym działaniem, ponieważ może to zepsuć aplikację, ale jeśli nie jesteśmy agresywni, ludzie zignorowaliby przestarzały znak, dopóki nie usuniemy starego elementu API, a wtedy doznają poważnego uszkodzenia. Wszelkie inne porady są również mile widziane, a także referencje do dobrych artykułów / przykładów / itp. na temat.


title: Tworzenie zachęt bonusowych, struktury nagród - Dla siebie

text: Tam, gdzie pracuję, kierownictwo zna **zero**, jeśli chodzi o programowanie i projektowanie. Chcę, aby wszyscy zrozumieli, zanim przeczytają pytanie, że to nie jest firma techniczna, są to sprzedawcy detaliczni, którym podoba się pomysł oprogramowania na zamówienie. Powiedziano mi, że chcą stworzyć strukturę motywacyjną z możliwościami premii w oparciu o to, nad czym pracuję. Z drugiej strony muszę podzielić się z nimi celami w szczegółach, co chcę osiągnąć w ciągu xx czasu, aby stworzyć ten system nagród. Chciałbym ustawić to we właściwy sposób, zamiast tworzyć łatwo osiągalne cele / terminy. Choć brzmi to atrakcyjnie, chciałbym wykorzystać to jako okazję dla firmy, aby podążać we właściwym kierunku, jeśli chodzi o ten dział. W przeszłości mieli trudności z ucieczką talentów z powodu złego zarządzania, braku zachęt i złego środowiska. Cieszę się, widząc, jak po drodze próbują nowych rzeczy, aby ulepszyć. Wszyscy używamy github do kontroli wersji i repozytoriów offsite, jeden programista pracuje w rails i cakephp, ja pracuję w c# i vb. Moje myśli miały oprzeć zachęty na realizacji projektów - do czego chcieli bardziej szczegółowej konkrety. Ale nie rozumieją rzeczywistego kodu, terminów itp. Przykład: Myśleliby, że więcej kodu jest zawsze lepsze, ponieważ to więcej, zamiast zdawać sobie sprawę, że jeśli zmniejszysz kod w funkcji, może być bardziej wydajny i łatwiejszy do odczytania. Co byś zrobił lub zrobiłbyś w podobnej sytuacji?


title: Jak zaimplementować lekką architekturę klastrową dla aplikacji rozproszonych

text: Obecnie mam rozproszoną aplikację, która działa na wielu wbudowanych komputerach PC. Cała aplikacja składa się z jednego serwera głównego i kilku węzłów. Każdy węzeł to wbudowany komputer z systemem Windows 7 Embedded i dwurdzeniowy procesor z 2 GB pamięci RAM. Aplikacja (z definicji) działa tylko wtedy, gdy master jest uruchomiony i kontroluje wszystkie węzły. Serwer główny posiada bazę danych SQL Express, w której przechowuje informacje o każdym węźle, który ma kontrolować oraz o sposobie ich organizacji. Węzły nie mają stanu trwałego. Gdy master i węzły będą już gotowe do pracy, zostaną one poddane manipulacji i wprowadzone w pewien stan, który jest przechowywany tylko w pamięci w tym momencie. Master może być kontrolowany przez interfejs klienta WinForm, który łączy się z nim i może odczytywać jego stan i wysyłać polecenia, które zmienią jego stan (jest to w zasadzie kilka usług sieci Web udostępnianych przy użyciu programu .NET WCF). Liczy się stan utrzymywany wewnątrz mastera (w pamięci). Stan wewnątrz każdego węzła może zostać zregenerowany na przykład po ponownym uruchomieniu węzła. Jeśli master zostanie zrestartowany, traci swój aktualny stan (i w konsekwencji stany węzła). Oznacza to, że po restarcie serwera głównego konfiguracja zostanie ponownie załadowana i zostanie ustawiony stan „świeży”. Zazwyczaj konfiguracja tej aplikacji składa się z jednego urządzenia głównego i 9 węzłów (jest to konfiguracja 3x3). W dowolnym momencie węzeł może zawieść, a aplikacja będzie działać bez niego (tak długo, jak działa master). Jeśli węzeł, który się nie powiódł, wróci, master wykryje go i przestawi go z powrotem do pożądanego stanu. Zostałem poproszony o ulepszenie architektury tej aplikacji, aby serwer główny mógł działać w jednym z węzłów. Tak więc zamiast konfiguracji 9+1 będziemy mieli tylko 9 wbudowanych komputerów PC, z których jeden zostanie wybrany jako master. Zgodnie z naszymi testami sprzęt węzła ma wystarczającą moc, aby obsłużyć zarówno węzeł, jak i element główny. Jednak wbudowanemu komputerowi PC nie można ufać i będzie on zawodził znacznie częściej niż zwykły serwer, na którym do tej pory hostowaliśmy urządzenie główne. Z tego powodu poproszono mnie o opracowanie rozwiązania redundancyjnego. Rozumiem, że właściwym rozwiązaniem byłoby umieszczenie dwóch lub więcej osadzonych działających w klastrach, więc jeśli węzeł, w którym działa element główny, ulegnie awarii, inny założy, że jest na swoim miejscu. **Teraz pytanie brzmi: jak zaimplementować lekki klaster, który może działać w takich warunkach?** Istnieją dwa główne problemy, które należy rozwiązać: 1. Trwałość danych: nie tylko konfiguracja musi zostać zapisana, ale także stan główny . W ten sposób, gdy węzeł główny przejdzie w dół, inny węzeł może przyjąć, że jest nadrzędny, bez resetowania całego stanu aplikacji. 2. Klastrowanie WCF: w dowolnym momencie, jeśli węzeł główny ulegnie awarii, inny musi założyć, że wszyscy połączeni klienci (interfejs klienta WinForm) muszą być w stanie automatycznie ponownie połączyć się z nowym ponownie wybranym węzłem głównym. Nie musi to być naprawdę niewidoczne dla użytkownika, ale klienci muszą mieć możliwość automatycznego ponownego połączenia (nie ma znaczenia, czy nowy adres IP będzie taki sam, czy nie). Istnieje kilka czynników ograniczających możliwe rozwiązanie: * Nie ma możliwości współdzielenia pamięci masowej między węzłami (każdy węzeł ma swoje własne HD i prywatną sieć gigabitową między nimi) * Aktualizacje sprzętu nie wchodzą w grę * Rozwiązanie ma być wystarczająco lekki, aby działał na wbudowanym komputerze. Tak więc instalacja serwera w chmurze lub klastrowanej bazy danych prawdopodobnie nie będzie wystarczająco szybka (jeśli uważasz, że klastrowanie MySQL będzie działać w celu rozwiązania warstwy danych, będę zainteresowany wysłuchaniem twoich opinii) * Rozwiązanie nie może wiązać się z zakupem drogiego kawałek oprogramowania * Ogólna platforma tej aplikacji musi być oparta na systemie Windows. Najlepszym rozwiązaniem, jakie do tej pory myślałem, było użycie czegoś takiego jak Prevayler, aby utrzymać stan mastera, a następnie zaimplementować synchronizację każdego polecenia otrzymanego przez mastera z innymi węzłami. To rozwiąże problem trwałości we wszystkich węzłach (może coś podobnego można zaimplementować za pomocą memcache, nie jestem pewien). Nie mam jeszcze rozwiązania problemu z usługą WCF. Ponieważ będzie to wymagało ogromnego rozwoju i właściwego testowania, pomyślałem, że powinienem usłyszeć od was przed wdrożeniem czegokolwiek. Myślę, że rozwiązanie można znaleźć za pomocą frameworka lub jakiegoś oprogramowania typu open source, które rozwiązuje część problemu. Nie wahaj się o cokolwiek zapytać, aby poprawić treść tego pytania, aby było bardziej zrozumiałe.


title: Czy to jest uważane za powtarzający się kod?

text: C#/ASP.net: /// <summary> /// Czy grupa jest już w koszyku? /// </summary> public static bool isItemInBasket(List<BasketItem> BasketItems, int GroupID) { return BasketItems.Where(c => c.GroupID == GroupID).SingleOrDefault() != null; } public static bool isItemInBasket(List<BasketItem> BasketItems, int GroupID, DateTime ArtworkDate) { return BasketItems.Where(c => c.GroupID == GroupID && c.ArtworkDate == ArtworkDate).SingleOrDefault() != null; } Niektórzy ludzie, z którymi rozmawiałem, uważają to za powtarzanie kodu, podczas gdy ja nie uważam tego za powtarzanie zasadniczo, ponieważ powtarzający się kod to wszystko, co i tak musiałbyś przekazać metodzie, jeśli chciałbyś zastosować inną technikę. Nie sądzę, aby można było to uprościć lub podzielić na bardziej uproszczoną wersję, dlatego nie jest to powtarzający się kod. Czy to rozsądna rzecz do powiedzenia?


title: Jak obsłużyć refaktoryzację, która trwa dłużej niż jeden sprint?

text: Pracuję z bazą kodu, która ma ponad 500K linii kodu. Wymaga poważnej refaktoryzacji. Zidentyfikowano próby refaktoryzacji, które potrwają dłużej niż normalny dwutygodniowy sprint. Nie można ich podzielić na mniejsze zadania, jak sugerowałem w innych odpowiedziach na tej stronie. Produkt musi działać pod koniec iteracji, a częściowa refaktoryzacja pozostawi system w stanie bezużytecznym, ponieważ zależność między elementami jest okropna. Więc jaki byłby najlepszy sposób na podejście do tej przeszkody? Jeszcze raz wspominam, że rozbicie go na mniejsze kawałki nie jest opcją, którą już zrobiono. Aktualizacja: Wydaje się, że ludzie potrzebują wyjaśnienia, dlaczego nie można tego zmieścić w 2-tygodniowym sprintie. W sprincie chodzi o coś więcej niż tylko pisanie kodu. Mamy politykę braku kodu bez testów. Ta polityka nie zawsze istniała i duża część kodu nie ma ich. Również niektóre z naszych testów integracyjnych są nadal testami ręcznymi. Problem nie polega na tym, że sama refaktoryzacja jest tak duża. Dzieje się tak dlatego, że małe zmiany mają wpływ na wiele części systemu i musimy zapewnić, że te części nadal działają poprawnie. Nie możemy odłożyć ani przedłużyć sprintu, ponieważ mamy comiesięczne poprawki. Tak więc ta zmiana wykraczająca poza sprint nie może zatrzymać innych prac dodanych do poprawki. Refaktoryzacja a przeprojektowanie: Tylko dlatego, że nasz proces rozwoju nie jest wystarczająco wydajny, aby obsłużyć tę refaktoryzację w cyklu dwutygodniowym, nie uzasadnia zmiany jego nazwy na przeprojektowanie. Chciałbym wierzyć, że w przyszłości będziemy mogli wykonać dokładnie to samo zadanie w cyklu dwutygodniowym, gdy nasz proces się poprawi. Kod, o którym mowa, nie musiał się zmieniać od bardzo dawna i jest dość stabilny. Teraz, gdy kierunek firmy staje się coraz bardziej przystosowany do zmian, chcemy, aby ta część bazy kodu była tak samo elastyczna jak reszta. Co wymaga refaktoryzacji. Na podstawie przedstawionych tu odpowiedzi, staje się jasne, że brakuje rusztowania niezbędnego, aby ta refaktoryzacja zadziałała w ramach czasowych normalnych sprintów. Odpowiedź: Zamierzam wykonać podejście branch and merge sugerowane przez Corbin March po raz pierwszy, abyśmy mogli dowiedzieć się więcej o tych problematycznych obszarach i jak zidentyfikować brakujące testy. Myślę, że idąc naprzód, powinniśmy przyjąć podejście, które zasugerował Buhb, aby zidentyfikować obszary, w których brakuje testów i najpierw je wdrożyć, a następnie przeprowadzić refaktoryzację. Pozwoli nam to utrzymać normalny dwutygodniowy cykl sprintu, tak jak wielu tutaj mówiło, że w przypadku refaktoryzacji zawsze powinno być.


title: Czy wyświetlanie wiadomości e-mail w formacie HTML stanowi zagrożenie bezpieczeństwa?

text: Piszę prosty webmail, w którym chcę (oczywiście) wyświetlać e-maile. Zastanawiam się, czy powinienem podjąć jakieś środki ostrożności podczas wyświetlania wiadomości e-mail w formacie HTML: czy zrzucanie zawartości wiadomości e-mail do `<div>` stanowi zagrożenie bezpieczeństwa? Zgaduję, że tak, ponieważ e-mail może zawierać wszystko (czy może zawierać Javascript?). Ale jak mam postępować? Jak radzą sobie inne e-maile? Myślę, że usuwanie niebezpiecznych tagów HTML byłoby złym rozwiązaniem, ponieważ nie można pomyśleć o wszystkich przypadkach.


title: Podejście do tworzenia oprogramowania, które w przyszłości będzie musiało zostać przeniesione na wiele platform mobilnych

text: Obecnie pracuję nad projektem wstępnym nowego produktu, który moja firma będzie wkrótce wypuszczać. Zaczniemy na Androidzie, ale potem będziemy musieli szybko rozwinąć iPhone'a, iPada.... a potem porty Windows 8 aplikacji. W zasadzie jedynym kodem, którego nie można ponownie użyć, jest kod widoku i funkcje multimedialne. Będzie to klient SIP (oczywiście użytkownik aplikacji nie będzie o tym wiedział) z kilkoma dzwonkami i gwizdkami dla naszych własnych celów biznesowych. Moją pierwszą myślą jest stworzenie całego silnika w C i zapewnienie ładnego API dla biblioteki C, ponieważ JAVA i .NET pozwolą na natywne wywoływanie, i powinienem być w stanie bezpośrednio połączyć się z biblioteką C w Object-C. Czy istnieje lepsze podejście do ogromnego ponownego wykorzystania kodu, które również pozostaje zbliżone do platformy natywnej? Tj. Nie chcę zależności takich jak Mono-droid i tym podobnych lub skomplikowanych schematów interpretera/tłumacza. Nie mam nic przeciwko ponownemu kodowaniu widoków dla każdej platformy, ale nie chcę mieć wielu wersji głównego silnika. Ponadto, jeśli chcę mieć dobre mechanizmy abstrakcji (tak jak powiedziałbym, C++), czy jest to możliwe? Czytałem, że C++ nie jest dozwolone dla urządzeń iPad i iPhone. Bardzo chciałbym zająć się dekodowaniem mediów w bibliotece C, ale zakładam, że będzie to zależne od platformy, więc prawdopodobnie też nie będzie opcji. Jakieś pomysły tutaj?


title: Czy przestrzeganie metodologii Agile jest sprzeczne z tym, że programiści powinni mieć ciche warunki pracy (jeden z testów Joela)?

text: Moja organizacja przechodzi na zwinny proces tworzenia oprogramowania. W jego ramach projektanci i inżynierowie ds. jakości zasiądą razem ze zmniejszonymi ścianami boksu. Zastanawiam się tylko, jak spełnia jeden z testów Joela - **programiści powinni mieć ciche warunki pracy**. Czy to temu nie zaprzecza? Jeśli tak, czy przyjmuje się to za pewnik podczas adopcji Agile?


title: Badania nad wpływem hałasu na produktywność programistów

text: Czy ktoś ma jakieś linki do badań, które pokazują, jak hałas wpływa na produktywność programistów? W szczególności chciałbym zobaczyć, jak/jeśli produktywność wzrasta, gdy spada poziom hałasu. Jak wskazano w komentarzach, natura przepływu pracy w programowaniu jest taka, że przez cały czas wchodzisz i tracisz ostrość - więc prawdopodobnie szum ma inny wpływ niż inne linie pracy. Powodem, dla którego uważam, że jest to specyficzne dla programisty, jest to, że interesuję się również matematyką. W hałaśliwym miejscu, gdy zaczynam myśleć o matematyce, hałas znika i gubię się w świecie obrazów. W rzeczywistości moim ulubionym miejscem do matematyki była zawsze kawiarnia The Copper Kettle, tętniące życiem miejsce turystyczne. Z programowaniem jest zupełnie inaczej. Podczas programowania zazwyczaj myślę werbalnie, a jakiekolwiek mówienie niszczy mój tok myślenia. Dosłownie nie jestem w stanie programować wszędzie tam, gdzie jest słyszalna rozmowa. Rozmawiałem z innymi programistami, którzy nawet nie zauważają przeszkadzających mi szumów, a mówią, że myślą głównie obrazami. Dlatego zastanawiam się, czy istnieją jakiekolwiek badania naukowe na temat tego, czy programowanie jest szczególnie narażone na hałas w porównaniu z powiedzmy matematyką lub prawnikiem.


title: Co to znaczy, że parsery StAX nie są kompletne lub poprawne?

text: Przeglądając sieć znalazłem te dwa slajdy na stronie XOM (model obiektowy XML): * slide1 * slide2 Gdzie odnoszą się do parserów SAX(push) i StAX(pull). Zastanawiam się więc, co to znaczy, że parser StaX nie jest w praktyce kompletny lub poprawny?


title: Wydajny sposób sortowania dużego zestawu liczb

text: Muszę posortować zbiór 100000 liczb całkowitych jako część programowania Q. Limit czasu jest dość restrykcyjny, więc muszę użyć najbardziej efektywnego czasowo podejścia. Mój bieżący kod — #include<cstdio> #include<algorithm> using namespace std; int main() { int n,d[100000],i; for(i=0;i<n;++i) { scanf("%d",&d[i]); } sortuj(d,d+n); .... } Czy to podejście byłoby bardziej efektywne? int main() { int n,d[100000],i; for(i=0;i<n;++i) { scanf("%d",&d[i]); sortuj(d,d+i+1); } .... } Jaki jest najwydajniejszy sposób sortowania dużego zestawu danych? Uwaga - nie praca domowa...


title: Jak program Visual Studio może pomóc uniknąć duplikowania kodu?

text: Pracuję w zespole programistów. Każdy wprowadza zmiany bez zbytniego przenoszenia, jeśli to samo jest już zaimplementowane w kodzie. Prowadzi to do ciągłego rozwoju klas i poważnego powielania. Chcę dodać pozycje do definicji klas, na podstawie których programista może ocenić, co ta klasa ma. * Czy to pomogłoby? * Jak to zrobić w Visual Studio? * Jeśli to nie pomogłoby, jaka byłaby lepsza alternatywa, aby zachęcić programistów do sprawdzenia, czy coś istnieje przed wdrożeniem?


title: Jak sprawdzić, czy płytka jest zakryta wielokątem?

text: Mając (przecinający się) wielokąt, chciałbym dowiedzieć się, które płytki są przez niego pokryte. **Przykład** : ![przykład](http://i.stack.imgur.com/xpNvv.png) **Szczegóły** : * Kafelki są kwadratowe, szerokość/wysokość 1 jednostki * Siatka zaczyna się za (0 ,0) * Narożniki wielokąta mogą mieć współrzędne zmiennoprzecinkowe (np. 3.433, 5.234) * Ogólnie krawędź wielokąta może mieć długość 1000 - 10000 kafelków Próbowałem iterować po wszystkich kafelkach i sprawdzić, czy są w wielokącie, jednak ponieważ muszę iterować ponad 10000² kafelków, zajmuje to dość dużo czasu. Interesuje mnie rozwiązanie, które pozwala mi szybko odpowiedzieć "Czy kafelek (x,y) jest objęty wielokątem?" bez przeliczania wszystkiego od podstaw dla każdego pytania. Każde rozwiązanie/podejście/pseudo-kod/wskazówka, które prowadzą mnie do właściwego rozwiązania, zostaną zaakceptowane.


title: Jak ukryć zależność implementacji AOP bez łamania enkapsulacji?

text: Mam koncepcję rzeczy `SlowLoading`: publiczny interfejs SlowLoading { boolean hasLoaded(); } Mam również komponent `MyComponent`: interfejs publiczny myComponent{ void doSomething(); } Moja implementacja obejmuje zarówno: public class MyComponentImpl implementuje SlowLoading, MyComponent { // pominięto dla zwięzłości } Mam kontener (interfejs pominięty dla zwięzłości), który zwraca `MyComponent`: public class MyContainerImpl implementuje MyContainer{ @Inject private MyComponent component; @Override public MyComponent doSomething(){ // magia return myComponent; } } Mam również komponent AOP, który przechwytuje zwrot wolno ładujących się rzeczy i niejawnie czeka na ich załadowanie przed zwróceniem: @Pointcut("execution(SlowLoading+ *(..) )") public void returnSlowLoadingThing() { } obecnie metoda `MyContainer` nie jest proxy, ponieważ zwracana wartość nie implementuje `SlowLoading`. Jaki jest najlepszy sposób na uchwycenie tego zachowania? Rozważane przeze mnie opcje: * Rozszerz `MyComponent` na `SlowLoading`. Czuje się to jak zapach kodu i łamanie enkapsulacji - krwawienie implementacji do interfejsu. Klient nie dba o to, czy ładuje się wolno, czy nie. * Wstrzyknij `MyComponentImpl` bezpośrednio do mojego kontenera i zwróć go jawnie (zwraca współwariant). Ponownie, wydaje się, że łamie to enkapsulację i punkt programowania interfejsów, ale wydaje się lepsze niż powyższe, ponieważ odbywa się to na niższym poziomie i jest ukryte za interfejsem (szczegóły implementacji). Jednak łamie enkapsulację funkcjonalności AOP, która powinna być ortogonalna i przejrzysta. * Wykonaj oczekiwanie AOP przed wywołaniem metody na rzeczy `SlowLoading`. To wydaje się najbardziej odpowiednie, ale do tej pory nie udało mi się tego uruchomić.


title: Współpraca między grafikiem a programistą Expression Blend?

text: Jestem nowy w świecie programowania i trochę zdezorientowany. Mój brat chciałby ze mną pracować nad jakimś programem. Jestem grafikiem, więc poprosił mnie o UI i wszystkie jego elementy. Naprawdę bardzo bym mu pomogła, więc znalazłem Expression Blend for Visual Studio. Na początku wyglądało to świetnie, ale po kilku minutach zacząłem rozumieć, że zupełnie nie wiem, co zrobić z moim projektem. Załóżmy, że stworzyłem już interfejs. Nawet z Blend. Teraz, jak mogę mu to dać, aby mógł zaimplementować interfejs użytkownika? Jak wyeksportować i jak mu to dać. Na przykład pracuje na osobnym komputerze i muszę wyeksportować projekt i przekazać mu go do realizacji. Wiem wszystko o projektowaniu graficznym, ale nic o kodowaniu. Wiem, że używa Visual Studio :) Pracowałem w firmie internetowej, więc mój przepływ pracy był bardzo łatwy. Wystarczyło wysłać dobrze przygotowany plik PSD. Z Blendem nie wiem, co będzie dalej po zakończeniu części projektowej.


title: Decyzja dotycząca niesprawdzonych wyjątków w Scala

text: Jako programista java zawsze byłem krytyczny wobec niesprawdzonych wyjątków. Przeważnie programiści używają go jako drogi do łatwości kodowania tylko po to, by później stwarzać problemy. Również programy (choć niechlujne) z zaznaczonymi wyjątkami są znacznie solidniejsze w porównaniu z niesprawdzonymi odpowiednikami. Co zaskakujące, w Scali nie ma nic o nazwie Sprawdzone wyjątki. Wszystkie zaznaczone i niezaznaczone Java są odznaczone w Scali. Jaka jest motywacja tej decyzji? Dla mnie otwiera to szereg problemów przy korzystaniu z dowolnego kodu zewnętrznego. A jeśli przypadkiem dokumentacja jest słaba, skutkuje to KILL.


title: Programista powinien skoncentrować się przynajmniej na ilu językach?

text: Dla mnie jestem osobą C# i Java. Uważam, że te 2 języki są dość podobne, więc łatwiej mi się krzyżować. Nie jestem pewien, czy to dobry pomysł, aby wybrać inne języki. jakieś pomysły?


title: Jak sprawić, by Classic ASP było interesujące, jeśli utkniesz z nim?

text: Kiedyś pracowałem w naprawdę małej firmie outsourcingowej (4 programistów i szef), potem kiedy stres i częste długie zmiany sprawiły, że sytuacja była nie do zniesienia, przerzuciłem się na lepiej płatną pracę z bardziej rozluźnionym harmonogramem, który pozwala mi na więcej czas wolny. Problem polega jednak na tym, że w większości wszystko jest zakodowane w klasycznym ASP, który łączy się z niestandardowym systemem kolejkowania C++, który przechowuje wszystko w systemach AS400. Mój szef był kiedyś jednym z programistów, którzy podjęli pierwsze starania w tym kierunku i oczywiście nigdy nie zatwierdzi przejścia na inny język/technologię, pomimo rosnących trudności, jakie stanowią rozwijanie dzisiejszych potrzeb biznesowych za pomocą wczorajszych narzędzi. W dającej się przewidzieć przyszłości utknąłem w kodowaniu z klasycznym ASP i nie mogę znaleźć sposobów, aby było co najmniej interesujące, ponieważ wcześniej pracowałem z .NET i Javą i czuję, że mam zamiar wstecz... Jakieś rady?


title: Jak „przekazać klucze” hostowanemu przeze mnie serwerowi internetowemu?

text: Mam tylko umowę o hosting ustny z klientem. Niestety relacja pogorszyła się do punktu, z którego nie ma odwrotu, dlatego chciałbym zakończyć umowę hostingową i przekazać im hasło roota. To jest wirtualny serwer dedykowany, za który płacę, a potem płacą mi. Nie przeszkadza im to, ale problem polega na tym, że nie ufam temu klientowi ani trochę. Czy mogę zmusić ich do podpisania czegoś, co mówi, że zwalniają mnie z odpowiedzialności za zmiany wprowadzone na serwerze, gdy podam im hasło? W jaki sposób hasło roota jest zwykle przekazywane klientom, którzy o to proszą, upewniając się, że nie wrócą później i nie obwiniają Cię o złamanie serwera? Czy samo przekazanie im hasła roota oznacza, że przekazujesz pełną kontrolę, a tym samym całkowitą odpowiedzialność?


title: Czy naprawienie błędu na końcu projektu jest znacznie droższe?

text: W poście na blogu autorstwa Andrew Hay'a sformułowano następujący aksjomat: > Naprawienie błędu pod koniec projektu kosztuje znacznie więcej niż > naprawienie tego samego błędu na wcześniejszym etapie projektu. Nie wydaje się to jednak pewne, zwłaszcza po przeczytaniu posta na blogu na temat Less Wrong, a dane, które widziałem, aby to zrobić, są bardzo stare. Czy ten aksjomat jest nadal aktualny?


title: jak zapytać w rozmowie, czy projekt jest nowym rozwojem lub utrzymaniem?

text: Jak zapytać potencjalnego pracodawcę podczas rozmowy kwalifikacyjnej, czy projekt, nad którym będziesz pracować, to wsparcie i utrzymanie, czy nowy rozwój? Ostatnim razem w wywiadzie zadałem to pytanie i powiedziano mi, że to wsparcie + nowy rozwój, ale okazało się, że jest to wsparcie + ulepszenia. Nie chcę ponownie popełnić tego samego błędu i wpaść w coś takiego. W większości przypadków ludzie przeprowadzający rozmowę kwalifikacyjną powiedzą, że to wsparcie + nowy rozwój, ale to nie jest to, czym okazuje się po zaakceptowaniu pracy. Więc jakie pytania uzyskają właściwą odpowiedź, jeśli projekt jest naprawdę nowym rozwojem, czy tylko wsparciem i łataniem, i mam nadzieję, że działa to jako projekt.


title: Jak przekazać wartość zmiennej z jednej klasy do drugiej? (C++)

text: Mam klasę ("Klasa A", nazwijmy ją), która oblicza wartość zmiennej prywatnej (którą możemy nazwać numLoaves) za pomocą funkcji publicznej. Muszę użyć wartości numLoaves w funkcji publicznej w klasie B. Jaki jest najlepszy i najbardziej wydajny sposób przekazania tej wartości? Jestem nowy w programowaniu i godzinami szukałem rozwiązania bez powodzenia. Uwaga: funkcja w klasie B jest nieważna i musi być w ten sposób. Nie potrafię używać globalnych zmiennych ani obiektów, wskaźników, zaprzyjaźnionych funkcji ani zaprzyjaźnionych klas. Zmienna musi być prywatna. Dziękuję Ci!


title: Serializacja Java - zalety i wady, używać czy unikać?

text: Serializacja służy do utrwalania w Javie. Utrwalenie kilku obiektów przy użyciu serializacji może być w porządku. Ale w przypadku dużej liczby obiektów ORM, baza danych itp. mogą być lepsze. Wydaje się, że serializacja jest przydatna tylko w przypadku małych zadań. Może się mylę. Więc proszę mi powiedzieć, jakie są zalety serializacji nad metodami bez serializacji? Kiedy należy go stosować, a kiedy należy go unikać? To pytanie przyszło mi do głowy po przeczytaniu artykułu w DOne Czy serializacja obiektów jest zła? A oto wiersze, które dały początek mojemu pytaniu: > Jeśli spojrzysz na Javę i jej obiekty sesyjne, używa się > czystej serializacji obiektów. Zakładając, że sesja aplikacji jest dość krótkotrwała, czyli co najwyżej kilka godzin, serializacja obiektów jest prosta, dobrze obsługiwana i wbudowana w > koncepcję sesji Java. Jednak gdy trwałość danych trwa > przez dłuższy okres czasu, prawdopodobnie dni lub tygodni, i musisz się martwić > o nowe wydania aplikacji, serializacja szybko staje się zła. > Jak wie każdy dobry programista Java, jeśli planujesz serializować obiekt, nawet > w sesji, potrzebujesz prawdziwego identyfikatora serializacji (serialVersionUID), a nie tylko > 1L, i musisz zaimplementować interfejs Serializable. Jednak większość > programistów nie zna prawdziwych zasad > procesu deserializacji Javy. Jeśli Twój obiekt się zmienił, coś więcej niż tylko dodanie prostych pól do > obiektu, możliwe jest, że Java nie może poprawnie zdeserializować obiektu >, nawet jeśli identyfikator serializacji nie uległ zmianie. Nagle nie możesz już odzyskać > swoich danych, co jest z natury złe. >> Teraz, może deweloperzy czytający to mogą powiedzieć, że nigdy nie napisaliby kodu, który miałby ten problem. To może być prawda, ale co z biblioteką >, z której korzystasz, lub innym programistą, który nie jest już zatrudniony w Twojej firmie? Czy możesz > zagwarantować, że ten problem nigdy się nie zdarzy? Jedynym sposobem zagwarantowania > jest użycie innej metody serializacji.


title: Czy mogę utworzyć i opublikować aplikację na iPhone'a, budując ją na używanym komputerze Mac?

text: Nigdy nie publikowałem aplikacji w sklepie z aplikacjami. Mam szansę kupić od kogoś Apple Mac. Czy można tego użyć do opublikowania w sklepie z aplikacjami? Co by było, gdyby pierwszy właściciel był również deweloperem? Jeśli kupię Maca tylko z zamiarem opublikowania aplikacji, czy powinienem wybrać tylko nowy, aby uzyskać licencję programisty, czy mogę to zrobić również na używanym Macu?


title: Ramy wewnętrzne

text: Niedawno ukończyłem studia i od razu dostałem pracę. Firma posiada wersje oprogramowania, które przekazuje swoim klientom, jednak oprogramowanie jest w dużej mierze, a raczej w całości, zbudowane na własnym frameworku. Ten wewnętrzny framework prawie wszystko oddziela od „programisty” pod względem szczupłego kodu Java, a zamiast tego zapewnia metody pomocnicze dla prawie WSZYSTKIEGO. Na przykład tworzenie interfejsu użytkownika i łączenie się z zapleczem odbywa się całkowicie na podstawie ich struktury przy użyciu ich „API”, jeśli chcesz. Moje najpilniejsze myśli są teraz - Zrób rok doświadczenia i wynoś się, w przeciwnym razie będę zamknięty i zbyt przestraszony, by odejść w przyszłości. Moje pytania brzmią: Czy jest to powszechna praktyka w branży? Czy to zatrzyma moje umiejętności? Czy powinienem zwolnić?


title: Piszesz własny framework czy używasz już istniejącego?

text: Wiem, że są podobne pytania do tego i większość z nich przeczytałem. Większość odpowiedzi na te pytania dotyczy aspektów „opłacalności” i „oszczędności czasu” we frameworkach, które są ogromnymi argumentami przemawiającymi za używaniem frameworków. Jestem całkiem nowym programistą .NET i próbuję nauczyć się takich rzeczy, jak WPF, MVVM, projektowanie architektury warstwowej, wstrzykiwanie zależności, logowanie, dostęp do bazy danych, rozwój oparty na testach i wiele innych różnych technologii/technik. Większość zasobów, które znajduję w odniesieniu do takich tematów, zaczyna się od niezwykle prostego przykładu, aby „pokazać”, dlaczego powinieneś użyć danej technologii/techniki, co naprawdę wygląda całkiem nieźle z tym prostym przykładem, ale **_nie ma sensu dla kogoś którzy nie radzili sobie z rzeczywistymi problemami, w których te technologie/techniki pomagają_**. Po prostym przykładzie, który sprawia, że zastanawiam się, co tak naprawdę rozwiązuje ta konkretna technologia/technika, zwykle mówią „Hej, wiesz co, jest na to framework o nazwie ..., użyjmy go po prostu w pozostałych przykładach ”. Wstrzykiwanie zależności? Po prostu użyj Ninject. Chcesz sfałszować rzeczy? No dalej, po prostu użyj Moq. MVVM? Żartujesz? wystarczy użyć MVVM Light Toolkit! Co jest naprawdę świetne. Jestem pewien, że wszystkie te narzędzia ułatwiają życie wszystkim programistom. Ale mój problem polega na tym, że 1. Próbuję używać TDD, ale nigdy nie doświadczyłem problemów, których doświadczali ludzie podczas tworzenia rzeczy bez TDD, co ostatecznie skłoniło ich do wymyślenia takiej techniki. Rozumiem koncepcję, teoretycznie widzę, dlaczego został stworzony, ale w praktyce nie mam wystarczającego doświadczenia, aby zobaczyć kod, który skorzystałby na TDD. Bo niewiele widziałem. 2. Nigdy nie miałem problemów z tworzeniem ogromnej aplikacji, której potrzebowałem do oddzielenia rzeczy i powiedziałem „O mój Boże! To śmieszne! Muszę znaleźć technikę, aby następnym razem nie mieć tak wielu problemów”. i dowiedziałem się o "Dependency Injection". Wszystkie małe rzeczy, które do tej pory opracowałem, działały dobrze bez potrzeby wstrzykiwania zależności. 3. Nigdy nie napisałem aplikacji WPF, w której czułem, że powinno być łatwiej, warstwa prezentacji powinna być oddzielna, powinna być powiązanie danych. Cholera, nie napisałem nawet jednej aplikacji WPF! Więc wszystkie te rzeczy sprawiają, że myślę, że będę używał wszystkich tych narzędzi, nie doświadczając z pierwszej ręki żadnej sytuacji w świecie rzeczywistym, która kultywowała ich tworzenie. Ale jednocześnie nie mogę próbować napisać ogromnej aplikacji biznesowej w WPF bez użycia MVVM lub dobrego projektowania warstwowego i doświadczać wszystkich problemów, których ludzie doświadczali w przeszłości, aby docenić wszystkie te nowe technologie/techniki. Ponieważ są ludzie, którzy opracowują rzeczy, posuwają się dalej, wypuszczają rzeczy, które działają. Zostanę w tyle z powodu mojej obsesji na punkcie uczenia się wszystkiego, czego można się nauczyć. A poza tym **_te rzeczy nie są łatwe do nauczenia się bez wcześniejszego doświadczenia problemów._** Ale jednocześnie mam koszmary, że zaczynam pracę w nowej firmie i ludzie mówią mi: „Nie możesz zakodować własny framework MVVM? Zawsze musisz używać Prism? Hahahahaha! i chodzą dookoła, wskazując i śmiejąc się na mnie w kółko. Czuję się jak gorszy programista. Czuję, że nie mam tego, czego potrzeba do samodzielnego tworzenia frameworka. Czuję, że jestem w stanie złożyć tylko rzeczy, które tworzą inni „lepsi” ludzie. Chciałbym zapytać wszystkich doświadczonych ludzi, jakie strategie stosowałeś w swojej karierze? Czy zawsze korzystasz z istniejących frameworków? Czy tworzysz projekty dla zwierząt, aby dowiedzieć się, dlaczego te frameworki istnieją? Krótko mówiąc, na czym polega cienka granica między używaniem frameworka a tworzeniem własnego? A co ważniejsze, jak wypełnić lukę w wiedzy, która automatycznie pojawia się, jeśli używasz technologii/techniki, nie widząc rzeczywistych problemów, w których pomagają?


title: Jak często zmieniałeś stacki w swojej karierze? Czy to zaszkodziło twojej karierze?

text: Karierę rozpocząłem pisząc C#. Jednak po roku przeniosłem się na Javę, a po 6 miesiącach wróciłem do C#, gdzie jestem już ponad 3 lata. Mocno wierzę, że chociaż podstawowe zasady się nie zmieniają i są ponownie stosowane, uczenie się nowego stosu (i ram wspierających) jest zawsze dużą inwestycją. Jak często zmieniałeś stacki w swojej karierze? Czy kiedykolwiek zaszkodziło to twojej karierze? Czy lubisz pracować z ludźmi, którzy pracowali na wielu stosach, ale mają mniejszą wiedzę na temat odpowiednich stosów lub z ludźmi, którzy pracowali na jednym stosie i mają głębsze zrozumienie tajników tego typu?


title: Przyjazna dla użytkownika funkcja planowania

text: Próbuję dodać funkcję planowania do mojej aplikacji do skrobania stron internetowych, która pozwoli użytkownikowi zaplanować zadania skrobania, aby mógł na przykład wykonywać zadanie w każdy poniedziałek lub co 2 godziny lub takie rzeczy. Z jednej strony mógłbym stworzyć bardzo prosty harmonogram, który pozwalałby wybrać konkretną datę i godzinę oraz przedział czasowy, który wskazywałby, jak często wykonywać zadanie, zaczynając od określonej daty i godziny. Więc jeśli na przykład wybiorę 31 grudnia o godzinie 14:00 i wybierze 1 dzień jako przerwę, zadanie będzie uruchamiane codziennie o 14:00, począwszy od 31 grudnia. Ale co, jeśli chce uruchamiać zadanie w każdą sobotę i Niedziela, czy trzy razy dziennie w niedziele? Z drugiej strony mógłbym osadzić jakiś język skryptowy, który pozwoli użytkownikowi używać dowolnej logiki, ale byłoby to przesadą dla mnie i dla użytkownika. On _nie_ musi wykonywać pracy każdego dnia miesiąca, która jest liczbą pierwszą lub czymś w tym rodzaju. Jest to więc pytanie zdroworozsądkowe, a nie programistyczne. Jak byś to zaimplementował lub czy znasz podobny rodzaj planowania pracy w jakimkolwiek innym rodzaju aplikacji? Spojrzałem na harmonogram w moim programie antywirusowym, ale ten jest niezwykle prosty i prosty.


title: Używanie Subversion jako repozytorium artefaktów w porównaniu z konkretnym narzędziem do zarządzania artefaktami

text: TL; DR: Po co używać czegoś takiego jak Apache Archiva lub Sonatype Nexus jako repozytorium artefaktów zamiast Subversion? System kompilacji, którego używam, ma obecnie wiele binarnych obiektów blob (obrazów, plików dźwiękowych, skompilowanych plików binarnych itp.), zarówno jako dane wejściowe, jak i wyjściowe do naszych kompilacji. Nasz system zarządzania nimi jest bardzo doraźny; niektóre są rejestrowane w naszym repozytorium Subversion wraz z naszym kodem, inne są przechowywane gdzie indziej poza jakąkolwiek formalną kontrolą wersji. Zastanawiam się nad konsolidacją tego, więc mamy coś, co jest bardziej spójne i łatwe w użyciu, a także oddziela artefakty binarne od kodu. Google mówi mi, że jest dostępnych wiele repozytoriów artefaktów (Archiva, Nexus, Artifactory, …), ale z czytania nie widzę żadnej przewagi nad używaniem ich w stosunku do Subversion. Będzie to dla nas opieką nad plikami binarnymi – już robi to w przypadku niektórych naszych plików binarnych, chcielibyśmy po prostu zmienić układ repozytorium, aby oddzielić je od kodu – i ma tę zauważalną zaletę, że mamy już serwery Subversion i doświadczenie. Więc. Jaka jest przewaga korzystania z dedykowanego systemu zarządzania artefaktami w porównaniu z ogólnym narzędziem kontroli wersji, takim jak Subversion?


title: Jak zaprojektować obieg strony internetowej?

text: Myślałem o tym naprawdę długo nie dochodząc do optymalnej odpowiedzi. Przede wszystkim jestem lekarzem, który uwielbia programować, ale nigdy się tego nie uczyłem, z wyjątkiem nauki w domu i wielu lat zabawy z kodem w wolnym czasie. Obecnie staram się zbudować mały projekt do zarządzania moją kliniką, w tym celu zacząłem od stworzenia listy opcji, które chcę wykonać. Przykład: 1. aktywny rekord pacjenta. 2. Uwierzytelnianie z różnymi rolami (np. pacjent, pielęgniarka, dr) 3. harmonogram wizyt (w tym kalendarz do harmonogramu szczepień/zabiegów itp. z przypomnieniem) 4. Zezwól lekarzowi na tworzenie własnych wtyczek. 5. dashboard dla lekarza do przeglądania statystyk Następnie zacząłem od codeigniter/mysql/php/jquery i zacząłem kodować. Moje kroki podczas tworzenia:- 1. 1. baza danych. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/51QXJ.png) Zacząłem od stworzenia wszystkich moich tabel, które będą mi potrzebne. 1. Utworzyłem wszystkie moje modele do obsługi tych tabel (1 model główny, który obsługuje podstawowy odczyt/zapis/aktualizację/weryfikację z uwzględnieniem moich relacji między tabelami Następnie zacząłem kodować moje widoki i kontrolery. Najpierw utworzyłem widok HTML, a następnie utworzyłem kontroler który obsłuży ten widok i zaczął kodować funkcje, aby interakcja z widokiem działała. Przykład podczas kodowania widoku spotkania(controller booking.php): ![tu wpisz opis obrazu](http://i.stack.imgur.com/ CM6BO.png) stworzył ten układ i sprawił, że tabela td jest klikalna, gdy użytkownik kliknie: jquery get (booking/add_patient_form) i wyskoczy, gdy użytkownik zapisze: wyślij do rezerwacji/zapisz - zapisz spotkanie, a następnie przeładuj funkcję index() itp. i kontynuowałem te same kroki tworzenia widoku, a następnie jego kontrolera - który zawiera całą logikę potrzebną do tego widoku - do wykonania całego projektu.Na koniec wszystkie moje funkcje docelowe działały poprawnie, ale ponieważ nie było PLANU od początku ** i jako że cały projekt był ciosem burzy mózgów i debugowania ng bez żadnego planu, po tym, jak zaszedłem tak daleko w tym projekcie, utknąłem w łatwości konserwacji i elastyczności! i nie potrafią ich ze sobą połączyć. Mam wrażenie, że każda strona w serwisie jest całkowicie odizolowana od innych i nawet nie pamiętam, jak każda strona jest ładowana i jakie funkcje znajdują się w środku bez podglądania! Czy mimo to mogę to odzyskać i uzyskać projekt?


title: Jak działa uwierzytelnianie z ASP.NET (przy użyciu Live ID i\lub uwierzytelniania Windows)

text: Jestem przede wszystkim programistą aplikacji klasycznych .NET. Wejście w świat sieci było trudne. Próbuję przekonwertować jedną z moich aplikacji Silverlight na HTML. Ale trudno mi rozgryźć system uwierzytelniania. Próbuję przeczytać o uwierzytelnianiu Live ID i uwierzytelnianiu systemu Windows, ale trudno mi to wszystko złożyć w głowie. Może możesz pomóc? # My App Framework Moja aplikacja kliencka jest stroną (lub stronami) HTML TypeScript (javascript). Serwer jest interfejsem API REST usług danych WCF hostowanym w programie ASP.NET. Usługa współpracuje z bazą danych SQL. # Problemy (oparte na oświadczeniach) Kiedy patrzę na coś takiego jak uwierzytelnianie Live ID, jest to znane jako uwierzytelnianie oparte na oświadczeniach, prawda? Więc jeśli mam to poprawnie zaimplementowane, ktoś wchodzi na stronę, muszę sprawdzić, czy jest zalogowany. Jak to zrobić ze strony HTML po stronie klienta? Czy mam cykliczny licznik czasu, który weryfikuje logowanie co 30 sekund, czy coś takiego? A może jest to wykonywane po stronie serwera przy każdym wywołaniu usługi? Wiem, że jeśli nie są zalogowani, muszę wysłać je na stronę logowania live, po zalogowaniu strona live przekieruje ich na mój serwer z tokenem autoryzacyjnym w ciągu zapytania (lub coś takiego) . Jednak w tym momencie, co mam zrobić 5 minut w dół linii, gdy nawiązują połączenie z usługą internetową w celu uzyskania danych? Czy w jakiś sposób ten token jest wysyłany przy każdym wywołaniu serwera? Jak sprawdzić, czy kiedy dzwonią do serwisu, to w rzeczywistości to oni? Czy muszę zawijać każde wywołanie usługi w metodzie ValidateUser() czy coś? Mam w bazie identyfikator użytkownika, który musiałbym jakoś dopasować do ich tokena użytkownika. # Problemy (uwierzytelnianie Windows) Poprzedni problem nadal istnieje tutaj. Skąd mam wiedzieć, że każdy telefon od klienta to nadal on? Dodatkowo jednak muszę zrozumieć, co robię od strony HTML do strony serwera, aby je uwierzytelnić, a następnie kontynuować uwierzytelnianie. # Wnioski Naprawdę nie mogę znaleźć żadnego wyjaśnienia, które koncepcyjnie wyjaśnia wszystkie te informacje i daje mi pełny obraz tego, jak to wszystko działa. Naprawdę mam nadzieję, że ktoś może wypełnić te luki i dać mi lepszy pomysł na wdrożenie uwierzytelniania klienta i serwera. Dziękuję! # Aktualizacja Znalazłem świetną książkę, która naprawdę wiele wyjaśnia. Jest zatytułowany „Przewodnik po tożsamości i kontroli dostępu opartej na oświadczeniach”. Jest to część serii wzorców i praktyk. Dziękuję wszystkim za odpowiedzi i nakieruj mnie na właściwą drogę.


title: Jakie zalety ma tworzenie aplikacji na smartfony w porównaniu z tworzeniem tej samej aplikacji, co aplikacja internetowa?

text: Weźmy na przykład aplikację Facebook. Dlaczego opracowali aplikację, skoro użytkownicy mogli po prostu uzyskać dostęp do swojej strony i zrobić to samo? Dla mnie oznacza to większe utrzymanie i większe koszty, ponieważ dla każdej funkcji dodanej do aplikacji internetowej ta funkcja będzie musiała zostać dodana również do aplikacji na smartfony. Dlaczego więc miałbym chcieć programować więcej niż raz (na każdą patformę iOS, Android itp.), skoro mógłbym mieć tylko jedną aplikację webową? Jakie korzyści otrzymuję? Jedyne, co przychodzi mi do głowy, to funkcja GPS. **EDYTUJ** : Moje pytanie jest bardziej zorientowane na aplikacje biznesowe, które będą używane tylko przez niektórych członków firmy, nie chodzi o sprzedaż aplikacji (do użytku prywatnego). Więc wbrew temu, co mówią niektóre odpowiedzi, rozwijając jako aplikację na smartfona, skorzysta na większej sprzedaży ze względu na „sklepy ze smartfonami” dla mnie ten punkt nie jest ważny, ponieważ aplikacja jest przeznaczona do użytku prywatnego. Rozwijając aplikację jako aplikację internetową, oznacza to, że można uzyskać do niej dostęp za pośrednictwem przeglądarki smartfona, a także komputera PC (dowolnej zdolnej przeglądarki), ale rozwijanie aplikacji jako aplikacji natywnej ograniczyłoby to tylko do pewnego rodzaju smartfona, więc ograniczylibyśmy posługiwać się. Z drugiej strony stworzenie go jako aplikacji internetowej oznacza, że aby uzyskać dostęp do aplikacji musi być dostępne połączenie z Internetem. Mając to na uwadze, jak przekonałbyś swojego szefa do napisania aplikacji na daną platformę smartfona (iOS/Android) zamiast rozwijania jej jako aplikacji webowej?


title: Zależność samouczka — jak nauczyć się kodować samodzielnie?

text: Oto rzecz: uczę się kodować w jQuery (nie w surowym JS) i PHP od około 3 miesięcy. W tym czasie nauczyłem się wielu różnych rzeczy, odkryłem, jak budowana jest aplikacja internetowa, jak działają serwery internetowe, jak działają bazy danych i jak naprawdę powinienem uczyć się JavaScript, zamiast opierać się na jQuery. Ale odkryłem, że polegam na samouczkach i przewodnikach online, aby wykonać dane zadanie; i to naprawdę wpływa na moje poczucie spełnienia, że tak powiem. Nigdy nie byłbym zadowolony z siebie, nawet po zbudowaniu całego scenariusza, bo ktoś musiał mi to wskazać. Ponieważ sam nie potrafiłem tego zrobić. Zasadniczo nie mam pojęcia, jak „zacząć” budować coś od zera, chyba że najpierw zobaczę implementację kogoś innego. Jak osiągnąć taki sposób myślenia, w którym będę w stanie rozpoznać, jakie kroki muszę wykonać, aby zakodować pomysł, aplikację, funkcję itp., bez potrzeby korzystania z samouczków lub sprawdzania obcego kodu. Jak przejść do następnego kroku, że tak powiem. TL; DR: Jak przestać w zależności od samouczków i napisać kod bez mówienia ci, co robić.


title: Pobieranie hierarchii węzłów drzewa przechowywanych w relacyjnej bazie danych

text: Mam hierarchiczny ADT, który chcę przechowywać w bazie danych. Węzły mają dokładnie jeden element nadrzędny, który jest również węzłem. Wiele węzłów może mieć ten sam węzeł nadrzędny. Moje obecne podejście wykorzystuje listę sąsiedztwa o strukturze tabeli podobnej do następującej: +----------------+---------------- --+------+-----+---------+-----+ | Pole | Wpisz | Zerowy | Klucz | Domyślnie | Dodatkowe | +----------------+------------------+------+-----+ ---------+----------------+ | node_id | int(10) bez znaku | NIE | PRI | NULL | auto_inkrementacja | | nazwa_węzła | varchar(255) | NIE | | NULL | | | parent_node_id | int(10) bez znaku | TAK | MUL | NULL | | +----------------+------------------+------+-----+ ---------+----------------+ gdzie parent_node_id przechowuje inne wartości node_id i kaskadowo podczas aktualizacji i usuwania. Aby wyświetlić hierarchię węzła, zaimplementowałem w moim skrypcie pętlę, która pyta o odpowiedni parent_node_id, co może skutkować 5 do 10 zapytaniami do bazy danych dla węzła. Uderzyło mnie to jako niewiarygodnie nieefektywne, ale nie wiem, jak tego uniknąć. Z mojego ograniczonego zrozumienia wewnętrznego działania relacyjnych baz danych wywnioskowałem, że procedury składowane niekoniecznie są właściwą drogą, ponieważ wydaje się, że problem dotyczy mojego podejścia do przechowywania ADT. Przyjrzałem się dyskusjom na temat przechowywania drzew w bazach danych, ale nie mogłem znaleźć niczego, co odpowiadałoby moim konkretnym potrzebom, którymi są: * Ważna jest integralność hierarchii węzłów, co wyklucza przechowywanie pełnej hierarchii w kolumnie ( Wyliczenie ścieżki.) * Za każdym razem, gdy pobieram węzeł, będę musiał również zapytać o jego pełną hierarchię.


title: Jak pozbyć się niezliczonych innych stwierdzeń w mojej klasie „Fabryka”

text: Jest to aplikacja webowa oparta na actionscript 3. Wszystkie moje moduły mam wyliczone w klasie, ale nigdy nie wiem, które moduły faktycznie pochodzą z bazy danych. Załóżmy, że w mojej aplikacji mam 20 modułów, ale użytkownik ma dostęp tylko do 10 z nich. Wszystko, co otrzymuję, to 10 ciągów znaków z bazy danych (nazwy modułów) za każdym razem, gdy użytkownik kliknie moduł, ten ciąg przechodzi przez dwadzieścia instrukcji else if, aż dopasuje wyliczoną wartość, a następnie zostanie wyświetlony na ekranie. Czy istnieje sposób na zoptymalizowanie tego? Moduły same w sobie nie są modułami flex, są po prostu leniwymi komponentami z instancjami.


title: algorytm wyodrębniania „możliwości” z drzewa

text: Z danego drzewa trzeba generować kolejne drzewa. Węzły można oznaczyć jako „wariant” w danym drzewie (przykład używa gwiazdki do oznaczenia węzła). Wszystkie możliwe kombinacje pomiędzy wariantami tworzą powstałe drzewa. Z następującego drzewa: - Produkt - Opakowanie * - Małe pudełko - Ciężkie pudełko * - Eko - Nieeko - Dostawa * - Standard - Ekspres Należy wygenerować 6 następujących drzewek: - Produkt - Opakowanie - Małe pudełko - Dostawa - Standard - Produkt - Opakowanie - Małe pudełko - Dostawa - Ekspres - Produkt - Opakowanie - Ciężkie pudełko - Eko - Dostawa - Standard - Produkt - Opakowanie - Ciężkie pudełko - Eko - Dostawa - Ekspres - Produkt - Opakowanie - Ciężkie pudełko - Nieeko - Dostawa - Standard - Produkt - Opakowanie - Ciężkie pudełko - Nieeko - Dostawa - Express Czy jest na to elegancki algorytm (rozwiązanie rekurencyjne)?


title: Jak obsłużyć przekazywanie wielu zależności w hierarchii modułów

text: Mam więc moją aplikację składającą się z wielu modułów w hierarchii modułów. Ponadto załóżmy, że każdy moduł jest klasą i mamy drzewo klas, w którym klasy na górze używają klas poniżej, aby to uprościć. „Klasa A1” na samym dole może zależeć od niektórych parametrów wejściowych. „klasa B1” jest powyżej „klasy A1” i tworzy i używa instancji „klasy A1”. Dlatego musi przekazać do nich zależności wymagane przez instancje `klasy A1`. Jeśli nie może stworzyć tych zależności z niektórych operacji, `klasa B1` ma teraz zależności, ale dodatkowo zależności `klasy A1`. Im wyżej pójdziemy, tym więcej tych zależności będzie się sumować, tak że „klasa” najwyższego poziomu będzie musiała znać wszystkie zależności, chyba że można je utworzyć na niższym poziomie. Oznacza to, że jeśli `klasa A1` mój program jest zależny od bieżącej `temperatury`, muszę przekazać to do `klasy` najwyższego poziomu, która następnie przekazuje go do następnej `klasy` i tak dalej, aż dotrze do samego dołu w „klasa A1”. Jeśli to zrobię, to stanę jawnie, ale oznacza to również, że mam metody lub klasy, które przyjmują wiele parametrów. **Zmienne** Co się stanie, jeśli `temperatura` może się zmienić podczas działania aplikacji - czy istnieje sposób na uniknięcie przekazywania jej w dół drzewa klas bez ujawniania jawnego stanu? Jak byście sobie z tym poradzili? **Stałe** Co jeśli `temperatura` jest stałą, która nigdy się nie zmieni podczas działania programu? Czy to daje nam więcej możliwości uniknięcia przekazywania go zawsze jako argumentu? Mogłem zobaczyć kogoś używającego konfiguracji globalnej (singleton), ale to utrudni testowanie, prawda? Mógłbym też przekazać nie samą `temperaturę`, ale obiekt konfiguracyjny. Oznaczałoby to, że „klasa B1” nie otrzymuje na przykład parametru „temperatury” i „ciśnienia powietrza”, ale otrzymuje obiekt konfiguracyjny, który przekazuje go do „klasy B1” i „klasy B2”, gdzie „klasa B1” wymaga tylko „ciśnienia powietrza”. a „klasa B2” wymaga tylko „temperatury”. Czy to dobre podejście? Jakie są plusy/minusy?


title: globalny try-catch w warstwie prezentacji

text: Mam aplikację 3-warstwową o następującej strukturze. * Warstwa prezentacji (projekt ASP.NET MVC) * Warstwa logiki biznesowej (usługi dla kontrolerów w PL) * Warstwa dostępu do danych (repozytoria) Każdy kontroler w PL współdziała ze swoją usługą w BLL, która z kolei ma dostęp do repozytoriów w DAL. Czy dobrą praktyką jest wykonanie „globalnego” try-catch'a w PL? W ten sposób, jeśli na przykład w DAL zostanie zgłoszony wyjątek, mogę wyświetlić użytkownikowi komunikat o błędzie. A może jest na to lepszy sposób?


title: Kiedy powinienem użyć pseudokodu zamiast schematu blokowego?

text: Jestem studentem pracującym z różnymi technikami programowania i natknąłem się na pseudokod i schemat blokowy. Wiem, że oba są używane w celu przemyślenia problemu przed rozpoczęciem programowania, ale mam kilka pytań z tym. 1. Kiedy używam pseudokodu do planowania, a kiedy używam schematów blokowych? A może lepiej zrobić jedno i drugie przed rozpoczęciem programowania. Szczególnie dla małej gry arcade w JAVA, ponieważ jest to mój następny projekt. 2. Zauważyłem, że pseudokod jest bardzo podobny do rzeczywistego kodu, a nie schematów blokowych. Czy to poprawiłoby pseudokodowanie, ponieważ zasadniczo kopiujesz / wklejasz pseudokod do swojego programu (oczywiście musisz go zmienić, aby pasował do języka. Rozumiem tę część). 3. Czy praktyczne jest używanie obu tych funkcji podczas programowania? W szczególności ta sama gra, o której mowa wcześniej. Dziękuję.


title: Wstrzykiwanie zależności ; dobre praktyki, aby zredukować standardowy kod

text: Mam proste pytanie i nie jestem nawet pewien, czy ma odpowiedź, ale spróbujmy. Koduję w C++ i używam iniekcji zależności, aby uniknąć stanu globalnego. Działa to całkiem nieźle i nie zdarza mi się często działać w nieoczekiwanych/niezdefiniowanych zachowaniach. Jednak zdaję sobie sprawę, że wraz z rozwojem mojego projektu piszę dużo kodu, który uważam za boilerplate. Co gorsza: fakt, że jest więcej standardowego kodu, niż rzeczywistego, sprawia, że czasami trudno go zrozumieć. Nic nie przebije dobrego przykładu, więc chodźmy: mam klasę o nazwie TimeFactory, która tworzy obiekty Time. _Aby uzyskać więcej szczegółów (nie jestem pewien, czy to istotne): Obiekty czasu są dość złożone, ponieważ czas może mieć różne formaty, a konwersja między nimi nie jest ani liniowa, ani prosta. Każdy "Time" zawiera Synchronizator do obsługi konwersji i aby upewnić się, że mają ten sam, poprawnie zainicjowany synchronizator, używam TimeFactory. TimeFactory ma tylko jedną instancję i jest dostępna w całej aplikacji, więc kwalifikuje się do singletona, ale ponieważ jest zmienny, nie chcę, aby był singletonem_ W mojej aplikacji wiele klas musi tworzyć obiekty Time. Czasami te klasy są głęboko zagnieżdżone. Powiedzmy, że mam klasę A, która zawiera instancje klasy B i tak dalej aż do klasy D. Klasa D musi tworzyć obiekty Time. W mojej naiwnej implementacji przekazuję TimeFactory do konstruktora klasy A, który przekazuje go do konstruktora klasy B i tak dalej, aż do klasy D. Teraz wyobraź sobie, że mam kilka klas, takich jak TimeFactory i kilka hierarchii klas, takich jak jeden powyżej: tracę całą elastyczność i czytelność, które mam przypuszczać, aby uzyskać za pomocą iniekcji zależności. Zaczynam się zastanawiać, czy w mojej aplikacji nie ma poważnej wady projektowej ... A może jest to konieczne zło stosowania wstrzykiwania zależności? Co myślisz ?


title: Jak pokazać lub skierować analityka biznesowego do modelowania danych?

text: Nasi analitycy biznesowi ciężko pracowali, aby zbierać dane za pomocą arkusza kalkulacyjnego. Jestem programistą odpowiedzialnym za import tych danych. Zwykle, gdy mocno naciskają na coś takiego, nigdy nie wiem, jak dobrze to wyjdzie, aż kilka tygodni później mam czas przeznaczony na pracę nad zadaniem programowania importu danych. Próbowałem zrobić jak najwięcej po drodze, nazwane zakresy, walidacje danych itp. Ale zwykle nie mam czasu na szczegółowe przyjrzenie się wszystkim danym i porównanie z miejscem docelowym w bazie danych, aby określić, jak dobrze to pasuje. Wiele razy może będzie mała tabela elementów, które jakoś muszę odnieść do czegoś innego w bazie danych, ale nie ma kluczy naturalnych lub biznesowych, które by mi to umożliwiły. Wykorzystaj to najlepiej, próbując napisać coś, co może porównywać ciągi i najlepiej je odgadnąć, a następnie przejść przez wysiłek tworzenia interfejsów dla użytkownika, aby dopasować zaimportowane dane do miejsca docelowego. Czuję, że gdyby analityk biznesowy faktycznie tworzył model danych, byłby zmuszony do myślenia o tych relacjach i doceniał potrzebę posiadania kluczy naturalnych lub biznesowych, aby być częścią arkusza kalkulacyjnego w celu płynnego importowania danych . Najbardziej zbliżona do analizy biznesowej jest duża, płaska lista pól i byłoby dobrze, gdyby był jak każdy inny słownik danych i zawierał typy danych + relacje, ale tak nie jest. To tylko kilka imion. Brak wskazania, jakiego rodzaju dane mogą przechowywać, i to do mnie należy odgadnięcie. Kiedy naciskam na więcej szczegółów, mówią, że to tylko zajęta praca. Jak mogę wyjaśnić znaczenie modelowania danych? Jak mogę im powiedzieć, co to jest i jak to zrobić? Wydaje się to niemożliwe, ponieważ nie doceniają jego znaczenia. Jednak zazwyczaj mają interes w pomaganiu w każdy możliwy sposób, po prostu to w szczególności nigdy nie spotkało się z umotywowaną odpowiedzią.


title: sqrt c# a sqrt c++

text: Pomysł, dlaczego wersja c# sqrt (System.Math.Sqrt) jest ~10 razy wolniejsza niż wersja c++? Co więcej, wersja C# wydaje się mieć jedną dodatkową cyfrę precyzji. Przeprowadziłem test pod MSVC2012. Użyłem double i wywołałem System.Math.Sqrt raz przed wykonaniem ławki, aby wymusić Jit


title: Czy istnieje akceptowany termin dla DSL zaimplementowanego w „standardowym” języku programowania?

text: Wydaje się, że artykuł Wikipedii dotyczący języków specyficznych dla domeny odnosi się tylko do rzeczywistych _języków_. Jednak słyszałem, że termin „DSL” odnosi się do unikalnie wyglądających paradygmatów kodowania, do których zachęcają biblioteki w „standardowych” językach. Na przykład z Ruby on Rails (stąd): create_table :posts do |t| t.string :name t.string :title t.text :treść t.timestamps end To jest kod Rubiego. To nie jest jego własny język, ale unikalny styl kodowania, do którego zachęca biblioteka, aby kodowanie w określonej domenie było bardziej czytelne. Czy jest na to osobny termin?


title: Zależności interfejsów lub klasy abstrakcyjne

text: Mam do podjęcia decyzję i zastanawiam się, jakie byłoby lepsze rozwiązanie. Dokonuję refaktoryzacji starszej aplikacji i zamierzam naprawdę zagłębić się w jej szczegóły. Obecnie istnieje 8 typów raportów, a jedna z modyfikacji ma na celu umożliwienie „zapisywania” różnych raportów na różne sposoby. Moje dwie myśli na ten temat brzmiały: 1. Mając klasę abstrakcyjną z abstrakcyjną metodą zapisu, każdy typ raportu może zdefiniować swój własny sposób działania. Możliwe, że dziedziczą po niej inne klasy abstrakcyjne, z których każda implementuje wirtualną metodę `Save()`. Wtedy klasy raportów mogą dziedziczyć po tej z odpowiednim mechanizmem zapisu. 2. Mieć interfejs raportu, który ma podpis metody, taki jak void Save(ISaveMechanism saveMechanism); Następnie stwórz interfejs z metodą `Save()`, a każdy typ raportu może użyć `saveMechanism.Save();` i po prostu użyć konkretnej wymaganej implementacji. Czy któreś rozwiązanie spowoduje więcej problemów/wad niż drugie? Ten projekt nie ma obecnie żadnych powiązanych testów jednostkowych, ale jeśli da się czas, dobrze byłoby dodać trochę później.