title: Obsługa dużych i małych zmian specyficznych dla klienta

text: Zastanawiałem się, jak najlepiej sobie z tym poradzić. **Problem** Projekt C# składający się z usług WCF używanych przez aplikację Flex. Klient może poprosić o zmianę funkcjonalności, która wymaga ode mnie zmiany kodu, aby działał tylko dla niego. Może to być pojedyncza linia kodu w metodzie, a może metoda działa w zupełnie inny sposób dla klienta x. **Moje pomysły** 1. Użyj oddziałów dla klientów, którzy mają personalizację. Gdy wydanie jest gotowe, połącz się z oddziałami klientów i staraj się nie zepsuć / nie zapomnieć, do czego służyła ich personalizacja. Używamy SVN. Nie jestem wielkim fanem tego, ponieważ baza kodu jest bardzo duża. 2. Użyj odwrócenia kontroli, wstrzykiwania zależności i MEF. Utwórz interfejs dla klas, które wymagają modyfikacji. Utwórz nowy projekt biblioteki klas (czyli customerabc), dodaj nową klasę, która implementuje właśnie utworzoną klasę, zastąp metody w razie potrzeby dla zmian klienta. Dodaj eksport MEF. Następnie umieszczam to w folderze dostosowywania i wskazuję tam MEF. Jeśli znajdzie plik DLL w folderze, użyje go zamiast eksportu z zestawu wykonawczego. Podoba mi się opcja 2 ... Plusy 1. Łatwy - normalna instalacja wdrożeniowa, a następnie wrzucenie pliku DLL. 2. Oczywiste – może nie być zbyt jasne, czy klient uruchamia kod ze swojego oddziału. Dzięki tej opcji mogłem po prostu spojrzeć na folder dostosowywania. 3. Wyczyść — istnieją tylko pliki, które należy dostosować. Nie ma potrzeby posiadania pełnej kopii bagażnika. d. Promuje lepsze SOLID dla przyszłego rozwoju i refaktoryzacji (ten projekt ma niewielkie OOP). Wady 1. Trudniej będzie zarządzać zmianami w trunku do projektów klienta. 2. To niekoniecznie rozwiązuje mój problem ze zmianami bazy danych lub zmianami po stronie Flex. 3. Jeśli zmiana dotyczy pojedynczej linii kodu w metodzie 500 linii, nie widzę innej opcji niż nadpisanie tej metody, skopiowanie wklejenia kodu do nadpisania klienta i dokonanie zmiany w jednej linii. Nie jest to dla mnie dobre wykorzystanie DRY, ale czy istnieje dobry sposób na obejście tego? 4. OK, więc lepsze wykorzystanie zasad OOP i SOLID może złagodzić niektóre z tych problemów, ale oznacza to również, że aby zaimplementować proste żądanie klienta, muszę dokonać poważnej refaktoryzacji całej klasy... potencjalnie wielu klas. Co powinienem zrobić?


title: Jakie są wady dyskretnych wzorców skryptów w aplikacjach internetowych?

text: Po pierwsze, czy istnieje nazwa dla tego jako wzorca projektowego w dobrej wierze? Obecnie nazywam to po prostu "dyskretnym javascript". Oto krótki przykład tego, o czym mówię: 1.) Użyj atrybutów HTML5 data-*, aby zdefiniować wartości, które będą używane w skryptach UX. Coś takiego: <input type="date" data-app-calendar="datepicker" /> 2.) Użyj skryptu, aby zainicjować zachowania javscript przy użyciu tych atrybutów danych (function($) { $.app = $.app | | {}; $.app.obtruders = $.app.obtruders || {}; $.app.obtrude = function(selector) { var obtruder, obtruders = $.app.obtruders; for (obtruder w obtruders) { if (!obtruders.hasOwnProperty(napędzający)) kontynuuj; if (typ natrętów[natrętnik] === 'funkcja') natręt[natrętnik].apply(this, Array.prototype.slice.call(arguments, 0, 1) || document); } }; $.extend($.app.obtruders, { calendar: function (selector) { $(selector).find('[data-app-calendar=datepicker]').datepicker(); } } ); $(funkcja () { $.app.obtrude(dokument); }); })(jQuer y); To, co kończysz, imo, to znaczniki prezentacji, które są bardzo wyraźnie oddzielone od skryptów behawioralnych. Powyższy przykład jest prosty, ale można go rozszerzyć na bardziej złożone skrypty UX, takie jak mapy google (pracuję nad tym teraz). Możesz nawet dodać nowych „obtrudników” w oddzielnych plikach javascript, rozszerzając literał obiektu $.app.obtruders. Zanim zaczniemy szerzej używać tego wzorca w naszej aplikacji, chciałem zebrać opinie i spróbować wymyślić pewne potencjalne wady takiego podejścia. Co Ci się podoba w tym wzorze? Co ci się nie podoba? Dlaczego miałbyś go nie używać?


title: Jak zrównoważyć jakość kodu i silne osobowości programistów

text: Podczas przeglądów kodu w pracy widziałem kod i wzorce, które uważam za „sprytne”, choć niekoniecznie podnoszące ogólną jakość lub łatwość utrzymania bazy kodu. Zwracam na to uwagę w mojej opinii i kontrargumenty mnie nie przekonują. Jestem trochę zaniepokojony, kiedy ten kod trafia do repozytorium, a później do produkcji. Chcę utrzymać spójny zespół, więc nie chcę tworzyć napięć przez zbyt głośne wyrażanie swoich zastrzeżeń. Chcę również stworzyć świetny produkt dla naszych klientów, nie będąc zbyt wyrozumiałym. Tradycyjnie, kto ma prawo weta w sprawie tego, co i jak jest sprawdzane? Jak kod, który działa, ale jest zbyt skomplikowany/sprytny, można go usunąć bez nadepnięcia na palce?


title: Jak w zwinny sposób wykorzystać amatorską wiedzę z zakresu architektury i projektowania oprogramowania?

text: Mam problem z projektowaniem dowolnej aplikacji, która jest albo greenfieldem, albo refaktoryzowanym terenem poprzemysłowym, ponieważ często znajduje potencjalną wadę lub niepewność w projekcie lub architekturze, którą wymyślę. Marnuję dużo czasu, próbując zbudować projekt, którego jestem pewny, nie poświęcając wiele czasu od początku. Czuję, że błędy na początku prowadzą do dużych problemów w późniejszym rozwoju (szczególnie podczas refaktoryzacji aplikacji z terenów zdegradowanych). Chcę to zminimalizować, ale nie jestem pewien, jak to zrobić bez optymalnego rozwiązania lub przeszkadzania starszym programistom lub architektowi. Na przykład istnieje starsza aplikacja, która wymaga refaktoryzacji. Mogę przepisać to w nowym projekcie i zmniejszyć linie kodu z 12k do 2-3k. Celem aplikacji jest generowanie stron HTML, ale odbywa się to w aplikacji konsolowej w C#. Do tej pory nie zajmowałem się tworzeniem stron internetowych, ale nie jestem pewien, czy ASP.NET MVC byłby dobrym wyborem, a nawet jeśli tak, to czy mój projekt lub architektura to dobry wybór. Rozumiem, że pracując w zespole mogę otrzymać dobrą i solidną radę, ale jak mogę stać się mniej zależny od myślenia mojego zespołu, a bardziej sam, nie marnując czasu firmy na badanie każdej możliwości technologicznej? Czy to przychodzi z czasem i doświadczeniem? Jeśli metoda prób i błędów jest prawdziwą i wypróbowaną metodą, czy architekturę i projektowanie można naprawdę wykonać w sposób zwinny, przy minimalnej stracie czasu?


title: Zaplanowane testowanie stron internetowych: Poszukiwanie lekkiego, prostego rozwiązania

text: Zaplanowane testowanie stron internetowych: Poszukiwanie prostego rozwiązania. Jeden z moich klientów ma kilkadziesiąt witryn ze stronami docelowymi opartymi na formularzach internetowych. Chce codziennie testować 3 różne przypadki użycia przed witryną, aby upewnić się, że witryna działa poprawnie. Muszę przetestować następujące przypadki użycia: 1. Test Poczytalności - sprawdź jedną stronę na witrynę, aby sprawdzić, czy się ładuje, a połączone pola nie są uszkodzone. 2. Test formularza internetowego - sprawdź, czy użytkownik jest przekierowywany do strony z podziękowaniem po przesłaniu formularza internetowego. 3. Test potencjalnego klienta - sprawdź, czy lead jest rejestrowany w zewnętrznym systemie CRM podczas wypełniania formularza internetowego (zewnętrzny system CRM posiada interfejs usługi internetowej, który można wywołać zdalnie). Testy muszą być uruchamiane ze zdalnego serwera (serwer nie pozwala na wewnętrzny cron). Jakie jest najszybsze narzędzie open-source do rejestrowania takiego testu i uruchamiania go codziennie z chmury (lub z własnego serwera zewnętrznego, dedykowanej maszyny ubuntu), a następnie zgłaszania, jeśli coś się stało? * Czy istnieje proste rozwiązanie, w którym po prostu nagrywam test z przeglądarki, a następnie dodaję parametry i planuję uruchamianie go codziennie przez cron? * Czy instalacja BeHat na zewnętrznym serwerze jest możliwa? * A co z selenem? (saucelabs, xml2selen)? * Czy usługi w chmurze typu Sauslabs mogą to robić samodzielnie, czy też potrzebuję również Jenkins CI?


title: Dokładne/zalecane podejście do śledzenia długości odtwarzania filmu

text: Pracuję nad odtwarzaczem flash, który musi śledzić czas odtwarzania wideo przez użytkownika. Dodatkowo muszę znać użytkownika. Mogę to łatwo zrobić z żądaniem do serwera. Do tej pory myślałem o wysłaniu żądania do serwera, gdy użytkownik naciśnie odtwarzanie, a drugiego, gdy odtwarzacz przestanie odtwarzać wideo. Oczywistym problemem związanym z tym podejściem jest to, że użytkownik może opuścić stronę bez naciskania stop, zanim film się skończy. Czy znasz metody, które wypróbowałeś/znałeś i które poleciłeś?


title: Kroki wymagane do rozpoczęcia programowania w C++ do tworzenia aplikacji natywnych

text: Mam do czynienia z C# .Net od prawie roku. Mam duże doświadczenie (większość zawdzięczam kolesiom ze stackoverflow). Teraz myślę o rozpoczęciu pracy również z C++. Głównie dlatego, że chciałbym móc pisać kody, w wyniku których powstają aplikacje, które nie są zależne od .Net, aby mogły być wykonywane w większości środowisk z myślą o wielu platformach. Chociaż muszę się przyznać, pisanie kodu w .Net w C# i Visual Studio nie może być w dzisiejszych czasach prostsze. Z innych moich powodów mogę wymienić, ponieważ studiuję elektrotechnikę, kto wie, może później będę musiał napisać sterowniki do sprzętu! Moje pytania są następujące: 1- Czy mam rację z pomysłem uczenia się C++, mam na myśli to, czy dodaje mi to wartości, jeśli powiem, że będę później pracował jako programista? 2- Jakich narzędzi będę potrzebować, aby rozpocząć programowanie w natywnym C++, czyli być może kompilatory i IDE


title: Interfejsy, adaptery, eksponowanie obiektów biznesowych za pomocą projektu WCF

text: Wiem, że było na ten temat niezliczoną ilość dyskusji, ale myślę, że to pytanie jest nieco inne i może wywołać gorącą dyskusję (utrzymajmy ją przyjaźnie). _**Scena:_** Rozwijam system jako środek do nauki różnych pojęć i natknąłem się na kłopotliwą sytuację, z którą mój mózg jest w konflikcie. Chodzi o to, czy moje interfejsy mają być przechowywane w oddzielnej bibliotece klas, czy też powinny współistnieć z moimi obiektami biznesowymi. Chcę uwidocznić niektóre obiekty za pośrednictwem WCF, jednak odmów ich ujawnienia w całości. Jestem pewien, że większość się zgodzi, eksponowanie właściwości, takich jak identyfikatory i inne właściwości, nie jest dobrą praktyką, ale nie chcę, aby moje obiekty biznesowe były ozdobione atrybutami. _**Pytanie:_** Zasadniczo będę miał osobny interfejs dla każdego z moich obiektów, które będą zasadniczo wystawione na świat zewnętrzny (może być ich sporo), więc czy ma sens tworzenie oddzielna biblioteka klas dla interfejsów? To również rodzi pytanie, czy adaptery powinny również żyć w osobnej bibliotece klas, ponieważ idealnie chciałbym, aby mechanizm przenoszenia z jednego obiektu do drugiego i odwrotnie?


title: Czy jest to opłacalne podejście do rozwiązywania wielu dopasowań w lekserze?

text: Piszę lekser w JavaScript. To dość typowe - reguły są określane za pomocą wyrażeń regularnych i tworzą token. Nie jestem pewien, jak najlepiej poradzić sobie w przypadku dopasowania wielu reguł. Istniejący lekserzy, którym się przyglądałem, radzą sobie z tym, wybierając regułę o najdłuższym dopasowaniu. Wydaje się jednak, że realną strategią jest po prostu użycie pierwszej pasującej reguły. To jest moja obecna strategia. Oto przykład: Wejście: `:=` Reguły: : -> DWUKROTNIK = -> RÓWNA SIĘ := -> ASSIGN Reguła o najdłuższym dopasowaniu zwróci `ASSIGN`, gdzie reguła pierwszego dopasowania zwróci `COLON`, a następnie „RÓWNA SIĘ”. Oczywiście nie jest to pożądane, więc w mojej implementacji po prostu zmieniłbym kolejność reguł, aby najpierw umieścić regułę `ASSIGN` w następujący sposób: := -> ASSIGN : -> COLON = -> RÓWNE ** Czy jest to opłacalne podejście, aby po prostu użyć pierwsza pasująca reguła? Jakie są zalety i wady każdego podejścia?**


title: Dlaczego 2^16 jest liczbą „specjalną”?

text: OK, czuję się głupio, pytając o to - ale w artykule Jeffa: Jak uzyskać właściwy ekran telefonu podczas wywiadu i pierwotnie omówiony w 5 podstawowych pytaniach dotyczących ekranu telefonu: > Nie powinni gapić się na ciebie tępo, gdy pytasz z 2^16 jest. To > numer specjalny. Powinni to wiedzieć. Od jakiegoś czasu jestem programistą\inżynierem oprogramowania\małpą kodową\wszystkim i nie sądzę, żebym kiedykolwiek się z tym spotkał. Mam na myśli, że z pewnością mogę policzyć wartości binarne, wykonując na nich podstawowe operacje itp., itd. Ale nie widzę, co jest "specjalnego" w tej wartości.


title: Czy będę musiał do tego używać AJAX?

text: Powiedzmy, że mam model napisany w php, którego właściwościami są kolumny tabeli w db, a każda instancja modelu reprezentuje wiersz w tabeli. Mam również stronę („widok”), na której wyświetlam zawartość każdej kolumny po jednym wierszu, zaczynając od pierwszego wiersza (id=1). Nad tym wyświetlaczem znajdują się dwa przyciski, z których jeden po kliknięciu wyświetla zawartość następnego wiersza, a drugi wyświetla zawartość poprzedniego wiersza. Chcę, aby zmiana wyświetlania nastąpiła bez przeładowywania strony lub przechodzenia na nową stronę. Moje pytanie brzmi po prostu, czy musiałbym do tego użyć AJAX?


title: Wyjaśnienie java/web (tomcat/coyote/JSP/Servlet itp.) w terminach „Perl-world”

text: Przeanalizowano jeden serwer WWW. * dla żądania `http` otrzymałem: `apache 2.2...` co przekierowuje do https, a * dla https `apache-coyote 1.1`. * a na serwerze działa aplikacja java xwiki. Próbując zrozumieć, jak to jest realizowane. Po godzinie googlowania próbując znaleźć jakąkolwiek **prostą** stronę, co wyjaśniałoby technologie java dla _java głupiej osoby_ \- rezygnacja - i próbując zapytać tutaj. Do moich potrzeb używam głównie Poet / Mason / Starman (PSGI), więc próbuję znaleźć równoważne terminy perskie. Tak więc, z Wikipedii (w skrócie): Tomcat: > Tomcat jest serwerem WWW typu open source i kontenerem serwletów... Tomcat > implementuje specyfikacje Java Servlet i JavaServer Pages (JSP) > ... i zapewnia „czystą Javę” Środowisko serwera WWW HTTP do uruchamiania kodu Java. Komponenty Tomcata: Catalina, Coyote, Jasper. > Coyote to komponent HTTP Connector firmy Tomcat... dla serwera WWW lub > kontenera aplikacji. Coyote nasłuchuje połączeń przychodzących na > określonym porcie TCP na serwerze i przekazuje żądanie do silnika Tomcat, aby > przetworzyć żądanie i odesłać odpowiedź do żądającego klienta. Może > wykonywać JSP i serwlety. Jasper > Jasper to silnik JSP Tomcata. Jasper analizuje pliki JSP, aby skompilować je do > kodu Java jako serwletów (które mogą być obsługiwane przez Catalinę). W czasie wykonywania Jasper > wykrywa zmiany w plikach JSP i rekompiluje je. Catalina > Catalina to kontener serwletów Tomcata. Catalina implementuje specyfikacje Sun > Microsystems dla serwletów i JavaServer Pages (JSP). Tak więc, w porównaniu z aplikacją Poet/Mason: * The Mason == `Jasper` \- kompiluje moje pliki `.mc` i `.mi` do czystego kodu perl/Moose i zarządza moją aplikacją Mason. * `Catalina` to `app.psgi`. Jest to mój "kontener" dla aplikacji Mason i implementuje konfigurację i wiele innych rzeczy dla aplikacji Mason i jest oparty na * specyfikacji `PSGI` (coś jak specyfikacja `Java Servlet`) która definiuje middleware i jak pisz aplikacje PSGI i tak dalej... * a `Coyot` jest jak Starman lub plackup - serwer WWW kompatybilny z PSGI napisany w czystym perlu, co pozwala na uruchamianie aplikacji perlowych. i wszystko razem: `Tomcat = deplyoment mojego "Starmana/Poety/Masona"`. To jest plus-minus, czy kompletnie nie rozumiem buzzwords Java? Jeśli się mylę, **proszę** popraw mnie w _prostych, perskich terminach_. :) Tak więc serwer na górze pytania wygląda tak: * na porcie:80 uruchamia Apache - co przekierowuje na * 443 - co działa jak `plackup` * w czym jest uruchamia xwiki (jak moja aplikacja perl) Jest mniej lub bardziej poprawne?


title: Czy można sprawić, że domyślny konstruktor nie będzie nadawał się do użytku?

text: **Szczególnie pytam o domyślny konstruktor** Biorąc pod uwagę, że konstruktor inicjuje wszystkie dane dla obiektu, jeśli tworzę klasę, której nie można użyć bez odpowiedniej inicjalizacji, czy nie jest tak, że domyślny konstruktor jest bezużyteczny? Rozważ: // Klasa do obsługi wierszy w pliku CSV class CSV_Entry { private: unsigned num_entries; std::ciąg string_version; std::vector<std::string> wersja_wektora; ...itd publiczne: CSV_Entry(); CSV_Entry(const std::string& src_line); // zwraca kopię wektorową oryginalnego wpisu std::vector<std::string> get_vector_snapshot(); } int main( void ) { ...etc CSV_Entry przykład = CSV_Entry(); std::vector<std::string> bieżący_wpis = przykład.get_vector_snapshot(); ...etc } Ta zmienna `current_entry` jest zasadniczo bezużyteczna, nie? Jeśli ktoś spróbuje go później przetworzyć, prawdopodobnie otrzyma błędy; wtedy stworzyliby kod do obsługi takich błędów... Aby złagodzić taki dodatkowy, niepotrzebny kod: dlaczego nie uczynić domyślnego konstruktora bezużytecznym? Podobnie, ...etc CSV_Entry() { throw Verbose_Exception( "CSV_Entry: nie używaj domyślnego konstruktora" ); } ...itd PS: na marginesie, jeśli można po prostu uczynić domyślny konstruktor bezużytecznym, czy można umieścić ten rzut w nagłówku, skoro i tak nie są ujawniane żadne inne szczegóły implementacji?


title: Nauka bycia dobrym programistą: jakie elementy możesz pominąć?

text: Postawiłem sobie za cel zostać przyzwoitym programistą do tego czasu w przyszłym roku. Mam tu na myśli pełne doświadczenie „cyklu życia” rozwoju, kilka _dobrych_ aplikacji/witryn/aplikacji internetowych pod moim pasem, a co najważniejsze, możliwość pracy w stałym tempie bez godzinnego odkładania na bok przez niektórych, którzy powinni to wiedzieć technika. Nie zaczynam od zera. Napisałem dużo html/css, SQL, javascript, python i VB.net oraz studiowałem inne języki, takie jak C i Java. Wiem _o_ rzeczach takich jak OOP, wzorce projektowe, TDD, złożoność, lingwistyka obliczeniowa, wskaźniki/referencje, programowanie funkcjonalne i inne zagadnienia akademickie/teoretyczne. Po prostu nie mogę powiedzieć, że naprawdę zrobiłem jeszcze te rzeczy. Więc chcę nadrobić zaległości i chcę wiedzieć, jakie rzeczy mogę zostawić na później. Na przykład studiowanie algorytmów i matematyki za nimi jest interesujące iw ogóle, ale do tej pory prawie nie musiałem pisać niczego poza najbardziej podstawowymi zagnieżdżonymi pętlami. Badanie Assembly w celu uzyskania jaśniejszego obrazu operacji na niskim poziomie byłoby fajne… ale wyobrażam sobie, że rzadko narusza codzienną pracę. Z drugiej strony patrzenie na funkcjonalny język programowania może pomóc mi pisać programy, które są bardziej zrozumiałe i mniej podatne na ukryte błędy (w tej chwili największą trudnością jest to, że złożoność aplikacji przekracza moje możliwości jej zrozumienia - na przykład przekazywanie danych było w porządku... dopóki nie musiałem zacząć tego robić z AJAX, co było bolesnym krokiem w górę). Mógłbym poświęcić czas na analizowanie przypadków wzorców projektowych, ale nie jestem pewien, ile z nich zostanie wykorzystanych w „prawdziwym życiu”. Jestem programistą z podstawowymi umiejętnościami - na jakich umiejętnościach powinienem się skupić? (także moje umiejętności związane z Uniksem są bardzo słabe, a także znajomość konfiguracji Windowsa... nie jestem pewien, ile czasu powinienem na to poświęcić)


title: Czy nadszedł czas, aby używać MariaDB zamiast MySQL do tworzenia aplikacji? Czemu?

text: Jeśli znasz MariaDB, jakie jest Twoje zdanie na temat migracji aplikacji do korzystania z MariaDB zamiast MySQL? Co zyskujemy, a co straciliśmy dzięki tej zmianie? Czy naprawdę nie trzeba zmieniać aplikacji w każdej sytuacji? Jakaś wskazówka, aby zapewnić płynne działanie aplikacji w MariaDB?


title: Dlaczego w Javie są metody instancji nextInt() i nextDouble() obiektów Random?

text: Dlaczego w Javie są metody instancji „nextInt()” i „nextDouble()” obiektów Random? Uważam, że te metody powinny być statycznymi metodami klasy Random. Jaki jest cel tworzenia instancji obiektu Random w celu wygenerowania losowych liczb całkowitych lub wartości podwójnych?


title: Co zrobić z niedokończonymi historiami i zadaniami w sprincie SCRUM?

text: Mamy niedokończone zadania, które są częścią historii w sprincie. Nie są akceptowane przez PO. Muszą być uwzględnione przy następnym planowaniu sprintu. Oczywiście historie trzeba przenieść, ale co z zadaniami? Czy zostaną ponownie otwarte i przeniesione do następnego sprintu w ramach opowieści, czy nie?


title: Studiowanie więcej niż jednego przedmiotu

text: Jak wszyscy studenci studiów licencjackich, którzy studiują w college'u. Muszą nauczyć się wielu rzeczy w ciągu jednego semestru. Na przykład teraz mam w swoim programie nauczania Javę, DBMS, systemy operacyjne i architekturę komputerową. Koncentruję się bardziej na Javie, ale DBMS i OS to również ważne tematy. Jak więc opanować wszystkie przedmioty? Czy należy wybrać tylko jeden przedmiot i pozostawić innym studiowanie tylko w czasie egzaminów, czy też studiować wszystkie przedmioty z takim samym zainteresowaniem i dać wszystkim przedmiotom ten sam czas. Jeśli poświęcić tyle samo czasu na wszystkie przedmioty, to nie byłby w stanie być mistrzem we wszystkich, ale jeśli skoncentruje się tylko na jednym przedmiocie, może być mistrzem w tym. Co proponujecie?


title: Jednostka przetwarzania .NET

text: Czy myślisz, że kiedykolwiek zobaczymy jednostkę przetwarzającą IL (lub inny kod bajtowy)? Brzmi to możliwe i przyniosłoby dużą korzyść, ponieważ nie potrzebowalibyśmy JITtera. To nie to samo, co kompilacja .NET bezpośrednio do kodu maszynowego, ponieważ kod bajtowy jest tutaj zaprojektowany tak, aby można go było łatwo programować i demontować, w przeciwieństwie do kodu bajtowego używanego w procesorach x86, który został zaprojektowany do szybszej pracy. Co powstrzymuje firmę Intel (na przykład) przed współpracą z firmą Microsoft i stworzeniem procesora zoptymalizowanego pod kątem platformy .NET?


title: Jak zdefiniować uprawnienia na poziomie pozycji w relacyjnej bazie danych

text: Muszę zamodelować projekt bazy danych, aby zapewnić użytkownikom uprawnienia na poziomie elementu na podstawie dostępu do roli użytkownika. Używam asp.net z serwerem sql 2012 Patrzę na podobne doświadczenia dotyczące tego, jak SharePoint zapewnia przycinanie zabezpieczeń, gdy uzyskujemy dostęp do zasobów z witryny SharePoint (w tym wyników wyszukiwania) 1. Czy najlepszym rozwiązaniem jest modelowanie tego w bazie danych czy programowanie aplikacji? (Widziałem, jak SharePoint to implementuje, ale nie zastanawiałem się, jak to zrobili) 2. Będę również używał lucene.net do integracji z wyszukiwaniem. Więc nawet wyniki wyszukiwania powinny być przycięte pod względem bezpieczeństwa. Czy są dostępne jakieś najlepsze praktyki/zasoby sugerujące sposób modelowania tego uprawnienia? /Sharath


title: Jak zostać bardziej zorganizowanym programistą?

text: Jestem programistą, który potrafi kodować. Ale uważam, że mogę coś zrobić, ale nie zrobić czegoś dobrze lub jak większość społeczności open source. Cóż, używam części biblioteki z git hub. Uważam, że większość programu ma dobrą strukturę. Przeczytaj też. Moje pytanie brzmi: 1. Czy jest to jakaś wspólna struktura plików lub konwencja nazewnictwa w społeczności, czy jest to tylko kwestia osobistego gustu? 2. Jak zostać bardziej zorganizowanym programistą, zamiast pisać kod po prostu działaj. Ale bardziej zorganizowany, który pozwala innym łatwo wejść do twojego projektu?


title: Po co konwertować na język asemblerowy zamiast na kod maszynowy?

text: Kiedy kompiluję program w C, najpierw jest on kompilowany do kodu asemblera, a następnie do kodu maszynowego. Jestem ciekaw, dlaczego w ogóle nie konwertuje bezpośrednio do kodu maszynowego.


title: Szybkie sortowanie z dwoma osiami w obliczu drogich swapów

text: _Powiedziano mi, że to lepsze miejsce, by zadać to pytanie_ **TLDR** Czy ktoś testował wydajność szybkiego sortowania w dwóch osiach z kosztownymi do wymiany elementami? Wydaje się, że w tym przypadku powinien on znacznie słabiej radzić sobie ze standardowym sortowaniem quicksort. I tak, wiem o cyklicznym sortowaniu (jeśli tylko oryginalna tablica jest kosztowna w modyfikacji) i że mogę używać indeksów / wskaźników wewnątrz tablicy, sortować je, a następnie zamieniać je we właściwe miejsce. Jednak pierwszy jest całkowicie wykluczony (przypadek średniej kwadratowej jest po prostu niewystarczający), a drugi nie nadaje się do implementacji ogólnego rodzaju przypadków. (Nakłada to zarówno wydajność, jak i zużycie pamięci, nawet w przypadkach, gdy praca z oryginalną macierzą jest lepsza i szybsza). **Backstory** Zainspirowany ostatnim „pytaniem” dotyczącym przepełnienia stosu, zdecydowałem się wdrożyć nietrywialne wersje danych sortowania (introsort, quicksort z 3-stronną partycją, mediana wyboru 3 osi, sortowanie wstawiania małych bloków itp.). Podczas niektórych badań natknąłem się również na dual pivot quicksort, czyli obecną implementację quicksort w standardowej bibliotece Java. Ogólnie twierdzi, że zawsze jest co najmniej tak dobry, jak standardowe sortowanie szybkie, a testy empiryczne zdawały się to potwierdzać. (To jest powód, dla którego jest to bieżąca implementacja.) Jednak wydaje się, że żadna implementacja STL nie używa szybkiego sortowania z podwójnym przestawem w fazie sortowania szybkiego w sortowaniu wstępnym, co sprawiło, że zacząłem się zastanawiać, dlaczego. Po dalszych badaniach znalazłem ten artykuł. Mówi, że chociaż szybkie sortowanie z podwójnymi osiami wykonuje średnio o 5% mniej porównań, wykonuje znacznie więcej zamian. (Około 80% więcej) Oczywiście, ponieważ Java ma tylko prymitywy i typy referencyjne, zamiana jest zawsze tania. (Pomimo tego używa tego sortowania tylko dla prymitywów, ponieważ nie jest stabilny) Wydaje się również, że przynajmniej częścią przewagi szybkiego sortowania z dwoma osiami jest jego ulepszone zachowanie pamięci podręcznej (ponieważ dzieli się na mniejszą podtablicę, która może zmieścić siędo pamięci podręcznej szybciej). Chciałem więc sprawdzić, czy ktoś już przetestował standardowe sortowanie quicksort vs quicksort z podwójnymi osiami, gdy elementy są drogie do zamiany i mają liczby (i ewentualnie źródło) leżące dookoła, czy też będę musiał to przetestować sam.


title: Generowanie głębokich tablic: od płytkiej do głębokiej, od głębokiej do płytkiej czy zły pomysł?

text: Pracuję nad strukturą tablicy, która będzie używana jako źródło danych dla szablonu raportu w aplikacji sieci web. Dane pochodzą ze stosunkowo złożonych zapytań SQL, które zwracają jeden lub wiele wierszy jako jednowymiarowe tablice asocjacyjne. W wielu przypadkach są one przekształcane w dwuwymiarową tablicę indeksowaną. Dane są złożone, aw niektórych przypadkach jest ich dużo. Aby zaoszczędzić podróże do bazy danych (które są niezwykle kosztowne w tym scenariuszu) próbuję uzyskać wszystkie podstawowe tablice (jednowymiarowe i dwuwymiarowe surowe dane bazy danych) i umieścić je warunkowo w jednej, pięciopoziomowej, głębokiej tablicy. Organizowanie danych w PHP wydaje się lepszym pomysłem niż używanie instrukcji where w SQL. ## Struktura tablicy Tablica lat (rok => tablica typów (typy => tablica informacji (łącznie => wartość, tabela => tablica danych (indeks => tablica db) )) ) Moje pierwsze pytanie brzmi, czy to zły pomysł. Czy takie tablice są odpowiednie w tej sytuacji? Jeśli to zadziała, jak mam go zapełnić? Moja początkowa myśl była płytka lub głęboka, ale im dłużej nad tym pracuję, tym bardziej zdaję sobie sprawę, że bardzo trudno byłoby wyabstrahować warunki, które określają położenie każdego elementu w tablicy. Wydaje się więc, że podejście, które powinienem przyjąć, zaczynać od najgłębiej zagnieżdżonych danych. Jeśli jest to nadużycie tablicy, jakie istnieją alternatywy? ## Edytuj Poszedłem naprzód z tym podejściem, ucząc się i zmieniając rzeczy na bieżąco. Ale skończyło się na podobnej tablicy końcowej. To, czego nauczyłem się w odniesieniu do płytkiej do głębokiej zagadki, to było to. Zacząłem myśleć o zewnętrznych tablicach jako o największym z zestawu kubków, zawierającym mnóstwo mniejszych kubków, które z kolei zawierały kolejne mnóstwo mniejszych kubków, aż do ostatniego zestawu, który w moim umyśle był wodą (jest to zindeksowana tablica wartości bazy danych). Tablice to nie kubki... Pomysł rozpadł się, kiedy zacząłem legalnie ręcznie rysować struktury tablicowe i odkryłem, że podstawa tych tablic, małe miseczki wypełnione wodą, które sobie wyobrażałem, reprezentowały o wiele więcej danych niż te duże kubki. Doprowadziło mnie to do postrzegania tych głęboko zagnieżdżonych tablic jako wież, z indeksowanymi danymi reprezentującymi bazę sortowania, zwężającą się aż do końcówki, która była tablicą zawierającą. Stamtąd doszedłem do wniosku, że najlepszym sposobem na przetwarzanie danych jest zebranie danych na dole, podłączenie ich do następnej warstwy, a następnie przejście do wieży, podłączając każdą warstwę do kolejnej warstwy. Nie jestem pewien, czy mam rację, ale czuję, że teraz rozumiem tablice lepiej niż wcześniej. I zdecydowanie nadal nie jestem pewien, czy to najlepsze rozwiązanie.


title: Czy testerzy powinni być odpowiednikami programistów?

text: Czytałem stary artykuł Joela Spolsky'ego o „Pięć najważniejszych (błędnych) powodów, dla których nie masz testerów”. to stary artykuł z 2000 roku, ale jest wnikliwy, ponieważ większość jego treści ma sens po dekadzie. Nie mogę się bardziej zgodzić co do znaczenia testów w produkcji kwalifikującego się oprogramowania. Ale jest jeden akapit mówiący o tym, z czym postępować, gdy najlepsi testerzy ruszyli dalej i powodowali niedobory testerów, naprawdę nie mogę się zgodzić z Joelem, chociaż to, co powiedział, jest nadal aktualne nawet dzisiaj. W jego analizie wyraźnie wyczułem, że Joel mówi, że „testerzy są gorsi od programistów”. Wiele osób wokół mnie ma tego rodzaju uprzedzenia. Nie wiem skąd to się bierze, ale uważam, że to nie jest właściwe. nawet ja nie chcę być testerem (ale to nie dlatego, że uważam, że testerzy są gorsi, ale raczej testerzy są gorzej traktowani). ale myślę, że to nie jest w porządku. Myślę, że sposobem na zapobieganie odpływowi najlepszych testerów jest traktowanie ich na równi z najlepszymi programistami, czy nie są oni kwalifikowani pod względem wkładu w projekt? innym ważnym aspektem jest to, że wiemy, że testerzy muszą ściśle współpracować z twórcami, aby lepiej wykonywać swoją pracę, w kulturze, w której menedżerowie z natury poniżają testerów, jak mieliby wykonywać swoją pracę?


title: Jak uTorrent może być wieloplatformowy, zachowując tak mały rozmiar binarny?

text: Obecnie przekształcił się w nadętego klienta, który działa w systemach Mac, Linux i Windows, jednocześnie utrzymując cały program w jednym pliku binarnym, który waży tylko 876 kb, podczas gdy konkurenci korzystający z bibliotek gui ważą około 6 MB. Czy tworzą osobne natywne gui dla każdej platformy zamiast korzystać z wieloplatformowej biblioteki gui? Jakie jest najlepsze podejście do osiągnięcia czegoś takiego? Dziękuję.


title: Abstrakcyjny dostęp do danych za pomocą odbicia

text: Zastanawiam się nad stworzeniem API dostępu do danych na szczycie Spring JDBC. API będzie w stanie automatycznie tworzyć obiekty ze zbioru wyników, biorąc pod uwagę, że przestrzegamy konwencji nazewnictwa pól w sql. Mamy wiele encji takich jak: Patient, Disease itp. To o czym myślę to: Patient p = (Patient)bean.fetchObject(resultSet,Patient.class); Choroba d = (Choroba)bean.fetchObject(ResultSet,Choroba.class); gdzie `fetchObject()` używa odbicia do odczytywania nazw właściwości jednostek i generuje nazwy pól, a następnie przypisuje te wartości do tych właściwości. Zasadą, o której myślę, jest: 1. Nadaj każdej jednostce unikalny prefiks 2. Automatycznie generuj nazwy kolumn z nazw zmiennych 3. Przestrzegaj ścisłych konwencji nazewnictwa we wszystkich zapytaniach sql Czy to dobry sposób na zajęcie się rzeczami? Jakie są możliwe pułapki? Czy istnieją już podobne rozwiązania? (Nie używamy Hibernacji)


title: Jak uniknąć naruszeń GPL?

text: Kiedy wypuszczam program, lubię licencjonować go na licencji GPL lub LGPL. Chcę również zachować zgodność z tą licencją. Nie jestem dobry w czytaniu dokumentów prawnych, a GPL3 ma około 10 stron. Jak uniknąć naruszeń GPL w moim kodzie?


title: Ile błędów popełnia dobry programista?

text: Obecnie jestem w sytuacji, w której wiele osób krytykowało mnie za robienie błędów (przy mojej pierwszej lokalnej próbie - po raz pierwszy uruchamiam kod do pierwszego lokalnego testu - , chociaż nie na zatwierdzonym repozytorium, kierownictwo patrzy na mnie bardzo dokładnie). Większość moich błędów najczęściej nie jest algorytmiczna (bardziej przypominają pomylenie jednej zmiennej z drugą, zapomnianą linię, nieodebrane wywołanie metody). Ludzie, którzy mnie krytykują, mówią, że muszę być w stanie tworzyć kod bez błędów. Popraw przy pierwszej próbie. Ćwiczę, aby poprawić swoje umiejętności kodowania. Ćwicząc z zestawem CO USA, zobaczyłem komunikat: > TWÓJ PROGRAM ('xyz') PRACUJE PIERWSZY RAZ! To fantastyczne -- i rzadka > rzecz. Przyjmij te specjalne automatyczne gratulacje. * Czy to nie znaczy, że rzadko zdarza się mieć coś od razu? * Czy to oznacza, że ludzie domagający się od razu poprawności są nierozsądni? * A może dlatego, że uczestnicy USA CO kodują problemy w 10-15 minut? więc to normalne, że popełniają błędy (także są licealistami, profesjonalni programiści muszą być od nich lepsi)? Po więcej informacji: mógłbym ukończyć co najmniej połowę amerykańskiego zestawu CO to około 30-60. Nie jestem pewien, czy oznacza to powolne lub złe kodowanie, czy nie. Niektóre trudne wymagają około 2 godzin, aby poprawić poprawność. A teraz, jaki jest sposób na uniknięcie popełniania błędów już teraz? (Oprócz więcej praktyki i skupienia się na konkretnym obszarze) EDYCJA: Chodzi głównie o to, abym wiedział, co typowy dobry programista wykazałby w błędach kodowania i szybkości kodowania. Chcę ocenić swoją wydajność na podstawie wyników dobrego programisty. Przepraszam za uczucie urazy lub niezadowolenia, które może przekazać to pytanie. EDYCJA KOŃCOWA: Dochodzę do wniosku, że jest to po prostu sposób, w jaki nauczą mnie swojego stylu pracy, dzięki czemu wszystko wydaje się rozsądne. Ponadto dobrą odpowiedzią było to, że gdy uczę się nowych rzeczy, powinienem rzadziej używać losowych eksperymentów. To naprawdę sprawia, że ludzie czują się nieswojo. Tradycyjne podejście do czytania książki powinno być stosowane częściej i często przyniosłoby wiele dodatkowych korzyści poza zdobywaniem nowej wiedzy. Dziękuję


title: Zrozumienie ogólnego słowa kluczowego JAVA „super”

text: Ostatnio niektórzy powiedzieli, że się myliłem, wyjaśniając, dlaczego nie można wstawić obiektu `Number` do listy zadeklarowanej jako `List<? super NumerWymierny>`. (Zakłada się, że `RationalNumber` jest podklasą `Number`) Moje wyjaśnienie było takie w `List<? super RationalNumber>` `<? super RationalNumber>` oznacza nieznaną superklasę `RationalNumber`. Oznacza to, że `<? super RationalNumber>` wskazuje, że poprawny obiekt dla `List<? super RationalNumber>` to obiekt, który rozszerza nieznaną superklasę `RationalNumber`. Ponieważ nieznana nadklasa `RationalNumber` jest naprawdę nieznana (np. może to być interfejs `X` zamiast `Number`), nie ma gwarancji, że `Number` jest podklasą `X` tj. implementuje `X `, więc `Number` nie jest prawidłowym podstawieniem `<? super NumerWymierny>`. Co jest nie tak z tym wyjaśnieniem? Edycja: Zwróć uwagę, że pytam o to, co jest nie tak ze sposobem, w jaki wyjaśniam, moim wyjaśnieniem. Nie kolejne wyjaśnienie pierwotnego pytania. Dziękuję.


title: Czy serializację lepiej wykonuje się w metodach instancji czy metodach statycznych?

text: Powiedzmy, że mam klasę `workStockItem`, którą chcę serializować. Jaki jest lepszy styl? 1. przy użyciu metody statycznej lub 2. przy użyciu metody niestatycznej (może nawet zaimplementowana jako właściwość, jak pokazano poniżej) Przykładowe implementacje: wewnętrzny statyczny byte[] serialiaze(workStockItem toSer) { IFormatter formatter = new BinaryFormatter(); strumień MemoryStream = new MemoryStream(); formatter.Serialize(strumień, toSer); zwróć stream.ToArray(); } internal byte[] binaryRepresentation { get { IFormatter formatter = new BinaryFormatter(); strumień MemoryStream = new MemoryStream(); formatter.Serialize(strumień, to); zwróć stream.ToArray(); } } Znowu: Który styl jest lepszy i dlaczego?


title: Gdzie mogę znaleźć duży zestaw danych tweetów?

text: Próbuję uczenia maszynowego z Twitterem i zastanawiałem się, czy są jakieś wstępnie zebrane tylko ogromne dane z tweetów, o których ktoś wiedział, zanim poszedłem i właśnie użyłem interfejsu API (który i tak ma limit żądań)?


title: Strategie migracji w celu wycofania wewnętrznego języka skryptowego

text: Mamy język skryptowy, którego używamy wewnętrznie do wielu rzeczy. Zaczęło się od prostych instrukcji oceny dla dynamicznych etykiet, które stały się kompletnym językiem Turinga używanym powszechnie w naszym systemie. Problem w tym, że nigdy nie został do tego zaprojektowany i to widać. Środowisko programistyczne jest anemiczne, tworzone skrypty nie są testowalne i do dziś nie ma formalnej definicji języka. Rosnący sentyment wśród użytkowników tego języka uważa, że wykonał swoje zadanie i nadszedł czas, aby odpuścić, ale stajemy przed trudnym wyzwaniem migracji istniejącej bazy kodu do dowolnego nowego rozwiązania, które zostanie opracowane. Ten właśnie argument jest używany przeciwko idei migracji. Czy kiedykolwiek spotkałeś się z podobną sytuacją? a jeśli tak, jakich strategii użyłeś, aby przestać używać starego i promować nowe? Ostatnią rzeczą (dzięki Morons) jest to, że wiele z tych skryptów nie jest udokumentowanych, a ich pierwotne przeznaczenie zostało utracone, chociaż nadal są aktywnie używane. Skrypty są również używane w witrynach klientów w celu dostosowania systemu, więc mamy dosłownie tysiące takich skryptów, z których duża część nie jest pod kontrolą źródła ani żadnego mechanizmu wersjonowania. * * * Odpowiedź zaakceptowana. To jest trudny wybór. Wszystkie odpowiedzi były dobrymi i rozsądnymi radami, choć myślę, że najlepsze kłamstwa to poniekąd hybryda Morona i Olivera. Skończyło się na tym, że przyjąłem odpowiedź Olivera, ponieważ jest to odpowiedź, która ma największe szanse na zaakceptowanie wyżej (ha! polityka!). Zapakowanie starego środowiska skryptowego w wywoływaną instrukcję, którą można zintegrować z nowym środowiskiem, zapewniłoby szybką i łatwą ścieżkę aktualizacji. Po zakończeniu możemy lepiej kontrolować tworzenie nowych skryptów, wyświetlając ostrzeżenia lub uniemożliwiając edycję lub tworzenie wszystkich starych skryptów wymuszając przejście z nowym językiem. Dziękuję wszystkim za Twój wkład!


title: Scrum: Jak inkluzywny jest wystarczający dla Twojego klienta?

text: Pracuję w bardzo małym zespole i zaraz zaczynamy wdrażanie Scrum. Ponieważ jesteśmy tak małym zespołem, będę miał bezpośredni i częsty dostęp do klientów. Będę pełnić wiele ról. Czuję, że rozumiem działanie samego Scrum, ale nie to, jak wpływa to na aspekty komunikacji z klientami. Jak przekazujesz swoim klientom terminy lub timeboxy z myślą o Scrumie? Na przykład, czy wspominasz o sprintach lub o tym, że co x tygodni będą dostępne do demonstracji nowe funkcje do wdrożenia? Czy wielu z Was włącza klientów do planowania spotkań?


title: Czy powinniśmy łowić tylko w wyjątkowych okolicznościach?

text: To, czy obsługa błędów przez zgłaszanie wyjątków jest dobra, czy zła, jest sporna. Czy wyjątki jako przepływ kontroli są uważane za poważny antywzorzec? Jeśli tak, dlaczego? Wspólna linia jest taka, że wyjątki dotyczą „wyjątkowych okoliczności”. Ale co, jeśli autor biblioteki zdecyduje się zgłosić wyjątek? Autor biblioteki nie potrafi przewidzieć, co może być dla nas „wyjątkową okolicznością”. Oczywiście, jeśli nie możemy wykluczyć wyrzucenia wyjątku z funkcji, którą musimy użyć bez zmian, a zezwolenie na bulgotanie wyjątku do góry jest niedopuszczalne, wtedy _musimy_ przechwycić wyjątek. Często jednak możemy podjąć środki zapobiegawcze. Przy wystarczającym wysiłku możemy nawet zagwarantować, że warunki, w których funkcja biblioteczna zgłosi wyjątek, nigdy nie wystąpią. Rzut nadal będzie (to nie nasz wybór), ale możemy wyeliminować potrzebę próbowania i łapania. Przykładem jest `std::map.at()`. (Udawaj, że nie ma `std::map.find()`.) Jaka jest ogólna mądrość? Czy w dobrym guście jest pisanie kodu z oczekiwaniem, że od czasu do czasu funkcja biblioteczna będzie wyrzucać? Czy kod klienta jest zobowiązany do zminimalizowania stosowania wyjątków? **Edytuj** Aby spróbować odróżnić to od poprzednich pytań i być bardziej konkretnym, załóżmy, że mamy jakąś funkcję biblioteczną, która może zgłosić wyjątek dotyczący nieznalezionego pliku. Część kodu klienta chce użyć biblioteki w celu uzyskania dostępu do pliku. Kod klienta jest programowany z oczekiwaniem, że plik czasami nie będzie istniał, nawet w „nietypowych okolicznościach”. Kod klienta może być w stanie sprawdzić, czy funkcja biblioteczna zgłosi wyjątek przed wywołaniem, ale nie jest to trywialne. Czy kod klienta powinien nakładać dodatkowe sprawdzanie błędów poza sprawdzaniem błędów w bibliotece, czy też kod klienta powinien używać wyjątku wygenerowanego przez bibliotekę jako przepływu sterowania? W takim przypadku dodanie kodu obsługi błędów na górze biblioteki będzie prawie na pewno mniej wydajne niż wyłapanie błędu, będzie wymagało mniej kodowania i można by argumentować, że i tak _musisz_ mieć try/catch. Z drugiej strony jest to zdecydowanie wyjątkowy mechanizm przepływu sterowania.


title: Czy istnieje jakaś wspólna nazwa do edycji, zapisywania, usuwania, wybierania?

text: Czy ktoś może zasugerować mi nazwę pospolitą do edycji, zapisywania, usuwania, zaznaczania Chcę utworzyć interfejs w C#, który będzie obsługiwał wszystkie te metody. Mój kontekst to: opracowuję aplikację do fakturowania, w której potrzebuję produktu do utworzenia, usunięcia, zaktualizowania, wybrania


title: Czy podczas projektowania struktury witryny należy wziąć pod uwagę dodatkowe kwestie, jeśli planujesz korzystać z technologii trwałych połączeń?

text: Jak mówi tytuł, myślę o stworzeniu witryny opartej na prostej grze karcianej, wykorzystującej technologię trwałego połączenia (Coś w rodzaju signalR) dla właściwej części gry. Nigdy nie planowałem strony z wykorzystaniem tej technologii i zastanawiam się, czy są jakieś dodatkowe rzeczy, które należy wziąć pod uwagę przy strukturze strony? Planuję użyć frameworka asp MVC do całości i zacząć od prostej gry (np. opartej na kartach Rock/Paper/Scissors) w celu sprawdzenia koncepcji (aby sprawdzić, czy mogę to zrobić tak, jak myślę, że by to było w mojej głowie).


title: Czego się nauczyć po standardowym C++?

text: Kilka miesięcy temu przerzuciłem się na C++, poznając jego składnię, główne cechy STL i to, co zwykle można znaleźć w podręczniku "nauka C++". Teraz chciałbym iść dalej. Jakie byłyby twoje rekomendacje? Chciałbym wiedzieć, czego się dalej uczyć (nie tylko o języku, ale także o debugowaniu, frameworkach itp. itp.) Wiem, że prawdopodobnie odpowiedź zależy od konkretnych potrzeb każdego użytkownika, więc oto moja lista: * Krzyż Rozwój platformy * Tworzenie GUI dla moich programów * Tworzenie rozszerzalnego oprogramowania, umożliwiającego korzystanie z wtyczek * Korzystanie z bibliotek naukowych * Interakcja z bazami danych (głównie MySQL) * Posiadanie funkcjonalności serwera/klienta (chciałbym, aby użytkownicy moich programów wchodzili w interakcję przez Internet .. jak można się domyślić, nie jestem programistą z wykształcenia, więc mogłem użyć niewłaściwych terminów.. jeśli tak, to przepraszam za to). Oczywiście wiem, że to wymaga czasu, ale chciałbym mieć dobrą listę referencji i zasobów na początek (zarówno książki, jak i strony internetowe są w porządku). Bardzo dziękuję za Twoją pomoc!


title: Która warstwa powinna być celem mojego testu akceptacyjnego JBehave w aplikacji DDD?

text: Biorąc pod uwagę aplikację DDD o architekturze heksagonalnej, do której warstwy powinny być skierowane moje testy akceptacyjne JBehave? Chcę napisać funkcje i scenariusze jako specyfikacje dla ogólnego zachowania systemu, ponieważ wprowadzamy **ATDD** jako nasz proces rozwoju. W mojej aplikacji mam następujące warstwy: * Warstwa prezentacji * Warstwa usług internetowych * Warstwa usług aplikacji * Warstwa domeny * Warstwa infrastruktury


Jak radzić sobie z programistami odmawiającymi korzystania z niektórych technologii lub narzędzi? **Uwaga:** trudno znaleźć dobrą pomoc, więc odpowiedź „Pozwól im odejść” nie działa w tym przypadku. Poza tym są bardzo dobrzy w tym, co robią, po prostu nie chcą robić tego, czego nie chcą. Przykłady: „Odejdź ode mnie z tymi rzeczami z Kryształowych Raportów albo nigdy więcej mnie nie zobaczysz”. „Nie używam SSIS do niczego”. "Możesz sam zintegrować system z MAS 500, nie dotknę go 10-stopowym tyczką." **Komentarz ogólny:** „Poproś programistów o lepsze rozwiązanie” nie zawsze jest opcją, ponieważ technologia/narzędzie może zostać nam przekazane przez klienta. * Klient ma osoby zaznajomione z CR, które poprawiają raporty po ich dostarczeniu * Klient posiada już serwer Microsoft SQL i nie chce inwestować w żaden inny ETL * Klient używa MAS 500 i nie chce przechodzić na inny pakiet księgowy


title: Czy błędnie założyłem, że moje rutyny są luźno powiązane?

text: Moje struktury testowe Selenium wyglądają jak - klasa obiektu danych - klasa publiczna RegistrationData { String firstName = "testowe imię"; String lastName = "testuj nazwisko"; // Getter Setter Here } Klasa obiektu strony wykonująca operacje na stronie WWW - public class RegistrationPage { private RegistrationData regData; public void setRegistrationData(RegistrationData regData) { this.regData = regData(); public NewAccountPage fillRegForm() { enterFirstName("ImięTekstowePoleTekstowe", regData.getFirstName); enterLastName("LokatorPolaTekstowegoNazwiska", regData.getLastName); // Trochę więcej pól jest wypełnianych tutaj return NowaStronaKonta(); } } A klasa testowa używa ich jako - public class TestRegistration extends SelTestCase { @Test public void testRegNewUser() { RegistrationData regData = new RegistrationData(); Strona rejestracyjna Strona rejestracyjna = Nowa Strona rejestracyjna(); regPage.setRegistrationData(regData) regPage.fillRegForm(); // Trochę tu asercji } } Skoro metoda fillRegForm nie przyjmuje żadnego argumentu, czy mogę założyć, że jest to przykład luźnego sprzężenia, mimo że muszę ustawić RegistrationData na stronie RegistrationPage przed użyciem metody fillRegForm.


title: Zapewnienie przyjaznych adresów URL dla strony internetowej a realia identyfikatorów baz danych

text: Mamy bazę zasobów, czy to produktów, wpisów na blogu, czy czegoś takiego. Musimy zaprojektować schemat adresów URL, aby je adresować, dla publicznej witryny internetowej. Oto dwa przykłady powiązane z identyfikatorem bazy danych: * https://www.youtube.com/watch?v=7FPS6llqhXw * http://www.amazon.co.uk/gp/product/B000NHOMSQ Oto przykład, który jest przyjazny: * http://en.wikipedia.org/wiki/LED_circuit (trochę wglądu w moje życie w sieci) Lubię przyjazne adresy URL, ponieważ masz pojęcie o tym, co znajduje się na końcu adresu URL, gdy najedziesz lub zobaczysz go w e-mail lub dokument. To lepsze dla SEO, a przynajmniej było. Co się stanie po zmianie nazwy dokumentu lub produktu? Albo dlatego, że się zmieniło (Wiki może się nie zmienić, ale nasze zasoby mogą) albo z powodu literówki, prawda? Nasze zasoby są bardzo techniczne, długie i podatne na błędy. Ponadto mamy identyfikator bazy danych, który jest liczbą. Przyjrzyjmy się pomysłowi na adres wideo przy użyciu pozorowanej wypożyczalni: * http://vidsyeah.com/video/sliding-doors/287171 Identyfikator jest oczywisty i jest używany w wyszukiwaniu DB. Cienki. Bit drzwi przesuwnych nie jest unikalny i został właśnie wygenerowany z tytułu filmu, można go zweryfikować w GET, więc jeśli wprowadzono drzwi przesuwne i nie pasują one do tego, co naprawdę jest w dokumencie 287171, odpowiada 404. A może może tak być ignorowane, pozwalając ludziom wsadzić tam, co im się podoba, jeśli komuś to kiedykolwiek zależało. Więc ten adres URL również zadziała: * http://vidsyeah.com/video/anything-at_all/287171 Problem z weryfikacją przyjaznej części to, jak wspomniano, problem zmiany nazwy lub korekty literówek. Jeśli nazwa się zmieniła, a w naszej domenie tak się dzieje, nie chcemy łamać adresów URL, które tam są, więc powinniśmy: * Po prostu nie weryfikować przyjaznej części. * Sprawdź, ale dodaj „historię” przyjaznych części do rekordu bazy danych, aby wszystkie poprzednie przyjazne identyfikatory nadal działały! Twoje myśli i pomysły są mile widziane. Łukasz


title: Obsługa i zarządzanie kodami błędów

text: Poszukuję przykładów tworzenia, obsługi i zarządzania numerami/kodami błędów. Aby zrozumieć o czym mówię, weźmy przykładowy scenariusz: (UE - użytkownik końcowy, IT - to helpdesk) EU: - (dzwoni do IT) coś jest nie tak IT: - co się stało? EU: - jest napisane "nie można stworzyć xyz" IT: - co zrobiłeś? EU: - ummm.... (rozmowa toczy się przez kolejne miliardy lat) ... a wyjątek, który wyświetla komunikat "nie można utworzyć xyz" jest rzucany w dziesiątki miejsc w całym systemie, więc informatyk nie wie gdzie szukać . Innym podejściem (które bardzo mi się podoba i chciałbym zastosować) jest na przykład: ![przykładowy komunikat o błędzie](http://i.stack.imgur.com/DnTp6.jpg) Teraz, gdy UE dzwoni do IT, cała rozmowa wygląda tak: EU: - mam błąd 1004 IT: - ok, dzięki, zajrzymy. Mając kod błędu, informatyk od razu wie, gdzie szukać błędu. Nie musi prosić UE o podanie mnóstwa mylących szczegółów, po prostu może usiąść i pracować lub jeśli wie dlaczego, wyjaśnić, że jest to zamierzony błąd, ponieważ UE zrobiła coś złego. Brzmi jak kwiaty i pączki, prawda? Ale jakie są najlepsze praktyki, aby osiągnąć takie zachowanie? Załóżmy, że to jest Java i budujemy aplikację od podstaw. Do tej pory wiem, że nie mogę pobrać kodów błędów z bazy danych, ponieważ jeśli zgłoszony jest wyjątek, nie mogę polegać na źródłach zewnętrznych. Prowadzi to do problemów z pracą zespołową. Załóżmy, że Jan, Paweł i Adam założyli, że będą używać kodów błędów podczas pisania swojej aplikacji i będą generować błędy stopniowo. Widzę możliwą kolizję, gdy Jan chce oznaczyć wiadomość o wyjątku w kodzie za pomocą numeru `#256`, ale Paul nie wie o tym i tworzy własny wyjątek, również z powiązanym z nim `#256` i używa tego wyjątku w kilku dziesiątki miejsc w ok. Ostatecznie nikt nie wie, co naprawdę oznacza błąd „#256”. Więc może jest inne podejście - użyj małej, ale poręcznej aplikacji internetowej z jedną tabelą, która będzie obsługiwała generowanie numerów błędów, aby Jan, Paweł i Adam po prostu mogli kliknąć "generuj", gdy chcą nowego unikalnego numeru błędu? Powyższe opracowanie prowadzi również do kolejnego pytania - jakie są najlepsze praktyki dotyczące ustawiania kodów błędów? W samych wyjątkach, na przykład: public class FooException extends Exception { public FooException() { super(); } public FooException(String message) { super("Błąd #256 - xyz jest zabroniony"); } public FooException(String message, Throwable Cause) { super("Błąd #256 - xyz jest zabroniony", przyczyna); } public FooException(wyrzucana przyczyna) { super(przyczyna); } } lub: try{ (trochę rzeczy) } catch (FooException ex){ System.out.println("Błąd #256 - nie możesz tutaj zrobić xyz"); } Podejrzewam, że druga opcja jest lepsza, ponieważ wskazuje unikalne, konkretne miejsce w kodzie w całym projekcie, ale wygląda to na trudniejsze do zarządzania. jakieś pomysły? Jakieś praktyki? Porady? Dziękuję.


title: Licencjonowanie komponentów Telerik ASP.NET MVC

text: Jest wątek na stackoverflow na ten temat http://stackoverflow.com/questions/5524046/is-telerik-extensions-for-asp-net-mvc-free Mówi, że jest ok dla strony wewnętrznej, ale myślę, że nadal nie jest jasne (także w notatce na temat korzystania z witryny wewnętrznej, myślę, że zniknęło). Mówią, że tak długo, jak strona jest wewnętrzna, powinieneś być w porządku z licencją open source, ale 1) Czy mogę używać jej na stronie, która ma zamkniętą społeczność, to znaczy tylko zalogowani ludzie będą używać komponentów telerik? 2) Czy mogę używać tylko do części administracyjnej strony, to znaczy, że dostęp do niej będą mieli tylko pracownicy wewnętrzni? AKTUALIZACJA: Wygląda na to samo pytanie (ten sam typ licencji) - Używając bibliotek GPL bez modyfikacji na komercyjnej stronie internetowej, czy muszę udostępniać swój kod źródłowy?, ale odpowiedzi są zupełnie inne? UPDATE2: Nie chcę w żaden sposób rozpowszechniać kodu strony.


title: Język asemblera używany w systemie lotniczym

text: Dzisiaj mój wykładowca wspomniał, że powodem dla którego system samolotu jest programowany w języku asemblerowym jest to, że pisany program ma mniej błędów. Czy to stwierdzenie jest prawdziwe? Ponieważ kiedy zapytał o naszą opinię powiedziałem, że asembler może stworzyć szybszy program, więc jest to dobry język dla programu systemu samolotu zorientowanego w czasie rzeczywistym. Szukam w Google, ale nie mogę znaleźć artykułu wyjaśniającego wypowiedź mojego wykładowcy .


title: Jaka jest przewaga korzystania z Direct Web Remoting nad projektowaniem usług internetowych REST?

text: Mam korporacyjną aplikację sieci web Java wdrożoną w tomcat. Szukam sposobów na zintegrowanie interfejsu HTML i JS z kodem java warstwy środkowej. Do tej pory, rozglądając się, odkryłem, że istnieją dwa dobre sposoby na zrobienie tego, które pasują do moich wymagań: 1) DWR - Direct web remoting 2) Użyj usług internetowych REST. Nie jestem pewien, którego podejścia użyć. Edycja: Jaka jest przewaga używania DWR nad resztą projektu WS? Edycja 2: Najprawdopodobniej będę używał dojo do rozwoju interfejsu użytkownika (działa dobrze z REST/DWR?) i chcę, aby zmiany w kodzie java były minimalne. Rozumiem, że korzystając z usług internetowych, musiałbym napisać dodatkową warstwę klienta WS na istniejącym kodzie java. Również zwykłe potrzeby przedsiębiorstwa, wydajność, skalowalność itp.


title: Jaka to klasa problemu i jaką matematykę muszę znać, aby go rozwiązać?

text: Uprawa grzybów wymaga dość dokładnego składu chemicznego podłoża (tzw. podłoża uprawowego). Załóżmy, że uprawiamy shitakes i że to jest wymagany skład ich substratu: Azot | Benzen | Toluen | Dwufluorek ditlenu 5% | 5% | 10% | 80% Chcemy stworzyć odpowiednie podłoże z materiałów, które mamy pod ręką, których skład chemiczny znamy. Materiał | Azot | Benzen | Toluen | Jabłka z difluorku ditlenu | 5% | 0% | 5% | 90% pomarańczy | 20% | 20% | 50% | 10% Itd... Jak to obliczyć? Przypomina mi rozwiązywanie macierzy w liceum. Czy to jest coś, co można zrobić za pomocą macierzy? Jak nazywa się ten problem? Co muszę wiedzieć, aby go rozwiązać?


title: Jak pisać testy jednostkowe programów narzędziowych

text: Pracuję nad aplikacją konsolową C#, która ładuje dane od strony trzeciej i zbiorczo wstawia do tabel. Zasadniczo kod składa się ze statycznej metody z instrukcjami logowania. Jak w tych scenariuszach napisać przypadki testów jednostkowych? Przykładowy kod void Main(string[] args) { // tutaj pętla for odczytująca konfigurację z pliku XML // inicjalizacja zewnętrznej biblioteki ReportLib objLib = new ReportLib(); DataTable dt = objLib.Refresh("test"); //wywołanie zbiorczej kopii SQL DBHelper.BulkCopy(dt, dictmappings, destTblName);//dbhelper jest klasą statyczną }


title: Czy „styl programowania jQuery” jest rodzajem programowania reaktywnego?

text: jQuery to biblioteka i framework JavaScript, ale kiedy programujemy za pomocą jQuery w problemach/rozwiązaniach DOM, możemy ćwiczyć zupełnie inny styl programowania... O jQuery możemy przeczytać na Wikipedii, _Zestaw podstawowych funkcji jQuery — element DOM selekcje, przechodzenie i manipulacje — dzięki silnikowi selektorów (...) stworzyły nowy „styl programowania”, **łączące** algorytmy i struktury danych DOM_ To pytanie jest podobne do „podpytania-3” to pytanie, ale nie tak ogólne. Skupiamy się tutaj na tym nowym rodzaju „stylu programowania”... Tak więc pytanie: **Czy „styl programowania jQuery w kontekście DOM” jest nowym wzorem?** Czy jest to raczej jeden z przykładów **programowania reaktywnego ** (nie „zorientowany na komórki”, ale „zorientowany na węzeł DOM_”) czy inny? * * * Nie mamy "standardowej taksonomii paradygmatów", więc proszę w swojej odpowiedzi wskazać również swój "najlepszy wybór dla Wikipedia Paradign". Przykład: jeśli rozumiesz, że „programowanie DOM jQuery” jest jak „filtrowanie danych awk”, Twój wybór może być oparty na zdarzeniach.


title: Jak długo mogę przechowywać dane osobowe subskrybenta?

text: W moim formularzu subskrypcji chcę skorzystać z metody double opt-in: * Najpierw odwiedzający subskrybuje * Następnie wysyłany jest e-mail z potwierdzeniem. Jeśli odpowie... * Wtedy dodaję go do systemu. W przypadku, gdy użytkownik nie odpowiada, jak długo mogę przechowywać jego adres e-mail? Czy istnieją w tym zakresie jakieś wymogi prawne? Jestem z USA i interesuje mnie również polityka w krajach europejskich.


title: Dlaczego powinienem używać wzorca MVC?

text: Wygląda na to, że każdy, kto obecnie tworzy aplikacje internetowe, chce używać MVC do wszystkiego. Trudno mi się jednak przekonać do tego wzoru. Rozumiem, że ogólną ideą jest oddzielenie logiki backendu od frontendu, który reprezentuje program. Generalnie wydaje się, że widoki zawsze w jakimś stopniu zależą od kontrolera, co kończy się w zależności od modelu. Nie widzę, jaką korzyść daje mi dodanie kontrolera. Czytałem dużo szumu na temat „tak należy projektować aplikacje”, ale może nadal nie rozumiem, co ma iść gdzie. Ilekroć rozmawiam z innymi o MVC, wydaje się, że każdy ma inne wyobrażenie o tym, co należy do jakiej kategorii. Dlaczego więc powinienem używać MVC? Co zyskam, używając MVC zamiast oddzielania frontendu od logiki zaplecza? (Większość „korzyści”, jakie widzę z tego wzorca, uzyskuje się po prostu przez oddzielenie interfejsu od implementacji i nie wyjaśniam celu posiadania oddzielnego „kontrolera”)


title: Jak zminimalizować użycie statycznych zmiennych i obiektów?

text: Próbuję zaimplementować ten kod JavaFX, w którym chcę wywołać zdalną klasę Java i przekazać flagę logiczną: final CheckMenuItem toolbarSubMenuNavigation = new CheckMenuItem("Navigation"); toolbarSubMenuNavigation.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { //DataTabs.renderTab = toolbarSubMenuNavigation.isSelected(); DataTabs.setRenderTab(toolbarSubMenuNavigation.isSelected()); // wywołaj tutaj ustawiający metodę pobierania i wysyłający flagę logiczną System.out.println("subsystem1 #1 włączony!"); } }); Klasa Java, którą chcę wywołać: public class DataTabs { private static boolean renderTab; // uczynienie członków *prywatnymi* prywatnymi static TabPane tabPane; public static boolean isRenderTab() { return DataTabs.renderTab; } public static void setRenderTab(boolean renderTab) { DataTabs.renderTab = renderTab; tabPane.setVisible(renderTab); } // gdzieś poniżej // ustaw widoczny panel kart TabPane tabPane = DataTabs.tabPane = new TabPane(); tabPane.setVisible(renderTab); } Ta implementacja działa, ale chcę ją zoptymalizować, aby używać mniej statycznych zmiennych i obiektów. Czy możesz mi powiedzieć, które sekcje kodu można zoptymalizować?


title: Dlaczego języki programowania obejmują tak wiele?

text: Języki programowania to nie tylko język. Każdy z nich ma zazwyczaj: * własne IDE, * własne menedżery pakietów, * własny zestaw bibliotek, * własne narzędzia do budowania, * własne formaty danych. Jeśli piszesz składnię Javy, będziesz używać pakietów Maven; jeśli piszesz składnię Haskella, będziesz używał pakietów Cabal. Jakie jest połączenie? Dlaczego każdy język programowania tworzy swój własny świat?


title: Klient Javascript - który może być lepszy po stronie serwera? Kontroler WCF lub MVC3 z spokojnymi komunikatami?

text: Chcę napisać usługę po stronie serwera, do której będzie można uzyskać dostęp z klienta JavaScript/HTML5. Klient prawdopodobnie będzie wysyłał kilka spokojnych wiadomości przez HTTPS. Wszystkie inne rzeczy są równe, co jest lepiej zaprojektowane do obsługi tego rodzaju schematu po stronie serwera - WCF lub MVC3 (tj. kontroler z tylko spokojnymi komunikatami, bez rzeczywistego widoku lub modelu)?


title: Czy powinienem najpierw napisać HTML czy CSS?

text: Istnieje wiele analogii do tworzenia HTML/CSS; co może być nieco mylące dla początkującego. HTML = fundamenty/dom CSS = ściany/plan/tapeta Czy jest jakaś najlepsza praktyka? Który powinniśmy napisać jako pierwszy?


title: Centralne zarządzanie ponad 100 stronami internetowymi bez bankructwa małej firmy

text: Interesują mnie głównie opinie na temat kompromisów między posiadaniem **pojedynczego serwera centralnego**, z którym łączą się wszystkie witryny, w przeciwieństwie do każdej witryny odzwierciedlającej podzbiór głównej bazy danych ze wszystkimi zawartymi w niej produktami. Na przykład, czy podczas wysyłania zapytań do zewnętrznej bazy danych napotkam poważne problemy z wydajnością (lub nawet problemy z bezpieczeństwem lub ograniczenia)? Czy rozwiążemy problemy ze skalowalnością, z którymi nie możemy sobie poradzić na wczesnym etapie, z samej przepustowości wymaganej do utrzymania tego? Jeśli zdecydujemy się na coś w rodzaju skryptu, który synchronizuje mniejsze bazy danych (każda zawierająca podzbiór centralnych danych podstawowych), jakie problemy prawdopodobnie tam napotkamy? Naprawdę chciałbym uzyskać opinie ludzi znacznie bardziej kompetentnych niż ja, jeśli chodzi o zalety i wady obu konfiguracji oraz o bóle głowy, które możemy napotkać. **WYJAŚNIENIE** : Nie należy tego traktować jako pytania o to, czy powinniśmy wdrożyć jedną bazę danych czy wiele baz danych. Na to pytanie odpowiedziano już wielokrotnie. Pytanie dotyczy zalet i wad takiego wdrożenia, które ma możliwość centralnego zarządzania wszystkimi witrynami (jeden **serwer**) w porównaniu z próbą utrzymania ich wszystkich w synchronizacji, jeśli każdy z nich ma własną bazę danych (wiele serwerów). **PRZYKŁAD Z PRAWDZIWEGO ŚWIATA** : Jesteśmy firmą produkującą koszulki i mamy indywidualne strony internetowe dla naszych różnych rodzajów koszulek, ale przyglądamy się centralnemu zarządzaniu zamówieniami zintegrowanemu z naszym pojedynczym koszykiem zakupów (który jest ColdFusion + MySQL). Załóżmy teraz, że mamy koszulkę, która jest na 10 naszych stronach internetowych i zmieniamy jej obraz. Najlepiej byłoby, gdyby zmienilibyśmy to w jednym miejscu, a zmiana by się rozprzestrzeniła, ale jak byśmy to ustawili?


title: Wyniki wyszukiwania, które wyświetlają się w formie „1 – 20 z około 65” – dlaczego „około”?

text: Zauważyłem, że Google i duże wyszukiwarki nie wyświetlają „właściwego” stronicowania, ale wyświetlają przybliżenie. Na przykład próbowałem podać konkretne wyszukiwanie w Google, aby zwrócić kilka wyników, jak poniżej: jedzenie +mrówek na Malcie w pobliżu morza To zwróciło "Około 71 wyników". Jednak pokazał tylko 2 strony na stronach na dole. Biorąc pod uwagę, że 1 strona zawiera 10 wpisów, maksymalna, jaką może to być, mieści się w przedziale od 11 do 20. Następnie kliknąłem na stronę 2 i tym razem łączne wyniki zmieniły się na `Strona 2 z 16 wyników`. Po prostu ciekawy, jakieś pomysły, dlaczego tak się dzieje? Zakładam, że ze względu na wydajność, ale skoro udało się uzyskać prawidłową liczbę stron, dlaczego „O 71” było tak przesunięte, od rzeczywistych 16 do 71, co jest ogromną rozbieżnością?


title: Najlepsze praktyki dotyczące plików konfiguracyjnych na stronie internetowej

text: Tworzę coś podobnego do _Content Management System_ , który może być pobrany i używany przez każdego, kto tego potrzebuje. Od kilku lat zajmuję się tworzeniem stron internetowych (głównie hobbystycznie, czyli tworzeniem osobistych stron domowych dla znajomych), ale nigdy nie miałem potrzeby wprowadzania przez użytkownika własnych konfiguracji (niech będzie to połączenie z bazą danych, meta -dane o jego witrynie, pożądanym zachowaniu witryny). Dlatego nie mam doświadczenia z obsługą niestandardowych plików konfiguracyjnych. Tu właśnie leży moje pytanie: Jaka jest najlepsza praktyka obsługi niestandardowych plików konfiguracyjnych dla całej witryny i obsługi ich w PHP? Myślałem o stworzeniu plików INI, które można dostosować z poziomu panelu administracyjnego i które są ukryte dla użytkownika przez .htaccess ze względów bezpieczeństwa. Jednak nie wiem, czy INI jest najlepszą metodą na zrobienie tego, biorąc pod uwagę, że strona jest rozwijana tak, aby była rozszerzalna za pomocą wtyczek (co może prowadzić do kolejnego pytania). Więc jaki jest mój najlepszy zakład, aby poradzić sobie z konfiguracją? Na przykład, czy chcę jakoś przechowywać konfigurację bazy danych w plikach i zlecić inne konfiguracje samej bazie danych? Czy mogę przechowywać wszystko w plikach INI (również biorąc pod uwagę konfiguracje wtyczek: czy każdy z nich powinien mieć swój własny plik konfiguracyjny)?


title: Co jest najlepsze dla biblioteki klienta: kod przestrzeni użytkownika czy pliki schematów?

text: Buduję bibliotekę klienta, która zużywa kolekcję usług API OpenStack. Wiem, że w miarę upływu czasu będzie dodawanych więcej usług - dlatego chcę wymyślić czysty i schludny sposób ustrukturyzowania mojej biblioteki klienta, aby zminimalizować czas rozwoju (dla przyszłych nowych usług) i uniknąć duplikacji. Do tej pory myślałem o dwóch rozwiązaniach: 1. **Zaimplementuj kod przestrzeni użytkownika od podstaw.** Każda usługa używa bazowego klienta HTTP, a dla każdej operacji API istnieje konkretna metoda w konkretnej klasie, która hermetyzuje logikę. To jest Twoja standardowa aplikacja, w której wszystko istnieje w konkretnym kodzie. Zaletą jest to, że jest to proste i oczywiste dla nowych współtwórców; Wadą jest to, że pisanie kodu jest powolne i istnieje ryzyko zduplikowania kodu wzorcowego. 2. **Zaimplementuj jakiś rodzaj warstwy opisu usług** \- podobny do WADL, ale lżejszy i napisany w JSON. Każdy dokument opisowy działałby podobnie do Google Discovery API, w którym zasoby API są definiowane za pomocą schematów JSON; Operacje HTTP są definiowane ze wszystkimi ich parametrami, identyfikatorami URI, typami czasowników, oczekiwanymi kodami statusu itp.; zdefiniowano również uwierzytelnianie. Zaletą jest to, że pisanie zajmuje mniej czasu, pozwala uniknąć powielania i tworzy wyraźną umowę, która jest użyteczna dla dokumentacji użytkownika końcowego. Wadą jest to, że jest dość meta-podobny i trudny do zrozumienia dla nowicjuszy. Istnieje wiele popularnych bibliotek klienckich, które używają tego rodzaju wzorca schematu, ale staram się zważyć jego pozytywy i negatywy. Skłaniam się ku używaniu schematów, ponieważ myślę, że zaoszczędzą one czas na rozwijanie i unikną powielania. Wydaje się, że API OpenStack również zmierzają w kierunku json-schema. Czy istnieją jakieś mocne powody, dla których poleganie na schematach jest złym pomysłem na bibliotekę klienta i/lub dlaczego kod w przestrzeni użytkownika jest lepszym podejściem?


title: Jakie są dobre sposoby monitorowania nastroju zespołu?

text: Mój zespół programistów w pracy ma różne problemy z komunikacją, które spowodowały, że kierownictwo miało wrażenie, że systemy, które mają, działają dobrze… kiedy tak nie jest. Chociaż marzę również o naprawie braku komunikacji, pytam konkretnie o techniczne i społeczne aspekty monitorowania nastrojów zespołu w różnych kwestiach. Zespół składa się z około 4 grup po 5 programistów działających na całym świecie. Każda witryna pracuje głównie nad osobnymi projektami, które są oparte na typowym sprzęcie osadzonym i bibliotekach niskiego poziomu. Z pewnością istnieje możliwość stworzenia większej liczby wspólnych bibliotek wyższego poziomu, ale obecnie jako takie nie istnieją. Wyobrażam sobie poruszenie tematu i poproszenie każdego członka zespołu o anonimowe przekazywanie informacji zwrotnych na dwóch płaszczyznach: jak bardzo to na ciebie wpływa, a na ile pozytywnie lub negatywnie. Powinno to pomóc w ustaleniu, w jakich obszarach odnosimy sukcesy, a które mają znacząco negatywny wpływ. Miejmy nadzieję, że programiści będą mogli odpowiedzieć w mniej niż 30 sekund. Czy zmierzam we właściwym kierunku, aby dowiedzieć się, na co zespół powinien poświęcać więcej czasu na doskonalenie?


title: Czy istnieje narzędzie, które wyświetli listę wszystkich zależności metody w Javie?

text: Powiedzmy, że patrzę na jakiś kod i widzę: MessageDigestPasswordEncoder encoder = new MessageDigestPasswordEncoder("SHA-512"); Teraz w tym pliku widzę też: import org.springframework.security.authentication.encoding.MessageDigestPasswordEncoder; OK, całkiem nieźle zgaduję, że potrzebne jest „Spring Security”. Ale sądzę, że technicznie „MessageDigestPasswordEncoder” może pochodzić z wielu różnych miejsc. Ale zakładając, że wiem, że jest wiosna, to powinno pomóc. Ale oto, czego szukam. Mam wiele programów napisanych przez innych ludzi i czasami wystarczy wydobyć mały kawałek. Na przykład, musiałem dowiedzieć się, w jaki sposób `CAS` miesza hasła do zadania ETL, nad którym pracuję. Więc poszedłem do tego bardzo dużego projektu i po prostu skopiowałem wszystkie słoiki. Zakodowałem to, czego potrzebowałem i wszystko działało. Jednak teraz mam ten bardzo prosty projekt z 60 słoikami. I wiem, że nie wszyscy są potrzebni. Więc moje pytanie brzmi, jak mogę "odwrócić" tę większą aplikację i znaleźć minimalne zależności potrzebne dla tego `MessageDigestPasswordEncoder` powyżej? To prymitywny przykład, ale masz pomysł. Mogłabym zacząć wyciągać słoiki, aż coś się zepsuje, ale to zajęłoby wieczność. To, co chciałbym zrobić, to (nawet w konsoli) wpisać `list_dependencies MessageDigestPasswordEncoder` i narysować ładne drzewo. Brzmi to jak praca dla Mavena, ale nie mam dużego doświadczenia z Mavenem (pochodzę ze świata .NET/Ruby). Dziękuję.


title: Dobra czy zła praktyka maskowania kolekcji Java za pomocą znaczących nazw klas?

text: Ostatnio mam zwyczaj "maskowania" kolekcji Java przyjaznymi dla człowieka nazwami klas. Kilka prostych przykładów: // Klasa fasady, która sprawia, że kod jest bardziej czytelny i zrozumiały. public class WidgetCache extends Map<String, Widget> { } Lub: // Jeśli zauważyłeś, że ArrayList<ArrayList<?>> jest przekazywany w kodzie, czy // uciekniesz z krzykiem, czy faktycznie zrozumiesz, co to jest i co // reprezentuje? public class Changelist extends ArrayList<ArrayList<SomePOJO>> { } Kolega zwrócił mi uwagę, że jest to zła praktyka i wprowadza lag/latency, a także jest antywzorcem OO. Rozumiem, że wprowadza bardzo _niewielki_ stopień narzutu na wydajność, ale nie wyobrażam sobie, żeby było to w ogóle znaczące. Pytam więc: czy to dobrze czy źle i dlaczego?


title: Czy dyrektywy kompilatora są antywzorcami?

text: Pracuję nad starszym systemem, który ma klasę pomocnika, która jest symbolicznie połączona z wieloma różnymi projektami .Net w ramach rozwiązania. Logika jest wypełniona dyrektywami kompilatora, które zmieniają jego wewnętrzne zachowanie w oparciu o projekt .Net, w którym został skompilowany. Na przykład istnieje dyrektywa kompilatora, która analizuje zmienną „HAS_UI”, a jeśli jest prawdziwa, kompiluje się w instancjach i wyświetla frmProgress postęp do użytkownika. Próbuję wyjaśnić kolegom, dlaczego jest to kiepski projekt, odwołując się do konkretnych antywzorców. Wszystko, co do tej pory udało mi się wymyślić, to wzorce „pozytywne”, które powinny zostać wykorzystane, takie jak wzorzec pojedynczej odpowiedzialności lub wzorzec obserwatora. Czy ktoś może zaproponować konkretne antywzorce, które mogą mieć tu zastosowanie? Dzięki


title: Koszt dłuższego opóźnienia między rozwojem a kontrolą jakości

text: Na moim obecnym stanowisku kontrola jakości stała się wąskim gardłem. Mieliśmy niefortunne wystąpienie funkcji, które zostały zatrzymane w obecnej wersji, aby kontrola jakości mogła zakończyć testowanie. Oznacza to, że funkcje, które są już opracowywane, mogą nie być testowane przez 2-3 tygodnie po tym, jak programista już przeszedł. Ponieważ programiści poruszają się szybciej niż QA, tym razem różnica czasu będzie się tylko powiększać. Ciągle przeglądam moją kopię Code Complete, szukając fragmentu „Twardych danych”, który pokazuje, że koszt naprawy defektów rośnie wykładniczo, im dłużej istnieje. Czy ktoś może wskazać mi jakieś badania, które wspierają tę koncepcję? Staram się przekonać władze, że wąskie gardło QA jest dużo bardziej kosztowne niż im się wydaje.


title: Ponowne wykorzystanie kodu w C++, poprzez wielokrotne dziedziczenie lub kompozycję? Lub...?

text: Pierwotnie zadałem to pytanie na StackOverflow, ale zostałem tutaj skierowany i myślę, że mój problem jest prawdopodobnie tak samo koncepcyjny, jak techniczny, więc tutaj idzie. Jeśli definiujesz hierarchię klas abstrakcyjnych w C++, a następnie tworzysz konkretne podklasy z implementacjami, możesz skończyć z klasami abstrakcyjnymi, takimi jak to, powiedzmy: A / \ B1 B2 Więc klasy konkretne dziedziczą tak: B1 B2 B1 B2 | | | | C1 C2 D1 D2 I to wszystko jest w porządku, gdy `Cn` i `Dn` implementują po prostu interfejsy `Bn`, lub gdy `C1` i `C2` implementują interfejs `A` _inaczej_. Jeśli jednak chcę mieć jakąś funkcjonalność _shared_ w `C1` i `C2`, która pochodzi z interfejsu `A`, gdzie ją umieścić? Nie można go umieścić w „A”, zarówno dlatego, że „A” jest abstrakcyjne, jak i dlatego, że „Dn” nie powinno _nie_ go dziedziczyć. Wygląda na to, że istnieje hipotetyczna implementacja „A_for_C”, ale czy należy ona do innej klasy przodków? Lub w opanowanej klasie rodzeństwa? _____A_____ _____A_____ / | \ / | \ B1 A_dla_C B2 vs B1 B2 A_dla_C |_____/ \____ | | | C1 C2 C1 C2 (C1 i C2 mają wtedy A_for_C i delegata) Pierwsza z nich wydaje się koncepcyjnie dokładna, ale wymaga „wirtualnego” dziedziczenia, podczas gdy druga wymaga delegowania. Tak więc obie narzucają hit wydajności, mimo że nie ma żadnej prawdziwej dwuznaczności. Czytając w sieci, na tej stronie znalazłem napisane > Niektórzy uważają, że celem dziedziczenia jest ponowne użycie kodu. W C++ to jest błędne. Mówiąc wprost, „dziedziczenie nie służy do ponownego wykorzystania kodu”. Jak zatem należy udostępnić wdrożenie? **Dalsze przemyślenia** Odnalazłem odpowiednią dyskusję w tych pytaniach: * Skąd wzięła się koncepcja „składania faworyzowania nad dziedziczeniem”? * Interfejs i dziedziczenie: najlepsze z obu światów? * Czy istnieje jakiś „prawdziwy” powód, dla którego nienawidzone jest wielokrotne dziedziczenie? Myślę, że poniższa odpowiedź utnapistima jest o wiele bardziej zwięzła i rzeczowa niż te i pomogła mi mentalnie przebić się przez wiele z tego, co omawiają te inne pytania/odpowiedzi. Dziedziczenie polega na zgodzie na wykonanie umowy. Dziedziczenie wielokrotne jest w porządku, jeśli podklasa rzeczywiście gwarantuje spełnienie kontraktów nadrzędnych. Wdrożenie jest jednak tak naprawdę tylko troską obiektu końcowego. Tak, czasami może być wygodnie odziedziczyć implementację, ale w rzeczywistości jest to prostopadłe do interfejsu i istnieją różne techniki wciągania implementacji inne niż domyślne podejście oparte na tabeli v, w tym: * CRTP zgodnie z odpowiedzią nieaptyzmu * Wzorzec metody szablonu (które są, jak sądzę, równoważne, z wyjątkiem tego, że jeden jest w czasie kompilacji, a drugi w czasie wykonywania).


title: Czy można używać potwierdzeń statycznych (w czasie kompilacji) w testach jednostkowych?

text: Lub bardziej ogólnie: wywoływać błędy kompilatora w projektach testowych, jeśli coś, co można sprawdzić w czasie kompilacji, jest nie tak?


title: Czy ankieterzy powinni pytać kandydatów o nazwę użytkownika Stack Exchange?

text: Czy uznałbyś to za stosowne, gdybyś został poproszony o podanie nazwy użytkownika Stack Exchange podczas rozmowy kwalifikacyjnej w oprogramowaniu (lub jako pytanie przesiewowe przed rozmową kwalifikacyjną)? Wydaje mi się, że jest to bardzo rozsądna prośba i taka, która byłaby niezwykle pouczająca – jestem pewien, że mógłbym dowiedzieć się więcej o kandydacie w ciągu pięciu minut, patrząc na pytania i odpowiedzi, które opublikowali na Stack Exchange, niż przez 30 minutowy wywiad. Ale czy takie pytanie byłoby złą formą? Czy to „zbyt osobiste”? (Podobnie w przypadku GitHub lub innych publicznych/online forów udostępniania kodu).


title: Czy struktury JavaScript MVC są przeznaczone tylko dla aplikacji jednostronicowych?

text: Przyglądałem się kilku frameworkom JavaScript MVC (Backbone.js, Spine, SproutCore, itp.) i wydaje mi się, że wszystkie z nich są zaprojektowane do działania jako aplikacje „jednostronicowe”. Wszystkie przykłady, które widzę, mają stronę indeksową, która działa jako kontroler frontowy i używa adresów URL w stylu `#` lub `#!` dla różnych stron i obsługuje całe renderowanie strony. Mam kilka projektów, w których chciałbym używać bardziej „tradycyjnego” stylu adresów URL i mieć bardziej ustrukturyzowany JavaScript do obsługi niektórych bardziej skomplikowanych części aplikacji. czy frameworki JS MVC są tutaj odpowiedzią, czy powinienem szukać czegoś innego?


title: Moduł podrzędny Git dla folderu nieśledzonego?

text: Mam repozytorium git z folderem w nim. Folder jest wymieniony w moim pliku .gitignore. Sklonowałem kolejne repozytorium do tego ignorowanego folderu z github. Mogę chcieć pracować w nowym repozytorium, ale nie widzę powodu, aby było ono częścią oryginalnego repozytorium. Być może powinienem po prostu trzymać go poza oryginalnym repozytorium, ale wydaje mi się (w każdym razie) sensowne miejsce dla niego tematycznie (jest w miejscu, w którym wiedziałbym, że go szukać). Wydaje mi się, że trudno mi zrozumieć koncepcję podmodułu. Moje konkretne pytanie brzmi: „Czy powinienem użyć podmodułu w tej sytuacji, nawet jeśli folder jest ignorowany?” Zauważyłem, że "git status" daje mi status mojego oryginalnego repozytorium, mimo że wydaję polecenie wewnątrz ignorowanego folderu


title: Czy należy rutynowo rozwiązywać zagadki programistyczne?

text: W tej chwili próbuję rozwiązywać łamigłówki programistyczne tylko: * Kiedy się nudzę * Kiedy zdarzyło mi się znaleźć ciekawą zagadkę, a nie szukam takiej (np. ktoś zapytał o taką rzecz w SO) prawdopodobnie bym uzyskać lepsze efekty (stać się w nich lepszy), jeśli rutynowo je rozwiązywałem. Czy rutynowo rozwiązujesz zagadki (np. jeden problem w Project Euler lub gdzie indziej dziennie) i/lub poleciłbyś to innym? Jaka jest twoja „programowa rutyna rozwiązywania zagadek”?


title: Bezpieczeństwo w warstwie poprzecznej w projektowaniu opartym na domenie

text: Buduję rozwiązanie w oparciu o Domain Driven Design, staram się zaimplementować system bezpieczeństwa (uwierzytelnianie, autoryzacja, role, konfiguracja systemu, parametry połączeń itp.) w warstwie poprzecznej (przekrojowe zagadnienia typu Caching, Security , logowanie itp.). Warstwy mojej aplikacji to dwa projekty (ContractsTransversal i Transversal), w których projekt ContractsTransversal udostępnia tylko usługi warstwy poprzecznej za pomocą interfejsów (ICaching, ILogging, ISecurity itp.), ale implementacja tych interfejsów znajduje się w projekcie Transversal. Projekt oparty jest na książce „Guia de arquitectura de Ncapas orienta al dominio” firmy Microsoft, która sugeruje implementację warstwy poprzecznej w całym IoC (Dependency Injection) i jej relacje ze wszystkimi częściami systemu są oddzielone. Robię to, stworzyłem swój kontener do implementacji IoC. Mam inne projekty, które mają tylko moje jednostki biznesowe, takie jak UsersEntity, ProductEntity itp. Czy poprawne jest posiadanie referencji mojego projektu jednostek biznesowych do mojego projektu Transaversal i ContractsTransversal? Pytam, ponieważ w projekcie bezpieczeństwa muszę znać informacje o użytkowniku, rolach, uprawnieniach itp. lub jaka jest najlepsza praktyka wdrażania zabezpieczeń w modelu projektowania opartym na domenie?


title: Jak upewnić się, że media są używane tylko w autoryzowanych witrynach?

text: Mam wideotekę, którą muszę opublikować dla moich klientów. Klienci muszą mieć możliwość osadzenia odtwarzacza w swoich witrynach i odtwarzania filmów. Muszę ograniczyć dostęp tylko do moich klientów, aby nikt inny nie mógł umieszczać filmów w ich witrynach ani uzyskiwać do nich dostępu programowego. Nie mam pojęcia, jak to zrobić. Byłbym wdzięczny za każdą pomoc lub wskazówki. EDYCJA: Próbuję dowiedzieć się, jak upewnić się, że moje filmy są używane tylko w witrynach moich klientów, a nie w żadnych nieautoryzowanych witrynach. Powiedzmy, że myclient.com chce mieć wideo w swojej witrynie dla wszystkich odwiedzających. Jak to zrobić? Do tej pory tak rozumiem: 1. gdy odwiedzana jest witryna klienta i żądana jest strona zawierająca wideo, serwer klienta uwierzytelnia się w moim interfejsie API, który obsługuje filmy (czy odpowiedni jest tutaj pełnowymiarowy dostawca Oauth2?) 2. po tym , serwer klienta uzyskuje jednorazowy token dla konkretnego filmu, który oprócz tego, że jest jednorazowy, ma bardzo krótki czas TTL 3. serwer klienta renderuje ten token jako część strony (lub javascript). 4. następnie javascript użyje tokena do uruchomienia wideo, po którym token wygaśnie. zwróć uwagę, że część interfejsu API, która rozpoczyna przesyłanie strumieniowe wideo, nie jest chroniona przez mechanizm oauth2 i jest chroniona tylko przez te jednorazowe tokeny. czy to zadziała? jakieś inne sposoby, aby to zrobić? EDYCJA 2: Nie pytam, jak uniemożliwić użytkownikowi końcowemu zapisanie wideo na komputerze lokalnym. Pytam, czy możliwe jest uniemożliwienie witrynie, która nie jest autoryzowana, umieszczania filmów na swoich stronach i upewnienie się, że tylko te witryny, które są do tego uprawnione, mogą to zrobić.


title: ASP.NET MVVM Obsługa wielu obiektów transferu danych na jednej stronie

text: Mam stronę „edytuj” asp.net mvc, która umożliwia użytkownikowi wprowadzanie zmian w jednostce nadrzędnej, a następnie „tworzenie” jednostek podrzędnych na tej samej stronie. Uwaga: tworzę te obiekty transferu danych. public class CustomerViewModel { public int Id { get; ustawić; } public Byte[] Znacznik czasu { get; ustawić; } public string Nazwa_Klienta { get; ustawić; } public itp. public CustomerOrderCreateViewModel CustomerOrderCreateViewModel { get; ustawić; } } Moim zdaniem mam dwa formularze html. Jeden dla klientów "edytuj" posty HTTP, a drugi dla CustomerOrder "twórz" posty HTTP. Na stronie widoku ładuję formularz CustomerOrder "create" za pomocą: <div id="CustomerOrderCreate"> @Html.Partial("Vendor/_CustomerOrderCreatePartial", Model.CustomerOrderCreateViewModel) </div> Akcja html formularza CustomerOrder jest wysyłana do inny kontroler HttpPost ActionResult niż wynik akcji „edytuj” klienta. Moim zmartwieniem jest to, na kontrolerze CustomerOrder, w HttpPost ActionResult [HttpPost] public ActionResult Create(CustomerOrderCreateViewModel vm) { if (!ModelState.IsValid) { return [What Do I Return Here] } ... [Utrzymuj kod bazy danych ]... } Nie wiem, co zwrócić, jeśli stan modelu jest niepoprawny. W tej chwili nie stanowi to problemu, ponieważ dyskretna walidacja jquery obsługuje walidację na kliencie. Ale co, jeśli potrzebuję bardziej złożonej walidacji (np. serwer musi obsłużyć walidację).


title: standardy specyfikacji technicznej na system software+hardware

text: Czy istnieją jakieś udokumentowane standardy specyfikacji technicznych w branży IT? Teoretycznie taki standard byłby * z powodzeniem stosowany w praktyce * dotyczy zarówno części oprogramowania jak i sprzętu (rozwijamy oprogramowanie i elektronikę) * powinien być raczej nowoczesny Chcemy trzymać się jednego standardu i stosować go w naszych projektach.


title: Wiele modeli czy jeden model z wieloma niestandardowymi typami danych?

text: Piszę małą aplikację internetową do nauki. Czy lepszym/najlepszym rozwiązaniem jest tworzenie wielu modeli czy jednego modelu z wieloma niestandardowymi typami danych? Na przykład: załóżmy, że aplikacja internetowa to „Biblioteka publiczna”. Biblioteka miałaby półki. Na półkach byłyby książki i lokalizacje. Książki miałyby tytuły, autorów, tekst i liczbę dziesiętną Deweya. Czy nie byłoby lepiej mieć model książki, model półki (nie mógłbym wymyślić lepszego przykładu) i model biblioteki; lub klasę książki, klasę półki i model biblioteki, który przechowuje te klasy. Rozumiem, że model _jest_ klasą, ale mam nadzieję, że moje pytanie ma sens.


title: bezpieczne przechowywanie offline na komputerze dostępne za pośrednictwem javascript

text: Próbuję zbudować aplikację HTML5 opartą na przeglądarce, która ma możliwość przechowywania danych lokalnie na komputerze (nie na urządzeniu przenośnym) w trybie offline. Te dane są wrażliwe i muszą być bezpieczne. Oczywiście sztuczka polega na znalezieniu sposobu na uzyskanie dostępu do bezpiecznych danych za pomocą JavaScript. Wykluczyłem lokalną pamięć przeglądarki, ponieważ nie jest ona bezpieczna. Czy można to osiągnąć za pomocą lokalnej bazy danych? Jeśli tak, gdzie mogą być przechowywane poświadczenia bazy danych? JavaScript oczywiście nie wydaje się dobrą opcją do ich przechowywania, ponieważ jest czytelny dla użytkownika.


title: Jaka jest różnica między CRM, CMS i ERP

text: Wiem, że CRM to skrót od Customer Relationship Management, CMS to Content Management System, a ERP to Enterprise Resource Planner. Chciałbym wiedzieć, co każda z rzeczy robi najlepiej i w jakich scenariuszach jest używana. A więc podstawowe zrozumienie tych trzech z różnicami między nimi i środowiskami, w których są używane. **Edytuj:** Czytałem trochę więcej na Wiki i teraz rozumiem zgodnie z wiki ERP, że CRM jest częścią ERP. Moje pytanie, które ma być bardziej szczegółowe, brzmi: * Po co mieć CRM osobno, jeśli jest już częścią ERP? Abstrakcja? * Aby rejestrować i przechowywać informacje z call-center, które dzwoni do setek osób, aby uzyskać informacje, co jest lepsze, aby wykonać następujące zadania, CRM lub ERP? : * Przechowuj wszystkie informacje o wszystkich osobach, do których zostaliśmy wezwani * Przechowuj informacje o tym, która osoba dzwoniła i ile godzin przepracowała? * Dowiedz się, który pracownik był bardziej produktywny? Mój przyjaciel mocno wierzy, że CRM załatwi sprawę. Pomyślałem więc, że zapytam was, co byłoby lepsze i dlaczego to jest lepsze.


title: Połącz węzły w rozproszonej infrastrukturze Java do przetwarzania tweetów

text: Pracuję w nowej wersji starego projektu, z którego pobierałem i przetwarzałem statusy użytkowników z Twittera. Głównym problemem tego projektu była jego infrastruktura. Użyłem wielu wystąpień aplikacji Java (trackerów) do pobrania z Twittera przy określonym zadaniu (zasadniczo terminach do wyszukania), połączonym z węzłem centralnym (aplikacją internetową), który musiał przetwarzać wszystkie tweety raz dziennie i generować nowy zadanie dla każdego trackera raz na 15 minut. Węzeł centralny musiał również monitorować wszystkie trackery i włączać/wyłączać je na podstawie petycji użytkownika. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/xINey.png) To, jak powiedziałem, było zbyt wolne, ponieważ miałem wiele wąskich gardeł, więc w tej nowej wersji chcę poprawić infrastrukturę i wyizoluj wszystkie funkcjonalności w określonych węzłach. Potrzebuję również dobrego systemu powiadomień, aby otrzymywać powiadomienia dla dowolnego węzła. Tak więc na następnym diagramie pokazuję komponenty, których będę potrzebować w tej nowej wersji: ![tutaj wpisz opis obrazka](http://i.stack.imgur.com/dXCZe.png) Jak widać, tam jest więcej węzłów. Oto kilka uwag na ich temat: * **Dashboard:** Kontroluje statusy trackerów i wysyła pojedyncze zadanie do każdego z nich (na żądanie użytkownika). Tropiciele będą korzystać z tego zadania, dopóki nie zostaną zastąpione nowym (jeśli to zrobisz, nie co 15 minut, jak poprzednio). * **Wyszukiwarka:** Muszę przechowywać wszystkie tweety. Najpierw są one przechowywane w lokalnej bazie danych dla każdego trackera, ale potem myślę o użyciu czegoś takiego jak Elasticsearch, aby móc wykonywać szybkie wyszukiwania. * **Procesor tweetów:** Prosty i izolowany komponent z własną bazą danych (może coś w rodzaju wyszukiwarki, aby mieć szybki dostęp do informacji generowanych przez moduł). W przyszłości można by dodać więcej. * **Interfejs aplikacji:** aplikacja internetowa ze współdzieloną bazą danych z pulpitem nawigacyjnym (głównie do przechowywania informacji i preferencji użytkowników). Rzeczywiście, oba mogą zostać połączone w jedną sieć. Główna różnica w stosunku do poprzedniej wersji projektu polega na tym, że teraz będą izolowane i będą tylko wyświetlać informacje i wysyłać żądania. Nie wykonam w nich żadnego ciężkiego zadania (jak przetwarzać tweety tak jak wcześniej). Mając te komponenty, moim głównym problemem jest **jak ustrukturyzować wszystko**, aby nie musieć przepisywać dużej ilości kodu za każdym razem, gdy potrzebuję dostępu do jakichkolwiek nowych danych. Kolejnym problemem jest **jak** mogę **łączyć węzły**. Mógłbym użyć gniazd, ale to jest upierdliwe. Może warstwa REST? I wreszcie, jeśli wszystkie węzły są izolowane, jak mogę **generować powiadomienia** dla każdego użytkownika, które informacje znajdują się tylko w bazie danych używanej przez interfejs aplikacji? Programuję to przy użyciu Javy i Springa (przynajmniej używałem ich w ostatniej wersji), ale nie mam problemów ze zmianą języka, jeśli mogę skorzystać z narzędzia/biblioteki/silnika, aby ułatwić sobie życie i mieć lepsze Platforma. Wszelkie uwagi będą mile widziane.


title: O tworzeniu usług internetowych z Global State

text: Jestem nowy w programowaniu internetowym. Jestem bardziej doświadczony i komfortowy z kodem po stronie klienta. Od niedawna zajmuję się programowaniem internetowym za pomocą Pythona Google App Engine. Podczas próby napisania prostych aplikacji do nauki napotkałem pewne trudności, głównie związane z utrzymaniem pewnego rodzaju spójnego, powszechnie dostępnego stanu aplikacji. Próbowałem napisać prosty system zarządzania kolejkami, jakiego można by się spodziewać w małej klinice lub w stołówce. Zazwyczaj odbywa się to za pomocą sprzętu. Bierzesz numer z automatu biletowego, a gdy Twój numer jest wyświetlany lub dzwoniony, podchodzisz do kasy po serwis. Alternatywnie możesz otrzymać mały pager, który wyda sygnał dźwiękowy lub wibruje, gdy nadejdzie Twoja kolej na odebranie usługi. Ten pierwszy jest nieco lepszy, ponieważ masz wyobrażenie o tym, ile osób jeszcze przed tobą w kolejce. W tej sytuacji stan globalny to ostatni numer w kolejce, który musi być aktualizowany za każdym razem, gdy wysyłane jest żądanie do serwera. Nie jestem pewien, jak najlepiej przechowywać i utrzymywać tę wartość w kontekście GAE. Rozwiązaniem, o którym myślałem, było zachowanie wartości w Datastore, próba zapytania o nią podczas żądania biletu, aktualizacja wartości, a następnie ponowne zapisanie jej za pomocą put. Mój problem polega na tym, że nie wymyśliłem, jak zablokować zasób, aby inne żądania nie sprawdzały wartości, gdy jest w trakcie aktualizacji. Obawiam się, że mogę zakończyć żądania biletów, które mają ten sam numer kolejki. Również całe rozwiązanie wydaje mi się niezręczne. Zastanawiałem się, czy istnieje bardziej naturalny sposób na osiągnięcie tego bez konieczności przechodzenia przez Datastore. Czy ktoś z większym doświadczeniem w tej dziedzinie może udzielić porady, jak podejść do projektu powyższej aplikacji?


title: Prawidłowy sposób sprzedaży komercyjnego produktu z małymi skryptami GPL

text: Zajmuję się tworzeniem komercyjnego cmsa. Mam zamiar sprzedać ten cms. Używam jQuery, używam też wtyczki jQuery do wyboru daty i czasu w moim cmsie, mogę powiedzieć, że to tylko 1% mojego dużego skryptu, nie chcę sprzedawać całego programu na GPL ze względu na te dwie małe integracje (jQuery i selektor DateTime). Zadaj sobie następujące pytania: 1. Martwię się o wydanie licencji. Jaki jest najlepszy sposób na sprzedaż mojego produktu (rodzaj licencji)? 2. Czy jest jakiś sposób na udzielenie częściowych licencji? Mam na myśli, że po prostu dodaj małe powiadomienie w mojej licencji, że jQuery i selektor DateTime są nadal na GPL, ale inna część tego CMS ma licencję komercyjną? 3. Jeśli nie ma sposobu na sprzedaż produktu komercyjnego jako bliskiego źródła z małymi częściami GPL, jaka jest najmocniejsza licencja na sprzedaż mojego produktu, aby zapewnić jego bezpieczeństwo? Przepraszam za mój angielski


title: Pomysły na wdrożenie przechowywania wielu plików w jednym pliku w celu szybszego dostępu?

text: Moim wymaganiem jest przechowywanie dużej liczby plików w jednym pliku. Przechowywane pliki mogą być również obrazami, filmami lub zwykłymi plikami tekstowymi. Chcę kilka pomysłów do realizacji tego samego. Myślę o zaimplementowaniu systemu plików w pliku, ale nie jestem pewien, czy to dobry pomysł. Dodanie dodatkowych szczegółów zgodnie z żądaniem: Platforma, na której ma być rozwijana, jest Android. Początkowo pomysł polegał na przechowywaniu wszystkich danych za pomocą sqlite i zapewnianiu ich szyfrowania, ale myślę, że w końcu doprowadzi to do spowolnienia wraz ze wzrostem rozmiaru pliku. Z czasem plik będzie się powiększał. Głównym obszarem zainteresowania jest tutaj czas dostępu. Również chcę zapewnić szyfrowanie dla tego pojedynczego pliku. Wszelkie sugestie są mile widziane.


title: Dobre narzędzie do automatyzacji przeglądarki/skryptów internetowych po stronie klienta

text: Interesuje mnie zaadaptowanie narzędzia/języka skryptowego do automatyzacji niektórych codziennych zadań związanych ze zwalczaniem spamerów na forum. Krótki przegląd tych zadań: analizuj nowe rejestracje i posty na forum phpBB oraz usuwaj lub dezaktywuj spamerów za pomocą strony internetowej/społeczności, która zbiera takie zgłoszenia spamowe. Zazwyczaj taka automatyzacja jest zintegrowana z samą instalacją phpBB, co z pewnością ma swoje zalety. Moje podejście ma tę zaletę, że działa niezależnie itp. Jednym ze sposobów myślenia o tym jest automatyzacja przeglądarki. W przeszłości używałem iOpus iMacros dla Firefoksa (darmowej wersji), aby odpowiadać na pojedynczych spamerów, ale obecne ataki są bardzo rozproszone. Moja „logika” szufladkowania spamerów i osób nie będących spamerami wydaje się być poza zasięgiem bezpłatnej wersji iMacros. Z bardziej technicznego punktu widzenia można by pomyśleć o całkowitym zrezygnowaniu z przeglądarki i programowaniu żądań GET/POST kierowanych na moje forum i inne zasoby internetowe. Znam niektóre języki skryptowe, takie jak Ruby i Lua, ale mogę być przekonany, że skompilowana aplikacja lepiej nadaje się do tych zadań. Jednak z mojego doświadczenia wynika, że dynamiczna elastyczność interpretowanych środowisk jest bardzo przydatna w prototypowaniu i debugowaniu logiki aplikacji. Skłaniam się więc w kierunku języków skryptowych. Wśród przeglądarek preferuję Firefox i Chrome. Używam zarówno platformy Windows, jak i Linux, a jeśli narzędzie może dostosować się do platformy Android, będzie to zgrabna demonstracja umiejętności, tak? Z góry dziękujemy za sugestie!


title: W jaki sposób dane powinny być przesyłane między kodem JavaScript po stronie klienta i kodem C# za aplikacją ASP.NET?

text: Szukam najbardziej wydajnego/standardowego sposobu przekazywania danych między kodem JavaScript po stronie klienta i kodem C# za aplikacją ASP.NET. Używam następujących metod, aby to osiągnąć, ale wszystkie wydają się trochę krówkami. Aby przekazać dane z JavaScript do kodu C#, należy ustawić ukryte zmienne ASP i wywołać ogłaszanie zwrotne: <asp:HiddenField ID="RandomList" runat="server" /> function SetDataField(data) { document.getElementById('<%= RandomList.ClientID%>').value = dane; } Następnie w kodzie C# zbieram listę: protected void GetData(object sender, EventArgs e) { var _list = RandomList.value; } Wracając w drugą stronę, często używam ScriptManagera do zarejestrowania funkcji i przekazania jej danych podczas Page_Load: ScriptManager.RegisterStartupScript(this.GetType(), "Set","get("Test();",true); lub Dodaję atrybuty do kontrolek przed wysłaniem posta lub podczas etapów inicjalizacji lub wstępnego renderowania: Btn.Attributes.Add("onclick", "DisplayMessage("Hello");"); Te metody dobrze mi służyły i wykonują swoją pracę , ale po prostu nie czują się kompletne.Czy istnieje bardziej standardowy sposób przekazywania danych między JavaScriptem po stronie klienta i kodem zaplecza C#?Widziałem kilka postów, takich jak ten, które opisują klasę HtmlElement;czy to jest coś, do czego powinienem się przyjrzeć?


title: Nazewnictwo klas abstrakcyjnych Java

text: Przykład: Tworzysz klasę abstrakcyjną dla akcji Ajax. Różne akcje Ajax rozszerzą tę klasę. Problem: 1. Czy nazywasz klasę AjaxAction czy AbstractAjaxAction? 2. Kiedy tworzysz podklasy, czy nazywasz je: * Akcja * AjaxAction * Po prostu nazwij je czym są? Nie widzę potrzeby stosowania prefiksu „Abstract” ani żadnej konwencji nazewnictwa _required_ w podklasach. (W zależności od tego może pasować.) Czy istnieje oficjalna konwencja? Czy możesz mnie z tym połączyć? A jakie są Twoje opinie na ten temat?


title: Programiści Fullstack i projektowanie stron internetowych

text: Przyglądałem się rozwojowi pełnego stosu i jestem zdezorientowany, ponieważ otrzymuję różne odpowiedzi od ludzi. Wiem, że programiści full stack są odpowiedzialni za programowanie front-end i back-end, ale niektórzy twierdzą, że są również odpowiedzialni za projektowanie stron internetowych. Czy ktoś może to wyjaśnić? Jeśli to prawda, wydaje się niemożliwe, aby ktoś był w stanie nadążyć za wszystkimi najnowszymi trendami w projektowaniu/sztuce, jednocześnie nadążając za niesamowitą ilością języków i frameworków, które ciągle się zmieniają (biorąc pod uwagę, że technicznie wykonywałby 3 prace w 1 ) EDIT: Projektując strony internetowe mam na myśli to, że są odpowiedzialni za wykonanie szablonu w Photoshopie, a następnie za jego wdrożenie? A może dostaną szablon Photoshopa, który będą musieli wdrożyć? Zostało to przeze mnie niepoprawnie sformułowane, więc pomyślałem, że wyjaśnię.


title: Czy powinienem tworzyć określone klasy dla obiektów JSON, czy używać tylko kontenera (tablica/słownik) do uzyskiwania dostępu do danych?

text: Używam Foursquare, aby uzyskać listę restauracji w pobliżu w aplikacji na iOS. Wynik jest przechowywany w tablicy, która składa się ze słowników, a biorąc pod uwagę głębokość danych, każdy słownik zawiera również tablicę ze słownikami i tak dalej. Wynik powinien być wyświetlany wewnątrz UITableView. Czy powinienem utworzyć klasę, która reprezentuje restaurację, a następnie utworzyć instancję dla każdej restauracji, którą umieściłem w tablicy i użyć jej jako źródła danych dla mojego UITableView, czy też powinienem użyć całej tablicy, którą otrzymałem za pierwszym razem. Myślę, że użycie Array z dedykowaną klasą Restaurant znacznie ułatwiłoby obsługę, ale może są powody, aby nie robić tego w ten sposób? Może wydajność?