title: Przepływ pracy zespołu Git pracujący z wieloprojektowym rozwiązaniem Sitecore przy użyciu TDS

text: Jesteśmy zespołem 8-10 programistów pracujących nad różnymi częściami instancji Sitecore. W przeszłości używaliśmy SVN, a ostatnio (i z powodzeniem) Hg, ale przechodzimy do używania Git jako naszej podstawowej kontroli źródła. Pracujemy z Sitecore 7 i używamy najnowszego TDS firmy Hedgehog. Jeśli ma to znaczenie, używamy również biblioteki Glass.Mapper.sc od Mike'a Edwardsa. Problem, z którym się spotykamy, zwłaszcza w porównaniu z tym, jak łatwo było z Hg, polega na tym, że łączenia to koszmar. Nie pomaga to, że większość naszego zespołu jest nowa w Git, ale większość z nas używała przynajmniej Hg, więc nie jest to wielki skok. Mieliśmy tak wiele problemów, że przeszliśmy do konfiguracji Merge-master, w której liderzy zespołów zajmują się wszystkimi scaleniami. Moje pytanie brzmi: Od osób korzystających z tych narzędzi, co byś zaproponował jako najlepszy przepływ pracy i wspierającą konfigurację? Członek zespołu zasugerował zmianę bazy, aby zmniejszyć konflikty, ale to nie ma znaczenia. Nasz przepływ pracy Hg, który działał bardzo dobrze, to: 1) Zatwierdzaj lokalne zmiany tyle razy, ile potrzeba. 2) Ściągnij zmiany z serwera i zaktualizuj do zdalnej gałęzi po każdym scaleniu. 3) Synchronizuj TDS. Robimy to po ściągnięciu, aby nie nadpisywać pliku .scproj podczas łączenia 4) Zatwierdź scalenie i synchronizację TDS 5) Odeślij wyniki z powrotem do zdalnego Nie mieliśmy koszmarów scalania, a TDS były utrzymywane w czystości. Próbowaliśmy dostosować coś podobnego w Git i każdego tygodnia marnowaliśmy dużo czasu na rozwiązywanie problemów. Obecnie każdy programista pracuje w swojej własnej gałęzi z powodu błędów scalania pracujących ze wszystkimi w masterze. Typ problemów z scalaniem, które widzę, wydaje się wynikać głównie z tego, co Git łączy automatycznie. Zdecydowanie nie chcę za każdym razem scalać wszystkiego ręcznie, ale nie miałbym nic przeciwko ręcznemu łączeniu plików projektu. Używamy Sourcetree i mam BeyondCompare Pro. Wszelkie sugestie, zwłaszcza pochodzące z udanych wdrożeń, będą mile widziane. Jeśli są po prostu zmiany w konfiguracji, które można wprowadzić lub zmiany w naszym przepływie pracy, aby uczynić proces bardziej niezawodnym, chciałbym się o nich dowiedzieć.


title: deklaracja i definicja

text: Ludzie mówią, że definicja jest używana, gdy zadeklarowane rzeczy mają przydzieloną trochę pamięci. Jeśli zadeklaruję klasę klasy fish { char* name; typ int; //coś, czego nie wiem o rybach }; int main() { ryba a; zwróć 0; } Czy powinno to oznaczać, że jest to zadeklarowana ryba czy zdefiniowana ryba? Pozwól mi najpierw spróbować! nazywa się to zdefiniowaną rybą! Teraz zostawiam punkt kontrolny w //coś ..... (jest to poprawna deklaracja czegoś, czego po prostu nie wiem) Czy wiesz, co jest tam, co w // jakimś debuggerze może nigdy nie dotrzeć? Czy to również oznacza, że nie ma na to przydziału pamięci. Będę bardzo smutny słysząc odmowę.


title: Jak najlepiej praktycznie nauczyć się koncepcji/zasad OOP?

text: Chciałem nauczyć się języka programowania obiektowego, nie chcę go w żadnym celu tylko po to, by poznać całą koncepcję OOP. Czy ktoś może mi powiedzieć, jakiego języka powinienem zacząć się uczyć?


title: Czym jest „Sposób PHP”?

text: Widzę ciągłe odniesienia do „Drogi”, takie jak opisy konkretnego frameworka lub aplikacji jako „Pythonic”, konkretna osoba jako „haker Perla” lub „prawdziwy kod Ruby”, ale gdzie są „hakerzy PHP”, aplikacje "PHP-ic", "prawdziwy styl PHP"? To sprawiło, że pomyślałem - czy PHP ma w ogóle określony styl? Powiedzenie, że PHP można łatwo „zmienić” na inne style, nie ma znaczenia, podobnie jak w przypadku każdego rozsądnego języka. Wszelkie wejście bardzo cenione.


title: Rozproszony SVN?

text: Pracuję dla dużej biurokratycznej (i paranoicznej) organizacji, która dostarcza SVN dla swoich zespołów programistycznych. Współpracuję z zewnętrznym dostawcą (na ich stronie) i obecnie udostępniamy kod za pośrednictwem eksportu SVN i plików poprawek. Jedyny sposób, w jaki mogę przesyłać pliki, to skrzynka FTP lub e-mail. Chciałbym mieć lepszy sposób na pracę. Obecnie lobbuję, aby uzyskać jakiś rodzaj konfiguracji systemu DCVS, najlepiej hostowanego w chmurze. Brak tego, że chcę lepszego sposobu na zarządzanie utrzymywaniem synchronizacji repozytoriów SVN. W międzyczasie (lub jeśli nie uda mi się uzyskać DCVS), jak synchronizować dwa repozytoria SVN? Jak najlepiej zarządzać eksportem repozytorium? Jak zarządzać przychodzącymi zmianami?


title: Czy to kiepska technika, aby funkcje w ramach klasy były od siebie zależne w sposób „kaskadowy”?

text: Jestem całkiem nowy w PHP i OOP. Powiedziawszy to, chciałem wiedzieć, jak niezależne funkcje powinny być w klasie. Wiem, że każda funkcja powinna być odpowiedzialna za robienie tylko jednej rzeczy. Jednak, jak możesz zobaczyć w mojej klasie poniżej, od czasu do czasu tworzę funkcje, które budują się nawzajem w sposób „kaskadowy”. Czy to dobra praktyka? Czy istnieje inny sposób, w jaki powinienem konstruować tę klasę/te typy funkcji? Chcę mieć pewność, że rozwijam dobre nawyki. Z góry dziękuje za twoją pomoc. class PubMedQuery { private $query; prywatne $searchParameters; prywatny $searchURL; prywatne $fetchParameters; prywatny $fetchURL; prywatne $wyniki wyszukiwania; prywatne $fetchResults; prywatne mecze $; prywatny $matchRegex; prywatne $adresy e-mail; funkcja publiczna __construct($zapytanie) { $to->zapytanie = $zapytanie; } public function setSearchParameters() { $this->searchParameters = array( 'db' => 'pubmed', 'term' => $this->query, 'retmode' => 'xml', 'retstart' => ' 0', 'retmax' => '1000', 'usehistory' => 'y' ); } public function getSearchParameters() { return $this->searchParameters; } public function setFetchParameters() { $this->fetchParameters = array( 'db' => 'pubmed', 'retmax' => '1000', 'query_key' => (string) $this->searchResults->QueryKey, 'WebEnv' => (string) $this->searchResults->WebEnv ); } public function getFetchParameters() { return $this->fetchParameters; } public function setSearchURL() { $this->baseSearchURL = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils /esearch.fcgi?'; $this->searchURL = $this->baseSearchURL . http_build_query($this->getSearchParameters()); } funkcja publiczna getSearchURL() { return $this->searchURL; } public function setFetchURL() { $this->baseFetchURL = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?'; $this->fetchURL = $this->baseFetchURL . http_build_query($this->getFetchParameters()); } public function getFetchURL() { return $this->fetchURL; } funkcja public setSearchResults() { $this->setSearchParameters(); $this->setSearchURL(); $this->searchResults = simplexml_load_file($this->getSearchURL()); } funkcja publiczna getSearchResults() { $this->setFetchParameters(); $this->setFetchURL(); return file_get_contents($this->getFetchURL()); } public function setEmailAddresses() { $this->matches = array(); $this->matchRegex = '/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4} /'; preg_match_all($this->matchRegex, $this->getSearchResults(), $this->pasuje); $this->adresy e-mail = array_unique(array_values($this->matches[0])); } funkcja publiczna getEmailAddresses() { $this->setSearchResults(); $this->getSearchResults(); $this->setEmailAddresses(); return $this->adresy e-mail; } } //Przykład użycia wyszukiwanego hasła "łuszczyca" $query = new PubMedQuery('łuszczyca'); echo implode('<br />', $query->getEmailAddresses());


title: Jak mogę uzasadnić testowanie oprogramowania kierownictwu?

text: Pracuję dla małej firmy (mniej niż 200 pracowników), której grupa oprogramowania stanowi tylko niewielką część naszego personelu (4 pracowników, czasami z kilkoma kontrahentami). Nasza czwórka poczyniła postępy w przejściu na lepsze praktyki, a jednym z kolejnych logicznych kroków jest ulepszenie naszych testów. Jak wie każdy, kto przeprowadził jakiekolwiek znaczące testy, testowanie zajmuje dużo czasu – aw mojej firmie usprawiedliwienie dla kierownictwa zajmuje zbyt dużo czasu, więc generalnie robimy to, co robimy po cichu. Nie sądzę, że to nam dobrze służy, ponieważ wciąż napotykamy problemy, których można by uniknąć, gdy dostarczamy niedostatecznie przetestowane oprogramowanie. Chciałbym móc zgłosić się do kierownictwa z uzasadnieniem zatrudnienia dedykowanego inżyniera testów oprogramowania (kogoś, kto potrafi zarówno pisać testy automatyczne, jak i wykonywać testy manualne). Czy są jakieś dobrze opublikowane badania, które pokazują korzyści z dodania takiego stanowiska do małej firmy? Gdzie znajdę informacje o kosztach związanych ze stanowiskiem? Zamierzam zrobić trochę informacji o naszej własnej historii, ale posiadanie zewnętrznych źródeł, na które mógłbym wskazać, pomogłoby wesprzeć moją sprawę.


title: async+await == synchronizacja?

text: Natknąłem się na ten post, który mówi o tworzeniu asynchronicznych żądań internetowych. Odkładając na bok prostotę, jeśli w prawdziwym świecie wystarczy wykonać żądanie asynchroniczne i czekać na nie w następnej linii, czy nie jest to to samo, co w pierwszej kolejności wykonanie połączenia synchronizującego?


title: Jaki wzorzec projektowy najlepiej pasuje do tego problemu?

text: Mam dwa obiekty, jeden to obiekt użytkownika, a drugi to obiekt Content. Obiekt User ma właściwości takie jak 'reads_articles' lub 'reads_books'. Obiekt Content ma właściwości takie jak „is_article” lub „is_book”. Jeśli obie właściwości pasują do siebie (tj. Użytkownik czyta_artykuły i Treść jest_artykułem), Użytkownik może zobaczyć Treść. Zasadniczo szukam najlepszego rozwiązania, aby podejść do tego bez użycia instrukcji switch(). Zastanawiam się też, czy może robię to za trudne i/lub wzorzec projektowy jest tutaj przesadą. Wstępne badania sugerują, że najodpowiedniejszy może być wzorzec Strategia, ale mam trudności z modelowaniem tego problemu do tego wzorca. Nie chcę sztywno kodować testów - naprawdę chciałbym wymyślić ogólne rozwiązanie, które bada właściwości obu klas i określa, czy Treść może być oglądana przez tego Użytkownika. Wyjaśnienie: Moim celem końcowym jest algorytm, który zbada właściwości Użytkownika i właściwości Treści i sprawdzi, czy pasują do siebie. Zasadniczo chcę sprawdzić, czy te dwa obiekty mają pasujące właściwości (bez zakodowania samych właściwości w algorytmie) i wykonać pewne działania. Nie jestem pewien, czy to, czego chcę, to mrzonka, więc pomyślałem, że zapytam. Dzięki za pomoc!


title: Czy odpowiedziałem na to poprawnie i zwięźle?

text: Właśnie odpowiedziałem e-mailem mojemu bratu, który uczy się programowania komputerowego, że C++ i Java są bardziej podobne niż C i C++, mimo że C++ jest prawie nadzbiorem C. Zgadzasz się? AFAIK Stanley Lippman napisał „pracę kanoniczną” (C++ Primer) o C++, a Dennis Ritchie i Brian Kernighan napisali „pracę kanoniczną” (The C Programming Language) o C, ale nie jestem ekspertem od C++, więc zadam ci pytanie. Oto rozmowa przetłumaczona na język angielski: > ---------- Przekazana wiadomość ---------- > Od: Niklas > Data: 1 maja 2013 07:22 > > Raczej tak zna się Javę, znając C++. >> Jest większa różnica między C i C++ niż między Java i C++ w przykładzie > C + + cechy, ale nie używa wskaźników, zamiast używania C + + tak zwanych > referencji, które również są używane w Javie zamiast wskaźników. W C> pamięć dynamiczna jest przydzielana za pomocą malloc, aw C++ odbywa się to za pomocą słowa kluczowego > new, aw C pamięć dynamiczna jest zwalniana za pomocą słowa kluczowego free >, które w C++ nazywa się usuwaniem. >> Systemy operacyjne są programowane w języku C i języku asemblerowym, a aplikacje, takie jak programowanie GUI, są wykonywane w językach bardziej zorientowanych obiektowo, np. C++, Java, Visual Basic, Flash...więc to zależy od > problemu, który chcesz rozwiązać, planowania procesora lub widżetów. Istnieją różne > paradygmaty. > > 1 maja 2013 07:16 napisał Holger: > > Czytam książkę o C++. Jak dotąd wydaje się, że jest identyczny z java, z wyjątkiem kilku drobnych różnic składniowych (dołącza zamiast importu itp.), ale zakładam, że różnice będą później. Czy jest możliwe > automatycznie C, jeśli może C + +? > > 1 maja 2013 r. o 6:45 "Niklas" napisał: > > Witam! Oto plik pdf z programowaniem w języku C. Jeśli masz jakieś pytania, możesz mnie zapytać. Z poważaniem, Niklas


title: Jak generować liczby losowe bez tworzenia nowych obiektów Random?

text: Używam tego jako części gry, ale tak naprawdę nie jest to pytanie dotyczące tworzenia gier, więc umieszczam to w tej bardziej ogólnej wymianie stosów. Celem jest generowanie „losowych” danych wyjściowych dla danych wejściowych o stałej liczbie całkowitej, ale (i to jest kluczem do sukcesu) wygenerowanie _tego samego_ losowego wyniku za każdym razem, gdy wprowadzane jest _to samo_ losowe dane wejściowe. Pomysł polega na tym, że funkcja wygeneruje świat za każdym razem w ten sam sposób, więc nie musimy niczego przechowywać; sama funkcja jest magazynem. Niestety szybkość dostępu jest trochę wolna, ponieważ jedynym sposobem, jaki mogę znaleźć na generowanie liczb losowych, jest utworzenie nowego obiektu Random() z ziarnem opartym na danych wejściowych, co jest zaskakująco powolne. Czy jest lepszy sposób? Nie martwię się o bezpieczne generowanie kryptowalut; w rzeczywistości po prostu wybiorę z góry losowe ziarno i ujawnię je publicznie. Obecny kod wygląda tak: private const int seed; public MapCell GetMapCell(int x, int y) { Random ran = new Random(seed + (x ^ y)); zwróć nową MapCell(ran.NextInt(0, 4)); } Gdzie `MapCell` jest jednym z czterech typów (w rzeczywistości jest to bardziej skomplikowane, ale nie za dużo). Chodzi o to, że można to wywołać dla dowolnych parametrów, w dowolnym momencie, w dowolnej kolejności, ale musi zwracać tę samą odpowiedź za każdym razem, jeśli x i y są za każdym razem takie same. Dlatego nie mogę naprawić określonego obiektu Random i używać go wielokrotnie. Nie chcę też niczego przechowywać, ponieważ chcę utrzymać dość niskie zużycie pamięci RAM, ale pozwolić graczowi swobodnie wędrować do krawędzi `Int.MaxValue`


title: Nazywanie metod, które wykonują wywołania HTTP GET/POST?

text: W aplikacji, nad którą aktualnie pracuję, są generalnie 3 typy wywołań HTTP: * czyste GET * czyste POST (aktualizacja modelu o nowe dane) * POST "GET" (wysyłanie obiektu w celu odzyskania niektórych danych, bez aktualizacji do modelu) W usłudze integracji generalnie nazywamy metody, które wysyłają „postSomething()”, a metody, które otrzymują, „getSomething()”. Więc moje pytanie brzmi: jeśli mamy POST "GET", czy metoda powinna być wywoływana: * getSomething - ponieważ celem jest uzyskanie danych * postSomething - ponieważ technicznie używamy POST * performSomeAction - dowolna nazwa, która jest bardziej odpowiednia dla działanie Jakie są myśli wszystkich?


title: Co rozumie się przez: „Użytkownik nie powinien decydować, czy jest administratorem, czy nie. System uprawnień lub bezpieczeństwa powinien”.

text: Przykład użyty w pytaniu przekazuje do funkcji minimum danych, dotyka najlepszego sposobu określenia, czy użytkownik jest administratorem, czy nie. Jedną z powszechnych odpowiedzi było: user.isAdmin() To wywołało komentarz, który został powtórzony kilka razy i wielokrotnie przegłosowany: > Użytkownik nie powinien decydować, czy jest administratorem, czy nie. Uprawnienia lub > System bezpieczeństwa powinien. Coś, co jest ściśle powiązane z klasą, nie oznacza, że dobrym pomysłem jest uczynienie tego częścią tej klasy. Odpowiedziałem: > Użytkownik nic nie decyduje. Obiekt/tabela użytkownika przechowuje dane dotyczące > każdego użytkownika. Prawdziwi użytkownicy nie mogą zmienić wszystkiego w sobie. Ale to nie było produktywne. Oczywiście istnieje zasadnicza różnica w perspektywie, która utrudnia komunikację. Czy ktoś może mi wyjaśnić, dlaczego user.isAdmin() jest zły, i namalować krótki szkic tego, jak wygląda zrobiony „dobrze”? Naprawdę nie widzę korzyści z oddzielenia bezpieczeństwa od systemu, który chroni. Każdy tekst dotyczący bezpieczeństwa mówi, że bezpieczeństwo musi być zaprojektowane w systemie od samego początku i brane pod uwagę na każdym etapie rozwoju, wdrażania, konserwacji, a nawet zakończenia życia. To nie jest coś, co można przykręcić z boku. Ale jak dotąd 17 głosów za tym komentarzem mówi, że brakuje mi czegoś ważnego.


title: SOA, Java EE i organizacja danych

text: W firmie, w której pracuję, dzielimy obecnie nasze rozwiązanie monolityczne na szereg małych usług (SOA). Ma to na celu uczynienie programistów pracujących nad każdym fragmentem kodu (usługą) bardziej niezależną, a ogólnie rzecz biorąc, aby baza kodu była łatwiejsza w zarządzaniu. Gdy wprowadzana jest zmiana w kodzie, wystarczy wdrożyć tylko jedną część (tj. całą usługę), zamiast wdrażać _wszystko_. Pomaga to również w testowaniu, ponieważ nie ma potrzeby testowania wszystkiego, gdy coś jest wdrażane. Wiele usług jest niewielkich, więc chcielibyśmy wdrożyć kilka z nich na tym samym serwerze aplikacji, w tym przypadku JBoss 7.1. Zgodnie z filozofią SOA bardzo ważna jest niezależność każdej usługi i pracujących nad nimi zespołów. Jaki byłby najlepszy sposób na uporządkowanie danych? * Użyj jednego schematu na usługę * Czy na serwerze aplikacji użyjesz jednego źródła danych na schemat? * Lub użyć jednego źródła danych, poprzedzając wszystkie nazwy obiektów DB nazwą schematu w jakiś przejrzysty sposób? * Używaj wspólnego schematu, ale unikaj kolizji nazewnictwa, wymagając, aby każda usługa używała odrębnego przedrostka dla wszystkich obiektów DB * Inne opcje? Czy może myślę, że jest to całkowicie błędne tutaj? :) Edytuj: Wyjaśniono _dlaczego_ baza kodu jest dzielona z monolitu na mniejsze usługi.


title: Dlaczego dobrych programistów określa się mianem Ninja?

text: Jak definiuje się programistę Ninja? Jeśli jest to tylko doświadczony programista, to czy naprawdę nie ma lepszego sposobu na opisanie tego? Ninja brzmi jak dziecinna sztuczka marketingowa mająca na celu przyciągnięcie programistów z iluzją własnej wielkości. A może czegoś mi brakuje? W szczególności chcę wiedzieć, jakie cechy Ninja są pożądane u programistów, aby porównanie było trafne (oprócz współczynnika chłodu)? Znalazłem ten artykuł, który zawiera dobre porównania między charakterystyką Ninja a rozwojem Agile. Chciałbym jednak usłyszeć od osób, które używały słowa Ninja do celów rekrutacyjnych i jakie były ich motywacje. **Aktualizacja:** Po obu stronach sporu podniesiono kilka dobrych punktów. Próbowałem je podsumować w moim poście na blogu. Wybrałem odpowiedź JB jako akceptowaną, ponieważ podsumowuje ona wszystkie ważne powody dokonania porównania.


title: Czy tweetowanie od 9 do 5 szkodzi kandydatom do pracy?

text: Gdybyś przyjrzał się przeszłości kandydata do pracy i odkrył, że ma on 1200 obserwujących na Twitterze i średnio 50 tweetów dziennie (z czego ponad połowa odbywa się w godzinach pracy), czy miałoby to wpływ na Twoją decyzję o zatrudnieniu? Jak i dlaczego? Osobiście byłbym trochę zaniepokojony zdolnością kandydata do skoncentrowania się na wykonywanej pracy, jeśli przez cały dzień stale melduje się ze swoimi „ćwierkaniami”. W zawodach niezwiązanych z technologią wiele firm po prostu blokuje Twittera jako nieistotną rozrywkę. Ale _może_ być użytecznym źródłem informacji --- w szczególności dla programistów. Zastanawiam się tylko, ile to za dużo. W którym momencie staje się czerwoną flagą?


title: Czy jest jakiś powód, aby podwójna licencja była permisywna z licencją typu copyleft?

text: Moje rozumienie licencji permisywnych (MIT, BSD) polega na tym, że pozwalają one użytkownikowi na ponowne licencjonowanie oprogramowania, pod warunkiem, że przypisują umiarkowane części oryginalnemu autorowi. Czy istnieje powód, dla którego ktokolwiek miałby podwójną licencję z czymś takim jak MIT i GPL, jeśli licencja MIT pozwalałaby dowolnej osobie wziąć kod i licencjonować go jako GPL? Wiem, że JQuery to robi, ale nie rozumiem, dlaczego. Czy źle rozumiem licencję MIT, czy jest ona po prostu zbędna?


title: Czy test integracyjny powinien być uwzględniony w ciągłej integracji (CI)?

text: Załóżmy, że tworzymy aplikację internetową, a Hudson wykonuje typowe zadania, takie jak kompilacja, test jednostkowy i statyczna analiza kodu. Ale trudna część jest taka: Hudson **wdraża i uruchamia serwer aplikacji w celu przeprowadzenia testów integracyjnych** po wykonaniu poprzednich zadań. Oznacza to kilka trudnych rzeczy, takich jak połączenie z bazą danych, połączenie aplikacji trzeciej części, nasłuchiwanie portu gniazda, zmienne środowiskowe, obsługa niepowodzeń podczas uruchamiania serwera itp. Za każdym razem musimy poprawnie skonfigurować i usunąć te rzeczy, to trudne. Co gorsza, testy integracyjne mogą łatwo przerwać test integracyjny. Czy uważasz, że test integracyjny powinien być uwzględniony w ciągłej integracji (CI)? Czy można to zrobić ręcznie? Lub uprościć test integracji?


title: Czy migracje schematów baz danych stanowią problem w środowiskach produkcyjnych?

text: W dyskusjach na temat baz danych NoSQL vs SQL czasami słyszę, że firmy wolą używać nieschematycznych baz danych NoSQL, ponieważ migracja schematu do nowej wersji jest problematyczna. Ale czy to naprawdę duży problem podczas aktualizacji? Czy relacyjne bazy danych są złe dla takich operacji? Przeczytałem ten wpis na blogu MongoDB: Dlaczego Schemaless?


title: Przekazywanie danych między dwoma formularzami okien przy użyciu Visual C++ 2010

text: 1. Mam więc prostą aplikację formularzy: mam formularz 1 ( **Form1.h** ) i drugi formularz ( **Form2.h** ). Form1 składa się z prostego przycisku _Dodaj użytkownika_ (który na tym etapie nie robi nic poza _otwieraniem formularza2 i ukrywaniem form1_ ).(Do tego momentu wszystko działa). Ale kiedy _dodaję przycisk "Gotowe" do Form2_, który ma _otworzyć formularz1_ ponownie, pojawiają się następujące **błędy** : na lewo od ->Show musi wskazywać na class/struct/union/generic type f1: niezadeklarowany identyfikator Form1 : niezadeklarowany identyfikator Proszę o pomoc! 2. kod to : //Nazwa projektu: MultipleForms //Form1.h #ifndef FORM1_H #define FORM1_H #pragma Once #include "Form2.h" namespace MultipleForms { using namespace System; za pomocą przestrzeni nazw System::ComponentModel; za pomocą przestrzeni nazw System::Collections; za pomocą przestrzeni nazw System::Windows::Forms; za pomocą przestrzeni nazw System::Data; za pomocą przestrzeni nazw System::Rysowanie; /// <summary> /// Podsumowanie dla Form1 /// </summary> public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); // //TODO: Dodaj tutaj kod konstruktora // } protected: /// <summary> /// Wyczyść wszystkie używane zasoby. /// </summary> ~Form1() { if (komponenty) { usuń komponenty; } } private: System::Windows::Forms::Button^ btnAddUser; prywatne: System::Windows::Forms::Button^ btnExit; protected: private: /// <summary> /// Wymagana zmienna projektanta. /// </summary> System::ComponentModel::Container ^components; #pragma region Wygenerowany kod Windows Form Designer /// <summary> /// Wymagana metoda obsługi projektanta - nie modyfikuj /// zawartości tej metody za pomocą edytora kodu. /// </summary> void InitializeComponent(void) { this->btnAddUser = (gcnew System::Windows::Forms::Button()); this->btnExit = (gcnew System::Windows::Forms::Button()); this->SuspendLayout(); // // btnAddUser // this->btnAddUser->Location = System::Drawing::Point(78, 44); this->btnAddUser->Nazwa = L"btnAddUser"; this->btnAddUser->Rozmiar = System::Drawing::Size(75, 23); this->btnAddUser->TabIndex = 0; this->btnAddUser->Tekst = L"Dodaj użytkownika"; this->btnAddUser->UseVisualStyleBackColor = true; this->btnAddUser->Click += gcnew System::EventHandler(this, &Form1::btnAddUser_Click); // // btnExit // this->btnExit->Location = System::Drawing::Point(263, 136); this->btnExit->Name = L"btnExit"; this->btnExit->Rozmiar = System::Drawing::Rozmiar(75, 23); this->btnExit->TabIndex = 1; this->btnExit->Tekst = L"Wyjście"; this->btnExit->UseVisualStyleBackColor = true; this->btnExit->Click += gcnew System::EventHandler(this, &Form1::btnExit_Click); // // Form1 // this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(410, 200); this->Controls->Add(this->btnExit); this->Controls->Add(this->btnAddUser); to->Nazwa = L"Formularz1"; to->Tekst = L"Formularz1"; this->ResumeLayout(false); } #pragma endregion private: System::Void btnAddUser_Click(System::Object^ sender, System::EventArgs^ e) { Form2^ f2 = gcnew Form2(); f2->Pokaż(); to->Ukryj(); } private: System::Void btnExit_Click(System::Object^ sender, System::EventArgs^ e) { exit(1); } }; } #endif //Form2.h #include "Form1.h" #ifndef FORM2_H #define FORM2_H #pragma Once #include<stdlib.h> namespace MultipleForms { using namespace System; za pomocą przestrzeni nazw System::ComponentModel; za pomocą przestrzeni nazw System::Collections; za pomocą przestrzeni nazw System::Windows::Forms; za pomocą przestrzeni nazw System::Data; za pomocą przestrzeni nazw System::Rysowanie; /// <summary> /// Podsumowanie dla Form2 /// </summary> public ref class Form2 : public System::Windows::Forms::Form { public: Form2(void) { InitializeComponent(); // //TODO: Dodaj tutaj kod konstruktora // } protected: /// <summary> /// Wyczyść wszystkie używane zasoby. /// </summary> ~Form2() { if (komponenty) { usuń komponenty; } } private: System::Windows::Forms::Button^ btnDone; protected: protected: private: /// <summary> /// Wymagana zmienna projektanta. /// </summary> System::ComponentModel::Container ^components; #pragma region Wygenerowany kod Windows Form Designer /// <summary> /// Wymagana metoda obsługi projektanta - nie modyfikuj /// zawartości tej metody za pomocą edytora kodu. /// </summary> void InitializeComponent(void) { this->btnDone = (gcnew System::Windows::Forms::Button()); this->SuspendLayout(); // // btnDone // this->btnDone->Location = System::Drawing::Point(98, 110); this->btnDone->Nazwa = L"btnDone"; this->btnDone->Rozmiar = System::Drawing::Rozmiar(75, 23); this->btnDone->TabIndex = 0; this->btnDone->Tekst = L"Gotowe"; this->btnDone->UseVisualStyleBackColor = true; this->btnDone->Click += gcnew System::EventHandler(this, &Form2::btnDone_Click); // // Form2 // this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(292, 273); this->Controls->Add(this->btnDone); to->Nazwa = L"Formularz2"; to->Tekst = L"Formularz2"; this->ResumeLayout(false); } #pragma endregion private: System::Void btnDone_Click(System::Object^ sender, System::EventArgs^ e) { Form1^ f1 = gcnew Form1(); f1->Pokaż(); to->Ukryj(); } }; } #endif


title: TFS - strony internetowe oparte na IIS - jak obsługiwać rozgałęzienia

text: Po prostu szukam porady/najlepszych praktyk w tej sytuacji: Mamy rozwiązanie z kilkoma stronami internetowymi (jedna to projekt strony internetowej, druga to projekt aplikacji internetowej). Obie te witryny są skonfigurowane do korzystania z naszych zainstalowanych usług IIS (v7), ponieważ mamy inne projekty, do których musimy uzyskać dostęp za pośrednictwem hosta lokalnego podczas debugowania. Właśnie przenieśliśmy się do TFS (z GIT) - kiedy zmieniamy gałęzie, muszę „przekierować” moje wirtualne katalogi w IIS, aby wskazać nową gałąź, co jest trochę uciążliwe. Czy ktoś ma jakieś rady/wskazówki, jak najlepiej do tego podejść? Zaznaczam, że nie sądzę, aby przejście na używanie Cassini pasowało do naszej sytuacji.


title: Jak testujesz abstrakcję bazy danych w PHP?

text: Z góry przepraszam, jeśli to pytanie jest zbyt subiektywne, ale staram się znaleźć dobrą odpowiedź, prawdopodobnie dlatego, że tak naprawdę nie ma prawidłowej odpowiedzi. Obecnie piszę warstwę abstrakcji bazy danych, aby ujednolicić użycie jednego interfejsu API w moich aplikacjach. Możliwe, że ponownie wymyślę koło, ale robię to głównie ze względu na moją konkretną potrzebę pewnej funkcjonalności Oracle, która ostatecznie zostanie przeniesiona z Oracle. W przypadku sterownika Oracle mam trudności z testowaniem obiektu ze względu na brak API OO w PHP, więc aby przetestować muszę dotknąć bazy danych. Wydaje się, że istnieją dwie szkoły myślenia na temat testowania funkcjonalności bazy danych. 1. Nie dotykaj bazy danych, wykpij to wszystko (oczywiście niemożliwe bez API OO). 2. Zezwól na uruchomienie funkcjonalności, a tym samym na test funkcji, a nie na test jednostkowy. Moje pytanie jest dwojakie, czy ktoś robił to wcześniej i jak poradziłeś sobie z testowaniem? Jeśli nie miałeś wcześniej powodu, aby to zrobić, jakie są twoje przemyślenia na temat tego, jak sobie z tym poradzisz i dlaczego?


title: Atlassian Confluence jako źródło historii bdd

text: Chcę zacząć używać BDD w naszej firmie. Najlepszym miejscem do przechowywania historii z mojego punktu widzenia są strony Atlassian Wiki. Oczywiście spodziewałem się kilku istniejących technik pobierania historii ze stron, ale znalazłem tylko radę, aby użyć `pageUrl?decorator=printable`, aby uzyskać stronę w formie drukowanej i później ją przeanalizować. I to wszystko, żadnych wtyczek nic... **Pytanie** : Jaki jest najlepszy sposób na odzyskanie historii z Atlassian Wiki? Czy są jakieś dobrze znane alternatywy? Zdecydowanie mogę je przechowywać w folderze SVN, do którego analitycy biznesowi mieliby dostęp, ale jest to dla nich znacznie mniej wygodne. Cała pozostała dokumentacja techniczna jest przechowywana na wiki i nie chcę jej dzielić.


title: Cel `return self` z metody klasy?

text: Natknąłem się na coś takiego w projekcie open source. Metody modyfikujące atrybuty instancji zwracają odwołanie do instancji. Czy zaufałbyś kodowi napisanemu w ten sposób? class Foo(obiekt): def __init__(self): self.myattr = 0 def bar(self): self.myattr += 1 return self


title: Bycie jedynym deweloperem i jego konsekwencje

text: Jestem jedynym programistą w mojej firmie. Zajmuję się programowaniem (w ASP.NET 4.0, jQuery i SQL Server 2008) oraz obsługą bazy danych i serwera WWW (win 2008 r2). Cieszę się swobodą realizacji tego, co lubię, a jednocześnie czuję, że mogę wszystko robić źle. Nie używam żadnych diagramów SDLC ani żadnych metod, takich jak Agile itp. Zajmuję się wieloma małymi projektami. Swój wolny czas wykorzystuję na nadążanie za najnowszymi technologiami oraz uczenie się i testowanie nowych rzeczy. Robię to od 7 lat. 1. Obawiam się, jak trudno będzie mi się dostosować, gdy zmienię pracę w firmie, w której w projekt zaangażowanych jest więcej programistów? 2. Skoro nie stosuję się do żadnego wzorca projektowego, czy będzie to grało przeciwko mnie, gdy szukam pracy lub dopasowuję się do nowej pracy? 3. Jakieś inne plusy/minusy, które możesz wymyślić?


title: Opakowanie F#/C# Zastosowanie

text: Istnieje aplikacja .NET zbudowana przy użyciu F# (część podstawowa, jako biblioteka DLL) i C# (część GUI, przy użyciu WPF). Jaki jest najlepszy sposób na jego spakowanie i utworzenie pakietu instalacyjnego oraz jakie są najbardziej odpowiednie narzędzia do użycia, komercyjne lub bezpłatne? Musi zawierać pakiet redystrybucyjny F# w moim pakiecie aplikacji i sprawdzić/pobrać potrzebne .NET Framework. Jak się domyślasz, jestem zupełnie nowy w tym świecie Windows. Z góry dziękuję. Kh


title: Co jest takiego wspaniałego w Clojure?

text: Ostatnio przyglądałem się Clojure i natknąłem się na ten post na Stackoverflow, który wskazuje na niektóre projekty zgodne z najlepszymi praktykami i ogólnie dobry kod Clojure. Po przeczytaniu kilku podstawowych samouczków chciałem zagłębić się w język, więc rzuciłem okiem na niektóre projekty z „rzeczywistego świata”. Po spojrzeniu na ClojureScript i Compojure (dwa wyżej wspomniane "dobre" projekty), czuję, że Clojure to żart. Nie rozumiem, dlaczego ktoś wybrałby Clojure zamiast, powiedzmy, Ruby lub Python, dwa języki, które kocham i mają tak czystą składnię i są bardzo łatwe do zrozumienia, podczas gdy Clojure używa _tak dużo_ nawiasów i symboli wszędzie, że rujnuje to czytelność ja. Uważam, że Ruby i Python są piękne, czytelne i eleganckie. Są łatwe do odczytania nawet dla kogoś, kto nie zna języka na wylot. Jednak Clojure jest dla mnie nieprzejrzyste i czuję, że muszę znać każdy najmniejszy szczegół dotyczący implementacji języka, aby móc zrozumieć dowolny kod. Więc proszę, oświeć mnie! * Co jest takiego dobrego w Clojure? * Jakie jest absolutne minimum, które powinienem wiedzieć o języku, aby go docenić?


title: Narzędzie do modelowania UML dla systemu Linux

text: Zaczynam nowy projekt przy użyciu Eclipse pod Linuksem i szukam **narzędzia do modelowania** UML 2.x, a nie tylko narzędzia do tworzenia diagramów. * Czy ktoś ma doświadczenie z wtyczką UML dla Eclipse? Czy obsługuje wszystkie diagramy UML? * Czy polecasz inne narzędzie do modelowania? * Jeśli byłeś w podobnej sytuacji, co właściwie robiłeś?


title: Dlaczego różne kolekcje Java mają różną pojemność domyślną?

text: Przyglądając się różnym konstruktorom kolekcji, nasuwa się pytanie. Dlaczego ArrayList() konstruuje pustą listę o początkowej pojemności dziesięciu, a ArrayDeque() tworzy pustą deque tablicy o początkowej pojemności wystarczającej do przechowywania 16 elementów.


title: Windows Server lub Linux do końcowego projektu

text: Kilka tygodni temu wpadłem na pomysł stworzenia aplikacji mobilnej, która przekieruje studentów z mojej uczelni do najbliższej dostępnej drukarki. Całość jest częścią mojego końcowego projektu. Aplikacja na Androida będzie musiała wykonać następujące zadania: 1. Lokalizacja użytkownika w kampusie zostanie wysłana na serwer. Załóżmy, że ta część działa dobrze. 2. Serwer wysyła żądanie SNMP do drukarek znajdujących się w pobliżu użytkownika. Do tej części prawdopodobnie użyję PHP lub Pythona. 3. Dane żądane przez SNMP są przetwarzane i odsyłane do klienta Moje pytanie dotyczy serwera. Kierownik IT uczelni zaoferował mi wyznaczony serwer do rozwoju, co brzmi świetnie. Teraz muszę wybrać, który system operacyjny chcę zainstalować na serwerze - serwer Windows lub Linux (nie wiem, które wersje). Nie mam żadnego doświadczenia w programowaniu/obsłudze serwerów, ale ogólnie rzecz biorąc, czuję się bardziej komfortowo w środowisku Windows (tylko dlatego, że zawsze był to mój system operacyjny). Nie mam zbyt wiele czasu na naukę nowego systemu operacyjnego, ale kiedy generalnie ma sens hostowanie lub tworzenie aplikacji po stronie serwera w środowisku Windows w porównaniu do środowiska Linux?


title: Zautomatyzowana walidacja architektury

text: Zdaję sobie sprawę, że TFS 2010 ultimate edition może tworzyć i walidować diagramy architektury. Na przykład mogę utworzyć nowy projekt modelowania> dodać diagram warstw> Dodaj warstwę o nazwie Widok> Dodaj warstwę BL> Dodaj warstwę DL. Następnie mogę sprawdzić poprawność tej architektury w ramach procesu budowania, gdy ktoś próbuje sprawdzić kod w TFS. Innymi słowy, jeśli widok odwołuje się do DL, proces kompilacji zakończy się niepowodzeniem i zaewidencjonowanie nie będzie dozwolone. W przypadku osób bez licencji MSDN Ultimate, czy FxCop lub narzędzie innej firmy może być używane do automatycznego sprawdzania poprawności architektury? Wolę zainstalować wtyczkę TFS, ale wystarczy lokalna wtyczka VS.


title: Dlaczego utworzono F#?

text: Na moich obecnych zajęciach muszę wybrać i zbadać język programowania (lub popularny język skryptowy) i odpowiedzieć na kilka pytań na jego temat, napisać pracę i wykonać kilka przykładowych programów pokazujących jego mocne i słabe strony w porównaniu z innymi językami. Obecnie szukam F# jako potencjalnego kandydata, mój problem polega na tym, że nie mogę znaleźć żadnych informacji stwierdzających (przynajmniej jawnie), dlaczego F# został utworzony. Znalazłem wiele mocnych i kilka słabych stron języka F#, ale czy to koniecznie implikuje powody, dla których został stworzony? Czy ktoś zna jakieś linki lub odczyty, które wyraźnie stwierdzałyby, dlaczego F# został stworzony i/lub historię F# (w szczególności takie rzeczy, jak to, co myślał twórca i takie tam)? I tak, szukałem i będę kontynuować, po prostu mogę znaleźć tylko niejawne przyczyny i miałem nadzieję, że znajdę coś określającego wyraźnie powody, dla których utworzono F#.


title: Czy uważa się, że Pythonic ma wiele klas zdefiniowanych w tym samym pliku?

text: Pracując po raz pierwszy z Pythonem, odkryłem, że piszę wiele klas w tym samym pliku, w przeciwieństwie do innych języków, takich jak Java, które używają jednego pliku na klasę. Zazwyczaj te klasy składają się z 1 abstrakcyjnej klasy bazowej, z 1-2 konkretnymi implementacjami, których użycie różni się nieznacznie. Poniżej umieściłem jeden taki plik: class Logger(object): def __init__(self, path, fileName): self.logFile = open(path + '/' + filename, 'w+') self.logFile.seek(0 , 2) def log(self, stringtoLog): self.logFile.write(stringToLog) def __del__(self): self.logFile.close() class TestLogger(Logger): def __init__(self, serialNumber): Logger.__init__( '/tests/ModuleName', serialNumber): def readStatusLine(self): self.logFile.seek(0,0) statusLine = self.logFile.readLine() self.logFile.seek(0,2) return StatusLine def modifyStatusLine( self, newStatusLine): self.logFile.seek(0,0) self.logFile.write(newStatusLine) self.logFile.seek(0,2) class GenericLogger(Logger): def __init__(self, fileName): Logger.__init__ ('/testy/GPIO', fi leName): def logGPIOError(self, errorCode): self.logFile.write(str(errorCode)) Jak widać powyżej, mam klasę bazową Logger, z kilkoma różnicami w implementacji poniżej. **Pytanie:** czy to standard dla Pythona, czy dla dowolnego języka? Jakie problemy mogą wyniknąć z korzystania z tej implementacji, jeśli w ogóle? **EDYTUJ:** Tak naprawdę nie szukam wskazówek dotyczących tego _specyficznego_ pliku, ale w bardziej ogólnym sensie. Co by się stało, gdyby zajęcia okazały się 3-5 umiarkowanie złożonymi metodami? Czy miałoby sens dzielenie ich wtedy? Gdzie jest granica na powiedzenie, że należy podzielić plik?


title: Najlepszy sposób na przetworzenie kolejki w C# (obróbka PDF)

text: Przede wszystkim pokażę, co chciałbym zrobić: mam już do dyspozycji długo działającą aplikację webową napisaną w ASP.NET (C#) 2.0. W tej aplikacji użytkownicy mogą przesyłać standardowe pliki PDF (tekst + zdjęcia). Aplikacja działa produkcyjnie na Windows Server 2003 i ma dedykowany serwer bazy danych (SQL Server 2008) również z systemem Windows Server 2003. Sam jestem dość doświadczonym programistą stron internetowych, ale tak naprawdę nigdy nie zaprogramowałem niczego innego niż web (a przynajmniej nic poważny). Planuję dodać funkcjonalność do aplikacji internetowej, dla której będę potrzebował migawki jpg każdej strony pliku PDF. Tworzenie tych „miniatur” nie jest wielkim problemem, robię to już w mojej aplikacji internetowej za pomocą ghostscriptu. Na razie zrobiłem to tylko na dokumentach jednostronicowych, a nowa funkcja będzie musiała przetwarzać większe dokumenty. Aby proces ten był przejrzysty zarówno dla administratorów, jak i użytkowników końcowych, chciałbym zaimplementować jakąś kolejkę, aby opóźnić przetwarzanie miniatur. Znowu nie ma problemu z utworzeniem kolejki, będzie składać się z rekordów w tabeli, z wystarczającą ilością informacji, aby znaleźć dokument pdf z powrotem. Potem będę musiał przetworzyć tę kolejkę i tam zaczęły się moje przesłuchania. Oczywiście najlepszym rozwiązaniem do przetworzenia tego nie jest skrypt ASP, więc będę musiał wydostać się z mojego znanego środowiska. Nie ma problemu, ale nie mam pojęcia, w którą stronę iść. Dlatego kilka pytań : * Co mam rozwijać ? Przypuszczalnie potrzebuję czegoś, co jest „w gotowości” na serwerze, działa w razie potrzeby, a następnie wraca do stanu bezczynności do odwołania. Czy powinienem zaglądać do usługi Windows? Czy istnieje inny bardziej odpowiedni rodzaj projektu? * W zależności od pierwszej odpowiedzi, jakie będzie podejście? Czy powinienem w jakiś sposób serwer SQL "powiedzieć" programowi/usługi/..., aby przetworzył kolejkę, czy powinienem ten program/usługa/... okresowo sprawdzać stan kolejki i traktować nowe pozycje. W obu przypadkach, jakiej funkcjonalności mogę użyć? * nie mówimy o setkach PDFów dziennie (maksymalnie 50 może), całkowicie mogę sobie pozwolić na traktowanie kolejki po 1 pozycji na raz. Czy możesz potwierdzić, że nie muszę dalej szukać wątków i tak ? (Znalazłem wiele odpowiedzi mówiących o obsłudze wątków w kolejce, ale wygląda to dość przesadnie jak na moje potrzeby) * Może związane z poprzednim pytaniem: co z równoczesnym wywołaniem programu, cokolwiek to jest? Załóżmy, że jest aktualnie uruchomiony, aw kolejce pojawia się nowy rekord, jakie powinno być zachowanie? Nie potrzebuję zbyt szczegółowych odpowiedzi i byłbym już zadowolony z odpowiedzi typu „Możesz wykonać przetwarzanie za pomocą usługi i tak, można mieć serwer sql na maszynie A uruchamiając usługę na maszynie B” lub „Musisz rozwijać xxx, a następnie użyj harmonogramu, aby uruchamiać go co xxx minut". Nie mam nic przeciwko czytaniu artykułów i tak dalej, ale nie mogę sobie pozwolić na spędzanie zbyt dużo czasu na nauce rzeczy, aby w końcu zdać sobie sprawę, że poszłam niewłaściwą drogą dla tego projektu, więc w zasadzie staram się zawęzić zakres spraw, które muszę prowadzić śledztwo. Dziękuję za przeczytanie mnie, mam nadzieję, że znajdę tu pomocne dłonie :-)


title: Jak uporządkować mój kod w formacie MVC?

text: Chcę mieć stronę główną (root serwisu), sprawdzić, czy istnieje plik cookie dla zalogowanego użytkownika, a następnie na tej podstawie określić, czy załadować stronę rejestracji (stronę docelową) lub kanał użytkownik jest zalogowany. Gdzie mam przeprowadzić to sprawdzenie? Na razie trzymam go w kontrolerze, ale na podstawie niektórych artykułów, które przeczytałem (takich jak Skinny Controller, Fat Model, nie jestem pewien, czy jest to właściwe miejsce, aby go trzymać.


title: Czy istnieje sposób bez patrzenia na kod źródłowy, aby dowiedzieć się, jak modułowy jest kod?

text: Pracowałem z TDD, większością wzorców, głównie z kodem OO i nadal nie znalazłem sposobu na sprawdzenie, czy dany fragment kodu potwierdza modularność, bez potrzeby przeglądania kodu. W ostatnim projekcie, który podzielił wszystko na słoiki, określając "moduł", który wciąż nie był kodem modułowym. Czy jest więc jakiś sposób, aby faktycznie poznać lub zmierzyć, czy kod jest modułowy, czy nie? Modułowość nie pozwala na zminimalizowanie efektu tętnienia podczas wprowadzania zmian w systemie. Robiłem post mortem na dużym systemie i jednym z największych problemów była niemożność ograniczenia zmian do minimum. Istnieje kilka powodów takiego stanu rzeczy, w tym jeden, w którym kod nie jest zmodularyzowany pomimo przestrzegania najlepszych praktyk. W rezultacie powstało przekonanie, że system jest rzeczywiście odporny na zmiany, ale w praktyce tak nie jest. Wyłonił się wyraźny wzorzec, który pokazuje, dlaczego system nie jest zmodularyzowany i może to być sposób na dostarczenie metryk określających, jak zmodularyzowany jest kod.


title: Jak „odtworzyć prawa autorskie” w aplikacji?

text: > * Redystrybucje w formie binarnej muszą zawierać w dokumentacji i/lub innych materiałach dostarczonych z dystrybucją powyższą notę o prawach autorskich, > tę listę warunków i następujące wyłączenie odpowiedzialności. > Powyższe jest zacytowane z licencjonowanego przez BSD pliku COPYING. Jak mogę „odtworzyć powyższe prawa autorskie”, gdy rozpowszechniam swoją aplikację w formie binarnej? Czy powinienem umieścić zawartość pliku KOPIOWANIE na ekranie „Kredyt”/„Informacje” mojej aplikacji, czy co? Dziękuję!


title: Jak przekazywać koncepcje i projekt aplikacji internetowej?

text: Nie jestem pewien, czy można zadać ten temat, ale rozmawiamy o tym od lat w naszym „Sklepie” programisty. Jak pisać koncepcje aplikacji internetowych? Używamy Zend Framework (MVC), OOP Based, Databases, LDAP i tak dalej. Ale nikt, kogo kiedykolwiek spotkałem, nie może mi pokazać dobrego przykładu jakiejś „koncepcji technicznej”. Cel: Napisz dokument i przekaż go drugiej osobie z "trochę" wiedzy o naszych systemach i dobrymi umiejętnościami PHP 5/Zend Framework. Teraz musi być w stanie kodować bez wielu pytań do architekta. Czy to możliwe, że nie jest to powszechne na „scenie internetowej”? Czy wszyscy tylko włamują się do kodu, dopóki aplikacja nie zadziała? Jeśli ktoś zna jakieś dobre artykuły, przykłady.. Kilka słów kluczowych do przemyślenia: * ERM * UML


title: Jakieś rzeczywiste użycie wskaźników w C#?

text: Jak wygląda sytuacja podczas kodowania w C#, gdzie używanie wskaźników jest dobrą lub niezbędną opcją? Mówię o wskaźnikach _niebezpiecznych_.


title: Czy pisanie aplikacji mobilnych może być pracą na pełen etat?

text: Jako początkujący programista androidów, czytanie tego dzisiaj dało mi wyraźne wrażenie dywanika wciąganego pod moje stopy. Chociaż omawiane badania dotyczą sklepu z aplikacjami Apple, uważam, że można bezpiecznie powiedzieć, że wszystko jest również prawdziwe w przypadku wielu rynków aplikacji na Androida (lub Play, jak się je obecnie nazywa). Jeśli to prawda, to co to oznacza dla programistów rozważających rozwój mobilny jako swoją wybraną karierę? Czy ktoś z was zarabia na życie z tworzenia aplikacji? Czy można to zrobić w pełnym wymiarze godzin, aby zapłacić rachunki i położyć jedzenie na stole?


title: Jak utrzymać kontrowersje w ryzach?

text: To prawdopodobnie jest OT, ale tutaj jest mniej OT niż na jakiejkolwiek innej stronie SO, więc proszę o wyrozumiałość. Pracuję nad nowym projektem votEm. Celem jest zapewnienie niezależnym kandydatom platformy do przedstawienia się w celu wybrania na urząd polityczny. Moim głównym powodem jest to, że dzisiaj prowadzenie biura jest zbyt drogie. Niektórzy politycy w USA wydają nawet 30 milionów dolarów (!) na jedną kampanię. Te pieniądze lepiej wydać gdzie indziej. W podobny sposób ludzie, którzy chcą zmieniać kraje, takie jak Egipt, mogliby wykorzystać taką platformę do zaprezentowania się. Teraz oczekuję dużo emocji i presji na mojej stronie. Ludzie z dużymi pieniędzmi (i dużo do stracenia) będą próbowali to oszukać (partie polityczne, tajne służby… errr… „kraje nie w 100% demokratyczne”, duże firmy,…). jak najwięcej błędów, potrzebuję spisu zasobów, pomysłów i wskazówek, jak uchronić taką stronę przed zbyt wielkimi kłopotami. PS: Zrobiłbym to CW, ale wydaje się, że opcja zniknęła...


title: Dlaczego nie robi się dzisiaj DSM dla pamięci niestrukturalnej?

text: Edycja: Komentarze sugerowały, że DSM po prostu wygasł, ponieważ nie był ostatnio używany. Jakie były tego powody, jakie są wady DSM? Literatura wymienia wiele pozytywnych aspektów, takich jak łatwość przenoszenia programów, brak marshallingu, a tym samym szybsze itd., ale także negatywne aspekty, takie jak możliwość użycia tylko w jednorodnych środowiskach ze względu na problemy z endianowością i rozmiarem słowa. Dlaczego więc cała synchronizacja danych jest wykonywana przez bazy danych, a nie DSM? Czy było historyczne porównanie lub badanie w czasie, gdy obie drogi istniały jednocześnie? Stary tekst: Wieki temu Djikstra wynalazł IPC poprzez muteksy, które w jakiś sposób prowadziły do pamięci współdzielonej (SHM) w multics (które afaik najpierw miały niezbędną Mmap). Następnie pojawiły się sieci komputerowe i wynaleziono DSM (rozproszony SHM) dla IPC między komputerami. Tak więc DSM jest w zasadzie nieprestrukturyzowanym regionem pamięci (jak SHM), który _magicznie_ jest synchronizowany między komputerami bez podejmowania działań przez programistę aplikacji. Wdrożenia obejmują znaki bieżnika (teraz nieoficjalnie martwe) i CRL. Ale wtedy ktoś pomyślał, że to nie jest właściwy sposób i wymyślił Linda i spacje krotek. Aktualne implementacje obejmują JavaSpaces i GigaSpaces. Tutaj musisz uporządkować swoje dane w krotki. Innymi sposobami osiągnięcia podobnych efektów może być użycie relacyjnej bazy danych lub magazynu klucz-wartość, takiego jak RIAK. Chociaż ktoś może się spierać, nie uważam ich za DSM, ponieważ nie ma spójnego obszaru pamięci, w którym można umieszczać struktury danych, jak chcesz, ale musisz uporządkować dane, co może być trudne, jeśli jest ciągłe, a administracja jak blokowanie nie może należy zrobić dla części zakodowanych na sztywno (=krotki, ...). Dlaczego obecnie nie ma implementacji DSM, czy po prostu nie mogę jej znaleźć?


title: Połączenie z bazą danych - czy należy je podawać jako parametr?

text: Mamy system, w którym połączenie z bazą danych jest nawiązywane raz przy użyciu wspólnej metody i przekazywane przez odpowiednią klasę, która ma być użyta. Istnieją wątpliwości, czy przekazanie połączenia z bazą danych jako parametru do różnych klas spowodowałoby problem, więc sprawdzam tutaj, czy jest to rzeczywiście wykonalne i czy są jakieś lepsze wzorce, aby to zrobić? Wiem, że istnieje kilka narzędzi ORM, które umożliwiają wytrwałość, ale nie możemy się do tego jeszcze zagłębiać.. Wszelkie uwagi są mile widziane, dzięki.


title: Zarządzanie czasem i samodoskonalenie

text: Mam nadzieję, że uda mi się otworzyć dyskusję na ten temat, bo to nie jest konkretny problem. Jest to temat, który mam nadzieję znaleźć pomysły na to, jak ludzie w podobnej sytuacji jak moja zarządzają swoim czasem. OK, jestem samodzielnym programistą projektującym oprogramowanie od 6-8 miesięcy. Projekt, nad którym pracuję, wykorzystuje kilka technologii, głównie rzeczy .net: WPF, WF, NHibernate, WCF, MySql i inne pakiety SDK innych firm istotne dla charakteru projektu. Moje doświadczenie i wiedza są różne, na przykład mam duże doświadczenie w WPF, ale znacznie mniejsze w WCF. Pracuję na pełny etat nad projektem i jestem ciekaw, jak inni programiści, którzy muszą wykonywać wiele zadań w wielu obszarach, zarządzają swoim czasem. Jestem bardzo typową osobą i wolę kodować zamiast robić badania. Czuję, że prowadzenie badań „może” spowolnić postęp projektu, jednocześnie zdaję sobie sprawę, że badania i uczenie się więcej w obszarach, w których nie jestem tak silny, ostatecznie sprawi, że będę bardziej produktywny. Jak podzieliłbyś swój dzienny czas na produktywne kodowanie, czas i czas na eksperymentowanie, czytanie blogów, przechodzenie przez samouczki itp. Powiedziałbym, że koduję około 90%+ mojego dnia i poświęcam trochę, ale bardzo mało czasu na badania i zdobywanie Nowa wiedza. * * * Dzięki za odpowiedzi. Myślę, że przyjmę stopniowe przejście na części blokowe Dominika. Wiedziałem, że kodowanie zabiera mi większość czasu, ale dobrze jest mieć ukończoną i gotową pierwszą wersję projektu. Mając za sobą kilka miesięcy ciężkiej, skupionej pracy, mam nadzieję, że uzyskam więcej czasu na eksperymentowanie i poszerzanie swojej wiedzy. Teraz mam tylko nadzieję, że mój szef da mi trochę luzu i przestanie naciskać na nowe funkcje...


title: Czy możliwe jest zaimplementowanie nieskończonego IEnumerable bez użycia wydajności z tylko kodem C#?

text: # Motywacja Główną ideą jest zbadanie i zrozumienie granic tego, jak daleko można się posunąć z podstawowymi prymitywami LINQ (Select, SelectMany, Concat itp.). Wszystkie te prymitywy można uznać za operacje funkcjonalne na teoretycznym typie sekwencji. Biorąc przykłady z Haskella: * `Select` 'podnosi' funkcję do sekwencji (jak `fmap` w Haskell) * `Concat` to skład * `Aggregate` to katamorfizm (fold) typu sekwencji * `SelectMany` 'wyciągi' informacje z sekwencji (powiązanie Monad, operacja `>>=`) * itp. (i na pewno są lepsze abstrakcje dla powyższego) Pytanie brzmi, czy podstawowe operacje na sekwencjach (Enumerable) w C# są wystarczy, aby skonstruować nieskończoną sekwencję. Konkretniej jest to następujący problem: # Problem Jestem ciekaw, czy istnieje sposób na zaimplementowanie czegoś równoważnego poniższemu, ale bez użycia `yield`: IEnumerable<T> Infinite<T>() { while (true) { wydajność zwraca default(T); } } Czy można pozywać tylko przy użyciu wbudowanych operatorów LINQ? Krótka odpowiedź brzmi, że teoretycznie tak, ale praktycznie nie ze względu na sposób implementacji Linq (powodując przepełnienie stosu). Oto dlaczego tutaj są mniej restrykcyjne reguły: # Reguły Alternatywnie mniej restrykcyjne pytanie byłoby zgodne z regułami 1. Nie możesz bezpośrednio użyć słowa kluczowego `yield` 2. Używaj tylko samego C# bezpośrednio - bez kodu IL, bez konstruowania dynamicznych zestawów itp. 3. Możesz używać tylko podstawowej biblioteki .NET (tylko `mscorlib.dll`, `System.Core.dll`? Nie wiesz, co jeszcze dołączyć). Jeśli jednak znajdziesz rozwiązanie z niektórymi innymi zestawami .NET (WPF?!), jestem również zainteresowany. 4. Nie implementuj IEnumerable ani IEnumerator. # Uwagi Przykładowa teoretycznie poprawna definicja to: IEnumerable<int> endless = null; nieskończony = nowy int[1].SelectMany(x => nowy int[1].Concat(infinite)); To jest " **poprawne** ", ale trafia StackOverflowException po 14399 iteracjach przez element wyliczalny (nie całkiem nieskończony). Myślę, że nie można tego zrobić ze względu na brak optymalizacji rekurencji ogona kompilatora C#. Przydałby się dowód :)


title: Android DB z niektórymi danymi w wielu językach

text: Mam bazę danych SQLite w mojej aplikacji na Androida z między innymi tabelą "Pytanie". Ta tabela zawiera „domyślne” lub „wstępnie załadowane” dane (w tym przypadku pytania zadawane przez aplikację). Niektóre z jego kolumn to „techniczne” lub „wewnętrzne” dane, które należy wykorzystać za kulisami – takie jak liczba punktów, na które pytanie jest warte, typ użytkownika, który może na nie odpowiedzieć itp. – podczas gdy inne to dane tekstowe, które są prezentowane do użytkownika (np. tytuł, opis itp.). Teraz zamierzam, aby moja aplikacja była przyjazna dla internacjonalizacji (przetłumaczalna), więc myślę, że: * Zamiast postępować zgodnie z „standardowymi podejściami” do wielojęzycznego projektowania baz danych – albo tworząc różne kolumny dla atrybutów, które można przetłumaczyć (np. name_en, name_es, ...) lub osobną tabelę, w której każdy wiersz reprezentuje tłumaczenie obiektu bazowego; * ... Mógłbym po prostu zachować wartości tych możliwych do przetłumaczenia atrybutów w moim zasobie `R.Strings` i sprawić, by moja klasa DatabaseHelper pobierała stamtąd tekst, budując nazwę zasobu opartą na przykład na identyfikatorze pytania (np. q1_name , q2_name, q1_opis, ...). W ten sposób mógłbym mieć kilka R.stringów, a pomocnik DB odczytałby z właściwego. Nie jestem pewien tego podejścia i jestem ciekawy, czy jest to zła praktyka i/lub brakuje mi jakiejś potencjalnej wady.


title: Model sprzedaży aplikacji w App Store jest lepszy z wersją płatną?

text: Rob Napier, autor iOS 5 Programming Pushing the Limits, wspomniał, że istnieje kilka modeli sprzedaży aplikacji w App Store: 1. Napisz aplikację i sprzedaj ją 2. Opublikuj bezpłatną i pełną wersję 3. Reklama wspierana przez firmę zewnętrzną lub przez iAd 4. W Zakup aplikacji Co zaskakujące, autor stwierdził, że najbardziej działającym modelem jest (1) pod względem sprzedaży. Myślę, że (2) z dość ograniczonymi możliwościami darmowej wersji może przynieść większą sprzedaż, ponieważ ludzie, którzy nie próbują, mogą nie spaść 0,99 USD lub 1,99 USD za coś, czego nie próbowali? Ja na przykład nie kupiłbym Angry Birds, gdybym najpierw nie wypróbował ich darmowej wersji. Myślę też, że zależy to również od sytuacji: na przykład, jeśli aplikacja jest budzikiem, a w App Store jest już 5 darmowych budzików, to Twoja aplikacja za 0,99 USD może nie być tak chętnie kupowana (lub mogą nigdy nie wypróbować Twojej aplikacji). Ale jeśli twój jest również darmowy, a użytkownicy naprawdę go lubią spośród wszystkich innych, mogą pomyśleć, że 0,99 dolara to nic, aby kupić dobry budzik i chętnie zapłacą ci 0,99 dolara w zamian za pełną wersję budzika , za coś, czego nie mogą uzyskać w bezpłatnej wersji. (np. pełna wersja pozwala wybrać utwór z biblioteki muzycznej jako alarm). Czy (1) może działać tylko wtedy, gdy użytkownik zdecydowanie tego chce i nie ma substytutu? Jak to może działać najlepiej?


title: Międzynarodowe dwuczęściowe formaty daty

text: Czy osoby spoza USA używają dwuczęściowych skrótów dat dla bieżącego roku? Na przykład, reprezentując ostatni dzień maja, możesz zobaczyć, jak ktoś wpisuje „5/31” w polu daty. Czy użytkownicy międzynarodowi robią coś podobnego? Czy w kraju, w którym zwykle używa się dd/MM/rrrr, użyliby „31/5” lub czegoś podobnego?


title: Porada dotycząca wzorca projektowego wymagana do wysyłania plików xml do różnych miejsc docelowych

text: Używam modułu eksportu, teraz chcę go rozszerzyć o różne połączenia. Posiadam bazę danych zawierającą jej opis, recenzję, obrazy itp. Używam funkcji serializacji, aby zapisać ją jako plik XML. Po zapisaniu go jako XML, w panelu administracyjnym mam możliwość wybrania sposobu eksportu tego pliku XML. na przykład przez ftp, http, lokalny, webservice, e-mail itp. użytkownik ma możliwość wybrania jednego lub więcej połączeń do eksportu plików. Każde połączenie takie jak ftp, http ma swoje własne ustawienia w bazie danych np. domena ftp, nazwa użytkownika, hasło. jaki będzie najlepszy sposób na napisanie tych klas połączeń (poprzez zaimplementowanie interfejsu lub użycie klasy abstrakcyjnej lub jakiegoś menedżera) i jak przekazać je do komponentu eksportu jako jeden exoprt może mieć wiele połączeń.


title: Test kodowania 1h do rozmowy rekrutacyjnej, czy to powszechna praktyka

text: Otrzymałem e-mail na stanowisko w firmie internetowej, na które aplikowałem. Proszą mnie o zapewnienie godzinnego przedziału czasowego, abym mógł zdać test z kodowania. Wyślą test, włączą czas i godzinę później będę musiał im podać to, co wymyśliłem. Będzie to w Pythonie i JavaScript. Jestem programistą dopiero od 18 miesięcy, ponieważ wcześniej byłem Unix SA przez 15 lat. Czy to powszechna praktyka? Jak się przygotować i czy są jakieś przykłady testów w sieci? Nie mogę znaleźć żadnego. Dziękuję


title: Czy można zbudować oprogramowanie, które interpretuje wideo w czasie rzeczywistym?

text: Załóżmy, że masz transmisję wideo na żywo z popularnej promenady, po której każdego dnia przechodziły tysiące pieszych. Czy można napisać oprogramowanie do liczenia osób przechodzących obok kamery i zbierania danych o takich rzeczach, jak to, ile z nich nosiło czerwone ubrania lub ilu miało ponad 6 stóp wzrostu? Myślę, że oprogramowanie byłoby warstwą między kamerą a ludźmi. Ale nie mam pojęcia, czy to w ogóle możliwe. Jeśli coś takiego już istnieje, nie udało mi się tego znaleźć, ale udostępnij, jeśli tak. Dziękuję!


title: Licencjonowanie kontroli open source iOS

text: Jestem zdezorientowany używaniem licencjonowanej kontroli open source w mojej komercyjnej aplikacji na iOS. Czy muszę dołączyć jakąkolwiek licencję do mojego kodu, czy mogę po prostu dodać kontrolę open source i wypchnąć aplikację do sklepu z aplikacjami? Na przykład zajrzyj na następujący https://www.cocoacontrols.com/controls/klnoteviewcontroller Posiada dwie licencje. Mogę go pobrać za darmo korzystając z licencji Apache 2.0, ale nie jestem pewien, czy mogę go używać w mojej płatnej aplikacji na iOS. Proszę o radę


title: Dlaczego funkcja agregacji jest złym pomysłem na RESTful?

text: Tytuł: Dlaczego funkcja agregacji jest złym pomysłem dla RESTful? Chociaż wiem, że CRUD jest dobry dla RESTful. Na przykład zasób to ' _pracownik_ ', a klient musi pobrać sumę ' _wynagrodzenia_ ' wszystkich pracowników. Czy usługa RESTful nie powinna zapewniać takiej funkcji sumowania? Dalsze pytanie: jeśli funkcja agregacji jest zła dla RESTful, w jaki sposób klient może uzyskać sumę całkowitego wynagrodzenia? Aby pobrać wszystkie rekordy „pracowników” i zsumować się?


title: Co jest preferowane: Imię Nazwisko lub Imię Nazwisko itp.

text: Wygląda na to, że istnieje wiele różnych sposobów przedstawiania tych samych informacji: imię, drugie imię, nazwisko, imię, drugie imię, nazwisko imię, drugie imię, imię rodziny Który z nich jest lepszy? To zależy??


title: Implementacja wyszukiwania w dużym zbiorze danych, procedura składowana PHP lub Mysql?

text: Buduję system zamawiania jedzenia online z PHP i MYSQL. Jedną z funkcji aplikacji jest umożliwienie użytkownikom wyszukiwania restauracji poprzez wpisanie nazwy obszaru. Chciałbym wiedzieć, że używanie PHP do wyszukiwania będzie bardziej wydajne lub użycie Procedury Zapisanej lub dowolnego narzędzia innej firmy. Wydajny w tym sensie, że ma być przeszukiwany wśród dużego zestawu danych, który z nich będzie najszybszy?


title: Równoważnik „Pythonic” dla kodu napisanego w nowoczesnym stylu C++?

text: We współczesnym C++ promowanych jest wiele dobrych idiomów. Należą do nich RAII i eleganckie użycie boost lub STL lub `std::algorithm` do rozwiązania danego problemu. Tak jak możesz napisać C w dowolnym języku, tak z pewnością możesz napisać C w C++. Jednak można napisać naprawdę dobry nowoczesny kod C++ z odpowiednim podzbiorem funkcji. Kiedy ktoś robi coś naprawdę fajnego z konstrukcją STL lub boost, zawsze mam ochotę nazwać to „pytonicznym” w tym sensie, że jest to kanoiczny, elegancki sposób na zrobienie czegoś. Czy istnieje termin taki, jak "pythonic" jest używany w Pythonie w odniesieniu do kodu C++ napisanego w nowoczesnym stylu z nowoczesnymi idiomami?


title: Jak oddać poczucie rozdrobnienia zespołu opartego na projektach?

text: Zespół inżynierów oprogramowania, którego jestem częścią, liczy około 7 osób zlokalizowanych w sąsiednich boksach. Trzech z nas pracuje nad tym samym projektem, reszta pracuje samodzielnie nad różnymi projektami. W niektórych przypadkach jeden facet będzie sam pracował nad projektem przez prawie 1-2 lata. Również projekty, które są realizowane, nie nakładają się na siebie. Obecnie jestem jednym z tych 3 facetów pracujących w tym samym projekcie. Więc mam ludzi do rozmowy i dyskusji o problemach, a także do programowania i recenzowania. Ale wszyscy w zespole od około 2 lat pracują sami nad projektem. Daje to poczucie dystansu, gdy idziesz dalej w projekcie. Zastanawiałem się, czy któryś z was był częścią takiego zespołu i co zrobiliście, żeby mieć zdrowego ducha zespołu. Wszelkie myśli/pomysły są mile widziane. Dziękuję za Twój czas. Twoje zdrowie.


title: Czy generator liczb losowych może kiedykolwiek wytworzyć inny wynik przy identycznych nasionach?

text: Tytuł podsumowuje to. Chciałbym wiedzieć, czy istnieje algorytm zdolny do generowania zmiennych wyjściowych przy identycznych danych wejściowych bez polegania na innych źródłach losowości, takich jak DateTime.Now lub liczba wygenerowana z czujnika światła itp. Ponadto algorytmu nie można uruchomić po kolei, tylko dwa odrębne, niepowiązane ze sobą przebiegi, które dają różne wyniki.


title: Czy jest ktoś, kto używał Pythona/Ruby i PHP przez długi czas i nadal preferuje PHP?

text: Zazwyczaj fascynują mnie artykuły broniące PHP i używane argumenty. Często autorzy tego typu artykułów nie wspominają o swoich doświadczeniach z innymi językami. Osobiście trudno mi sobie wyobrazić, że ktoś znałby Pythona lub Rubiego i PHP na wysokim poziomie, a mimo to preferował PHP. Więc jeśli ktoś pasuje do tego opisu, chciałbym usłyszeć, dlaczego wolisz PHP od jednego z tych języków.


title: Czy myślisz, że kiedykolwiek osiedlimy się na „standardowej” platformie?

text: Niedawna eksplozja platform telefonicznych przygnębiła mnie (nieco) i sprawiła, że zacząłem się zastanawiać, czy kiedykolwiek osiągniemy jakikolwiek standard prezentacji? Nie mam na myśli języka ani IDE. Różne języki mają różne mocne strony i widzę, że zawsze może istnieć potrzeba rozbieżności, chociaż zauważam, że języki łączą się nieco pod względem funkcjonalności, a tradycyjne języki imperatywne, takie jak C++, obsługują teraz takie rzeczy, jak lambdy. To, o czym tak naprawdę mówię, to wspólny mechanizm prezentacji. Zanim pojawiły się smartfony i tablety, sieć wydawała się wreszcie stać się rozsądną platformą do prezentacji aplikacji, która była dostępna na całym świecie, nie tylko geograficznie, ale także według platformy. Oczywiście nadal istnieją (czasem irytujące) różnice w implementacji i dziwactwa, ale jeśli napisałeś przyzwoitą stronę, wiedziałeś, że można uzyskać do niej dostęp na dowolnym komputerze, od komputera, przez telefon, po C64 z odpowiednim oprogramowaniem. "Write Once Run Anywhere" w końcu stało się rzeczywistością. Jednak w ciągu ostatnich kilku lat byliśmy świadkami eksplozji mobilnych systemów operacyjnych i wszechobecnej „aplikacji”. Dobra strona już nie wystarcza, potrzebujesz natywnej „aplikacji” i oczywiście mamy nagłą ogromną rozbieżność w systemie operacyjnym, języku i interfejsach API potrzebnych do napisania ich w każdej walce o dominację. To trochę dziwne, jak przebiega cykl popularności. Komputery typu mainframe z terminalami - cienki klient. PC - gruby klient. Przeglądarka internetowa - cienki klient. Aplikacja na telefon - gruby (ish) klient. Zastanawiam się tylko, czy myślisz, że kiedykolwiek pojawi się globalny standard dla klientów, czy też cykl „błyszczący i inny” będzie zawsze kontynuowany wraz z bitwą o technologię jour.


title: specyfikacje zwinne / scrum i funkcjonalne

text: Pracuję w małym zespole składającym się z czterech programistów, jednego eksperta domenowego i jednego managera. Chcemy przejść do używania scrum, aby spróbować sformalizować nasze procesy. Z tego, co rozumiem, agile, wydaje się, że jest blisko (ish) tego, co i tak robimy. Mamy krótki dokument z ogólnymi funkcjami naszego produktu. Kiedy zaczynamy kodować każdą funkcję, siadamy i rozprawiamy się z nią werbalnie, opierając się na naszym ekspercie ds. domen w kwestii tego, czego będzie chciał klient. Następnie kodujemy go i testujemy go w niejasny sposób przez innych deweloperów/eksperta domeny. Ulepszenia są sugerowane i wdrażane. Podczas naszego ostatniego audytu ISO 9001 zostaliśmy (zasłużenie) upomnieni za brak jakiejkolwiek identyfikowalności. Audytor chciał w jakiś sposób zobaczyć, że mamy zapisy tego, co zrobi produkt, a następnie przetestować, aby udowodnić, że to robi. Zależy nam na scrumie, aby dać nam proces do tego, wraz z innymi korzyściami, ale moje dotychczasowe czytanie nie odpowiedziało na moje pytanie, gdzie są rejestrowane / testowane szczegółowe wymagania funkcjonalne? Moje zrozumienie agile / scrum jest dalekie od pełnego, więc proszę o poprawienie mnie, jeśli mam nieporozumienia. Jako przykład załóżmy, że mamy historyjkę użytkownika, która mówi: „Jako klient muszę mieć możliwość wybrania stanu systemu A, B lub C”. Ma test akceptacji, który mówi: „Powinienem być w stanie wybrać stan A, B lub C, a system zmieni się na ten stan” Przyjdź do sprintu, w którym zostanie to zaimplementowane, siedzimy i decydujemy, że zbudujemy widżet za pomocą przycisków radiowych A, B i C oraz przycisku „Zastosuj”. Następnie kodujemy to. Podczas testowania tego widżetu wykryto następujące problemy: 1. Wybranie B czasami nie usuwa zaznaczenia poprzedniego przycisku opcji. 2. Czasami opcja C jest niedostępna w systemie i dlatego powinna być wyszarzona. 3. Po pierwszym otwarciu początkowy wybór nie jest zgodny z bieżącym stanem systemu. Moje pytanie brzmi jak i gdzie to jest nagrywane? Nie ma szczegółowej specyfikacji funkcjonalnej mówiącej: „Będzie widżet z trzema przyciskami opcji. Po utworzeniu widżetu bieżący wybór radia powinien być zgodny ze stanem systemu” bla bla. Biorąc pod uwagę brak tego dokumentu, jak mamy udowodnić, że system robi lub nie robi to, co powinien dla audytora?


title: Jaki jest „właściwy sposób” wyszukiwania w witrynie?

text: Mówię o rodzaju wyszukiwania, które automatycznie sugeruje twoje zapytanie podczas pisania, sposób, w jaki robi to Google, sposób, w jaki robi Wikipedia, sposób, w jaki Stack Exchange sugeruje inne pytania podczas wpisywania tytułu itp. A Wikipedia miała kiedyś _straszne_ realizacja wyszukiwania, dla tych z nas, którzy pamiętają. Nie zawierał automatycznej sugestii, był zamykany przez najdrobniejszą literówkę lub błąd ortograficzny i rzadko dawał trafne wyniki. Jako amatorski programista sieciowy staram się wymyślić, w jaki sposób zaimplementować skuteczne i wydajne wyszukiwanie i automatyczne sugerowanie, takie jak obecnie Wikipedia, SE i wiele innych stron internetowych. Jak uzyskać tak niewiarygodnie szybką wydajność i elastyczność? Czy wszyscy po prostu to robią, czy są zasady, wytyczne, pomocne biblioteki lub inne tego typu zasoby, które pomogą Ci zrobić to dobrze w stylu „Internetu przyszłości”?


title: Czy zaleca się używanie SQL Server jako bazy danych dla aplikacji masowo skalowalnych?

text: Powiedzmy, że planujesz stworzyć stronę internetową na skalę Facebooka (jeśli mam podać nazwę strony, to dlaczego nie Facebook?!). Czy zaleca się używanie SQL Server jako bazy danych dla takich aplikacji? Zadaję to pytanie, ponieważ wielu moich kolegów twierdzi, że nie powinno się używać serwera SQL do takich aplikacji. Zamiast tego wolą Oracle lub MySQL.


title: Czy profesjonalny, samouczący się programista skorzystałby na przeczytaniu książki o algorytmach?

text: Jestem w 100% samoukiem, profesjonalnym programistą (pracowałem w kilku startupach internetowych i stworzyłem kilka niezależnych gier). Przeczytałem sporo „niezbędnych” książek (Clean Code, The Pragmatic Programmer, Code Complete, SICP, K&R). Zastanawiam się nad przeczytaniem Wstępu do algorytmów. Zapytałem kilku kolegów, czy przeczytanie tego poprawi moje umiejętności programowania i otrzymałem _bardzo_ mieszane odpowiedzi. Kilku powiedziało tak, kilku powiedziało nie, a jeden powiedział „tylko jeśli spędzasz dużo czasu na wdrażaniu tych algorytmów” (ja nie). Pomyślałem więc, że zapytam Stack Exchange. Czy warto poświęcić czas na czytanie o algorytmach, jeśli jesteś profesjonalnym programistą, który rzadko musi używać skomplikowanych algorytmów? Co to jest warte, mam solidne przygotowanie matematyczne (mam dwuletnie studia z matematyki; brałem algebrę liniową, równania różniczkowe, obliczenia I-III).


title: bezpieczne zdjęcia na serwerze

text: Chciałbym usłyszeć rady od bardziej doświadczonych programistów. Projekt jest obecnie w fazie projektowania. Jest to aplikacja mobilna i prosta aplikacja internetowa. Treść to zdjęcia, komentarze, korespondencja osobista. Zdjęcia mogą być bardzo osobiste. Potrzebujesz bardzo poważnego podejścia do bezpieczeństwa. Pytanie jest proste: **gdzie przechowywać zdjęcia i jak je zabezpieczyć?** Myślę, że będzie to wyglądało następująco: 1. Użytkownik robi zdjęcie. Poprzez SSL aplikacja wysyła zdjęcie na serwer. 2. Serwer otrzyma zdjęcie, zaszyfruje je i gdzieś przechowuje. Ponadto za pośrednictwem aplikacji użytkownik może zobaczyć wszystkie własne zdjęcia. 1. Poproś serwer o zdjęcia. 2. Serwer odszyfrowuje przechowywane zdjęcia i wysyła przez SSL do klienta. Potrzebuję kilku porad technicznych: gdzie zapisać obrazy, wiem, że baza danych jest w tym przypadku dość wolna, jakich algorytmów używają do szyfrowania/odszyfrowywania, a co z pamięcią podręczną. Będzie to projekt o dużym obciążeniu, a wydajność jest bardzo ważna. Aplikacja mobilna planowana jest na cross-platformowym frameworku, takim jak phoneGap, Titanium. Na serwerze jest .NET. Ale to jest zaplanowane. Rozważam również frameworki full stack dla javascript.


title: Korzystanie ze standardowego wzorca kryptografii zlokalizowanych danych z aplikacją ASP.NET MVC3

text: Otrzymałem zadanie odmłodzenia istniejącej aplikacji Human Resources z Access na ASP.NET. Jest to aplikacja stricte wewnętrzna i bez problemu rozwijam ją w naszym standardowym środowisku ASP.NET. Stwarza jednak własne problemy, zarówno techniczne, jak i etyczne. Aplikacja HR będzie odpowiedzialna za przechowywanie danych płacowych pracowników, których nie powinienem widzieć jako deweloper. To w zasadzie trzy pola (zakres wynagrodzenia, płaca rzeczywista, komentarze) i cztery inne wartości, wyliczane na froncie. Chciałbym przejść ścieżką kryptograficzną, aby zaszyfrować wspomniane dane - kryptografia z .NET Framework jest bardzo łatwa do zaimplementowania. Mógłbym „toczyć swoją własną”, co jak wszyscy wiemy, jest złym pomysłem. Zastanawiałem się jednak, czy istnieje lepszy sposób na zrobienie tego. Oto kilka punktów: 1. Na początek wszyscy jesteśmy przywiązani do tej samej domeny. 2. Słyszałem i czytałem o Certyfikatach, czy mogą się tu przydać? (x.509?) 3. Dane będą przechowywane na naszym lokalnym serwerze SQL, oczywiście rzeczywiste dane muszą być zaszyfrowane, więc czy SQL Server może mi pomóc? Znowu certyfikaty? 4. Jeśli użytkownik nie posiada odpowiedniego certyfikatu, czy dane mogą być po prostu puste? (Nie widzisz tego przyjaciela!) 5. Ten problem z szyfrowaniem nie ma żadnego związku z korzystaniem z systemu poprzez model uprawnień.


title: Najczęstsze dziś błędy „w stylu Y2K”?

text: Nie mam tu na myśli konkretnie problemów związanych z datami, takich jak 2038, ale ogólniej, błędów, które pasują do wzorca: * Pokolenie temu programiści mieli tendencję do pisania kodu ass-u-me-d X, co było wtedy rozsądne. * Ale okoliczności się zmieniły i teraz X jest częstym źródłem problemów, które należy naprawić. Na przykład: * X = "Pamięć jest zbyt droga, aby uzasadnić przechowywanie wszystkich 4 cyfr roku. Nie martw się o 2000; to daleko." (złamane przez Y2K) * X = "Kto potrzebuje `size_t`? Możemy po prostu użyć `unsigned int`." (przerwany przez systemy 64-bitowe)


title: Projektowanie przepływu aplikacji

text: Tworzę aplikację internetową w javie, w której muszę zakpić następujący przepływ. Kiedy użytkownik uruchamia pewien proces (dodaj produkt do koszyka), muszę przejść przez następujące kroki 1. Muszę zobaczyć w Sesji HTTP, czy użytkownik jest zalogowany. 2. Sprawdź Sesję HTTP, czy jest koszyk 3. Jeśli użytkownik istnieje w Sesja HTTP i jego koszyk nie istnieją w sesji HTTP 4. Pobierz koszyk użytkownika z bazy danych. 5. dodaj przedmiot do koszyka i zapisz go do sesji HTTP oraz zaktualizuj koszyk w DB. 6. Jeżeli koszyk nie istnieje w DB, utwórz nowy koszyk i zapisz w nim Sesję HTTP. Chociaż przegapiłem tutaj wiele przypadków użycia (nie chcę, aby długość pytania znacznie się zwiększyła), ale większość przepływu będzie taka sama, jak opisano w powyższych krokach. Mój przepływ rozpocznie się od `Kontrolera` i przejdzie do warstwy `Service`, a następnie skończy się w warstwie `DAO`. Ponieważ będzie wiele przypadków użycia, w których będę musiał sprawdzić sesję HTTP i w oparciu o tę potrzebę wywołania warstwy `Service`, planowałem dodać warstwę `Facade`, która powinna być odpowiedzialna za to za mnie, na przykład sprawdzanie ` Sesja` i interakcja z warstwą `Service`. Proszę zasugerować, czy jest to prawidłowe podejście, czy też można tutaj zastosować inne najlepsze podejście? Jeszcze jeden punkt, w którym jestem zdezorientowany, to jak obsłużyć `sesję HTTP` w warstwie fasady? czy muszę przekazywać obiekt sesji HTTP za każdym razem, gdy wywołuję moją „Fasada” lub można tutaj zastosować inne podejście?


title: Jaka jest Twoja opinia na temat często zadawanych odpowiedzi na temat C++?

text: Czy uważasz, że krytyka w Często zadawane pytania jest trafna?


title: Jak śledzisz, jakie zajęcia i funkcje napisał Twój zespół?

text: Podczas pracy nad kodem mam do czynienia z wieloma takimi samymi wyzwaniami, jak moi koledzy z zespołu. Napisałem kilka pomocnych funkcji i klas, podobnie jak oni. Jeśli komunikacja jest dobra, usłyszę o jakiejś wspaniałej rzeczy, którą ktoś ułożył, a sześć miesięcy później, kiedy będę tego potrzebować, mogę to zapamiętać i wywołać tę funkcję, oszczędzając sobie czas. Jeśli tego nie pamiętam lub nigdy o tym nie wiedziałem, prawdopodobnie wymyślę koło na nowo. Czy istnieje szczególna praktyka dokumentowania tego rodzaju rzeczy? Jak sprawić, by były łatwe do znalezienia? Jeśli Twój zespół nie posiada takiej dokumentacji, jak dowiesz się, czy Twoje koło już istnieje? **EDYTUJ:** Wszystkie dotychczasowe odpowiedzi oprócz jednej dotyczą sytuacji idealnej, więc podsumuję te rozwiązania: dokumentacja i komunikacja; wiki, spotkania stand-up, itp. To wszystko są świetne rzeczy, ale polegają na programistach, którzy mają czas (i umiejętności) na napisanie dokumentacji, uczestnictwo w spotkaniach, robienie notatek i zapamiętywanie wszystkiego. Najpopularniejsza jak dotąd odpowiedź (Caleba) jest jedyną, z której mógłby skorzystać programista, który nie jest w stanie dokumentować i spotykać się, a zajmuje się tylko jedną rzeczą: programowaniem. Programowanie jest tym, czym zajmuje się programista, i tak, świetny programista może pisać dokumentację, testy jednostkowe itp., ale spójrzmy prawdzie w oczy – większość z nas woli programować od dokumentowania. Jego rozwiązanie to takie, w którym programista rozpoznaje kod wielokrotnego użytku i wyciąga go do własnej klasy, repozytorium lub czegokolwiek, a _poprzez fakt, że jest izolowany,_ staje się łatwy do znalezienia i ułatwia krzywą uczenia się, jak go używać. .. i udało się to poprzez programowanie. W pewnym sensie widzę to tak: właśnie napisałem trzy funkcje i przychodzi mi do głowy, że ktoś inny powinien o nich wiedzieć. Mogę je udokumentować, spisać, ogłosić na spotkaniu itp. - co mogę zrobić, ale to nie moja siła - lub.... mogę je wyodrębnić do klasy, dobrze nazwać, sprawić, by działały jak czarną skrzynkę i umieść ją tam, gdzie idą inne pliki klas. Następnie krótki e-mail informujący, że jest to łatwe. Inni programiści mogą zeskanować kod i zrozumieć go lepiej niż wyizolowaną funkcję używaną w kodzie, którego nie rozumieją w pełni — ten kontekst jest usuwany. Podoba mi się to, ponieważ oznacza to, że posiadanie zestawu dobrze nazwanych plików klas z dobrze nazwanymi metodami jest dobrym rozwiązaniem, które można osiągnąć dzięki dobremu programowaniu. Nie wymaga spotkań i łagodzi potrzebę szczegółowej dokumentacji. Czy są jeszcze jakieś pomysły w tym duchu… dla odizolowanych i zapracowanych programistów?


title: Jakiego standardu kodowania C++ używasz?

text: Od jakiegoś czasu nie jestem w stanie ustalić standardu kodowania i konsekwentnie go stosować między projektami. Rozpoczynając nowy projekt, staram się zmieniać niektóre rzeczy (dodać spację tam, usunąć spację tam, dodać tam podział wiersza, dodatkowe wcięcie tam, zmienić konwencje nazewnictwa itp.). Pomyślałem więc, że mogę dostarczyć kawałek przykładowego kodu w C++ i poprosić o przepisanie go tak, aby pasował do _twojego_ standardu kodowania. Inspiracja jest zawsze dobra, mówię. ^^ A więc: #ifndef _DERIVED_CLASS_H__ #define _DERIVED_CLASS_H__ /** * To jest przykładowy plik używany do próbkowania układu kodu. * * @author Imię Nazwisko */ #include <stdio> #include <string> #include <list> #include "BaseClass.h" #include "Stuff.h" /** * Klasa Pochodna jest całkowicie bezużyteczna. Reprezentuje bezużyteczność w całości *. */ class DerivedClass : public BaseClass { //////////////////////////////////////// ////////////////// // KONSTRUKTORZY / NISZCZYCIELE ////////////////////////// ///////////////////////////////// public: /** * Konstruuje bezużyteczny obiekt z ustawieniami domyślnymi. * * @wartość parametru * Nigdy nie jest używany. * @throws Exception * Jeśli coś pójdzie nie tak. */ DerivedClass (const int value) : uselessSize_ (0) {} /** * Konstruuje kopię danego bezużytecznego obiektu. * * @param object * Obiekt do skopiowania. * @throws OutOfMemoryException * W razie potrzeby dane nie mogą zostać przydzielone. */ DerivedClass (const DerivedClass& object) {} /** * Niszczy ten bezużyteczny obiekt. */ ~Klasa Pochodna (); //////////////////////////////////////////////// ////////// // METODY PUBLICZNE ////////////////////////////////// //////////////////////// public: /** * Klonuje dany bezużyteczny obiekt. * * @param object * Obiekt do skopiowania. * @return Ten bezużyteczny obiekt. */DerivedClass& operator= (constDerivedClass& object) { stuff_ = object.stuff_; uselessSize_ = obiekt.uselessSize_; } /** * Nie robi absolutnie nic. * * @param bezużyteczny * Wskaźnik do bezużytecznych danych. */ void doNothing (const int* useless) { if (useless == NULL) { return; } else { int womba = * bezużyteczny; switch (womba) { case 0: cout << "To jest wyjście 0"; przerwanie; case 1: cout << "To jest wyjście 1"; przerwanie; przypadek 2: cout << "To jest wyjście 2"; przerwanie; default: cout << "To jest domyślne wyjście"; przerwanie; } } } /** * Robi jeszcze mniej. */ void doEvenLess () { int mySecret = getSecret (); zbieranie int = 0; for (int i = 0; i < mojaSecret; i++) { gromadzenie += 2; } } /////////////////////////////////////////////// //////////// // METODY PRYWATNE //////////////////////////////// ////////////////////////// private: /** * Pobiera tajną wartość tego bezużytecznego obiektu. * * @return Tajna wartość. */ int getSecret () const { if ((RANDOM == 42) && (stuff_.size() > 0) || (1000000000000000000 > 0) && true) { return 420; } else if (LOSOWE == -1) { return ((5 * 2) + (4 - 1)) / 2; } int timer = 100; bool stopThisMadness = false; while (!stopThisMadness) { zrobić { timer--; } while (zegar > 0); stopThisMadness = prawda; } } /////////////////////////////////////////////// //////////// // POLA ///////////////////////////////// ///////////////////////// private: /** * Nie wiem do czego to służy. */ statyczna stała int LOSOWA = 42; /** * Lista list rzeczy. */ std::list <rzeczy> rzeczy_; /** * Określa rozmiar bezużyteczności tego obiektu. */ size_t bezuzytecznyRozmiar_; }; #endif


title: Java Generics - jak zachować równowagę między wyrazistością a prostotą

text: Tworzę kod, który wykorzystuje generyki, a jedną z moich zasad przewodnich było uczynienie go użytecznym w przyszłych scenariuszach, a nie tylko w dzisiejszych. Jednak kilku współpracowników stwierdziło, że być może zrezygnowałem z czytelności na rzecz rozszerzalności. Chciałem zebrać kilka opinii na temat możliwych sposobów rozwiązania tego problemu. Mówiąc konkretnie, oto interfejs, który definiuje transformację — zaczynasz od źródłowej kolekcji elementów i stosujesz transformację do każdego elementu, przechowując wyniki w kolekcji docelowej. Ponadto chcę mieć możliwość zwrócenia kolekcji docelowej do wywołującego i zamiast zmuszać ich do korzystania z odwołania do kolekcji, chcę, aby mogli używać dowolnego typu kolekcji, który faktycznie udostępnili dla kolekcji docelowej. Na koniec umożliwiam, aby typ elementów w kolekcji docelowej różnił się od typu elementów w kolekcji źródłowej, ponieważ być może właśnie to robi transformacja. Na przykład w moim kodzie kilka elementów źródłowych tworzy jeden element docelowy po przekształceniu. Daje to następujący interfejs: interface Transform<Src, Dst> { <DstColl extends Collection<? super Dst>> DstColl transform( Collection<? extends Src> sourceCollection, DstColl destinationCollection); } Starałem się być miły i zastosować zasadę PECS Josha Blocha (rozszerzenie producenta, konsument super), aby upewnić się, że interfejs jest użyteczny z nad- i podtypami tam, gdzie jest to właściwe. Efekt końcowy jest trochę potworny. Teraz fajnie by było, gdybym mógł rozbudować ten interfejs i jakoś go specjalizować. Na przykład, jeśli nie zależy mi na dobrej zabawie z podtypami elementów źródłowych i nadtypami elementów docelowych, mógłbym mieć: interface SimpleTransform<Src, Dst> { <DstColl extends Collection<Dst>> DstColl transform( Collection <Src> sourceCollection, DstColl destinationCollection); } Ale nie można tego zrobić w Javie. Chcę, aby implementacje tego interfejsu były czymś, co inni faktycznie rozważyliby, zamiast biegać w strachu. Rozważałem kilka opcji: * Nie zwracaj kolekcji docelowej. Wydaje się dziwne, biorąc pod uwagę, że dokonujesz transformacji, ale nic nie otrzymujesz. * Mieć klasę abstrakcyjną, która implementuje ten interfejs, ale następnie tłumaczy parametry na coś łatwiejszego w użyciu i wywołuje inną metodę „translateImpl()”, która ma prostszą sygnaturę, a tym samym stanowi mniejsze obciążenie poznawcze dla implementatorów. Ale potem dziwnie jest pisać klasę abstrakcyjną tylko po to, aby interfejs był przyjazny dla użytkownika. * Zrezygnuj z rozszerzalności i po prostu korzystaj z prostszego interfejsu. Ewentualnie połącz to z brakiem zwrotu kolekcji docelowej. Ale to ogranicza moje możliwości w przyszłości. Co myślisz? Czy brakuje mi podejścia, którego mógłbym użyć?


title: Dlaczego generatory kodu zawsze używają w pełni kwalifikowanych identyfikatorów?

text: Kiedy spojrzysz na kod dla projektanta WinForm, zobaczysz takie rzeczy: this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", ... itd. zamiast używania System.Drawing; label1. Font = new Font("Microsoft Sans Serif", ... itd. To samo dotyczy narzędzi takich jak Linq to XSD, XSD2Code i, jak podejrzewam, Linq to SQL. Narzędzia te generują mnóstwo kodu z bardzo długimi, w pełni kwalifikowanymi nazw. Czy nie byłoby łatwiej wygenerować odpowiednie instrukcje `using` i porzucić długie nazwy? A może brakuje mi jakiegoś technicznego powodu? * * * **Uwaga:** Dla tych, którzy są zdezorientowani myślą, że mógłbym chcieć, aby te klasy były rzeczywiście czytelne dla człowieka, zauważ, że to jest dokładnie mój cel.Mam XSD z około 300 klasami, nie chcę pisać ich wszystkich ręcznie, i tak, chciałbym, żeby wyglądały jak zwykły kod napisany przez ludzi.


title: Jaka jest dobra praktyka, gdy dziedziczenie klas statycznych nie jest możliwe/dozwolone?

text: Rozwijam projekt w C# i ze względu na decyzję projektową nie jest możliwe, aby klasa statyczna dziedziczyła inną klasę statyczną. Ale moim zdaniem mam przypadek, w którym miałoby to sens. Mam odtwarzacz muzyczny, który jest w stanie odtwarzać muzykę z wielu różnych źródeł muzycznych: plików lokalnych, YouTube, SoundCloud, Jamendo itp. Obecnie mam jedną klasę statyczną dla każdego z tych źródeł ze statycznymi metodami, takimi jak pobieranie najlepszych utworów, wyszukiwanie dla utworów itp. Oczywiście wiele klas jest współdzielonych przez wszystkie te klasy, więc chciałem przerobić i umieścić cały wspólny kod w bardziej ogólnej klasie MusicSource. Ale C# mi na to nie pozwala. Jaka byłaby najlepsza praktyka tutaj? Chcę pozbyć się całego mojego zbędnego kodu i ułatwić tworzenie nowych źródeł muzyki.


title: Potrzebna pomoc przy projektowaniu i strukturze klasy

text: To pytanie dotyczy głównie najlepszego sposobu podejścia do tego problemu. Każdy wkład jest doceniany. ### Problem W mojej aplikacji muszę wysłać dane do wielu różnych miejsc docelowych (od teraz będziemy nazywać je odbiornikami) przy użyciu różnych protokołów (usługi http post, ftp, mydło). Każdy z różnych odbiorników reaguje inaczej i dla każdej odpowiedzi należy wykonać pewne przetwarzanie, aby ustalić, co się stało. To przetwarzanie odpowiedzi może stać się dość złożone. Moja aplikacja musi również wykonywać różne działania w zależności od odbiornika. ### Moje rozwiązanie Moim planem jest utworzenie oddzielnej klasy dla każdego odbiornika, który implementuje interfejs i użycie wzorca projektowego Factory, aby zdecydować, którą klasę załadować na podstawie odbiornika. Każdy odbiornik ma unikalną nazwę (która jest przechowywana w bazie danych z innych powodów), której zamierzam użyć, aby zdecydować, którego odbiornika załadować. Przekażę to konstruktorowi fabryki. Obecnie planuję, aby mój interfejs implementował te metody * PrepareData() * sendData() * handleResult() Chciałbym również otoczyć te funkcje, takie jak process(), który po prostu zwróciłby wartość logiczną na podstawie tego, czy wysłane zostało wysłane. Nie jestem jednak pewien, gdzie bym to zmieścił. Dziękuję


title: Jak tworzyć biznesowe aplikacje na tablety jako programista .NET?

text: Moja firma ma duże doświadczenie w rozwoju .NET, a jeden z naszych produktów w systemie ERP. Ostatnio klient zapytał nas, czy moglibyśmy dostarczyć interfejs tabletu do tego systemu, czyli oprogramowanie, które pozwala klientowi przeglądać informacje o produkcie i tworzyć zamówienia na tablecie. Oczywiście nie jesteśmy zachwyceni pomysłem zainwestowania dużej ilości czasu i pieniędzy w naukę Objective-C, zakup stacji roboczych dla komputerów Mac, płacenie opłat Apple itp. tylko za ten jeden projekt (_możemy_ być w stanie sprzedać aplikację do kilku dodatkowych klientów później, ale rynek jest bardzo mały, ponieważ byłby przydatny tylko dla obecnych klientów naszego systemu ERP). Więc co powinniśmy zrobić? O ile widzę, mamy następujące opcje: * Napisz „ **zwykłą starą aplikację Windows**” (WPF) i uruchom ją na tablecie z systemem Windows 7, takim jak Samsung Slate lub Acer Iconia. Wady: Ciężkie, drogie urządzenia o krótkim czasie działania (w porównaniu do „prawdziwych” tabletów). * Poczekaj na **tablety z systemem Windows 8 ARM** i napisz aplikację Metro (WinRT). Wady: Poczekaj co najmniej rok; nie jest jasne, czy system Windows 8 ARM będzie obsługiwał instalację niestandardowych aplikacji B2B bez przechodzenia przez sklep z aplikacjami. * Użyj **mono dla Androida** i napisz aplikację .NET dla Androida. Wady: Kolejna biblioteka interfejsu użytkownika (inna niż WPF i Silverlight); niektórzy dostawcy nie zezwalają na ładowanie boczne aplikacji. Jak dotąd najbardziej realistyczne wydają się warianty 1 i 3. Czy przegapiłem jakieś oczywiste wady lub zalety? Czy jest inna opcja, której jeszcze nie brałem pod uwagę? Czy byłeś w podobnej sytuacji i (z powodzeniem) wybrałeś jedną konkretną opcję?


title: Czy możliwe jest użycie formatu konfiguracji opartego na systemie plików zamiast pliku INI?

text: Po niekończących się problemach z plikami konfiguracyjnymi w stylu INI i ich poprawnym parsowaniu (niech poprawmy dane binarne), ostatnio wpadł mi do głowy szalony pomysł: Co jeśli plik INI taki jak # settings.ini [Windows] DirectorySeparator='\\ ' PathSeparator=';' [Linux] DirectorySeparator='/' PathSeparator=':' Wolałby być przechowywany w systemie plików; każda grupa jest katalogiem, każda para klucz/wartość jest plikiem, więc ustawienia/Windows/SeparatorKatalogu (zawiera tylko `\`) ustawienia/Windows/PathSeparator (zawiera tylko ';') ... masz pomysł... Wady: * Prawdopodobnie powolny ze względu na pracę IO, ale może bufory systemu plików pomagają? * Brakuje i-węzłów w niektórych systemach plików? * Nazwy grup/kluczy mogą składać się tylko ze znaków, które są również poprawne dla nazw katalogów/plików, mogą być dość restrykcyjne w zależności od FS. Zalety: * Dowolnie głęboko zagnieżdżone grupy * Bez obaw o ucieczkę, dane binarne są łatwe. Po prostu niech każdy plik zawiera surowe dane. * Automatyczne blokowanie, kontrola dostępu i wszystko, co zapewnia system plików * Łatwy dostęp w większości języków programowania, nawet ręcznie. Bardzo kusi mnie, by spróbować tego w następnym projekcie, zastanawiam się, czy ktoś jeszcze ma już doświadczenie z tym podejściem?


title: Wybierz C++ lub Javę do aplikacji wymagających dużej ilości pamięci RAM?

text: Myślę o aplikacjach naukowych, które są w większości związane z procesorem i obciążają stertę (co najmniej kilka gigabajtów). O każdej innej porze roku z chęcią wybrałbym C++, ale w tym przypadku zastanawiam się, czy fragmentacja naturalna dla menedżera pamięci C++ może być poważnym problemem w porównaniu z przewagą kolektorów kompaktujących Javy. Czy ktoś może wskazać na przykłady z życia wzięte z tym związane?


title: Podejście do analizy statycznej kodu Pythona

text: Jakie podejście powinienem zastosować do statycznej analizy bazy kodu Pythona? W szczególności szukam sposobów, aby: * wyodrębnić i wyświetlić hierarchię klas, * wyodrębnić i wyświetlić relacje klas, * uwzględnić odsyłacz do wszystkich funkcji, modułów i zmiennych Konkretna aplikacja, z którą mam do czynienia, nie jest dobrze udokumentowana dlatego chcę zautomatyzować ten proces.


title: Dlaczego ciężar dowodu musi spoczywać na wywołującym, a nie na metodzie wywoływanej klasy?

text: Michael Perry stwierdza w swoim kursie Pluralsight na temat kodu sprawdzalnego (tylko subskrypcja transkrypcyjna), że: > [C]iężar dowodu spoczywa na wywołującym W umowie o kod, dlaczego ciężar dowodu musi spoczywać na wywołującym, a nie na metodzie klasa, która jest nazywana? Czy jest to preferowana konwencja, czy ma solidniejsze podstawy? W tej chwili jest to dla mnie jak dogmat, ponieważ wywoływana klasa może przeprowadzać własne kontrole bezpieczeństwa, co ograniczyłoby powielanie kodu wywołania.


title: Jak zbudować aplikację na iPhone'a z serwerem internetowym?

text: Mam aplikację na iPhone'a, która przechowuje dane na urządzeniu. Chcę utworzyć aplikację z kontami użytkowników, takimi jak Instagram, Path, Foursquare, Gowalla itp. Co poleciłbyś, aby uzyskać najszybszy i najłatwiejszy sposób na uruchomienie takiej aplikacji (społecznościowej, iPhone'a)? Nadal decyduję się na RoR lub PHP. Czy ostateczny stos sprowadza się do: iPhone --> RestKit --> RoR/PHP --> MYSQL? Mam solidne doświadczenie w rozwoju iOS, ale nie resztę.


title: Google App Engine, jakie są zalety i ograniczenia?

text: Po pierwsze, czy ktoś zna konkretną zaletę Google App Engine for Python Apps? Czy jest jakaś przewaga nad Heruko lub Appfog? A co z API bazy danych? A co z ograniczeniami? Czy są jakieś czynniki, które sprawiają, że zastanawiasz się dwa razy przed użyciem GAE?


title: Dlaczego wzorzec jednostki pracy jest uważany za szybki i wydajny podczas pracy z ORM?

text: Pracując z Doctrine 2 natknąłem się na następujący akapit. > W rzeczywistości, ponieważ Doctrine jest świadoma wszystkich zarządzanych jednostek, kiedy wywołujesz metodę > theflush(), oblicza ogólny zestaw zmian i wykonuje najbardziej > wydajne zapytania/zapytania. Na przykład, jeśli utrzymasz w sumie 100 > obiektów Product, a następnie wywołasz flush(), Doctrine utworzy > pojedynczą przygotowaną instrukcję i użyje jej ponownie dla każdego wstawienia. Ten wzorzec nazywa się > Unit of Work i jest używany, ponieważ jest szybki i wydajny. Nie jestem na bieżąco z relacyjnymi bazami danych i teorią ORM, więc zastanawiałem się, dlaczego wzorzec Unit of Work jest uważany za szybki i wydajny?


title: Ortogonalny projekt do wyceny produktów i planowania produkcji z bazą danych NoSQL

text: Jestem w trakcie tworzenia rozszerzalnego oprogramowania dla firmy, z którą współpracuję, do wyceny produktów i planowania produkcji. **Obecny scenariusz** Zasadniczo istnieją dwa rodzaje produktów: produkowane i sprzedawane (proste kupno i sprzedaż bez konwersji). Produkcja może być zwykła lub wykonana na zamówienie, przy czym produkcja na zamówienie w większości jest odchyleniem od zwykłego modelu. Istnieje tylko skończona liczba produktów (około 2000), ale każdy produkt ma wiele atrybutów, takich jak rozmiar, kolor, odcień i inne. Obecnie istnieje oprogramowanie do zarządzania zamówieniami z zapasami i porządnym pakietem księgowym. Kosztorysowanie i ustalanie cen odbywa się teraz na zasadzie arbitralnej poprzez próbkowanie kilku modeli i dodawanie wartości procentowych kosztów ogólnych i marży. **Wymagane** * Aby obliczyć koszt produktu na jednostkę * Przekształć je w prawidłowy model cenowy (ceny mogą się różnić w zależności od ilości i innych czynników), * Oblicz dokładny koszt i rentowność na produkt, * Aktywnie planuj produkcję dla zwykłych modeli i wykonanych- jednostek na zamówienie, w oparciu o istniejący system zarządzania zamówieniami i stanami magazynowymi **Proponowany projekt** Zaproponowałem następujący projekt. * Przechowuj informacje o produkcie dla każdego unikalnego produktu w stylu dokumentu w oparciu o 5M produkcji (Człowiek, Materiał, Maszyny, Metody i Pieniądze) * Oddzielny moduł każdego z czterech M - Mężczyźni, Maszyna, Materiał i Metody pod względem Pieniądze z prymitywnymi blokami konstrukcyjnymi dla każdego modułu, które można łączyć i łączyć w złożony blok * Przechowywanie metadanych i zestawu wyników wymaganych wraz z każdym dokumentem * Oddzielna warstwa do analizowania metadanych, działania na danych w oparciu o metadane i zwracania zestawu wyników zgodnie z definicją ( podobny do DSL z metadanymi i zestawem wyników przedefiniowanym w czasie wykonywania) * Oddzielny model wyceny, który działa na koszt produktu * Oddzielny moduł planowania produkcji, który działa na danych systemu zarządzania zamówieniami i informacji o produkcie * Korzystanie z MapReduce do agregowania danych i ich analizy * Technologie: MongoDB, Python, Django i NumPy Wszystkie dane mają być przechowywane w formacie JSON z całą logiką biznesową napisaną w celu parsowania pliku JSON (technicznie, w w moim przypadku słownik Pythona) i generuj dane wyjściowe na podstawie kluczy i wartości. **Więc dlaczego tu jestem?** Obecna firma programistyczna zaleciła tradycyjny, gotowy do użycia system RDBMS, który można dostosować. Głównym problemem, jaki napotykam w systemie, jest duplikacja danych dla produktów o różnych atrybutach, brak narzędzi analitycznych, ścisłe sprzężenie z produktami i cenami oraz zbyt duża liczba złączeń dla złożonych zapytań, ale jest to zalecane dla lepszej odporności i lepszej analizy zagregowanej i XXXX zawsze mówił, że rynek stosuje takie podejście. Ponieważ całe oprogramowanie nie ma być używane w czasie rzeczywistym, a większość systemów czasu rzeczywistego łączy się tylko z unikalnymi produktami. * Czy proponowany przeze mnie projekt jest naprawdę ortogonalny? * Czy luźny produkt, koszt i ceny działają? * Jakie jest ogólne podejście do tego rodzaju problemu? * Czy MapReduce zapewnia lepszy sposób analizy danych dla tego rodzaju problemów (wraz z NumPy) niż tradycyjne podejście SQL. Zasadniczo pracuję z liczbami i myślę o ogólnym modelu, który mógłbym rozszerzyć w przyszłości.


title: Jaka jest najbardziej liberalna licencja open source?

text: Jaka jest najbardziej liberalna dostępna licencja open source? „Tolerancyjny” zostałby zdefiniowany jako „minimalne wymagania dotyczące sposobu redystrybucji oprogramowania”.


title: Potrzebujesz porady dotyczącej przenoszenia skryptu linux do wiersza poleceń Win

text: Tworzę aplikację (skrypt), która jest używana podobnie do czytnika RSS dla określonej strony internetowej, która nie ma RSS. Moja aplikacja pobiera więc tę stronę html w określonych odstępach czasu, sprawdza nowe elementy i przetwarza je na wiadomości wysyłane przez sieć. Ale prototyp mojej aplikacji jest napisany w Bash (Linux to mój podstawowy system operacyjny) i poproszono mnie, aby ta aplikacja była potrzebna także w systemie Windows - na szczęście tylko 32-bitowy WinXP. Decyduję więc, jak łatwo to przepisać i bez testowania różnych języków skryptowych i technologii. Obecnie moja aplikacja współpracuje z Bash i wywołuje narzędzia uniksowe, takie jak sed, wget i curl. Sprawdziłem, że te narzędzia są również dla win32. Więc moje pytanie dotyczy możliwości wiersza poleceń systemu Windows w porównaniu z linux bash. Czy wincmd ma podobne możliwości jak bash? W m.in. manipulowanie ciągami, cyklami lub czymś, co może stanowić problem? Znalazłem też Cygwina, ale nie wiem, czy działa niezawodnie i jest to ważne w tym przypadku aplikacji.


title: Wydajność kontra lenistwo: po co używać ustawiaczy z klasy?

text: Zauważyłem, że kod związany z siecią używa metod ustawiających do ustawiania pól klas zamiast ustawiania ich bezpośrednio, ponieważ znajdują się one w zasięgu. Uważam, że to trochę dziwne. Używanie seterów jest z pewnością bezpieczniejsze, ale jeśli zostaną zaimplementowane testy jednostkowe, zostaną znalezione błędy. I to nie jest warte dodatkowego wywołania stosu, imo. Czy robi to jakikolwiek kod produkcyjny, czy właśnie to widzisz w przykładowym kodzie online? Edycja: Muszę wyjaśnić, że mówię tylko o przypadku, w którym setter składa się wyłącznie z pojedynczego wyrażenia przypisania i nic więcej.


title: Standardy projektowania stron internetowych

text: Czy projektując strony internetowe z wykorzystaniem php należy przestrzegać standardów? Załóżmy na przykład, że są dwie strony. Pierwsza strona wygląda tak: <body> <div> <?php include 'page2.php';?> plik `page2.php` wygląda tak: <?php print 'jakiś tekst';?> </div> < /body> Czy takie projektowanie jest standardową praktyką? Czy ma to wpływ na wyniki wyszukiwania?