title: Mój ojciec jest lekarzem. Nalega na napisanie bazy danych do przechowywania niekrytycznych informacji o pacjencie, bez znajomości programowania

text: Tak więc mój ojciec jest obecnie w trakcie wspólnego „hakowania” bazy danych za pomocą FileMaker Pro, narzędzia bazodanowego opartego na GUI dla swojej małej (4-osobowej) praktyki. Baza danych zostanie wykorzystana, aby zmniejszyć obciążenie raportowania z urządzeń medycznych, usprawniając dość niezdarny proces. Nie ma doświadczenia w programowaniu i wydaje się, że robi wszystko, co w jego mocy, aby nie uczyć się rzeczy poprawnie. Ma zduplikowane typy danych, brak relacji wymuszanych przez bazę danych (ograniczenia dotyczące obcego/podstawowego klucza) i tuzin innych problemów. Robi to wszystko ręcznie za pomocą narzędzia GUI, korzystając z filmów z Youtube. Mój problem polega na tym, że chociaż chcę, aby odniósł sukces w 100%, nie sądzę, by właściwe było podejmowanie przez niego tego typu decyzji. Jak mam go przekonać, że bez jakiejś edukacji w tych tematach, posiekane rozwiązanie to zły pomysł? Potrafi być dość uparty i myślę, że postrzega tego typu prace jako „dziecięcą zabawę”. Jak mam do tego podejść? Czy to nawet taki zły pomysł - czy też mam rację, myśląc, że powinien zatrudnić odpowiedniego DBA/programistę, aby się tym zajął, aby nie stało się to koszmarem konserwacji? NB: Jestem konsultantem deweloperskim od 4 lat i widziałem swój udział w bolesnych wdrożeniach dla klientów.


title: Związek jeden do wielu Django

text: powiedzmy, że chcę, aby mój model użytkownika miał tylko jedną lokalizację, a mój model posta miał wiele lokalizacji. Jak zaprojektować model? To właśnie mam do tej pory na myśli. Czy to zadziała? Czy muszę utworzyć dwa różne modele lokalizacji dla każdego modelu użytkownika i posta? `class User(models.Model):` `class Post(models.Model):` class Location(models.Model): user = models.ForeignKey(User,unique=true) post = models.ForeignKey(Post)


title: Testowanie użyteczności przedpokoju i ciche środowisko pracy razem

text: Jak osiągnąć zarówno punkt 8, jak i 12, czyli > Czy programiści mają ciche warunki pracy? oraz > Czy przeprowadzasz testy użyteczności korytarza? wspomniany w teście Joela: 12 kroków do lepszego kodu?


title: Dlaczego VB jest tak popularny?

text: Dla mnie Visual Basic wydaje się niezdarny, brzydki, podatny na błędy i trudny do odczytania. Pozwolę innym wyjaśnić dlaczego. Chociaż VB.net wyraźnie stanowi ogromny krok naprzód dla języka pod względem funkcji, nadal nie rozumiem, dlaczego ktokolwiek miałby wybrać kodowanie w VB zamiast, powiedzmy, C#. Jednak nadal widzę (co wydaje się być), że zdecydowana większość komercyjnych aplikacji internetowych ze „sklepów MS” jest zbudowana w VB. Mógłbym się w tym sprostować, ale VB nadal wydaje się bardziej popularne, niż na to zasługuje. Czy ktoś może pomóc odpowiedzieć na którekolwiek (lub wszystkie) z tych pytań: * Czy brakuje mi czegoś z VB? Czy jest łatwiejszy do nauczenia lub „bardziej przyjazny” niż C#? Czy są funkcje, o których nie wiem? * Dlaczego VB/VB.net jest dziś tak często używany, zwłaszcza w projektach internetowych?


title: Jak radzisz sobie z określonymi wyjątkami sieciowymi w Haskell?

text: Mam następujące, aby spróbować połączyć się z serwerem: testAddress :: HostName -> Int -> IO (może obsługiwać) testAddress host iPort = do let port = PortNumber $ fromIntegral iPort putStrLn $ "Testing - Host: " ++ host + + ", Port: " ++ pokaż wynik iPort <- spróbuj $ connectTo host port przypadek wynik Left (SomeException e) -> return Nothing Right h -> do putStrLn $ "Connected to" ++ host return $ Tylko h zrobiłem wyjątek do przechwycenia "SomeException", ale wiem, że to nie jest właściwy sposób na zrobienie tego; jak wszystko złapie, a nie poradzisz sobie z pojedynczymi przypadkami. Nie mogę jednak znaleźć nazw konkretnych wyjątków sieciowych. Wygląda na to, że nie ma żadnej dokumentacji dla pakietu sieciowego, a każdy przykład, który mogę znaleźć w Google, używa po prostu „SomeException”. Jeśli próbuję połączyć się z losowym hostem i portem i nie próbuję niczego złapać, pojawia się błąd: " _*_ Wyjątek: połączenie: nie powiodło się (przekroczono limit czasu połączenia (WSAETIMEDOUT))" Ale tak się nie dzieje wydaje mi się, że podaje mi dokładną nazwę wyjątku, aby spróbować go złapać. Myślałem, że może to być „WSAETIMEOUT”, ale kiedy próbowałem to złapać, otrzymałem błąd kompilacji, mówiący, że nie można znaleźć konstruktora dla „WSAETIMEOUT”. Co powinienem zrobić. Nie chcę po prostu wszystkiego łapać i traktować tak samo, bo wtedy nie wiem, co się dzieje. Dziękuję Ci


title: Łańcuch obiektów przez interfejs

text: Powiedzmy, że mam 3 typy obiektów: function Sea() { var logs = [Logs]; this.getLog = function(ind){zwróć logi[ind]} } function Log() { var bumps = [Bumps]; this.getBump = function(ind){zwracanie nierówności[ind]} } function Bump() { var frogs = [Żaby]; this.getFrog = function(ind){zwróć żaby[ind]} } function Żaba() { this.ribbit = function(){alert("Onomatopeja!")} } Tak więc `Żaba` nie wie o `Bump ` i `Bump` nie wiedzą o `Log`, ale `Log` może uzyskać dostęp odpowiednio do `Bump` i `Frog`, odpowiednio, bezpośrednio i pośrednio. Załóżmy teraz, że za każdym razem, gdy „Żaba” wypowie „ribbit”, „Dziennik” porusza się nieznacznie (chociaż „Żaba” wewnętrznie nie dba o to, co dzieje się poza nim). Teraz pani Demeter sugeruje, żebym tego nie robił: Sea.getLog(5).getBump(2).getFrog(1).ribbit() Ładnie się czyta, ale są pewne problemy. Poza kwestią ciasnego sprzężenia, ta metoda uniemożliwia również 'ribbitowi' przesunięcie dziennika, chyba że żaba otrzyma odwołanie o dzienniku, co oznacza, że sprzężenie staje się jeszcze mocniejsze. Jednak alternatywna metoda "jednej kropki" wygląda trochę okropnie: Sea.tellFrogOnBumpOnLogToRibbit(1, 2, 5) * * * Rozsądnym rozwiązaniem, które zostało tu zasugerowane (chyba) jest stworzenie zwięzłego, ale ściśle powiązanego interfejsu do... .interfejs, z bardziej logicznym kodem biznesowym: function SeaInterface() { var sea = createSea(); //Rodzaju 1:10 var logInterfaces = [LogInterfaces]; this.getLog = function(ind) {powrót logInterfaces[ind]} } function LogInterface() { var log = createLog(); var bumpInterfaces = [BumpInterfaces]; this.getBump = function(ind) {return bumpInterfaces[ind]} //Prywatna metoda, o której Frogs będzie wiedziała wewnętrznie: var move = function(){} } function BumpInterface() { var bump = createBump(); var frogInterfaces = [FrogInterfaces]; this.getFrog = function(ind) {zwróć frogInterfaces[ind]} } function FrogInterface(log) { var frog = createFrog(); this.ribbit = function() { żaba.ribbit(); log.przenieś(); //Mogę to zrobić, ponieważ jestem prostym interfejsem } } W ten sposób mógłbym nadal korzystać z tworzenia łańcuchów i sprawić, by kod był dobrze czytany (uwaga: tworzenie łańcuchów nie jest koniecznością): Sea.getLog(5).getBump (2).getFrog(1).ribbit() A `Log` nadal poruszałby się po `ribbit`. W końcu jest to tylko próba zminimalizowania szkodliwych skutków, jakie mogą powodować obiekty wiedzące o innych obiektach. Pytania: 1. Czy istnieje równie czytelny lub bardziej czytelny i niezawodny sposób na osiągnięcie tego samego (wiele obiektów w obiektach, w których czasami manipulowanie obiektem wewnętrznym wpływa na obiekt zewnętrzny)? 2. Poza wymaganiem większej ilości kodu i faktem, że sam interfejs jest ściśle powiązany (do przyjęcia?), jakie inne problemy mogą się pojawić, jeśli mam połączyć się z rzeczywistym obiektem przez coś takiego? Poza tym... czy ta metoda ma nazwę? Tak naprawdę nie widziałem wielu takich podejść na wolności, co mnie denerwuje.


title: Ograniczenia Android SDK i iPhone SDK

text: Mam pomysł, który wymagałby wywołania połączenia lub smsa po prostu przez naciśnięcie lub wybranie określonego numeru. Przykład: Naciśnięcie 2324 na kodzie PIN. Mimo że nie jest to Twój kod PIN do odblokowania urządzenia, moja aplikacja (zawsze działająca z tyłu) wykryłaby wpisany kod „2324” i wysłała połączenie lub wiadomość tekstową. Inny przykład: przytrzymanie przycisku głośności przez 5 sekund, a następnie naciśnięcie „2” na zamku z kodem PIN. To może być kolejny wyzwalacz. Moje pytanie brzmi, jak elastyczne są pakiety SDK dla systemów iOS i Android, aby umożliwić taki poziom dostosowania? Czy mogę zmienić ustawienia tonów za pomocą aplikacji (zmiana z Silent na Normal)? Czy mogę zamknąć aplikacje? Czego nie mogę zrobić? Próbowałem to zbadać, ale nie znalazłem żadnej ostatniej ani zaktualizowanej odpowiedzi. Mam nadzieję, że ktoś może wyjaśnić, czego nie mogę / mogę zrobić z zestawami SDK dla iPhone'a i Androida.


title: Aplikacja webowa jako klient REST API: jak obsługiwać identyfikatory zasobów

text: Kilka koncepcji związanych z konfliktem REST w mojej głowie, gdy próbuję go wdrożyć. Mam system API zaplecza REST-ful, który przechowuje logikę biznesową i aplikację sieci Web, która zapewnia interfejs użytkownika. Z różnych zasobów o REST (w szczególności REST w praktyce: Hypermedia and Systems Architecture) wiem, że nie powinienem ujawniać surowych identyfikatorów moich encji, ale raczej zwracać hiperłącza z `rel="self"`. Rozważ przykład. Interfejs API REST zawiera zasób, który zwraca osobę: <Person> <Links> <Link rel="self" href="http://my.rest.api/api/person/1234"/> </Links> < Zwierzęta> <Link rel="pet" href="http://my.rest.api/api/pet/678"/> </Pets> </Person> Problem pojawia się z aplikacją internetową. Załóżmy, że zwraca stronę zawierającą hiperłącze do przeglądarek: <body class="person"> <p> <a href="http://my.web.app/pet/???????" /> </p> </body> Co powinienem umieścić w atrybucie `href`? Jak zachować adres URL encji API w aplikacji internetowej, aby móc pobrać encję, gdy użytkownik otworzy stronę docelową? Wymagania wydają się sprzeczne: 1. Hiperłącze `href` powinno prowadzić do aplikacji internetowej, ponieważ jest to system hostujący interfejs użytkownika 2. `href` powinien mieć jakiś identyfikator encji, ponieważ aplikacja internetowa musi być w stanie zaadresować encję gdy otworzy się strona docelowa 3. Aplikacja internetowa nie powinna analizować/konstruować adresów URL REST, ponieważ nie obsługuje REST. Wspomniana książka mówi, że > Identyfikatory URI powinny być nieprzezroczyste dla konsumentów. Tylko wystawca identyfikatora URI wie, jak go > zinterpretować i zmapować do zasobu. Nie mogę więc po prostu pobrać `1234` z adresu URL odpowiedzi API, ponieważ jako klient RESTful powinienem traktować go tak, jakby był to coś w stylu `http://my.rest.api/api/AGRIDd~ryPQZ^$RjEL0j`. Z drugiej strony muszę podać adres URL, który prowadzi do mojej aplikacji internetowej i wystarczy, aby aplikacja w jakiś sposób przywróciła oryginalny adres URL API i użyła tego adresu URL, aby uzyskać dostęp do zasobów API. Najprostszym sposobem jest prawdopodobnie użycie adresów URL zasobów API jako ich identyfikatorów ciągu. Ale adresy URL stron internetowych, takie jak `http://my.web.app/person/http%3A%2F%2Fmy.rest.api%2Fapi%2Fperson%2F1234` są brzydkie. Wszystko wydaje się dość łatwe w przypadku aplikacji komputerowej lub jednostronicowej aplikacji JavaScript. Ponieważ działają one w sposób ciągły, mogą po prostu przechowywać adresy URL w pamięci wraz z obiektami usług przez okres istnienia aplikacji i używać ich w razie potrzeby. Dzięki aplikacji internetowej mogę sobie wyobrazić kilka podejść, ale wszystkie wydają się dziwne: 1. Zamień hosta w adresach URL API i zachowaj tylko wynik. Ogromnym minusem jest to, że wymaga od aplikacji internetowej obsługi dowolnego adresu URL generowanego przez API, co oznacza potworne sprzężenie. Co więcej, nie jest to znowu RESTful, ponieważ moja aplikacja internetowa zaczyna interpretować adresy URL. 2. Udostępnij nieprzetworzone identyfikatory w interfejsie API REST wraz z linkami, użyj ich do zbudowania adresów URL aplikacji sieci Web, a następnie użyj identyfikatorów na serwerze aplikacji sieci Web, aby znaleźć wymagane zasoby w interfejsie API. Jest to lepsze, ale wpłynie na wydajność serwera aplikacji sieci Web, ponieważ aplikacja sieci Web będzie musiała przejść przez nawigację usługi REST, wydając łańcuch żądań get-by-id w jakiejś formie, aby obsłużyć dowolne żądanie z przeglądarki. W przypadku nieco zagnieżdżonego zasobu może to być kosztowne. 3. Przechowuj wszystkie „własne” adresy URL zwracane przez interfejs API w trwałym (DB?) mapowaniu na serwerze aplikacji sieci Web. Wygeneruj dla nich kilka identyfikatorów, użyj identyfikatorów, aby zbudować adresy URL stron aplikacji sieci Web i uzyskać adresy URL zasobów usługi REST. Tj. Zachowuję adres URL `http://my.rest.api/pet/678` gdzieś z nowym kluczem, powiedz `3` i generuję adres URL strony internetowej jako `http://my.web.app/pet/ 3`. Wygląda to na jakąś implementację pamięci podręcznej HTTP. Nie wiem dlaczego, ale wydaje mi się to dziwne. Czy to wszystko oznacza, że RESTful API nie może służyć jako backend dla aplikacji internetowych?


title: Strategia wykorzystania dwóch różnych systemów pomiarowych w oprogramowaniu

text: Mam aplikację, która musi akceptować i wyprowadzać wartości zarówno w amerykańskich jednostkach niestandardowych, jak iw systemie metrycznym. W tej chwili konwersja, wejście i wyjście to bałagan. Możesz wprowadzić tylko w systemie amerykańskim, ale możesz wybrać dane wyjściowe na US lub Metryczne, a kod do konwersji jest wszędzie. Więc chcę to uporządkować i ułożyć kilka prostych zasad. Więc wymyśliłem to: **Reguły** * użytkownik może wprowadzać wartości w USA lub w systemie metrycznym, a interfejs użytkownika zadba o to, aby to poprawnie zaznaczyć * Wszystkie jednostki wewnętrznie będą przechowywane jako US, ponieważ większość systemu już ma większość danych przechowywanych w ten sposób i zależy od tego. Przypuszczam, że to nie powinno mieć znaczenia, o ile nie mieszasz jednostek. * Wszystkie dane wyjściowe będą w formacie amerykańskim lub metrycznym, w zależności od wyboru/wyboru/preferencji użytkownika. W teorii brzmi to świetnie i wydaje się rozwiązaniem. Jednak jeden mały problem, na który się natknąłem, jest taki: w kodzie lub w bazie danych przechowywane są pewne dane, które _już_ zwracają takie dane: `Śruby 4 x 13/16`, co oznacza „cztery razy śruby”. być w USA lub Metric.Gdzie dokładnie umieścić kod konwersji do wykonania konwersji dla tej jednostki?Powyższe już miesza prezentację i dane, ale dane dla pola, które muszę wypełnić, to cały ciąg.Z pewnością mogę podziel go na cyfrę 4, 13/16" oraz "x" i "śrubki", ale pozostaje pytanie... gdzie mam umieścić kod konwersji? **Różne lokalizacje procedur konwersji** 1) W tej chwili ciąg znajduje się w klasie, w której został utworzony. Mogę umieścić kod konwersji bezpośrednio w tej klasie i może to być dobre rozwiązanie. Poza tym chcę być spójny, więc będę umieszczał procedury konwersji wszędzie w kodzie w źródle danych lub zaraz po odczytaniu go z bazy danych. Problem polega jednak na tym, że myślę, że jeśli mam to zrobić, mój kod będzie musiał poradzić sobie z dwoma systemami, w całym kodzie. 2) Zgodnie z zasadami, moim pomysłem było umieszczenie go w skrypcie widoku, czyli ostatniej zmiany, aby go zmodyfikować, zanim zostanie pokazany użytkownikowi. I może to słuszne, ale wydaje mi się, że nie zawsze jest to najlepsze rozwiązanie. (Po pierwsze, odrobinę komplikuje skrypt widoku, po drugie, muszę wykonać więcej pracy po stronie danych, aby bardziej podzielić rzeczy lub wykonać dodatkowe parsowanie, tak jak w moim przypadku powyżej). 3) Innym rozwiązaniem jest zrobienie tego gdzieś na etapie przygotowania danych przed widokiem, czyli gdzieś pośrodku, przed widokiem, ale za źródłem danych. Wydaje mi się to nieporządne i może to być powód, dla którego moja baza kodów jest teraz w takim bałaganie. Wydaje się, że nie ma najlepszego rozwiązania. Co ja robię? **Pytanie** Moim celem jest ustalenie struktury i miejsca umieszczenia kodu konwersji jednostek w systemie. Oprogramowanie, o którym mowa, jest systemem LAMP podobnym do MVC (Zend Framework 2). **Szczególny przykład** W tej chwili mam klasę, która w czasie tworzenia podała `id`, ma metodę `getValue()`, która zwraca `4 x 13/16" śrub`. W zależności od `id`, różne liczby mogą być tworzone, ale nadal są w calach. Należy zauważyć, że niektóre liczby są zapisywane za pomocą podziałki (`13/16"`), a niektóre używają notacji dziesiętnej (`0,8125"`). Jak mogę skonfigurować moje ramy, abym mógł wyświetlać takie wartości również w milimetrach?


title: Kiedy używać mixinów w Ruby?

text: Zastanawiam się, kiedy używać mixinów? Czytałem o nich. Wielu autorów porównuje je do interfejsów, klas abstrakcyjnych itp. Domieszki to moduły, które są wmieszane, a moduły są sposobem na grupowanie podobnych metod, stałych i klas. Widziałem przykłady tworzenia modułu dla funkcji matematycznych. Grupowanie i ponowne używanie takich funkcji ma sens, ale czy powinienem mieszać je tylko w klasie, jeśli mam do czynienia z sytuacją dziedziczenia? Czy powinienem je mieszać za każdym razem, gdy chcę ich użyć na zajęciach? Czy powinny być używane dokładnie tak, jak interfejsy w innych językach, czy są inne subtelności?


title: Czy komentarze zwiększą szansę na zwolnienie?

text: Od jakiegoś czasu mam to palące pytanie. Czy jeśli mam pracę i dobrze komentuję swój kod, tak aby każdy mógł teraz zrozumieć moją ciężką pracę, to czy uczyniłoby to mnie mniej niezastąpioną dla firmy? Z mojego doświadczenia wynika, że każde oddane przeze mnie zadanie domowe, które jest w pełni skomentowane, otrzymuje niższe oceny niż np. znajomy, który przesyła dość podobny kod bez komentarzy. Prawie tak, jakby komentarze pomogły w ustaleniu zadania. Zaobserwowałem to kilka razy w różnych klasach. Widziałem to nawet we własnych testach. Jedno pytanie skomentowałem kod i było to drobiazgowe, dopóki nie straciłem 2 punktów. Potem kolejne pytanie, którego nie byłem pewien i nie komentowałem, zdobyłem pełne punkty i testując kod w domu nie tylko się nie skompilował, ale nie rozwiązał problemu. Z drugiej strony lubię komentarze, pomaga mi to kodować, ale teraz, gdy mam pracę, mam ochotę przesłać kod bez komentarzy. Jakieś porady w tej sprawie? * * * Ponieważ wspomniano, że mogę pisać komentarze, które nie wnoszą pozytywnego wkładu; oto próbka czegoś, co właśnie zakodowałem: // Dezaktywuj wszystkich wrogów. foreach(Transformuj t w transformację) t.SendMessage("Dezaktywuj"); W tym przypadku uważam, że mój komentarz jest pomocny, ponieważ nie będzie jasne, że „Transform” jest w rzeczywistości „Wrogiem”, może to być naprawdę cokolwiek.


title: Czy głośne myślenie podczas rozmowy kwalifikacyjnej jest naprawdę najlepszą strategią?

text: W innym pytaniu, które ostatnio zadałem, na temat najlepszych praktyk związanych z tablicą, panował ogólny konsensus, że głośne myślenie podczas wymyślania odpowiedzi jest najlepszą strategią. Rzeczywiście, długie chwile ciszy są niezręczne. Jednak po ostatnich wywiadach zauważyłem, że jeśli moje głośne myślenie prowadzi do błędnych rozwiązań lub podąża niewłaściwą ścieżką, to po głębszej analizie, którą bym zauważył, ankieterzy mają tendencję do szybkiego wskakiwania i wskazywania problemów z moim podejściem, zwłaszcza jeśli przestanę zatrzymać się na minutę. Nie był to odosobniony przypadek i miał miejsce podczas więcej niż jednego wywiadu z więcej niż jednym ankieterem. Inna sprawa, że po rozmowie, w sprawie, którą absolutnie zbombardowałem, kiedy usiadłem i w milczeniu naszkicowałem problem na kartce papieru, dość szybko udało mi się naszkicować rozwiązanie. Głośne myślenie kończy się tym, że spędzam cykle mózgu na zastanawianiu się, jak to, co mówię, musi rejestrować się u ankietera, a ponadto pojawia się obawa, że rozpoznam, że poszedłem złą ścieżką i zaczynam od nowa po napisaniu czegoś na tablicy marnuje dużo czasu. Kiedy już zaczniesz jedną ścieżką i zdasz sobie sprawę, że napisałeś dużo śmieci, nie możesz tego cofnąć, podczas gdy gdybyś pomyślał o tym po cichu, osoba przeprowadzająca wywiad nie zauważyłaby bałaganu i byłoby szybciej ponieważ zapisanie złego pomysłu na tablicy zajmuje więcej czasu niż samo rozważenie złego pomysłu. Nie chcę chwil ciszy, ale jednocześnie mówienie zajmuje więcej czasu, prowadzi do samoświadomości i może prowadzić do interwencji ankietera w czymś, co sam mógłbym rozgryźć, mając trochę więcej czasu.


title: Jakie normy/API do monitorowania moich serwerów?

text: Mam kilkanaście aplikacji serwerowych zainstalowanych w intranetach moich klientów (mogą wysyłać żądania http przez Internet, ale nie mogą być wywoływane z zewnątrz). Są napisane w różnych technologiach, głównie java i Go. Chcę, aby regularnie przesyłali informacje o swoim stanie do centralnego serwera, który jest widoczny w Internecie. Niektóre z tych informacji są ogólne ( _czy jest włączone ?_ ), inne są specyficzne (na przykład rozmiar pamięci podręcznej w aplikacji). Głównym celem jest stworzenie małej strony internetowej, na której mógłbym błyskawicznie sprawdzić stan każdego serwera. A może później dodać jakieś powiadomienie w razie problemu. Oczywiście mogę to zrobić, pisząc po kilkadziesiąt linijek kodu z każdej strony (lub trochę więcej, jeśli umieszczę te dane w bazie danych), ale aby ułatwić przyszłą ewolucję, interesujące może być użycie niektórych istniejących norm lub bibliotek. Więc jakie są obecne bezpłatne i lekkie rozwiązania opensource, najlepiej bez centralnej konfiguracji, gdy dodam serwer? Wolę normę od biblioteki.


title: Czy książka "Efficient C++" byłaby teraz nieistotna z powodu ulepszeń kompilatora?

text: Planuję zakup tej książki, aby dowiedzieć się więcej o programowaniu w C++ w odniesieniu do szybkiego kodu. Jednak książka została opublikowana w 1999 roku i obawiam się, że większość z niej może być teraz nieistotna ze względu na optymalizacje wykonywane przez kompilatory. Czy ktoś mógłby mi doradzić? http://www.amazon.com/Efficient-C-Performance-Programming-Techniques/dp/0201379503/ref=cm_cr_pr_product_top edit: Tę książkę też znalazłem, choć też dość starą: http://www.amazon.com/Optimizing -C-Steve-Heller/dp/0139774300


title: Sprawdzanie "instanceof" zamiast wartości za pomocą instrukcji switch

text: Czy istnieje jakaś składnia (inna niż seria instrukcji if), która pozwala na użycie instrukcji switch w Javie do sprawdzenia, czy obiekt jest instancją klasy? Czyli coś takiego: switch (object) { case instanceof SecondObject: break; case instanceof ThirdObject: przerwa; } Uwaga na marginesie: Zdaję sobie sprawę, że jako wzorzec projektowy sprawdzanie instancji i podejmowanie na jej podstawie decyzji nie jest tak preferowane, jak używanie dziedziczenia. Aby nadać kontekst, dlaczego miałoby to być dla mnie przydatne, oto moja sytuacja: pracuję nad projektem, który obejmuje klienta/serwer kryonetu. Do komunikacji przez KryoNet przekazujesz obiekty, które serializuje za pomocą kryo. Wszystko, co zostanie dodane do obiektu, zwiększa rozmiar tych pakietów1, więc aby zminimalizować ruch w sieci, należy utrzymywać te obiekty tak lekkie, jak to tylko możliwe. Kiedy otrzymujesz pakiet, musisz wiedzieć, co z nim zrobić, więc ustalam to w oparciu o typ obiektu pakietu, którego instancją jest przekazany obiekt. To podejście jest takie samo podjęte w przykładach dołączonych do dystrybucji Kryonet. Chciałbym wyczyścić ohydną klasę, która przekłada te pakiety na działanie, i domyślę się, że instrukcja switch przynajmniej sprawi, że będzie wyglądała na umiarkowanie bardziej zorganizowaną. * * * 1Kiedy pisałem powyższe oświadczenie, miałem wątpliwości, czy to, co mówię, jest prawdziwe. Poniższa odpowiedź wydaje się nie zgadzać: > Metody nie dodają niczego do rozmiaru obiektu w czasie wykonywania. Kod metody > nie jest przesyłany i nic w metodach nie wymaga reprezentacji > w stanie obiektu. To nie jest dobry powód > wystąpienia testowania itp. Wydaje mi się, że prawdziwym problemem jest to, że nie wiem, co dzieje się pod maską, aby Kryo serializował obiekt i byłem zdenerwowany robieniem czegokolwiek, co zwiększyłoby przepustowość. Twoje odpowiedzi zainspirowały mnie do zrobienia tego z dziedziczeniem i dodania odpowiednich metod do obiektów. Więc dziękuję!


title: Czy jest to właściwe użycie słowa „wyliczyć”?

text: Czytam książkę, która ma sekcję o procesach. W tym zdaniu: > Następną metodą wyliczania procesów jest metoda `GetProcessById`. Ta metoda robi dokładnie to, co sugeruje jej nazwa: pobierze identyfikator procesu i zwróci informacje o nim, jeśli zostanie znalezione. To nie brzmi dobrze dla mnie. Słownik Google ma to jako definicję > Enumerate - Wzmianka (wiele rzeczy) jedna po drugiej - na przykład. „nie ma > miejsca na wyliczenie wszystkich jego dzieł”. Myślę o wyliczaniu właśnie w ten sposób, „wspominając”, ale w kontekście przechodzenia przez listę. Jeśli otrzymujesz coś przez ID, to nie brzmi jak „wyliczanie”, to brzmi jak „odzyskiwanie”. Czy się mylę? Czy powinienem poszerzyć moje poczucie „wyliczania”?


title: Czym różnią się przestrzenie tabel w DB2 od baz danych w MySQL lub MS SQL Server?

text: W DB2 wydaje się, że istnieje silna separacja między tym, czym jest _baza danych_, a tym, czym jest _przestrzeń tabel_. Gdzie tak jak w MySQL i MS SQL Server _tablespace_ i _database_ wydawały się być używane jako synonimy. Jakie są różnice, jeśli w ogóle?


title: Jak wpływa na szybkość strony?

text: Staram się stworzyć jednostronicową aplikację internetową. Zastanawiałem się, jak duże są wady korzystania z jQuery. Powiedziano mi, że to spowalnia działanie aplikacji, ale jak tu widziałem, na każde 500 kolejnych wyborów jest tylko 150 ms, co wydaje mi się niemożliwe do zauważenia przez użytkownika. Inni twierdzą, że przy każdym wyborze jQuery przeglądarka zapisuje obiekty jQuery w swojej pamięci podręcznej zamiast elementów DOM, co powoduje zwiększenie pamięci podręcznej, co skutkuje większym zużyciem pamięci, a tym samym spowolnieniem działania aplikacji. Czy to prawda? (Nie mam pojęcia jak działa cache przeglądarki.) Czy jQuery naprawdę spowalnia taką aplikację? (Mam na myśli to, czy użytkownik kiedykolwiek zauważy użycie tego frameworka, czy nie.)


title: Czy można rozpowszechniać program, którego kod źródłowy znajduje się pod Ms-PL wśród płacących klientów?

text: To, co chcę zrobić, to zapakować Notatnik XML (tak jak jest, bez modyfikacji) z instalacją naszego komercyjnego produktu. Zamiast mówić klientowi „przejdź do http://www.microsoft.com/en-us/download/details.aspx?id=7973 i pobierz Notatnik XML”. Ktoś, kto może zaoferować wgląd w to, jak wywnioskować legalność tego z licencji?


title: Czy witryna MSDN jest zgodna z konwencjami dotyczącymi dokumentacji dla platformy .NET, a jeśli tak, czy jest publicznie dostępna?

text: Przeglądając dokumentację MSDN dla .NET Framework Class Library (FCL) zawsze byłem zdumiony tym, jak **spójny** i w pełni udokumentowany. Jest stałym towarzyszem podczas tworzenia aplikacji .NET. Większość wątpliwości, które pojawiają się podczas korzystania z API, jest uwzględniona. Kontrast m.in. starsza dokumentacja Win32 jest uderzająca. Kilka przykładów: * Dokumentacja właściwości zawsze zaczyna się od _"Pobiera"_ lub _"Pobiera lub ustawia"_ w celu określenia akcesorów. * Parametry typu zaczynają się od: _"Typ ..."_. Czy firma Microsoft stosuje konwencję dotyczącą dokumentacji, która jest stosowana w przypadku FCL? Jeśli tak, to czy ta konwencja jest dla mnie publicznie dostępna?


title: Porady dotyczące zbliżania się do znaczącej rearanżacji/refaktoryzacji?

text: Pracuję nad aplikacją (projekt hobbystyczny, solowy programista, mały-średni rozmiar), a ostatnio znaczną jej część przeprojektowałem. Program już działa w obecnym stanie, ale zdecydowałem się na ponowne zaimplementowanie rzeczy, aby ulepszyć projekt OO. Mam zamiar wdrożyć ten nowy projekt poprzez refaktoryzację dużej części aplikacji. Rzecz w tym, że nie wiem od czego zacząć. Oczywiście, z natury przearanżowania, w momencie zmiany jednej części programu kilka innych części (przynajmniej tymczasowo) pęka. Dlatego trochę „przerażające” jest przearanżowanie czegoś w oprogramowaniu, które już działa. Proszę o radę lub kilka ogólnych wskazówek: jak podejść do znaczącej refaktoryzacji? Kiedy podchodzisz do zmiany aranżacji dużych części swojej aplikacji, od czego zacząć? Zwróć uwagę, że interesuje mnie tylko przeorganizowanie wysokopoziomowej struktury aplikacji. Nie mam zamiaru przepisywać lokalnych algorytmów.


title: Jak zaktualizować wyświetlacz podczas dużego zadania przetwarzania?

text: Mam aplikację ASP.NET C#, która musi wyłączyć i wykonać iterację w katalogu plików .xml i wykonać pewne przetwarzanie danych wewnątrz nich. Jest to dość łatwe, ale muszę wyświetlić wynik po przetworzeniu każdego pliku .xml, jak to zrobić? To, o co naprawdę pytam, to jak przetwarzać dużo danych w pętli, która musi zostać wyświetlona klientowi, nawet jeśli przetwarzanie serwera nie zostało w pełni zakończone. Czy to w ogóle możliwe? Mógłbym uruchomić duży proces w osobnym wątku i uruchomić limit czasu js do ogłaszania zwrotnego i zasadniczo odpytać proces, ale nie brzmi to dobrze i prawdopodobnie wymagałoby użycia zmiennych statycznych do utrzymania stanu. Czy słuszne byłoby użycie SessionState / ViewState / QueryString do utrwalenia stanu przetwarzanego pliku i całkowitego usunięcia pętli? Dlatego podzielić dużą pracę na osobne żądania?


title: Jak utrzymywać wspólną bibliotekę używaną przez różnych klientów?

text: Jestem częścią zespołu programistycznego. Pierwotnie było nas tylko 2 i dwie aplikacje. Aby ułatwić nam pracę, tworzymy zestaw bibliotek obsługujących takie rzeczy jak GUI, dostęp do baz danych, obliczenia, reguły biznesowe itp., dzięki czemu możemy je ponownie wykorzystać w naszych aplikacjach bez ich dwukrotnego wdrażania. Teraz zespół się powiększył, 6 osób i ~5 aplikacji (i rośnie). Aplikacje korzystają z tej samej biblioteki, co jest świetne, ponieważ nie musimy rozwijać i utrzymywać tej samej rzeczy więcej niż raz. Ja i drugi pierwszy gość opracowaliśmy i jesteśmy głównie odpowiedzialni za bibliotekę, ale inni ludzie mają dostęp do kodu i od czasu do czasu aktualizują go, aby naprawić błędy i dodać ulepszenia. Szybko jednak zauważamy, że im bardziej się rozwijamy i im więcej osób może modyfikować kod, istnieje ryzyko, że „ulepszenia”/„naprawy błędów”, które ktoś robi, mogą nieumyślnie zepsuć czyjąś aplikację, która zależy od starego zachowania. Z drugiej strony przydzielenie jednego faceta do obsługi bibliotek i upewnienia się, że modyfikacje niczego nie zepsują, jest niepraktyczne, ponieważ jest wiele aplikacji i prawdopodobnie wiele próśb o ulepszenia, a on też nie może być pewien wszystkiego. Jak zespoły zwykle radzą sobie w takiej sytuacji? Być może wprowadzając przepisy dotyczące dozwolonych modyfikacji? Definiowanie zachowań, których nie należy zmieniać? W Internecie jest wiele bibliotek używanych przez wiele osób, na przykład biblioteki typu open source/bezpłatne, takie jak Apache, Castle itp. W jaki sposób zapewniają, że zmiany nie złamią istniejących kodów klientów?


title: Czy istnieje formuła pozwalająca obliczyć całkowity czas wykonania sekwencyjnych procesów asynchronicznych?

text: Mam zestaw kroków, które muszą być uruchamiane sekwencyjnie na liście danych. Jednak każdy krok działa tylko na jednym kawałku danych na raz. Dzięki temu mogę wykonywać kroki asynchronicznie. Na przykład mam dwie części danych i dwa kroki. Kiedy pierwszy krok zakończy przetwarzanie pierwszego fragmentu danych, przekazuje go do kroku drugiego. Teraz krok pierwszy przetwarza drugą porcję danych, podczas gdy krok drugi przetwarza pierwszą porcję danych. I tak dalej i tak dalej, aż wszystkie dane zostaną przetworzone na każdym kroku. W przeciwieństwie do tego, pętla po liście elementów i wykonywanie każdego sekwencyjnie w kolejności zamienia się w równanie: total_time = (step1 + step2 + ... + stepN) * number_of_items Biorąc pod uwagę, że znam czas wykonania każdego kroku dla pojedynczego kawałka danych, a znam liczbę elementów do przetworzenia, **czy istnieje formuła, która poda mi całkowity czas wykonania asynchronicznego przetwarzania wszystkich elementów danych?** Napisałem program (patrz niżej), który symuluje ten proces . Nie jestem do końca pewien, czy oblicza to poprawnie, ale uważam, że jest blisko. To była moja próba rozwiązania problemu. Dołączam go tutaj, aby pokazać moje zrozumienie problemu, co może być błędne. korzystanie z Systemu; za pomocą System.Collections.Generic; za pomocą System.Linq; za pomocą System.Text; za pomocą System.IO; namespace ConsoleApplication1 { class Step : Queue<object> { public Step(int totalExecutionTime) { _totalExecutionTime = totalExecutionTime; CurrentExecutionTime = _totalExecutionTime; } tylko do odczytu int _totalExecutionTime; kolejka publiczna<obiekt> Następny krok { private get; ustawić; } public int CurrentExecutionTime { get; zestaw prywatny; } public void RunTick() { if (Liczba == 0) return; if (CurrentExecutionTime == 0) CurrentExecutionTime = _totalExecutionTime; BieżącyCzasWykonania--; if (CurrentExecutionTime == 0 && NextStep != null) NextStep.Enqueue(Dequeue()); } } class Program { statyczny void Main(string[] args) { int totalItems = 10; int[] stepLengths = new int[] { 1,2,5,2,2 }; if (File.Exists("output.txt")) File.Delete("output.txt"); WriteLine("ASYNC: {0}", TotalTime(totalItems, stepLengths)); WriteLine("SEKWENCJA: {0}", stepLengths.Sum() * totalItems); Console.WriteLine("GOTOWE"); Konsola.CzytajLinię(); } static int TotalTime2(int totalItems, int[] stepLengths) { throw new NotImplementedException(); } private static int TotalTime(int totalItems, int[] stepLengths) { var steps = new List<Step>(); Krok prevStep = null; foreach(var stepLength in stepLengths) { var step = new Step(stepLength); kroki.Dodaj(krok); if (prevStep != null) prevStep.NextStep = krok; poprzedniKrok = krok; } var first = steps.First(); for(int i = 0; i < totalItems; i++) { first.Enqueue(new object()); } var last = steps.Last(); var revSteps = steps.Reverse<Step>().ToList(); var totalTime = 0; do { Display(kroki, całkowityCzas); revSteps.ForEach(s => s.RunTick()); całkowityCzas++; } while (last.Count < totalItems); if (last.CurrentExecutionTime > 0) { do { Display(steps, totalTime); revSteps.ForEach(s => s.RunTick()); całkowityCzas++; } while (last.CurrentExecutionTime > 0); } Wyświetlacz(kroki, całkowityCzas); zwróć sumęCzas; } static void Display(List<Step> steps, int totalTime) { Write("["); steps.ForEach(s => Write("{0},", s.CurrentExecutionTime.ToString().PadLeft(2))); WriteLine("]"); Pisać("["); steps.ForEach(s => Write("{0},", s.Count.ToString().PadLeft(2))); WriteLine("] {0}", totalTime.ToString().PadLeft(5)); WriteLine(); } static void Write(string fmt, params object[] args) { Console.Write(fmt, args); using (var w = new StreamWriter("output.txt", true)) { w.Write(fmt, args); } } static void WriteLine(string fmt, params object[] args) { Console.WriteLine(fmt, args); using (var w = new StreamWriter("output.txt", true)) { w.WriteLine(fmt, args); } } static void WriteLine() { Console.WriteLine(); using (var w = new StreamWriter("output.txt", true)) { w.WriteLine(); } } } }


title: Python - definiowanie metody wyjścia przed importem

text: To niczego nie łamie (z mojego doświadczenia), ale wiele rzeczy „nie psuje niczego” i nadal jest błędnych. #! /usr/bin/env python """Krótki opis tego modułu.""" def preferowana_metoda_wyjścia(*args): #kod do wyjścia zgodnie z potrzebami spróbuj: import foo import bar import jaj z wyjątkiem ImportError jako e: #code kod kod preferowana_metoda_wyjścia (e) Tak więc jasne zdefiniowanie zachowania programu przy wyjściu, a następnie użycie go podczas procesu `importu` nie może być zbyt straszne, prawda? Jest to jednak sprzeczne z często cytowanym PEP 8, który stwierdza, że moduły powinny być bezwzględnie importowane przed cokolwiek globalnego. Wygląda na to, że propozycja nie jest ryzykowna, ale zawsze jest coś takiego: #! /usr/bin/env python """Opis modułu""" def exit_of_choice(*args): #code kod kodu sys.exit(0) try: import sys import other_things poza ImportError as e: exit_of_choice(e) Oprócz pisanie kodu, który nigdy nie musi tego robić, ponieważ jest doskonały i nigdy niczego nie zawodzi, czy istnieje powód poza PEP 8 i „inni ludzie Pythona będą się na ciebie gniewać”, aby tego nie robić? (cóż, mniej przejmuję się tym drugim - mimo że `sys` zwykle nie zawodzi, nadal nienawidzę tego z zasady)


title: Co jest bardziej efektywne w kodowaniu? Zmniejszenie linii kodu i wykonanie kodu?

text: Mam tę wątpliwość od wielu lat. Piszę trochę kodu, aby osiągnąć pewną funkcjonalność. Na przykład piszę 20 linijek kodu, aby osiągnąć funkcjonalność, a mój współpracownik pisze kod dla tej samej funkcjonalności za pomocą zaledwie 5 linijek. Ponieważ użył instrukcji zapętlenia, aby to osiągnąć, ale ten kod zostanie wykonany około 30 do 50 razy. Więc jaki jest najlepszy sposób kodowania? Zgodnie z moją wiedzą zawsze staram się maksymalnie skrócić długość kodowania.


title: Aby załadować lub nie wczytać danych do testów jednostkowych z plików zewnętrznych

text: Podczas testów jednostkowych często zastanawiam się, ile danych dostarczam i oczekuję od moich testowanych jednostek, powinienem uwzględnić w rzeczywistych plikach testowych. Kompromis, z którym ciągle się zmagam, to: * Jeśli duża część testu (w ilości kodu) składa się z danych wejściowych i wyjściowych, wydaje się, że trudno jest faktycznie odczytać test, ale mogę łatwo zobaczyć rzeczywiste dane wejściowe i wyjściowe. * Jeśli ładuję dane testowe z plików, mogę łatwo przetestować kilka odmian możliwych danych wejściowych, łatwo ponownie wykorzystać dane testowe do wielu testów, ale muszę zostawić kod źródłowy, aby przejrzeć inny plik, aby zobaczyć, jakie dokładnie dane wejściowe są. Czy któryś z nich jest antywzorcem?


title: Tworzenie konstruktora wyrażeń regularnych

text: Jestem początkującym programistą, aw szczególności tworzeniem stron internetowych. Szczególnie słabo radzę sobie z wyrażeniami regularnymi. Ostatnio brałem udział w budowaniu kilku wtyczek cPanel (Perl-CGI) i wtedy zdałem sobie sprawę, jak zły jestem w regex. W rezultacie zdecydowałem się zbudować internetowy kreator regexów - pomoże mi to nauczyć się regexów i pomoże innym zmagającym się z regexem. Sprawdziłem GSkinner, Rubular i kilka innych, takich jak regexpal. Wydawało się to trochę trudne w użyciu, dlatego pomyślałem o napisaniu kolejnego. Nie wiem, które narzędzie najlepiej nadaje się do pracy. czy powinienem to napisać w Perlu czy Pythonie? Mój poziom umiejętności w obu tych językach jest od początkującego do średniozaawansowanego. Jaki byłby dobry punkt wyjścia - budowanie go dla CLI lub dla przeglądarki? Planuję uzyskać ciąg znaków jako dane wejściowe, zapytać, czy użytkownik chce wyszukiwać, czy wyszukiwać i zastępować, wprowadzić ciąg wyszukiwania (i ciąg zastępujący, jeśli ma to zastosowanie), a następnie wygenerować wyrażenie regularne. Czy to byłaby właściwa droga?


title: Pojęcia AOP wyjaśnione dla manekina

text: Uczę się programowania zorientowanego na aspekty i mam problemy ze zrozumieniem pojęć. Nie jestem złym programistą, ale mój angielski jest zły i nie rozumiem w pełni definicji. Czy ktoś może wyjaśnić koncepcje AOP dla manekinów: punkt łączenia, cięcie punktowe, tkanie itp. Na przykład: **Aspekt: modularyzacja problemu, który przecina wiele klas.** Co to oznacza? Dziękuję Ci!


title: Jakie języki skryptowe można osadzić w HTML?

text: Większość języków skryptowych (takich jak Pythong, Perl itp.) generuje cały plik HTML. Jednak kod PHP można osadzić w kodach html. PHP będzie przetwarzać tylko kod pomiędzy znacznikami `<?php ?>` i ignoruje inne linie. Jakie inne języki skryptowe są dostępne z możliwością osadzania w HTML?


title: Projektowanie API biblioteki C++

text: Szukam dobrego zasobu do nauki dobrego projektowania API dla bibliotek C++, patrzenia na udostępnione obiekty/dll itp. Istnieje wiele zasobów dotyczących pisania ładnych interfejsów API, ładnych klas, szablonów i tak dalej na poziomie źródłowym, ale prawie nic na temat łączenie rzeczy we współdzielonych bibliotekach i plikach wykonywalnych. Książki takie jak Large-Scale C++ Software Design autorstwa Johna Lakosa są interesujące, ale bardzo przestarzałe. To czego szukam to porady np. dotyczące obsługi szablonów. Z szablonami w moim API często kończę z kodem biblioteki w moim pliku wykonywalnym (lub innej bibliotece), więc jeśli naprawię tam błąd, nie mogę po prostu wdrożyć nowej biblioteki, ale muszę ponownie skompilować i rozprowadzić wszystkich klientów tego kodu. (i tak, znam pewne rozwiązania, takie jak próba tworzenia instancji przynajmniej najczęstszych wersji w bibliotece itp.) Szukam również innych zastrzeżeń i rzeczy, o których warto pamiętać, aby zachować zgodność binarną podczas pracy nad bibliotekami C++. Czy istnieje dobra strona internetowa lub książka o takich rzeczach?


title: Jak podzielić się i zaplanować osobisty projekt programistyczny?

text: Właśnie rozpocząłem pracę programistyczną, w której stosuję moją wiedzę „Jak kodować” do tego, czego uczę się „Jak programować” (są różne!). W ramach tego uczono mnie, jak przechwytywać wymagania klientów przed rozpoczęciem nowego projektu. Ale... **Jak mam to zrobić dla mglistego osobistego projektu?** Mówię mglisty, ponieważ często znajduję się w połowie programowania czegoś, chcę rozszerzyć to, co zrobi mój program, lub zmienić wynik. W końcu jestem zaplątany w kod i muszę zrestartować. Może to być frustrujące i zniechęcające. I odwrotnie, mając stałe zadanie i stałe wymagania, znacznie łatwiej jest się zagłębić i zrobić to. W pracy mógłbym usłyszeć "Dzisiaj/W tym tygodniu musisz dodać XYZ do programu 1" To jest łatwe do zrobienia. W domu (dla zabawy) chcę zrobić, powiedzmy, program, który tworzy dowolne listy. To bardzo ogólne zadanie. Jak mam zacząć od tego? Nie potrzebuję go do niczego, ale chcę, żeby coś zrobił. Jak więc zaplanować osobisty projekt programistyczny? ### Powiązane: Co zaplanować przed rozpoczęciem tworzenia projektu?


title: Konwencje nazewnictwa zmiennych?

text: Właśnie zacząłem używać ReSharpera (dla C#) i podoba mi się jego wyszukiwarka zapachów kodu, pokazuje mi kilka rzeczy dotyczących mojego pisania, które chciałem naprawić dawno temu (głównie konwencje nazewnictwa zmiennych). Zmusiło mnie to do ponownego rozważenia niektórych moich konwencji nazewnictwa metod i zmiennych instancji. ReSharper sugeruje, aby zmienna instancji była małymi literami wielbłąda i zaczynała się od podkreślenia. Przez chwilę chciałem, aby wszystkie moje zmienne lokalne miały mniejsze litery wielbłąda, ale czy podkreślenie jest konieczne? Czy uważasz to za wygodne? Nie podoba mi się ta konwencja, ale też jeszcze jej nie próbowałem, co o niej sądzisz? Drugą rzeczą, która skłoniła mnie do ponownej oceny, są moje konwencje nazewnictwa dla obsługi zdarzeń GUI. Zwykle używam standardu VS ControlName_Action, a moje kontrolki zwykle używają notacji węgierskiej (jako przyrostka, aby pomóc wyjaśnić w kodzie, co jest widoczne dla użytkownika, a co nie, gdy mam do czynienia ze zmienną o podobnej nazwie), więc kończę z OK_btn_Click ( ), jaka jest Twoja opinia na ten temat? Czy powinienem poddać się konwencji ReSharper, czy są inne równie ważne opcje?


title: Jaka jest najlepsza konfiguracja dla maszyny deweloperskiej (gdy masz wielu klientów)?

text: Mam swój komputer programistyczny (laptop, ponieważ często odwiedzam klienta) skonfigurowany w następujący sposób: 1. Windows 7 x64 - to świetny system operacyjny, a wersja 64-bitowa pozwala mi włożyć dużo pamięci RAM 2.8 GB RAM 3. VMWare - kiedyś używałem Virtual PC, ale VM Ware ma tak wiele funkcji, które wolę, jak obsługa USB itp. Programuję głównie w .NET i konfiguruję środowisko programistyczne w następujący sposób: 1. Bardzo mało ( jeśli w ogóle) narzędzia programistyczne na hoście. Przeważnie mam po prostu Office, Photoshopa itp. rzeczy, które są niezależne od rzeczywistego rozwoju 2. Mam inną maszynę wirtualną dla każdego klienta. To pozwala mi skonfigurować maszynę wirtualną do ich środowiska, aw rzeczywistości mam kilku klientów, w których moja maszyna wirtualna jest faktycznie dołączona do ich domeny. Maszyna wirtualna każdego klienta działa _na własnym dysku zewnętrznym_! Umieszczenie maszyny wirtualnej na jej własnym dysku sprawia, że twoja maszyna wirtualna działa znacznie szybciej. Używam dysków twardych do laptopów w małych obudowach dysków, które bardzo łatwo włożyć do torby na laptopa, a każdy dysk ma naklejkę z nazwiskiem klienta, dzięki czemu mogę łatwo pobrać odpowiedni dysk zewnętrzny. Zazwyczaj przydzielam około 3,5 - 4 GB pamięci RAM na każdą maszynę wirtualną. 3. Na maszynie wirtualnej mam wszystkie narzędzia potrzebne do pracy z tym konkretnym klientem, w tym oprogramowanie VPN, narzędzia programistyczne (SQL Server, VS) itp. 4. Mam kilka maszyn wirtualnych, które są „niezależne od klienta” i te uruchom oprogramowanie serwerowe (Wink2k, Win2k3, Win2k8) z IIS itp. do testowania wdrożenia itp. 5. Mam skonfigurowane GoToMyPC, aby móc uzyskać dostęp do laptopa ze zdalnej lokalizacji w ekstremalnych sytuacjach awaryjnych. W przeszłości byłem konfigurowany inaczej, ze środowiskiem programistycznym ustawionym na mocnym serwerze, na którym wszystko działa, i po prostu korzystam z protokołu RDP, więc laptop nie musi być tak solidny (w zasadzie tylko maluje ekran) i Mam dostęp z dowolnego miejsca. Są w tym plusy i minusy, przede wszystkim to, że czasami lubię się rozwijać, gdy nie mogę połączyć się z internetem, a mój rozwój jest utrudniony za każdym razem, gdy moje łącze internetowe jest wolne lub opóźnione. Jak konfigurujesz swoją maszynę programistyczną? Możesz to zrobić w dowolnym kierunku. . . **Uwaga:** Jedyne, co bym zmienił, to więcej pamięci RAM i kilka dysków twardych w moim laptopie, dzięki czemu nie muszę nosić ze sobą tylu zewnętrznych dysków twardych.


title: Czy jest jakiś logiczny powód do automatycznego generowania dokumentacji kodu?

text: Automatyczne generowanie dokumentacji można wykonać za pomocą różnych narzędzi, a GhostDoc jest jednym z bardziej znanych. Jednak z definicji wszystko, co generuje, jest zbędne. Przygląda się nazwom metod, klas itp. i wyświetla angielski, który _może_ wyjaśniać je bardziej szczegółowo. W najlepszym przypadku robi to, co czytelnik mógłby już zrobić w swojej głowie (przykłady zaczerpnięte stąd): /// <summary> /// Inicjuje nową instancję klasy <see cref="Person"/>. /// </summary> public Person() ... W najgorszym przypadku może to faktycznie skończyć się generowaniem dziwacznej dokumentacji, która faktycznie wprowadza w błąd w próbach heurystycznego odgadnięcia znaczenia nazw: /// <summary> // / Wzbogaca zaznaczony tekst. /// </summary> /// <param name="richTextBox">Sformatowane pole tekstowe.</param> private void RichTextSelection_Changed(System.Windows.Controls.RichTextBox richTextBox) ... Wygląda na to, że postawa z GhostDoc jest: „z natury lepiej jest mieć _jakąś_ formalną dokumentację XML”, ale skoro ta dokumentacja jest w 100% nadmiarowa, dlaczego? Czy w najlepszym wypadku nie jest to po prostu marnowanie mnóstwa miejsca? W moim miejscu pracy musimy wszystko dokumentować i prawie zawsze za pomocą automatycznie generowanych dokumentów GhostDoc. Czy to robisz i czy są jakieś racjonalne powody, aby po prostu nie zostawiać kodu nieudokumentowanego, jeśli nie zamierzasz sam pisać dokumentacji?


title: Jak nie zapomnieć o nowych i ciekawych informacjach

text: Chodzi o to, że czytam dużo rzeczy na przestrzeni czasu, bo to jest ciekawe i lubię je znać, a po drugie będzie to pomocne w moich przyszłych rozmowach kwalifikacyjnych. Na przykład czytałem o strukturach danych: asocjacja, agregacja i kompozycja; około 2 miesiące temu z dużym zainteresowaniem i myślałem, że mam to wszystko, ale ciężko mi było przypomnieć sobie informacje z ostatniej rozmowy o pracę. Jak radzicie sobie z tymi rzeczami? Jak sprawić, by moje czytanie miało sens, nie martwiąc się, że w przyszłości o nim zapomnę.


title: Jak przekonać innych programistów, aby CHCĘ dodawać komentarze do zatwierdzeń kodu źródłowego?

text: Wiem, że Subversion (którego używamy w pracy) można skonfigurować tak, aby wymagało komentarzy przy zatwierdzeniach, jednak nie jestem w stanie po prostu to włączyć. Wiem, że _mój_ powód komentowania moich zatwierdzeń jest taki, że jest to przydatne, chociażby jako jogger pamięci, aby szybko zrozumieć powód zatwierdzenia. Jednak wydaje się, że to nie wystarczy, aby zwalczyć dwie odpowiedzi, które zawsze otrzymuję: 1. Trwa to zbyt długo i chcę po prostu przenieść moje zmiany do repozytorium. 2. Wystarczy spojrzeć na różnice. Pokazuję im nawet wartość prostego wprowadzenia identyfikatora wydania JIRA i tego, jak automatycznie jest on powiązany z problemem, ale nadal nie ma z nimi kości. Najgorsze jest to, że osoba, która _może_ wykonać połączenie, jest w tym samym obozie: nie chce zawracać sobie głowy i nie ma nic przeciwko przeglądaniu różnic. Wiem, że to słuszne, ale jak sprawić, by zobaczyli światło? Nawet jeśli nie mogę przekonać kolegów programistów, jak mogę przekonać kierownictwo, że jest to właściwe dla firmy?


title: Automatyczna aktualizacja aplikacji hostowanej na wielu serwerach w chmurze

text: Pracuję nad aplikacją, która będzie działać na wielu instancjach Amazon EC2. Chcę włączyć funkcję automatycznej aktualizacji do mojej aplikacji. Aktualizator powinien zaktualizować wszystkie instancje Ec2. Ponadto istnieje centralny serwer, który zarządza tworzeniem/kończeniem instancji EC2 zgodnie z obciążeniem. Serwer centralny tworzy nową instancję EC2 ze wstępnie skonfigurowanego niestandardowego AMI (niestandardowy obraz z preinstalowaną naszą aplikacją). Ponadto, gdy nastąpi aktualizacja, wstępnie skonfigurowany AMI również musi zostać zaktualizowany, w przeciwnym razie utworzyłyby się nowe instancje, które nie są aktualizowane. Czy serwer centralny powinien powiadomić wszystkie instancje ec2 o aktualizacji, a następnie instancje same się aktualizują? A może aplikacja na instancji Ec2 powinna mieć sprawdzanie, czy okresowo się aktualizuje? W jaki sposób należy zaktualizować niestandardowy AMI Amazon? Czy należy z niego utworzyć nową instancję, zaktualizować, a następnie ponownie utworzyć nowy AMI, a następnie z tego AMI utworzyć nowe obrazy? Jaki jest najlepszy sposób na włączenie funkcji automatycznej aktualizacji dla tej architektury? Serwer centralny jest napisany w Javie, a aplikacja działająca w chmurze jest napisana w C++. Czy jest dostępny dobry framework, który można wykorzystać w tej architekturze? Daj mi znać, czego może mi brakować w projekcie i jak pomogłoby mi mieć ładną, rozszerzalną i bezpieczną w razie awarii architekturę automatycznej aktualizacji. Dziękuję


title: Czy wyświetlanie pełnych nazwisk deweloperów na ekranie powitalnym lub w oknie dialogowym nadal jest szeroko rozpowszechnioną i pożądaną praktyką?

text: Podobnie jak w napisach końcowych filmów, niektórzy dostawcy oprogramowania wymieniają **pełne nazwy zespołu**, który pracował nad oprogramowaniem, którego używasz. Zazwyczaj są one wyświetlane na **ekranie powitalnym** (Photoshop) ![Adobe Photoshop Vintage Splash Screen](http://i.stack.imgur.com/qq1U8.png) ... lub w oknie informacyjnym (Traktor ). ![Traktor Famous DJ Software About Box](http://i.stack.imgur.com/ICNPI.png) W demoscenach jest to obowiązkowa praktyka, podobnie jak w przemyśle filmowym. > Jak widzisz to we własnym oprogramowaniu? Czy jest jakiś powód, dla którego nie > tego? Czy jest jakiś powód, by zachęcać firmy do tego?


title: Kiedy baza danych w chmurze jest dla mnie odpowiednia?

text: Niektórzy twierdzą, że DBaaS (baza danych jako usługa) – czyli baza danych w chmurze – nie nadaje się do Business Intelligence (BI), analityki (OLAP) lub archiwizacji. Czy to prawda? Mówiąc ogólnie, kiedy DBaaS jest najskuteczniejszym wyborem technicznym?


title: Wydajna konstrukcja „Obiekt z wagami”

text: Muszę znaleźć „wydajną” strukturę danych / zestaw algorytmów, aby wykonać następujące czynności: Mam listę obiektów. Muszę przypisywać im wagi, a później zwiększać lub zmniejszać te wagi. Na przykład: Mamy hashmapy `{o1}, {o2}, {o3}`. `{o}`'s nie mają żadnej szczególnej struktury, tylko losowy json. Szukam sposobu na powiedzenie: Zwiększ wagę o1 o 1. Zwiększ wagę o2 o 1. Zwiększ wagę o1 o 1. Teraz podaj mi wyniki posortowane według ich wagi. Używam Pythona. Do tej pory próbowałem używać normalnego hashmapy do ich przechowywania, ale problem polega na tym, że nie mogę po prostu haszować `{o}`. Myślałem o mieszaniu wskaźnika `{o}` w pamięci, ale wygląda na to, że nie mam do niego dostępu w Pythonie.


title: Jak poprawnie tworzyć obiekty warstwy biznesowej z parametrów wejściowych?

text: **Opis aplikacji** Mam aplikację o następującej strukturze, uproszczona: Żądanie HTTP ↓ +-----------------+ | Analizator żądań | +-----------------+ ↓ Obiekt żądania warstwy biznesowej **Kod problemu** Warstwa analizatora żądań akceptuje parametry wejściowe, weryfikuje je i buduje obiekt żądania warstwy biznesowej. Kod wygląda tak: public function processMyRequest() { validationForm = Form::create() .addIntegerValidator('order_id') .addStringValidator('external_id') ; if (validationForm.hasErrors()) { wyrzuć nowy wyjątek(); } return BusinessRulessObject::create() .setOrderId(validationForm.getParameter('order_id')) .setExternalId(validationForm.getParameter('external_id')) ; } **Niektóre wymagania wstępne** Formularz może być ogromny, podobnie jak obiekt warstwy biznesowej. Niestety klasa Form należy do frameworka i jest ostateczna, więc nie mogę dziedziczyć konkretnego formularza z bazowego, w którym mógłbym określić wszystkie walidatory. Uzgodniono rozwiązanie polegające na tworzeniu tych formularzy za pomocą klas Factory (nie jest to jednak szablon Factory, ponieważ nie jest tutaj potrzebny: żadnych mocków w testach, żadnych polimorfizmów w kodzie klienta). Klasa RequestParser może obsłużyć kilka żądań. **Lepsza wersja** Więc teraz kod wygląda tak: public function processMyRequest() { validationForm = FormFactory.createSomeForm(); if (validationForm.hasErrors()) { wyrzuć nowy wyjątek(); } return BusinessRulessObject::create() .setOrderId(validationForm.getParameter('order_id')) .setExternalId(validationForm.getParameter('external_id')) ; } **Jak mogę to ulepszyć? Wersja 1** Ale jak mam stworzyć swój obiekt? Czy powinienem mieć jakąś fabrykę, która tworzy to z formy? Czyli funkcja public processMyRequest() { ... return BusinessRulessObjectFactory::createMyConcreteObject(form); } **Wersja 2** Czy klasa BusinessRulessObject powinna mieć jakąś metodę typu `createFromForm()`, tj. funkcję publiczną processMyRequest() { ... return BusinessRulessObject::createMyConcreteObject(form); } **Wersja 3** Albo wystarczy metoda RequestParser `createFromForm()`, czyli funkcja publiczna processMyRequest() { ... return createMyConcreteObject(form); } private function createMyConcreteObject(Form validationForm) { return BusinessRulessObject::create() .setOrderId(validationForm.getParameter('order_id')) .setExternalId(validationForm.getParameter('external_id')) ; } **Więc?...** Myślę, że powinienem wybrać pomiędzy pierwszą a drugą opcją, ale jakie aspekty powinienem wziąć pod uwagę przy wyborze sposobu tworzenia obiektu? A właściwie, jaki sposób jest lepszy w moim przypadku?


title: Czy programiści Java muszą nauczyć się programowania w C/System?

text: Czytałem bloga (tylko w języku chińskim), w którym autor wyśmiewał się z programistów Javy, którzy niewiele wiedzą o C i programowaniu systemowym. Autor zilustrował, w jaki sposób odnalazł głęboki powód wyjątku Java NIO Selector, korzystając ze swojej wiedzy o C oraz API systemu Windows/Linux. Wyjątek IOException jest generowany z komunikatem „Nie można ustanowić połączenia zwrotnego” podczas zbyt wielu wywołań java.nio.channels.Selector.open(). Odkrył, że dla każdego otwarcia Selectora w systemie Windows tworzona była para połączeń TCP, a w systemie Linux — para potoków. W innym blogu wspomniał również, że kompilator GNU Java był sprytną implementacją niż Sun Java. To, co powiedział, wydaje mi się zupełnie nowe i interesujące. Ale nie jestem pewien, czy znajomość C/system jest jedynym sposobem na szybkie rozwiązanie takich problemów. Czy naprawdę warto poświęcać dużo czasu na naukę tej wiedzy dla programistów Java?


title: Tworzenie serwera websocket w systemie Linux

text: Chcę stworzyć serwer websocket i znalazłem tutaj świetny artykuł. Jednak C# wypisze plik exe. Chciałbym, żeby działał na Linuksie. To, co chcę zrobić, to połączyć się z serwerem, a kiedy coś się stanie w systemie plików, aby pobrać wiadomość z serwera (używając `FileSystemWatcher` w Windows lub demona `iNotify` w linux), a program uruchomi odpowiedni kod. Jak więc taki demon dla Linuksa (w C#) lub w jakikolwiek inny sposób, aby to osiągnąć?


title: Przepływ przesyłek magazynowych

text: Nie jestem pewien, czy to właściwe miejsce, aby zadać to pytanie, ale oto idzie.. Obecnie mam potrzebę dodania obsługi transakcji komisowych w naszym module inwentaryzacyjnym. Mam bardzo ograniczone pojęcie o tym, co oznacza przesyłka w magazynie, tj. > Klient otrzymuje zapasy/produkty od Sprzedawcy bez faktycznego ich kupowania, > produkt po prostu znajduje się w magazynie Klienta i nadal jest własnością > Sprzedawcy. Dopiero gdy Klient faktycznie kupi akcje, następuje przeniesienie własności > akcji. Problem w tym, że nie wyobrażam sobie, jak te dane zostaną zaprezentowane zarówno Klientowi, jak i Sprzedawcy. Wiem, że musiałbym odjąć zapasy z zapasów Sprzedającego, gdy Klient zgłosi prośbę o przejęcie zapasów przez przesyłkę, ale co z „własnością” zapasów/produktów? Czy to oznacza, że musiałbym utworzyć kolejną kolumnę w mojej tabeli, aby stwierdzić, że dla każdego inwentarza należy do kogo? Gdziekolwiek mogę uzyskać informacje o tym, jak powinienem opracować taki moduł inwentaryzacji? Dziękuję.


title: Powielanie kodu (backend i javascript - nokaut)

text: W naszym zespole mamy nowego programistę. Wydaje się być mądrym facetem (właśnie wszedł, więc nie mogę naprawdę oceniać). Zaczął od wdrożenia kilku drobnych ulepszeń w projekcie (aplikacja webowa MVC3 wykorzystująca Javascript z jQuery i Knockout). Powiedzmy, że mamy dwie wartości: A - dość skomplikowane obliczenie C - stała B = A + C Na ekranie jest wartość B i użytkownik może ją zmienić (normalny texbox). Kiedy zmienia się B, zmienia się również A, ponieważ C jest stałe. Więc istnieje liniowa zależność między A i B. Teraz wszystkie obliczenia są wykonywane na zapleczu, ale musimy ponownie obliczyć A, gdy użytkownik zmieni B (w JavaScript użyłbym nokautu). Myślałem o przechowywaniu starych A i B, a gdy B zmieni się o 10, wiemy, że nowe A będzie `stare A + 10`. Mówi, że to brudne, bo to powielanie kodu (wykorzystujemy fakt, że są one zależne i według niego powinny być tylko w jednym miejscu w naszej aplikacji). Rozumiem, że to nie jest idealne, ale wysyłanie żądania AJAX po każdym naciśnięciu klawisza wydaje się trochę za dużo. To naprawdę drobiazg i nie publikowałbym, gdybyśmy nie odbyli długiej dyskusji na ten temat. Jak radzisz sobie z takimi problemami? Wyobrażam sobie również, że użycie knockout wiąże się z wieloma obliczeniami po stronie klienta, co bardzo często prowadzi do powielania tych samych obliczeń z zaplecza. Czy ktoś ma linki do jakichś artykułów/myśli na ten temat?


title: Zastąpienie klas statycznych stanem globalnym serią POJO, zaczyna wydawać się antywzorcem

text: Próbuję przerobić trochę kodu, a jedną z głównych zmian jest usunięcie (nad)używania klas statycznych w celu nadania globalnego stanu. Próbowałem podzielić niektóre funkcje "stanu globalnego" z POJO, które mogą być przekazywane. Ale im dalej w dół króliczej nory, tym bardziej i bardziej czuję, że to Anty-Wzór. Czy trzymanie stanu w POJO, a następnie przekazywanie ich w złej formie? Oznacza to, że schemat moich metod często wygląda tak: public MyPojo makeReport(int myInt, String pathToInput, MyPojo myPojo){ ... if(myPojo.whatKindOfReport()==Reports.reportTypes){ ... } ... mojePojo.isWritingReportToFileSuccessful(true); .... zwróć myPojo; } Gdzie "stan" POJO jest ustawiany z GUI, z którym użytkownik współdziała. Na przykład z polami wyboru dla typów raportów itp. Ale to blokuje inne typy zwracanych i wydaje się zbyt skomplikowane. * * * Wybrałem to podejście, ponieważ aplikacja ma kilka 'ścieżek' (zobacz `whatAmIDoing`), które użytkownik może obrać podczas jej uruchamiania, z których każda ma kilka etapów. To, jakie opcje ma użytkownik, zależy w dużej mierze od wybranej ścieżki, a następnie od wyniku tego wyboru (zwykle sukces lub porażka, patrz `myPojo.isSomethingSuccessful(true)`). Próbuję zakodować te informacje w POJO, a nie w Global State Class. Czy to jest antywzór? Jak mogę to obejść? * * * Edytuj: Myślę, że to, czego szukam, to _coś_ w rodzaju Łańcucha Odpowiedzialności. Po zapoznaniu się z tą odpowiedzią nie jestem pewien.


title: Jakie były „podstawowe” pakiety API Javy 1.0?

text: Czytając o sprawie Google przeciwko Oracle, natknąłem się na te pytania (najwyraźniej od przewodniczącego sędziego) > ... > Czy zgadza się, że co najmniej od 1996 r. jest to prawdą? > > Poniżej przedstawiono rdzeń interfejsu programowania aplikacji Java: > java.lang, java.util i java.io. > > Czy język programowania Java odwołuje się lub wymaga jakiejkolwiek metody, klasy lub pakietu poza powyższymi trzema? > ... źródło: Groklaw Oczywiście istnieje wiele konsekwencji prawnych, Google i Oracle prawdopodobnie nie zgadzają się w niektórych punktach, a **nie obchodzi mnie to**. Pozostaw prawo prawnikom. Podejrzewam jednak, że jest tu ciekawa historia. Moje pytanie brzmi (jako ktoś, kto pierwszy wykonał jakiekolwiek kodowanie w Javie około 2001 roku w wersji 1.3), w wersji 1.0 Javy było wszystko wymagane poza `java.lang`, `java.util` i `java.io` do skompilowania poprawny program Java? Jako przykład (używając C# 5.0), słowo kluczowe `await` jest zależne od ~~`Task<T>`~~ `GetAwaiter()` (między innymi). Kompilator nie mógłby funkcjonować zgodnie ze specyfikacją bez tej klasy. Podobnie, czy istniały jakieś podstawowe funkcje środowiska wykonawczego (takie jak ClassLoader*), które były zależne od innych pakietów? Przyznam, że pytam z ciekawości, dokładnie to, co jest niezbędne dla minimalnie żywotnej Javy (język, ignorując wszystkie prawne elementy wokół niego), jest interesujące. *Zakładam, że ClassLoader był nawet funkcją w Javie 1.0, jest częścią specyfikacji w 7.0 i przypuszczalnie wielu wcześniejszych wersjach.


title: Co to jest „warstwa abstrakcyjna”?

text: Potrzebuję bardzo prostego wyjaśnienia, ponieważ nie jestem zawodowym programistą. Terminologię "warstwa abstrakcyjna" znalazłem czytając dokumentację rozszerzenia mysqli, gdzie jest opisana różnica między rozszerzeniami mysql, mysqli i PDO w PHP. Artykuł jest taki, to tam po raz pierwszy spotkałem się z „warstwą abstrakcji” (określoną jako PDO). Teraz, próbując rozwinąć moje pytanie, możemy mówić o warstwie abstrakcji PDO przeciwko rozszerzeniu mysqli w php. Na przykład, dlaczego mysqli nie jest zdefiniowany jako warstwa abstrakcji? Jak działa warstwa abstrakcji? (jak PDO w php) Chciałbym ogólnie zrozumieć co to jest "warstwa abstrakcji", nie będę zadawać konkretnych pytań o rozszerzenia php czy mysqli i PDO. Czym więc jest warstwa abstrakcji? A jaka jest jego różnica w stosunku do zwykłego rozszerzenia aplikacji?


title: Łączenie elementów mapujących dane i dziedziczenia obiektów domeny

text: Obecnie mam system z Data Mapperem i wieloma Domain Objects, które dziedziczą z tej samej klasy, powiedzmy B i C, które dziedziczą z abstrakcyjnej klasy A. Aby pobrać dane muszę przekazać parametr do interfejsu danych ( getObject('a'), getObject('b')), na podstawie których zostaną zwrócone dane dla klasy B lub klasy C. Następnie Data Mapper używa klasy Factory do tworzenia poprawnego obiektu na podstawie niektórych parametrów (pochodzących z samych danych). Klasa B i klasa C różnią się tylko implementacją jednej metody, reszta jest dziedziczona z klasy A. Mam co do tego kilka wątpliwości, wydaje się to wadliwe, ale tak naprawdę nie mogę wymyślić lepszego sposobu na zrobienie tego. Oto punkty: 1. Czy dziedziczenie to dobry sposób na implementację różnych jednostek, które różnią się koncepcją, ale tylko nieznacznie? 2. Czy klasa fabryczna to dobry sposób na zwrócenie prawidłowego obiektu domeny? 3. Używanie mapera danych z parametrem wydaje się niewłaściwe, czy istnieje lepszy sposób na zrobienie tego? Czy użycie abstrakcji byłoby lepsze? Mam nadzieję, że wyjaśniłem to wystarczająco jasno, jeśli nie, to chętnie wyjaśnię.


title: Co to znaczy, że „język A jest napisany w języku B”?

text: Często słyszę, że język A jest napisany w języku B. Na przykład **PHP** został napisany **C** , **C#** jest napisany w **C++**. Czy ktoś może wyjaśnić, co to znaczy i czy jest to w ogóle poprawne? Czy ma to coś wspólnego z kompilatorem interpretera używanym przez język? Ponadto na jakich czynnikach opiera się wybór języka implementacji?


title: Dlaczego musisz ręcznie wpisywać nazwy zmiennych podczas debugowania?

text: Widziałem to w wielu IDE (nawet w tych najbardziej popularnych i najczęściej używanych, takich jak Visual Studio): jeśli chcesz obserwować wartość zmiennej, musisz ręcznie wpisać jej nazwę w sekcji Watches debuggera. Dlaczego nie może być po prostu listy wszystkich z polami wyboru obok nich? Deweloper może wtedy po prostu zaznaczyć pole obok tego, który chce oglądać i to wszystko. Zmienne o identycznych nazwach można prawdopodobnie w jakiś sposób numerować (na przykład `a`, `b`, `x(1)`, `x(2)`, `c` itd. Widziałem od tego wyjątki (NetBeans lub BlueJ), ale od wszystkiego są wyjątki, prawda?Może to głupie pytanie, a może nie, ale zawsze zastanawiałem się, dlaczego tak jest.


title: Jaki jest twój proces przeglądu i zatwierdzania kodu i jakie są jego zalety/wady?

text: Czy Twój zespół polega na przeglądach kodu w celu zatwierdzenia pracy? Czy to po prostu kontrola jakości, która podpisuje twoje funkcje i poprawki? Czy masz głównego programistę (lub architekta), który dokonuje przeglądu projektu i implementacji kodu? A może jest to po prostu paradygmat Works on My Machine? Co poleciłbyś lub zauważyłeś, że działa dobrze?


title: System zgłaszania błędów — zachęcanie ludzi do korzystania z niego

text: Zbudowałem już system zgłaszania błędów. Wygląda to tak: ![tutaj wprowadź opis obrazka](http://i.stack.imgur.com/Hl6ZE.png) Dostęp do niego uzyskuje się za pomocą tajnej kombinacji kluczy wykrytej przez kod JavaScript. Nietrudny. Ma wszystko - wysyła standardowe maile do kierownictwa i testerów, loguje zmienne Javascript oraz aktualny DOM HTML. Ulepszamy również backend systemu, aby działał jako pełny system zgłaszania błędów. Wcześniej tylko przez e-mail. Problemem jest niestety to, że zgłaszający błędy _nadal_ preferują e-mail. Nawet jeśli odmówiłem odpowiedzi na ich pytania, dopóki nie wyślą raportu o błędzie, nie będą je konsekwentnie wysyłać. Nie rozumiem tego, ponieważ dla nich powinno to być łatwe, ale zachowują się, jakby to była wielka sprawa. (Wcześniej wygląd był nieco bardziej skomplikowany, ale mimo to wszystko, co musieli zrobić, minimalnie, to wpisać temat i nacisnąć WYŚLIJ). Nie mogę ich zapytać, bo tak naprawdę nie mają pojęcia. Druga sprawa, trudniejsza, to stworzenie takiego sposobu zarządzania tymi problemami, który będzie odpowiedni dla nas, deweloperów. Właściwie byłem zadowolony z zarządzania nowymi problemami i błędami za pośrednictwem skrzynki odbiorczej Gmaila, ale mój współpracownik chciałby korzystać z systemu. Dostaje więcej poczty niż ja i ma inne powody. Nie wiem, co robić. Mój problem został rozwiązany tak bardzo, jak tego potrzebuję. Kiedy patrzę na inne systemy zgłaszania błędów, oba wyglądają okropnie i często są drogie. Co więcej, jeśli chociaż jedna osoba zgłosi błąd przez e-mail, będzie to katastrofa! Nie możemy odrzucić każdego błędu przez e-mail i wtedy będziemy mieli dwa systemy zgłaszania błędów. Przepraszam, że zamieszczam tutaj wszystkie te skargi, ale może ktoś ma jakąś wnikliwą radę, która nie została jeszcze powiedziana.


title: Polecanie wzorca projektowego/podejścia do ujawniania/tolerowania/naprawiania błędów systemowych, obsługa wyjątków (np. w Java, C++, Perl, PHP)

text: Czy możesz polecić wzorzec projektowy/podejście do eksponowania/tolerowania/naprawiania błędów systemowych, obsługi wyjątków (Java, C++, Perl, PHP)? Niektóre błędy wymagają zgłoszenia. Niektóre błędy można obsłużyć wewnętrznie (przez ponowną próbę lub są nieistotne (można je zignorować). Jak ustrukturyzować kod, aby je przechwycić? Ale wszystkie błędy muszą być rejestrowane. Jakie są najlepsze praktyki? I do ich symulacji, aby móc aby w pełni przetestować komponenty, na które mają wpływ? http://stackoverflow.com/questions/7432596/recommend-a-design-pattern-podejście-to-exposing-tolerating-recovering-from-system, ale pomyślałem, że należy o to zapytać również programistów, ponieważ myślę, że programiści obejmują pytania i odpowiedzi szersze problemy z oprogramowaniem/programowaniem, podczas gdy stackoverflow dotyczy bardziej technicznej implementacji IMHO).


title: Czy dozwolone jest tworzenie wielu wystąpień klasy singleton?

text: Jestem zdezorientowany, kiedy to czytam (w odniesieniu do wzorca projektowego singleton): > W jaki sposób upewniamy się, że klasa ma tylko jedną instancję i że instancja jest > łatwo dostępna? Zmienna globalna sprawia, że obiekt jest dostępny, ale > nie uniemożliwia tworzenia instancji wielu obiektów. Jaki jest więc pożytek ze wzorca singleton, jeśli możemy stworzyć wiele instancji? **ŹRÓDŁO:** Wzorce projektowe – Elementy oprogramowania obiektowego wielokrotnego użytku (1995) – Gamma, Helm, Johnson, Vl


title: Przejście z tradycyjnej metodologii kaskadowej na zwinną

text: Mój zespół programistów jest w trakcie „zwinności” i wiele osób patrzy na siebie bez wyrazu, nie bardzo wiedząc, co to oznacza. Wszystkie kierownictwo mówi, że „zacznij pracować zwinnie” bez sugerowania żadnej konkretnej metodologii, więc czekają, aby zobaczyć, czy sami możemy coś wymyślić. Czy ktoś był wcześniej w takiej sytuacji i jak sobie z tym poradziłeś? Jakieś nakazy i zakazy? Jestem jednym ze starszych członków zespołu, więc oczekuje się, że wykażę się inicjatywą. Wiem, że to, co działa dla jednego, niekoniecznie będzie działać dla drugiego, więc bardziej interesuje mnie podejście, a nie efekt końcowy, ponieważ myślę, że wynik przyjdzie naturalnie z odpowiednim podejściem.


title: Ucieczka gołębia językowego

text: Ostatnie 5 lat spędziłem na PHP i muszę przyznać, że jest to dalekie od mojego ulubionego języka. Chciałbym zająć stanowisko zajmujące się czymś innym (powiedzmy Erlang), ale jak sprawić, by ludzie na mnie patrzyli. Wygląda na to, że pomimo wszystkiego w moim CV (łącznie z nadchodzącą książką od O'Reilly) ciągle dostaję dziurę w pozycjach typu PHP.


title: Czy kodowanie i testy jednostkowe naruszają zasadę DRY?

text: Sucha zasada mówi: > „Każda wiedza musi mieć jedną, jednoznaczną, autorytatywną > reprezentację w systemie”. Jednak pisząc testy dla kodu dwukrotnie opisujesz oczekiwane zachowanie systemu (raz w kodzie i raz w teście). Wiem, że oba opisy są z innej perspektywy, ale mają wiele wspólnego z podstawową ideą. Jakieś przemyślenia na ten temat? Ogólnie uważam, że zarówno testy jednostkowe, jak i zasada DRY są dobrymi pomysłami i staram się je stosować w jak największym stopniu. To pytanie jest bardziej na poziomie filozoficznym, ale zastanawiałem się, czy ktoś też o tym pomyślał.


title: Czy można połączyć selektory XPath i CSS?

text: Właśnie przeszedłem przez XPath. Zaciekawiło mnie to. Dlaczego istnieje inny sposób wybierania tagów w XPath i CSS (selektory). Dlaczego nie może istnieć wspólny sposób zarówno w XPath, jak i CSS?


title: Czy sieć neuronowa może dostarczyć więcej niż odpowiedzi „tak” lub „nie”?

text: Każdy przykład sieci neuronowej do rozpoznawania obrazów, o której czytałem, daje prostą odpowiedź „tak” lub „nie”. Jeden węzeł wyjściowy odpowiada „Tak, to jest ludzka twarz”, a jeden odpowiada „Nie, to nie jest ludzka twarz”. Rozumiem, że jest to prawdopodobnie dla uproszczenia wyjaśnienia, ale zastanawiam się, jak można zaprogramować taką sieć neuronową, aby dawała bardziej szczegółowe dane wyjściowe. Załóżmy na przykład, że klasyfikowałem zwierzęta. Zamiast mówić „Zwierzę” lub „Nie zwierzę”, chciałbym uzyskać odpowiedzi takie jak „Pies”, „Ryba”, „Ptak”, „Wąż” itp., z jednym końcowym węzłem wyjściowym „Nie zwierzę/ja” nie rozpoznaj tego”. Jestem pewien, że to musi być możliwe, ale nie rozumiem, jak to zrobić. Wygląda na to, że ze względu na algorytm uczący wstecznej propagacji błędu, gdy trenujesz jeden węzeł wyjściowy (tj. „To jest pies”), a wagi neuronów są zmieniane, wtedy idealny stan dla innego węzła wyjściowego, który wcześniej wyszkolony (tj. „To jest ptak”) zacznie odbiegać i na odwrót. Tak więc wyszkolenie sieci w rozpoznawaniu jednej kategorii sabotowałoby każde szkolenie przeprowadzone dla innej kategorii, ograniczając nas do prostego projektu „Tak” lub „Nie”. Czy to uniemożliwia takie rozpoznawanie? Czy może źle rozumiem algorytm? Jedyne dwie rzeczy, o których mogę pomyśleć, to: * Albo moglibyśmy wytrenować jedną sieć neuronową dla każdej rzeczy, którą chcemy sklasyfikować, i jakoś użyć jej do zbudowania większej, super-sieci (na przykład sieci dla "psa", a sieć dla „ptaka” itp., które w jakiś sposób dodajemy razem, aby stworzyć supersieć dla „zwierząt”); lub * Stworzyć jakąś śmiesznie skomplikowaną metodologię treningową, która wymagałaby niewiarygodnie zaawansowanej matematyki i jakoś dawałaby idealny stan masy neuronu dla wszystkich możliwych wyników (innymi słowy, „wstaw tutaj magię matematyczną”). (Uwaga boczna 1: Konkretnie patrzę na wielowarstwowe perceptrony jako rodzaj sieci neuronowej.) (Uwaga dodatkowa 2: Dla pierwszego wypunktowanego „możliwego rozwiązania”, posiadanie każdej określonej sieci neuronowej i iterowanie przez nią, aż otrzymamy „Tak” odpowiedź nie jest wystarczająco dobra.Wiem, że można to zrobić dość łatwo, ale jest to proste programowanie funkcjonalne, a nie uczenie maszynowe.Chcę wiedzieć, czy możliwe jest posiadanie sieci neuronowej _one_ do przekazywania informacji i otrzymywania odpowiedniej odpowiedzi.)


title: Bezpośrednia manipulacja bazą danych antywzorcem?

text: Niedawno dowiedziałem się, że niektóre zespoły przeniosły wszystkie manipulacje bazami danych do rzeczywistej bazy danych za pomocą procedur składowanych. Pomyślałem, że to całkiem sprytne, ponieważ baza danych staje się czarną skrzynką i jakakolwiek zmiana w sposobie przechowywania i manipulowania danymi nie wpłynie na kod aplikacji. Czy słuszne jest stwierdzenie, że manipulowanie bazą danych w kodzie aplikacji jest antywzorcem, ponieważ niepotrzebnie łączy kod aplikacji z kodem pamięci, czy też istnieją okoliczności, które utrudniałyby oddzielenie zapytań sql od aplikacji?


title: Oprogramowanie do priorytetyzacji spraw/zadań w uporządkowanej liście/kolejce (najlepiej w Github)?

text: Wydaje mi się, że najlepszym sposobem zarządzania priorytetami zadań programistycznych w backlogu jest po prostu uporządkowanie ich. Najpierw wykonaj najlepsze zadanie, a potem drugie. Jeśli zmieni się priorytet, zmień kolejność kolejki. Myślałem, że tak właśnie powinno działać w Agile. Jeszcze nie znalazłem internetowego menedżera zadań zespołowych typu open source, który obsługuje niestandardowe porządkowanie zadań w ten sposób – chociaż mogę być nieaktualny. Assembla zdecydowanie nie. Jira chyba nie. Kiedy używaliśmy Agilo w mojej poprzedniej firmie, to też nie wydawało się. Jedyną usługą, którą znalazłem, która dobrze wdraża tę prostą koncepcję, jest Google Tasks, ale nie nadaje się ona do zarządzania projektami oprogramowania. Nie rozumiem, dlaczego nie jest to standardowy sposób zarządzania priorytetami. Mój idealny sposób na śledzenie problemów to Github. O ile mogę powiedzieć, Github Issues również nie obsługuje niestandardowego porządkowania zadań. Czy ktoś wie, czy jest jakiś sposób na zaimplementowanie tego w jakiś sposób na Github Issues? Czy mogę w jakiś sposób zasugerować to jako funkcję?


title: Czy istnieje użyteczna korelacja między wyborem przeglądarki/wyszukiwarki internetowej a dobrymi programistami?

text: Po serii wywiadów na początku tego roku, które obejmowały kilka praktycznych pytań dotyczących dostępu do komputera, zauważyłem, że przynajmniej w przypadku kandydatów, z którymi się spotykaliśmy, istniała wysoka odwrotna korelacja między jakością kandydata a wyraźnym wyborem Bing/ IE jako stos do wyszukiwania/przeglądania sieci. Oznacza to, że duża liczba kandydatów specjalnie szukała IE, aby używać go jako przeglądarki podczas przeglądania sieci, a konkretnie używała Bing jako wyszukiwarki (nawet wpisując Bing w polu wyszukiwania Google, przed rozpoczęciem wyszukiwania) Czy to tylko odstający, fuks, czy jest jakiś rodzaj informacji, które mogę uzyskać z tej obserwacji? Do tej pory moi najlepsi kandydaci to: * Tak, istnieje duża korelacja między dobrymi programistami a wyborem przeglądarki/wyszukiwarki * Istnieje jakiś program szkoleniowy lub społeczność, która doradza korzystanie z IE/Bing podczas rozmów kwalifikacyjnych, a ja tak się właśnie stało natrafić na kiepski wybór z tej grupy * Dzieje się coś innego, o czym nie wiem, ale ktoś tutaj może wiedzieć. Więc powtórzę, pytanie brzmi: czy działa tu coś więcej niż tylko przypadek, a jeśli tak, to co się dzieje?


title: Algorytm przestawiania kartonów

text: **Oświadczenie o problemie -** ![Oświadczenie o problemie](http://i.stack.imgur.com/pbK2U.png) Zadaniem jest znalezienie minimalnej liczby zamian wymaganych w danym układzie kartonów, aby uzyskać żądane układanie kartonów. Zamieniać można tylko sąsiadujące kartony. Próbowałem podejścia ad hoc, ale okazało się nieskuteczne w przypadku górnej granicy zakresu danych. Tutaj jest dla odniesienia - Przechodzenie przez dany układ kartonów, jeśli pozycja kartonika>niż pożądana pozycja zamień z powrotem przejdź do poprzedniej iteracji Jakie byłoby pragmatyczne podejście do problemu? Zakres danych testowych - N<=105 Źródło - INOI 2009 Q Paper


title: Czy śledzenie informacji o systemie Android OS.Buid/producenta stanowi problem z prywatnością?

text: W systemie operacyjnym Android szczegóły dotyczące telefonu są dostępne za pośrednictwem klasy `Android.OS.Build`. Dane te obejmują takie informacje jak producent telefonu, model, wersja itp. Klient może chcieć, abyśmy zebrali te dane i zapisali je w naszej bazie danych w celu analizy i śledzenia. Myślę, że budzi to pewne obawy dotyczące prywatności użytkownika końcowego. Czy mamy obowiązek poinformować użytkownika, że zbieramy te informacje (podobnie jak w Sklepie Play prezentowane jest wykorzystanie możliwości urządzenia, takich jak kamera czy mikrofon) i do czego zamierzamy je wykorzystać? Jeśli nie jesteśmy do tego zobowiązani, czy jest to coś, o czym powinniśmy, z etycznego punktu widzenia, poinformować użytkownika o tym, co robimy?


title: Jakiego wzorca należy użyć, aby dynamicznie dodawać wiele małych widoków do jednego dużego widoku głównego?

text: Wyobraźmy sobie mały graficzny interfejs kalkulatora, z podstawowymi operacjami (`+,-,/,*`), aw menu możemy sprawdzić np. kalkulator naukowy, a obok pojawia się mały nowy widok z dodatkowymi funkcjami. Myślałem, że wzór dekoratora jest rozwiązaniem, ale po przeczytaniu dokumentacji na ten temat jestem teraz zdezorientowany. Który wzór byłby bardziej odpowiedni do robienia takich rzeczy?


title: Co się stanie, jeśli nie będziesz w stanie rozwiązać problemu?

text: Jestem rok przed ukończeniem studiów i naprawdę nie mogę się doczekać rozwiązywania praktycznych problemów. Zwłaszcza te nietrywialne, które wymagają odrobiny badań i przemyślenia. Ale jednocześnie jest to również mój największy lęk - stawić czoła problemowi, którego nie jestem w stanie rozwiązać, nieważne jak bardzo się staram. A z naciskiem na dostarczanie kodu w zbliżających się terminach tuż za rogiem, wygląda to trochę przerażająco, gdy ogląda się go z bezpiecznych placów zabaw na uniwersytecie (gdzie najgorszą rzeczą, jaka może się zdarzyć, jest konieczność powtórzenia kursu lub egzaminu). A więc dla tych, którzy są w branży od dłuższego czasu, co by się stało, gdyby powiedziano ci, że masz rozwiązać problem, którego nie mogłeś? Czy to się stało, a jeśli tak, to co się stało? Czy po prostu go rzucili i powiedzieli: „No cóż, zgadnij, że możemy zadowolić się czymś innym”? Czy były konsekwencje? Zostałeś upomniany, a nawet zwolniony?


title: Jak praktyczne jest zbudowanie własnej sieci społecznościowej?

text: Mój przyjaciel chce stworzyć własną niszową sieć społecznościową dla określonej grupy docelowej. Chcę dać mojemu przyjacielowi wyobrażenie o tym, jak praktyczne jest to po stronie oprogramowania. Jaki rodzaj pracy by się w to włożył? Czy to jest praktyczne przedsięwzięcie?


title: Najlepsze praktyki w wersjonowaniu

text: W małym zespole opracowuję kilka skryptów do analizy danych. Na razie używamy SVN, ale nie w bardzo ustrukturyzowany sposób. Nawet nie sprawdziliśmy, jak używać gałęzi, chociaż potrzebujemy tej funkcjonalności. Co sugerujesz jako najlepszą praktykę, aby skonfigurować następujący system: * dwie bazy kodu (rdzeń i wtyczki) * wersje mogą być niekompatybilne z poprzednimi skryptami * czasami poszczególne funkcje są opracowywane i nie są jeszcze ukończone, podczas gdy inne poprawki muszą zostać wykonane pilnie do kodu W końcu nie dostarczamy kodu jako paczki, tylko umieszczamy skrypty Pythona w jakimś katalogu (z nazwami wersji?). Jakiś inny skrypt Pythona, który służy jako konfiguracja, wybiera żądaną wersję, ustawia ścieżkę do tych bibliotek, a następnie zaczyna importować moduły. Widziałem stabilne wydania noszące nazwę „trunk”, więc zrobiłem to samo. Jednak nie ma jeszcze numerów wersji. Rdzeń i wtyczki to różne repozytoria, jednak musimy dopasować wersje pod kątem kompatybilności. Czy możesz zasugerować jakieś najlepsze praktyki lub odniesienia, aby ułatwić rozwój i zmniejszyć chaos? :) Niektórzy sugerowali GIT. Nie słyszałem o tym, ale mogę się zmienić.


title: Czy możesz polecić dobry szablon informacji o wydaniu?

text: Szukam dobrego szablonu informacji o wydaniu. Ewentualnie w postaci zwykłego tekstu lub HTML. Czego używasz? **EDYTUJ:** Zapomniałem wspomnieć, że te notatki będą używane wewnętrznie w naszej firmie dla innych programistów korzystających z naszych bibliotek. Interesuje mnie, co Twoim zdaniem powinna, a czego nie powinna zawierać informacja o wydaniu. Np. wymieniasz wszystkie otwarte problemy, czy tylko problemy zamknięte w tym wydaniu? Czy przechowujecie wszystkie poprzednie informacje o wydaniu w tym samym pliku (być może w odwróconej kolejności chronologicznej) czy macie osobne dokumenty dla każdego wydania? Kilka przykładów, które znalazłem na stronie Apache: * TXT: Apache Commons Net * HTML: Maven


title: Czy jest już dziś możliwe napisanie aplikacji internetowej w całości w Javascript (klient i serwer), w tym RESTful API eksponujące dane PostgreSQL?

text: Tam, gdzie pracuję, mamy kilkanaście wewnętrznych systemów SW, które opracowaliśmy wewnętrznie przy użyciu różnych technologii, frameworków i języków. Należą do nich różne od Microsoft (ASP.NET Web Forms, WebAPI, WinForms, SharePoint, Office Automation, Win8 Native Apps, SQL Server, SSRS) i inne spoza Microsoft (zwykły JS/HTML/CSS, PHP, Lithium, PostgreSQL , MySQL). Nasz zespół programistów SW rozrósł się i ponownie skurczył do miejsca, w którym teraz jestem tylko ja i jeszcze jeden programista. Uwielbiam wypróbowywać nowe, błyszczące technologie i korzystać z różnych narzędzi do wykonywania zadań, co częściowo wyjaśnia ogromną liczbę różnych technologii, które wybraliśmy przez lata, ale cierpimy z powodu „gwałtu wszystkich transakcji, mistrzu żadnej ” syndrom. Teraz powiedziano nam, że firma spodziewa się znacznego wzrostu i że we dwójkę będziemy musieli wyprodukować kilka nowych aplikacji w ciągu najbliższego roku. Jestem gotów skonsolidować nasze umiejętności i zestawy narzędzi, abyśmy mogli opanować narzędzia i bardziej skoncentrować się na problemach biznesowych, z którymi przyjdzie nam się zmierzyć, bez spowolnienia przełączania kontekstu między technologiami. Nasza dwójka ostatnio zajmowała się dużo "starym" rozwojem JS/HTML5/CSS3 i chciałbym skupić się na tym zestawie technologii posuwających się do przodu. Będziemy przede wszystkim używać PostgreSQL jako naszego magazynu danych na zapleczu (być może rozszerzając go o niektóre NoSQL do bardzo specyficznych zastosowań i prawdopodobnie potrzebnych do znalezienia zaawansowanego narzędzia do wyszukiwania pełnotekstowego do integracji). Nasze główne interfejsy użytkownika będą kombinacją tradycyjnych aplikacji internetowych i aplikacji jednostronicowych (mieszanka 50%-50%), ale jest nadzieja na natywne aplikacje mobilne. Dlatego chciałbym udostępnić nasze dane biznesowe za pośrednictwem RESTful API, aby były łatwe do wykorzystania przez różnych klientów. I **najważniejszym czynnikiem w tym wszystkim jest to, że chcę móc kodować wyłącznie w Javascript od początku do końca** (z wyjątkiem pisania SQL jako niezbędnego dla warstwy DB i HTML5/CSS3 dla prezentacji ). Pozostają mi więc następujące pytania: 1. Czy możliwe jest dzisiaj kodowanie wszystkich tych warstw/komponentów wyłącznie w JavaScript bez uciekania się na przykład do PHP na serwerze lub C# dla RESTful API (tj. WebAPI)? 2. Czy node.js jest wymagany, aby to urzeczywistnić, czy mogę użyć serwera WWW bez węzła i nadal osiągnąć ideał „tylko JavaScript”? (pokrewne... czy node.js miałby po prostu więcej sensu w paradygmacie JS-only?) 3. Czy są jakieś frameworki do budowania API RESTful-only JS, które mogą komunikować się z PostgreSQL? 4. Czy są jakieś zaawansowane narzędzia do wyszukiwania pełnotekstowego (takie jak Lucene), które pozwalają na programowanie w oparciu o podejście JS?


title: „Standardowy” format do używania znacznika czasu jako części nazwy pliku

text: Szukałem standardowego formatu do używania daty/czasu jako części nazwy pliku i nie mogłem nic wymyślić. Moje pytanie składa się z dwóch części: **Czy używanie znaczników czasu ~~w celu wymuszenia unikatowości~~ w nazwach plików to kiepska praktyka?** Mogę uzyskać czas od daty utworzenia i zserializować nazwy plików (file0001.bak, file0002.bak , itp.), ale samo uwzględnienie znacznika czasu pozwala wykonać operacje na plikach, takie jak `mv 2011-01* gdzieś/`. Czy korzystanie z tego typu systemu nazewnictwa ma jakieś wady? Używam formatu `RRRR-mm-dd_HH-MM-SS`. **Czy jest lepszy format, którego powinienem używać?** Czy w przypadku tego formatu powinienem się martwić o kompatybilność systemu plików, obawy dotyczące str_to_date_parsing itp.? Dziękuję! edit: Mogłem chcieć pominąć bit unikatowości **enforce**, ponieważ jest to pojedynczy użytkownik generujący kopię zapasową za pomocą zadania cron (nie powinno być żadnych problemów ze współbieżnością).


title: Czy muszę zawrzeć pełną informację o licencji gpl v2 w moim komercyjnym projekcie, jeśli korzystam z pracy innego autora?

text: Chciałbym wykorzystać w swoim projekcie komercyjnym pracę innego autora. Dzieło tego autora jest objęte licencją GPL v2. Nie używam pełnego kodu. Używam tylko części kodu. Zmodyfikowałem go również zgodnie z potrzebami mojego projektu. Teraz jestem zdezorientowany, jakiego rodzaju informacje o licencji powinienem zawrzeć. To jest pełny tekst licencji. Korzystam z pracy wielu autorów w pliku functions.php. Niektóre prace są objęte licencją MIT. 1) Czy muszę dołączyć pełny tekst licencji w moim pliku php jako komentarz? 2) Czy muszę tworzyć osobny plik php dla pracy każdego autora?


title: Jak zaimplementować dwie różne usługi sieciowe działające w oparciu o tę samą logikę biznesową?

text: Rozwijamy ReSTful HTTP API z Servicesstack(.NET). Niektórzy klienci API, którzy mają podzbiór akcji, wymagają usługi, którą można łatwo dodać za pomocą wszystkich encji, tak jak w przypadku „Dodaj odwołanie do usługi” w Visual Studio. Zastanawiamy się nad stworzeniem prostej usługi internetowej asmx, ale nasze przemyślenia na temat tego, jak to zrobić, dzielą się na dwa: 1. Asmx WS wywoła usługę ServiceStack z klientem HTTP. 2. Asmx WS będzie odwoływał się do tego samego BL, do którego odwołuje się główna usługa, i będzie go wywoływał bezpośrednio. **Jaki jest preferowany sposób?** **Czy możesz polecić inny sposób?**


title: Jak działa niestandardowe generowanie plików wykonywalnych?

text: Jedną z rzeczy, z których znana jest platforma dystrybucji Steam firmy Valve, jest system Custom Executable Generation, który tworzy unikalną kopię programu dla każdej osoby, która go kupuje. Jestem jednak pewien, że Valve nie jest jedyną firmą lub osobą, która wdrożyła lub pomyślała o wdrożeniu takiego systemu. Gdybym chciał spróbować uruchomić własny system, który generował pliki wykonywalne po stronie serwera, które są unikalne dla downloadera lub jego konta, co powinienem wiedzieć, jak to zrobić? Jakie są przede wszystkim podstawy takiego systemu?


title: Czy Python Cookbook dla Pythona 2.4 ma zastosowanie do Pythona 2.7.5?

text: Moja uczelnia ma kurs Wprowadzenie do programowania przy użyciu Pythona i używamy Pythona 2.7.5. Chciałbym wiedzieć, czy pomocne będzie przeczytanie książki kucharskiej Python, która jest przeznaczona dla Pythona 2.4? O ile mi wiadomo, nie ma oddzielnych książek kucharskich dla Pythona 2.7.x. Ale czy są jakieś podobne książki? Istnieje nowsza edycja książki kucharskiej Pythona dla Pythona 3, ale okazuje się, że python 3 i python 2 są zupełnie inne.


title: Używasz Paypal (lub podobnego) do logowania się na mojej stronie?

text: Prowadzę stronę internetową i chcę oferować kilka poziomów usług – jeden bezpłatny, jeden z jednorazową opłatą i jeden z abonamentem. Moją pierwszą chęcią jest używanie Paypal do opcji płatności. Rozumiem, że mogę utworzyć stronę logowania w mojej witrynie, na której tworzysz konto lub logujesz się do istniejącego konta, a następnie mogę wykonać wywołanie API do Paypal, aby zobaczyć, za co zapłacili i dać im odpowiedni poziom dostępu i przekieruj do Paypal, aby mogli zapłacić za dostęp, którego chcą. Nie jestem jeszcze pewien, czy bezpłatna usługa będzie wymagała logowania, czy nie. Ale czytając blogi Joela Spolsky'ego i Bruce'a Schniera, zdaję sobie sprawę, jak trudno jest prawidłowo przeprowadzić uwierzytelnianie i jak trudno jest użytkownikom utworzyć konto lub zalogować się do mojej witryny, a następnie utworzyć konto lub zaloguj się do Paypal. Czy istnieje sposób na bezpośrednie użycie systemu logowania Paypal, więc logują się do Paypal, a Paypal odsyła mi token mówiący kim są i za co zapłacili? To brzmi jak prawie OpenID, czy coś podobnego?


title: Kiedy powinienem nauczyć się frameworka php?

text: Pracuję nad projektem, mobilną aplikacją hybrydową, która łączy kod natywny, html5 - jquery mobile (dla frontendu) oraz php - mysql (dla backendu). Strona serwera odpowiada za takie rzeczy jak rejestracja nowych użytkowników do bazy danych, aktualizacja użytkowników, zapisywanie użytkowników na wydarzenia itp. Zasadniczo jest to prosty kod php z zapytaniami mysql. Ostatnio zacząłem dużo czytać o frameworkach php. Zacząłem się zastanawiać, kiedy naprawdę jest czas, aby użyć któregoś i w zasadzie dlaczego? Z mojego zrozumienia, framework pomaga tylko w zapleczu usługi i zwykle cały backend, który do tej pory zbudowałem, jest z grubsza opisany powyżej. Ogólnie jestem bardzo zainteresowany budowaniem usług mobilnych, które obejmują zarówno rozwój zaplecza, jak i frontendu. Czy ucząc się/korzystając z frameworka zarobię coś wyjątkowego w moim przypadku? Nie rozumiem, w jaki sposób moje 100-wierszowe skrypty php mogłyby być łatwiejsze, gdyby zostały napisane za pomocą frameworka. Tak, przeczytałem 100 razy, że lepiej jest użyć czegoś przetestowanego i wolnego od błędów niż używać własnych rzeczy, ale nie rozumiem, o czym dokładnie mówią. Co może pójść nie tak, wykonując zapytanie do bazy danych i pobierając/zapisując/edytując dane, które framework by rozwiązał? To, o co tutaj pytam, to być może kilka przykładów, kiedy należy preferować framework php.


title: Czy początkujący PHP powinien używać frameworka?

text: > **Possible Duplicate:** > Kiedy powinienem zacząć uczyć się PHP Framework Jestem absolutnie początkującym programistą. Mam dużo wiedzy teoretycznej na uniwersytecie dziesięć lat temu, ale żadnego praktycznego doświadczenia. Chcę temu zaradzić za pomocą projektu hobbystycznego, który byłby podobny do aplikacji internetowej, którą można sprzedawać w prawdziwym świecie. Wybrałem PHP, aby uniknąć specyfiki systemu operacyjnego, procesu budowania itp. **Czy powinienem zacząć od frameworka, czy kodować wszystko ręcznie? Jakie byłyby korzyści z używania frameworka?** Pokrótce przyjrzałem się PHP Code Ignition i dobrze sobie radzi, chwaląc własne korzyści. Jestem pewien, że dotyczy to doświadczonego programisty, ale czy dotyczy to również początkującego?


title: Jak określić gramatykę parsera?

text: Programuję od wielu lat, ale jedno zadanie, które wciąż zajmuje mi nadmiernie długo, to określenie gramatyki dla parsera i nawet po tym nadmiernym wysiłku nigdy nie jestem pewien, czy gramatyka, którą wymyśliłem, jest dobra ( przez jakąkolwiek rozsądną miarę „dobra”). Nie spodziewam się, że istnieje algorytm automatyzujący proces określania gramatyki, ale mam nadzieję, że istnieją sposoby uporządkowania problemu, które eliminują wiele zgadywania i prób i błędów mojego obecnego podejścia. Moją pierwszą myślą było przeczytanie o parserach i zrobiłem część tego, ale wszystko, co przeczytałem na ten temat, przyjmuje gramatykę jako daną (lub na tyle trywialną, że można ją określić przez sprawdzenie) i skupiam się na problem przetłumaczenia tej gramatyki na parser. Interesuje mnie problem bezpośrednio przed: jak określić gramatykę w pierwszej kolejności. Interesuje mnie przede wszystkim problem określenia _gramatyki_, która formalnie reprezentuje zbiór konkretnych przykładów (pozytywnych i negatywnych). Różni się to od problemu projektowania nowej _składni_. Dziękuję Macneilowi za zwrócenie uwagi na to wyróżnienie. Nigdy tak naprawdę nie doceniałem rozróżnienia między gramatyką a składnią, ale teraz, gdy zaczynam to dostrzegać, mógłbym doprecyzować moje pierwsze wyjaśnienie, mówiąc, że interesuje mnie przede wszystkim problem określenia gramatyki, która będzie wymuszać predefiniowana składnia: tak się składa, że w moim przypadku podstawą tej składni jest zazwyczaj zbiór pozytywnych i negatywnych przykładów. Jak określa się gramatykę parsera? Czy istnieje książka lub odniesienie, które jest de facto standardem opisującym najlepsze praktyki, metodologie projektowania i inne przydatne informacje dotyczące określania gramatyki dla parsera? Na jakich punktach, czytając o gramatyce parsera, powinienem się skupić?


title: Jaki jest najlepszy sposób przechowywania dokumentacji związanej z projektem kodu?

text: Posiadamy wiele dokumentów związanych z tworzeniem naszego oprogramowania. Należą do nich takie rzeczy jak wymagania, dokumenty projektowe, zewnętrzne pliki PDF, pliki klientów, instrukcje testowania itp. Obecnie te dokumenty są porozrzucane po całym miejscu (wiki, „jakieś miejsce w sieci”, dysk twardy lokalnego dewelopera(!), i jeszcze gorsze miejsca). Jak najlepiej je śledzić? Ponieważ do naszego rozwoju używamy studia wizualnego (2010) i tak naprawdę nie mamy w projekcie żadnych nie-deweloperów, pomyślałem, że dobrym pomysłem byłoby przechowywanie ich w „rozwiązaniu” VS, które pozwoliłoby im być kontrolowanym przez źródła i powszechnie dostępnym dla wszystkich programistów. Jednak VS naprawdę nie wydaje się być stworzony do tego. Jeśli edytujesz dowolny plik dokumentu, nawet taki, który jest skonfigurowany z właściwościami kompilacji „Brak”, „Nie kopiuj”, VS musi odbudować oprogramowanie przed ponownym uruchomieniem. Nie ma możliwości utworzenia „Projektu dokumentacji” w ramach rozwiązania. (Używamy do tego projektu Empty C#). Visual Studio i Word/Excel flat nie radzą sobie dobrze z kontrolą źródła. Nie można wyświetlić zaewidencjonowanego pliku, a następnie zdecydować się na wprowadzenie zmiany bez uprzedniego zamknięcia pliku, przejścia do projektu i ręcznego wypisania przed wprowadzeniem zmiany. W najlepszym razie jest to powolne i żmudne. W każdym razie jest to najlepsze, co wymyślił nasz zespół, ale naprawdę chciałbym mieć lepsze (bezpłatne) rozwiązanie.


title: Obniżenie barier wejścia w nowe przedsięwzięcia programistyczne

text: Co robisz, aby obniżyć barierę rozpoczynania nowych projektów? Ile czasu zajmuje przejście do czegoś nowego, od pojawienia się pomysłu do momentu, w którym zaczniesz tworzyć wystarczająco dużo kodu, aby się nim bawić? Ogólnie mam na myśli projekty zabawek, ale koncepcja nadal oznacza bardziej znaczące projekty FOSS, nad którymi pożądane jest wykonanie pracy. Na przykład chciałbym przestać bać się formatów plików graficznych i w tym celu chciałbym móc stworzyć aplikację, która wykorzystuje OpenGL do przeglądania dowolnych formatów graficznych. Lub chciałbym zbadać, jak radzić sobie z bardzo dużymi plikami graficznymi. Może tego rodzaju projekty nie są na tyle swobodne, żebym mógł się w nie zanurzać i wynurzać. Innymi przykładami są takie rzeczy, jak wow, ten program FOSS jest świetny! Ale chciałbym poprawić niektóre funkcje. Och, spójrz, jeśli mam to zbudować na systemie Windows, muszę znaleźć te miliony zależności i samodzielnie je skompilować. Albo, dang, ten kod jest napisany w Pythonie. Och czekaj, 2.6, teraz muszę się upewnić, że zainstalowałem również tę wersję i zapamiętać, na którą wersję piszę. Czy uważasz, że bardziej sprzyja to pracy w Linuksie? Czy pomysł na zwykłe programowanie to tylko mit? W jaki sposób obniżyłeś swoją barierę, aby zacząć? Dziękuję


title: Najlepsze materiały do nauki Graj! Struktura

text: Jakiś czas temu omawiałem możliwość przejścia do startupu, który będzie korzystał z Javy, a konkretnie Play! Struktura; cóż, zamierzam to zrobić! Jestem gościem .NET od dłuższego czasu i tak naprawdę nie byłem w grze Java, z wyjątkiem okazjonalnych majsterkowania Androida lub grzebania w Scali. Spojrzałem na sztukę! Framework wcześniej, ale tylko na poziomie pobieżnym. Myślę, że nie przeszkadza mi Java jako język, ponieważ wcześniej otrzymałem świetne rady dotyczące materiałów do nauki. Moje pytanie dotyczy bardzo świetnej strony Play! Framework Nie znalazłem tam wiele więcej poza kilkoma blogami. Czy ktoś wie o innych dobrych zasobach dla Play! Ramy jak książki? Wyszukiwanie w Amazonie wykazało zero wyników. Wiem, że krąży tam eBook, ale w tym momencie wydaje się on trochę przestarzały. W każdym razie dzięki za twój wkład.


title: Tworzenie obiektów

text: Mam ogólne, standardowe pytanie dotyczące kodowania. Czy złą praktyką jest inicjowanie i tworzenie obiektu wieloma metodami w zależności od wyniku wyboru użytkownika. Na przykład, jeśli użytkownik opuści grę w pokera, utwórz rękę pokerową z kartami, które otrzymał, nawet jeśli < 5, a jeśli użytkownik grał do końca, stwórz obiekt, aby pokazać ukończone rozdanie, aby pokazać wynik gry. Kluczem jest to, że obiekt zostanie stworzony tylko raz w rzeczywistości, istnieją tylko różne ścieżki, a parametry będą otrzymywane w zależności od tego, czy użytkownik spasował, czy grał do ostatecznej rozgrywki.