title: Jak radzić sobie z CEO podejmującym wszystkie techniczne decyzje, ale z niewielką wiedzą techniczną?

text: Pytanie wysłane anonimowo z oczywistych powodów. Pracuję w firmie z grupą deweloperską składającą się z 5-6 programistów i jestem w sytuacji, z którą ciężko mi sobie poradzić. Każdy wybór techniczny (język, framework, baza danych, schemat bazy danych, schemat konfiguracji itp.) jest podejmowany przez CEO, często bez większego uzasadnienia. Bardzo trudno modyfikować te wybory, a jego głównym argumentem jest „nie podoba mi się to”, mimo że proponujemy kilka alternatyw ze szczegółowymi plusami/minusami. Zdecyduje się również napisać od podstaw nasz podstawowy produkt, nie podając przyczyny, i nigdy nie uczestniczy w spotkaniach deweloperów, ponieważ uważa, że to spowalnia sprawę… Już szukam alternatywnych możliwości pracy, ale zastanawiałem się, czy jest coś takiego my (deweloperzy) moglibyśmy zrobić, aby poprawić sytuację. Dwa przykłady, które mnie zszokowały: * poprosi nas o zaimplementowanie czegoś zbliżonego do zarządzania konfiguracją, ale odrzuca wszelkie istniejące frameworki, ponieważ nie są napisane w języku, który lubi (mimo że język implementacji jest nieistotny). Oczekuje też, że będziemy w stanie napisać te systemy w kilka dni, "bo to bardzo proste". * ciągle przepisuje od zera nasz podstawowy produkt, ponieważ obecny kod jest kiepski (baza kodu, której projekt był jego). Jesteśmy na trzecim przepisaniu w ciągu jednego roku, każda przeróbka gorsza niż poprzednia. Rzeczy, których próbowałem do tej pory, to robienie rozbudowanych testów porównawczych na naszym produkcie (narzeka, że nasze oprogramowanie jest zbyt wolne i uzasadnia przepisywanie, aby było szybsze), wdrażanie rozwiązań z istniejącymi produktami jako działającymi dowodami, zamiast tworzenia wykresów zalet / wad, itd... Ale nadal 90% tych wysiłków trafia do kosza (nigdy z jakimkolwiek uzasadnieniem, że mu się to nie podoba) i często dostają reprymendy, ponieważ nie robię dokładnie tak, jak on chce (nie zdając sobie z tego sprawy to, czego chce, jest niemożliwe).


title: Czy wywołania usługi WCF za pośrednictwem JSONP są bezpieczne?

text: Zamierzam opracować kompletną aplikację mobilną `HTML5/JS`, którą można wdrożyć na platformach Android, iOS i Windows. Pomogły mi w tym narzędzia `DevExtreme`. Mam już usługę WCF, która obsługuje mi wszystko, czego potrzebuję dla tej aplikacji. Chcę ponownie użyć tego samego i dowiedzieć się, jak mogę użyć JSONP (ponieważ wykonywałbym połączenia między domenami) i wywołań GET, aby uzyskać wynik z mojej usługi. Wdrożyłem usługę i zacząłem z niej korzystać. Teraz odgaduję moje podejście. Czy używanie wywołań JSONP dla wszystkich żądań usług jest wystarczająco bezpieczne? Zwłaszcza w przypadku takich rzeczy jak uwierzytelnianie użytkownika, jeśli wyślę nazwę użytkownika i hasło przez adres URL, czy jest to bezpieczne? Mam połączenia serwisowe zabezpieczone za pomocą SSL, ale czy to naprawdę pomaga? Jeśli nie, jaki byłby bardziej standardowy sposób na zrobienie tego? ****UPDATE:**** Innym problemem, na który natknąłem się było wysyłanie znaków specjalnych w wywołaniu GET JSONP. Coś w rodzaju „\” lub „*”. „EncodeURI()”, „EncodeURIComponent()”, „escape()” nie działają dla tych znaków. Zawsze dostawałem błędy na to samo i zakładając, że użytkownicy będą mieli bezpieczne hasła ze znakami specjalnymi, cała koncepcja używania GET z JSONP wydaje się bezużyteczna


title: Przypadki użycia NoSQL

text: Opracowuję aplikację na moje studenckie sympozjum badawcze wokół idei wytrwałości poligloty. Przeczytałem książkę Martina Fowlersa i przeprowadziłem kilka innych badań online na temat różnych typów baz danych NoSQL. Jestem ciekawy, jakie są różne przypadki użycia dla różnych baz danych NoSQL? Obecnie mam to, na co zwrócił uwagę Fowler (inne badania dotyczyły głównie API). Klucz/Wartość: * dane sesji * profil użytkownika * koszyk * w zasadzie wszystko, co ma jeden unikalny klucz, który można łatwo wygenerować i powielić Dokument: * rejestrowanie zdarzeń * CMS/blogowanie * e-commerce (po zakończeniu transakcji) * Analiza internetowa Rodzina kolumn: * rejestrowanie zdarzeń * CMS/blogowanie * liczniki * wygasające użycie Wykres: * połączone dane * usługi oparte na lokalizacji * silnik rekomendacji Jakie są więc inne przypadki użycia? Dokładniej, jakie są przypadki użycia dla każdego typu bazy danych NoSQL, które są lepsze niż model relacyjny?


title: Jak przygotować się do przepisania kleju aplikacji

text: Załóżmy, że masz projekt, który (Twoim zdaniem) jest w większości przyzwoicie dobrze napisany, zmodularyzowany itp. i chcesz zachować większość jego funkcjonalności. Jednak zasadnicza część tego projektu nie jest dobrze zaprojektowana i nie można jej łatwo naprawić za pomocą drobnych zmian. Jedynym sposobem, aby to naprawić, jest wyrwanie dużej części kodu; nie jest tak źle, że potrzebujesz (lub powinieneś) zacząć od zera, ale jest to bardzo wszechobecne. Załóżmy, że kod to mniej więcej 20 000 linijek bez odstępów, nie pojedynczy nawias klamrowy, kod Java, C++, C#, PHP lub Ruby bez komentarzy. Szacujesz, że około 2000-3000 wierszy musi zostać wyrzuconych lub zmienionych. W przypadku czegoś takiego jak Java lub C#, jeden z twoich pakietów/przestrzeni nazw zostanie prawdopodobnie całkowicie przepisany od nowa, a wiele odwołań do tych klas ulegnie zmianie. Oto trudna część: kod, który wymagał zmiany, to KLEJ w systemie. Oto bardzo prosty obrazek, który podsumowuje problem: ![tutaj podaj opis obrazka](http://i.stack.imgur.com/bdhY9.png) Oto sytuacja, w której się znalazłem, która doprowadziła do tego pytania: Co powinienem zrobić, gdy już czekałem zbyt długo między zatwierdzeniami? Jak widać, to nie tylko części kodu, które wykonywały wewnętrzne przetwarzanie, ale także części, które komunikowały się z innymi częściami systemu. Zarówno API, jak i wewnętrzne struktury danych były niewystarczające. Próba utrzymania działania obu zestawów API dla zmian przyrostowych byłaby żałośnie zbędna. Oczywiście rozgałęziałem się, zanim cokolwiek zrobiłem, ale każda dokonana przeze mnie zmiana dawała produkt, który po prostu nie działał. W wielu przypadkach stworzyłem błędy kompilacji. To doprowadziło mnie do ciągłego odkładania zatwierdzeń, ponieważ pomyślałem „tak, połączyłem te elementy z powrotem, ale nadal muszę zaimplementować ten inny nowy interfejs, napisać tę podstawową funkcjonalność itp.” Zaowocowało to kardynalnym grzechem niesprawdzania czegokolwiek, błędu, którego wolałbym nie powtarzać, gdybym znów znalazł się w takiej sytuacji. Zostało to złagodzone przez fakt, że wszystkie moje API były wewnętrzne, z wyjątkiem tego, że musiałem dostosować się do API świata zewnętrznego i modułów stron trzecich, ale moje wrappery do tych sekcji zmieniały się. Jednym z oczywistych alternatywnych rozwiązań byłoby po prostu zaakceptowanie faktu, że każda zmiana spowoduje zepsuty ogólny produkt, ale ponieważ sprawdzasz się w gałęzi, jest to w porządku. Zwłaszcza, że jestem jedynym programistą pracującym nad tym kodem i korzystającym z tych API. Więc może to jest właściwa rzecz do zrobienia. A może słuszną rzeczą do zrobienia jest próba najpierw refaktoryzacji API do nowego, bez faktycznej zmiany funkcjonalności (jeśli to możliwe), nawet jeśli niektóre argumenty są fałszywe lub zostaną ostatecznie usunięte, a następnie zmiany przyrostowe są o wiele bardziej samodzielne zawarte. A może jest całkowicie lepszy sposób?


title: Jak zrekonstruować tę aplikację za pomocą wzorca projektowego?

text: Angażuję się w przeprojektowanie aplikacji serwera linux c++. Aplikacja działa jako przekaźnik plików w postaci odbierania pakietów plików (w tym pakietów kontrolnych i pakietów danych) od klienta A, zapisywania tych pakietów do lokalnego pliku danych, a następnie tworzenia i aktualizowania pliku indeksu, wreszcie uruchomienia wielu wątków, aby odczytać dane pliku i przekazuje te pakiety danych do swoich odbiorców, takich jak klient B, klient C, klient D, itp. Schemat przepływu danych wygląda następująco: Klient A -> Serwer -> Klient B, Klient C, Klient D, ... Obecnie aplikacja korzysta z programu Producer -Wzorzec konsumencki do przekazywania pakietów danych między modułami, oto kilka modułów, które mamy: SocketModule (zawiera wątek do nasłuchiwania i odczytywania danych przychodzących ze wszystkich gniazd), SessionModule (do zarządzania sesjami tcp użytkowników), FileRelayModule (zawiera wiele wątków do wykonywania zadań jak przetwarzanie przychodzących pakietów i zapisywanie w lokalnym pliku danych, odczytywanie lokalnych plików danych i aktualizowanie plików indeksowych oraz przekazywanie tych pakietów danych do odbiorników za pośrednictwem gniazd TCP). Problem polega na tym, że jego wydajność jest tak słaba, weźmy przykład, wysłanie przez klienta A pliku o rozmiarze 200M do klienta B zajmuje około 15 minut, ale wysłałem i odebrałem plik p2p między różnymi maszynami, zajęło to tylko 20 sekund . Uważamy, że główną przyczyną złej wydajności jest to, że przechowujemy informacje o gniazdach w globalnym std::map, a następnie każdy wątek, który chce wysłać dane (do klientów), musi poczekać na blokadę dla std::map, stąd aplikacja działa jak aplikacja jednowątkowa. Ponieważ oryginalny projekt tej aplikacji nie przestrzega zasad wzorca projektowego, co powoduje wiele problemów, dlatego chcemy przeprojektować ją przy użyciu wzorca MVC, dodając role menedżera wątków i menedżera plików. Pierwszą rzeczą, o której myślę, jest użycie ThreadPool, a następnie wysłanie każdego zaakceptowanego gniazda do wątku, który ma najmniej klientów (liczbę gniazd). Czy jest to możliwe lub uzasadnione w przypadku tej aplikacji? Co byś zrobił, gdybyś był projektantem tego projektu? **[aktualizacja]** 1\. Sprawdzę projekt i dowiem się, która część jest prawdziwym wąskim gardłem wydajności 2\. Bez względu na to, która część jest prawdziwym wąskim gardłem, musimy zrekonstruować aplikację, aby zarządzała zasobami, takimi jak wątki i pamięć, i była łatwa w utrzymaniu. Zrobię takie rzeczy jak: 1\. Utwórz wiele klas: CSessionManager do zarządzania danymi sesji tcp (zawiera wątek), CFileManager do przekazywania i zarządzania wszystkimi plikami danych i plikami indeksowymi (zawiera ThreadPool z 32 wątkami, który zawiera mapę gniazd i gniazdo nasłuchujące), CFileServer (zawiera CSessionManager i CFileManager). Tutaj CFileServer działa jako kontroler, CFileManager działa jako model. 2\. CFileManager utworzy pulę wątków z 32 wątkami zainicjowanymi podczas uruchamiania. CFileServer tworzy gniazdo nasłuchiwania i umieszcza każde zaakceptowane gniazdo w CFileManager, w którym nowe zaakceptowane gniazdo jest ustawione na wątek w puli wątków, sprawdzając, kto ma najmniej gniazd. **[update2]** Pula wątków zostanie zaprojektowana w następujący sposób (czy jest to uzasadnione?): std::list<CThread*> worker; //każdy wątek byłby class CThread{ public: PostMsg(CMessage*); pustka statyczna Run(); private: map<int, socketinfo*> gniazd; std::deque<CMessage*> kolejka wiadomości; }; ... Inne obiekty wywołają PostMsg, aby przekazać wiadomość do tego CThread i w funkcji run: void CThread::Run(){ .... while(1){ .... //najpierw przetwórz wszystkie komunikaty //te komunikaty obejmują dodanie gniazda, //usunięcie gniazda lub przejście do trybu offline CMessage* msg = messageQueue.pop_front; if (msg != NULL) { proces(msg); } //po przetworzeniu komunikatów //teraz odczyt/zapis danych gniazd //ustaw readfd i writefd ret = select(max, readfd, writefd, NULL, timeout); //teraz przetwarzaj readfd i writefd //odczytaj dane z readfd, a następnie zapisz do lokalnego //pliku odczytaj dane z lokalnego pliku, a następnie zapisz //do wirtefd lub wyślij wiadomość do kontrolera // w celu usunięcia fd z tablicy. ...... } }


title: Jak nazywasz ten wzór/technikę?

text: Ostatnio używałem tej techniki kilka razy i próbuję dowiedzieć się, czy ma ona nazwę, czy jest to jeden z wzorców itp. W skomplikowanych sytuacjach, w których normalnie mam kilka gigantycznych instrukcji select case, Eksperymentowałem z podejściem w stylu wtyczki. Tworzę interfejs, nazwijmy go IProblemHandler i może ten interfejs udostępnia właściwość wyliczającą rodzaje problemów, które może obsłużyć (IProblemHandler.HandledProblems), a nawet lepiej, może problem, który obsługuje jest osadzony w nazwie klasy - konwencja nad konfiguracją . Następnie zamiast instrukcji select case, wywołuję kod, który odzwierciedla wszystkie klasy w określonym asemblerze i ściąga te, które implementują interfejs, a następnie określa, który z nich jest odpowiedni dla danego problemu, tworzy jego instancję i rozwiązuje problem. W przeszłości używałem go jako architektury wtyczek, ale okazuje się, że jest naprawdę przydatny jako sposób radzenia sobie z pewnymi rodzajami złożoności. Wygląda na to, że może jest to domena kontenerów IoC i tak dalej. Wiem, że zarządzane ramy rozszerzalności wykonują niektóre z tych rzeczy. Więc... Czy znasz nazwę dla tego typu rzeczy?


title: Dlaczego szkoły nie uczą o złym kodzie?

text: Podczas pisania Javy zdałem sobie sprawę, że w systemie może być dużo złego kodu. Zastanawiam się, dlaczego szkoły nie uczą, jakie praktyki programowania są złe. Na przykład w Javie użycie dużego bloku try/catch, który przechwytuje `Exception` jest złe, ale nikt mi o tym nie powiedział. I widzimy typową konkatenację "String + String" pojawiającą się w każdym zakątku programu. Czy nie jest zadaniem szkół, zakładając, że większość programistów uczy się w szkole, a nie jest samoukiem, ostrzeganie uczniów przed pułapkami programowania?


title: Czy/jak działają różne frameworki flex z Flash Builder?

text: Czytałem o różnych ramkach Flex, Robot Legs, Swiz, Cairgnom (błąd pisowni) i kilku innych. Brakuje mi tego, jak faktycznie działają z Flex / Flash Builder. Czy są to po prostu biblioteki, których można używać w środowisku Flash Builder IDE? Dlaczego powinienem nauczyć się korzystać z jednego z nich, zamiast po prostu używać IDE takiego, jakie jest?


title: Korzyści z EJB nad POJO dla Jersey JAX-RS Resources

text: Piszę aplikację Jersey 1.9 JAX-RS. Muszę użyć 1.9, ponieważ jest to jedyna obsługiwana wersja. Próbuję zdecydować, czy jest jakaś korzyść z używania EJB jako moich zasobów Jersey, a nie POJO. Moje zasoby są przeznaczone wyłącznie dla mojego REST API; delegują do mojej usługi biznesowej EJB, gdy tylko tłumaczenie domeny zostanie zakończone. Obecnie skłaniam się ku POJO, ponieważ jest to prostsze i mam tylko jedno wyszukiwanie EJB dla mojej usługi biznesowej, które mogę scentralizować w jednej klasie narzędziowej. Tak czy inaczej, będę musiał przeprowadzić wyszukiwanie InitialContext, albo dla mojej usługi biznesowej z moich zasobów JAX-RS, albo dla (potencjalnie) zasobów EJB z klasy aplikacji Jersey. Czy korzystanie z EJB jako moich zasobów przynosi jakieś korzyści w zakresie wydajności lub architektury, biorąc pod uwagę, że jedyną rzeczą, która z nich korzysta, jest serwlet Jersey?


title: Czy lepiej narysować własną grafikę, czy zaimportować obrazy?

text: Mam zamiar uruchomić klon Tetrisa używając Javy jako języka programowania. Kiedy projektowałem, jak to zrobić, natknąłem się na to pytanie: Co byłoby lepsze, jeśli w ogóle jakakolwiek różnica, jeśli chodzi o wydajność 1, aby narysować moją grę? Dla uproszczenia posłużę się jako przykład siatką tła. Poniższy kod będzie działał w pętli aktualizacji grafiki: 1) Aby wykonać rysowanie za pomocą mojej zmiennej `graphics g`, takiej jak ta g.setColor(Color.DARK_GRAY); for(int x = 0; x < LICZBA_KOLORÓW; x++) { for(int y = 0; y < LICZBA_WIEZÓW_WIDOCZNYCH; y++) { g.drawLine(0, y * ROZMIAR_KAFELKI, LICZBA_KOLORÓW * ROZMIAR_KAPEK, y * ROZMIAR_KAPEK); g.drawLine(x * TILE_SIZE, 0, x * TILE_SIZE, VISIBLE_ROW_COUNT * TILE_SIZE); } } lub 2) wstępnie załaduj obraz w następujący sposób: BufferedImage img = null; spróbuj { img = ImageIO.read(new File("grid.jpg")); } catch (IOException e) { } a następnie użyj mojej grafiki, aby ją narysować za pomocą Graphics drawImage: g.drawImage(img, x, y, null) 1 \- _Wiem, że gra Tetris nie jest tak żądna wydajności, ale Uważam, że to nie unieważnia pytania._


title: Jak pozbyć się strachu przed niemożnością rozwiązania złożonego programu?

text: Ilekroć zaczynam rozwiązywać jakiś złożony problem i próbuję go rozwiązać za pomocą programu. Czuję się zdemotywowany. Zamiast ekscytować się tym, czuję, że nie będę w stanie rozwiązać tego programu, jest to bardzo trudne. Wiem, że mogę to rozwiązać, ale z powodu tych uczuć rozwiązanie tego zajmuje dużo czasu. Ilekroć dostanę zmianę, aby rozwiązać jakiś trudny problem, ten strach przyjdzie mi do głowy i powstrzyma mnie od myślenia lub powie mi, że nie będziesz w stanie tego zrobić itp. Ten strach ogarnia mnie od dłuższego czasu. Wiem, że to strach psychologiczny, ale bardzo mnie to niepokoi. To powstrzymuje mnie od zostania najlepszym programistą, jakim zawsze chciałem być. Proszę pomóż.


title: Jak dodać współtwórców do pliku LICENSE?

text: Jestem głównym deweloperem biblioteki, licencjonowanej na licencji MIT i hostowanej na Github. Repozytorium Github zawiera plik LICENSE. Kiedy ktoś wysyła mi żądanie ściągnięcia, czy muszę wymienić ich jako posiadaczy praw autorskich w załączonym pliku license.txt, czy też powinienem wymienić ich w specjalnej sekcji? Czy muszę to zrobić? Czy mogę założyć, że współtwórcy zgadzają się dołączyć swój kod do licencji określonej w LICENSE, kiedy wysyłają pull request?


title: Które języki z typami statycznymi obsługują typy przecięcia dla wartości zwracanych przez funkcję?

text: > **Uwaga wstępna:** > > To pytanie zostało zamknięte po kilku zmianach, ponieważ brakowało mi odpowiedniej > terminologii, aby dokładnie określić to, czego szukałem. Sam Tobin-Hochstadt > następnie wysłał komentarz, który pozwolił mi dokładnie rozpoznać, co to było: > języki programowania obsługujące typy przecięcia dla zwracanych funkcji > wartości. > > Teraz, gdy pytanie zostało ponownie otwarte, postanowiłem je ulepszyć, > przepisując je w (miejmy nadzieję) bardziej precyzyjny sposób. Dlatego niektóre odpowiedzi > i komentarze poniżej mogą już nie mieć sensu, ponieważ odnoszą się do poprzednich > zmian. (W takich przypadkach zapoznaj się z historią edycji pytania). Czy istnieją popularne statycznie i silnie typizowane języki programowania (takie jak Haskell, ogólna Java, C#, F# itp.), które obsługują typy przecięcia dla wartości zwracanych przez funkcje? Jeśli tak, to jakie i jak? (Jeśli mam być szczery, naprawdę chciałbym zobaczyć, jak ktoś zademonstruje sposób wyrażania typów skrzyżowań w języku głównego nurtu, takim jak C# lub Java.) Podam szybki przykład tego, jak mogą wyglądać typy skrzyżowań, używając niektórych pseudokod podobny do C#: interface IX { … } interface IY { … } interface IB { … } class A : IX, IY { … } class B : IX, IY, IB { … } T fn() gdzie T : IX, IY {         zwrócić … ? nowy A() : nowy B(); } Oznacza to, że funkcja `fn` zwraca instancję pewnego typu `T`, o której wywołujący wie tylko, że implementuje interfejsy `IX` i `IY`. (Oznacza to, że w przeciwieństwie do generyków, wywołujący nie może wybrać konkretnego typu `T` -- funkcja robi to. Z tego przypuszczam, że `T` nie jest w rzeczywistości typem uniwersalnym, ale typem egzystencjalnym .) **P.S.:** Zdaję sobie sprawę, że można po prostu zdefiniować `interfejs IXY : IX, IY` i zmienić typ zwracany z `fn` na `IXY`. Jednak to nie jest to samo, ponieważ często nie można podłączyć dodatkowego interfejsu `IXY` do wcześniej zdefiniowanego typu `A`, który implementuje tylko `IX` i `IY` oddzielnie. * * * > **Przypis: Niektóre zasoby dotyczące typów skrzyżowań:** > > Artykuł w Wikipedii dotyczący _„System typów”_ zawiera podsekcję dotyczącą skrzyżowań > typów. > > Raport Benjamina C. Pierce'a (1991), _"Programowanie z typami przecięć, > Typy połączeń i polimorfizm"_ > > David P. Cunningham (2005), _"Typy przecięcia w praktyce"_, który > zawiera studium przypadku dotyczące języka Forsythe, o którym mowa w artykule > Wikipedia. > > Pytanie Stack Overflow, _"Typy Unii i typy przecięcia"_, które uzyskało > kilka dobrych odpowiedzi, w tym ta, która daje przykład pseudokodu > typów przecięcia podobnych do mojego powyżej.


title: Moduły i motywy

text: Moduł to zbiór plików, które razem tworzą funkcję. Cechą może być logowanie, przeglądanie profilu użytkownika itp. Motyw zawierałby pliki szablonów i zasoby (img, css itp.). Problem polega na tym, jak one będą ze sobą współpracować, powiedzmy, że moduł został utworzony i istnieją różne motywy, nie jestem zainteresowany koniecznością tworzenia plików szablonów specjalnie dla modułu, jak można to osiągnąć w elastyczny sposób, aby nadal mieć przyzwoity wygląd. Jednym ze sposobów może być użycie dziedziczenia szablonów, w ten sposób użytkownik musiałby stworzyć tylko jeden plik szablonu, aby moduł był dostosowany do wyglądu. Jakieś inne pomysły, jak to zrobić?


title: Czy powinniśmy być całkowicie szczerzy wobec naszych klientów co do ram czasowych projektu?

text: Mam to doświadczenie od jakiegoś czasu, kiedy klient potrzebuje oprogramowania i kontaktuje się ze mną, klient zwykle chce poznać ramy czasowe, w których ten produkt zostanie zrealizowany. Zazwyczaj jako programista nie jestem w stanie w pełni określić, ile czasu zajmie mi ukończenie pracy, ponieważ mogę napotkać błąd, którego rozwiązanie może zająć mi tygodnie (czasem miesiące). Jeśli powiem klientowi oczekiwane ramy czasowe na podstawie mojej analizy, tj. bez względu na to, jak źle się stanie, powinienem być w stanie zakończyć pracę w maksymalnie powiedzmy 6 miesięcy (na przykład). Mój klient zwykle mówi NIE! sześć miesięcy to za długo, pilnie tego potrzebuję, maksymalnie jeden miesiąc. Jeśli odmówię zaakceptowania terminu podanego przez klienta, może on przekazać zlecenie innemu programiście, który zaakceptuje krótkie ramy czasowe klienta, a mimo to nie wykona zlecenia na czas. Z drugiej strony, jeśli zaakceptuję krótkie ramy czasowe klienta i dostanę umowę (wiedząc, że nie da się jej zakończyć na czas), uda mi się tylko zdobyć umowę, a później wymyślę wymówki dlaczego praca nie została ukończona na czas. Teraz wydaje się to być normą, ale w głębi duszy czuję, że uczę się nieuczciwości, aby zdobyć kontrakty. Czy to zła rzecz, czy to tylko strategia biznesowa?


title: Architektura aplikacji webowej „generatora witryn”

text: Jaki jest najłatwiejszy w utrzymaniu i wydajny sposób na zaprojektowanie aplikacji internetowej, której celem jest hostowanie i generowanie stron internetowych, które można w pewnym stopniu dostosować? Istnieje wiele takich stylów aplikacji na wolności, które generują wszelkiego rodzaju witryny, od witryn hostujących gildie World of Warcraft po inne witryny, które prowadzą hosting witryn ślubnych. Moje pytanie brzmi, jaka jest podstawowa architektura, na której działają te witryny? Wyobrażam sobie, że są dwa sposoby myślenia o tym. Centralny zestaw kodu, z którym działają wszystkie witryny na hoście i działa inaczej w zależności od odwiedzonej witryny. W ten sposób, gdy kod bazowy jest aktualizowany, wszystkie witryny są aktualizowane jednocześnie. Lub kod dla pojedynczej witryny istnieje w silosie i jest po prostu replikowany do nowego katalogu za każdym razem, gdy tworzona jest witryna. Gdy konieczne jest zastosowanie aktualizacji, kod jest rozsyłany do każdego silosu zakładu. W moim przypadku pracuję w PHP z frameworkiem CodeIgniter, jednak odpowiedź nie musi ograniczać się do tego przypadku. Która metoda (jeśli w ogóle) tworzy bardziej możliwą do utrzymania i wydajną architekturę do zarządzania tym stylem aplikacji internetowych?


title: Lepszy sposób wyszukiwania tekstu w dwóch kolumnach

text: Oto scenariusz. Tworzę niestandardowe oprogramowanie do blogowania dla mojej witryny. Wdrażam funkcję wyszukiwania. Nie jest zbyt wyrafinowany - po prostu pobiera wprowadzoną frazę wyszukiwania i uruchamia to zapytanie: $query="SELECT * FROM `blog` WHERE `title` LIKE '%$q%' OR `post` LIKE '%$q%' "; Ma to na celu po prostu wyszukanie tytułu i treści posta dla wprowadzonej frazy. Czy istnieje lepszy sposób, aby to zrobić, biorąc pod uwagę, ile czasu zajęłoby uruchomienie zapytania w maksymalnie 100 wierszach, z których każdy zawiera post o długości do 1500 znaków? Rozważałem użycie instrukcji LIMIT, aby (czasami) ograniczyć liczbę wierszy, które zapytanie będzie badać. Dobry pomysł?


title: Jakieś wiadomości na temat następnej wersji WPF?

text: Słyszałem o Silverlight 5 od Microsoftu. Ale co z WPF? Czy Microsoft planuje wycofanie WPF, czy będzie nowa wersja? Właśnie przeszliśmy z winforms na WPF i teraz kolejna zmiana będzie trudna. Proszę o wszelkie linki z informacjami o kolejnej wersji WPF. Dziękuję Ci.


title: Czy doświadczeni programiści powinni znać zapytania do bazy danych?

text: Jest tak wielu programistów, którzy są również ekspertami w pisaniu zapytań i projektowaniu baz danych. Czy powinien to być podstawowy wymóg, aby być doświadczonym programistą lub inżynierem oprogramowania? Chociaż istnieje wiele podobieństw w sposobie tworzenia zapytań i kodów, moja osobista opinia jest taka, że **Zapytania** wydają się mieć inną _Strukturę_ niż **Kod** i może być trudno opanować oba jednocześnie ze względu na różne podejścia.


title: Porady dotyczące korzystania z svn

text: Potrzebuję porady na temat korzystania z SVN. Używam Tortoise SVN na moim kliencie, aby poradzić sobie z projektem, nad którym pracuję. Problem polega na tym, że mam dwa zestawy błędów w projekcie. Jeden do wdrożenia do 5 dni, a drugi do 10 dni. Mam zamiar rozwiązać wszystkie błędy przed piątym dniem, ale nie chcę wdrażać ostatnich 5 przed datą premiery (do 10 dni). Jak mogę pracować na dwóch osobnych kodach i scalić wszystkie modyfikacje? Czy to możliwe? muszę stworzyć oddział?


title: Jaki jest dobry sposób na przechowywanie/ładowanie listy słów z tysiącami wpisów?

text: Pracuję nad projektem, który wymaga prostego słownika do sprawdzania pisowni; będzie duży, ale brak mu definicji. Rozwiązanie, nad którym obecnie pracujemy, ma podstawową listę słów w pliku tekstowym oraz dostosowania (dodatkowe słowa, wykluczone słowa) w bazie danych. Cała lista musi być załadowana (najlepiej buforowana, jak sądzę) w celu wyświetlania stronicowanych i dostosowywania przy użyciu istniejącego widżetu JS, więc jaki jest najlepszy sposób na przechowywanie i ładowanie podstawowej listy słów? Moją pierwszą myślą było stworzenie pliku tekstowego z jednym słowem w wierszu i napisanie własnego obiektu ładującego i pamięci podręcznej, ale mój szef zasugerował użycie pakietu ResourceBundle, aby wykorzystać wbudowane buforowanie. Myślę, że można to zrobić, używając słów jako kluczy z pustymi wartościami i używając zestawu kluczy pakietu. Jakie byłoby najlepsze rozwiązanie tego problemu?


title: Czy w scrum dozwolona jest losowa refaktoryzacja kodu?

text: Tło * Mój zespół używa scrum * Obecnie nie mam przypisanego zadania * W backlogu nie ma już żadnych oczekujących zadań * Dzisiaj jest Święto Pracy dla mojego klienta. Nie mając dzisiaj wielu rzeczy do zrobienia, chciałem rozpocząć refaktoryzację kodu, który ciągle widzę w projekcie, nad którym pracuję, ale obecnie nie jestem przydzielony do żadnego zadania sprintu, aby wykonać refaktoryzację na dużą skalę. Czy w **Scrumie** jest OK, jeśli zacznę losowo refaktoryzację kodu, który mam i nie napisałem, a który zawsze mnie denerwuje, ale nie mam czasu na inne dni, aby to naprawić z powodu innych dni przydziałów? A co z innymi dniami, w których mam wolny czas między sprintami. Właściwie to robię i wierzę w ciągłą refaktoryzację. Zawsze robię to na fragmentach kodu, nad którymi pracuję, gdy przypisuję historię, ale co z innym kodem, który widzę, a który nie jest obecnie powiązany z tym, nad czym pracuję w danym momencie?


title: konieczna migracja do Web API z kontrolera MVC

text: Od czasu wydania Web API zastanawiałem się, czy migracja/zmiana kontrolerów MVC w celu korzystania z wywołań Web API jest konieczna lub pomocna. Ponieważ trudno opisać kod, pokażę przykład tego, co mam na myśli: Obecny kontroler, `_userService` jest w zasadzie warstwą `Business` aplikacji, która następnie wywołuje repozytorium i pobiera wszystkich użytkowników. [HttpGet] public ActionResult List() { var lista = _userService.GetAll(); if(list.Any()) return View("Lista",lista); return View(list.ToList()); } Czy nie byłoby lepiej użyć Web API i pobrać listę użytkowników jako obiekt JSON, a następnie powiązać ją z widokiem za pomocą JavaScript? (ewentualnie nokaut, jeśli dotyczy). Nie jestem pewien, czy moje pytanie jest wystarczająco jasne, więc daj mi znać, jeśli muszę coś wyjaśnić.


title: Testy jednostkowe i bazy danych: W którym momencie faktycznie połączę się z bazą danych?

text: Istnieją odpowiedzi na pytanie, w jaki sposób klasy testujące łączą się z bazą danych, m.in. "Czy klasy testów usług powinny się łączyć..." i "Testowanie jednostkowe - aplikacja połączona z bazą danych". Krótko mówiąc, załóżmy, że masz klasę A, która musi połączyć się z bazą danych. Zamiast pozwolić A faktycznie się połączyć, dostarczasz A z interfejsem, którego A może użyć do połączenia. Do testowania implementujesz ten interfejs z kilkoma rzeczami - oczywiście bez podłączania. Jeśli klasa B tworzy instancję A, musi przekazać „prawdziwe” połączenie z bazą danych do A. Ale to oznacza, że B otwiera połączenie z bazą danych. Oznacza to, że aby przetestować B, wstrzykujesz połączenie do B. Ale B jest tworzone w klasie C i tak dalej. Więc w którym momencie muszę powiedzieć „tu pobieram dane z bazy danych i nie napiszę testu jednostkowego dla tego fragmentu kodu”? Innymi słowy: Gdzieś w kodzie w jakiejś klasie **muszę** wywołać `sqlDB.connect()` lub coś podobnego. Jak przetestować tę klasę? Czy tak samo jest z kodem, który ma do czynienia z graficznym interfejsem użytkownika lub systemem plików? * * * Edycja: Do tej pory jest kilka fajnych odpowiedzi, ale mam wrażenie, że nie wyraziłem się zbyt jasno. Ostatnie podejście: chcę wykonać test jednostkowy. Żaden inny rodzaj testu nie jest związany z moim pytaniem. Wiem, że przetestuję nim tylko jedną klasę (tak się z Tobą zgadzam Kilian). Teraz jakaś klasa musi połączyć się z bazą danych. Jeśli chcę przetestować tę klasę i zapytać „Jak to zrobić”, wielu mówi: „Użyj Dependency Injection!” Ale to tylko przenosi problem na inną klasę, prawda? Pytam więc, jak przetestować klasę, która naprawdę nawiązuje połączenie? Dodatkowe pytanie: Niektóre odpowiedzi tutaj sprowadzają się do „Użyj pozorowanych obiektów!” Co to znaczy? Wyśmiewam klasy, od których zależy testowana klasa. Czy mam teraz kpić z testowanej klasy i faktycznie przetestować makiety (co zbliża się do idei używania metod szablonowych, patrz poniżej)?


title: Jak stworzyć lepszy kod OO w aplikacji opartej na relacyjnej bazie danych, w której baza danych jest źle zaprojektowana?

text: Piszę aplikację internetową Java, która składa się głównie z wielu podobnych stron, w których każda strona ma kilka tabel i filtr, który stosuje się do tych tabel. Dane w tych tabelach pochodzą z bazy danych SQL. Używam myBatis jako ORM, co może nie być najlepszym wyborem w moim przypadku, ponieważ baza danych jest źle zaprojektowana, a mybatis jest narzędziem bardziej zorientowanym na bazę danych. Zauważyłem, że piszę dużo zduplikowanego kodu, ponieważ ze względu na kiepski projekt bazy danych muszę pisać różne zapytania o podobne rzeczy, ponieważ te zapytania mogą być bardzo różne. Oznacza to, że nie mogę łatwo sparametryzować zapytań. To propaguje się w moim kodzie i zamiast wypełniać wiersze w kolumnach w mojej tabeli za pomocą prostej pętli, mam kod taki jak: get _A_ Data (p1, ..., pi); pobierz dane _B_ (p1, ..., pi); pobierz dane _C_ (p1, ..., pi); pobierz dane _D_ (p1, ..., pi); ... I to szybko eksploduje, gdy mamy różne tabele z różnymi kolumnami. Dodatkowo komplikuje fakt, że używam "wicket", czyli w efekcie mapowania obiektów na elementy html na stronie. Tak więc mój kod Java staje się adapterem między bazą danych a interfejsem użytkownika, co powoduje, że muszę tworzyć wiele okablowania, standardowy kod z wplecioną w niego logiką. Czy właściwym rozwiązaniem byłoby opakowanie maperów ORM dodatkową warstwą, która przedstawia bardziej jednorodny interfejs do bazy danych, czy może jest lepszy sposób na poradzenie sobie z tym kodem spaghetti, który piszę? EDIT: Więcej informacji o bazie danych Baza danych zawiera głównie informacje o rozmowach telefonicznych. Słaby projekt składa się z: Tabele ze sztucznym identyfikatorem jako kluczem podstawowym, który nie ma nic wspólnego z wiedzą o domenie. Żadnych unikalnych, wyzwalaczy, sprawdzeń ani kluczy obcych. Pola o ogólnej nazwie, które pasują do różnych pojęć dla różnych rekordów. Rekordy, które można kategoryzować tylko przez skrzyżowanie z innymi tabelami o różnych warunkach. Kolumny, które powinny być liczbami lub datami, przechowywane jako ciągi. Podsumowując, niechlujny / leniwy projekt dookoła.


title: Czy drukowanie do konsoli/standardowego wyjścia jest dobrą strategią debugowania?

text: Powiedzmy, że mamy taką funkcję: public void myStart() { for (int i = 0; i<10; i++) myFunction(i); } private int mojaFunkcja(int a) { a = foo(a); a = bar(a); zwrócić; } private int foo(int a) { //zrób tu coś //tu coś skręconego //itd. return aValue; } private int bar(int a) { // zrób coś tutaj //zwróć wartość; } Teraz z jakiegoś powodu nasz kod nie działa. Może zgłasza błąd, może zwraca złą wartość, może utknął w nieskończonej pętli. Pierwszą rzeczą, jaką każdy programista pierwszego roku jest wypisywanie na konsolę/wyjście standardowe (nauczyli się, jak drukować Hello World, zanim nauczą się korzystać z debuggera). Na przykład, aby debugować ten kod, mogą wykonać następujące czynności: private int myFunction(int a) { print("before foo: a=" + a); a = foo(a); print("przed paskiem: a=" + a); a = bar(a); zwrócić; } private int foo(int a) { //zrób coś tutaj print ("foo step1: a=" + a); //coś szorstkiego print ("foo step2: a=" + a + " someOtherValue="+ someOtherValue + " array.length= " + jakaśArray.length()); //etc zwróć aValue; } private int bar(int a) { // zrób coś tutaj //zwróć wartość; } Teraz uruchamiają kod, dostają duży wydruk z konsoli, przez który mogą prześledzić, gdzie coś idzie nie tak. Alternatywą jest oczywiście ustawienie punktów przerwania i przechodzenie przez kod w każdym punkcie. Jedną z głównych zalet drukowania do konsoli jest to, że programista może zobaczyć przepływ wartości za jednym razem, bez konieczności klikania kolejnych kroków itp. Wadą jest jednak to, że Twój kod jest pełen tych wszystkich instrukcji drukowania, które następnie muszą zostać usuniętym. (Czy możliwe jest powiedzenie debuggerowi, aby wypisał tylko określone wartości do dziennika?, punkty przerwania można następnie łatwo dodać lub usunąć bez faktycznej modyfikacji kodu.) Nadal używam drukowania konsoli jako podstawowej metody debugowania, ja' Zastanawiam się, jak powszechne/skuteczne jest to w porównaniu z czymś innym.


title: Jak (programista php) pracować z programistą asp.net?

text: Jestem programistą php pracującym nad startupem, a mój przyjaciel, mój partner (również programista), który buduje ze mną startup, jest programistą asp.net/C#. Jak pracujemy razem, gdy programujemy w dwóch różnych językach? Wiem, że możesz używać Mono http://mono-project.com do projektowania aplikacji na Androida (opartych na javie) pisząc kody C# i iOS. Czy istnieje jakaś platforma lub framework, którego możemy użyć do tworzenia aplikacji php, pisząc kody w C# lub framework, który może konwertować kody C# na php, tak jak Mono?


title: Jak zignorować styl bracketingu w porównywaniu kodu / różnicy?

text: Jak zignorować style nawiasów podczas porównywania lub różnicowania kodu? Mamy kilka formatów nawiasów i chciałbym: function foo(){ } traktować tak samo jak function foo() { } Obecnie używam scalania Araxis, które wykonuje bezpośrednie porównanie wiersz po wierszu i otrzymujemy wiele „fałszywie pozytywnych” zmian.


title: Czy API usługi danych to dobry pomysł?

text: Obecnie mamy monolityczną aplikację Railsową, która jest tak naprawdę trzema oddzielnymi aplikacjami, które wykorzystują te same dane. Próbując dowiedzieć się, jak właściwie podzielić i podzielić mono-aplikację na mniejsze części, wydaje się oczywiste, że potrzebujemy centralnej usługi danych, z którą różne części mogą się komunikować, ponieważ nie chcę przedefiniowywać warstwa modelu dla każdej aplikacji i/lub kopiuj modele pomiędzy różnymi aplikacjami (DRY). Chodzi o to, że skoro baza danych/trwałość (w tym koncepcje takie jak walidacje) będą takie same dla każdego komponentu, sensowne byłoby posiadanie usługi, która może być używana do wyszukiwania danych i tworzenia/aktualizowania/usuwania ich. To, co wyobrażam sobie, jest zasadniczo interfejsem API JSON, który znajduje się między bazą danych a moją warstwą aplikacji. API nie zostanie natychmiast wystawione na „świat zewnętrzny” (chociaż może to nastąpić w przyszłości); na razie byłoby to po prostu komunikowane wewnętrznie (tj. do/z publicznej aplikacji Railsowej (lub innej). Ten interfejs API zasadniczo byłby po prostu abstrakcyjną logiką trwałości. 1. Czy to dobry pomysł? Czy są jakieś pułapki, o których nie myślę? 2. Jeśli to dobry pomysł, czy ktoś zna ORM Rails lub klejnot, który można wykorzystać do koordynowania tego rodzaju przedsięwzięć? Moja wizja jest taka, że gdy usługa danych zostanie uruchomiona, rzeczywista aplikacja Railsowa nie będzie już używać ActiveRecord, ale raczej _coś_, co będzie obsługiwać zapytania do API danych.


title: Co sprawia, że Common Lisp jest „duży”?

text: Uczyłam się zarówno Common Lisp, jak i Racket, i ciągle słyszę, że Racket jest znacznie „mniejszym” językiem niż Common Lisp. Zastanawiałem się, co to naprawdę oznacza. O ile wiem, składnia Common Lisp nie jest o wiele większa niż w przypadku Racketa. Zasadniczo zastanawiam się, co konkretnie w powszechnym sepleniu jest większe. Czy ma więcej składni, o której po prostu nie wiem? Czy ma większe środowiska? Większe pliki wykonywalne? Większe biblioteki? Albo jakaś ich kombinacja? Proszę, to nie jest wątek "który jest lepszy", chciałbym tylko dokładnie wiedzieć, co oznacza "większy".


title: Dzielenie monopolistycznych ulic na grupy

text: Jestem nowy w programowaniu obiektowym, javie i programowaniu w ogóle, a jako mój pierwszy prawdziwy projekt próbuję zaprogramować grę planszową Monopoly. To, co mam do tej pory, to tablica, która może przechowywać obiekty klasy _Square_ (która ma różne podklasy, takie jak właściwości, koleje, karty szans itp.). Obiekty graczy na zmianę poruszają się po planszy, wywołując metodę _landedOn()_ dla dowolnego pola, na którym wylądują. Nieruchomości można oznaczyć właścicielem, dzięki czemu właściciel otrzyma pieniądze, jeśli ktoś wyląduje na jego posesji. Jak dotąd wszystko idzie dobrze, ale jest jedna mała rzecz, która mnie wkurza. Nie jestem pewien, jak elegancko podzielić domy na grupy, czy kolory. Na planszy znajduje się kilka grup ulic i możesz kupować domy tylko wtedy, gdy jesteś właścicielem wszystkich nieruchomości w grupie. Mogę sobie wyobrazić, jak to zaprogramować, ale rozwiązanie wydaje mi się trochę brudne i „nieogólne”. Jak zrobić ładne ogólne rozwiązanie? Wyjaśnienie: Chcę mieć możliwość sprawdzenia, czy wszystkie właściwości jednego typu należą do tego samego gracza, w sposób ogólny, tak aby w przypadku zmiany grup, dodania właściwości, zmiany grupy itp. nie musiałby dużo zmieniać kodu.


title: Kim jest pomocnik? Czy to wzorzec projektowy? Czy to algorytm?

text: Może trochę z przymrużeniem oka, ale ponieważ nie mogę znaleźć tej odpowiedzi nigdzie za pośrednictwem Google, więc aby upewnić się, że programiści Stackexchange ma odpowiedź: **Co to jest pomocnik?** Widzę, że nazwa jest używana wszędzie (nazwy modułów , nazwy klas, nazwy metod), jakby semantyka była głęboka i znacząca, ale w kontekście informatyki (chociaż nie mam w tym stopnia naukowego), nigdy nigdzie nie widziałem opisu ani definicji! Czy to wzorzec projektowy? Czy to algorytm? Kiedyś pracowałem nad programem, w którym moduł i klasa nazywały się _coścośpomocnego_ (gdzie _coścoś_ też było dość ogólne) i szybko zmieniłem jego nazwę na coś, co miało dla mnie sens, ale czuję, że czegoś tu brakuje!


title: Web Development: czy istnieje oaza chaosu?

text: Swoją karierę programisty rozpocząłem dawno temu, gdy miałem 14 lat i zacząłem od książki Jamesa Lee, zasugerowanej przez administratora systemów uniksowych, którego poznałem w Barnes and Noble. W ciągu miesiąca przetrawiłem tego frajera, kupiłem zestaw serwerów klasy operatorskiej i uruchomiłem stos AMP - ale nigdy nie używałem PHP. Cud Perla absolutnie mnie urzekł i pokochałem go. Po nauczeniu się wszystkiego, co musiałem wiedzieć o HTML i hostingu stron internetowych, uczynieniu tej zawartości HTML dynamiczną za pomocą Perla i parsowaniu danych wejściowych za pomocą wyrażeń regularnych – i, co prawda, obejmowało to również zhakowanie kilku plików HTML z wyrażeniami regularnymi, błogo nieświadomi tego, gramatyki, nie mówiąc już o hierarchiach Chomsky'ego – wycinanie zębów na tych rzeczach było _fantastyczne_ , zwłaszcza po tym, jak nauczyłem się na tym zarabiać. Stało się coraz lepiej, ale wkrótce; niestety, odkryłem nowe dziecko. Tak, zło zła, C# i bardzo długo zajmowało moją uwagę. Och, urzekły mnie _radości_ statycznego tworzenia aplikacji i wkrótce zapomniałem o całej motywacji do programowania: nie chodziło już o pieniądze, ale o intelektualną chęć i chęć radzenia sobie z problemami, a co najważniejsze, każdy problem matematyczny mój ... cóż, nie tak bardzo. Wyszedłem z tego wszystkiego i nie minęło dużo czasu, zanim wszystkie te standardy się zmieniły, a pudełkowa strona internetowa - która naprawdę nie była do zaakceptowania - była absolutnie pozytywnie, no cóż, zrobiona. Pracowałem w swojej dziedzinie, robiąc wszystko, od aplikacji do botowania po skrobanie wyrażeń regularnych stron internetowych html, a także naprawę komputerów. Chciałem to robić na życie. Więc poszedłem do college'u za to, B.S. Informatyka, tak, to ja. Młodszy rok dowiedziałem się, że zasadniczo jestem specjalistą z matematyki i nie bałem się, ponieważ informatyka wzmocniła matematykę i vice versa: nauczyłem się doceniać _samą_ abstrakcję i formalność, której absolutnie **nienawidziłem**, kiedy po raz pierwszy przeciąłem zęby Perlem -- "orientacja obiektowa?! kto tego potrzebuje!" Za rok mam zamiar opuścić tę szkołę i poszukać pracy w swojej dziedzinie, i doszedłem do surowego i surowego uświadomienia sobie, że nie jeśli, ale kiedy tam wrócę, mniej błogo nieświadomy tego, co to znaczy obliczać, ludzie będą chcieli, żebym tworzył strony internetowe. Do tej pory unikałem kuli, ale niektórzy z moich rówieśników tego nie zrobili - wydaje się, że naprawdę lubią kodować w niejednorodnych modułach parse-html-with-regex, hackach, krainie śmieci PHP i javascript. .., **bzdury** to wszystko jest zawarte w tym całym świecie. Wszędzie są odpowiedzi: „użyj joomla”, „użyj wordpress”, „heroku/ruby na szynach”, …, wszystko to bardzo ekscytuje niektórych z tych osób. Perl jest odstający i jest to taki wspaniały język. Będą chcieli, żebym logo narysowane przez ich ośmiolatka w MS Paint wyglądało wspaniale, kiedy utknę, próbując zwektoryzować tego frajera, podłączyć go do strony internetowej i wyczyścić; będą chcieli, żebym zmieniał specyfikacje na każdym możliwym kroku; i wszyscy będą chcieli trochę nonsensów PHP/ASP.NET, aby to skonstruować. Po prostu wzdrygam się na myśl o tym, że zostanę stworzony do tworzenia stron internetowych, mój mózg po prostu „nie” spycha mnie w finansowe piekło programistów. Muszę wiedzieć, jak ludzie na moim lub wyższym poziomie pocieszają się w tworzeniu wspaniałych i wyraźnie dobrze przemyślanych stron internetowych. Jak zacząć od nowa i ponownie zakochać się w tworzeniu stron internetowych? Czy istnieje narzędzie python `from website import awesome` czy coś, z czego mogę skorzystać? Gdzie mam się udać? * * * Edytuj: Czytałem wiele komentarzy na temat tego wątku i owszem, jest długi, ale nie przychodzi mi do głowy żaden materiał do wycięcia - naprawdę staram się wyrazić tutaj swoją frustrację. Pozwólcie, że wyjaśnię kilka punktów. Nie brzydzę się orientacją obiektową ani PHP i na pewno nie mam problemu z bardziej matematyczną i formalną częścią programowania. Jeśli chodzi o moje rzeczy matematyczne, to jestem w stanie to zaciągnąć. To zabawne, że jeden z was wspomniał o finansach ilościowych, ponieważ mam klienta z pasją do handlu kontraktami terminowymi; jednak pod koniec dnia moja firma zatrudniła programistę zdolnego do generowania śmieciowego kodu, aby można go było umieścić na stronie internetowej. Co gorsza, ogrom kodu śmieciowego ... mówiąc o samochodach, to jest jak jazda na siedzeniu pasażera z nowo licencjonowanym 15-letnim kierowcą - z ręczną skrzynią biegów - jakoś wszyscy docieramy do sklep spożywczy. Owszem działa, ale skrzynia biegów jest strzelona i do końca tego wszystkiego potrzebuję prysznica. Tworzenie stron internetowych wydaje się, no cóż, takie nienaturalne. Pisanie strony internetowej jest dla większości programistów tak samo bolesne jak czytanie tego posta: długi, gadatliwy, okrężny, a pod koniec dnia jakiś sprytny parser domyśla się, co to wszystko znaczy, i układa ten bałagan w formacie przeglądarki móc zrozumieć. Bezczelny, prawda? Koła zębate zostają zmielone do wycinków, zanim Javascript to wszystko posmaruje. Jak gadatliwy? Cóż, powiedzmy, że sześć jąder Linuksa ma mniej kodu niż sześciostronicowa witryna twojej babci -- jest do tego moduł Joomla, ale musisz mieć licencję komercyjną, aby opublikować więcej niż 6 zdjęć kotów na raz. Coś tak prostego jak sprawdzanie poprawności adresu e-mail może być skompilowane do wyrażenia regularnego (nawiasem mówiąc, co całkowicie nie jest wyrażeniem regularnym) przez rozszerzone wyrażenia regularne zgodne z Perlem -- i rzeczywiście, to coś ma co najmniej 3 strony i może zarumienił się pijany Ken Thompson. Najgorsze w tym wszystkim jest to, że muszą istnieć o wiele lepsze języki i frameworki do wykonywania tego rodzaju pracy. Chcę, aby okrągłe pudełka i krawędzie były piękne, ale nie chcę włamywać się do programu Illustrator przez pół godziny, aby to zrobić, tylko po to, abym mógł załadować go do jakiegoś div, który dowolnie ustawia go, zgodnie ze specyfikacją przeglądarki, w kombinację, której nawet Bruce Schneier nie potrafił wymienić. Potrzebuję zamknięcia, a funkcjonalna definicja zamknięcia byłaby fajna, ale żaden host nie będzie dobrze obsługiwał niczego poza PHP -- zakładając, że PHP może być dobrze obsługiwany w pierwszej kolejności. W pewnym momencie miałem nadzieję, że C# będzie moim panaceum, nie. Może nie dostaję podstawowego elementu projektowania stron internetowych. Próbowałem zaangażować się w stronę oprogramowania pośredniczącego w tworzeniu stron internetowych, ale to też nie zadziałało. Poliglota perla, pytona i kilka wyrażeń regularnych później, a ja zeskrobałem jego stronę internetową, tylko po to, aby moduł Joomla rzeźnął moją pięknie znormalizowaną tabelę. Zapraszam do bezlitosnej edycji mojego posta do woli. ## **Linki** ClojureScript: http://himera.herokuapp.com/synonym.html Tancerz: http://www.perldancer.org/documentation


title: Jak łatwy w użyciu powinien być framework programistyczny?

text: > Jest to część serii pytań, które skupiają się na projekcie o nazwie > Projekt Abstrakcji, który ma na celu wyabstrahowanie pojęć używanych w > projektowaniu języka w formie ram. > > Inną powiązaną z nim stronę związaną z typowaniem strukturalnym można obejrzeć > tutaj. Meta-temat związany z zapytaniem o ramy i > odpowiednie miejsce do publikowania można znaleźć tutaj. Jak łatwe powinno być korzystanie z Framework Development Framework? Napisałem frameworki do generowania kodu na dużą skalę, które obejmowały również możliwość wysyłania wyników do kompilatora specyficznego dla języka. Temat łatwości użycia pochodzi z jednego takiego przykładu frameworka: CodeDOM lub Code Document Object Model. Jest to framework napisany przez Microsoft, który opisuje typowe struktury kodu, ale generalnie pominął wiele (koercje wyrażeń) i miał tendencję do bycia nieco abstrakcyjnym w reprezentacji niektórych konstrukcji, do wręcz emitowania złego kodu w oparciu o to, co robiłeś: wcześniej Źle obsłużony kod CodeDOM emitujący `PrivateImplementationType` na `CodeMemberMethod`, gdy używany typ był interfejsem generycznym. CodeDOM był moim pierwotnym powodem napisania mojego pierwszego generatora kodu. Jedną z rzeczy, które próbuję zrobić, aby uprościć ramy, jest zmniejszenie ilości pracy potrzebnej do zrobienia czegoś i skupienie się na działaniach w porównaniu z konkretnymi typami, które składają się na te działania. Oto porównanie tego, jak działa framework, który piszę: //Truncated... /* * * Z projektu, który generuje leksykę, jest to logika wyboru zakresu znaków * state->state transition. * */ var nextChar = nextMethod.Parameters.Add(new TypedName("currentChar", typeof(char).GetTypeReference())); //... znak początek = rangeElement.B.Value.Start; znak koniec = rangeElement.B.Value.End; /* * * 'start' <= nextChar && nextChar <= 'end' * */ currentExpression = start.LessThanOrEqualTo(nextChar).LogicalAnd(nextChar.LessThanOrEqualTo(end)); Versus CodeDOM: //Truncated... var nextChar = new CodeVariableReferenceExpression("nextChar"); //... var start = new CodePrimitiveExpression(rangeElement.B.Value.Start); var end = new CodePrimitiveExpression(rangeElement.B.Value.End); currentExpression = new CodeBinaryOperatorExpression(new CodeBinaryOperatorExpression(start, CodeBinaryOperatorType.LessThanOrEqual, nextChar), CodeBinaryOperatorType.BooleanAnd, new CodeBinaryOperatorExpression(nextChar, CodeBinaryOperatorType.LessendThan));Equal, W centrum zainteresowania frameworku są entuzjaści języków, a także osoby zainteresowane generowaniem kodu lub aplikacji. Biorąc pod uwagę skupienie się na kompilacji, generowaniu kodu i rozwoju języka, czy framework powinien koncentrować się na łatwości użycia, czy na czystej mocy? Moim głównym celem jest zwiększenie dostępności takich narzędzi, aby osoby zainteresowane tą dziedziną nie wymagały dużego doświadczenia w dziedzinie teorii języka, zanim zaczną pracować nad własnymi projektami językocentrycznymi. Biorąc pod uwagę, że jestem autorem frameworka, mój pogląd na „użyteczność” jest stronniczy. Dlatego muszę zapytać kogoś innego, czy cel i cel mają sens dla innych, którzy nie są związani z projektem.


title: Certyfikaty dla firm tworzących oprogramowanie - CMMI, ISO itp.

text: Jakie certyfikaty zwykle otrzymują firmy tworzące oprogramowanie? Jednym z przykładów może być CMMI lub ISO 9000. Jakie inne certyfikaty są dostępne dla firm tworzących oprogramowanie i jak ważne jest ich posiadanie dla przyciągnięcia klientów?


title: Pisanie lub rozszerzanie istniejących pakietów emacs: czy warto, czy powinienem przejść na Netbeans/Eclipse?

text: Kończę studia magisterskie z CS i prawie uzależniłem się od Emacsa. Używałem go do pisania w C, Latex, Java, JSP, XML, CommonLisp, Ada i innych językach, które nie są obsługiwane przez żaden inny edytor, taki jak AMPL. Chciałbym ulepszyć pakiety, z których korzystam najczęściej lub stworzyć nowe, ale w praktyce stwierdzam, że implementacja Emacsa pozostawia wiele do życzenia. Istnieje wiele słabo wyposażonych/źle utrzymanych pakietów z nakładającymi się funkcjami lub niejasnymi niezgodnościami, a Elisp wydaje się tylko sprzyjać tej sytuacji, ponieważ brakuje wspólnych funkcji, które mają współczesne lipsy. W przeciwieństwie do tego, Eclipse i Netbeans są aktywnie ulepszane i wydaje się, że mogą być skuteczne w przypadku języków spoza głównego nurtu. Próbowałem Hibachi dla Ady w Eclipse i działało dobrze, są CUPS dla Lispa w Eclipse i LambdaBeans zbudowane z komponentów NetBeans. Z drugiej strony wtyczki te wydają się być mniej aktywne niż ich odpowiedniki w Emacsie, np. Hibachi zostało zarchiwizowane w zeszłym roku. Jaka jest twoja opinia na ten temat? Do jakiego edytora powinienem napisać rozszerzenie? **EDYTUJ:** Aby odpowiedzieć Larry'emu Colemanowi (patrz komentarz poniżej): 1. Lubię Emacsa jako _użytkownika_, ponieważ jest wydajny zarówno dla mnie, jak i dla komputera, którego używam. Jest szybki, a interfejs tekstowy (tj. minibufor) pozwala na szybką interakcję. Jest solidny, a opakowania są zwykle małe i łatwe w zarządzaniu. Jeśli muszę coś poprawić lub usunąć, zwykle wystarczy zmienić wiersz w moim pliku .emacs lub elisp, albo usunąć katalog. Wtyczki Eclipse opierają się na bardziej skomplikowanym procesie, który kilka razy zepsuł moją konfigurację Eclipse, zmuszając mnie do czystej reinstalacji. Emacs działa tak długo, jak używam podstawowych pakietów. Jeśli potrzebuję czegoś bardziej skomplikowanego, sytuacja staje się dość nieprzyjemna. Jako "zaawansowany użytkownik" myślę, że najlepsze, na co mogę liczyć, to napisanie poważnie okaleczonej wersji rozszerzeń, które chciałbym mieć; innymi słowy, że nie jest to warte zachodu. 2. Chciałbym pisać rozszerzenia dla rzeczy, które chciałbym zautomatyzować w Emacsie, na przykład wsparcie projektu z automatyczną aktualizacją tabeli tagów przy zapisie plików. Jest kilka projektów, w których brakuje integracji, dokumentacji, rozszerzalności i tak dalej. Najlepszym jest chyba CEDET, do którego, jak sądzę, można zastosować 10 regułę Greenspun. **EDYTUJ:** Aby skomentować odpowiedź Larry'ego Colemana, jestem prawie pewien, że mogę wybrać programowanie elisp, ale rozszerzenia, które mam na myśli, jeszcze nie istnieją, pomimo ich względnej prostoty i wysiłku, jaki bardziej znający się na rzeczy ludzie włożyli w powiązane projekty. Zastanawiam się, czy jest tak ze względu na sposób, w jaki rozwija się emacs, tj. ludzie mają tendencję do pisania własnych małych rozszerzeń bez koordynacji lub jego implementacji, a język rozszerzeń nie jest w stanie nadążyć za rosnącą złożonością.


title: W jaki sposób programista zajmujący się tylko konserwacją może uzyskać podwyżkę?

text: Pracuję jako programista konserwacji od kilku lat i zastanawiam się, czy istnieje coś takiego jak podwyżka dla programisty konserwacji? Pytam, bo obowiązki się nie rozszerzają, wciąż robisz prawie to samo, może trochę szybciej w miarę upływu czasu. Jeśli to możliwe, to jaka byłaby droga do tego?


title: Unikanie pakietów z High Efferent Coupling

text: Do tworzenia aplikacji na Androida używam języka java, po analizie statycznej narzędzie ostrzega o wysokim sprzężeniu eferentnym. Jaki jest powód tego ostrzeżenia? Czy chodzi o AComModel, który jest rozszerzony o inną klasę? Istnieją 4 klasy, poniżej których narzędzie nas przed nimi ostrzega. Mam nadzieję, że zadałem logiczne pytanie, ale tak naprawdę nie rozumiem, na czym polega problem? public class AComModel { public String GetComBusinessKey() { return "brak"; } } @JsonIgnoreProperties(ignoreUnknown = true) public class StepOneCom extends AComModel { public View vi; public ArrayList<SummaryViewModel> lstSmr; @Override public String GetComBusinessKey() { return "shvi"; } } @JsonIgnoreProperties(ignoreUnknown = true) public class StepTwoCom extends AComModel { public ArrayList<AccViewModel> lstAcc; publiczny SummaryViewModel c1; @Override public String GetComBusinessKey() { return "shvi"; } } @JsonIgnoreProperties(ignoreUnknown = true) public class StepThreeStepTwoCom extends AComModel { public StepFourCom stepFourCom; @Override public String GetComBusinessKey() { return "cashadvi"; } }


title: Gdzie są przechowywane informacje o interfejsie?

text: Chciałbym wiedzieć, czy informacje w interfejsie, takie jak zmienne, które są ostateczne i metody, które są abstrakcyjne i statyczne, będą znajdować się w obszarze metod ??? A jaki byłby porządek w przypadku inicjalizacji? Czy zostaną zainicjowane przed którąkolwiek z niestatycznych zmiennych lub metod?


title: Nazwa firmy już zajęta na github

text: Nazwa mojej firmy opartej na badaniach jest już zajęta na githubie (wysłana do właściciela bez powodzenia), jakie są najbardziej znane konwencje nazewnictwa dla firmowych kont na githubie oprócz samej nazwy? jedyne, które znalazłem to `ibm-dojo` i `ibm-research`


title: SpecFlow/Cucumber - Dokumentowanie dostępnych kroków

text: Nasza firma zamierza wdrożyć BDD w naszej aplikacji .NET. W szczególności SpecFlow. Możemy przewidzieć dużą liczbę tworzonych wspólnych kroków ("Daję klientowi" itp.), więc jakie metody zostały użyte do ich udokumentowania, aby firma mogła się do nich odnieść? Czy XmlDoc w klasach definicji kroków jest wystarczający, czy też inni znaleźli lepsze metody dokumentacji?


title: Jakie są konwencje, które często mylone są z funkcjami języka?

text: Niektóre języki programowania posiadają konstrukcje, które z powodu ich częstego używania są często mylone z cechami języka. Na przykład wiele osób uważa, że `self` jest słowem kluczowym w Pythonie, ale jest to po prostu konwencjonalna nazwa pierwszego argumentu metody (możesz użyć dowolnej nazwy zmiennej): class Complex: def __init__(self, realpart, imagpart): self.r = realpart self.i = imagpart Inny przykład: kiedy uczyłem się R, myślałem, że składnia filtrowania wektora jest trochę dziwna: d[d %% 2 == 0] # tylko elementy parzyste At najpierw myślałem, że `d %% 2 == 0` to jakiś rodzaj lambda, który jest magicznie stosowany do każdego elementu `d`, dopóki nie zdałem sobie sprawy, że jest to proste zastosowanie operacji wektoryzowanych R: `d %% 2 == 0` zwraca wektor, taki jak „[TRUE, FALSE, FALSE, ...]”, a następnie „d” używa tej listy do filtrowania wartości, które są na pozycjach oznaczonych jako „TRUE”. Jakie są inne konstrukcje, które na pierwszy rzut oka mogą wydawać się specjalnie zaprojektowanymi funkcjami języka, ale są tylko prostymi zastosowaniami podstawowej składni i semantyki języka?


title: Najlepsze miejsce na umieszczenie klas, które rozszerzają framework .net?

text: Nie mam pojęcia, gdzie umieścić następującą klasę i zauważyłem, że po prostu umieszczam je w folderze pomocników, co nie jest zbyt pomocne w ponownym użyciu w przyszłych projektach. **Przykład:** Chcę mieć możliwość używania atrybutu `DisplayNameAttribute` razem z plikami zasobów. Aby to zadziałało, stworzyłem `LocalizedDisplayNameAttribute`, który dziedziczy ´DisplayNameAttribute´ i dodaje następujące właściwości `DisplayNameResourceName` i `DisplayNameResourceType`. W jakiej przestrzeni nazw/lokalizacji umieściłbyś taką klasę, która prawdopodobnie zostanie ponownie wykorzystana w przyszłych projektach?


title: Zachowaj lub odrzuć testy używające metod teraz jako prywatne

text: Pisząc kod obiektowy od podstaw, staram się wykonać następujące kroki: 1. Napisz test, który się nie powiedzie. 2. Napisz **funkcję**, która zaliczy test. 3. Gdy wystarczająca liczba testów i funkcji zostanie ukończona, zrefaktoryzuj funkcje o podobnej sygnaturze w **klasę**. 4. Kiedy funkcjonalność klasy jest kompletna, **ustaw jako prywatną** jak najwięcej metod klasowych. Ostatni krok wydaje mi się rozsądny, ponieważ orientacja obiektowa polega na ukrywaniu złożoności za abstrakcjami i utrzymywaniu publicznej części tych abstrakcji na jak najmniejszym poziomie. Jednak to prowadzi mnie do odrzucenia wielu testów, które napisałem podczas pracy ze zwykłymi funkcjami — ponieważ teraz testują one prywatną część API klasy. To sprawia, że czuję się niekomfortowo, ponieważ: * pozostałe testy są nagle zmuszone do **"pokrycia większej złożoności"**. Na przykład: jeśli napisałem metodę `swap_rows` w macierzy podczas jej odwracania, ale ta metoda jest teraz prywatna i używana tylko z publicznej metody `invert`, to `test_invert` musi w jakiś sposób przekazać czytelnikowi, że " zamiana wierszy odbywa się podczas odwracania". Co ważniejsze, ten pozostały test prawdopodobnie nie wskaże, że jest to zamiana wierszy, która została przerwana przez nieostrożną zmianę (a nie jakakolwiek inna część procesu odwracania). * metody klasy prywatnej mogą **znowu stać się publicznymi** podczas pisania kodu klienta, który ma uzasadnioną przyczynę dostępu do ich wyników. Trudno to przewidzieć. Odzyskiwanie testów z poprzedniego zatwierdzenia jest możliwe, ale wydaje się, że jest to zmarnowany czas. Rozwiązaniem byłoby refaktoryzacja metod do klasy pomocniczej, która jest pakietem prywatnym. Wygląda to jednak na nadużywanie zasad obiektowych na rzecz zasad TDD; poza tym zastanawiam się, czy kiedykolwiek będzie dobry powód, aby w ogóle zrobić coś prywatnego. Zdaję sobie sprawę, że pytam tutaj „jak rozwijać projekt architektoniczny” i że nie da się tego zrobić całkowicie „oddolnie”; ale chciałbym uzyskać praktyczne porady dotyczące zachowania lub odrzucenia takich wczesnych testów, a jednocześnie zastanawiania się nad kształtem oprogramowania. To pytanie jest podobne, ale tutaj nie kwestionuję możliwości uzyskania początkowego publicznego API bezpośrednio z TDD: szukam dobrych rad, jak się tam dostać. Ta odpowiedź jest użyteczna, ale nie sądzę, żebym próbował dostosować moje kodowanie do moich testów, ale raczej moje testy do mojego - wciąż niepewnego - projektu. Podsumowując: czy powinienem zachować lub odrzucić wczesne testy podczas pisania kodu obiektowego od podstaw? Czy nadal powinienem dążyć do tego, aby jak najwięcej metod utajnić, czy też prowadzi mnie to do złego projektu i przymusowe usuwanie testów jest tylko tego objawem?


title: Wzór dekoratora w głowie Pierwsze wzory projektowe

text: Próbuję nauczyć się kilku wzorców projektowych, korzystając z polecanej mi książki Head First Design Patterns. Doszedłem do rozdziału o Wzorcu Dekoratora i chociaż rozumiem jego przeznaczenie, to trochę niewyraźnie go układam. Oto ich podstawowy UML wzorca dekoratora: Imgur (Przepraszam za link, ale SE z jakiegoś powodu nie pozwala mi przesłać tutaj zdjęcia) Oto jak napisali kod: public abstract class Component { String description = " Nieznany opis"; public String getDescription() { zwróć opis; } public abstract double cost(); } public class ConcreteComponent extends Komponent { public ConcreteComponent() { description = "Jestem komponentem betonowym"; } public double cost() { return 1,99; } } public abstract class Dekorator extends Składnik { public abstract String getDescription(); } public class ConcreteDecorator extends Dekorator { Komponent; public ConcreteDecorator(Komponent) { ten.komponent = komponent; } public String getDescription() { return component.getDescription() + " z dekoratorem"; } public double cost() { return .20 + component.cost(); } } Moje pytanie brzmi, jaka jest potrzeba klasy Decorator w tej sytuacji? Dlaczego nie pozostawić abstrakcyjnej metody getDescription() i pozwolić ConcreteComponents i ConcreteDecorators zaimplementować ją tak, jak tego potrzebują? W związku z tym, czy istnieją rzeczywiste korzyści z tworzenia klasy Dekoratora? Ten przykład wydaje się nie wyjaśniać, dlaczego jest to przydatne ani w jaki sposób może być przydatne.


title: Rails Google Cloud Messaging z heroku

text: Chcę używać GCM do wysyłania powiadomień z mojej aplikacji rails do aplikacji na Androida. Przewodnik wprowadzający mówi: W wyświetlonym oknie konfiguracji podaj adres IP serwera. Używam Heroku, więc adres IP często się zmienia, prawda? Czy nadal mogę korzystać z GCM? Patrzyłem na użycie klejnotu szyn i nie mogłem znaleźć żadnej dokumentacji związanej z Heroku.


title: Czy HTML5 ma funkcję, która umożliwia użytkownikowi dodawanie ikony do ekranu aplikacji podczas „instalacji”, a jeśli nie, kiedy zamierza ją dodać?

text: Wiem, że bańka zakładek mobilnych może działać na iOS, ale nie znajduje się w tej samej sekcji. A w przypadku Androida dodawanie zakładek naprawdę nie ograniczy instalacji mobilnej aplikacji HTML5, ponieważ użytkownicy po prostu nie myślą o przechodzeniu do swoich zakładek, a proces tworzenia zakładek trwa dwa lub trzy kroki. Dla mnie ten problem z instalacją aplikacji (zakładki) sprawia, że reszta funkcji HTML 5 ukierunkowanych na mobilny HTML jest znacznie mniej przydatna. Nie mogę realistycznie oczekiwać, że użytkownicy wolą proces instalacji i uruchamiania zakładek niż zwykłe aplikacje, więc realistycznie mogę oczekiwać, że zignorują moją aplikację mobilną HTML5 i będą używać aplikacji natywnej. Grupy stojące za funkcjami mobilnego HTML 5 wydają się naciskać na adopcję aplikacji HTML 5, takich jak pamięć podręczna aplikacji itp. Wydaje mi się oczywiste, że bańka zakładek jej nie wytnie. Ktoś, proszę, powiedz mi, że zajęli się tym lub przynajmniej nad tym pracują?


title: Czy istnieje język lub wzorzec projektowy, który umożliwia *usuwanie* zachowania obiektów lub właściwości w hierarchii klas?

text: Dobrze znanym mankamentem tradycyjnych hierarchii klasowych jest to, że są one złe, jeśli chodzi o modelowanie świata rzeczywistego. Jako przykład próbuję przedstawić gatunki zwierząt za pomocą klas. W rzeczywistości jest przy tym kilka problemów, ale nigdy nie widziałem rozwiązania, gdy podklasa „traci” zachowanie lub właściwości, które zostały zdefiniowane w superklasie, jak pingwin, który nie jest w stanie latać (tam są prawdopodobnie lepszymi przykładami, ale to pierwszy, który przychodzi mi do głowy, po niedawnym obejrzeniu "Madagaskaru 2"). Z jednej strony nie chcesz definiować dla każdej właściwości i zachowania jakiejś flagi, która określa, czy jest ona w ogóle obecna, i sprawdzać ją za każdym razem przed uzyskaniem dostępu do tego zachowania lub właściwości. Chciałbyś tylko powiedzieć, że ptaki potrafią latać prosto i wyraźnie w klasie Bird. Ale wtedy byłoby miło, gdyby można było później zdefiniować „wyjątki”, bez konieczności stosowania wszędzie okropnych hacków. Dzieje się tak często, gdy system przez jakiś czas działał wydajnie. Nagle znajdujesz „wyjątek”, który w ogóle nie pasuje do oryginalnego projektu i nie chcesz zmieniać dużej części kodu, aby go dostosować. Czy więc istnieje jakiś język lub wzorce projektowe, które mogą bez problemu poradzić sobie z tym problemem, bez konieczności wprowadzania większych zmian w „super-klasie” i całym kodzie, który z niej korzysta? Nawet jeśli rozwiązanie obsługuje tylko konkretny przypadek, kilka rozwiązań może razem tworzyć kompletną strategię. [EDYTUJ] Zapomniałem o zasadzie substytucji Liskova. Dlatego nie możesz tego zrobić. Zakładając, że zdefiniujesz "cechy/interfejsy" dla wszystkich głównych "grup cech", możesz dowolnie implementować cechy w różnych gałęziach hierarchii, na przykład cecha Latania może być zaimplementowana przez Ptaki i niektóre specjalne rodzaje wiewiórek i ryb. Więc moje pytanie może sprowadzać się do "Jak mogę zrezygnować z implementacji cechy?" Jeśli twoja superklasa jest Java Serializable, musisz nią być, nawet jeśli nie ma możliwości serializacji swojego stanu, na przykład jeśli zawierałeś "Socket". Tak więc jednym ze sposobów, aby to zrobić, jest zawsze definiowanie wszystkich swoich cech w parze od samego początku: Latanie i Nielatanie (co spowoduje wyrzucenie UnsupportedOperationExceiption, jeśli nie zostanie sprawdzone). Cecha „Nie” nie definiuje żadnego nowego interfejsu i można ją po prostu sprawdzić. Brzmi jak „tanie” rozwiązanie, zwłaszcza jeśli jest używane od początku.


title: Czy pojęcie Entropii może być użyte do analizy kodu źródłowego w użyteczny sposób?

text: Wydaje mi się logiczne, że można by zdefiniować kontekst analizy statycznego kodu źródłowego, który zawierałby reguły pozwalające uzyskać względną wartość złożoności. Wiem, że to nie jest jak w sensie fizycznym, ponieważ kod źródłowy nie zawiera słowa „Energia”, ale założę się, że podjęto wysiłki, przynajmniej akademickie, aby narysować paralelę. Czy ktoś wie o tym, a jeśli tak, to w jakim celu przyniosło to pożyteczne rezultaty?


title: Obejście głowy z niezmiennością

text: Jestem nowy w programowaniu obiektowym, a jedną z koncepcji, której zrozumienie zajęło mi trochę czasu, jest niezmienność. Myślę, że żarówka zgasła zeszłej nocy, ale chcę zweryfikować: Kiedy natrafiam na stwierdzenia, że nie można zmienić obiektu niezmiennego, jestem zdziwiony, ponieważ mogę na przykład wykonać następujące czynności: NSString *myName = @"Bob "; mojaNazwa = @"Mike"; Tam właśnie zmieniłem myName typu niezmiennego NSString. Mój problem polega na tym, że słowo „obiekt” może odnosić się do fizycznego obiektu w pamięci lub abstrakcji „myName”. Pierwsza definicja dotyczy pojęcia niezmienności. Jeśli chodzi o zmienną, bardziej jasną (dla mnie) definicją niezmienności jest to, że _wartość_ niezmiennego obiektu można zmienić tylko poprzez zmianę jego lokalizacji w pamięci, tj. jego odniesienia (znanego również jako jego wskaźnik). Czy to prawda, czy nadal gubię się w lesie?


title: Przepisanie/oddzielenie ważnej usługi witryny Django w Erlang

text: Mamy aplikację napisaną w całości w Django, która składa się z trzech oddzielnych komponentów. Admin, Serwis do generowania faktur + API i UI dla użytkowników. Problem polega na tym, że są one bardzo ciasno ze sobą powiązane (nawet jeśli są rozdzielone, każdy element ma swoje własne ustawienia i może działać "samodzielnie" - cóż, często nie jest to prawdą, ponieważ wszystkie mają te same modele i pewną funkcjonalność z widoków, tzn. błąd na interfejsie użytkownika oznacza, że przez większość czasu nie działa również usługa generowania faktur.Problem w tym, że generowanie faktur jest bardzo istotną częścią naszej działalności.Ponadto niektóre dane przekazujemy klientowi i korzystamy z AMQP , websockets, tornado i seler do tego. Popatrzyłem na Erlanga i okazało się, że idealnie pasuje do naszej usługi generowania faktur. Moglibyśmy wymienić Selera, Tornado i AMQP (tak czy inaczej jest napisane w Erlangu z tego co wiem) , tylko dla Erlanga. Jesteśmy na bardzo wczesnym etapie, gdzie tylko jedna faktura jest tworzona co kilka godzin, więc nie jest to teraz tak wielka sprawa, ale mogę sobie wyobrazić, jak duże problemy może to spowodować w przyszłości. Moje pytanie brzmi: czy warto zrobić takie odsprzęgnięcie teraz (kiedy problem naprawdę nie jest) istnieją) lub skoncentruj się na dodawaniu nowych funkcji do produktu i zacznij to rozwiązywać, gdy stanie się to problemem? Częścią problemu jest to, że dość duża część logiki aplikacji znajduje się w samych modelach Django. Używamy dość dużo sygnałów, hooków przed/po zapisie itp., więc stracilibyśmy tę funkcjonalność, na przykład pisząc do bazy danych bezpośrednio z Erlanga, ale czuję, że może to oszczędzić nam wiele bólu w przyszłości.


title: Odwrócenie kontroli w ASP.NET MVC

text: Miałem zamiar refaktoryzacji mojej aplikacji ASP.NET MVC i wstrzyknięcia niektórych IoC. Ostatnim razem, gdy używałem IoC, Unity było wściekłością, ale nienawidziłem tego. Konfiguracja była trudna i miała bardzo nieokreślone błędy. Czy ktoś ma jakieś sugestie lub preferencje?


title: Buzzword do tworzenia oprogramowania uwzględniającego wydajność

text: Wydaje się, że istnieje mnóstwo modnych słów na temat stylów i metod tworzenia oprogramowania: programowanie zwinne, programowanie ekstremalne, programowanie sterowane testami itp. Cóż, czy jest jakieś modne hasło dla rozwoju "świadomego wydajności"? Przez „świadomość wydajności” niekoniecznie mam na myśli programowanie o niskim opóźnieniu lub niskim poziomie, chociaż to pierwsze logicznie podpada pod ogólny termin, którego szukam. Mam na myśli rozwój, w którym zasoby są uznawane za skończone, a więc kładzie się ogólny nacisk na niską złożoność obliczeniową, dobre zarządzanie zasobami itp. Gdybym miał być złośliwy, powiedziałbym „dobre programowanie”, ale to nie wydaje się tak dobrze przekazać wiadomość...


title: Zrozumienie wzorca odwiedzających

text: Mam hierarchię klas, która reprezentuje formanty GUI. Coś takiego: Control->ContainerControl->Form Muszę zaimplementować szereg algorytmów, które działają z obiektami robiącymi różne rzeczy i myślę, że wzorzec Visitor byłby najczystszym rozwiązaniem. Weźmy na przykład algorytm, który tworzy reprezentację Xml hierarchii obiektów. Używając 'klasycznego' podejścia zrobiłbym to: public abstract class Control { public virtual XmlElement ToXML(XmlDocument document) { XmlElement xml = document.CreateElement(this.GetType().Name); // Utwórz element, wypełnij go atrybutami zadeklarowanymi za pomocą kontrolki return xml; } } public abstract class ContainerControl : Control { public override XmlElement ToXML(XmlDocument document) { XmlElement xml = base.ToXML(document); // Użyj forech, aby wypełnić XmlElement potomnym XmlElements return xml; } } public class Form: ContainerControl { public override XmlElement ToXML(XmlDocument document) { XmlElement xml = base.ToXML(document); // Wypełnij pozostałe elementy zadeklarowane w klasie Form return xml; } } Ale nie jestem pewien, jak to zrobić z wzorcem gościa. Oto podstawowa implementacja: public class ToXmlVisitor : IVisitor { public void Visit(Form form) { } } Skoro nawet klasy abstrakcyjne pomagają w implementacji, nie jestem pewien, jak to zrobić poprawnie w ToXmlVisitor? Powodem, dla którego rozważam wzorzec Visitor jest to, że niektóre algorytmy będą wymagały referencji niedostępnych w projekcie, w którym zaimplementowane są klasy, a istnieje wiele różnych algorytmów, więc unikam dużych klas.


title: Łączenie się z lokalnym komputerem użytkownika z mojej aplikacji WebApp

text: Mam aplikację internetową, którą opracowałem. Zamierzam opracować wtyczkę do tej aplikacji, aby móc pobierać informacje z pakietu kont użytkowników, takie jak szałwia lub quickbooks (wersja offline). Idealnie chciałbym to zrobić bez konieczności posiadania statycznego adresu IP itp. Niestety jest to ponad moją głowę, obecnie nie mam pojęcia, jak to zrobić. Proszę, czy ktoś poprowadzi mnie we właściwym kierunku. Prawdopodobnie użyję danych json między aplikacją internetową a usługą klienta, którą zrobię, i nie mam nic przeciwko tej części, to tylko początkowe połączenie, co do którego jestem zdezorientowany. Jakakolwiek pomoc byłaby naprawdę mile widziana. Mam nadzieję, że to ma sens. Dzięki Ash


title: Czy PHP-GTK jest szeroko stosowane?

text: Czy PHP-GTK jest szeroko stosowane w aplikacjach desktopowych? Czy zaleca się stosowanie? Czy istnieje duża firma, która korzysta z PHP GTK?


title: Czy programiści muszą wiedzieć o projektowaniu graficznym?

text: Chcę poznać twoją opinię. Czy programiści (tacy jak ja) muszą wiedzieć o projektowaniu? Na przykład rysowanie, projektowanie stron internetowych, manipulacja obrazami itp. Edytowane Właściwie lubię programowanie internetowe, korporacyjne i mobilne. Dzięki: D


title: Czy ma sens używanie jQuery w aplikacjach webowych tylko dla nowoczesnych webkitów?

text: Ostatnio pracuję nad kilkoma mobilnymi aplikacjami webowymi na Androida (2.3+) i iOS (4+). Ich przeglądarki obsługują większość ECMAScript5, który jest bardzo potężny i chciałem używać funkcji językowych tam, gdzie to możliwe, uciekając się do jQuery tylko wtedy, gdy musiałem. Okazuje się, że jedyną rzeczą, do której używam jQuery, jest posiadanie krótszej alternatywy dla `document.querySelectorAll`. Równie dobrze mógłbym się go pozbyć. Jeśli muszę obsługiwać tylko nowoczesne przeglądarki WebKit, czy dobrym pomysłem jest pozbycie się jQuery (i innych bibliotek ogólnego przeznaczenia)? W końcu są warstwą pośrednią. (Aplikacje nie muszą do tej pory wykonywać wywołań AJAX, myślę, że to jedna rzecz, która będzie brzydka. Ale czy warto trzymać jQuery tylko po to?)


title: Projekt kontrolera widoku w iOS vs MVC w projektowaniu tradycyjnych aplikacji internetowych

text: Ponieważ wyszedłem ze środowiska webapps i przeniosłem się do programowania iOS, zastanawiam się, dlaczego nie możemy po prostu zastosować podejścia projektowego MVC do aplikacji natywnych, tj. w iOS widok i kontroler są ściśle powiązane, czy jest jakiś powód?


title: Program nauczania informatyki dla kierunku non-CS?

text: Chciałbym mieć kilka pomysłów na zbudowanie moich podstawowych umiejętności CS. Zacząłem programować komputery 10 lat temu i zrobiłem na tym całkiem niezłą karierę. Nie mogę jednak przestać myśleć, że droga, która mnie tu przywiodła, była bardzo konkretna i jeśli coś pójdzie nie tak (np. zostanę zwolniony) trudniej byłoby znaleźć pracę tutaj w USA na tym samym poziomie wynagrodzenia LUB w najlepsza firma. Powodem, dla którego to mówię, jest to, że jestem samoukiem; nie mam dyplomu z informatyki, więc chociaż jestem mistrzem C/C++/Java, nie mam formalnego wykształcenia CS i matematyki, które posiada wielu innych programistów (zwłaszcza tutaj w USA). Kiedy patrzę na pytania do rozmowy kwalifikacyjnej z Apple, Google, Amazon, mam wrażenie, że w pewnym momencie oblałem te techniczne rozmowy kwalifikacyjne. Nie zrozum mnie źle, znam swoje algorytmy i struktury danych, ale kiedy sprawy zagłębiają się zbyt głęboko w sferę CS, mam kłopoty. Co mogę zrobić, aby zlikwidować lukę? Myślałem o magisterium z CS, ale czy w ogóle ZROZUMIEM, co się tam dzieje, jeśli nie jestem studentem CS? Czy powinienem wrócić do podstaw i zamiast tego uzyskać licencjat z CS? Zawsze przechodzę w tryb samokształcenia, gdy chcę się uczyć nowych rzeczy, ale mam wrażenie, że będę potrzebował więcej formalnej edukacji w CS, jeśli chcę mieć szansę na pracę w tego rodzaju firmach. Dziękuję Ci!


title: Wybieranie między widokiem a kontrolerem dla mojego kodu

text: Zdaję sobie sprawę, że tematów związanych z projektowaniem MVC jest wiele, ale ciężko znaleźć dobre wyjaśnienia: co powinienem zrobić, jakie są konsekwencje różnych możliwości... Pracuję więc nad aplikacją ASP .NET MVC z interfejs HTML/Javascript. Obecnie istnieje widok, który pozwala użytkownikowi końcowemu edytować niektóre obiekty, podobnie jak inni użytkownicy. Formularz jest generowany automatycznie na podstawie niektórych metadanych. Ale te obiekty są dość złożone, mają wiele właściwości systemowych i muszą być edytowane przez użytkowników niebędących ekspertami. Ponieważ nie chcemy spędzać dużo czasu na widoku, postanowiliśmy ukryć wszystkie pola wejściowe z wyjątkiem najprostszych, takich jak imię, nazwisko, telefon... Moje pytanie brzmi, czy to filtrowanie powinno być wykonywane w sterownik czy w widoku ? Czy należy ignorować najbardziej złożone pola wejściowe w widoku, czy zwracać tylko potrzebne pola z kontrolera? Również mój kontroler zwraca dane z modelu bez żadnego przetwarzania końcowego. Tak to się dzieje w widoku. Mógłbym to zrobić w kontrolerze, aby zaoszczędzić trochę wywołań ajax i trochę przepustowości, ale nie wiem, czy powinienem dostosować kontroler do widoku, czy widok do kontrolera.


title: Jak doskonalić umiejętności w zakresie architektury oprogramowania

text: Jaki jest najlepszy sposób na podniesienie swoich umiejętności w zakresie architektury oprogramowania? Uczono nas wzorców projektowych na uniwersytecie i widzę mnóstwo książek z prostymi i prostymi przykładami, ale poza nimi, jak można nauczyć się dobrej architektury? Innymi słowy, jak można ewoluować w wielkiego architekta? Jakie są warunki wstępne?


title: chroń zakupione gry przed pobraniem na inny komputer

text: Chcę stworzyć system zarządzania pobranymi plikami na mojej stronie internetowej, aby po zakupieniu zawsze móc je ponownie pobrać za darmo. (przeczytałem, że Steam robi coś podobnego) Problem w tym, że ktoś mógłby założyć konto, coś kupić, a następnie podać hasło do konta znajomym i rodzinie, aby wszyscy mogli pobierać kopie za darmo. Czy istnieje sposób, aby temu zapobiec? A może to niemożliwe.


title: Czy jest jakiś powód, dla którego inicjalizacja z opóźnieniem nie mogła zostać wbudowana w Javę?

text: Ponieważ pracuję na serwerze, w którym użytkownicy nie mają absolutnie żadnego nieutrwalonego stanu, każdy obiekt związany z użytkownikiem, który mamy, jest wdrażany przy każdym żądaniu. W konsekwencji często robię leniwe inicjowanie właściwości obiektów, które mogą pozostać nieużywane. `protected EventDispatcher dyspozytor = new EventDispatcher();` Staje się... chroniony EventDispatcher<EventMessage> dyspozytor; public EventDispatcher<EventMessage> getEventDispatcher() { if (dispatcher == null) { dyspozytor = new EventDispatcher<EventMessage>(); } dyspozytor zwrotów; } Czy jest jakiś powód, dla którego nie można było tego wbudować w Javę? `protected **lazy** EventDispatcher Dispatcher = new EventDispatcher();` * * * Jak wspomniano poniżej w komentarzach, zdaję sobie sprawę, że język teoretycznie może ewoluować, aby zawierać prawie wszystko, co chcesz. Szukam praktycznego pomiaru możliwości. Czy byłoby to sprzeczne z innymi funkcjami? Czy implementacja jest wystarczająco prosta, aby dobrze współpracować z istniejącą JVM? A nawet, czy to dobry pomysł?


title: Czy terminatory "wsteczne" dla if i case są unikalne dla skryptów powłoki?

text: Przynajmniej w bash, bloki `if` i `case` są zamykane w następujący sposób: jeśli jakieś-wyrażenie to echo "hello world" fi case $jakaś-zmienna w [1-5]) zrób-to-thing ;; *) zrób inną rzecz esac w przeciwieństwie do bardziej typowego zamknięcia `end` lub `endif`/`endcase`. O ile mi wiadomo, ta dość zabawna konwencja jest unikalna dla skryptów powłoki i nigdy nie widziałem tak dziwnego terminatora bloków nigdzie indziej. Czasami takie rzeczy mają pochodzenie w innym języku (jak Ruby's elsif pochodzący z Perla) lub dziwne uzasadnienie. Czy ta funkcja skryptów powłoki ma za sobą jakąś historię? Czy można go znaleźć w innych językach?


title: Dalsze odsprzęganie za pomocą bibliotek statycznych

text: Od jakiegoś czasu zastanawiałem się nad przyczynami, które uniemożliwiają wielu programistom – przede wszystkim mnie – pisanie czystego, modułowego i ekspresyjnego kodu podczas tworzenia np. aplikacji CocoaTouch. Odkryłem, że moje trzy najważniejsze powody są następujące: 1. **Kod interfejsu użytkownika.** Specyficzny dla urządzenia interfejs użytkownika/UX, ogólny bałagan, „szybkie poprawki i obejścia” i tak dalej. 2. **Słabe oddzielenie kontrolera od widoku.** Czasami kontroler kończy pracę, za którą odpowiedzialny jest widok. 3. **Rzadkie uprzęże testowe.** Oczywiście te problemy wynikają z braku dyscypliny lub przyzwyczajenia do pisania czystego kodu. Ale trudno jest się zdyscyplinować, jeśli środowisko pozwala ci tego nie robić. Łatwo jest posortować pranie, jeśli masz zestaw dedykowanych szuflad, ale jeśli masz jedną szufladę, powoli zamienia się w bałagan – chyba że jesteś bardzo zdyscyplinowany. A potem spróbowałem zastosować tę ideę „sortowania szuflad” do rozwiązania moich problemów z kodem — i pomyślałem, że możliwe jest posortowanie komponentów MVP w następujący sposób: 1. **Model** jest w rzeczywistości szkieletem klas odpowiedzialnych za radzenie sobie z dane. Model jest wielokrotnego użytku, ponieważ jest zestawem procedur do pracy z danymi. 2. **Widok** to tak naprawdę szkielet zajęć odpowiedzialnych za graficzną prezentację informacji. Nie zależy tak bardzo od środowiska i zdecydowanie można go ponownie wykorzystać. 3. **Kontroler** to szkielet klas odpowiedzialnych za koordynację ww. warstw i pracę ze ścieżkami interakcji z użytkownikami. Sama aplikacja to coś w rodzaju (?) dużego kontrolera. Ponieważ skleja określony zestaw modeli ze zdefiniowanym zestawem widoków, nie jest wielokrotnego użytku i zależy w dużym stopniu od tych + platformy itp. Więc biorąc pod uwagę, że M i V są w pewnym stopniu wielokrotnego użytku, a C nie — może ma sens wymusić oddzielenie M i V? Najlepszym sposobem zapewnienia ich rozdzielenia jest umieszczenie ich w bibliotekach statycznych. Następnie można je połączyć z aplikacją, która zawiera tylko kod kontrolera. Takie podejście wydaje mi się całkiem dobre, ponieważ: * tylko kontroler zależy od czegoś tutaj * programista może napisać oddzielne zestawy testów dla tych modułów * klasy interfejsu użytkownika mogą być łatwo ponownie użyte w innych aplikacjach * klasy modeli mogą być wyodrębnione do wieloplatformowego kodu przy zachowaniu stare zobowiązania fasadowe * są ograniczone do trzech naprawdę odrębnych modułów — co jest bardziej wyróżniającego niż oddzielna biblioteka? Co myślisz? Czy to brzmi jak pomysł do naśladowania?


title: Znajdź produkt za pomocą sumowania C# Problem?

text: Próbuję napisać prosty program do znajdowania iloczynu dwóch liczb (X, Y) bez mnożenia. Oznacza to, że użyję tylko sumowania, aby znaleźć produkt. Próbuję zastosować technikę „Divide-and-Conquer” i korzystam z oczywiście znanego pojęcia, że: 5*6 = 5+5+5+5+5+5 Multiply(uint X, uint Y) { if ( Y < 1) zwrot 23423432453; //dowolna bardzo duża liczba losowa if (Y == 1) sum = sum + X; else // if (Y != 1) { halfY = Y / 2; if (Y % 2 == 0) // jeśli Y jest parzyste # return Multiply(X, halfY); else //jeśli Y jest nieparzyste # return Multiply(X, halfY) + Multiply(X, 1); } zwróć sumę; } **WYJAŚNIENIE** 1) Widzę problem jako (na przykład) siatkę 5x6. Mój pomysł polega na rekurencyjnym dzieleniu liczby kolumn Y, aż osiągnę Y=1 (Y=1 to przypadek bazowy). Gdy Y=1, liczba wierszy w każdej kolumnie będzie po prostu "X" i mogę po prostu dodać X+X+X ... zgodnie z #kolumn Y i zapisać wynik w zmiennej sum , wtedy ja po prostu zwróć "sumę" na końcu. 2) W tej części kodu, w przeciwnym razie //jeśli Y jest nieparzyste # return Multiply(X, halfY) + Multiply(X, 1); Dodałem "Multiply(X, 1)", aby zrekompensować "1", które zostanie utracone w wyniku operacji dzielenia liczb całkowitych. \----- Jako ilustracja: Na przykład 5*6, gdzie X=5, Y=6: Multiply(X,Y) //Y=6 / \ Multiply(X, Y/2) Multiply(X, T/2) //T=3, T=3 / | \ / \ \ Mult(X,Y/4) Mult(X,Y/4) Mult(X,1) Mult(X,Y/4) Mult(X,Y/4) Mult(X,1) // Y=1,1,1,1,1,1,1 | | | | | | //SPRAWA BAZOWA! suma= X + X + X + X + X + X = 5+5+5+5+5+5 = 30 * * * Kod wydaje mi się dość logiczny, ale nie da mi właściwych wyników. Czy pomysł jest błędny? Jakakolwiek pomoc w tym, co jest nie tak, byłaby bardzo doceniana. Dziękuję.


title: Jak rozpocząć naukę frameworka Spring ze wszystkimi powiązanymi z nim funkcjonalnościami?

text: Zagłębię się w niuanse wiosny. Mam trochę informacji o tym frameworku. Więc nie idę na ślepo. Ale nadal chciałbym zacząć go jako początkujący, a następnie przejść na kolejne poziomy do wszystkich powiązanych funkcjonalności. Mam zainstalowany RAD i apache tomcat. Czy ktoś zna jakieś dobre strony lub pliki PDF, które dadzą mi dobre podejście oddolne z odpowiednimi przykładami?


title: Dlaczego buforowanie w Firefoksie zostanie zresetowane w wersji 3, a wersja 16 nie?

text: Zajmuję się tworzeniem aplikacji internetowej i mam aplikację wdrożoną na serwerze Tomcat. Przetestowane na IE i Firefox i działają dobrze. Oznacza to, że gdy zamknę przeglądarkę i ponownie otworzę aplikację, dane zostaną zresetowane. Podczas wdrażania w Websphere dane są resetowane tylko w IE, ale Firefox nie. Oznacza to, że Firefox zapisze stare dane w pamięci podręcznej. Próbowałem wyczyścić pamięć podręczną w FF, ale nadal się nie udało. Zrobiłem test w FF3 i FF16, FF3 zresetuje wartość, ale FF16 nie, jestem tak ciekawy, dlaczego tak się stało? Teraz nie wiem, czy jest to mój problem z kodem, czy w rzeczywistości jest to problem z buforowaniem FF. Jakieś wskazówki na ten temat?


title: Zalety Scala vs. Groovy z aplikacjami JAVA EE 6

text: Proszę pozwolić mi najpierw podkreślić, że nie szukam wojen płomieni. Chcę tylko porady od ludzi, którzy mają prawdziwe doświadczenia. Zacząłem uczyć się JAVA EE 6 jako prawdziwy nowicjusz i mam trudności z wyborem narzędzi do użycia. Pierwsze pytanie, jakie mam, brzmi: jakie są zalety używania Scala vs. Groovy z aplikacjami Java EE 6 w porównaniu z Javą? Widziałem na niektórych blogach, jak ludzie wspominają, że Scala może oznaczać pisanie mniej kodu, ale jako nowicjusz nie wiem, jakie są inne zalety i wady. Drugie pytanie brzmi, czy lepiej wybrać Netbeans 6.9 czy Helios 3.6.1? Zdałem sobie sprawę, że za pomocą eclipse mogę bez problemu mieszać aplikacje EE 6 z Groovy lub Scala (zrobiłem to tylko wyświetlając komunikat String z klas Scala i Groovy.). Jedyną zaletą Netbeans, o której mogę pomyśleć, jest posiadanie oddzielnych bibliotek projektów Java i używanie jarsów w mojej aplikacji internetowej. Ale zdaję sobie również sprawę, że w zakresie mojej niewielkiej wiedzy Netbeans ma lepsze wsparcie dla Java EE 6. Proszę potrzebować porady eksperta. Dziękuję.


title: Jakie są twoje zalecenia dotyczące przeniesienia dużego projektu VC++6 do nowszej wersji VS?

text: Mamy ogromny projekt w C, który działa w VC++6. I mam nadzieję, że zostanie to przeniesione do późniejszych wersji Visual Studio. Ale myślę, że to będzie ogromna praca. Właściwie po prostu próbowałem ponownie skompilować projekt za pomocą VS2005 i dostałem tak wiele błędów. Czy masz jakieś doświadczenie w tego typu portowaniu? Jakieś zalecenia?


title: Jakie są różne cechy/typy przedwczesnej optymalizacji?

text: Aby nauczyć się techniki przeglądu kodu, muszę omówić różne tematy. Jednym z nich jest przedwczesna optymalizacja. Znalazłem 3 jego cechy jako: 1. Jest ogólnie zły; powodując **efekty odwrotne**. 2. To **niepotrzebny ból**, nie powodujący żadnych korzyści. 3. Wymaga dużo wysiłku, aby osiągnąć **małe korzyści** Czy jest jakaś inna cecha, której mi brakuje ? Ponadto, aby je zilustrować, zazwyczaj otrzymuję dobre przykłady tylko dla pierwszego scenariusza. Czy ktoś może zaproponować jakiś solidny przykład dla drugiego i trzeciego scenariusza? Przykład dla pierwszego scenariusza: > Użycie char zamiast int dla mniejszych pętli w celu zaoszczędzenia bajtów! for(char c = 0; c < 20; c++) {} //Zło: Dostęp do 'char' jest droższy niż 'int' [Uwaga: Nie martwi mnie fakt, że kompilatory zwykle same zajmują się przedwczesnymi rzeczami. To szkolenie ma na celu jedynie zilustrowanie.] To pytanie nie dotyczy: „Jakie optymalizacje są przedwczesne?”.


title: Czy podczas projektowania repozytorium powinienem używać agregowanego katalogu głównego?

text: Mam byt zwany Mistrzem, który składa się z wielu bytów Niewolniczych. W mojej bazie danych może być tylko jeden Master i chcę odpytywać repozytoria, aby uzyskać Slave dla danego id. Początkowo utworzyłem SlaveRepository i sprawdziłem to przez id. To wydaje się być w porządku i działa, a inni programiści mogą korzystać z mojego repozytorium. Potem pomyślałem o zagregowanych korzeniach i utworzyłem MasterRepository i zwróciłem Master, a następnie wykonałem pętlę, aby uzyskać wymaganą encję Slave. Problem, który poczułem tutaj, polega na tym, że gdy ujawnię to innym programistom, będą musieli zrobić to samo, więc przeszedłem przez posiadanie metody w MasterRepository o nazwie GetSlaveByID (identyfikator ciągu), a następnie mogłem bezpośrednio uzyskać Slave (ukrywa funkcjonalność pętli ). Teraz, czy moje repozytorium powinno zwrócić Slave, mimo że nazywa się to MasterRepository? A co ważniejsze, jaka jest właściwa droga? Jestem na wczesnym etapie prób zastosowania DDD i TDD, więc prawdopodobnie jest wiele rzeczy, o których muszę pomyśleć, zanim zdecyduję, który jest właściwy sposób, jak sądzę.


title: Mniej vs Stylus vs Sass

text: Chciałbym zacząć używać preprocesora CSS, aby skrócić czas programowania. Który z nich jest najszybszy z tej perspektywy?


title: Jakie są zalety programowania w systemie operacyjnym w przeciwieństwie do wykonawczego?

text: Załóżmy, że masz dostęp do wbudowanej aplikacji systemowej do programowania w języku C w środowisku wielordzeniowym (pomyśl o Cavium lub Tilera) i musisz wybrać między dwoma środowiskami: Zakoduj aplikację pod Linuksem w trybie SMP lub zakoduj aplikację pod cienki bare metal executive (coś jak bardzo minimalny RTOS), być może z jednym rdzeniem działającym pod kontrolą UP Linux, który może obsługiwać zadania kontrolne. Na potrzeby tego pytania załóżmy, że oba środowiska zapewniają ten sam poziom gwarancji wydajności we wszystkich mierzalnych aspektach wydajności w czasie wykonywania, w tym liczbie znaczących akcji na sekundę, jitterze, opóźnieniu, względach czasu rzeczywistego - działa. (i tak, zdaję sobie sprawę, że nie jest to wcale trywialne założenie, gołe ze mną). Jak uzasadniłbyś wybór rozwiązania opartego na Linux SMP, a nie cienkiego rozwiązania wykonawczego? Pytanie może wydawać się głupie. Z pewnością wydaje mi się to oczywiste – ale muszę przekonać kogoś, kto nie myśli tak samo. Czy mógłbyś pomóc sporządzić listę argumentów przemawiających za wyborem prawdziwego systemu operacyjnego obsługującego SMP (Linux) w porównaniu z menedżerem, zakładając, że gwarancje wydajności NIE są problemem? Wielkie dzięki


title: Biznesmen zamieniony w kodera? Jak i dlaczego? Inspiruj nietechniczne

text: Ukończyłem studia z tytułem Business. Dwa lata później w końcu zdałem sobie sprawę z mocy programowania – mocy „wymyślania”. Szkoda, że nie zdałem sobie z tego sprawy w liceum. Mimo to próbowałem samodzielnie uczyć C#, ale okazało się to trudne. Potem dwa miesiące temu przerzuciłem się na naukę PHP i byłem w stanie zbudować rzeczy, które moim zdaniem przekraczały moje możliwości. Czy ktoś miał takie samo doświadczenie? Czy programowanie samoukiem? Jakich lekcji nauczyłeś się?


title: Czy to dobre powody, aby przejść na platformę programistyczną firmy Microsoft?

text: **Tło** W wolnym czasie zajmuję się tworzeniem PHP i Ruby on Rails i sporo się nauczyłem. Wybrałem te technologie ze względu na niski koszt wejścia, ponieważ wszystko jest open-source i swobodnie dostępne. Rozwijam się na Linuksie i nauczyłem się tego również używając go. **Problem** Teraz jestem w miejscu, w którym chcę pogłębić swoją wiedzę na temat tworzenia stron internetowych, ale osobiście mam trudności z nauką, ponieważ: * Uważam, że ponieważ wszystko jest utrzymywane przez społeczność nie ma prawdziwej „struktury” rozwijającej się wiedzy. * Do tej pory nauczyłem się od robienia i wyszukiwania konkretnych problemów, gdy się z nimi spotykam. Nie wiem, czy generalnie jest to właściwy sposób, czy po prostu nie jest to dla mnie najlepszy sposób. To, co mi się nie podoba w tym podejściu, to to, że nie ma żadnego wglądu w problem, ponieważ wystarczy go naprawić i rozpocząć pracę nad projektem, nad którym faktycznie pracujesz! Na przykład praca w Railsach nie dała mi więcej niż tylko podstawową wiedzę o Ruby, ponieważ nie mogę jednocześnie nauczyć się Railsów i Rubiego na poziomie zaawansowanym (może to tylko ograniczenie mojego mózgu?) * Uważam, że że znaczna część mojego czasu spędzam po prostu na konfigurowaniu, rozwiązywaniu problemów ze stosem LAMP dla zależności i konfliktów PHP/MySQL lub klejnotów Ruby **Pytanie** Rozważam wypróbowanie C# i świata .NET z kilku powodów , i chciałbym _przemyślenia bardziej doświadczonych programistów na temat tego, czy moje myślenie jest zdrowe, czy wadliwe_. Moje główne powody, dla których chcę się zmienić, to: * wydaje się, że jest to bardziej ustrukturyzowane środowisko, myślę, że szczególnie dlatego, że nie jest oparte na społeczności. Czy to sprawia, że nauka staje się bardziej liniowa? * Osobiście wolę pracować w środowiskach wizualnych, a Microsoft ma Visual Studio. Użyłem kilku IDE dla PHP i Ruby i są one całkiem dobre, ale po prostu idąc za tym, co słyszałem, Visual Studio jest doskonałe do pracy. * Firma Microsoft udostępnia bezpłatne „ekspresowe” wersje swojego oprogramowania do wypróbowania, więc teraz również jest tam niski koszt wejścia * ponieważ Microsoft jest środowiskiem „zamkniętym”/zintegrowanym, czy oszczędzasz czas na początkowej konfiguracji? Czy spędzasz mniej czasu na konfigurowaniu Apache/nginx, MySQL, MongoDB, kontroli wersji itp.


title: Czy obraz powinien mieć możliwość zmiany rozmiaru w OOP?

text: Piszę aplikację, która będzie miała encję „Obraz”, i już mam problem z podjęciem decyzji, do kogo powinno odpowiadać każde zadanie. Najpierw mam klasę `Image`. Ma ścieżkę, szerokość i inne atrybuty. Następnie stworzyłem klasę `ImageRepository`, do pobierania obrazów jedną i przetestowaną metodą, np.: `findAllImagesWithoutThumbnail()`. Ale teraz muszę też mieć możliwość `createThumbnail()`. Kto powinien się tym zająć? Myślałem o posiadaniu klasy `ImageManager`, która byłaby klasą specyficzną dla aplikacji (byłby też wybrany komponent wielokrotnego użytku do manipulacji obrazami innej firmy, nie wynajduję koła na nowo). A może wystarczyłoby 0K, aby obraz `Obrazu` zmienił swój rozmiar? Lub niech `ImageRepository` i `ImageManager` będą tą samą klasą? Co myślisz?


title: Najlepszy sposób na usunięcie pozycji listy z istniejącego rekordu

text: Ok, więcej pytania koncepcyjnego tutaj: Powiedzmy, że mam istniejący zapis typu Spotkanie. Kiedy przechodzę do edycji spotkania, mam listę ze wszystkimi obecnymi uczestnikami spotkania i jedną ze wszystkimi pracownikami. Następnie dodaję kilku pracowników z listy głównej i usuwam kilku z listy spotkań. Jakie jest zatem najlepsze podejście do aktualizacji mojej bazy danych MeetingParticipant o nowy skład? Rekordy dodawania nie stanowią problemu, ale kiedy przechodzę do aktualizacji, mój telefon zwrotny nie wie, które elementy usunąłem. Oto rozwiązania, które do tej pory rozważałem/wdrożyłem, ale mam nadzieję, że ktoś ma lepszą odpowiedź :). 1. Natychmiast rozwiązać usuwanie rekordu, gdy pracownik został usunięty z listy. (to jest to, co zwykle wdrażam, ale wolę znaleźć sposób, w którym mogę po prostu zaktualizować całą kolekcję po przesłaniu formularza) 2. Usuń wszystkie rekordy MeetingParticipant dotyczące spotkania i zapełnij ponownie nową listą. (może to spowodować pewne problemy z integralnością referencyjną pracowników, których status się nie zmienił) 3. Przejrzyj każdy z rekordów MeetingParticipant, przeszukując nową listę, aby sprawdzić, czy nadal znajduje się na liście, czy nie. (wydaje się, że to dużo przesady) Jeśli to ma znaczenie, pracujemy w/w ramach .Net przy użyciu MVC i LINQ.


title: Używanie XML do przechowywania danych

text: Myślałem o formacie XML i następującym cytacie: > „XML nie jest bazą danych. Nigdy nie miała być bazą danych. Nigdy > nie będzie bazą danych. Relacyjne bazy danych to sprawdzona technologia z ponad 20-letnim doświadczeniem wdrożeniowym. Są solidnymi, stabilnymi, > produktami użytecznymi. Nie odchodzą. XML jest bardzo przydatną technologią > do przenoszenia danych pomiędzy różnymi bazami danych lub pomiędzy bazami > a innymi programami. Jednak sama w sobie nie jest bazą danych. Nie używaj tego jak jeden.“ > -Skuteczny XML: 50 konkretnych sposobów na ulepszenie Twojego XML-a Autor: Elliotte Rusty > Harold (strona 230, część 4, pozycja 41, akapit drugi) To wydaje się naprawdę podkreślać, że XML nie powinien być używany do przechowywania danych i powinny być używane tylko do interoperacyjności między programami. Osobiście się nie zgadzam, a plik `app.config` .NET, który służy do przechowywania ustawień programu, jest przykładem przechowywania danych w pliku XML. Jednak w przypadku baz danych, a nie konfiguracji itp. XML nie powinien być używany. Dla rozwinięcia mojej tezy posłużę się dwoma przykładami: A) Dane o klientach z polami, które są wszystkie na jednym poziomie, tzn. istnieje kilka pól, wszystkie dotyczą jednego klienta bez dzieci B) Dane o konfiguracji aplikacji, w której pola są zagnieżdżone i właściwości mają wiele sensu. Moje pytanie brzmi: Czy to nadal jest prawidłowe oświadczenie i czy można teraz przechowywać dane przy użyciu XML? EDYCJA: Wysłałem e-mail do autora tego cytatu z prośbą o wprowadzenie/dodatkowy kontekst.


title: Dlaczego stan współdzielony obniża wydajność?

text: Pracuję zgodnie z zasadą współdzielenia nic w programowaniu współbieżnym. Zasadniczo wszystkie moje wątki robocze mają niezmienne kopie tylko do odczytu tego samego stanu, które nigdy nie są między nimi współdzielone (_nawet przez odniesienie_). Ogólnie rzecz biorąc, zadziałało to naprawdę dobrze. Teraz ktoś wprowadził pojedynczą pamięć podręczną bez blokady ( _np. słownik statyczny_ ), do której wszystkie wątki mają dostęp jednocześnie. Ponieważ słownik nigdy nie jest zmieniany po uruchomieniu, nie ma blokad. Nie było żadnych problemów z bezpieczeństwem wątków, ale teraz występuje pogorszenie wydajności. Pytanie brzmi... skoro nie ma blokad, dlaczego wprowadzenie tego singletona tworzy hit wydajności? Co dokładnie dzieje się pod kołdrą, co mogłoby to wyjaśnić? Aby potwierdzić, dostęp do tego nowego singletona jest jedyną zmianą i mogę to wiarygodnie odtworzyć, po prostu komentując wywołanie pamięci podręcznej.