title: Sortowanie scalające a wydajność szybkiego sortowania

text: Zaimplementowałem sortowanie przez scalanie i szybkie sortowanie za pomocą C (GCC 4.4.3 na Ubuntu 10.04 na laptopie 4 GB RAM z procesorem Intel DUO 2GHz) i chciałem porównać wydajność obu algorytmów. Prototypy funkcji sortujących to: void merge_sort(const char **lines, int start, int end); void quick_sort(const char **lines, int start, int end); tzn. obaj biorą tablicę wskaźników do łańcuchów i sortują elementy z indeksem i : start <= i <= end. Wyprodukowałem kilka plików zawierających losowe ciągi znaków o długości średnio 4,5 znaku. Pliki testowe mieszczą się w zakresie od 100 linii do 10000000 linii. Byłem trochę zaskoczony wynikami, ponieważ chociaż wiem, że sortowanie przez scalanie ma złożoność O(n log(n)) podczas gdy szybkie sortowanie to O(n^2), często czytałem, że średnio szybkie sortowanie powinno być tak szybko jak sortowanie przez scalanie. Jednak moje wyniki są następujące. * Do 10000 ciągów, oba algorytmy działają równie dobrze. W przypadku 10000 strun oba wymagają około 0,007 sekundy. * W przypadku 100000 ciągów sortowanie przez scalanie jest nieco szybsze z 0,095 s w porównaniu z 0,121 s. * Dla 1000000 ciągów sortowanie przez scalanie zajmuje 1,287 s wobec 5,233 s sortowania szybkiego. * Dla 5000000 ciągów sortowanie przez scalanie zajmuje 7,582 s w porównaniu do 118,240 s sortowania szybkiego. * Dla 10000000 ciągów sortowanie przez scalanie zajmuje 16.305 s w porównaniu do 1202.918 s szybkiego sortowania. Więc moje pytanie brzmi: czy moje wyniki **zgodne z oczekiwaniami** , co oznacza, że szybkie sortowanie jest porównywalne z szybkością sortowania przez scalanie dla małych danych wejściowych, ale wraz ze wzrostem rozmiaru danych wejściowych fakt, że ich złożoność jest kwadratowa, stanie się oczywisty ? Oto szkic tego, co zrobiłem. W implementacji merge sort partycjonowanie polega na rekurencyjnym wywołaniu merge sort, tj. merge_sort(linie, start, (start + end) / 2); merge_sort(linie, 1 + (początek + koniec) / 2, koniec); Scalanie dwóch posortowanych podtablic odbywa się poprzez odczytanie danych z tablicy `lines` i zapisanie ich do globalnej tymczasowej tablicy wskaźników (ta globalna tablica jest przydzielana tylko raz). Po każdym scaleniu wskaźniki są kopiowane z powrotem do oryginalnej tablicy. Tak więc ciągi są przechowywane raz, ale potrzebuję dwa razy więcej pamięci na wskaźniki. W celu szybkiego sortowania funkcja partycji wybiera ostatni element tablicy do sortowania jako element przestawny i skanuje poprzednie elementy w jednej pętli. Po utworzeniu partycji typu start ... {elementy <= pivot} ... pivotIndex ... {elementy > pivot} ... end wywołuje się rekurencyjnie: quick_sort(lines, start, pivotIndex - 1) ; quick_sort(linie, pivotIndex + 1, koniec); Zauważ, że ta implementacja szybkiego sortowania sortuje tablicę w miejscu i nie wymaga dodatkowej pamięci, dlatego jest bardziej wydajna pod względem pamięci niż implementacja sortowania przez scalanie. Więc moje pytanie brzmi: czy istnieje lepszy sposób na zaimplementowanie szybkiego sortowania, które warto wypróbować? Jeśli poprawię implementację szybkiego sortowania i wykonam więcej testów na różnych zestawach danych (obliczając średnią czasów działania na różnych zestawach danych), czy mogę oczekiwać lepszej wydajności szybkiego sortowania wrt sortowania przez scalanie? **EDYTUJ** Dziękuję za odpowiedzi. Moja implementacja jest na miejscu i opiera się na pseudokodzie, który znalazłem na wikipedii w sekcji **Wersja na miejscu** : function partition(array, 'left', 'right', 'pivotIndex') gdzie wybieram ostatni element w zakresie, który ma zostać posortowany jako piwot, tj. pivotIndex := prawo. Sprawdziłem kod w kółko i wydaje mi się, że jest poprawny. Aby wykluczyć przypadek, że używam złej implementacji, przesłałem kod źródłowy na github (na wypadek, gdybyś chciał się temu przyjrzeć). Twoje odpowiedzi wydają się sugerować, że używam niewłaściwych danych testowych. Przyjrzę się temu i wypróbuję różne zestawy danych testowych. Zgłoszę się, jak tylko będę miał jakieś wyniki.


title: Programowanie silnika promocji

text: Próbuję zaimplementować silnik promocji dla aplikacji e-commerce i chcę dowiedzieć się, jak działają takie silniki, szczególnie w sytuacjach takich jak poniżej. > Kup X przedmiotów z kategorii A Zdobądź Y przedmiotów z kategorii B ze zniżką Z% Jeśli zamówienie zawiera wiele różnych przedmiotów z kategorii A, w jaki sposób wyszukiwarka wybiera przedmioty, które uruchamiają promocję, ponieważ może istnieć wiele kombinacji przedmiotów, które się kwalifikują i niektóre kombinacje spraw, aby zasada nie miała zastosowania. Podejście brutalnej siły polegałoby na znalezieniu wszystkich możliwych kombinacji elementów, które kwalifikują się i zatrzymują, gdy reguła zostanie pomyślnie zastosowana. Czy są jakieś algorytmy dla tego lub innych wzorców promocji, których mogę użyć?


title: Robisz „więcej” z C w systemie Windows niż bardzo proste programy?

text: Obecnie uczę się C poprzez „C Primer Plus”, zgodnie z zaleceniami wielu osób tutaj i uważam to za bardzo interesujące – dogłębne wyjaśnienia, jak i dlaczego robimy pewne rzeczy w C są świetne, a nie tylko bycie powiedziałem, co się dzieje i nie idę dalej... Czuję, że wszystko, co mogę teraz zrobić z C, to matematyka, która nie jest strasznie inspirująca, gdy próbuję wyobrazić sobie składanie różnych aplikacji w mojej głowie (poza kalkulatorami (-_ -)). Jestem dopiero w połowie książki, więc nie omówiłem jeszcze takich rzeczy jak instrukcja if, ale po prostu nie przejmuję się - znam już sporo koncepcji programowania, ponieważ jestem dość sprawny w PHP. Moje pytanie brzmi - czy są jakieś samouczki, które są interesującymi fragmentami kodu źródłowego, do których ludzie mogą mnie powiązać, które zainspirują i wyedukują mnie poza pętlami/zmiennymi/operatorami/itd. uniwersalnymi funkcjami programowania, które dadzą mi wgląd w programowanie, powiedzmy w systemie Windows API? Lub rzeczy w tym stylu? Znalazłem PHP w porządku do nauki, ponieważ znałem już html/css, które oczywiście obsługują front-end moich aplikacji internetowych, a także odwrotnie - pobieranie danych wejściowych z formularzy, interakcja z bazą danych itp., ale z C nie wiem cokolwiek innego niż "backend" i standardowe rzeczy I/O. Wielkie podziękowania dla tych, którzy mogą linkować do ciekawych zasobów - wiele stron wydaje się być dość starych, co jest w porządku (co, skoro C istnieje od 40 lat?), ale nie programuję od 40 lat stare komputery, więc...


title: Korzystając z własnego API (Dog Fooding). Jak uniknąć rozdania tajnego klucza?

text: Przeczytałem ten artykuł na temat API Soundcloud: http://backstage.soundcloud.com/2011/08/soundcloud-mobile-proxy/ Mówi o konsumowaniu własnego API. Nie rozumiem, jak unikają rozdania tajnego klucza. Jeśli zwykle przekazujesz tajny klucz programiście, który będzie go używał w swoim interfejsie API, w jaki sposób możesz przekazać tajny klucz sobie i uniknąć jego ujawnienia bez przesyłania go przez sieć? Zakładam, że dla każdego użytkownika jest nowy tajny klucz. W przeciwnym razie każdy użytkownik miałby ten sam tajny klucz i nowy klucz publiczny i nie jestem pewien, czy to zadziała. * * * Nie mówię o programistach. Mówię o użytkownikach takich jak my do Stack Exchange (faktyczni użytkownicy samej aplikacji). Moja aplikacja będzie korzystała z własnego API. Każdy użytkownik, który zarejestruje się w aplikacji (zakładam), otrzyma klucz prywatny i publiczny. Każde wywołanie interfejsu API musiałoby (potencjalnie) uwierzytelnić za pomocą klucza publicznego i prywatnego. Jeśli w tej sytuacji użytkownik jest zwykłym użytkownikiem aplikacji, w jaki sposób można uzyskać klucz prywatny dla użytkownika. A może nie jest to najlepszy sposób na zrobienie tego?


title: Badanie projektowania podpowiedzi użytkownika (dobór słownictwa, format odpowiedzi itp.)

text: Czasami istnieją różne sposoby zadania użytkownikowi tego samego pytania. Na przykład, jeśli użytkownik próbuje wyjść z programu bez zapisywania pliku, możesz zadać jedno z poniższych pytań: * Czy na pewno chcesz wyjść bez zapisywania? `[T] [N]` * Czy chcesz zapisać przed wyjściem? `[T] [N]` To zasadniczo to samo pytanie, ale ze względu na różne sformułowania mają **przeciwne** odpowiedzi. Rodzi to kilka pytań dotyczących tego, który z nich jest lepszy, np. który jest jaśniejszy? co redukuje błędy? i tak dalej. Zastanawiam się, czy są jakieś badania, statystyki lub badania eksperymentalne, badania kliniczne itp. na temat tego rodzaju rzeczy, które mogą pomóc w projektowaniu UI/UX w celu zminimalizowania frustracji i błędów użytkownika. Wiem, że istnieją artykuły i książki na temat projektowania interfejsów użytkownika, ale nie widziałem niczego konkretnie na temat konkretnych sformułowań, decydowania między pozytywną i negatywną odpowiedzią, i tak jak w powyższym przykładzie.


title: Jaki procent programistów pracuje solo?

text: Próbuję zebrać kilka pomysłów na rozmowę, a jedną z rzeczy, które przyszły mi do głowy, jest to, czy istnieje jakakolwiek dokumentacja lub badania na temat tego, ilu programistów pracuje jako samotny programista w swoim zespole. Myślę, że jest to ważne rozróżnienie, ponieważ poszczególni programiści (i być może programiści z małych zespołów) muszą nosić znacznie więcej czapek niż programiści będący częścią dużej grupy programistów. Mogłoby to również dać nam lepszy wgląd w rozwój kariery i taktyki przejścia. Próbowałem ogólnie googlować i nie byłem w stanie niczego znaleźć, więc mam nadzieję, że ktoś widział (lub studiował) coś z tym związanego. Z góry dziękuję!


title: Pokazanie struktury programu (menu) w postaci drzewa - czy ma ono nazwę?

text: W swojej pracy dyplomowej chcę pokazać strukturę programu, tak: > > > Menu --- Ustawienia ---- Dźwięk ---- ... > > ---- Wideo > > > > -- - Wykonaj ---- Kalkulacja > > ---- Wideo demo > Wiesz, jak mapę dla strony internetowej, chciałbym przedstawić drzewo do menu. Ale czy ma to wymyślną nazwę w inżynierii SW?


title: Podziel element pracy na prototyp i główny element pracy?

text: Podczas uwodzenia zwykle mamy elementy pracy, które są zatwierdzane na podstawie zrozumienia przez zespół, co należy zrobić? Właściciel produktu nie omawia szczegółów, jak to zostanie zrobione i przerywa dyskusję, jeśli zespół spróbuje. Dotyczy to wszystkich elementów pracy (nowy interfejs użytkownika, nowy interfejs API lub zmiany w istniejącym interfejsie użytkownika/API). Rozumowanie Product Ownera polega na tym, że zagłębianie się w szczegóły (zarówno techniczne, jak i funkcjonalne) tego, jak to zostanie zrobione, jest czymś, co musi się zdarzyć podczas sprintu, a omawianie tego podczas pielęgnacji nie jest prawidłowe. Szacowanie nakładu pracy również odbywa się w oparciu o tę dyskusję. Ale podczas planowania sprintu, zatwierdzone elementy są brane do sprintu i oczekuje się, że jeśli element pracy zostanie zatwierdzony, zespół powinien znać wszystkie szczegóły rozwiązania i powinien być w stanie ukończyć element w sprincie. To, co się dzieje, to to, że zespół spędza pierwsze 2-3 dni na badaniu i uzyskaniu zgody PO na rozwiązanie (projekt interfejsu użytkownika, wyjaśnienie kluczowej logiki biznesowej). O ile analiza nie spowoduje znacznej różnicy w oszacowaniu nakładu pracy, zespół jest proszony o uzupełnienie funkcji. Dzieje się tak w każdym sprincie. Nie mam problemu z włożeniem dodatkowego wysiłku w ukończenie przedmiotu pracy. Moje pytanie dotyczy procesu. 1. Czy zespół powinien odmówić zatwierdzenia elementu, chyba że zespół zrozumie, jak będzie wyglądać rozwiązanie? 2. Czy temat pracy powinien zostać podzielony na badania/analizy, w którym prototyp rozwiązania zostanie zaproponowany OP? Gdy PO zatwierdzi prototyp, główny element pracy zostanie oznaczony jako zatwierdzony. 3. Jakieś inne sugestie, jak lepiej sobie z tym poradzić?


title: Czy przechowywanie dużych plików (10 MB) w bazie danych jest złą praktyką?

text: Obecnie tworzę aplikację internetową, która umożliwia użytkownikom przechowywanie i udostępnianie plików o rozmiarze 1 MB - 10 MB. Wydaje mi się, że przechowywanie plików w bazie danych znacznie spowolni dostęp do bazy danych. Czy to uzasadniona obawa? Czy lepiej przechowywać pliki w systemie plików i zapisać nazwę pliku i ścieżkę w bazie danych? Czy istnieją jakieś najlepsze praktyki związane z przechowywaniem plików podczas pracy z bazą danych? Pracuję w PHP i MySQL dla tego projektu, ale problem jest taki sam dla większości środowisk (Ruby on Rails, PHP, .NET) i baz danych (MySQL, PostgreSQL).


title: Jak przejść do konsultingu/tworzenia aplikacji dla małych i średnich firm?

text: Mam kilku przyjaciół, którzy są właścicielami małych firm (~100 pracowników) i miałem szczęście, że ich arkusze kalkulacyjne Excela i tym podobne przekształciłem w rzeczywiste aplikacje. U nich działa świetnie, a dla mnie daje satysfakcję. Możecie się śmiać, ale zdziwilibyście się, jak oszczędza to pieniądze i czas personelu. Praca sama w sobie nie jest skomplikowana, ale naprawdę ją uwielbiam. Dlaczego kocham tę pracę? 1. Pracuję bezpośrednio z osobą, która mi płaci i która może zobaczyć wyniki. 2. Pracuję na dowolnym frameworku/platformie, który mi się podoba, dzięki czemu mogę być na bieżąco z nowymi technologiami. 3. Mogę wybrać i wybrać projekty, nad którymi chcę pracować. To świetnie, ale dochodzę do punktu, w którym muszę uzyskać dodatkowy dochód i _naprawdę_ jest mi trudno rozgałęziać się i zdobywać więcej klientów. Przeważnie małe firmy wydają się naprawdę nieufne wobec czegoś, czego nie rozumieją. Masz pomysł, jak wejść na ten rynek? Czy to coś, co ktoś teraz robi? Czy są pewne branże, w których można to zmienić bardziej niż inne? To naprawdę moje marzenie, więc każda porada jest mile widziana.


title: Wykorzystanie jednego repozytorium do założenia drugiego

text: Mam już utworzony motyw strony internetowej. Używałem github do utrzymania tego motywu, nazwijmy go `smok`. Całkowicie zmieniamy motyw, ale używamy istniejącego motywu jako podstawy. Czy powinienem utworzyć nowe repozytorium github dla nowego motywu? A może powinienem kontynuować przepychanie się do repozytorium „smoków”? Jeśli utworzę nowe repozytorium, czy powinienem użyć klona `dragon` i użyć go jako bazy dla nowego repozytorium?


title: Czy należy zaktualizować EICAR, aby przetestować wersję systemu antywirusowego?

text: Publikuję to tutaj, ponieważ programiści piszą wirusy i oprogramowanie AV. Mają też najlepszą wiedzę na temat heurystyki i działania systemów AV (maskowanie itp.). Plik testowy EICAR został użyty do funkcjonalnego przetestowania systemu antywirusowego. W obecnej sytuacji prawie każdy system antywirusowy oznaczy EICAR jako wirusa „testowego”. Aby uzyskać więcej informacji na temat tego historycznego wirusa testowego, kliknij tutaj. Obecnie plik testowy EICAR nadaje się tylko do testowania **obecności** rozwiązania AV, ale nie sprawdza **aktualności** pliku silnika lub pliku DAT. Innymi słowy, po co przeprowadzać test funkcjonalny systemu, który może mieć pliki definicji starsze niż 10 lat. Wraz ze wzrostem liczby zagrożeń dnia zerowego nie ma większego sensu testowanie funkcjonalne systemu za pomocą EICAR. Biorąc to pod uwagę, uważam, że EICAR musi zostać zaktualizowany/zmodyfikowany, aby był skutecznym testem, który działa w połączeniu z rozwiązaniem do zarządzania AV. To pytanie dotyczy **testów w prawdziwym świecie** bez używania żywych wirusów... co jest intencją oryginalnego EICAR. Biorąc to pod uwagę, proponuję nowy format pliku EICAR z dodatkiem blob XML, który warunkowo spowoduje reakcję silnika antywirusowego. X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-EXTENDED-ANTIVIRUS-TEST-FILE!$H+H* <?xml version="1.0"?> <silnik-ważny-od >2010-1-1Z</engine-valid-from> <signature-valid-from>2010-1-1Z</signature-valid-from> <authkey>MyTestKeyHere</authkey> W tym przykładzie silnik antywirusowy alert dotyczący pliku EICAR tylko wtedy, gdy zarówno podpis, jak i plik mechanizmu są równe lub nowsze niż data ważności. Istnieje również hasło, które będzie chronić korzystanie z EICAR przez administratora systemu. Jeśli masz doświadczenie w TDD „Test Driven Design” dla oprogramowania, możesz zauważyć, że wszystko, co robię, to stosowanie zasad TDD w mojej infrastrukturze. W oparciu o Twoje doświadczenie i kontakty, jak mogę zrealizować ten pomysł?


title: Lepszy przepływ pracy między projektantem a programistą w tworzeniu plików iOS XIB

text: Pracujemy nad projektem na iOS i teraz, kiedy projektant ma jakieś uwagi na temat czcionek, kolorów, pozycji elementów, jakie obrazy powinny gdzie iść itp., muszę cofnąć się i przejrzeć każdy szczegół i upewnić się jest naprawione. Myślę, że musi być lepszy sposób na zrobienie tego, w którym projektant mógłby w jakiś sposób być bezpośrednio zaangażowany w projektowanie aplikacji. Pierwszym pomysłem, jaki mam, jest utworzenie globalnej plisty (lub plisty na XIB), która zawiera szczegóły różnych elementów (rozmiar, czcionka, kolor tytułu, obraz tła itp.) I po prostu pozwól projektantowi to wypełnić, i mają specjalną klasę, która przegląda plist i odpowiednio ustawia właściwości. Jeśli będę miał czas, może to zaimplementuję. Czy istnieje jakaś inna metoda pracy, która zaoszczędzi programiście całego czasu poświęcanego na szukanie drobiazgów podczas projektowania? edit: A może jest jakiś sposób na tworzenie iOS podobnie jak CSS działa z HTML?


title: jak nazywa się model opisującej strategię pomiędzy B+R a usługami profesjonalnymi

text: Czy istnieje model opisujący różne strategie, które firma może stosować w przypadku podziału organizacji na dział inżynierii i dział usług profesjonalnych? Jest to model, który stosują firmy takie jak Microsoft, w którym inżynieria (lub badania i rozwój) wytwarzają podstawowe oprogramowanie, a profesjonalne usługi mogą następnie pomóc klientom we wdrożeniu tego oprogramowania.


title: Używanie imiesłowu czasu przeszłego dla funkcji niezmieniających się

text: Często mam problemy z nazewnictwem, kiedy piszę klasy i funkcje. Ogólnie rzecz biorąc, staram się przestrzegać następujących zasad, jeśli mam do czynienia z funkcją, której nazwa jest czasownikiem: * Jeśli funkcja zmienia parametry, użyj bezokolicznika. * W przeciwnym razie użyj imiesłowu czasu teraźniejszego. * Jeśli funkcja jest wartością logiczną, użyj `is`, `has` lub `can` przed bezokolicznikiem. Pomyślałem, że ta zasada ma sens, ale patrząc na standardowe biblioteki kilku języków programowania czuję się raczej samotny. Na przykład: * Metody łańcuchowe Pythona nie zmieniają łańcuchów, ale są nazwami z czasownikami bezokolicznikowymi ( _np._ `capitalize`, `split`, `strip`...). * Funkcje `std.functional` w D zwracają nowe funkcje, ale są również nazywane czasownikami bezokolicznikowymi ( _np._ `memoize`, `curry`...). Chociaż dla mnie sensowne byłoby użycie `strip` (gdyby łańcuchy Pythona były modyfikowalne) do zmiany łańcucha i `strip`, aby uzyskać nowy łańcuch (podobny do przekazanego, ale pozbawiony spacji wiodących i końcowych), wygląda na to, że taka konwencja prawie nigdy nie jest stosowana (jednak Python zapewnia również wbudowane funkcje `reversed` i `sorted`, które używają imiesłowu przeszłego, aby powiedzieć, że odpowiednio zwracają odwróconą lub posortowaną kolekcję bez modyfikowania tej przekazanej do ich). Czy istnieją przeciwwskazania dotyczące używania imiesłowu czasu przeszłego dla nazw funkcji i metod niezmieniających się? **EDYTUJ:** Nie widzę, co jest niejasne, więc podsumuję pytanie w kilku słowach: _Czy to złą praktyką, aby używać imiesłowu czasu przeszłego zamiast czasowników w trybie rozkazującym lub bezokolicznikowym do nazywania funkcji, które przyjmują jeden parametr, nie zmieniaj go, ale zwróć zmienioną kopię wspomnianego parametru?_


title: Jaki jest właściwy i łatwy sposób przeniesienia LocalDB na platformę Azure przy użyciu najpierw kodu?

text: Jedyny sposób, w jaki mogłem to zrobić, to najpierw utworzyć schemat na localDB z kodem, a następnie ręcznie zmienić ciąg bazy danych na Azure, a następnie uruchomić kod na platformie Azure. Ale to daje mi tylko schemat, a nie dane. Czy istnieje lepszy sposób jak ? bakpac? Zamiast tego utworzyć skrypt? Lub jakieś inne pojęcie, którego mi brakuje?


title: Przepływ pracy do budowania RESTful API

text: Buduję RESTful API i do tej pory, aby upewnić się, że moje zasoby działają tak, jak tego potrzebuję, używam klienta REST o nazwie Postman. Ułatwia mi to przechowywanie tras i szybkie wysyłanie do nich próśb o testowanie. Mój obecny zbiór tras w Postmanie wygląda tak: ![](http://cl.ly/image/29410W1W0i3h/content) Problem z testowaniem API polega na tym, że muszę ręcznie zmieniać identyfikatory zasobów. Na przykład, jeśli chcę przetestować metodę `PUT` na moim zasobie postów, muszę najpierw utworzyć zasób, znaleźć identyfikator, a następnie wkleić go do URI `PUT`. To długo! Co jest uważane za profesjonalną praktykę tworzenia interfejsu API RESTful? Czy powinienem pisać testy jednostkowe dla każdej trasy, dynamicznie tworząc post przed testowaniem metod, takich jak aktualizacja?


title: Co się dzieje, gdy używasz adresu przed jego przydzieleniem?

text: Bardzo prosty fragment kodu C++ poniżej jest niepoprawny, łatwo zrozumieć dlaczego, a narzędzia takie jak Valgrind powiedzą ci. Podczas uruchamiania kilku kodów C++ zawierających tego rodzaju błąd zauważyłem, że za każdym razem kończyło się to błędem segmentacji w wierszu, który próbuje użyć adresu. Więc moje pytanie brzmi: czy można bezpiecznie twierdzić, że próba użycia adresu przed jego przydzieleniem **nieuchronnie** doprowadzi do „naruszenia segmentacji” w odpowiedniej linii? class ClassType { public:int data_; }; .... // Użycie adresu przed jego przydzieleniem ClassType * ClassType_ptr; int x = typ_klasy_ptr->dane_;


title: Czy istnieje lepsza alternatywa dla systemu plików opartego na folderach i czy zostanie on wkrótce zastąpiony?

text: Wszystkie systemy plików, z którymi się zetknąłem, opierały się na folderach - masz folder główny, który zawiera pliki i podfoldery, który z kolei zawiera pliki i podfoldery i tak dalej. Czy istnieje lepsza alternatywa dla organizowania plików i czy w najbliższym czasie zastąpi ona obecny system? Możesz dołączyć historię dotyczącą systemów plików, jeśli uznasz, że jest to w porządku w swojej odpowiedzi. Interpretuj termin „lepiej” w dowolny sposób.


title: Czy są jakieś programy studiów online / w niepełnym wymiarze godzin, które koncentrują się na bezpieczeństwie IT?

text: Jestem inżynierem oprogramowania i chciałbym bardziej skupić się na sprawach związanych z bezpieczeństwem (kryptografia, bezpieczeństwo mobilne, zarządzanie tożsamością, ...). Ponieważ chciałbym zrobić M.S. W każdym razie na informatyce szukam programu, w którym mogę połączyć oba.


title: Zarządzanie projektami Eclipse w kontroli źródła

text: Używam Eclipse od dłuższego czasu do rozwoju. Jednym z problemów, na który natknąłem się podczas pracy nad projektami innych osób, jest to, że jeśli pochodzą one z kontroli źródła, brakuje niektórych plików projektu eclipse "default.properties" i innych plików konfiguracyjnych xml. Zwykle jest to duży ból w tyłku, aby projekt działał w zaćmieniu. Rozumiem, dlaczego niektóre pliki nie są śledzone, ponieważ mogą być one pełne konkretnych rzeczy do określonej instalacji zaćmienia. Jak wam wszystkim się to udaje?


title: Czy licencje mają znaczenie, jeśli w pobliżu nie ma nikogo, kto by je egzekwował?

text: Załóżmy, że pierwotni twórcy nie mogą (lub nie chcą) wymusić licencji na swoje oprogramowanie/kod, ale ta praca jest nadal popularna. Myślę, że jeśli chcesz to zwizualizować, rzucę zawiłą hipotezę: wyobraź sobie bardzo małą grupę programistów, którzy wydali projekt kodu na licencji open-source. Repozytorium było hostowane na ich serwerach. Jednak wszyscy członkowie najbliższego zespołu programistycznego zginęli w tragicznym wypadku czy coś takiego. Ich serwery zostały zamknięte po tym, jak to się stało. Projekt miał dość dużą bazę użytkowników, więc inni zaczęli hostować ostatnią wersję na własnych serwerach, aby inni mogli je pobrać. (Tak, mam aktywną wyobraźnię) Czy przestrzeganie licencji staje się po prostu kwestią moralności jej użytkowników, czy może nadal istnieje kara prawna, gdy nie ma jednego użytkownika lub grupy, która by ją egzekwowała? Czy można by coś zrobić, gdyby pozbawiony skrupułów użytkownik zdecydował się rozgałęziać projekt i używać go na innej licencji? Nie szukam porady prawnej - jestem po prostu ciekawa, jak działają licencje na oprogramowanie. Mam tendencję do myślenia o dziwnych sytuacjach i zastanawiam się, co by się stało w tych scenariuszach.


title: Czy wywiady techniczne bywają subiektywne?

text: Opierając się na moim doświadczeniu w wywiadach technicznych, stwierdziłem, że większość z nich jest subiektywna, ponieważ ankieter ma już własną odpowiedź. Mimo że odpowiedź kandydata jest prawidłowa, ponieważ osoba prowadząca rozmowę kwalifikacyjną nie była na nią przygotowana, kandydat nie dostaje pracy. W ostatnim wywiadzie powiedziałem coś o użyciu algorytmu drzewa AVL do rozwiązania konkretnego problemu, który został zadany. Ankieter odpowiedział: „Co to jest drzewo AVL?”. Innym przykładem jest wszystko wokół składni; Spotkałem się z tym głównie podczas wywiadów, które wymagają kodu Rubiego, ponieważ istnieje wiele sposobów na zaimplementowanie rozwiązania danego problemu. Bardzo powszechnym problemem są problemy związane z projektami zorientowanymi obiektowo. W tej sytuacji nie ma szans na odniesienie sukcesu przez rozmówcę. Czy ktoś inny też tak się czuł, czy to tylko ja? Jeśli to nie tylko ja, jak możemy ulepszyć wywiady techniczne?


title: Jak możemy zaprojektować mobilny serwer XMPP do czatowania?

text: Mam problem z projektowaniem serwera xmpp, zastanawiałem się nad tym i szukałem od jakiegoś czasu, ale nie mogę podjąć decyzji, mam nadzieję, że eksperci mogą mi dać wskazówkę, naprawdę docenić. <Wymaganie> Zbuduj mobilny serwer do czatowania, ten serwer powinien umożliwiać: 1\. Zarejestruj nowego użytkownika 2\. prześlij zdjęcia użytkownika 3\. edytować swoje dane osobowe. 4\. Użytkownik może ze sobą rozmawiać. 5\. Zwolnij interfejs API i zezwól na korzystanie z systemu Android lub IOS. 6\. Powinien być rozszerzalny, powinien umożliwiać późniejsze dodawanie nowych funkcji bez zbytniej zmiany struktury. <Moje pytanie> Wiem, że istnieje _OpenFire_ serwer xmpp o otwartym kodzie źródłowym, z którego możemy korzystać, ale te dwa są samodzielnymi serwerami, nie pozwalają użytkownikowi na przesyłanie zdjęć, edytowanie własnych danych osobowych ani wykonywanie innych czynności. Jak więc to osiągnąć? Czy możemy stworzyć wszystkie dodatkowe funkcje na serwerze Tomcat i sprawić, by Openfire współpracował z nim razem? Czy możemy stworzyć wtyczkę w otwartym ogniu, aby to osiągnąć? Jakie jest najlepsze rozwiązanie?


title: rusztowanie wielokątowego portalu aplikacji z systemem użytkowników

text: Próbuję znaleźć najlepszy sposób na stworzenie portalu, do którego użytkownik może się zalogować, a następnie prezentować szereg różnych aplikacji (angular). Powinny mieć ten sam backend API. Myślę, że każda aplikacja kątowa mogłaby (i powinna) być rozwijana osobno. Jedyne, co myślę, że muszę zrobić, to umieścić folder dist (lub utworzyć do niego dowiązanie symboliczne) w części „portal”. Kiedy mówię o portalu, mam na myśli tę część, w której użytkownikowi wyświetlany jest ekran logowania, a po udanym uwierzytelnieniu jest kierowany do menu aplikacji. Naprawdę statyczne rzeczy. Backend api może być oddzielną aplikacją ekspresową, aby była mniej złożona (przynajmniej tak mi się wydaje). Moim celem jest, aby proces rozwoju był efektywny i łatwy w utrzymaniu. Każda aplikacja kątowa jest połączona z yeomanem, a ja rozwijam je, robiąc „grunt service”. 'grunt build' utworzy ładnie spakowaną aplikację w folderze dist. Jestem całkiem zadowolony z tego rozwiązania. Backend to aplikacja expressjs i używam nodemon, aby robić to skutecznie. Moim problemem w tej chwili jest to, jak mam to wszystko zbudować? Kiedyś próbowałem skonfigurować duży plik Gruntfile.js, aby zbudować backend, portal i każdą aplikację kątową i połączyć wszystko razem. Poddałem się. Jak to widzę, części, które muszę połączyć to: Login/portal/menu (express/passport) n * Aplikacje Angular API-Backend (express/mysql) Mam część portalową, która działa z paszportem, mam Backend API, który działa, i mam kilka koncepcyjnych aplikacji kątowych, które działają. moje repozytorium git zawiera wszystko i mam taką strukturę: git |-- backend | | | +-- api | |-- app.js | | | |-- lib | |-- publiczne | +-- konfiguracja | | +-- frontend |-- App1 | |--Gruntfile.js | |--node_modules | |--aplikacja | | |--bower_components | | |--obrazy | | |--widoki | | +--skrypty | +--dist | |-- Aplikacja2 | | | |--Gruntfile.js | |--node_modules | |--aplikacja | | |--bower_components | | |--obrazy | | |--widoki | | +--skrypty | +--dist | +-- Portal | express/passport app Czy część portalu i backend api powinny być takie same? Wszelkie dobre pomysły na rusztowanie są bardzo mile widziane :) (Doceniam to nawet, jeśli ktoś chce przeczytać moje długie pytanie)


title: Pomaganie w routingu CodeIgniter

text: Czy możesz wyjaśnić te dwie linie kodu w pliku `applications/config/routes.php` we frameworku CodeIgniter? $route['default_controller'] = 'strony/widok'; $route['(:dowolne)'] = 'strony/widok/$1';


title: Jeśli miałbym zacząć tworzyć GUI, jak mam zdecydować, z której platformy korzystać?

text: Słyszałem o WPF, Silverlight, ale w tej chwili są też Windows RT, metro, Windows 8 i tak dalej - trudno mi się zorientować, na co postawić. Jak w danym momencie znaleźć najlepszą platformę do tworzenia nieco przyszłościowego GUI?


title: Pomóż zrozumieć przykład MapReduce Sortuj

text: Z sekcji 5.3 dokumentu Google opisującego MapReduce. > „Funkcja Map wyodrębnia 10-bajtowy klucz sortujący z wiersza tekstu i emituje > klucz oraz oryginalną linię tekstu jako pośrednią parę klucz/wartość. Użyliśmy > wbudowanej funkcji tożsamości jako operatora Zmniejsz. > przekazuje pośrednią parę klucz/wartość niezmienioną jako para klucz/wartość wyjściowa >. Ostateczne posortowane dane wyjściowe są zapisywane..." Nie rozumiem, jak zachodzi faktyczne sortowanie. O ile rozumiem, funkcja Map wyodrębnia parę klucz-wartość, a następnie funkcja Reduce w jakiś sposób wypluwa posortowane dane. Co to jest „klucz sortujący”?


title: npm packages.json: devDependencies vs instalacja globalna

text: Jestem nowym deweloperem Node.js i mam pytanie o najlepsze praktyki przy pisaniu plików `package.json`. Z mojego punktu widzenia, musisz wymienić wszystkie zależności, które są potrzebne do wykonania Twojej aplikacji w sekcji „zależności” w pliku `package.json`. Wszystkie dodatkowe zależności wymagane do uruchomienia testu (lub procesu kompilacji) muszą być wymienione w `"devDependencies"`. Ale co z narzędziami, których dodatkowo używasz, ale które niekoniecznie są wymagane przez każdego programistę. Weźmy jako przykład pakiet `node-inspector`, który zainstalowałem globalnie na moim komputerze, ale nie dodałem go do pliku `package.json`. Czy to dobra praktyka, czy też zaleca się, aby te pakiety zapisać jako `"devDependencies"`?


title: Dlaczego nie ma nowoczesnych środowisk C IDE?

text: Dlaczego funkcje obecne we współczesnych środowiskach IDE dla języka Java i C# (Intellij IDEA, Visual Studio, eclipse) nie zostały opracowane we (wcześniejszych) środowiskach IDE dla języka C? Chodzi mi o to, że nie znam żadnego IDE, które ma nowoczesne funkcje (autouzupełnianie, nawigacja po kodzie, refaktoryzacja, integracja VCS itp.), które zostało opracowane specjalnie dla C. Wiem, że eclipse ma wtyczkę do C i Visual Studio może działać stara wersja C, ale nie zostały zaprojektowane dla C, ale raczej dla Java/C# (lub innych języków .NET). Trudno mi również uwierzyć, że rzeczy takie jak „naciśnięcie klawisza, aby przejść do definicji funkcji lub struktury” lub „przejście do SVN za pomocą 2 skrótów klawiszowych zamiast wchodzenia w powłokę i pisania polecenia” lub „naciskania klawisza w celu wyodrębnienia metoda lub zmienna” są bezużyteczne i wystarczy emacs lub vim. Nie wspominając o analizie kodu, pokryciu kodu i prawdopodobnie najważniejszej obsłudze konkretnych bibliotek/frameworków. Są to wszystkie funkcje, które znacznie zwiększają produktywność programisty. Jedynym powodem, o którym pomyślałem, jest to, że nie ma wielu dużych projektów w C (setki tysięcy LoC), ale wciąż jest ich mnóstwo; a także większość funkcji jest bardzo przydatna również w przypadku mniejszych projektów.


title: Czy jest to właściwy sposób korzystania z extendów?

text: Tworzę diagram UML. Zastanawiam się, czy prawidłowo używam funkcji rozszerzania. Mam specjalistę od marketingu, który może wyszukiwać kontakty, ale tylko wtedy, gdy sam je stworzył... Czy mam dobry pomysł. A może powinno istnieć powiązanie między marketerem a kontaktem dotyczącym aktualizacji/usuwania? Czy aktualizacja/usunięcie powinno nawet przedłużyć utworzony kontakt? ![tutaj wpisz opis obrazu](http://i.stack.imgur.com/qeMtm.jpg)


title: Nakładanie się otwartego i zamkniętego źródła

text: Chciałbym zrozumieć, dlaczego niektórzy ludzie lubią otwarte oprogramowanie, a inni zamknięte? Pozwólcie, że będę bardziej szczegółowy i zadam pytanie dotyczące tworzenia stron internetowych. Jeśli zbuduję witrynę przy użyciu języka open source po stronie serwera, jakie są dla mnie korzyści? a jeśli zbuduję go przy użyciu zamkniętego języka po stronie serwera, jakie są korzyści? Chcę tylko zrozumieć, jak mogę wybierać między dwoma różnymi paradygmatami podczas tworzenia różnych typów witryn i aplikacji!


title: Testowanie wywołań metod łańcuchowych zwracających typ i wartość

text: Czy warto przetestować typ zwracany i wartość wywołania metody, która jest przeznaczona do tworzenia łańcuchów? Można sobie wyobrazić, że kolega programista może przypadkowo zmienić typ zwracany na void i usunąć zwrot, jednocześnie wściekle refaktoryzując niektóre metody? Potencjalnie złamałoby to dużo kodu dla niczego niepodejrzewającego użytkownika. Jednak czuję, że testowałbym strukturę kodu, a nie funkcjonalność kodu. Czy to rozsądna rzecz do przetestowania? A może to tylko wielka strata czasu?


title: Złożona logika walidacji wzajemnego wykluczania

text: Muszę zweryfikować niektóre dane wejściowe formularza w złożony sposób. Np. <select id="options" multiple="multiple"> <option>A</option> <option>B</option> <option>C</option> <option>D</option> <option>E< /option> </select> Na przykład, jeśli użytkownik wybierze A i B, powinien otrzymać błąd, jeśli użytkownik wybierze również D. Uwaga, staram się zachować tę regułę biznesową w oddzielnej warstwie niż ten kod interfejsu użytkownika, który może mieć zupełnie inną formę, np. pola wyboru, przeciąganie i upuszczanie, dodawanie/usuwanie opcji wraz z ewentualnymi polami towarzyszącymi. Szukam frameworka, wzorca projektowego lub innego eleganckiego sposobu na zakodowanie tej logiki, najlepiej ostatecznie poprzez atrybuty walidacji w modelu.


title: Dlaczego firma Microsoft nie wydaje frameworków UX do tworzenia interfejsów użytkownika, takich jak ich obecne interfejsy użytkownika?

text: Kiedy zacząłem uczyć się programowania z frameworkiem .NET, zacząłem od używania WinForms jako technologii interfejsu użytkownika. Używa „klasycznych” menu, takich jak ten Office 2000: ![interfejs użytkownika Office 2000](http://i.stack.imgur.com/cevjt.png) Kilka lat później został wydany Office 2007, narodziła się wstążka: ![interfejs użytkownika pakietu Office 2007](http://i.stack.imgur.com/WvWbm.png) A nawet kilka lat później został wydany pakiet Office 2010, który również dodał nowe funkcje, takie jak scena:![interfejs użytkownika pakietu Office 2010] (http://i.stack.imgur.com/fYfEQ.png) Kilka dni temu została wydana wersja zapoznawcza Office 15, w której dodali więcej ciekawych nowych rzeczy: ![interfejs użytkownika Office 15](http://i.stack. imgur.com/hf2Wl.png) To ogromny postęp IMO, ale dlaczego nie umożliwiają programistom budowania interfejsu użytkownika takiego jak oni? Kiedy patrzę na .NET, nadal nie ma możliwości zbudowania wstążki. Nawet w przypadku WPF, który jest wysoce rozszerzalny, nie ma wstępnie utworzonych kontrolek. Tak więc społeczność rozpoczęła kilka projektów, aby stworzyć wszystkie te "funkcje". Wiem, że dzisiaj Microsoft wydał wstążkę dla WinForm i WPF, ale to nadal nie jest częścią żadnego podstawowego frameworka (nawet 4.5). Ale to nie ogranicza się do .NET, o ile wiem? Dziś nadal nie ma interfejsów API dla niezarządzanych aplikacji do tworzenia tych interfejsów użytkownika wstążki?! W Niemczech oferują bezpłatne szkolenia UX, aby upewnić się, że wszystko pasuje do ich stylu! http://j.mp/NZGgH9 **Dlaczego Microsoft nie daje nam, programistom, fajnych rzeczy? Czy chcą, aby ich aplikacje były wyjątkowe?**


title: Kiedy używać kolekcji niestandardowych?

text: Widzę wiele interfejsów API, które używają niestandardowych kolekcji, a nie tylko mocno typowanych, spakowanych generyków. Na przykład, API będzie miał `Object1Collection` zamiast tylko `List<Object1>` (lub innego odpowiedniego rodzaju). Kiedy wiesz, że użyć jednego lub drugiego? Rozumiem, że jeśli chcesz _rozszerzyć_ możliwości wstępnie dostarczonej kolekcji ogólnej, utworzysz kolekcję niestandardową, ale co, jeśli tak nie jest? Czy rozsądne jest tworzenie kolekcji niestandardowej od samego początku, z myślą, że w przyszłości obiekt może się skalować i wymagać dalszych możliwości, a łatwiej będzie to zrobić na początku? Czy to wystarczające uzasadnienie? A jeśli chcesz po prostu _rozszerzać_ funkcjonalność, zamiast _definiować_ funkcjonalność kolekcji, po prostu wywodzisz swoją niestandardową kolekcję z podstawowej klasy kolekcji ogólnej, w przeciwnym razie odpowiednio odziedziczysz interfejs? Czy to typowe?


title: jak wybrać co programista?

text: Pracuję nad pomysłem, potrzebuję współprogramisty, który doprowadzi go do dobrej kondycji. Jakie czynniki należy wziąć pod uwagę przy wyborze osób na takie stanowiska. (Uwaga: jeśli jakiś programista java jest otwarty, proszę o kontakt. To jednak nie jest oferta pracy :-) )


title: jak metody wirtualne są wolniejsze w C#

text: Czytałem, że wywołania wirtualne spowalniają kod niż wywoływanie wywołań niewirtualnych w C#. Jednak instrukcje IL dla obu są takie same `callvirt` z wyjątkiem przypadków, w których wywoływana jest `base.somemethod()`. Jak więc metoda wirtualna wpływa negatywnie na wydajność?


title: Jak mogę asynchronicznie obsługiwać wiadomości na czacie?

text: Pracuję nad programem, którego część będzie działała jako rozmowa między różnymi ludźmi. Próbuję znaleźć najlepszy sposób wysyłania i odbierania wiadomości. PrintWriter lub coś podobnego nie zadziała, ponieważ proces zatrzyma się na metodzie `read()` podczas oczekiwania na wysłanie do niego wiadomości. Chciałbym sprawdzić, czy jest nowa wiadomość, a jeśli nie, kontynuować wykonywanie. Widziałem kilka rzeczy o JMS, ale nie zrobiłem wystarczająco dużo badań, aby ustalić, czy nadaje się do tej pracy. _Czy_ JMS to najlepsza opcja na to, czy jest lepszy sposób?


title: Jakie zadania SCM można wykonać na urządzeniu mobilnym?

text: Biorąc pod uwagę iPada, iPhone'a, Playbook lub inne urządzenie mobilne, jakie zadania SCM mają sens na tych urządzeniach. Przegląd kodu? Propagacja zmian między oddziałami? Zautomatyzowane wyniki kompilacji po zameldowaniu? Co jeszcze? Generowanie kodu? Debugowanie? Edycja kodu w chmurze? A może uważasz, że wszystkie zadania SCM będą zawsze wykonywane na komputerze stacjonarnym?


title: jak wykorzystać to samo zachowanie w różnych klasach

text: Mam zachowanie, którego chciałbym używać w różnych klasach. Klasy te nie są ze sobą powiązane (bez dziedziczenia). Używam AS3, gdzie dziedziczenie wielokrotne nie jest możliwe. Mógłbym użyć interfejsu, ale wtedy musiałbym za każdym razem przepisywać tę samą implementację, co w zasadzie robię teraz (ale bez interfejsu). Jako przykład mam wiele sytuacji, w których mam ikonę i etykietę tekstową. W przyciskach, znakach itp. Chciałbym scentralizować zachowanie wyrównania między ikoną a etykietą. Jaki jest najlepszy do tego wzór OOP?


title: Jak obliczana jest ta liczba?

text: mam numery; A == 0x20000000 B == 18 C == (B/10) D == 0x20000004 == (A + C) A i D są w szesnastce, ale nie jestem pewien, jakie są zakładane podstawy liczbowe pozostałych ( chociaż założyłbym podstawę 10, ponieważ nie określają wyraźnie podstawy.Może to być istotne lub nie, ale mam do czynienia z adresami pamięci, A i D są wskaźnikami.Część, której nie rozumiem, to jak 18 /10 daje mi 0x4 **Edycja: Kod dla jasności:** *adres1 (wskaźnik to adres: 0x20000000) printf("Test1: %p\n", adres1); printf("Test2: %p\n" , adres1+(18/10)); printf("Test3: %p\n", adres1+(21/10));Wyjście: Test1: 0x20000000 Test2: 0x20000004 Test3: 0x20000008


title: Dlaczego miałbyś zatrudniać wewnętrznych programistów zamiast zlecać im tworzenie produktu dla Twojej firmy?

text: Dlaczego miałbyś zatrudniać in-house zamiast outsourcingu przy opracowywaniu produktu dla Twojej firmy? Przychodzi mi do głowy tylko kilka, ale nie jestem do końca pewien, czy to wystarczający powód. To jest właściwie na debatę, którą zamierzam przeprowadzić w klasie. Jestem bardziej skłonny do outsourcingu, ale niestety zostałem poproszony o przejście na wewnętrzną stronę debaty. Jakieś pomysły?


title: Kiedy stosować model 3 warstwowy?

text: Niedawno miałem do czynienia z modelem trójwarstwowym (DAL,BL,UI). Ktoś mi powiedział, że powinienem ZAWSZE pracować z tym modelem. Mam średni projekt, który zaczynam i mam wątpliwości, czy powinienem go budować warstwami i zmusić się do pracy z bardziej złożonym kodem tylko po to, by 'kodować według książki'? Mimo, że czytam o tym modelu, nadal nie jestem do końca przekonany, że warto. Zrozumiałem, że pomogłoby, gdybym zmienił interfejs użytkownika, ale naprawdę nie widzę żadnych szans, aby interfejs użytkownika tej aplikacji kiedykolwiek się zmienił. Więc czy warto się tym zajmować? Będę wdzięczny za Twoją opinię - czy poradziłbyś mi, aby zawsze budować projekty w tym modelu (nawet jeśli obecnie nie widzę dużej korzyści)? **EDYTUJ:** chłopaki, proszę nie łapcie mnie na słowo 'ZAWSZE' - chodziło o to, że generalnie tak powinienem projektować swoje projekty.


title: Najlepsze podejście do zapisywania zaznaczonych obszarów na mapie geograficznej

text: Projektuję aplikację, która pozwala użytkownikom podświetlać obszary mapy geograficznej za pomocą narzędzia, które przypomina pędzel lub długopis. Narzędzie zasadniczo rysuje okrąg jednym kliknięciem i kontynuuje rysowanie tych kół za pomocą ruchu myszy. Oto przykład rysunku wykonanego przez przesunięcie narzędzia. Jest prawie taki sam jak Microsoft Paint. ![tutaj wprowadź opis obrazka](http://i.stack.imgur.com/aXG9T.png) Niezależnie od języka programowania, jakie jest najlepsze podejście (najtańsze podejście) do zapisywania tego rodzaju danych?


title: Silverlight, jedna baza danych na użytkownika

text: Mam aplikację Silverlight z platformą WCF i encji. Czy możliwe jest posiadanie jednej bazy danych na użytkownika. Czyli kiedy użytkownik się zaloguje, będzie korzystał z własnej bazy danych?


title: Jak dyskretny powinien być interfejs API RESTful?

text: Nigdy wcześniej nie budowałem interfejsu API RESTful i zastanawiam się, jak dyskretne powinno być? Załóżmy na przykład, że mam klienta, który ma imię i nazwisko, adres, numer telefonu, adres e-mail, język itp. Czy ma sens, że istnieje sposób aktualizowania każdego pola (aktualizacja adresu, aktualizacja adresu e-mail itp.), czy też powinna być tylko jedna aktualizacja dla całego klienta, a każde pole jest opcjonalne?


title: Który jest lepszy w użyciu? (Wyliczenie lub Stała)

text: Mam taki enum. wyliczenie Rozmiar{PAGE_SIZE=20, HEADER_SIZE=30 }; Używam ich tylko jako stałych (nie utworzono zmiennej wyliczanej) w moim programie. tj. `int x = PAGE_SIZE + 20;` Więc jaki jest lepszy sposób deklarowania stałych w tym scenariuszu? (liczba lub const)


title: Jakie są mocne strony Rubiego?

text: Zanim przeczytałem ten artykuł, nigdy nie rozumiałem, dlaczego ktoś lubi LISP. Po przeczytaniu tego, byłem w stanie dać LISP-owi wystarczająco dobry strzał i od tego czasu polubiłem go. Dopiero gdy to przeczytałem, zacząłem rozumieć, dlaczego niektórzy ludzie przejmują się TCL. Potrzebuję odpowiednika dla Rubiego. Potrafię odczytać kod. Napisałem niewiele tego. Widziałem Railsy. Tak, wszystko jest obiektem... tak, składnia jest nowatorska... Nadal nie rozumiem, dlaczego ludzie są tak zachwyceni.


title: Jaki wzorzec pomaga w komponowaniu widoków zagnieżdżonych w czasie wykonywania?

text: Czy istnieją wzorce projektowe do komponowania widoków w widoku nadrzędnym w czasie wykonywania? Załóżmy, że komponujemy widoki na karcie przepływu pracy, a widoki w kontrolce karty zależą od kraju, typu sklepu i/lub innych warunków. Jest to aplikacja MVP, WPF, PRISM.


title: Dlaczego Windows Forms / frameworki Swing faworyzują dziedziczenie zamiast kompozycji?

text: Dzisiaj mój profesor skomentował, że wydaje mu się dziwne, że podczas gdy filozofią SWT jest tworzenie własnych elementów sterujących poprzez skład, Swing wydaje się faworyzować dziedziczenie. Nie mam prawie żadnego kontaktu z obydwoma frameworkami, ale z tego co pamiętam w C# Windows Forms zwykle rozszerza się kontrolki, podobnie jak Swing. Ponieważ ogólnie ludzie wolą kompozycję od dziedziczenia, dlaczego ludzie z Swing/Windows Forms nie preferowali tworzenia zamiast dziedziczenia?


title: Wdrażanie logiki biznesowej z dużą liczbą reguł i procesów biznesowych

text: Obecnie pracujemy nad projektem, który w dużym stopniu opiera się na bazie danych. Wśród wielu tabel główny nacisk kładziony jest na tabelę „data”, która jest połączona z inną tabelą „typ_danych” jako wiele do jednego, która jest następnie połączona z tabelą „operacja_danych” jako jeden do wielu. Ostatnia tabela definiuje określony zestaw operacji, które muszą zostać przetworzone dla każdego wiersza w tabeli „dane” na podstawie określonego typu danych. Operacja jest przetwarzana na określonych polach w tabeli „data” i częściowo na danych z innych tabel, niewymienionych w tym przykładzie. Rzeczywista operacja to najczęściej złożona kalkulacja lub konkretna formuła. Wynik konkretnej operacji zostanie zapisany w jeszcze innej tabeli. Więc ogólnie mamy: ![Schemat trywialny](http://i.stack.imgur.com/V8jrq.png) * Projekcja dla „danych” tabeli to około milion wierszy rocznie, podczas gdy inne tabele nie powinny się drastycznie zmieniać w ujęciu rocznym, ale początkowo będzie zawierać kilka tysięcy wierszy, co oznacza, że każdy typ danych będzie definiował około 10-15 operacji. * Każda operacja powinna być odwracalna (cofnąć zmiany). * Szybkość przetwarzania jest bardzo ważnym czynnikiem. * Aplikacja najprawdopodobniej przetworzy 2500 nowych wierszy „danych” tabeli dziennie. Moje pytanie dotyczy najlepszego podejścia do realizacji operacji. Czy uważasz, że rozsądniej jest przenieść logikę biznesową i reguły do bazy danych (procedury, wyzwalacze dla każdej operacji) czy implementować i przetwarzać każdą operację w warstwie aplikacji/biznesu? Jaka byłaby idealna struktura ogólna? Jestem również otwarty na inne podejścia.


title: Czy audyt i log robią dokładnie to samo w systemie oprogramowania?

text: Widziałem, że niektóre systemy oprogramowania posiadają funkcjonalność audytu i dziennika. Obie te funkcje wydają się robić to samo - **zapisują wszystkie działania użytkowników za kulisami.** W bazie danych istnieją nawet odpowiednie tabele audytu i dziennika. Jeśli naprawdę robią to samo, dlaczego programista opracował zduplikowaną funkcję w systemie?


title: Czy algorytm powinien obsługiwać nieprawidłowe dane wejściowe i czy może mieć zakodowane ścieżki dla niektórych danych wejściowych?

text: Mam pewne warunki wstępne dotyczące danych wejściowych i muszę zaprojektować algorytm dla tych danych. Czy powinienem również obsługiwać nieprawidłowe warunki wstępne? Czy to normalne, że mój algorytm będzie działał tylko dla pewnej liczby wejść, na przykład 4, i dla każdej mniejszej liczby wejść będę miał klauzulę "if input.size"? Aby wyjaśnić moje pytanie. Cóż, właściwie to zadanie z książki, ale i tak. Mówi więc, że otrzymam posortowaną tablicę, a następnie zamienioną tak, aby wyglądała na „4567123”. Pierwsza część „123” została zamieniona. Czy więc powinienem zawracać sobie głowę projektowaniem algorytmu dla obudowy bez wymiany? Również mój algorytm nie działa dobrze dla rozmiaru wejściowego 1, 2, 3, więc wstawiłem obserwacje dla 1 , 2 ,3. Czy to jest w porządku. Oto kod: //plik SwapedArraySearch.java\ public class SwapedArraySearch { public static int search(int[] arr) { switch (arr.length){ case 1: return arr[0]; przypadek 2: zwróć przyp[0] > przyp[1]?przyp[1]:przyp[0]; przypadek 3: zwróć arr[0] > arr [1] ? (przyklad[1] > przyklad[2]?przyklad[2]: przyklad[1]): (przyklad[0] > przyklad[2]?przyklad[2]: przyklad[0]); } int x = tab[0]; int n = przykł.długość/2; int prevn = arr[n] > x ? ar.długość -1 : 1; int t; while(prevn != n) { if (x < przyp[n]) { if (przyp[n] > przyp [n + 1]) return przyp[n+1]; t = n; n = n + (prevn - n)/2; prevn = t; } else { if (przyklad[n - 1] > przyklad[n]) return przyklad[n]; t = n; n = poprz + (n - poprz)/2; prevn = t; } } return przyp[0] > przyp[1] ? przyp[przyp.długość - 1] : przyp[0]; } public static void main(String... args) { int[] arr = new int[args.length]; for (int i = 0; i < args.length; i++) arr[i] = Integer.valueOf(args[i]); System.out.println(search(arr)); } } Również martwię się, że wygląda to zbyt skomplikowanie. Czy to nie jest czy jest w porządku? Również powiedzmy, wyszukiwanie binarne, oczywiście nie powinno sprawdzać przed uruchomieniem, że tablica była wcześniej posortowana, prawda?


title: porównanie liczb zmiennoprzecinkowych z porównaniem liczb całkowitych w C

text: Czy porównywanie liczb zmiennoprzecinkowych zajmuje (znacznie) więcej czasu niż porównywanie liczb całkowitych w C? Właśnie napisałem program w C sortowania sterty do sortowania liczb zmiennoprzecinkowych. Jestem na ubuntu 14.04 i użyłem polecenia `time`, aby sprawdzić czas potrzebny temu programowi na sortowanie 50, 5000 i 50000 liczb losowych, a następnie po prostu zmieniłem wszystkie `double` na `int` i ponownie sprawdziłem czas dla 50, 5000 i 5000 liczb i statystyk są następujące: $ czas ./heap 50 < input.txt real 0m0.003s user 0m0.001s sys 0m0.002s $ czas ./temp 50 < input.txt real 0m0.003s user 0m0.001s sys 0m0.002s $ czas ./sterta 5000 < input.txt rzeczywisty 0m0.008s użytkownik 0m0.007s sys 0m0.002s $ czas ./temp 5000 < input.txt rzeczywisty 0m0.005s użytkownik 0m0.004s sys 0m0.001s $ czas . /heap 50000 < input.txt real 0m0.030s user 0m0.028s sys 0m0.002s $ czas ./temp 50000 < input.txt real 0m0.027s user 0m0.026s sys 0m0.002s $ time ./heap 500000 < input. txt real 0m0.263s użytkownik 0m0.259s sys 0m0.003s $ czas ./temp 500000 < input.txt real 0m0.219s użytkownik 0m0.216s sys 0m0.003s Tutaj heap jest plikiem wykonywalnym zmiennoprzecinkowego heapsort, a temp jest plikiem wykonywalnym typu Integer Heapsort. Jak widać jest zauważalna różnica w czasie pracy? Jaki jest powód? W razie potrzeby mogę przesłać kody.


title: Czy podstawowe umiejętności programowania na poziomie podstawowym są niezbędne/pomocne do osiągnięcia sukcesu w matematyce?

text: Jak byś się czuł, gdyby w szkole podstawowej uczono podstawowych umiejętności programowania? Czy dzieci nie byłyby na równi z wymaganiami programowania, jeśli chodzi o pojemność mózgu? Czy pomogłoby to dzieciom w matematyce i innych podobnych zajęciach, czy nawet byłoby tego warte dla dzieci, które nie interesują się tą dziedziną.


title: Dobry projekt dla prostej witryny zawierającej blog

text: Jaki jest dobry projekt prostej witryny internetowej zawierającej głównie statyczne strony i blog? Pomagam przyjacielowi zbudować to dla ich małej firmy. Szukamy prostego podejścia, które można wdrożyć dość szybko. (Jestem programistą i mogę pomóc w kodowaniu, hostingu itp.) Jedną z opcji jest użycie witryny takiej jak virb, która pozwala wybrać jeden z ich motywów i dość łatwo zbudować witrynę. Możesz także dołączyć bloga. Hostują witrynę za dość niską miesięczną stawkę. Poleciłem tę opcję, ale mój przyjaciel chce projektu, który jest wyjątkowy i niestandardowy. Wziąłem więc jeden z motywów i zacząłem modyfikować HTML i CSS. To wciąż może być dobra opcja, ale... ...Jeżeli zamierzamy to znacznie zmodyfikować, dlaczego nie stworzyć od podstaw statycznych stron i użyć czegoś takiego jak Wordpress dla bloga. Czy to dobra opcja? Wygląda na to, że integracja Wordpressa z witryną jest dość łatwa, dzięki czemu projekt i zachowanie są naprawdę spójne. Czy to dobry pomysł? Czy polecacie inne podejścia?


title: Czy Cygwin lub wiersz polecenia systemu Windows są preferowane, aby uzyskać spójne środowisko terminalowe do programowania?

text: ### Pytanie: Co jest lepsze, zainstalowanie cygwina lub jednego z jego kuzynów na wszystkich moich komputerach z systemem Windows, aby mieć spójne doświadczenie terminalowe na wszystkich moich komputerach programistycznych, czy bycie dobrze wyszkolonym w umiejętności mentalnego przełączania się z terminala linuksowego na polecenie systemu Windows podpowiedź? ### Systemy, których używam: * OSX Lion na Macbook Air * Windows 8 na pulpicie * Windows 7 na tym samym pulpicie * Fedora 16 na tym samym pulpicie ### Co próbuję osiągnąć Skonfiguruj całkowicie spójny (lub spójne _wystarczające_) doświadczenie terminala na wszystkich moich komputerach. „wystarczająco” w tym kontekście jest wyraźnie subiektywne. Odpowiedz jasno, **dlaczego** sugerowana przez Ciebie konfiguracja jest wystarczająco spójna. ### Jeszcze jedna rzecz, o której należy pamiętać: chociaż piszę dużo kodu przeznaczonego do uruchamiania w systemie Windows (właściwie kod działający na Windows Phone, co wymaga komputera z systemem Windows), piszę również dużo kodu Java i wolę zrobić to w vim. Testuję lokalne repozytorium w Javie na moim komputerze z systemem Windows i wysyłam na inną maszynę testową z uruchomionym ubuntu na późniejszym etapie rozwoju. Kiedy naciskam na maszynę ubuntu, jestem wyłącznie w terminalu, ponieważ mam do niego dostęp przez SSH. ### Podsumowanie, z dokładniejszym pytaniem: Czy istnieje dobry sposób na osiągnięcie tego, co próbuję zrobić, czy też lepiej przyzwyczaić się do zapamiętywania różnych poleceń w zależności od systemu, na którym się znajduję? Która (jeśli którakolwiek z nich) jest uważana za „najlepszą praktykę” przez społeczność programistów? Alternatywnie, dla spójnego środowiska programistycznego, czy lepiej byłoby napisać **cały** mój kod SSHed na innej maszynie i przenosić rzeczy do okien w celu kompilacji/kompilacji tylko wtedy, gdy jest to potrzebne? Wydaje się, że to za dużo pracy... ale może być rozwiązaniem. Aktualizacja ###: Chociaż poniżej znajdują się wnikliwe odpowiedzi, nie słyszałem jeszcze odpowiedzi, która mówi o tym, _dlaczego_ dane rozwiązanie jest lepsze. Cygwin/GnuWin32 to z pewnością sposób na osiągnięcie podobnego doświadczenia na wszystkich platformach, ale ponieważ tylko uczę się wszystkiego z wiersza poleceń, nie chcę ustawiać się na wiele ponownego uczenia się/oduczania się w przyszłości. Cygwin/GnuWin32 ma swoje osobliwości, które sobie wyobrażam, a świadomość tego, jak ta konfiguracja działa w systemie Windows, jest krzywą uczenia się. Dodatkowo korzystanie z Cygwin/GnuWin32 pozbawia mnie możliwości poznania zalet PowerShell. Jako nowicjusz w pracy w wierszu poleceń, którą ścieżkę powinienem wybrać, aby zminimalizować konieczność ponownego uczenia się/oduczania rzeczy w przyszłości? lub jak przedstawiam w pierwszym akapicie: > [czy lepiej używać Cygwina] ... czy [zostać] dobrze wyszkolonym w umiejętności > mentalnego przełączania się z terminala linuxowego na wiersz poleceń systemu Windows?


title: Optymalizacja map myśli poprzez znalezienie najmniejszej nadmiarowości

text: Korzystając z map myśli, porządkujesz je w oparciu o to, jak uważasz, że najlepiej pasują. Na przykład (zakładka oznacza poddrzewo) wymagania obiadowe widelce do jedzenia łyżki śniadaniowe widelce do jedzenia można to zapisać używając jedzenia na obiad widelce śniadaniowe na obiad łyżki śniadaniowe na obiad Jak wyglądałby algorytm, który znajduje najlepsze sortowanie w opisany sposób. Najlepsze środki, najmniejsza redundancja? (Drugi przykład może w rzeczywistości nie zmniejszać nadmiarowości, ale pokazuje, co oznacza sortowanie/zmiana kolejności)


title: jaka jest różnica między inżynierem oprogramowania a kierownikiem projektu?

text: Rozumiem, że praca inżyniera oprogramowania polega na pracy ze wszystkimi aspektami tworzenia i wspierania systemu oprogramowania. W jaki sposób kierownik projektu pasuje/pracuje z inżynierem oprogramowania w środowisku małego zespołu (5 lub mniej)?


title: Czy rozsądne jest używanie git tylko na moim lokalnym komputerze?

text: Czy można używać git tylko lokalnie? Nie chcę płacić za usługę, która udostępnia prywatne repozytoria (takie jak Github), ale myślę, że git to świetny sposób na zorganizowanie mojego projektu o zamkniętym kodzie źródłowym.


title: Komunikacja między zespołami w tej samej firmie

text: W naszej firmie mamy 3 zespoły pracujące na różnym oprogramowaniu. Poziom, na którym pracują jest bardzo zróżnicowany, od 8/16-bitowego mikrokontrolera w C, przez ramię 32-bitowe w C++ pod winCE, po oprogramowanie na PC stworzone w C# i windev. Narzędzia i procedury, których wszyscy używamy, są mniej więcej takie same, chociaż niektóre zespoły używają VSS, a inne SVN do kontroli wersji. W tej chwili nie ma zbyt wiele formalnej komunikacji między zespołami. Ulepszenia w procesie są tylko przypadkowe, ponieważ słyszysz od członka innego zespołu coś, co możesz wykorzystać we własnym rozwoju. Bardzo chcielibyśmy poprawić tę sytuację, ale nie wiemy jak. Co zrobiłeś, co działało lub nie działało w takich sytuacjach?


title: Jakie są dobre książki do nauki ADA?

text: Niedawno potencjalny pracodawca zachęcił mnie do wyjścia, kupienia książki i rozpoczęcia nauki ADA. Generalnie uważam, że zaczynanie od dobrej książki, a następnie uzupełnianie tej nauki ciągłymi badaniami online z odniesieniami do książki w razie potrzeby jest najlepszym sposobem, w jaki się uczę. Jakie książki poleciłbyś na rozpoczęcie nauki ADA? Sama praca wymagałaby programowania wbudowanego, z którym też nie mam doświadczenia. Jakieś książki, które dobrze obejmują oba tematy?


title: Jak w środowisku sterowanym zdarzeniami funkcja „anuluj” powinna przerywać wszystkie dalsze zdarzenia?

text: W mojej aplikacji na iOS wszystko zależy głównie od wydarzeń. 1. Użytkownik naciska przycisk 2. Aplikacja nasłuchuje połączenia urządzenia zewnętrznego z urządzeniem iOS 3. Po wykryciu urządzenia (podłączeniu) wykonywane jest asynchroniczne połączenie z usługą sieciową (w celu sprawdzenia autentyczności użytkownika ) 4. Usługa sieciowa zwraca autentyczność użytkownika (na przykład wartość logiczną) 5. Inna asynchroniczna usługa sieciowa jest wywoływana w celu uzyskania autentyczności etapu 2 6. Zwracany jest wynik Moje pytanie brzmi: Jeśli udostępnię użytkownikowi okno dialogowe z napisem „Proszę czekać , przetwarzanie” i daję im przycisk „Anuluj”, jak mam (lub jak mogę) przerwać wszystko, co się dzieje? Jednym ze sposobów, aby to zrobić, jest po prostu mieć wartość logiczną o nazwie „userDidCancelEverything” i każda metoda sterowana zdarzeniami sprawdza, czy to prawda. Wydaje się to jednak brzydkie.


title: Zapytania w procesie Agile

text: Jak określić wartość story point w metodyce Agile i określić prędkość zespołu? W wyszukiwarce internetowej można uzyskać definicję, ale nie faktyczne wyjaśnienie procesu.


title: Gdzie mogę uzyskać przykładowy tekst?

text: Próbuję uzyskać statystyki dotyczące częstości kombinacji 2-znakowych sekwencji dla języka angielskiego dla projektu, nad którym pracuję. Bardzo ważne jest, aby wyniki były jak najdokładniejsze. Nie jestem do końca pewien, czy tego typu badania były prowadzone wcześniej, ale nie martw się; Mogę łatwo przygotować skrypt, aby zgłosić potrzebne mi statystyki. Ale nie mam dużej ilości przykładowego tekstu do analizy. Czy ktoś zna dobry zasób, w którym mogę uzyskać dużą ilość (kilka GB przydałoby się) tekstu angielskiego obejmującego szeroką gamę tematów w postaci zwykłego tekstu?


title: Sortowanie i haszowanie

text: Mój problem jest następujący. Mam tablicę ciągów `n` z `m < n` z nich odrębnych. Chcę utworzyć funkcję jeden-do-jednego, która przypisze każdy z odrębnych ciągów `m` do liczb `0...m-1`. Na przykład, jeśli moje ciągi to: „Bob, Amy, Bob, Charlie, Amy”, to funkcja: „Bob -> 0, Amy -> 1, Charlie -> 2” spełni moje potrzeby. Myślałem o trzech możliwych podejściach: 1. Posortuj listę ciągów, usuń duplikaty i skonstruuj funkcję za pomocą algorytmu wyszukiwania. 2. Utwórz tablicę mieszającą i sprawdź każdy ciąg, aby zobaczyć, czy jest już w tabeli przed jego wstawieniem. 3. Posortuj listę ciągów, usuń duplikaty i umieść wynikową listę w tablicy mieszającej. Mój kod zostanie napisany w Javie i prawdopodobnie będę używał standardowych algorytmów Javy: sortowanie przez scalanie do sortowania, wyszukiwanie binarne do wyszukiwania i czymkolwiek jest standardowy algorytm tablicy mieszającej Javy. **Pytanie:** Załóżmy, że po utworzeniu funkcji będę musiał ocenić ją na każdym z n oryginalnych ciągów. Które z trzech podejść jest najszybsze? Czy jest lepszy sposób? Częściowo problem polega na tym, że tak naprawdę nie wiem, co dzieje się „pod maską” w standardowych algorytmach mieszających. Każda pomoc byłaby mile widziana.


title: Używanie produktu na licencji GNU GPLv3 do użytku wewnętrznego firmy

text: Jestem w trakcie tworzenia małego portalu internetowego dla działu, w którym pracuję. W tym celu muszę przedstawić kilka danych, a natrafiłem na: http://www.pchart.net/, który mógłby się wydawać być dla mnie wielką pomocą. Powyższe jest na licencji GNU GPLv3, a moje pytanie brzmi, czy będę mógł z nich korzystać za darmo. Aby wyjaśnić, portal, który tworzę, w żaden sposób nie będzie sprzedawany ani generował pieniędzy, ale będzie służył wyłącznie do wewnętrznych celów informacyjnych. Przeczytałem warunki GPLv3 i o ile wiem, moja sytuacja jest legalna, ale chcę mieć absolutną pewność, że nie używam oprogramowania nielegalnie.


title: Jak mogę uniknąć błędów, używając ponownie tej samej nazwy zmiennej?

text: To nie jest rzadki przypadek i zdarza się u mnie często i spędziłem niezliczoną ilość czasu próbując debugować kod. Ostatni przykład, ten kod PHP, w którym użyłem `$email` jako parametru, a także jako obiektu. private function _mail( $email ) { if( filter_var( $email, FILTER_VALIDATE_EMAIL ) ): $email = new Zend_Mail(); $email->setSubject( $this->request->post('subject') ) ->setBodyHtml( $this->request->post('message') ) ->setFrom( $this->request->post ('z')) -> dodajDo( $email ) ->wyślij(); unset($e-mail); endif; } Wygenerował błąd, `strtr()` oczekuje, że parametr 1 będzie podanym obiektem ciągu i naprawdę frustrujące było przeglądanie bibliotek zend w celu sprawdzenia, jakie niejasne polecenie ciągu powoduje ten błąd. Jak uniknąć takich błędów?


title: Czy przenoszenie obiektów Entity Framework za pośrednictwem usługi sieci Web jest naprawdę najlepszym sposobem?

text: Odziedziczyłem projekt .NET, który ma blisko 2 tysiące klientów w terenie, którzy muszą okresowo przesyłać dane do centralnego repozytorium. Klienci budzą się i próbują wypchnąć dane za pośrednictwem serii usług sieci Web WCF, w których przekazują każdą jednostkę struktury encji jako parametr. Gdy usługa otrzyma ten obiekt, wykonuje pewną logikę biznesową na danych, a następnie odwraca się i umieszcza go we własnej bazie danych, która odzwierciedla bazę danych na komputerach klienckich. Sztuczka polega na tym, że dane te są przesyłane przez połączenie z pomiarem, co jest bardzo drogie. Tak więc optymalizacja danych jest poważnym priorytetem. Teraz używamy niestandardowego kodera, który kompresuje dane (i dekompresuje je na drugim końcu) podczas ich przesyłania, a to zmniejsza ślad danych. Jednak ilość danych, z których korzystają klienci, wydaje się absurdalnie duża, biorąc pod uwagę ilość faktycznie przesyłanych informacji. Wydaje mi się, że winę może ponosić sama struktura encji. Podejrzewam, że obiekty są bardzo duże, gdy są serializowane do wysłania przez sieć, z dużą ilością informacji kontekstowych i kto wie, co jeszcze, kiedy tak naprawdę potrzebujemy tylko „nowych” wstawek. Czy korzystanie z platformy encji i usług WCF, tak jak robiliśmy do tej pory, jest poprawnym architektonicznie sposobem podejścia do tego problemu n-warstwowego, asynchronicznego, tylko wypychania? A może istnieje inne podejście, które mogłoby zoptymalizować wykorzystanie danych?


title: Czy są jakieś badania na temat różnic geograficznych w środowiskach pracy (np. szacunek) dla programistów?

text: Jedną z rzeczy, których nauczyłem się z tej witryny, jest to, że programiści nie są traktowani tak samo, jak to, co widziałem w firmach, w których pracowałem, a niektóre różnice wydają się być związane z kulturą lub innymi czynnikami lokalizacja geograficzna, w której pracuje programista. W niektórych obszarach wydaje się, że programiści mogą oczekiwać wielu korzyści i dużej dozy profesjonalnego szacunku, ale w innych wygląda na to, że programiści są postrzegani jako robotnicy, którym mówi się, co mają robić, a następnie powinni to robić bez pytania. Nawet w samych Stanach Zjednoczonych wydaje się, że między różnymi regionami tego kraju istnieją duże różnice w „normach”. Zastanawiam się, ile z tego jest tylko moim odbiorem, a ile realnymi różnicami w postrzeganiu programistów w ich różnych lokalizacjach. Czy istnieją jakieś badania omawiające główne różnice w środowisku pracy programistów lub postawy dotyczące traktowania lub szacunku programistów ze względu na położenie geograficzne? Byłbym zainteresowany wieloma artykułami poruszającymi różne sposoby patrzenia na to. Edycja: W szczególności badania nie wydają się być dostępne, więc poszerzam pytanie. Jakieś dobre, przemyślane pisanie na dowolny temat?


title: Automatycznie analizuj pliki Excel

text: Muszę zreplikować ręczną generację dużej liczby plików Excela. Zacząłem ręcznie śledzić relacje między komórkami (pliki, formuły itp.). Rozmawiałem też z osobą, która generuje te pliki. Na razie mam ogólne pojęcie o tym, jak generowane są pliki Excela, ale „diabeł tkwi w szczegółach”. Zakładam, że mogę napisać skrypt, który wygeneruje hierarchię między komórkami i plikami, ale może to wymagać takiego samego wysiłku, jak ręczne zauważenie relacji. Obawiam się też, że nie jestem zbyt doświadczony i moja aplikacja jest bardziej podatna na błędy niż ręczna analiza. Jak poradzić sobie z tym problemem? Czy znasz projekt open source, który analizuje pliki Excela w trybie rekurencyjnym zgodnie z formułami?


title: Czy dobrze zrozumiałem OOP?

text: Pierwotnie postawiłem to na StackOverflow. Pytanie zostało zamknięte i zamiast tego zostałem poproszony o opublikowanie tego tutaj. Oto oryginalne pytanie, które tam zadałem: * * * Od jakiegoś czasu programuję metodą proceduralną. Zrobiłem sporo czytania na temat OOP i wiem, jak z niego korzystać. Tyle, że nie jestem pewien, czy nadal wiem, jak go prawidłowo używać? Aby przetestować to, przedstawiam szkielet wtyczki, którą opracowałem za pomocą OOP. Wtyczka ma pobierać wartości takie jak subskrybenci, obserwacje itp. z różnych sieci społecznościowych. // To jest klasa abstrakcyjna używana przez wszystkie klasy sieci społecznościowych klasa abstrakcyjna Social_Network { protected $service_url,$service_identifier,$icon_url,$refresh_data; function __construct($arguments) { // Kod do wypełnienia chronionych zmiennych zadeklarowanych powyżej } protected function get_value_internal() { // Internal tutaj oznacza pobranie danych z pamięci podręcznej. // Wywołaj get_value_external Jeśli dane z pamięci podręcznej wygasły lub nie istnieją } protected function parse_json_data($data) { // Ta funkcja parsuje dane i pobiera z nich żądaną wartość } public function display_value() { // To jest funkcja publiczna, która wyświetla wartość // Wywołanie get_value_internal // Wyświetlenie wartości za pomocą ikony itp. } //To będzie inne dla wszystkich sieci, ponieważ każda sieć miałaby inną metodę pobierania abstrakcyjnej funkcji get_value_external(); } class Facebook_Social_Network extends Social_Network { function get_value_external() { // Unikalny kod do pobierania danych z Facebooka // Przetwarzaj dane pobrane powyżej i parsuj je za pomocą funkcji parse_json_data zdefiniowanej w naszej klasie abstrakcyjnej return $this - > parse_json_data($data); } } class Twitter_Social_Network extends Social_Network { function get_value_external() { // Unikalny kod do pobierania danych z Twittera // Przetwarzaj dane pobrane powyżej i parsuj je za pomocą funkcji parse_json_data zdefiniowanej w naszej klasie abstrakcyjnej return $this -> parse_json_data($data) ; } } class YouTube_Social_Network extends Social_Network { function get_value_external() { // Unikalny kod do pobierania danych z YouTube // Dane zwracane przez YouTube są przetwarzane w inny sposób, więc nie korzysta się z udostępnionej metody parse_json_data // Przetwarzaj dane i umieszczaj je w zmienna o nazwie $value, która zostanie zwrócona poniżej return $value; } } Będę wdzięczny, jeśli ktoś dobry w OOP może rzucić okiem i powiedzieć mi, czy jestem na celu z moim zrozumieniem, blisko celu, czy daleko? Jedną rzeczą, która mnie niepokoi, jest to, czy powinienem użyć tylko jednej klasy, która obsłuży wszystkie sieci? * * *


title: Projektowanie oprogramowania naukowego

text: Zadałem to pytanie na stackoverflow i zasugerowano, że tutaj zostanie opublikowany ściślejszy formularz. Wielu początkujących badaczy numerycznych staje przed perspektywą tworzenia od podstaw oprogramowania o krytycznym znaczeniu dla wydajności. Większość jest do tego źle przygotowana, a moje laboratorium nie jest inne. Obecnie pracuję nad rozszerzeniem wyrafinowanej aplikacji C, która jest typowa dla wielu programów akademickich — praca z nią jest koszmarem, a dodawanie nowych funkcji zajmuje znacznie więcej czasu niż powinno. Chcę się nauczyć, jak robić to lepiej i uczę się przez działanie. Mając to na uwadze, chciałbym wskoczyć na głęboką wodę i stworzyć aplikację, która jest równoległa (OpenMPI + być może OpenCL), łączy UI Pythona opartego na skryptach z C++ do podnoszenia ciężarów, a co najważniejsze, wykorzystuje odpowiednie wzorce projektowe aby kod był jak najbardziej modułowy. Głównym powodem, dla którego to robimy, jest nauczenie się głównych umiejętności i kilku ogólnych technik wydajności, które można dokumentować i udostępniać w laboratorium. Przeczytałem kilka książek dotyczących OO i wzorców, ale uważam, że trudno jest przyjąć ich abstrakcyjną naturę i zastosować ją w użyteczny sposób do dziedziny problemowej. Myślę, że pytanie, które zadaję, brzmi: **Gdybyś dostał zadanie zaprojektowania tego rodzaju oprogramowania, na czym byłaby twoja pierwsza godzina przed tablicą?**


title: Czy niestandardowe elementy danych powinny być przechowywane jako wpisy XML czy w bazie danych?

text: Jest mnóstwo takich pytań, ale są one w większości bardzo uogólnione, więc chciałbym uzyskać kilka poglądów na temat mojego konkretnego zastosowania. **Ogólne:** Sam buduję nowy projekt w Django. Skoncentruje się na małych firmach. Chciałbym, aby moi klienci mogli go nieco dostosować, aby mogli dodawać do swoich klientów/faktury/pracownika/wszelkie elementy. Moje modele będą odzwierciedlać elementy wzorcowe, które mogą mieć wszystkie modele ModelX. Na przykład: * imię * nazwisko * e-mail * adres * ... Wtedy mój użytkownik będzie mógł dodać pola na dowolne dane, które mogą mu się spodobać. Nadal jestem w fazie projektowania i sam to buduję, więc mam kilka opcji. **Praca nad...** Obecnie modele 'dodatkowych elementów' mają FK do modelu ogólnego (na przykład `Customer` i `CustomerDataPoints`). Wszystkie wartości w dodatkowych punktach danych są przechowywane jako znak i zostaną przetworzone/parcowane do ich rzeczywistego formatu podczas tworzenia widoku. W tej wersji użytkownik może teoretycznie dodawać dowolne wartości, grupować je w zestawy i ogólnie uzyskiwać do nich dostęp do woli z widoków związanych z tym modelem. _Zalety:_ Niskie obciążenie pamięci masowej, bardzo rozszerzalne, możliwe do przeszukiwania _Wady:_ Więcej sprzężeń sql Moją inną opcją jest użycie pewnego rodzaju znaczników lub par klucz-wartość przechowywanych bezpośrednio w modelach standardowych. Zasadniczo może to być po prostu dowolna metoda o niskim nakładzie, niezależnie od XML lub dosłownych łańcuchów. Widok i formularz wygenerowany z przechowywanych danych przejmą kontrolę nad walidacją i reorganizacją aktualizacji. Wtedy po prostu zrzuci dane z powrotem jako znak/blob/cokolwiek. Coś takiego: <datapoint type='char' value='coś' required='true' /> <datapoint type='data' value='01/01/2001' required='false' /> ... _Plusy: _ Nie potrzeba łączeń, Aktualizacje walidacji i widoków są oddzielone od danych _Wady:_ Znacznie większe obciążenie pamięci, ograniczona pojemność wyszukiwania dodatkowej zawartości * * * **Moje pytanie brzmi:** Jeśli nie mieszkałeś w ograniczeniach narzucić przez swoją firmę, jakiej metody byś użył? Czemu? Jakie korzyści lub pułapki widzisz dla mnie jako małej firmy, która stara się pomagać innym małym firmom? _Dla wyjaśnienia, nie pytam o niestandardowe elementy UI, te, które mogę obsłużyć za pomocą formularzy i fragmentów szablonów. Pytam przede wszystkim o przechowywanie danych i odzyskiwanie niestandaryzowanych danych w stosunku do wzorcowego modelu._


title: Aplikacja JEE kompatybilna z urządzeniami mobilnymi

text: Czy korzystanie z frameworków takich jak AngularJS/Backbone JS/Bootstrap/Foundation itp. automatycznie powoduje, że aplikacja internetowa jest kompatybilna z urządzeniem mobilnym? Czy istnieje podejście do projektowania/projektowania, aby aplikacje (nowe lub istniejące) były kompatybilne z urządzeniami mobilnymi? Mówiąc prosto; czy istnieje framework/wytyczne/biblioteka, z których mogę korzystać w warstwie interfejsu aplikacji webowej JEE, dzięki czemu jest ona automatycznie kompatybilna zarówno z przeglądarkami komputerowymi, jak i urządzeniami mobilnymi (telefon z systemem iOS, iPad, telefony z systemem Android i cała ich gama).


title: Dlaczego nie całkowicie rozdzielimy frontendowych frameworków JS i backendowych API?

text: Ilekroć wdrażamy framework frontendowy w rodzaju Backbone, AngularJS itp., istnieje proces integracji z technologiami backendowymi, takimi jak NodeJS, Rails, Yii itp. (jak konfigurowanie tras, generowanie widoków lub dodawanie bibliotek itp.), który różni się w zależności od co wybierasz na front-endzie i co bierzesz na backendzie, moje pytanie brzmi: dlaczego nie odseparujemy całkowicie procesu, aby front-end (HTML, CSS, JS itp.) był całkowicie niezależny, podczas gdy backend Interfejsy API zwracają nam tylko pożądane dane, tak jak robimy to w przypadku tworzenia aplikacji mobilnych.


title: Modyfikowanie licencji open-source z opcjonalnymi żądaniami

text: Ogólne pytanie dotyczące licencji open-source: wiem, że nie możesz ich samodzielnie modyfikować (tj. „GPL, z wyjątkiem tego, że nie możesz tego zrobić”), a pisanie własnych jest generalnie złym pomysłem. Czy jednak możliwe jest dodanie jeźdźców „Proszę zrób to”? Na przykład powiedz, że chcę coś licencjonować na GPL. Czy mogę dodać klauzulę, która mówi "Jeśli wydasz forka tego oprogramowania, niniejszym prosimy o kontakt z tym a takim i powiadomienie ich"`? Czy to się liczy jako inna licencja? Jeśli o to chodzi, czy licencja jest w ogóle odpowiednim miejscem na takie żądanie, czy też powinna trafić do pliku README (a jeśli tak, to w jaki sposób miałbyś go rozpropagować)? **Edycja:** Dla wyjaśnienia pytam przede wszystkim, czy jest to coś, co **da się** zrobić, a dopiero w drugiej kolejności, czy to dobry pomysł (podejrzewam, że nie, a pierwsze odpowiedzi to potwierdzają). Nie mam zamiaru tego robić, jest to po prostu inspirowane niezwiązaną ze sobą dyskusją.


title: Cel budowania pliku za pomocą Make

text: Próbuję zrozumieć, jaki jest cel tworzenia plików za pomocą poleceń takich jak `cmake ..` i `make`, próbowałem szukać w Internecie, ale nie ma zwięzłego wyjaśnienia celu, który mógłbym znaleźć. Ponadto konieczne jest użycie `make` w folderze projektu, który nie jest zbudowany w celu użycia źródła (C++) w innych projektach. Wiem, że może to być uproszczone pytanie, ale ponieważ jestem dość nowy w tworzeniu plików, wszelkie informacje lub odniesienia byłyby bardzo mile widziane.


title: Jak zdobyć pieniądze od niechętnego klienta?

text: Skończyłem tę stronę 4 miesiące temu. (Chciałbym zachować anonimowość strony - jeśli ten post pojawi się w wyszukiwarce Google dla swoich klientów, odbije się to negatywnie na jego biznesie). Zrobiliśmy kilka iteracji, był bardzo wymagający (i wścibski), spełniłem wszystko, czego chciał, w tym rozmiar czcionki w stopce, który mocno zniszczył estetykę. (i bawił się też kolorami, przez co wyglądało to niebezpiecznie dziecinnie i nieprofesjonalnie) W każdym razie był bardzo przyjazny podczas całego procesu. Po spełnieniu wszystkich wymagań zgodziłem się zbudować stronę za 950 funtów i obciążyłem go z góry 150 funtów, aby nie chciał się ratować po rozpoczęciu pracy. Wymagania ciągle się zmieniały, wprowadziłem poprawki i ukończyłem stronę z zaledwie 5 dniowym opóźnieniem, w.r.t. w uzgodnionym terminie, pomimo wszelkich zmian w wymaganiach. To było cztery miesiące temu. Od tego czasu nigdy nie odpowiadał na moje telefony ani nie odpowiadał na moje e-maile. Jak mogę odzyskać od niego pieniądze? Naprawdę potrzebuję porady w tej sprawie, już drugi raz ktoś mi nie zapłacił. ### Punkty do odnotowania: 1) Nie podpisaliśmy żadnej umowy - był przyjacielem znajomego. 2) Nadal mam hasła do ftp, cpanel i wszystkiego. Nie chcę wyłączać strony. jakoś nie wydaje mi się to etyczne. 3) Umieściłem to na stackoverflow i zostało zamknięte, zostałem tutaj przekierowany. **EDYTUJ** Dziękuję wszystkim za ogromne wsparcie. Pomyślałem, że powinienem podać więcej szczegółów: On jest gospodarzem witryny. tak jak w, kazałem mu się zarejestrować i użyć własnej karty debetowej, aby kupić nazwę domeny, przestrzeń internetową i wszystko inne, mam tylko hasła do jego cpanela i ftp (cóż, mam dostęp do cpanel, który daje mi dostęp do wielu rzeczy) Teraz, jeśli dam mu ostrzeżenie, może zmienić hasło na cpanel, ale jestem prawie pewien, że nie wie o ftp. **AKTUALIZACJA** Za radą `Anny Lear` wysłałam mu w sobotę ostateczną fakturę z ostrzeżeniem, że wyłączę stronę, jeśli nie odpowie na mój e-mail do tego wtorku. Nie odpowiedział jeszcze na moje e-maile, ale dam ci znać, jak to działa. Dziękuję bardzo za wsparcie. Po wtorku planuję umieścić stronę zapasową, jak zasugerował „Darknight”. **Punkty** Nie mam własnej przestrzeni serwerowej, jednak mam kilka przestrzeni webowych moich klientów, ale nie chcę ich używać do takich celów. **WYNIKI** Po mojej kontynuacji faktury końcowej i ostrzeżeniu, klient odmówił niczego. Rada robotnika wydawała mi się najrozsądniejsza. Zdublowałem witrynę w mojej własnej przestrzeni internetowej, zalogowałem się do jego panelu CPanel i przesłałem witrynę do mojej witryny. Gdy to zrobiłem, umieściłem na mojej stronie stronę wstrzymania, aby każdy odwiedzający witrynę zobaczył stronę wstrzymania (nic podejrzanego, tylko stronę w budowie). Oczywiście to wszystko było bardzo słabe w tym sensie, że gdyby mój klient wiedział o CPanel, mógłby po prostu usunąć przekierowanie. Ale miałem tę drugą szansę, żeby do niego wrócić i liczyłem na to, że nic nie wie. Dwie godziny później otrzymałem telefon od wspomnianego klienta (i zachowywał się tak, jakby nie otrzymał żadnej z moich wiadomości głosowych ani e-maili) i poprosił mnie o przywrócenie witryny. Oczywiście powiedziałem, że muszę mi zapłacić, a dwa dni później zrobił przelew bankowy. Jego witryna jest już uruchomiona i działa. Chciałem tylko bardzo podziękować wszystkim, byłem bardzo zdesperowany, kiedy zacząłem to pytanie. Jesteście najlepsi, nie tylko kazałeś mi wyciągnąć lekcję (co zrobiłem), ale także dałeś mi bardzo, bardzo dobre rozwiązanie, które wydawało mi się bardzo etyczne (prawie) dla mnie. WIELKIE podziękowania dla robotnika! * * * Gdybym mogła wybrać więcej niż jedną odpowiedź, wybrałabym też "Anna Lear", ale ponieważ poszłam za radą robotnika, musiałam to wybrać. Bardzo dziękuję osobom, które uważały, że nie należy wyłączać strony bez konsultacji z prawnikiem.


title: Jak Delphi rozwija się na rynku? Czy warto jeszcze zrobić projekt w Delphi?

text: Używam Delphi od 1999 roku, ponieważ jest wizualny, szybki, pomocny i zaangażowany w dobre role programistyczne. To właśnie mówię moim znajomym na uniwersytecie i ankieterowi, kiedy staram się o pracę w dowolnym software house'ie. Ale jestem bardzo krytykowany za używanie Delphi i rozwój Windows. To uprzedzenie IMHO. Mówią, że powinienem używać technologii open source i programować w Javie, Ruby, Pythonie i innych „nowych” technologiach, a powinienem programować tylko dla sieci i międzyplatformowych. Mówię im, że w razie potrzeby robię kod w Javie i PHP, ale nie lubię języków skryptowych i bajtkodowych, ale nie miałbym znaczenia, gdyby nagle Embarcadero zrobił wersję Delphi z Javą, liczy się IDE i koncepcje (RAD Studio nadal ma .NET i C++). „Uczę” ich, że te języki są prawie stare jak Pascal. Mówię im, że Delphi jest tak potężny, że mogę z nim zrobić prawie wszystko (ze szczególnym szacunkiem dla VCL) i że staje się bardzo dobrym wieloplatformowym kompilatorem oprogramowania, z opcjami dla OS-X i iOS. Myślę przy tworzeniu LT o Delphi, aby zaprezentować je ludziom, ponieważ po dyskusji wychodzą nie przekonani. A potem zawsze zatrzymuję się później i myślę, co jeśli naprawdę się mylę. Ale potem otwieram StackOverflow i widzę wszystkich tych wspaniałych profesjonalistów, którzy pracują z Delphi i tak dużo wiedzą, i myślę wstecz, jak mogę się mylić!? Moi klienci regionalni nie dbają zbytnio o to, jak powstaje oprogramowanie, o ile działa i jest tanie. 1. Więc się mylę, czy nie?** 2. **A co z akceptacją Delphi na rynku Twojego kraju?** 3. Czy nadal jest miejsce dla wyspecjalizowanych specjalistów Delphi, czy wszyscy chcą po prostu C# i dotNET przychodzi do systemu Windows? 4. Czy warto robić projekt w Delphi i za jakiś rok zrobić wersję dla sieci (co potrwa dłużej biorąc pod uwagę moje umiejętności)? _Proszę, jeśli nie czujesz się komfortowo w tym pytaniu, ponieważ mogą być odpowiedzi oparte na opiniach, po prostu skup się na punkcie 2, który może być oparty na ogólnych danych statystycznych._ Jestem swoim własnym szefem i rozpoczynam duży projekt. Muszę podjąć decyzję, czy pójdę na Delphi, czy na Web. Biorąc pod uwagę, że z Delphi mogę ukończyć projekt znacznie szybciej (doświadczenie i zaplecze), bardzo ważne jest, aby wiedzieć, czy wybieram właściwy. Muszę wziąć pod uwagę, że mam wiele lat pisanego kodu, który stworzyłem i ponownie wykorzystuję.


title: Dlaczego element A jest często używany zamiast przycisku BUTTON do projektowania stron internetowych?

text: Czy jest jakiś szczególny powód, dla którego ludzie używają tagu A do naśladowania PRZYCISKU w HTML i JavaScript?


title: Jaki dobry podręcznik do matematyki powinienem mieć na biurku podczas nauki Haskella?

text: Właśnie zacząłem uczyć się Haskella i wygląda na to, że nie można zagłębić się w języku bez wyczucia (a przynajmniej wystawienia) na pewne gałęzie matematyki. Niestety mam duże dziury w takich obszarach i zastanawiam się, jaki jest dobry podręcznik wprowadzający, który obejmuje wszystkie koncepcje, których używa Haskell? Co jest warte, mam tytuł licencjata inżyniera (nie comp-sci lub EE), chociaż matematyka, z którą miałem do czynienia, była odmianą machania rękami i zapamiętywania. Wziąłem także wstęp do kursu comp-sci, na którym zrobiliśmy kilka tygodni oCaml.


title: Najlepsza praktyka wykonywania Kontroli Złożonej z powtarzaniem czynności

text: Najlepsza praktyka tworzenia kontrolki złożonej z czynnością powtarzania Jest oparta na szablonach, obsługuje stronicowanie za pomocą menu rozwijanego i 2 przycisków Powinna mieć również obsługę zdarzeń Potrzebna do pracy jako pakiet dla (więc nie chciałem dać możliwości edycji szablonu lub wiele opcji programowania ) **Kluczowe elementy do odpowiedzi :** 1. Niestandardowy repeater, Composite Control , Custom Control z funkcjonalnością podobną do repeatera lub `CompositeDataControl`? 2. Jak przygotować i pobrać dane, aby uniknąć powtarzania procesów, które wykonałem tworzenie i inicjowanie wszystkich kontrolek w `CreateChildControls` ale wydaje się, że działa w każdym żądaniu, Czy dobrze jest pozwolić wszystkim kontrolkom utworzonym na każdym postbacku lub Mamy do kontrolowania tego procesu, jak sugerujesz 3. Bo chcemy wiązać się przez repeater, czy powinniśmy zrobić coś związanego z wiązaniem danych w kontrolce złożonej? W moim przykładzie powiązałem repeater (tylko repeater) w metodzie, która będzie uruchamiana przy każdym uruchomieniu w każdym poważnym zdarzeniu, takim jak `OnLoad` (Koncepcyjnie powiązaliśmy repeater, a nie CC) 4. Jak utworzyć właściwość taką jak Page Liczba trwała przez postbacki używa `viewStates` lub jeśli jakiekolwiek kliknięcie przekażemy nowe informacje o stronie z sesji do kontrolki, powinno to wykonać zadanie ? Jaka jest twoja strategia stronicowania, w prostych liniach 5. Czy powinienem przechowywać cokolwiek z repeatera w **ViewState/Control State** i przypisać im właściwość? chcesz poznać Twoją decyzję, zastosować najlepsze praktyki, które znają i sugerują inni profesjonaliści


title: Alternatywy dla dziedziczenia na złożonych strukturach?

text: Pracuję nad projektem ASP.NET Webforms przy użyciu wzorca MVP (którego prezenterzy, jak możesz wiedzieć, używają wzorca kontrolera strony). Dostaję dość złożony łańcuch dziedziczenia dla moich kontrolerów. Poniżej przedstawiam mały przykład struktury, z którą mam do czynienia (jest to znacznie większa struktura w mojej aplikacji): ![tutaj wpisz opis obrazu](http://i.stack.imgur.com/zT5Is.jpg) Dużo kodu wśród tych kontrolerów jest zduplikowany (tj. tworzenie ciasteczek w RegisterPageController i LoginPageController, dostęp do danych Klienta w ProfilePage i BuyProductPage...), więc zdecydowałem się na systematyczne stosowanie wzorca Szablon i stworzenie struktury dziedziczenia, która pozwoliłaby mi na ponowne wykorzystanie kod, jak to możliwe (tj. Tworzenie AuthenticatedPageController, który sprawdza, czy użytkownik jest uwierzytelniony, a następnie BuyProductPage i ProfilePageController dziedziczą z tej klasy, ponownie wykorzystując część uwierzytelniającą kodu). Jednak w miarę postępów w refaktoryzacji mojego kodu i stosowania kolejnych wzorców Szablon, łańcuch dziedziczenia staje się coraz bardziej złożony, a czasami próba stworzenia nowej hierarchii wśród wszystkich moich innych klas staje się zbyt żmudna. Zastanawiałem się, czy istnieje lepsze podejście do rozwiązywania moich problemów. Czytałem o kompozycji (przeczytałem ten post Alternatywa dla "dziedziczenie kontra kompozycja?"), ale nie jestem pewien, jak to zaimplementować ani czy byłoby to najlepsze podejście w moim przypadku. Czy ktoś może mnie oświecić? Dziękuję Ci.


title: Wyjaśnienie sztuczki Google Gravity

text: Nie jestem zbytnio programistą JS, ale natknąłem się na tę witrynę o nazwie Google Gravity (ci, którzy jej nie używali, spróbuj tam przeprowadzić wyszukiwanie - zdziwisz się), która jest zremasterowaną stroną główną Google. Od tego czasu myślałem i zastanawiałem się, jak dowiedzieć się więcej o tym, jak facet to zaimplementował. Próbowałem googlować, ale nie mogłem znaleźć dobrego wyjaśnienia implementacji. Wszyscy guru JS/CSS, czy możecie wskazać mi miejsce, w którym mogę dowiedzieć się więcej? Znam już podstawy pracy z jQuery i AJAX. Dzięki, Yati Sagade


title: Jakie są plusy i minusy wdrożenia tego wymogu w różnych warstwach?

text: Mam aplikację CRUD dla `<DomainObject>`s. Są utrwalane w bazie danych. Pojawiło się nowe wymaganie: śledź obiekty `<DomainObject>, które zostały utworzone od momentu otwarcia aplikacji, aby użytkownik mógł zobaczyć, co zrobił. Widzę trzy sposoby na zaimplementowanie tego: 1. za każdym razem, gdy aplikacja jest otwierana, twórz nowy identyfikator sesji (z braku lepszej nazwy) i przechowuj go w bazie danych. Przechowuj identyfikator sesji jako klucz obcy dla każdego `<DomainObject>`. Użyj niestandardowego zapytania, aby uzyskać dostęp do danych (tj. `wybierz * z DomainObject, gdzie sessionid = "currentSessionId"`) 2. tak samo jak 1., z wyjątkiem filtrowania w warstwie biznesowej 3. nie śledź tych danych w Baza danych. Zamiast tego, niech model śledzi nowy `<DomainObject>`s **Problem:** Nie mam wystarczającego doświadczenia, aby zrozumieć konsekwencje każdego podejścia. Na przykład wygląda na to, że 1. umieszcza logikę biznesową w bazie danych. Ale 3. nie zachowuje niektórych danych. **Jakie są zalety i wady każdego podejścia?**


title: Czy bazy danych NoSQL mogą być wykorzystywane w firmach e-commerce do zarządzania zamówieniami?

text: Czy możliwe jest wykorzystanie nierelacyjnej bazy danych w systemie zarządzania zamówieniami dla firmy e-commerce z dużą ilością zamówień każdego dnia, takiej jak Amazon? Czy w tym scenariuszu można wykorzystać zalety nierelacyjnych baz danych (skalowalność, niezawodność itp.), czy też nie można zrezygnować z właściwości ACID i tym samym nakazać, aby do tego celu używać tylko relacyjnej bazy danych?


title: Dlaczego po każdym ponownym uruchomieniu moje lokalne witryny .NET wymagają czasu na załadowanie po raz pierwszy?

text: Zajmuję się tworzeniem witryn w oparciu o platformę .NET. Zazwyczaj wdrażam te witryny w lokalnych usługach IIS, aby móc je przetestować i zobaczyć ich funkcjonalność przed uruchomieniem. Jednak za każdym razem, gdy ponownie uruchamiam system Windows, wydaje się, że witryny zabierają dużo czasu na pierwsze uruchomienie. Wiem o JIT i jestem świadomy tego pytania, ale nie odpowiada ono na moje pytanie. Czy JIT dzieje się przy każdym ponownym uruchomieniu systemu Windows? Czy jest to związane z tworzeniem procesu w3wp.exe? Dlaczego witryny są tak wolne przy pierwszym żądaniu po każdym ponownym uruchomieniu?


title: Pakiet oprogramowania zawierający biblioteki LGPL jako archiwum Java Fat-Jar

text: W pracy wdrażamy pakiet oprogramowania aplikacji Java (napisanej przez nas), który ma wiele zewnętrznych zależności, z których większość to biblioteki innych firm na licencji LGPL i BSD, rozpowszechniane jako archiwa JAR. Obecnie wdrażamy klienta testowego oprogramowania, które jest rozprowadzane jako pojedyncze archiwum fat jar java, utworzone przez wtyczkę montażową Maven, która wykonuje mniej więcej następujące czynności: * wyodrębnia wszystkie zależności * ponownie składa je jako pojedyncze archiwum jar Wszystkie pliki klas są wyodrębniane, a następnie pakowane z powrotem do pojedynczego pliku JAR z naszą własną aplikacją. Zdałem sobie sprawę, że również niektóre pliki zostają nadpisane, głównie pliki LICENSE.txt, z powodu tej samej nazwy. Zastanawiam się, czy jest to poprawne i zgodne z licencją LGPL. Jaki byłby lepszy sposób dystrybucji oprogramowania? Jak najlepiej zorganizować ten konkretny pakiet? Nie włączyliśmy żadnego kodu źródłowego bezpośrednio do naszych plików źródłowych, ani nie zmieniliśmy plików binarnych. Kod źródłowy bibliotek dołączony jest do całego produktu. (Jest to oprogramowanie używane wewnętrznie, nie wdrażane u klientów ani nic takiego, ale myślę, że to nie ma znaczenia.) PS: Zadałem to samo pytanie na Stack Overflow i zasugerowano, aby zadać je tutaj.


title: Czy podczas programowania dla nowej platformy zmieniasz mapowanie klawiatury na to, co znasz?

text: Jestem programistą Windows od dekady lub dłużej, a obecnie robię swój pierwszy projekt na Macintosha. Jedną z rzeczy, które doprowadzają mnie do szału, jest to, jak inaczej mapuje się klawiatura. Są małe rzeczy, takie jak to, że odpowiednikiem ALT+TAB w systemie Windows jest COMMAND+TAB, który dla standardowej klawiatury USB kończy się na WINDOWS+TAB. Są też naprawdę irytujące rzeczy, na przykład manewrowanie tekstem w dokumencie jest inne. W systemie Windows, jeśli chcę zaznaczyć tekst linii, mogę umieścić kursor na końcu klawiszem END, przytrzymać SHIFT i nacisnąć HOME. Na Macintoshu klawisz END przenosi nas na koniec dokumentu (co, szczerze mówiąc, jest nieco logiczne), a przytrzymanie klawisza SHIFT i klawisza HOME po prostu zaznacza cały dokument aż do kursora. Klawisze ALT+strzałki są bardziej tym, czego szukam. Moje podejście do tego polegało zasadniczo na tym, żeby się wyssać, nauczyć się nowego sposobu robienia rzeczy i przystosować się do idei poruszania się tam iz powrotem. Moje rozumowanie jest takie, że prawdopodobnie nie będzie to ostatnia nowa platforma, dla której programowałem w mojej karierze, i prawdopodobnie przyniesie mi korzyści zarówno jako programiście, jak i użytkownikowi komputera, aby być elastycznym. Ponadto zawsze będą komputery, do których się udaję, na których mapowanie klawiatury nie jest jeszcze na miejscu lub może nie być opcją (np. pomoc w rozwiązywaniu problemów z maszyną QA). Poza tym nie wszystko, do czego jestem przyzwyczajony w Windowsie, będzie miało odpowiednik dla Macintosha. Jednak w tej chwili byłbym znacznie bardziej produktywny, gdybym miał uczynić rzeczy bardziej podobnymi do systemu Windows. Czy dla osób, które pracowały z wieloma platformami, zmieniasz mapowania, aby wszystko przypominało to, co znasz? A może robisz to, co ja obecnie robię, czyli podlizywasz się i uczysz się różnych sposobów robienia rzeczy?


title: Znaczenie długości programu?

text: * Dlaczego długość programu jest ważna? * Jaką to robi różnicę? [Poza tym, że krótki program wygląda „dobrze”.]


title: Przypadki użycia dla node.js i c#

text: Wykonuję sporo pracy w ASP.NET (C#, MVC), ale większość to typowy web development. Wykonuję architekturę Restful przy użyciu repozytoriów CRUD. Większość moich klientów nie ma zbyt wielu zaawansowanych wymagań w swoich aplikacjach. Patrzę teraz na node.js i jego implikacje wydajnościowe (jestem uzależniony od szybkości), ale nie zagłębiałem się w to aż tak bardzo. Zastanawiam się, czy * node.js może realistycznie zastąpić moje typowe tworzenie stron internetowych w C# i ASP.NET MVC (nie przepisywanie istniejących aplikacji, ale podczas pracy nad nowymi) * node.js może uzupełnić aplikację ASP.NET MVC, dodając trochę asynchronicznej dobroci z istniejącą architekturą. Czy istnieją przypadki użycia dla/przeciwko C# i node.js? ### Edytuj Uwielbiam ASP.NET MVC i jestem bardzo podekscytowany tym, do czego zmierza. Próbuję tylko sprawdzić, czy istnieją specjalne przypadki użycia, które faworyzują node.js


title: Czy można mieć wiele potwierdzeń w jednym teście jednostkowym?

text: W komentarzu do tego wspaniałego postu Roy Osherove wskazał na projekt OAPT, który ma na celu uruchamianie każdego potwierdzenia w pojedynczym teście. Jest to napisane na stronie głównej projektów: > **Właściwe testy jednostkowe powinny zakończyć się niepowodzeniem z dokładnie jednego powodu**, dlatego > powinieneś używać jednego potwierdzenia na test jednostkowy. A także Roy napisał w komentarzach: > Moja wytyczna jest zazwyczaj taka, aby testować jedno logiczne POJĘCIE na test. możesz mieć wiele asercji na tym samym _obiekcie_. zazwyczaj będą to te same > testowane koncepcje. Myślę, że są sytuacje, w których potrzeba wielu asercji (np. Guard Assertion), ale generalnie staram się tego unikać. Jaka jest Twoja opinia? Podaj prawdziwe przykłady słów, gdy wiele asercji jest naprawdę _potrzebnych._


title: Jak powinienem rozwinąć Jenkins, aby pomóc mi uwolnić?

text: Wypychanie nowych wersji Sparkle naszych wewnętrznych aplikacji jest uciążliwe. Muszę wykonać kompilację, utworzyć plik z uwagami do wydania, podpisać .zip kluczem prywatnym i dodać nowy wpis do pliku appcast, łącząc wszystko razem. Bardzo bym chciał, gdyby Jenkins mógł pomóc: wykorzystaj komunikaty o zatwierdzeniu do informacji o wydaniu i automatycznie wykonaj resztę. Czy powinienem pisać nową wtyczkę Jenkins, czy używać skryptów powłoki, czy jest już coś, co zrobi to, czego chcę? (Szybkie Google nic nie znalazło).


title: Jakie są powody, aby skrócić maksymalny wiek logo do zaledwie 8 dni?

text: Większość witryn ustawia `max-age=31536000` (1 rok) w nagłówkach `Cache-control` zasobów statycznych, takich jak obrazy logo. Przykłady: * YouTube * Yahoo * Twitter * BBC Ale jest chlubny wyjątek: logo Google ma `max-age=691200` (8 dni). Sprawdziłem nagłówki w logo Google w przeszłości i na pewno minął rok. (Kiedyś był częścią sprite'a, a teraz jest samodzielnym obrazem logo, ale to prawdopodobnie kolejne pytanie...) Jakie mogą być ważne powody techniczne, dla których chcieliby skrócić czas życia pamięci podręcznej do zaledwie 8 dni? Strona główna Google jest jedną z najlepiej zoptymalizowanych stron na świecie, więc wyobrażam sobie, że jest ku temu dobry powód. * * * **Edytuj:** Zanim odpowiesz, upewnij się, że rozumiesz te punkty: * Nikt nie używa krótkich okresów życia „maksymalnego wieku”, aby umożliwić modyfikowanie statycznego zasobu w przyszłości. Kiedy go modyfikujesz, po prostu podajesz go pod innym adresem URL. Więc nie, to nie ma nic wspólnego z doodlami Google. Pomyśl o tym: nawet gdyby Google nie rozumiało tej podstawowej sztuczki HTTP, 8 dni i tak nie byłoby odpowiednie, ponieważ tylko ci użytkownicy, którzy _nie_ mają oryginalnego logo w pamięci podręcznej, zobaczą doodle w dniu Doodle – a potem ta grupa użytkowników będzie oglądać doodla przez kolejne 8 dni po tym, jak Google zmienił go z powrotem :) * Serwery internetowe nie martwią się „zapełnianiem” pamięci podręcznych klientów (lub serwerów proxy). Klient zarządza tym sam – kiedy osiągnie swój własny limit miejsca, po prostu zaczyna odrzucać elementy o najniższym priorytecie, aby zrobić miejsce na nowe elementy. Wynik priorytetu jest oparty na pytaniu „Jak prawdopodobne jest, że odniosę korzyści z buforowania tego adresu URL?”, co jest niczym zrobić z wartością „max-age”, którą serwer wysłał, gdy pierwotnie zażądano adresu URL; jest to heurystyka oparta na „częstotliwości” żądań dla tego adresu URL. „max-age” po prostu pozwala serwerowi ustawić punkt odcięcia – czas, w którym klient powinien wyrzucić przedmiot bez względu na to, jak często jest on ponownie używany . Byłoby bardzo miłe i ufne dla dalszego klienta/proxy, aby polegać na serwerach pochodzenia „wstrzymujących się” przed zapełnieniem swoich pamięci podręcznych, ale nie sądzę, że żyjemy w tym świecie ;)