title: XMPP — serwis internetowy openfire, PHP i python

text: Planuję zintegrować powiadomienia w czasie rzeczywistym z aplikacją webową, nad którą aktualnie pracuję. Zdecydowałem się w tym celu skorzystać z XMPP i wybrałem serwer openfire, który uznałem za odpowiedni dla moich potrzeb. Frontend używa biblioteki strofe do pobierania powiadomień za pomocą BOSH z mojego serwera openfire. Jednak powiadomienia są powiadomieniami, a inne wiadomości mają być wysyłane przez moją aplikację, dlatego myślę, że ten kod musi znajdować się na zapleczu. Początkowo myślałem o korzystaniu z bibliotek PHP XMPP, takich jak XMPHP i JAXL, ale potem myślę, że spowodowałoby to duże obciążenie, ponieważ każdy skrypt będzie musiał wykonać te same kroki, takie jak połączenie, uwierzytelnianie itp. I myślę, że to sprawiłoby, że PHP trochę się skończy powolny i niereagujący. Teraz myślę o stworzeniu aplikacji pośredniczącej działającej jako usługa sieciowa, którą wywoła PHP, a ta aplikacja będzie obsługiwać usługę XMPP. Zaletą tego jest to, że ta aplikacja (serwer, jeśli chcesz) będzie musiała się połączyć tylko raz i będzie siedziała nasłuchując na porcie. Planuję również zbudować go w sposób asynchroniczny, tak aby najpierw przejmował wszystkie żądania z mojej aplikacji PHP, a następnie, gdy nie ma więcej żądań; zajmij się publikowaniem powiadomień. Planuję stworzyć tę usługę w Pythonie przy użyciu SleekXMPP. To właśnie planowałem. Jestem nowy w XMPP i całej tej usłudze sieciowej i chciałbym podzielić się twoimi komentarzami na ten temat w kwestiach takich jak wykorzystanie pamięci i procesora, zalety, wady, problemy ze skalowalnością, bezpieczeństwo itp. PS:-- także jeśli coś takiego już istnieje ( chociaż nie znalazłem po wielu Googlingach) Proszę, skieruj mnie tam. EDYCJA --- Usługa średniego poziomu powinna wykonywać następujące czynności (ale nie tylko): 1. Publikowanie powiadomień dla różnych poziomów grup i stron społeczności. 2. Powiadomienie dla pojedynczego użytkownika o jakimś wydarzeniu. 3. Rejestracja użytkownika (można jednak dokonać za pomocą wtyczki obsługi użytkownika). EDYCJA --- Musiałby również utworzyć węzły pub-sub oraz subskrybować i wypisać użytkowników z tych węzłów pub-sub. EDIT -- Praca z Twisted-Pythonem nad opracowaniem części API REST teraz (musiałem wybrać między XML_RPC i REST) będzie aktualizować to pytanie w miarę postępów. Również chcę przechowywać powiadomienia i wiadomości w bazie danych (openfire tego nie robi). Czy to byłby dobry wybór?


title: Wymagane dwa modele MVC?

text: Zajmuję się oprogramowaniem od dłuższego czasu, ale prawie wszystko jest zorientowane na backend. Niedawno postanowiłem nauczyć się Swinga i próbowałem zastosować zasady MVC. Zdaję sobie sprawę, że w Swing Widok jest obsługiwany przez komponenty, które dodajesz do okna/ramki/panelu, a Kontroler to Twój kod reagujący na zdarzenia. Jednak jeśli chodzi o Model to szybko stwierdziłem, że potrzebuję DWA modele. Jednym z nich jest model zaplecza reprezentujący bazowy wszechświat danych. Ten model jest całkowicie nieświadomy interfejsu użytkownika i faktu, że jest nawet wyświetlany. Druga to wersja modelu z dodatkowymi atrybutami rządzącymi aspektami związanymi z wyświetlaniem. Na przykład projekt, który wybrałem, był narzędziem, które porównuje instancje bazy danych, schematy i tabele w ogromnej aplikacji korporacyjnej zawierającej instancje 140 db, kilkaset schematów i tysiące tabel. Czasami, patrząc na nieznany kod, masz nazwę tabeli, ale znalezienie instancji i schematu, w której się ona znajduje, jest uciążliwe. Narzędzie wyświetla 3 kolumny: DB Instance, Schema i Table, a każda kolumna zawiera tylko unikalne nazwy. Po kliknięciu nazwy tabeli (na przykład) kolumny schematu i wystąpienia są filtrowane, pokazując, gdzie występuje ta konkretna tabela. Kliknięcie nazwy schematu lub nazwy instancji powoduje podobne zachowanie filtrowania w pozostałych dwóch kolumnach. ![Przykład interfejsu Schema Crossreference Tool](http://i.stack.imgur.com/tFWme.png) Mam model zaplecza zawierający trzypoziomowe drzewo (instancja, schemat, tabela), ale jest to nieodpowiednie dla interfejsu użytkownika Chcę się wyświetlić. Mam więc drugi „model wyświetlania”, który jest zbudowany na podstawie modelu zaplecza i wspiera trzy kolumny. To tam przechowuję flagi wskazujące, które wpisy są widoczne na podstawie danych wprowadzonych przez użytkownika. Te dwa modele znacznie różnią się strukturą, a wpisy modelu wyświetlania zawierają odniesienia do wpisów modelu zaplecza. W pewnym sensie wpisy modelu wyświetlania są adapterami, które umożliwiają obsługę wpisów modelu zaplecza w sposób odpowiedni do wyświetlania. Nie natknąłem się na żadne odniesienia do tego, ale moje przeczucie jest takie, że musi to być bardzo powszechny problem. Czy ktoś inny napotkał ten problem i jakie są „akceptowane” sposoby programowania interfejsu użytkownika, aby osiągnąć cel?


title: Czy używanie klasy opakowującej dla wskaźników ma sens?

text: W C++ wskaźniki mają na ogół o wiele więcej funkcji, niż jest to naprawdę konieczne. Szablon klasy, który otacza wskaźnik i usuwa większość rzadziej używanych funkcji (arytmetyka, indeksowanie, usuwanie). Każda funkcja może następnie zdecydować, jak silnego wskaźnika potrzebuje i wybrać odpowiedni typ. Czy jednak użycie takich typów miałoby sens w rzeczywistym projekcie? Czy błędy spowodowane niezamierzonymi działaniami arytmetycznymi/usunięciami są wystarczająco powszechne, aby uzasadnić dodatkowy wysiłek? Aby wyjaśnić: rozważam to jako system obok istniejących `weak_ptr`, `shared_ptr`, `unique_ptr` — te trzy są świetne, gdy zaangażowana jest własność, ale czasami przydatne są referencje niebędące właścicielami, które można zerować lub ponownie umieścić.


title: Czy zagnieżdżanie typedefów to dobry styl?

text: Powiedzmy, że mam przestrzeń nazw `my` i ta przestrzeń nazw zawiera klasę `foo`. Co powinienem preferować zagnieżdżanie typedef w mojej klasie lub przechowywanie go w mojej przestrzeni nazw? przestrzeń nazw my { class foo { // trochę rzeczy // zagnieżdżony jeden typedef bar my_foo_bar; }; // lub w przestrzeni nazw jeden typedef bar my_foo_bar; } Patrząc na biblioteki standardowe, większość rzeczy to wariant przestrzeni nazw. (może zły przykład, ale...) istream nie jest zagnieżdżony w iostream (w tym momencie mam na myśli tylko sposób użycia -> std::fstream, std::istream, ...), więc mogę go używać bezpośrednio . ale także lista możliwych funkcji jest dość obszerna w std:: Mogę zrobić jedno i drugie. Pierwszy wariant jest bardziej hermetyzowany, ale jeśli mam zbyt dużo dziedziczenia, muszę dużo wpisywać (my::foo::inh::i::so::on), jeśli nie będę używać `używając [przestrzeni nazw]` . Najpierw pomyślałem, że wariant zagnieżdżony jest przyjemniejszy ze względu na enkapsulację tego, co chcę mieć w tej samej „grupie”. Mógłbym również zrobić nową przestrzeń nazw wewnątrz mojego, ale wtedy muszę również wpisywać za każdym razem nową przestrzeń nazw (również bez używania [przestrzeni nazw]).


title: Na co zwrócić uwagę na szkoleniu

text: Mój zespół programistów chce rozszerzyć działalność o nowe obszary, w których obecnie nie mamy bezpośrednich umiejętności. Próbujemy ocenić dostępne kursy szkoleniowe, ale nie ma zbyt wielu różnic, które można wydobyć ze strony internetowej lub dwóch i broszury. Więc sednem mojego pytania jest to, czego powinniśmy szukać przy wyborze kursu szkoleniowego? Myślę, że najlepszym podejściem w tym momencie jest wysłanie RFC (prośby o komentarz) do zidentyfikowanych przez nas firm i poproszenia o następujące elementy: * program zajęć * ilość pracy ręcznej w porównaniu z wykładem * rekomendowane przez nich referencje przygotowawcze * biografie instruktorów * przybliżone szacunki liczby przeszkolonych uczniów* * czas szkolenia* * czas szkolenia z _tego_ przedmiotu* * wyniki ankiet satysfakcji uczniów na koniec klasy * oczekiwane pochodzenie uczniów * ogólna liczebność klasy * sposób, w jaki dostosuj kurs do indywidualnych potrzeb ucznia *Nie, to nie są świetne wskaźniki jakości kursów, ale trudno mi określić bardziej odpowiedni wskaźnik. **Prawdziwe pytania -->** _O co jeszcze powinniśmy pytać lub badać?_ _Czy istnieje lepsze podejście do oceny kursów szkoleniowych?_ To pytanie jest prawdopodobnie najbliższe odpowiedzi na moje pytanie, ale nie t zyskać dużą przyczepność. Ponadto wydaje się, że jest zorientowany na to, jak zaprojektować kurs, a nie na to, czego szukać. To pytanie jest powiązane, ale wydaje się, że osoba zadająca pytanie nie chce szkolenia. To zdecydowanie nie jest nasza sytuacja – mamy znaną lukę w umiejętnościach i chcemy ją zniwelować. Linki z tego pytania tak naprawdę nie zawierały żadnej treści, która spełniałaby moje potrzeby. To pytanie i to pytanie są związane ze szkoleniem (rozwój iOS), które nas szczególnie interesuje. Pytania są nieco przestarzałe, co jest jednym z powodów, dla których nie są tematem na P.SE. Jedną z bryłek, która mi się spodobała z tych dwóch pytań, było kupowanie i recenzowanie książek opublikowanych przez firmę szkoleniową, jeśli są one dostępne.


title: Wytyczne dotyczące zwrotu zbiorów z funkcji publicznych

text: ## Problem Wyobraź sobie, że masz funkcję w publicznym API, która musi zwrócić jakiś rodzaj kolekcji. Jego typ to coś w rodzaju foo :: a -> b gdzie `b` jest rodzajem kolekcji. O ile widzę, istnieją trzy główne rodzaje kolekcji -- przynajmniej te są najczęściej używane: 1. Sekwencje (kolejność ma znaczenie, mogą być duplikaty) 2. Zestawy (kolejność nie ma znaczenia, bez duplikatów ) 3. Mapy (elementy są parami klucz-wartość, kolejność nie ma znaczenia, bez duplikatów kluczy) Czego należy użyć dla `b` w tych trzech przypadkach?. Rozważałem trzy alternatywy, ale może być więcej. * * * ## A. Po prostu zwróć listę W tej alternatywie po prostu zwracasz listy dla wszystkiego: 1. `foo :: a -> [c]` 2. `foo :: a -> [c]` (i udokumentować, że nie ma duplikatów) 3. `foo :: a -> [(k, c)]` (i udokumentować, że nie ma duplikatów kluczy) Zaletą tego jest to, że klient może skonstruować dowolną kolekcję z zwrócona lista. Wadą dla 2 i 3 jest to, że * typ nie ma gwarancji "brak duplikatów" i że klient musi włożyć więcej pracy, aby uzyskać z niego zestaw/mapę * konstrukcja listy w 2 i 3 może być mniejsza wydajne, ponieważ coś takiego jak `unia` dla zbiorów jest oczywiście szybsze niż dla list * możesz skonstruować listę pośrednią (w zależności od problemu). ## B. Zwróć konkretny typ pasujący do gwarancji W tej alternatywie zwracasz typ, który dokładnie pasuje do gwarancji, które dajesz: 1. `foo :: a -> [c]` (lub może `foo :: a - > Data.Sequence.Seq c`) 2. `foo :: a -> Data.Set.Set c` (leniwy czy ścisły?) 3. `foo :: a -> Dane.Mapa k c` (leniwy lub ścisłe?) Zaletą jest to, że typ dokładnie opisuje gwarancje, które chcesz wyrazić, a klient nie musi wykonywać żadnej dodatkowej pracy. Wadą jest to, że jesteś ograniczony do konkretnej implementacji. Jeśli chcesz po prostu przełączyć się na inną implementację zestawu, łamiesz publiczny interfejs API. To może być dobra rzecz w przypadku zmiany między leniwym a ścisłym, ponieważ może to mieć znaczenie dla poprawności kodu wywołującego. Ale ogólnie rzecz biorąc, chcesz mieć możliwość wymiany implementacji bez zauważenia przez klientów. ## C. Pozwól klientowi zdecydować W tej alternatywie po prostu ograniczasz zwracany typ klasą typu i pozwalasz klientowi decydować o konkretnym typie: 1. `foo :: Sekwencja b c => a -> b` 2. ` foo :: Set b c => a -> b` 3. `foo :: Map b c k => a -> b` (Nazwy, których użyłem pochodzą z collections-api, ale to nie ma znaczenia.) Zaleta oznacza to, że klient może wybrać typ kolekcji do użycia. Wadą jest to, że nie masz już kontroli nad tworzoną kolekcją. Oznacza to np., że nie można zakładać lenistwa czy złożoności wkładek. Innym problemem jest to, że klient może otrzymać niejednoznaczne typy, np. gdy natychmiast złoży zwróconą kolekcję: Data.Foldable.fold (foo cokolwiek) Teraz `b` jest niejednoznaczne. * * * Czy są jakieś inne alternatywy? Co byś polecił? **Nie** chcę, aby `foo` mogło zwracać inny rodzaj kolekcji przy każdym połączeniu. Trzy rozpatrywane przypadki są całkowicie odrębne. W każdym przypadku pytanie brzmi „jeśli mam funkcję, która musi zwrócić X, jaki powinien mieć typ?” gdzie X może być sekwencją, zbiorem lub mapą (lub dowolnym innym rodzajem kolekcji, jaki możesz wymyślić).


title: Czy pisanie kaczką powinno wpływać na konwencje nazewnictwa?

text: Jestem programistą C++/C# i od niedawna zacząłem uczyć się Pythona. Myślę, że rozumiem teraz koncepcję pisania kaczką, z wyjątkiem jednej rzeczy. Kiedy koduję w C++ lub C# czasami tworzę zupełnie niepowiązane klasy, które mają podobne metody z podobnymi sygnaturami, na przykład: Create(), Open(), Close(), ProcessData() itp. To nie jest wielka sprawa w C++ lub C# (chyba że chcesz zadzierać z szablonami C++), ale w językach z kaczką pisania, takich jak Python, może to spowodować katastrofę. Rozważmy następujący przykład: class DbTransaction: def rollback(self): pass class SourceControlChangeset: def rollback(self): pass def rollback_transaction(transakcja): transaction.rollback() transaction = DbTransaction() changeset = SourceControlChangeset() rollback_transaction(transakcja) rollback_transaction(zestaw zmian) # Ups! Być może przykład jest trochę sztuczny, ale myślę, że może się to zdarzyć dość łatwo w dużym projekcie z wieloma klasami. Co powinienem zrobić w tej sytuacji? Myślę, że sprawdzanie typu nie jest „pythoniczne”, więc moim jedynym pomysłem jest zmiana konwencji nazewnictwa dla metod klasowych takich jak: class DbTransaction: def rollback_transaction (self): pass class SourceControlChangeset: def rollback_changeset (self): pass Jakieś pomysły?


title: Czy lekser powinien usuwać ciągi znaków?

text: Czy zadaniem leksera jest cofnięcie ucieczki do literału napisowego? Na przykład: „Ja: \"Hello World!\"” Staje się: Ja: "Hello World!" Czy ta konwersja powinna być wykonywana wewnątrz leksera? Zgaduję, że powinno, ponieważ pozwoliłoby to na bardziej abstrakcyjną i modułową konstrukcję. Możesz dodać sposoby reprezentowania ciągów i nie będziesz musiał aktualizować każdego komponentu.


title: Kto powinien być odpowiedzialny za pisanie/aktualizowanie specyfikacji projektowych w zwinnym zespole?

text: Pracuję jako część zespołu Agile podobnego do scrum, a jakiś czas temu stwierdziliśmy, że zespół powinien zrobić dobry zestaw dokumentów projektowych dla naszej bazy kodu. Ponieważ jesteśmy zwinni i mamy dużo dyskusji i komunikacji, nasze projekty są utrzymywane na wysokim poziomie i są ogólnie używane do opisywania ogólnego układu modułów, w tym głównych klas i niektórych ich interakcji. Uznaliśmy je również za przydatne jako punkty wyjścia do dyskusji, a także do przypominania ludziom, że projektowanie należy rozważyć przed przejściem do kodu. Do tej pory oczekiwano, że wszyscy będą aktualizować specyfikacje projektu w razie potrzeby. Liderzy projektowi dla każdego zespołu są odpowiedzialni za udzielanie ludziom ogólnych porad dotyczących projektowania, co do aktualizacji w kartach charakterystyki, a także za przeglądanie specyfikacji, aby upewnić się, że wszystko pozostaje spójne. Problem, który widzę, polega na tym, że chociaż wszyscy, zwłaszcza nowi członkowie, uważają specyfikacje projektowe za bardzo pomocne podczas uczenia się nowych komponentów lub nawet wracania do komponentów, których nie dotykali od jakiegoś czasu, większość ludzi aktualizuje dokumenty tylko w celu ich aktualizacji (tj. powiedziano im, że muszą to zrobić, więc to robią). Tak, że otrzymujemy jednolinijkowe opisy, które czasami nie są nawet pełnymi zdaniami, a kiedy mówię im, że trzeba je zaktualizować i uzupełnić, dodają więcej, ale znowu, tylko dlatego, że im powiedziano. Więc teraz jednolinijki stają się 1,5 linijki i nadal nie ma nic pomocnego napisane. Oczywiście różne umiejętności/siły członków zespołu będą różne. Więc pytanie brzmi, czy niektórzy członkowie zespołu w zwinnym zespole po prostu nie powinni być odpowiedzialni za projektowanie i zostać zredukowani do tylko kodera? A może powinno to być kierowaniem projektami, aby wrócić do tych członków zespołu i zmuszać ich do przepisywania specyfikacji tyle razy, ile jest to konieczne (a to naprawdę staje się bolesne), dopóki nie zdobędą wystarczających umiejętności, aby wyprodukować to, czego się oczekuje? Moja podstawowa wskazówka, którą sugeruję wszystkim: jeśli siedziałeś na spotkaniu lub robiłeś prezentację na temat diagramu klas X, co byś powiedział, gdyby Twoi odbiorcy musieli wiedzieć, jak działa Twój kod. Zamiast tego w połowie przypadków po prostu odtwarzają to, co już widzę na diagramie klas. „Klasa X implementuje interfejs Y”. To byłby cały opis klasy. **Poprawka:** Pracuję dla dużej korporacji z bardzo zdrowym apetytem na outsourcing/wykonawstwo. Zespół, do którego należę, ma stałych członków, ma też stałych członków, którzy są bardzo nowi w zespole (po niedawnym połączeniu). I mamy kontrahentów z Indii i Polski, którzy najprawdopodobniej zostaną przeniesieni do innego projektu po aktualnym wydaniu. Tak więc różni członkowie mają w tym momencie różne wpisowe. Dokumentacja jest zdecydowanie ważna dla tych z nas, którzy uczestniczyli w projekcie w ostatnim wydaniu i będą w projekcie w następnym wydaniu.


title: Przyspieszasz absolwentów?

text: To pytanie skłoniło mnie do myślenia o tym, jak firmy radzą sobie z nowo zatrudnionymi absolwentami. * Czy doświadczeni programiści oczekują, że absolwenci CS będą pisać czysty kod (przez czysty mam na myśli kod łatwo zrozumiały dla innych - może to zbyt wiele, aby się spodziewać?) * Czy znaczna część absolwentów w Twoim miejscu (jeśli w ogóle) po prostu kończy testowanie i naprawianie drobnych błędów w istniejących aplikacjach? * A nawet jeśli naprawiają błędy, czy spędzasz dwa razy więcej czasu na sprawdzaniu, czy niczego nie zepsuli i tworzeniu nowych błędów? Jak radzisz sobie z takimi scenariuszami, gdy programowanie w parach i przeglądy kodu nie są dostępnymi opcjami (z powodów takich jak osobiste terminy), a także jakie techniki znalazłeś, aby przyspieszyć świeżo upieczonych absolwentów? Niektóre sugestie byłyby świetne.


title: Zwinne zarządzanie projektami, zwinny rozwój: wczesna integracja

text: Wierzę, że agile działa, jeśli wszystko jest zwinne. W obszarze rozwoju oprogramowania, moim zdaniem, jeśli kod członków zespołu zostanie zintegrowany wcześnie, kod będzie bardziej zsynchronizowany, a to ma wiele zalet: * Wczesna integracja pomaga członkom zespołu uniknąć bolesnych połączeń. * Zachęca do lepszych nawyków kodowania, ponieważ wszyscy upewniają się, że nie łamią codziennie kodu współpracowników. * Zarówno programiści, jak i architekci ( _recenzenci kodu_ ) mogą wykryć złe decyzje projektowe lub po prostu _niewłaściwe_ kierunki rozwoju w czasie rzeczywistym, uniemożliwiając bezużyteczną pracę. Właściwie mówię o pobieraniu najnowszej wersji bazy kodu i codziennym wpisywaniu własnego kodu do kontroli źródła. Kiedy zaczynasz swój _dzień kodowania_ (tj. docierasz do pracy), twoją pierwszą akcją jest aktualizacja bazy kodu o najnowszą wersję z kontroli źródła. Z drugiej strony, gdy masz około godziny, aby wyjść z pracy i wrócić do domu, ostatnią akcją jest zaewidencjonowanie kodu do kontroli źródła i upewnij się, że Twoja codzienna praca nie przerywa procesu kompilacji projektu. Zamiast aktualizować i wpisywać swój kod po zakończeniu całego zadania, uważam, że najlepszym rozwiązaniem jest naprawienie małych i elastycznych osobistych kamieni milowych oraz zaewidencjonowanie kodu po zakończeniu jednego z nich. **Naprawdę wierzę, że to podejście do kodowania lepiej pasuje do koncepcji _agile_ zarządzania projektami**. **Czy znasz jakiś dokument, post na blogu, wiki, artykuł lub cokolwiek, co możesz mi zasugerować, a które mogą być zgodne z moją opinią?**. I **czy masz jakiś problem podczas pracy z tym podejściem?**. Z góry dziękuję.


title: Czy Excel może być silną platformą programistyczną?

text: Jesteśmy grupą entuzjastów inżynierów, którzy opracowują serię aplikacji wykorzystujących Excel jako nasz frontend. Używamy VBA, ale planujemy zacząć robić w VB.net. Niektórzy informatycy kwestionowali mądrość używania Excela jako platformy, ponieważ się zawiesza, jest niebezpieczny, trudny w utrzymaniu, powolny itp.


title: Rozdzielenie obowiązków rozwojowych w nowym projekcie

text: Niedawno rozpoczęliśmy nowy projekt (MVC 3.0), a niektóre z naszych wczesnych dyskusji dotyczyły tego, w jaki sposób praca i rozwój zostaną podzielone między członków zespołu, aby zapewnić jak najmniej nakładania się pracy, a tym samym pomóc w osiągnięciu nieco łatwiej każdemu programiście rozpocząć pracę i wykonać swoją pracę. Oczekuje się, że projekt potrwa około 6 miesięcy - 1 rok (chociaż nie wszyscy programiści są aktywni i mogą odfiltrować się pod koniec). Nasz zespół będzie mały, więc wierzę, że to trochę pomoże. Zasadniczo zespół będzie składał się z: * 3 x programistów (na wszystkich poziomach, tj. wyższy, średniozaawansowany i młodszy) * 1 x kierownik projektu / właściciel produktu / tester * Zewnętrzna firma odpowiedzialna za wykonywanie naszych prac projektowych Dotychczasowe ogólne decyzje projektowe / rozwojowe obejmowały: * Rozwijanie w sposób Agile przy użyciu technik SCRUM (nadal bardzo uczymy się tego podejścia jako firma) * Używaj archektektury MVVM * Używaj Ninject i DI tam, gdzie to możliwe * Próbuj używać jak największej liczby TDD do napędzania rozwoju. * Utrzymuj naszych kontrolerów tak chudych, jak to tylko możliwe * Utrzymuj nasze poglądy tak proste, jak to możliwe Podczas naszych dyskusji poruszono dwa podejścia, jak również rozdzielić obciążenie pracą, biorąc pod uwagę nasze cele przedstawione powyżej. **OPCJA 1** : separacja ramowa, w której każda osoba jest odpowiedzialna za obszary pojęciowe, z nakładaniem się i dyskusją głównie w obszarach integracji. Obszary integracji byłyby w gestii obu deweloperów zgodnie z wymaganiami. Zobacz prototypy (**Grafik**) | - Makiety | Widoki (pomocniki brzytwy i widoku itp.) i JavaScript (**Programista 1**) | - Zobacz modele (punkt integracji) | Kontrolery i logika aplikacji (**Programista 2**) | - Modele (punkt integracji) | Model domeny i trwałość (**Developer 3**) **OPCJA 2:** Podejście bardziej zorientowane na zadania, w którym każda osoba jest odpowiedzialna za wykonanie całego zadania (historii) od _view_ -> _controller_ -> _model_. **PYTANIE:** Dla tych, którzy pracowali w małych zespołach opracowujących projekty MVC, w jaki sposób zarządzałeś dystrybucją obciążenia w tej sytuacji. Nie wyobrażam sobie, żeby junior był odpowiedzialny za budowanie części podstawowej architektury, więc czy przyznanie im odpowiedzialności za widok ma sens, biorąc pod uwagę, że staramy się zachować prostotę?


title: Czy istnieje sposób na tworzenie oprogramowania komputerowego przy użyciu PHP?

text: Muszę opracować oprogramowanie CRM do marketingu nieruchomości dla mojego klienta - gdzie aplikacja jest zainstalowana na komputerze, ale może być również dostępna z sieci. 2 powody, dla których chcą, aby aplikacja działała na komputerze: 1. Aby mogła działać z/bez połączenia z Internetem 2. Nie chcą, aby ich pełne dane były dostępne online Chcą uzyskać dostęp do niektórych danych, takich jak wykaz nieruchomości i zapytania (zarządzane z aplikacji komputerowej) ze swojej strony internetowej poprzez bezpieczny login i hasło. Dane wprowadzane w aplikacji desktopowej powinny być automatycznie synchronizowane z aplikacją internetową. Zastanawiałem się, czy istnieje sposób na rozwijanie tego rodzaju oprogramowania przy użyciu PHP i MySQL. Jeśli tak, będzie wspaniale, jeśli ktoś poda mi link polecający. W innym przypadku proszę zasugerować, w jakim języku powinienem się posługiwać.


title: Wiązanie w widoku czy kontrolerze?

text: Widziałem 2 różne podejścia do MVC w sieci. Jednym, podobnie jak w ExtJS, jest powiązanie wywołań zwrotnych z widokiem za pośrednictwem kontrolera. Odnalezienie każdego elementu na widoku i dodanie funkcjonalności. Drugim, podobnie jak w angular.js i we frameworku windy, jest powiązanie widoków i po prostu napisanie funkcjonalności w kontrolerze. Co jest lepsze i czystsze? Podejście ExtJS ma głupie widoki i całą logikę w kontrolerze, co wydaje mi się czyste. Miałem problemy z globalnymi identyfikatorami dla elementów GUI lub względną nawigacją do elementów GUI w tym podejściu. Kiedy zmieniłem widok, kontroler nie mógł już znaleźć przycisków lub miałem wiele wystąpień jednego przycisku z tym samym identyfikatorem w jednej aplikacji, z powodu globalnego identyfikatora. Ale rozwiązałem to za pomocą identyfikatorów, które są tylko globalne w widoku i mogą znajdować się w aplikacji wiele razy. Mogłem więc zadzierać z układem i wyglądem (głupich) widoków, a funkcjonalność się nie zepsuła. Podejście angular.js z powiązaniami w widoku nie ma problemu z globalnymi identyfikatorami. Ponadto osoba, która coś zmienia w układzie widoku, i tak musi znać identyfikatory, aby kontroler mógł umieścić dane we właściwym miejscu. Więc jeśli napiszę  dla angular.js i zaimplementuję `doThis()` lub  dla extjs i znajdę element z lokalnym identyfikatorem i dodaję `doThis()` jako handler po stronie kontrolera, wydaje się, że nie jest tak różny. Jedyną rzeczą jest to, że druga ma jeszcze jedną warstwę pośrednią, która wydaje się czystsza. Pierwszy wydaje się mniej wysiłku.


title: Zrozumienie statycznego słowa kluczowego

text: Mam pewne doświadczenie w programowaniu w językach Java, Javascript i PHP. Czytam Microsoft Visual C# 2010 Step by Step, który moim zdaniem jest bardzo dobrą książką wprowadzającą w język C#. Wydaje mi się, że mam problemy ze zrozumieniem słowa kluczowego static. Z tego, co rozumiem do tej pory, jeśli klasa jest zadeklarowana jako statyczna, wszystkie metody i zmienna muszą być statyczne. Metoda main zawsze jest metodą statyczną, więc w klasie, w której istnieje metoda main, wszystkie zmienne i metody są zadeklarowane jako statyczne, jeśli trzeba je wywołać w metodzie main. Zauważyłem też, że aby wywołać metodę statyczną z innej klasy nie trzeba tworzyć obiektu, można użyć nazwy klasy. Jakie są zalety deklarowania zmiennych i metod statycznych? Kiedy należy zadeklarować zmienną statyczną i metody?


title: czy jest jakaś przyszłość z programowaniem komputerowym bez wiedzy naukowej?

text: moje główne przedmioty to studia komercyjne i **aplikacje** komputerowe. Nie mam wiedzy naukowej. Czy istnieje dobra kariera, która obejmuje oba te tematy.


title: Korzystanie ze wszystkich parametrów funkcji

text: Code Complete (2nd ed.) mówi: „Jeśli przekazujesz parametr do procedury, użyj go. Jeśli go nie używasz, usuń parametry z interfejsu procedury”. Jednak w przeszłości kiedyś musiałem to zrobić. Rozważmy następujący przykład: Załóżmy, że mamy abstrakcyjną klasę bazową o nazwie `Food`, zawierającą czystą funkcję wirtualną o nazwie `getEaten`. Wyprowadzamy z niego dwie oddzielne klasy: class Apple : public Food { void getEaten(const Utensil &utensil); // inne rzeczy     }; i class Soup : public Food { void getEaten(const Utensil &utensil); // inne rzeczy     }; Kiedy wywołujemy `mySoup.getEaten(spoon)`, funkcja korzysta z parametru `spoon` w celu wykonania akcji. Jabłko jednak nie potrzebuje przyborów iw takich przypadkach muszę wysłać przystawkę do 'myApple.getEaten(emptyUtensil)'. Tak, to jest brzydkie i wiąże się z niepotrzebnym tworzeniem i przekazywaniem atrapy obiektu. Mogę uogólnić problem w następujący sposób: „Kiedy mamy dwie koncepcje, które są reprezentowane jako dwie klasy, na jednej z nich zastosowano to samo działanie, a jedna potrzebuje więcej informacji niż druga, gdy żądamy wykonania tych działań, mam tendencję do przekaż fałszywe informacje do mniej informacji żądających obiektów." Więc moje pytania brzmią: 1) Jak możemy zmienić projekt tego nieco głupiego przykładu, aby nie trzeba było podawać smoczka? 2) Jeśli istnieje ładne, proste rozwiązanie pierwszego pytania, czy byłby sposób na uogólnienie go na uogólniony problem powyżej (jak rozwiązania typu „w tych przypadkach stwórz nowy x tak, aby współdziałał z mniej wymagającą informacją klasą, taką jak to" itp.)


title: Git: Gałąź czy widelec?

text: Mam projekt gry, który będzie miał dwie wersje: 1. Prostą wersję gry, rdzeń 2. Zaawansowaną wersję gry. Mam pierwszą wersję w moim publicznym repozytorium i tylko ja będę nad nią pracował. Jeśli chodzi o drugą wersję, będziemy nad nią pracować wraz z dwójką moich znajomych. Najważniejsze jest to, że chcę, aby dwie wersje pozostały w moim repozytorium. Myślałem, że mogę do tego użyć gałęzi, ale biorąc pod uwagę to pytanie i odpowiedź, nie jest to dobrą praktyką pod względem wersjonowania. O ile się dowiedziałem, rozwidlenie własnego repozytorium nie jest możliwe. Jakie mam tutaj opcje? Jak mogę zachować obie wersje w moim repozytorium?


title: Zasady korzystania z sieci w „Najlepszych firmach do pracy”

text: Jakie ograniczenia w korzystaniu z sieci obowiązują dla każdej firmy, która w 2010 roku znalazła się na liście „Najlepszych firm, w których można pracować”*, która zatrudnia programistów? Czy ta firma postrzega nieograniczony dostęp do Internetu jako korzyść dla swoich pracowników, nawet jeśli mogą z niego korzystać z powodów niezwiązanych z pracą? Jeśli możesz podać link do kopii zapasowej tych informacji, jeszcze lepiej. (* Nie chcę promować żadnej konkretnej publikacji, ale łatwo je znaleźć.) Moja hipoteza jest taka, że firma, która aspiruje do miana jednej z najlepszych, musi zapewnić dość nieograniczony dostęp do internetu i staram się testować to.


title: Co to jest wzór pętli zwrotnej?

text: Czytałem ten wpis na blogu o architekturze heksagonalnej i na dole jest napisane: > Wzorzec Loopback jest wyraźnym wzorcem do tworzenia wewnętrznego > zamiennika urządzenia zewnętrznego. Kiedy szukam w Google „Wzór sprzężenia zwrotnego”, nie znajduję żadnych szczegółów na jego temat. Czy ktoś wie, do czego odnosi się autor? Dla ciekawości chciałbym wiedzieć, jak to zaimplementować.


title: Co powinno się stać na początku uruchamiania projektu oprogramowania?

text: ## Krótkie wprowadzenie Moje semestry w college'u obejmują 8-tygodniowy projekt pracy dla rzeczywistej firmy, która potrzebuje oprogramowania, aby zdobyć potrzebne praktyczne doświadczenie. Właśnie rozpocząłem taki projekt z 5 innymi studentami. Każdy student musi poświęcać na ten projekt około 40 godzin tygodniowo. Pracujemy z SCRUM jako metodą tworzenia oprogramowania, zostało to wyznaczone przez naszych nauczycieli. ## Pytanie Właśnie zakończył się pierwszy dzień projektu, który stworzył dla mnie kilka pytań, jak rozpocząć projekt w „prawdziwym świecie”. Nasz pierwszy dzień obejmował pracę nad dokumentem planowania projektu (nie jestem pewien, co to za angielski termin), umówienie się z firmą na wprowadzenie oraz możliwość rozpoczęcia doprecyzowania wymagań i ustalenia pewnych standardów zachowania w grupie. Jednak ukończenie tych elementów nie trwało długo. Mamy konkretne plany na jutro i pojutrze po spotkaniu z firmą. To wciąż pozostawia kilka godzin „czasu pracy”. Czy zwykle nie jesteśmy w stanie wypełnić każdej godziny dnia pracy na początku projektu, czy po prostu jesteśmy zbyt niedoświadczeni, aby zobaczyć, jaka praca należy wykonać na tym etapie projektu, czy może właśnie przechodzimy powyższa lista jest za szybko? Jak to działa w „prawdziwym świecie”? Czy spędzasz czas zastanawiając się „co powinienem teraz zrobić”, czy masz jasny obraz tego, co powinieneś zrobić w tym momencie?


title: jest żargonem związanym z frameworkiem (koncepcją)

text: Jeśli to nie jest właściwe miejsce, aby zadać to pytanie, poinformuj, gdzie by to było, aby je zmienić... Mam wątpliwości co do prawidłowego słowa lub pojęcia w języku angielskim [nie mój ojczysty], co do związku > języka z na przykład ja pracuję z > celem C, z ramą dotykową kakao || Python z ramą django > praca Moje porównanie dotyczy języków naturalnych i języków formalnych, więc czy w języku naturalnym > angielski, a praca ramowa byłaby [komputerem, it]żargonem? Czy to ma sens? Albo jaka inna koncepcja byłaby relacją między językiem naturalnym a ramami?


title: Skąd obecny entuzjazm dla programowania funkcjonalnego?

text: Ostatnio słyszę dużo entuzjazmu na temat funkcjonalnych języków programowania, w odniesieniu do Scala, Clojure i F#. Niedawno zacząłem studiować Haskella, aby poznać paradygmat FP. Uwielbiam to, jest naprawdę zabawne i pasuje do mojego matematycznego wykształcenia. Ale czy to kiedykolwiek naprawdę będzie miało znaczenie? Oczywiście nie jest to nowy pomysł. Oto moje pytania: 1. Co przyczyniło się do niedawnego entuzjazmu FP? Czy to tylko nuda z OO, czy też coś się zmieniło, aby FP było bardziej potrzebne niż wcześniej? 2. Czy to wskazuje na przyszłość PR? A może to moda, jak bazy danych zorientowane obiektowo? Innymi słowy, czy ktoś może mi pomóc zrozumieć, skąd to się bierze i dokąd może zmierzać?


title: JavaFX - właściwy sposób korzystania z właściwości z obiektami domeny

text: JavaFX dostarczył kilka nowych obiektów Property, takich jak `javafx.beans.property.DoubleProperty`, które pozwalają zdefiniować pola, które mogą być automatycznie obserwowane i synchronizowane. W wielu przykładach JFX klasa modelu MVC zawiera wiele tych pól właściwości, które mogą następnie zostać automatycznie powiązane z widokiem. Wydaje się to jednak zachęcać nas do umieszczania właściwości JFX w naszych obiektach Domain (jeśli założysz, że klasa Model będzie obiektem domeny), co wydaje mi się słabym rozdzieleniem obaw (np. umieszczenie kodu GUI w Domain ). Czy ktoś widział rozwiązanie tego problemu w „prawdziwym życiu”, a jeśli tak, to jak to zrobiono?


title: Wykorzystaj MySQL jako mutex

text: Moja aplikacja musi wykonać operację raz na 10 minut, ale ta operacja jest wywoływana wielokrotnie częściej. Czasami jest wyzwalany trzy lub cztery razy na sekundę w różnych procesach i to jest główna rzecz, której chcę uniknąć. To Django i na początku użyłem funkcji `django.core.cache`, ale wciąż otrzymuję więcej niż jednego pracownika wykonującego operację jednocześnie. Mam też Redisa i wiem, że WATCH i MULTI mogą być używane do zapobiegania wyścigom, ale biblioteka django-redis ich nie obsługuje. To jest moje rozwiązanie; proszę skomentować, jak dobrze (lub nie) zapobiega jednoczesnemu wykonywaniu operacji przez wiele procesów roboczych (procesów): 1. Miej tabelę MySQL z polami `kiedy` i `uuid` i tylko jednym wierszem zaczynającym się od obu wartości NULL. 2. Kiedy pracownik otrzymuje polecenie rozpoczęcia operacji, kończy pracę wcześniej, jeśli „kiedy” jest mniej niż 10 minut temu. 3. W przeciwnym razie wygeneruj UUID i zapisz go w tabeli, aktualizując `kiedy` do `NOW()` w tym samym zapytaniu. 4. Następnie wybierz wiersz i wyjdź wcześniej, jeśli `uuid` nie pasuje do właśnie wygenerowanego. 5. W przeciwnym razie kontynuuj operację. Polega to na tym, że MySQL wymusza kolejność odczytów i zapisów oraz wymusza, aby tylko jedno zapytanie uzyskiwało dostęp do wiersza naraz, co może być nieprawidłowymi założeniami. Wszelkie alternatywne sposoby na powstrzymanie procesów Celery przed jednoczesnym uruchomieniem zadania byłyby równie pomocne.


title: Jaka jest różnica między debugowaniem a testowaniem?

text: Wprowadzenie do testowania oprogramowania (Ammann & Offutt) wspomina na stronie 32 o 5-poziomowym modelu dojrzałości testowania: **Poziom 0** Nie ma różnicy między testowaniem a debugowaniem. **Poziom 1** Celem testowania jest wykazanie, że oprogramowanie działa. **Poziom 2** Celem testowania jest wykazanie, że oprogramowanie nie działa. **Poziom 3** Celem testowania nie jest udowodnienie niczego konkretnego, ale zmniejszenie ryzyka korzystania z oprogramowania. **Poziom 4** Testowanie to dyscyplina umysłowa, która pomaga wszystkim informatykom rozwijać oprogramowanie wyższej jakości. Chociaż nie wchodzą one w szczegóły. Jakie są różnice między debugowaniem a testowaniem?


title: C++ Data Server i komunikacja z klientem J2ME

text: Pracuję nad robotem, który ma wbudowaną sztuczną inteligencję. Jednak upoważniony kontroler robota nie ma mocy do wykonywania pracy na pokładzie. Oznacza to, że muszę użyć koprocesora. Całą sztuczną inteligencję piszę w C++. Będzie to również serwer TCP. Mam pomysł na protokół. Serwer C++ odbiera polecenia i odsyła wartości tylko wtedy, gdy jest to absolutnie konieczne. Łańcuch dla podstawowego polecenia to: REQUEST DATA PUT nazwa_magazynu danych ENDREQ Serwer C++ przeanalizuje żądanie i zapisze dane pod referencją nazwa_magazynu. Aby odczytać dane z serwera: Żądanie Javy brzmiałoby: REQUEST DATA GET storename ENDREQ Serwer odpowie: data Będę używał TCP do transmisji danych, ponieważ wydaje się o wiele bardziej niezawodny i łatwy do zaimplementowania przy użyciu bibliotek, które ja zabawny. Nie mam zbyt dużej wiedzy na temat Javy, zwłaszcza z J2ME. Jak zaimplementować stronę Java? ZMIANA: Zaimplementowanie serwera WWW po stronie C++ jest dla mnie dość łatwe, więc nie krępuj się używać HTTP jako protokołu!


title: Dlaczego funkcja Throwable initCause jest wywoływana tylko raz?

text: To naprawdę dziwne, że metoda `initCause` klasy `Throwable` Javy może być wywołana tylko raz, lub nawet wcale (jeśli użyto konstruktora akceptującego `Throwable`). To sprawia, że tworzenie łańcuchów wyjątków nie jest tak łatwe, jak sądzę, że powinno być. prywatny Przyczyna rzucana = to; public Throwable(String message, Throwable przyczyny) { ... this.cause = przyczyna; } public Throwable getCause() { return (cause==this ? null : przyczyny); } public synced Throwable initCause(Throwable Cause) { if (this.cause != this) throw new IllegalStateException("Nie można nadpisać przyczyny"); if (cause == this) throw new IllegalArgumentException("Własna przyczyna jest niedozwolona"); this.cause = przyczyna; zwróć to; } Prowadzi to do brzydkiego standardowego kodu, który musi zajmować się skrajnymi przypadkami, w których metoda _może_ została już wywołana, ale nie jesteś pewien części kodu, w której chcesz ją ponownie wywołać. Co gorsza, metoda `getCause` nie mówi poprawnie, czy metoda `initCause` została wywołana, czy nie. Dzieje się tak dlatego, że ktoś inny mógł wywołać `initCause(null)`, co spowodowałoby, że `getCause` zwróciłby `null`, a jednocześnie `initCause` zakończyłby się niepowodzeniem z `IllegalStateException` (ponieważ `null != this` jest prawdą ). Rezultatem jest standardowy kod w następujący sposób: try { exp1.initCause(exp2); } catch (IllegalStateException ise) { // zrób coś lub zignoruj } catch (IllegalArgumentException iae) { // zrób coś lub zignoruj } Podczas gdy powinienem być w stanie po prostu wywołać `exp1.initCause(exp2);` nie przejmując się, czy to to samo wyjątek lub metoda została już wywołana (i pozwól metodzie zająć się tym, co zrobić, jeśli którykolwiek z warunków jest spełniony; _na przykład_ po prostu zignoruj nową przyczynę). **Jaki jest powód takiego dziwnego projektu?** **_Edytuj:_** Chciałbym wyjaśnić, że nie mam problemu z niezmienną przyczyną. Mój problem polega na tym, że zapewnienie, że taka niezmienność nie zostanie naruszona, jest obciążeniem dla programistów, a nie jest obsługiwane automatycznie przez implementację. Byłoby dla mnie bardziej sensowne, gdyby przyczyna została zaimplementowana w następujący sposób: prywatna przyczyna, którą można zgłosić; // null oznacza brak przyczyny public Throwable(String message, Throwable Cause) { ... this.cause = Cause; } public Throwable getCause() { zwróć przyczynę; } public synchronizowane Throwable initCause(Throwable Cause) { if (this.cause == null) this.cause = Cause; zwróć to; } Lub nawet gdyby zachowano **oryginalną** implementację, można by dodać przydatną metodę: public boolean hasCause() { return (this.cause != this); } Żebym mógł zredukować standardowy kod do prostego: if (!exp1.hasCause()) exp1.initCause(exp2); Chciałbym również wyjaśnić, że nie jest to pytanie, której wersji Javy powinienem używać, ani czy powinienem nadal używać wersji Javy, które osiągnęły koniec swojego wsparcia technicznego. Istnieje wiele powodów, dla których starsze wersje Javy są nadal używane, poza _"leniwym aktualizowaniem"_ lub _"nie dbam o bezpieczeństwo"_. `:)`


title: Czy wiele pozycji danych powinno znajdować się w metodach testów wielojednostkowych?

text: Często chcę, aby ten sam test jednostkowy został zastosowany do danych wielu elementów, które są w przybliżeniu równoważne (dwa niepuste ciągi). Obecnie implementuję je w wielu metodach testów jednostkowych o nazwach takich jak `MethodNonEmptyValidString1` i `MethodNonEmptyValidString2`. Ma to dla mnie trochę zapach kodu. Czy lepiej mieć wiele elementów danych w jednej metodzie z wieloma potwierdzeniami? Czy istnieje inny wzorzec projektowy, który modeluje to dokładniej?


title: mysql, jedno połączenie kontra wiele

text: Na nodejs z node-mysql, czy powinienem utworzyć jedno połączenie dla usługi w następujący sposób: var client = mysql.createClient({ user: 'user', password: 'pass' }); // Utwórz nowego klienta mysql io.sockets.on("połączenie", funkcja (użytkownik)) // gdy użytkownik wprowadzi { wynik = client.query('sprawdź użytkownika'); //sprawdź użytkownika w bazie danych if (wynik) { user.on('do stuff', function (data) // ustaw na zrobienie czegoś na zapytanie { client.query('some stuff'); //uruchom klienta mysql pracować             }); } else { user.disconnect(); } }); } lub lub dla każdego użytkownika w ten sposób: io.sockets.on("connection", function (user)) // kiedy użytkownik wprowadzi { var client = mysql.createClient({ user: 'user', password: 'pass' }); // Utwórz nowego klienta mysql, gdy użytkownik wprowadzi wynik = client.query('check user'); //sprawdź użytkownika w bazie danych if (wynik) { user.on('do stuff', function (data) // ustaw na zrobienie czegoś na zapytanie { client.query('some stuff'); //uruchom klienta mysql pracować             }); user.on('disconnect', function (data) { client.close(); }); } else { user.disconnect(); klient.zamknij(); } } Pytam: * czy to pierwsze jest szybsze, ponieważ połączenie jest zawsze otwarte, a drugie musi zostać utworzone za każdym razem, gdy użytkownik się łączy? * czy ten pierwszy jest wolniejszy, ponieważ jeśli wielu użytkowników pyta o zapytania, robi tylko jedno na raz, a na drugim każdy ma własnego klienta i może wykonywać wiele połączeń jednocześnie? * czy drugi jest cięższy dla serwera node i mysql, ponieważ musi mieć 1 klienta dla każdego użytkownika? * czy ten pierwszy jest cięższy bo nigdy nie zamyka połączenia mysql, a po kilku zapytaniach może mieć jakieś wycieki pamięci? * czy powinienem utworzyć i zamknąć połączenie mysql dla każdego zapytania? PS: aplikacja podłączona do serwera węzła będzie miała dużą liczbę użytkowników, połączonych przez długi czas, ale będzie miała bardzo małą liczbę zapytań, ale użytkownicy prawdopodobnie będą pytać o zapytania mniej więcej w tym samym czasie.


title: Treść CDN i zawartość dynamiczna

text: Jestem ciekawy, jak dynamiczne aplikacje internetowe współpracują z sieciami dostarczania treści, takimi jak cloudflare, amazon cloudfront itp. Rozumiem koncepcję CDN uzyskującego pamięć podręczną stron statycznych, a następnie obsługującego te strony z różnych serwerów w stosunku do miejsca, w którym pochodzi żądanie. Jednak jeśli chodzi o aplikacje, które obciążają bazę danych, które wymagają sesji użytkownika, pozwalają na wyszukiwanie i inne interakcje użytkownika, czy cdn jest nadal przydatne? Jeśli odpowiedź brzmi tak, czy cdn indeksuje twój serwer i tworzy pamięci podręczne wszystkich stron, które można tworzyć dynamicznie? Jeśli to prawda, to w jaki sposób obchodzimy się z danymi wrażliwymi? (Na przykład, jeśli aplikacja pobiera informacje profilowe specyficzne dla użytkownika, do którego tylko ten użytkownik powinien mieć dostęp).


title: Jak uniknąć zbędnego kodu w projektowaniu dziedziczenia w C++

text: Powiedzmy, że mam klasę bazową o nazwie „Samochód” i ma ona 3 klasy pochodne: „Ford”, „Honda” i „Audi”. Problem polega na tym, że wszystkie trzy klasy pochodne mają dokładnie ten sam kod, ale niewielką różnicę w wywoływaniu funkcji składowych odpowiednich aparatów (te aparaty mają oddzielną klasę). Na przykład klasa `Ford` wywołuje kod, który jest dokładnie taki sam jak pozostałe dwie klasy, ale wywołuje coś takiego jak `ford_engine-> start()`, `ford_engine->clean()` itd. //ly honda wywołuje honda_engine->start () honda_silnik->czysty(); //ly Audi wywołuje audi_engine->start() audi->clean(); Teraz problem polega na tym, że ma nadmiarowy kod we wszystkich trzech miejscach z niewielką różnicą. Jak mogę mieć kod w jednym miejscu, najprawdopodobniej w klasie bazowej i wszystkie klasy pochodne używają tego samego kodu?


title: Jakie licencje są zgodne z wymaganiami licencyjnymi MASM32?

text: Dokumentacja MASM32 wyraźnie stwierdza, że GPL narusza licencję MASM32 i dlatego nie może być stosowana do projektów zbudowanych z MASM32. > Projekt MASM32 **nie może być używany do tworzenia oprogramowania open source** ani żadnego innego projektu na podstawie jakiejkolwiek formy licencji, która wymaga od użytkownika projektu MASM32 > zrzeczenia się praw przyznanych mu w ramach licencji MASM32. > W szczególności licencja MASM32 całkowicie wyklucza projekty licencjonowane w ramach > opublikowanej licencji GPL i/lub jej wariantów organizacji GNU. Nie ma jednak wskazówek, które licencje _są_ zgodne z MASM32. Moje najlepsze przypuszczenie oparte na ogólnym dążeniu do wolności, a nie ograniczeniach w licencji MASM32, jest takie, że licencja MIT byłaby zgodna. Nie jestem jednak prawnikiem. Ktoś inny poszedł już tą ścieżką i zorientował się, które licencje mogą być używane z MASM32?


title: Czy każda aplikacja mobilna może mieć własne konto klienta do płatności? (Windows Phone, Android i iPhone)

text: Moja firma ma wielu klientów, którzy chcą mieć aplikacje mobilne, a wpłacanie płatności na nasze konto, a następnie sortowanie płatności byłoby prawdziwym bólem. Czy firma może mieć konto główne do publikowania aplikacji (bezpłatne i odpłatne) i nadal mieć jakieś konto klienta dla każdej aplikacji (aby móc bezpośrednio przeglądać sprzedaż i otrzymywać pełną płatność)? Chciałbym wiedzieć o Windows, Android i Apple.


title: Kiedy NIE trzeba już odnawiać swojej licencji na komercyjne produkty z półki (COTS)?

text: Załóżmy, że ktoś kupuje „z półki” sieć społecznościową (licencję) ze wszystkimi niezbędnymi podstawowymi funkcjami sieci społecznościowej za jednorazową opłatą w wysokości 500 $, a następnie opłatą za odnowienie w wysokości 250 $ za każdy kolejny rok (ciągłego użytkowania ). Następnie wewnętrzni graficy i twórcy stron internetowych modyfikują układ stron (szablon), kolory; i dostosowują (zmieniają) kodowanie do własnych potrzeb. Z czasem dodawane są dodatkowe wtyczki i inne strony internetowe, a język oryginalny staje się mniejszy niż oryginalny 100% (COTS). Kiedy zespół twórców stron internetowych może zgłosić roszczenie o „własność” praw autorskich do ich rozszerzonego „kodowania” i przestać płacić opłatę za odnowienie firmie, od której kupił produkt COTS? Kiedy krzyżuje się granica między „To był twój dzień 1....ale... teraz jest mój, ponieważ wygląda na inny niż to, co od ciebie kupiłem”? Czy masz na myśli stosunek, na przykład stare kodowanie 30% nowe 70%? lub jak inaczej mógłbyś usprawiedliwić nie płacenie temu, kto sprzedał ci tę licencję i ściga cię za coroczne odnowienie?


title: Katalogowanie zdarzeń, projektów i zadań: Czy SQL jest odpowiedni?

text: Mam taki pomysł na bazę danych: zawierałaby wszystko, co „muszę zapamiętać”, i umożliwiała przyszłym projektom kodowania dostęp do informacji. Te przyszłe projekty obejmują planer dnia i analizę historyczną tego, co robiłem. Rzeczy, o których muszę pamiętać, dzielą się na dwie główne kategorie: Zdarzenia i Zadania. Niektóre zadania (np. „zmyć naczynia”) nie będą częścią projektu, ale większość będzie (np. „napisz streszczenie na papier AIAA”). Zarówno Wydarzenia, jak i Zadania zawsze będą miały kategorię „Dom”, „Szkoła”, „Praca” lub „Rodzina”. Chcę oprzeć to na kilku tabelach SQL, ponieważ używałem SQL wcześniej w pracy i było to naprawdę proste i łatwe w obsłudze. Niedawno też się z nim zapoznałem, więc jest dla mnie zabawny i nowy. W przypadku tego konkretnego projektu myślałem o dużej tabeli dla rzeczywistych wpisów z kluczami obcymi dla ich projektu i kategorii. Moje pytanie brzmi: czy SQL jest właściwym wyborem, czy też używam młota pneumatycznego do otwierania drzwi z ekranu? Jestem pewien, że można to zrobić w ten sposób; ale obawiam się, że może istnieć bardziej sensowne rozwiązanie, i jestem pewien, że błyszcząca nowość SQL przyćmiewa moją wizję. **Edytuj po zastanowieniu się nad komentarzami:** Arkusz kalkulacyjny wprowadza możliwość błędów z powodu ciągłego powtarzania się zamiast odwoływania się do predefiniowanych jednostek; co więcej, poświęca czytelność maszynową, aby zapewnić niewygodny interfejs graficzny. Akceptuję pogląd, że SQL byłby nieodpowiedni, ale nie sądzę, aby arkusz kalkulacyjny mógł zaspokoić moje potrzeby. **Ostateczna edycja:** poszukałem trochę więcej i znalazłem kilka potencjalnych sposobów na zaimplementowanie tego, które zapewniają dobrą równowagę między „rozsądnymi” a „interesującymi”. Zdałem sobie sprawę, kiedy czytałem wasze komentarze, że muszę zdecydować, czy chcę to zrobić we „właściwy” sposób, czy w zabawny sposób. I myślę, że chcę to zrobić w zabawny sposób. Zrobiłem trochę eksploracji i znalazłem kilka rozwiązań, które mogłyby rozszerzyć mój zestaw narzędzi do przyszłych projektów, nie będąc całkowicie zbędnym, jak SQL. * KirbyBase to naprawdę prosta baza danych ruby, która wydaje się być idealna dla małych, głupich projektów, takich jak ten. * Istnieje również wiele interesujących opcji NoSql, nad którymi zamierzam przeprowadzić więcej badań: MongoDB, CouchDB i neo4j. Zamierzam iść dalej i wybrać jedyną odpowiedź, która odpowiadała na pytanie i pozostawić ten temat do utonięcia, ponieważ większość komentarzy (nie wyłączając mojego) jest zbyt subiektywna dla SE. Dziękuję wszystkim za radę!


title: Edytujesz pliki bez warunków wyścigu?

text: Mam plik CSV, który musi być edytowany przez wiele procesów jednocześnie. Moje pytanie brzmi, jak mogę to zrobić bez wprowadzania warunków wyścigu? Łatwo jest pisać do końca pliku bez warunków wyścigu, otwierając go w trybie „a” (O_APPEND) i po prostu do niego pisząc. Sprawy stają się trudniejsze podczas usuwania wierszy z pliku. Najprostszym rozwiązaniem jest wczytanie pliku do pamięci, wprowadzenie w nim zmian i nadpisanie go z powrotem do pliku. Jeśli jednak inny proces zapisze do niego po tym, jak znajdzie się w pamięci, nowe dane zostaną utracone po nadpisaniu. Aby jeszcze bardziej skomplikować sprawę, moja platforma nie obsługuje blokowania rekordów POSIX, sprawdzanie istnienia pliku jest sytuacją wyścigu, która czeka na to, aby się wydarzyło, rename(2) zastępuje plik docelowy, jeśli istnieje, zamiast zawodzić, a edycja plików w miejscu pozostawia puste bajty w nim, chyba że pozostałe bajty są przesunięte w kierunku początku pliku. Mój pomysł na usunięcie linii jest następujący (w pseudokodzie): filename = "/home/user/somefile"; plik = otwórz(nazwa pliku, "r"); tmp = open(nazwapliku+".tmp", "ax") || die("nie można utworzyć pliku tmp"); //"a" to O_APPEND, "x" to O_EXCL|O_CREAT while(write(tmp, read(file)); //skopiuj plik $ do $file+.new" close(file); //edytuj plik tmp unlink(filename) || die("nie można odłączyć pliku"); file = open(filename, "wx") || die("inny proces musiał zapisywać plik po jego skopiowaniu."); //" w" oznacza nadpisanie, "x" wymusza tworzenie pliku while(write(file, read(tmp))); //skopiuj plik ".tmp" z powrotem do oryginalnego pliku unlink(nazwapliku+".tmp") || die(" nie można odłączyć pliku tmp"); A może lepiej byłoby z prostym plikiem blokującym? Proces dołączający: lock = open(filename+".lock", "wx") || die("nie można zablokować pliku"); file = open(filename, "a"); write(file, "stuff"); close(file); close(lock); unlink(filename+".lock"); proces edytora: lock = open(filename+.lock" , "wx") || die("nie można zablokować pliku"); file = open(filename, "rw"); while(contents += read(file)); //edytuj "contents" write(fil e, treść); Zamknij plik); zamknij (zamek); unlink(nazwa pliku+.lock"); Obydwa opierają się na dodatkowym pliku, który pozostanie, jeśli proces zakończy się przed jego odłączeniem, powodując, że inne procesy odmówią zapisu do oryginalnego pliku. Moim zdaniem problemy te wynikają z faktu, że system operacyjny umożliwia jednoczesne otwieranie wielu zapisywalnych deskryptorów plików w tym samym pliku, zamiast zawodzić, jeśli zapisywalny deskryptor pliku jest już otwarty. Wygląda na to, że O_CREAT|O_EXCL jest najbardziej zbliżone do prawdziwego rozwiązania do zapobiegania wyścigom w systemach plików, poza blokowaniem rekordów POSIX. Innym możliwym rozwiązaniem jest podzielenie pliku na wiele plików i katalogów, dzięki czemu można uzyskać bardziej szczegółową kontrolę nad komponentami (wierszami, polami) pliku za pomocą O_CREAT|O_EXCL. Na przykład "plik/$id/$pole" będzie zawierał wartość kolumny $pole wiersza $id. Nie byłby to już plik CSV, ale może po prostu działać. Tak, wiem, że powinienem używać do tego bazy danych, ponieważ bazy danych są zbudowane do obsługi tego rodzaju problemów, ale program jest stosunkowo prosty i miałem nadzieję, że uniknę narzutu. Czy któryś z tych wzorców zadziała? Czy jest lepszy sposób? Jakikolwiek wgląd w tego rodzaju problemy byłby mile widziany.


title: Ile zrobić wątków użyć?

text: Kiedy (ponownie) kompiluję duże systemy na komputerze stacjonarnym/laptopie, mówię `make`, aby używał więcej niż jednego wątku w celu przyspieszenia kompilacji, na przykład: $ make -j$[ $K * $C ] Gdzie `$C` ma wskazywać liczbę _rdzeni_ (którą możemy założyć, że jest to liczba jednocyfrowa) jaką posiada maszyna, podczas gdy `$K` to coś, co zmieniam od `2` do `4`, w zależności od mojego nastrój. Na przykład mogę powiedzieć `make -j12`, jeśli mam 4 rdzenie, wskazując na `make`, aby użyć do 12 wątków. * * * Moje uzasadnienie jest takie, że jeśli używam tylko wątków `$C`, rdzenie będą bezczynne, podczas gdy procesy będą zajęte pobieraniem danych z dysków. Ale jeśli nie ograniczę liczby wątków (np. `make -j`) ryzykuję, że zmarnuję czas na przełączanie kontekstów, zabraknie pamięci lub gorzej. Załóżmy, że maszyna ma `$M` gigi pamięci (gdzie `$M` jest rzędu 10). Zastanawiałem się więc, czy istnieje ustalona strategia wyboru najbardziej wydajnej liczby wątków do uruchomienia.


title: Jak ustrukturyzować repozytoria git dla projektu?

text: Pracuję nad modułem synchronizacji treści dla Drupala. Istnieje moduł serwera, który znajduje się na stronie internetowej i udostępnia treści za pośrednictwem serwisu internetowego. Istnieje również moduł klienta, który znajduje się w innej witrynie i pobiera i importuje zawartość w regularnych odstępach czasu. Serwer tworzony jest na Drupal 6. Klient tworzony jest na Drupal 7. Będzie potrzebna wersja serwera Druapl 7. A potem pojawi się zapotrzebowanie na wersję Drupala 8 zarówno klienta, jak i serwera, gdy zostanie ona wydana w przyszłym roku. Jestem całkiem nowy w git i kontroli źródła, więc zastanawiałem się, jaki jest najlepszy sposób na skonfigurowanie repozytoriów git? Czy byłby to przypadek posiadania osobnego repozytorium dla każdej instancji, np. Drupal 6 serwer = 1 repozytorium Drupal 6 klient = 1 repozytorium Drupal 7 serwer = 1 repozytorium Drupal 7 klient = 1 repozytorium itd. repozytorium dla serwera, a drugie dla klienta, a następnie tworzenie oddziałów dla każdej wersji Drupala? Obecnie posiadam 2 repozytoria - jedno dla klienta, drugie dla serwera.


title: Wzorzec współbieżności rejestratora w aplikacji wielowątkowej

text: Kontekst: Pracujemy nad aplikacją wielowątkową (Linux-C), która działa zgodnie z modelem potoku. Każdy moduł ma prywatny wątek i enkapsulowane obiekty, które przetwarzają dane; a każdy etap ma standardową formę wymiany danych z kolejną jednostką. Aplikacja jest wolna od wycieków pamięci i jest bezpieczna wątkowo dzięki blokadom w punkcie wymiany danych. Całkowita liczba wątków to około 15- a każdy wątek może mieć od 1 do 4 obiektów. Stworzenie około 25 - 30 nieparzystych obiektów, z których wszystkie wymagają krytycznego logowania. Najwięcej dyskusji widziałem o różnych poziomach jak w Log4J i innych tłumaczeniach. Naprawdę wielkie pytania dotyczą tego, jak naprawdę powinno przebiegać ogólne rejestrowanie? Jednym z podejść jest to, że wszystkie lokalne logowanie wykonuje `fprintf` do `stderr`. Stderr jest przekierowywany do jakiegoś pliku. Takie podejście jest bardzo złe, gdy dzienniki stają się zbyt duże. Jeśli wszystkie obiekty utworzą swoje indywidualne rejestratory - (około 30-40 z nich) będzie zbyt wiele plików. I w przeciwieństwie do powyższego, nikt nie będzie miał pojęcia o prawdziwym porządku wydarzeń. Jedną z możliwości jest znacznik czasu, ale nadal jest to bałagan do zestawienia. Jeśli istnieje jeden globalny wzorzec loggera (singleton) - pośrednio blokuje tak wiele wątków, podczas gdy jeden jest zajęty tworzeniem logów. Jest to niedopuszczalne, gdy przetwarzanie wątków jest ciężkie. Jaki zatem powinien być idealny sposób na uporządkowanie obiektów rejestrujących? Jakie są najlepsze praktyki w rzeczywistych aplikacjach na dużą skalę? Chciałbym również uczyć się na prawdziwych projektach aplikacji na dużą skalę, aby czerpać z nich inspiracje! ====== **EDYTUJ:** W oparciu o obie odpowiedzi tutaj jest pytanie, które mi teraz pozostało: Jaka jest najlepsza praktyka dotycząca przypisywania rejestratorów (kolejek rejestrowania) do obiektu: czy mają wywołać jakąś funkcję global_api() czy też rejestrator powinien być do nich przypisany w konstruktorze. Kiedy obiekty znajdują się w jakiejś głębokiej hierarchii, to późniejsze podejście staje się nużące. Jeśli wywołują jakąś global_api(), jest to rodzaj sprzężenia z aplikacją, więc próba użycia tego obiektu w innej aplikacji powoduje wyrzucenie tej zależności. Czy jest na to czystszy sposób?


title: Czy powinniśmy wykluczyć kod z analizy pokrycia kodu?

text: Pracuję nad kilkoma aplikacjami, głównie starszymi. Obecnie ich pokrycie kodu jest dość niskie: generalnie od 10 do 50%. Od kilku tygodni prowadzimy powtarzające się dyskusje z zespołami z Bangalore (główna część rozwoju jest wykonywana offshore w Indiach) dotyczące wykluczeń pakietów lub klas dla Cobertura (nasze narzędzie do pokrywania kodu, nawet jeśli obecnie migrujemy do JaCoCo). Ich punkt widzenia jest następujący: ponieważ nie będą pisać testów jednostkowych na niektórych warstwach aplikacji _(1)_ , warstwy te powinny być po prostu wyłączone z pomiaru pokrycia kodu. Innymi słowy, chcą ograniczyć miarę pokrycia kodu do kodu, który _jest testowany_ lub _powinien być testowany_. Ponadto, gdy pracują nad testami jednostkowymi dla złożonej klasy, korzyści - czysto w zakresie pokrycia kodu - będą niezauważone w przypadku dużej aplikacji. Zmniejszenie zakresu pokrycia kodu sprawi, że tego rodzaju wysiłek będzie bardziej widoczny... Interesem tego podejścia jest to, że będziemy mieli miarę pokrycia kodu, która wskazuje aktualny stan części aplikacji, którą uważamy za _testowalną_. Moim zdaniem jednak w jakiś sposób fałszujemy liczby. To rozwiązanie jest łatwym sposobem na osiągnięcie wyższego poziomu pokrycia kodu bez żadnego wysiłku. Inną kwestią, która mnie niepokoi, jest następująca: jeśli pokazujemy wzrost zasięgu z tygodnia na tydzień, jak możemy stwierdzić, czy ta dobra wiadomość wynika z dobrej pracy programistów, czy po prostu z nowych wykluczeń? Ponadto nie będziemy mogli dokładnie wiedzieć, co jest brane pod uwagę w mierze pokrycia kodu. Na przykład, jeśli mam 10 000 linii kodu z 40% pokryciem kodu, mogę wywnioskować, że 40% mojego kodu jest testowane _(2)_. Ale co się stanie, jeśli ustawimy wykluczenia? Jeśli pokrycie kodu wynosi teraz 60%, co dokładnie mogę odliczyć? Czy testowane jest 60% mojej „ważnej” bazy kodu? Jak mogę? Jeśli o mnie chodzi, wolę zachować „prawdziwą” wartość pokrycia kodu, nawet jeśli nie możemy się z tego radować. Dodatkowo dzięki Sonarowi możemy łatwo poruszać się po naszej bazie kodu i znać, dla dowolnego modułu/pakietu/klasy, jego własny zasięg kodu. Ale oczywiście globalny zasięg kodu nadal będzie niski. Jaka jest twoja opinia na ten temat? Jak sobie radzisz ze swoimi projektami? Dziękuję. _(1)_ Warstwy te są ogólnie związane z interfejsem użytkownika / ziarnami Java itp. _(2)_ Wiem, że to nieprawda. W rzeczywistości oznacza to tylko, że 40% mojej bazy kodu


title: Jak wybrać między użyciem zdarzenia domeny lub pozwolić warstwie aplikacji zaaranżować wszystko?

text: Stawiam pierwsze kroki w projektowaniu opartym na domenach, kupiłem niebieską księgę i wszystko, i widzę trzy sposoby na zaimplementowanie określonego rozwiązania. Dla przypomnienia: nie używam CQRS ani Event Sourcing. Załóżmy, że żądanie użytkownika wchodzi do warstwy usług aplikacji. Logika biznesowa tego żądania jest (z dowolnego powodu) podzielona na metodę w jednostce i metodę w usłudze domeny. Jak mam wywoływać te metody? Opcje, które zebrałem do tej pory to: * Pozwól usłudze aplikacji wywołać obie metody * Użyj metody injection/podwójnej wysyłki, aby wstrzyknąć usługę domeny do encji, pozwalając encji zrobić to, a następnie pozwól jej wywołać metodę usługi domeny (lub odwrotnie, pozwalając usłudze domeny wywołać metodę na jednostce) * Wywołaj zdarzenie domeny w metodzie jednostki, której funkcja obsługi wywołuje usługę domeny. (Rodzaje wydarzeń związanych z domenami, o których mówię to: http://www.udidahan.com/2009/06/14/domain-events-salvation/) Myślę, że wszystkie są opłacalne, ale nie jestem w stanie wybrać między nimi. Myślałem o tym od dawna i doszedłem do momentu, w którym nie widzę już różnic semantycznych między tymi trzema. Czy znasz jakieś wskazówki, kiedy używać czego?


title: Zasoby dla początkujących w programowaniu funkcjonalnym

text: > **Możliwe duplikowanie:** > Jak uchwycić koncepcje programowania funkcjonalnego? Poszukuję materiałów na temat programowania funkcjonalnego. Wydaje się, że jest to paradygmat, który zyskuje na widoczności i chcę wiedzieć o nim trochę więcej. Jakie książki/ebooki/artykuły polecacie? **Uwaga:** niekoniecznie szukam konkretnego języka, ale samego paradygmatu.


title: W czasach, gdy istnieje wiele hostingów opartych na chmurze, co nadal skłoniłoby Cię do hostingu dedykowanego lub hostingu vps?

text: Czy hosting dedykowany jest jeszcze tańszy i tak pozostanie? Czy naprawdę przetrwają, ponieważ oferty oparte na chmurze również stają się coraz tańsze z dnia na dzień? Proszę o uzyskanie perspektywy długoterminowego scenariusza w hostingu, a także o poznanie aktualnej sytuacji. Wszędzie, gdzie pójdę, jest to modne słowo „chmura”, a publiczność nawet nie zadaje sobie trudu, aby porównać go z dedykowanymi opcjami hostingu. Czy chmura jest naprawdę dobrym rozwiązaniem? jakie to są minusy?


title: Próbuję zrozumieć tablice mieszające - czy ktoś może mi to wyjaśnić - jasno?

text: Chcę zrozumieć prawidłowe użycie i implementację tablic mieszających w php (przepraszam). Czytałem gdzieś, że niedoświadczony programista utworzył tablicę mieszającą, a następnie ją iterował. Teraz rozumiem, dlaczego to jest złe, ale nie mam pełnej wiedzy, aby wiedzieć, czy moje rozumienie jest poprawne (jeśli wiesz, co mam na myśli). Czy ktoś mógłby mi wyjaśnić, jak zaimplementować tablicę skrótów w php (przypuszczalnie tablicę asocjacyjną) i być może, co ważniejsze, jak uzyskać dostęp do wartości „za pomocą skrótu” i co to właściwie oznacza?


title: Czy powinienem preferować nieruchomości z polami prywatnymi czy bez?

text: Baza kodu, w której pracuję, ma teraz konwencję używania pól prywatnych i właściwości publicznych. Na przykład większość klas ma swoje składowe zdefiniowane w następujący sposób: // Pola private double _foo; prywatny podwójny _bar; prywatny podwójny _baz; // Właściwości public double Foo { get{ return _foo; } ustaw{ _foo = wartość; } } public double Bar { get{ return _bar; } ustaw{ _bar = wartość; } } public double Baz { get{ return _baz; } } Wiem, że można je przepisać **bez** ich wewnętrznych własności prywatnych: public double Foo{ get; ustawić; } publiczny podwójny pasek{ get; ustawić; } publiczny podwójny Baz{ get; zestaw prywatny; } Potrzebuję informacji na ten temat: * Czy jest dobry powód, aby preferować starszy, bardziej wyraźny styl nad nowszy, bardziej zwięzły? * Czy powinienem napisać nowe klasy używając zwięzłego stylu, czy też powinienem spróbować dopasować starszy kod dla spójności? Czy spójność w tym przypadku jest na tyle warta, aby uzasadnić starszy format?


title: Dlaczego Zend zniechęca do „funkcji pływających”?

text: Konwencja Nazewnictwa Standardowego Kodowania Zend mówi > Funkcje w zasięgu globalnym (znane również jako "funkcje pływające") są dozwolone, ale > w większości przypadków odradzane. Rozważ zawinięcie tych funkcji w statyczną > klasę. Powszechna mądrość Pythona mówi praktycznie odwrotnie: > Wreszcie, używaj metody statycznej oszczędnie! Jest bardzo niewiele sytuacji, w których > metody statyczne są niezbędne w Pythonie i widziałem je wielokrotnie > gdzie oddzielna funkcja „najwyższego poziomu” byłaby bardziej przejrzysta. (Powyższa odpowiedź StackOverflow nie tylko ostrzega przed nadużywaniem metod statycznych, ale więcej niż jeden linter Pythona ostrzega to samo.) Czy jest to coś, co można uogólnić w różnych językach programowania, a jeśli tak, dlaczego Python różni się tak od PHP? Jeśli nie jest to coś, co można uogólnić, jaka jest podstawa jednego lub drugiego podejścia i czy istnieje sposób na natychmiastowe rozpoznanie w języku, czy należy preferować same funkcje, czy metody statyczne?


title: Czy powinienem używać JSON tylko do używania JSON?

text: Buduję witrynę blogów do nauki, z zapleczem PHP/MySQl. Wszystkie dane wejściowe użytkownika są obsługiwane za pomocą formularzy wysyłanych w żądaniach POST. Czy użycie JSON sprawi, że będzie on czystszy, łatwiejszy w utrzymaniu lub dodawaniu funkcji? A może po prostu dodaję format wymiany bez powodu? Tak więc zasadniczo, jaka funkcjonalność byłaby najlepiej zaimplementowana przy użyciu JSON?


title: Wiadomości Flash w ASP.NET MVC bez sesji

text: Tworzę aplikację webową dla Windows Azure przy użyciu ASP.NET MVC 4. Chciałbym wymusić jedno ograniczenie w architekturze: **nie używaj Session**. Aby osiągnąć dostępność na Azure, a ponieważ nie ma sesji lepkich, musiałbym przechowywać dane sesji w jakiejś centralnej usłudze, prawdopodobnie SQL Azure lub usłudze buforowania. Wolałbym unikać sesji na bazie danych SQL, aby uniknąć zwiększonych opóźnień, a usługa buforowania na Azure jest bardzo droga jak na oferowaną ilość pamięci. Z drugiej strony chciałbym mieć możliwość łatwego przekazywania wiadomości w stylu Flash pomiędzy przekierowaniami. Zalecanym sposobem wykonania tego jest TempData, ale domyślnie używa obiektu sesji. Więc chciałbym wiedzieć: 1. Czy istnieje alternatywny sposób korzystania z TempData, który nie wymaga sesji ani współdzielenia danych między serwerami? Może ciasteczka? 2. Czy istnieje lepsza alternatywa, której pomijam?


title: Jaki jest powód dla sekcji 1 LGPL i jakie są konsekwencje dla sekcji 9.

text: Dlaczego sekcja 1 została dodana do LGPLv3? Moje rozumienie sekcji 3 i 4 jest takie, że można przekazać połączoną pracę na dowolnej licencji i bez wymagań z GPLv3 (oprócz tych wyraźnie określonych jako wymagania w LGPLv3 3 i 4). Biorąc to pod uwagę, dlaczego sekcja 1 jest konieczna. Czyż to samo w sobie sekcje 3 i 4 nie sugerowałyby tego, co wyraźnie stwierdza sekcja 1? Zakładam, że czegoś mi brakuje, a sekcja 1 nie jest zbędna. Zakładając to, czy ma to wpływ na inne sekcje GPLv3? Np. czy przekazanie utworu objętego postanowieniami sekcji 3 i 4 podlega klauzuli patentowej w sekcji 10 GPLv3? Dlaczego sekcja 1 nie zawiera również wyjątku od sekcji 10? Innymi słowy. Czy Eigen FAQ jest poprawny, stwierdzając: > LGPL wymaga [tylko dla bibliotek nagłówkowych] prawie tak samo jak dwuklauzulowa licencja BSD. Czy to prawda, że do przekazywania plików obiektowych zawierających materiał z nagłówków LGPLv3 nie mają zastosowania żadne klauzule patentowe GPLv3?


title: Struktura katalogów aplikacji internetowej napisanej w PHP

text: Chciałbym wiedzieć, jakiej konwencji (jeśli w ogóle) używasz do swoich projektów aplikacji internetowych PHP.


title: W którym momencie logika dostępu do danych/manipulacji staje się logiką biznesową?

text: Rozważ usługę, która aktualizuje tabele PersonDetail w bazie danych. Używam EF, który mapuje tabelę do tej jednostki. Gdy rekord jest aktualizowany, nie jest w rzeczywistości aktualizowany, ale tworzony jest nowy rekord, a stary jest zapisywany w historii przez ustawienie HistoryCode na 0 Class PersonDetail { int age; Data urodzenia Data; DataCzas Data wejścia w życie; int sekwencjaNumer; //Liczba przyrostowa. intHistoriaKod; //0 reprezentuje rekord historii i 1 rekord bieżący } Teraz mamy usługę, która aktualizuje dane osoby if(newPersonDetail. EffectiveDate < currentPersonDetails. EffectiveDate) { //zaktualizuj numer kolejny currentPersonDetails o 1 //wstaw nowy rekord danych osoby i przypisz jej numer_sekwencyjny jako numer sekwencyjny //obecnej_osobyDetails, a HistoryCode jako 0, aby przedstawić, że jest to rekord historii } else { //Ustaw historyczny kod_bieżącej_osoby na 0 z 1 //wstaw nowy_szczegół_osoby z numerem sekwencyjnym zwiększonym o 1 i ustawionym na wartość HistoryCode 0 } Logika? Próbuję przenieść logikę dostępu do danych z warstwy usług do warstwy repozytorium, ale nie jestem w stanie jasno określić, jaka część jest uważana za logikę biznesową, a co za logikę dostępu do danych.


title: Jakie jest dobre podejście projektowe w .NET do wykonywania serii kontroli w procesie w tle?

text: Mam system planowania lotu w .NET/SQL Server, który wymaga wykonania kilku kontroli walidacji. To musi działać zarówno w systemie Windows, jak i kliencie sieciowym. Obecnie kontrole przebiegają synchronicznie, ale to spowalnia system, a ponadto często powtarza te same kontrole. Na przykład „czy ten samolot jest we właściwym miejscu startowym”, „czy samolot jest dostępny” i wiele innych skomplikowanych kontroli. Jest to potrzebne, ponieważ obecny system nie wie, czy inne loty zostały zmienione, co może powodować problemy. Szukam sposobu, w jaki mógłbym stworzyć pojedynczy proces działający w tle, który będzie działał niezależnie i asynchronicznie w interwale i może być wyzwalany przez zmiany danych lub wyraźne żądania. Ten proces może następnie zaktualizować listę znalezionych problemów na lot. Inny proces może po prostu użyć tej listy do zgłaszania problemów użytkownikowi bez konieczności samodzielnego sprawdzania. Jakieś pomysły dotyczące wzorca architektury i najlepszych praktyk, aby coś takiego zaimplementować? Chciałby, aby proces instalacji był dość prosty, więc im mniej „ruchomych części”, tym lepiej.


title: Podział obowiązków między klientem a serwerem

text: Pracuję nad aplikacją sieci Web, która używa node.js na serwerze i AngularJS na kliencie. Jestem nowy w Angular, ale umożliwia pisanie aplikacji po stronie klienta, które mogą być bardziej samowystarczalne niż niektóre inne podejścia. Oto scenariusz. Na serwerze wysyłam zapytanie do bazy danych, a następnie przekształcam wyniki w listę węzłów i obiektów brzegowych. Obiekty te są wysyłane do klienta (przeglądarki), a klient wyświetla je w postaci wykresu. Kod do przeanalizowania wyników zapytania i zbudowania wykresu jest dość ogólny i spodziewam się, że użyję go ponownie w kolejnych aplikacjach. Może pozostać na serwerze. Jednak wiele kodu można przenieść do klienta, ponieważ jest to specyficzny pakiet sigma.js, który wyświetla wykres. Część mnie chce odciążyć przetwarzanie klienta. Mówi się również o porzuceniu sigma.js dla następnej aplikacji, którą zbudujemy, więc wrzucenie go do klienta brzmi całkiem atrakcyjnie. Jednak klient czuje się już wzdęty i skomplikowany. Mógłbym użyć czegoś takiego jak wzorzec dekoratora, aby zachować enkapsulację specyficznego kodu sigma.js, pozostawiając miejsce na więcej reprezentacji. W jakim kierunku mam iść? Co powinienem wziąć pod uwagę?


title: Jak mogę skonfigurować aktualizacje w CMS, takim jak WordPress?

text: Mam CMS wbudowany w rdzeń PHP. Do tej pory, jeśli zostanie wydana nowa wersja, jest ona pobierana na komputer kliencki w postaci skompresowanej. Następnie klient musi ręcznie rozpakować folder i skopiować go do wymaganej lokalizacji. Ponieważ nie ma możliwości pobrania pliku zip do wymaganej lokalizacji. Chcę, aby CMS był aktualizowany w tle, podobnie jak WordPress. Innymi słowy, chcę, aby nowa wersja mogła zastąpić starą wersję. W jaki sposób mogę to zrobić?


title: Jak przezwyciężyć „męczenie” projektu?

text: Pracuję nad tym zakontraktowanym projektem od ponad roku i jestem jedynym deweloperem (jako wykonawca dostarczający produkt) w źle zaplanowanym projekcie z nierealistycznymi terminami. Wskazałem je na samym początku, ale ponieważ potrzebuję pieniędzy, wziąłem projekt. Nie obchodzi mnie aż tak bardzo, że zarabiam mniej z powodu przekroczenia terminu... W każdym razie. Ponieważ pracowałem wiele godzin późno (a także we wczesnych godzinach), znudził mi się ten projekt i moja produktywność spadła poniżej 50% (w przybliżeniu). **Jak mam z tym walczyć, aby zwiększyć produktywność?** Nie mogę wziąć wolnego, ponieważ jestem jedynym programistą i ponieważ projekt jest już za późno. **Więcej informacji** Dostałem ten projekt przez inną firmę pośredniczącą (innymi słowy: z połączeniami). Głównie komunikuję się z klientem końcowym, który zdaje sobie sprawę, że sprawy mogą toczyć się tylko tak szybko, jak się dzieje. Mają know-how, spotykamy się co tydzień, żeby sprawdzić postępy i porozmawiać o rzeczach wybitnych, procesach itp. Wyglądają na zadowolonych i zadowolonych z mojej pracy. Ale ten pośrednik oczywiście chce swojego udziału (25%) i twierdzi, że sprawy toczą się zbyt wolno. Dlatego mówię, że nie zależy mi zbytnio na spóźnianiu się, ponieważ wiem, że dostarczam bardzo dobry i użyteczny produkt, który będzie intensywnie używany. I miejmy nadzieję, że później sprzedany również innym klientom. Mam też silne pragnienie, aby to ukończyć i samemu zdobyć nagrody. Pracowałem _nad oparami_ przez ostatni rok. Dopóki nie dostarczę pierwszego etapu (z trzech), nie widzę pieniędzy. Ostatnie dwie fazy będą krótsze. Zwłaszcza ten drugi.


title: Co uważasz za podstawowe wzorce projektowe? A czy ich używasz?

text: Wydaje mi się, że przed programistami coraz trudniej jest być na bieżąco. W moich wysiłkach na rzecz poprawy moich umiejętności programowania poszukuję podstawowych wzorców projektowych, które są powszechnie używane w informatyce (a dokładniej wokół .net). Na przykład, czy powinienem zawracać sobie głowę zapamiętywaniem: * Algorytmy wyszukiwania? * MVC? (czy źle jest używać tego tylko do inteligentnego adresu URL? lol) * MVVM? (wydaje się nie mieć sensu, ale nie zbadałem tego) itp. Jakie są twoje 5 najlepszych wzorców projektowych, z których często korzystasz na co dzień (nie tylko te, które lubisz)?


title: Czy jest jakiś system operacyjny, który jest wystarczająco prosty do nauki?

text: Naprawdę chciałbym zrozumieć, jak system operacyjny działa za kulisami. Myślę jednak, że jądro większości systemów operacyjnych typu open source jest zbyt złożone do celów uczenia się, nawet dla pełnoetatowego programisty. Czy istnieją jakieś „proste” systemy operacyjne stworzone wyłącznie do celów edukacyjnych?


title: Integracja aplikacji modelu domeny — zasoby/wskazówki

text: Walczę o znalezienie wskazówek dotyczących integracji różnych aplikacji, zwykle opartych na architekturze modelu domeny. Aplikacje często uwidaczniają i zużywają nawzajem usługi WCF, ale zwykle odbywa się to w sposób raczej niefortunny. Jestem całkiem pewien, że domena nie powinna uzyskiwać dostępu do usług innych aplikacji, ale skąd mają być pobierane? Interfejs użytkownika, warstwa aplikacji? Warstwa danych? Wszystko, co przeczytałem o SOA, wydaje się zawierać teoretyczne informacje o tym, co tworzy usługę, ale nic o tym, jak faktycznie zaimplementować ją w kodzie. A co jeśli muszę zwrócić/zapytać o złączenie dwóch encji w dwóch systemach? Wiele zasobów sugeruje denormalizację danych do systemu wywołującego i aktualizowanie przy użyciu komunikatów, ale czy komunikaty i WCF powinny być połączone w tym samym systemie? Przeczytałem Integrację aplikacji korporacyjnych, ale wciąż mam wiele pytań. Jakie są dobre zasoby/przykłady kodu do integracji systemów modelu domeny?


title: Ruby, ale nie Rails w moim CV

text: Wymieniłem Rubiego jako umiejętność w moim CV, ponieważ programowałem w Rubim od 5 lat, podczas gdy pracuję nad swoim doktoratem. Praca dyplomowa. Używałem go głównie do implementacji algorytmów przetwarzania języka naturalnego. Zaczynam szukać pracy i umieściłem swoje CV na kilku stronach (jako dodatkowy bonus przy aplikowaniu na określone oferty pracy). Teraz dzwonią do mnie rekruterzy, aby zaoferować mi pracę w Ruby on Rails. Problem w tym, że nigdy nie uczyłem się Railsów. To nigdy nie miało związku z tym, co robię dla mojego doktoratu. Jak radzisz sobie z tą sytuacją, aby uniknąć marnowania czasu mojego i ich? (A nauka Railsów prawdopodobnie nie wchodzi w grę, dopóki nie skończę pracy magisterskiej.) Czy moje CV można dostosować, aby było jaśniejsze? Czy należy to wyregulować? Czy powinienem grzecznie powiedzieć im przez telefon, że nie znam Railsów? Swoją drogą odpowiednia część mojego CV po prostu mówi: > ## Umiejętności: > > **Języki programowania:** C, C++, Java, Scala, Ruby, LaTeX > > **Bazy danych:** MySQL, XML, XPath i wymienia kilka innych obszarów umiejętności, których nie można pomylić z programistą Rails.


title: Jak nazwałbyś funkcje importu i eksportu w Javie?

text: Mam klasę Java, która obsługuje import i eksport danych. Zaczęło się od prostego private void export() { } private void import() { } Oczywiście najpierw napisałem eksport, zatwierdziłem go, a następnie zacząłem pisać import. Ale import jest słowem kluczowym w Javie — nie mogę użyć go jako nazwy funkcji. Więc wracam i zmieniam nazwy obu metod. Zwykle kończę z private void doExport() { } private void doImport() { }, które jest zarówno brzydkie, jak i wymyślone. Co myślisz o tych nazwach? Masz lepsze sugestie? Uwaga: Pytam teraz, ponieważ teraz zdarzyło się to już trzy razy i to słowo kluczowe staje się dość denerwujące.


title: Jaki jest dobry sposób na przeprowadzenie burzy mózgów na komputerze?

text: Szukam czegoś, co pozwoli mi opracować algorytm na komputerze podobnym do tego, jak zrobiłbym to na tablicy. W pracy mam ogromną tablicę, której mogę do tego użyć, ale w domu nie mam (i nie mogę). Utrudnia to projektowanie algorytmów, gdy pracuję nad projektami hobbystycznymi. Myślę, że lepiej, gdy używam rysunków, a nie tekstu, więc pseudokod nie jest dobry. Myślę, że to, czego szukam, to coś w rodzaju programu schematów blokowych, ale to pozwala na mniej sztywne podejście do projektowania algorytmów. Chciałbym, aby program był wieloplatformowy (Mac, Linux), ale będę zadowolony, nawet jeśli działa tylko na Macach. Preferowany jest bezpłatny, ale programy w rozsądnej cenie też są dobre. Wolałbym programy, z których ludzie korzystali i mieli doświadczenia, niż te, które pojawiły się w Google, ponieważ znam niektóre programy do tworzenia schematów blokowych i map myśli, ale nie jestem z nich tak naprawdę zadowolony. Zdaję sobie sprawę, że komputer nie jest najlepszą platformą do robienia tego typu rzeczy, ale zakładam na chwilę, że to jedyne medium, jakie posiadam.


title: Motywacja dla warstwy usług (zamiast tylko kopiowania bibliotek dll)?

text: Tworzę aplikację, która ma 2 różne interfejsy użytkownika, więc tworzę ją z warstwą usług, którą zrozumiałem, że jest odpowiednia dla takiego scenariusza. Jednak znalazłem się po prostu tworząc metody internetowe dla każdej metody, którą mam w warstwie BL, więc usługi zasadniczo zbudowane z metod wyglądających tak: `return customers_bl.Get_Customer_Prices(customer_id);` Zrozumiałem, że główny punkt usługi warstwa ma na celu zapobieganie duplikacji kodu, więc zadałem sobie pytanie - dlaczego po prostu nie zaimportować BL.DLL (i dal.dll) do innego interfejsu użytkownika, a za każdym razem, gdy wprowadzasz zmianę, ponownie skopiuj biblioteki dll, może nie być tak „zgrabne” ', ale nadal mniej kłopotów niż jedna warstwa więcej? {Wiem, że coś jest nie tak w moim podejściu, prawdopodobnie brakuje mi znaczenia warstwy usług, chciałbym uzyskać większą motywację do stworzenia kolejnej warstwy, zwłaszcza że okazało się, że wiele moich funkcji BL _ALREADY_ wygląda tak : `return customers_dal.Get_Customer_Prices(cust_id)` co skłoniło mnie do pytania: czy naprawdę konieczne było utworzenie BL tylko dlatego, że w kilku funkcjach faktycznie mam LOGIKĘ w BL?}, więc szukam większej motywacji do tworzenia _JEDEN WIĘCEJ_ warstwa, jestem pewien, że nie chodzi tylko o to, aby było wygodniej, że nie będę musiał ponownie kopiować bibliotek dll przy zmianach? Czy źle to rozumiem? Jakieś proste wskazówki, jak zaprojektować warstwę usług (odpowiadającą wszystkim funkcjom warstwy BL, czy nie? jakiś prosty przykład?) jakieś oświecenie na ten temat?


title: Problemy licencyjne z używaniem kodu z próbek pochodzących z SDK

text: Próbki dostarczane z pakietem SDK mają na celu przedstawienie najlepszych praktyk. Więc logicznie wygląda na to, że pobranie od nich kodu jest całkowicie poprawne. Ale zazwyczaj próbki są objęte licencjami, na przykład wiele próbek firmy Microsoft jest wydawanych na licencji Microsoft Public License (MS-PL). Próbki są zwykle publikowane w celu zapewnienia najlepszych praktyk i wspólnego kodu wielokrotnego użytku. Ale jak mogę użyć kodu z próbek, jeśli są one objęte dość ścisłymi licencjami?


title: Jakieś języki programowania, które obsługują wyłącznie Generics i nie obsługują OOP?

text: Piszę artykuł na temat napięcia między programowaniem OOP a programowaniem generycznym stworzonym przez Stiepanowa. Szeroko krytykuje OOP i mówi, że jest „technicznie wadliwy” w porównaniu z programowaniem generycznym. Teraz wiem, że mamy wiele języków programowania, które wspierają OOP exclusivley i nie mają wsparcia Generic, w tym na przykład Google GO, który jest nowoczesnym językiem, którego nie zdecydowali się implementować Generics ze względu na ich złożoność. Wiem, że mamy wiele języków, które obsługują zarówno Generics, jak i OOP, na przykład C++ i słynną bibliotekę Stiepanowa STL. _Moje pytanie brzmi:_ **Czy mamy jakieś nowoczesne języki programowania lub w ogóle, które obsługują wyłącznie Generics bez OOP?** _EDIT: Chciałbym dodać, że próbowałem się rozejrzeć i wydaje się, że nie mogę znaleźć zbyt wiele, więc pomyślałem, że zapytam tutaj._ Wystarczy dodać, że kiedy odnoszę się do programowania generycznego vs programowania obiektowego, odnoszę się do: Generic vs Object Oriented Programming na napięciach między programowaniem zorientowanym obiektowo i generycznym w C ++


title: Wzorzec/metodologia reprezentowania dużych rekordów bazy danych jako obiektów

text: Trochę podstawowych informacji: mamy starą aplikację bazy danych napisaną w programie Access, która umożliwia użytkownikom monitorowanie ich obciążenia, a kod jest… „proceduralny” może być zbyt uprzejmy. Ogromna większość kodu jest zaprogramowana na tworzenie zdarzeń, jest _dużo_ duplikacji i mało abstrakcji lub wcale. Jeśli musi pobrać dane z bazy danych, zrobi to od razu, nawet jeśli oznacza to mniej więcej ten sam fragment kodu powtórzony 6 razy dla 6 podobnych przycisków (i 6 praktycznie identycznych żądań bazy danych). To nie jest ładne. Chcę przebudować aplikację w VB.NET, ale natrafiam na trochę wpadki projektowej, jeśli chodzi o pisanie klas do reprezentowania rekordów bazy danych jako obiektów - nie mam dużego doświadczenia w programowaniu OO (napisane kilka małych aplikacji, czytanie wielu książek i materiałów, zwykły lurker SE), więc jest to moja pierwsza aplikacja bazodanowa OO. Problem polega na tym, że dane 'zadanie' dla użytkownika ma _dużo_ pól w bazie danych. Około 30 - ID, tytuł, wnioskodawca, data wniosku, data docelowa, priorytet, typ, zatwierdzenie ... i tak dalej. Pierwsze przejście: Uderz wszystko w brudną, świetną klasę `Job`: Public Class Job Private mID As String Private mTitle As String Private mRequestorName As String Private mRequestorEmail As String ... Public Property ID() As String Get Return mID End Get Set( wartość As String) Me.mID = wartość End Set End Property ... End Class Yikes. Jestem pewien, że widać moje wahanie, czy tak ogromna klasa siedzi w centrum aplikacji. Wszystkie te właściwości wydają się również naruszać zasady enkapsulacji — członkowie Private mogą równie dobrze być Publiczni, ale na odwrót muszę mieć możliwość zmiany pól i późniejszego zapisania z powrotem do bazy danych. Drugie przejście: Jest tu kilka rzeczy, które można wyodrębnić i umieścić gdzie indziej: na przykład, wszyscy członkowie `Requestor___` mogą siedzieć w klasie `Requestor` Public Class Job Private mID As String Private mTitle As String Private mRequestor As Requestor . .. End Class Public Class Requester Private mName As String Private mEmail As String ... End Class Więc teraz mam ich pół tuzina. Mniejsze klasy? Czuje się miło. Ale wydaje mi się, że wszystko, co naprawdę osiągnąłem, to w zasadzie normalizacja bazy danych, która nie powinna istnieć w aplikacji. Jedyną prawdziwą zmianą w strukturze jest to, że dotarcie do elementów danych wymaga większej liczby kroków. I nadal mam wszystkie te właściwości (które zmuszają mnie do używania notacji węgierskiej na moich prywatnych członkach, których nie jestem fanem, ale VB.NET nie rozróżnia wielkości liter, więc nie mogę używać tych samych nazw) , które wciąż nie pasują do mnie. **Czy istnieje standardowy wzorzec lub metodologia przenoszenia dużych elementów danych do iz bazy danych?** Mój obecny najlepszy pomysł to powyższe z metodami `commit()` i `read()` w klasie `Job` - zmiany są dokonywane na obiektach, a następnie wprowadzane do bazy danych.


title: Techniki parsowania XML

text: Zawsze uważałem, że XML jest nieco niewygodny w przetwarzaniu. Nie mówię o implementacji parsera XML: mówię o _używaniu_ istniejącego parsera opartego na strumieniu, takiego jak parser SAX, który przetwarza węzeł XML przez węzeł. Tak, naprawdę łatwo jest nauczyć się różnych interfejsów API dla tych parserów, ale za każdym razem, gdy patrzę na kod przetwarzający XML, zawsze uważam, że jest on nieco zawiły. Wydaje się, że zasadniczym problemem jest to, że dokument XML jest logicznie podzielony na poszczególne węzły, a mimo to _typy_ danych i atrybuty są często oddzielone od rzeczywistych danych, czasami przez wiele poziomów zagnieżdżenia. Dlatego podczas przetwarzania każdego konkretnego węzła indywidualnie, należy zachować wiele dodatkowych stanów, aby określić _gdzie jesteśmy_ i _co musimy zrobić dalej._ Na przykład, biorąc pod uwagę fragment typowego dokumentu XML: <książka> <tytuł> Blah blah</title> <author>Blah blah</author> <price>15 USD</price> </book> ...Jak określić, czy napotkałem węzeł tekstowy zawierający tytuł książki? Załóżmy, że mamy prosty parser XML, który działa jak iterator, dając nam następny węzeł w dokumencie XML za każdym razem, gdy wywołamy `XMLParser.getNextNode()`. Nieuchronnie piszę następujący kod: boolean insideBookNode = false; wartość logiczna insideTitleNode = false; while (!XMLParser.finished()) { .... XMLNode n = XMLParser.getNextNode(); if (n.type() == XMLTextNode) { if (insideBookNode && insideTitleNode) { // Mamy tytuł książki, więc zrób coś z nim } } else { if (n.type() == XMLStartTag) { if ( n.name().equals("książka")) insideBookNode = true else if (n.name().equals("tytuł")) insideTitleNode = true; } else if (n.type() == XMLEndTag) { if (n.name().equals("książka")) insideBookNode = false; else if (n.name().equals("tytuł")) insideTitleNode = false; } } } Zasadniczo przetwarzanie XML szybko zamienia się w ogromną, sterowaną maszyną stanu pętlę, z wieloma zmiennymi stanu używanymi do wskazania węzłów nadrzędnych, które znaleźliśmy wcześniej. W przeciwnym razie obiekt stosu musi być utrzymany, aby śledzić wszystkie zagnieżdżone znaczniki. To szybko staje się podatne na błędy i trudne do utrzymania. Ponownie problem wydaje się polegać na tym, że dane, którymi jesteśmy zainteresowani, nie są bezpośrednio związane z pojedynczym węzłem. Jasne, mogłoby tak być, gdybyśmy napisali XML w następujący sposób: <book title="Blah blah" author="blah blah" price="15 USD" /> ...ale tak rzadko używa się XML w rzeczywistości. Przeważnie mamy węzły tekstowe jako dzieci węzłów nadrzędnych i musimy śledzić węzły nadrzędne, aby określić, do czego odnosi się węzeł tekstowy. Więc... czy robię coś złego? Czy jest lepszy sposób? W którym momencie używanie parsera opartego na strumieniu XML staje się zbyt kłopotliwe, tak że niezbędny staje się pełnoprawny parser DOM? Chciałbym usłyszeć od innych programistów, jakiego rodzaju idiomów używają podczas przetwarzania XML za pomocą parserów opartych na strumieniu. Czy parsowanie XML oparte na strumieniu musi zawsze zamieniać się w ogromną maszynę stanową?


title: Czy istnieje kanoniczny zasób dotyczący programowania w języku R?

text: Biorąc pod uwagę, że nie mam doświadczenia w programowaniu, czy istnieje zasób, który jest de facto standardem opisującym najlepsze praktyki, metodologie projektowania i inne przydatne informacje dotyczące programowania w języku R? Co z tym zasobem czyni go wyjątkowym?


title: Czy plik binarny będzie zawierał metody, które nie są wywoływane w kodzie źródłowym?

text: [Potencjalnie mylący tytuł, ale nie jestem pewien, jak najlepiej go sformułować.] Pytanie teoretyczne dotyczące kompilatorów i projektowania języka. Powiedzmy, że ponownie wdrażam metodę w bazie kodu. Zamiast usuwać lub komentować metodę, którą ponownie wdrażam, zostawiam ją tam, gdzie jest, w celach referencyjnych i testowych, i po prostu usuwam wszystkie wywołania do niej. Coś takiego (w pseudokodzie w stylu C): public void aMethodToCallFooVariants() { // oldFoo(); newFoo(); } private void oldFoo () { // Trochę kodu tutaj, który nie jest zbyt dobry } private void newFoo () { // Trochę lepszego kodu tutaj } newFoo jest wywoływane przez metodę, która pierwotnie nazywała się oldFoo, co oznacza, że oldFoo nie jest już wywoływane nigdzie w kod źródłowy, ale nadal znajduje się na liście. Czy kompilatory są na tyle inteligentne, że kiedy uruchamiam mój skrypt kompilacji, kod oldFoo nie jest zawarty w skompilowanym pliku binarnym, czy też oldFoo nadal będzie dołączany, ale nigdzie nie będzie wywoływany? Rozumiem, że jeśli metoda publiczna nadal będzie dołączona, mogą być wywoływane przez kod, który jest zewnętrzny w stosunku do skompilowanego pliku binarnego (zwłaszcza jeśli jest skompilowany jako biblioteka). Ale czy metoda prywatna nadal byłaby kompilowana do pliku binarnego?


title: Architektura napędzana przez użytkowników czy przez działania/treści?

text: Mam pytanie dotyczące projektowania architektury aplikacji MVC. Załóżmy, że nasza aplikacja ma trzy główne kategorie widoków (elementy typu 1, elementy typu 2...). I mamy trzy (lub więcej w przyszłości) typy użytkowników - Administratorzy, powiedzmy Moderatorzy i typowi Użytkownicy. A w przyszłości może być ich więcej. Administratorzy mają pełny dostęp do aplikacji, moderatorzy mogą odwiedzać tylko 2/3 rodzajów elementów, a użytkownicy mogą odwiedzać tylko podstawowe rodzaje elementów. Czy powinienem podzielić moje kontrolery/widoki/cokolwiek w ten sposób: Pozycje „A”, Pozycje „B”, Pozycje „C”, a następnie ukończyć je w 100% i na koniec dodać uprawnienia dostępu? **Zalety:** * Opcja DRY **Wady** * Wyrażenia warunkowe w widokach Lub inne opcje: Pozycje "A" / Admin, Pozycje "A" / Moderator / Pozycje "B" Admin...? **Zalety:** * Podzielone części aplikacji dla konkretnego użytkownika (czy to są plusy?) **Wady:** * Dużo powtarzanego kodu Nie mam dużego doświadczenia w planowaniu takich rzeczy więc fajnie by było, gdybyś mógł daj mi kilka wskazówek lub linków, aby dowiedzieć się czegoś na ten temat.


title: Zainicjowane zmienne a nazwane stałe

text: Pracuję nad podstawowymi zajęciami z programowania na studiach, a nasz podręcznik to „logika programowania i projektowanie” autorstwa joyce farrell(pisownia?). Nasza klasa skupia się na razie na pseudokodzie, a nie na jednym konkretnym języku, więc pozwólcie, że zilustruję to, o czym mówię. Załóżmy, że deklaruję zmienną o nazwie „myVar”, a typ danych jest liczbowy: num myVar teraz chcę ją zainicjować (nie rozumiem tego pojęcia) zaczynając od liczby 5 num myVar = 5 jak to jest inne niż tworzenie nazwanej stałej?


title: Datetime vs Timestamp w MySQL i PHP w praktyce?

text: Nie jestem pewien, jak określić mój typ danych jako datetime lub timestamp, myślę, że będę potrzebować ich obu, ale na różnych wydarzeniach. Moja witryna sprzedaje produkty i usługi na całym świecie, a także posiada system kont do logowania użytkownika. Proszę o wyjaśnienie: * Aktualna data i godzina zakupu produktów przez klienta na mojej stronie: Data i godzina? * Data i godzina dostawy na podstawie ich lokalizacji i daty/czasu zakupu, obliczona z naszego systemu: Datetime? * Kiedy ostatnio logowali się na swoje konto: Znacznik czasu? 1. Jaki jest kod w php do przechowywania daty zakupu (aktualna data) a następnie przechowywania w bazie danych? 2. Proszę wyjaśnić, jak używać każdego z nich, ponieważ po przeczytaniu wielu wyjaśnień w Internecie nadal nie do końca rozumiem.


title: Co dodałbyś do tej listy kontrolnej projektu rozwoju oprogramowania?

text: Jestem wielkim fanem list kontrolnych. Istnieje Travel Checklist, Moving Checklist, a nawet Scrum Checklist. **Kontekst** : zostałeś zatrudniony przez dużą korporację i powierzono Ci misję skonfigurowania całego środowiska programistycznego, procesów, zespołu itp. Masz „carte blanche”. Będziesz odpowiedzialny za tworzenie działających przyrostów oprogramowania. Wielkość projektu: 2000 osob/dni. Jakie elementy dodałbyś do następującej (celowo małej i niepełnej) listy kontrolnej: * Zainstaluj ciągły serwer integracji * Napisz DoD * Napisz wytyczne dotyczące kodowania na jednej stronie * Utwórz backlog produktu * Zainstaluj system śledzenia błędów * Zaplanuj regularne spotkania


title: Spacja między znakiem ujemnym a nazwą zmiennej

text: Próbowałem przeprowadzić wyszukiwanie w Google, a także przeszukać tę witrynę Stack Exchange, ale nie mogłem znaleźć pytania odnoszącego się bezpośrednio do tego. PEP 8 -- Przewodnik po stylach dla kodu Pythona zawiera wiele dobrych zaleceń dotyczących stylu, jednak nie wydaje mi się, aby zawierały one cokolwiek na temat tego, czy spacja między znakiem minus lub minus (`-`) a nazwą zmiennej byłaby mniej więcej czytelny. ### Pytanie To (bardzo) drobny problem, ale który jest uważany za bardziej czytelny? * `false_positive = -true_positive` * `false_positive = - true_positive` ### Motywacja Proszę nie być trywialnym, ale ponieważ na moich poprzednich kursach matematycznych często nie zauważam znaku ujemnego w ważnych równaniach, takich jak równanie entropia obliczeniowa: ![wzór entropii](https://chart.googleapis.com/chart?cht=tx&chl=H%28X%29%20%3D%20-%20%5Cdisplaystyle%20%5Csum_%7Bi%3D1% 7D%5En%20%7BP%28x_i%29%20%5Clog_b%20P%28x_i%29%7D) Często nie zauważam znaku `-` przed sumowaniem, więc byłoby pożądane wyróżnienie go.