title: Niezależne od indeksu porównywanie znaków w obrębie bloków tekstowych

text: Mam następujące zadanie: stworzyć program, w którym znajduje się blok przykładowego tekstu, który powinien wpisać użytkownik. Wszelkie literówki, które użytkownik zrobi podczas testu, są rejestrowane. Zasadniczo mogę porównać każdy wpisany znak z przykładowym znakiem w oparciu o pozycję indeksu karetki na wejściu, ale jest jedna istotna wada w takim „naiwnym” podejściu. Jeśli użytkownik omyłkowo wpisał więcej liter niż ma cały ciąg lub wstawił więcej spacji między ciągiem niż powinno, to pozostałe porównania będą błędne z powodu przesunięcia indeksu dodanego przez dodatkowe nieprawidłowe wstawienia. Myślałem o zaprojektowaniu jakiegoś parsera, w którym każdy ciąg (lub nawet znak ) jest tokenizowany, a porównania dokonywane są „w oparciu o znaki”, a nie „w oparciu o indeks”, ale wydaje mi się to przesadą dla takiego zadania . Chciałbym uzyskać odniesienie do ewentualnie istniejących algorytmów, które mogą być pomocne w rozwiązaniu tego rodzaju problemu.


title: Framework, w którym definiowane są widoki w bazie danych - wada projektowa czy zasadna?

text: Pracuję z frameworkiem, w którym pola wyświetlane na każdej stronie internetowej są zdefiniowane w bazie danych aplikacji. Administratorzy mogą dodawać nowe pola do stron lub ukrywać/całkowicie usuwać stare pola. Logika dla każdej strony znajduje się w klasie Java — czasami istnieje relacja jeden-do-jednego między stroną a klasą, czasami kilka stron używa tej samej klasy. **Problem** Ten projekt frameworka tworzy ukrytą zależność między danymi strony w bazie danych a logiką w klasie Java. Jeśli do strony zostanie dodane nowe pole, pasująca klasa Java musi zawierać to pole — w przeciwnym razie strona się zepsuje. Kod Java nie posiada wiedzy w czasie kompilacji na temat konfiguracji strony w bazie danych (każda baza danych klienta może mieć inną konfigurację), co zwiększa kruchość. Typowym rozwiązaniem jest WYBIERANIE * z jednej lub więcej tabel bazy danych, co pozwala na pewien stopień konfiguracji, które pola mogą być wyświetlane. Prowadzi to do skoncentrowanego na bazie danych kodu Java z dużą ilością wbudowanego języka SQL i niewielkim projektem zorientowanym obiektowo lub modelami domen. **Plany rozwiązań** Wprowadziliśmy do frameworka trójwarstwową architekturę podobną do MVC (kontroler -> usługa -> repozytorium) z modelami obiektowymi. Ogranicza możliwość dodawania pól do stron bez zmiany kodu bazowego. Zmiana umożliwia jednak programowanie w sposób obiektowy i tworzenie modeli dziedzinowych. Następnie planujemy coś zrobić z zależnością między bazą danych a kodem. Moim długoterminowym planem byłoby przeniesienie definicji stron z bazy danych do kodu (twoje standardowe widoki HTML&JS), ograniczając konfigurowalność, ale zmniejszając kruchość. Wszelkie niezgodności między stronami a Javą stałyby się wtedy błędami kompilatora podczas tworzenia aplikacji, a nie błędami w czasie wykonywania. **Pytanie (pytania)** 1. Czy uważasz, że ramowa praktyka definiowania widoku w bazie danych i kontrolera w kodzie to projekt dźwięku, czy coś, czym należy się zająć? 2. Jeśli uważasz, że sytuacja powinna zostać rozwiązana, czy mój długoterminowy plan wydaje się rozsądny? **Edycja:** Oprócz zdefiniowania układu, definicje widoków w bazie danych określają, które pola mają istnieć - "pobierz pole 'foobar' z kontrolera i pokaż je tutaj". Same poglądy tak naprawdę nie zawierają logiki. Klasy Java tworzące kopie zapasowe widoków zazwyczaj zawierają tysiące wierszy interfejsu użytkownika i logiki biznesowej.


title: Technologia dla C#, Windows, tworzenia gier 2D?

text: Potrzebuję popchnięcia we właściwym kierunku od kogoś bardziej doświadczonego w tworzeniu gier dla systemu Windows. Chcę napisać dla zabawy prostą grę na okna C# 2D (pomyśl coś w stylu starego Sim City lub Civilization). Kiedyś pisałem proste gry na Windowsa, ale przez długi czas byłem poza pętlą tworzenia gier. Jaka technologia byłaby dobra do szybkiego uruchomienia w dzisiejszych czasach? Szybkie wyszukiwanie w google, pokazuje DirectX, Managed DirectX, XNA, ale nie wiem o nich wystarczająco dużo, aby dokonać wyboru. Aby uczynić to pytanie bardziej konstruktywnym, czy ktoś mógłby wyjaśnić, jakie są dostępne opcje oraz jakie byłyby ich mocne i słabe strony?


title: Czy zajęcia z tylko jedną metodą stanowią problem?

text: Obecnie pracuję nad projektem oprogramowania, które wykonuje kompresję i indeksowanie nagrań z monitoringu wideo. Kompresja polega na podzieleniu obiektów tła i pierwszego planu, a następnie zapisaniu tła jako obrazu statycznego, a pierwszego planu jako ikonki. Ostatnio zacząłem przeglądać niektóre zajęcia, które zaprojektowałem w ramach projektu. Zauważyłem, że istnieje wiele klas, które mają tylko jedną metodę publiczną. Niektóre z tych klas to: * VideoCompressor (z metodą `compress`, która pobiera wejściowe wideo typu `RawVideo` i zwraca wyjściowe wideo typu `CompressedVideo`). * VideoSplitter (za pomocą metody `split`, która pobiera wejściowe wideo typu `RawVideo` i zwraca wektor 2 wyjściowych filmów wideo, każdy typu `RawVideo`). * VideoIndexer (z metodą `index`, która pobiera wejściowe wideo typu `RawVideo` i zwraca indeks wideo typu `VideoIndex`). Przyłapuję się na tym, że tworzę instancję każdej klasy tylko po to, aby wykonać wywołania, takie jak `VideoCompressor.compress(...)`, `VideoSplitter.split(...)`, `VideoIndexer.index(...)`. Pozornie uważam, że nazwy klas wystarczająco opisują ich zamierzoną funkcję i są w rzeczywistości rzeczownikami. Odpowiednio, ich metodami są również czasowniki. Czy to rzeczywiście problem?


title: Jakie narzędzia programistyczne poleciłbyś do tworzenia aplikacji .NET w Mono, które zapewniłyby mi taki sam wzrost produktywności jak Resharper?

text: Oprócz korzystania z IDE, takich jak MonoDevelop, jakiej kombinacji narzędzi używasz w rozwoju Mono, aby zapewnić taki sam wzrost wydajności, jaki normalnie można uzyskać, używając R# w VS2010? EDYCJA: Próbuję wyrzucić nawyk R# i przełączyć się na programowanie Mono w systemie Linux, ale trudno jest pozbyć się nawyku używania VS2010 + R# i potrzebuję alternatywnych narzędzi, aby przełamać ten nawyk.


title: Z jakich narzędzi korzystają programiści PHP?

text: > **Możliwe duplikaty:** > Jakie narzędzia przepływu pracy według najlepszych praktyk w zakresie tworzenia aplikacji internetowych > (PHP)? W przyszłym tygodniu zaczynam nową pracę jako programista PHP, która jest moją wymarzona pracą, ale będzie to praca zorientowana obiektowo, którą robiłem tylko w Javie podczas studiów. Moje pytanie dotyczy narzędzi PHP - jakie są najlepsze IDE (ja używam notepad++), jakie pakiety wersjonowania działają najlepiej, narzędzia do śledzenia błędów itp., więc zastanawiałem się, jakich narzędzi programiści PHP używają w swoim życiu zawodowym.


title: Czy „minimapa” Sublime poprawia produktywność?

text: Jestem całkiem wielkim fanem Sublime. Jedną z moich ulubionych funkcji jest możliwość przewijania pliku za pomocą skompresowanego obrazu tekstu w prawym górnym rogu (minimapa). Przeczuwam, że to ma pozytywny wpływ na produktywność: ![tutaj wpisz opis obrazu](http://i.stack.imgur.com/SkFIc.png) Czy przewijanie minimapy rzeczywiście poprawia produktywność? PS - Pytanie poboczne: Czy Sublime wymyślił ten pomysł, czy też zaczerpnął go z innego edytora tekstu?


title: Jeśli korzystasz z MFC, jak najlepiej było nauczyć się pojęć?

text: Obecnie pracuję z aplikacjami C++ MFC w Visual Studio 2008. Do tej pory spędziłem większość czasu pracując nad programowaniem Java Swing, które wydaje się nie być tak skomplikowane jak win32 czy MFC. Zauważyłem, że wydaje się, że istnieje wiele małych parametrów i specyfikacji, które są potrzebne do stworzenia nawet prostego elementu, takiego jak pasek stanu lub pasek menu. Spędziłem trochę czasu pracując nad biblioteką MSDN w tej sprawie, ale wydaje się, że nie wyjaśnia to, dlaczego wiele z tych parametrów i takich jest potrzebnych do skonfigurowania tych elementów. Zawsze uważam, że jestem w stanie owinąć głowę wokół rzeczy i zapamiętać je, jeśli rozumiem, dlaczego to robię. Jeśli programujesz przy użyciu MFC (lub podobnego frameworka), co uważasz za pomocne w procesie uczenia się? Czy polecasz jakąkolwiek stronę internetową, książki lub inne odniesienia? Wszelkie porady są mile widziane!


title: Styl kodowania ASP.NET

text: Staram się poprawić szybkość mojego kodowania i zastanawiałem się, jakie wskazówki mają zawodowcy. Obecnie mam tendencję do kodowania około 5-10 linijek kodu, a następnie testuję i powtarzam. Czy to typowe? A może lepiej jest kodować większe bloki kodu niż testować. Zawsze martwię się dużo kodowaniem niż uświadomieniem sobie, że cały kod, który napisałem, był błędny i musiałbym przepisać.


title: Wydarzenia z kalendarza Vaadin nie są pokazywane w nocy

text: W moim projekcie vaadin istnieje możliwość tworzenia wydarzeń, które są pokazywane przez kalendarz. Działa, z wyjątkiem sytuacji, gdy wydarzenie odbywa się w nocy, powiedzmy w nocy z 23 na 24, a kalendarz pokazuje tylko dzień 24. W tym przypadku część zdarzenia należąca do 24. ma być pokazana, ale tak nie jest. Kiedy przełączam się na widok tygodniowy, wydarzenie jest wyświetlane prawidłowo. Oto funkcja, w której pobieram dane i używam kontenera dla kalendarza: /* Wypełnij kalendarz z bazy danych */ void updateData() { final BeanItemContainer<TypeReservationEvent> container = new BeanItemContainer<TypeReservationEvent>(TypeReservationEvent.class); Parametry Map<String, Object> = new HashMap<String, Object>(); parametry.put("roomParent",wybranyPok); Zapytanie łańcuchowe = "SELECT DISTINCT res FROM EntityReservation res, EntityRoom r, EntityTable rt WHERE res.tableId = rt.id " + "AND rt.roomParent =:roomParent"; reservationList = fasada.list(zapytanie, parametry); for(EntityReservation rt : reservationList) { container.addBean(new TypeReservationEvent(rt)); } container.sort(new Object[]{"start"}, new boolean[]{true}); cal.setContainerDataSource(container, "caption", "description", "start", "end", "styleName"); // Wymuś odświeżenie kalendarza if(selectCalViewType.getValue() == selectWeeklyView) { setViewType(calViewType.DAILY); setViewType(calViewType.WEEKLY); } else if (selectCalViewType.getValue() == ChooseDailyView) { setViewType(calViewType.WEEKLY); setViewType(calViewType.DAILY); } } TIA


title: Jak poprawić logikę pętli w programowaniu?

text: Wiem, jak robić proste pętle, ale nie wiem, co się dzieje, gdy wiele pętli działa razem. Na przykład: for (i=0; i <= 9; i++){ document.write(linebreak); for (m=0; m <= 9; m++){ document.write(i); } } Czy jest sposób, abym mógł nauczyć się pętli od podszewki?


title: Interfejs (kontrakt), Generics (uniwersalność) i metody rozszerzające (łatwość użycia). Czy to dobry projekt?

text: Próbuję zaprojektować prostą platformę konwersji w oparciu o te wymagania: 1. Wszyscy programiści powinni przestrzegać wstępnie zdefiniowanego zestawu reguł, aby przekonwertować encję źródłową na encję docelową 2. Niektóre ogólne zasady powinny być możliwe do zastosowania w centralnym miejsce, bez ingerencji w kod programistów 3. Zarówno tworzenie konwerterów, jak i korzystanie z klas konwerterów powinno być łatwe. Aby rozwiązać te problemy w języku C#, przyszła mi do głowy myśl. Piszę to tutaj, chociaż w ogóle się nie kompiluje. Ale załóżmy, że C# kompiluje ten kod: utworzę ogólny interfejs o nazwie `IConverter` public interface IConverter<TSource, TTarget> where TSource : class, new() gdzie TTarget : class, new() { TTarget Convert(TSource source ); List<TTarget> Convert(List<TSource> sourceItems); } Deweloperzy zaimplementowaliby ten interfejs do tworzenia konwerterów. Na przykład: public class PhoneToCommunicationChannelConverter : IConverter<Phone, CommunicationChannle> { public CommunicationChannel Convert(Telefon) { // Logika konwersji } public List<CommunicationChannel> Convert(List<Telefon> telefony) { // Logika konwersji } } prostsze użycie tej klasy konwersji, wyobraź sobie, że dodajemy słowa kluczowe `static` i `this` do metod, aby przekształcić je w **Extension Methods** , i używaj ich w następujący sposób: List<Phone>phones = GetPhones(); Lista<KanałKomunikacyjny> kanały = telefony.Konwertuj(); Jednak to się nawet nie kompiluje. Mając takie wymagania, mogę wymyślić kilka innych projektów, ale każdemu z nich brakuje aspektu. Albo implementacja stałaby się trudniejsza, chaotyczna i wymykająca się spod kontroli, albo użycie stałoby się naprawdę trudne. Czy ten projekt w ogóle jest słuszny? Jakie alternatywy mogę mieć, aby spełnić te wymagania?


title: Modele zarządzania dla wieloinstytucjonalnych projektów open source

text: Pracuję nad projektem open source, który ma pełnoetatowych profesjonalnych programistów z kilku uniwersytetów oraz kilku innych organizacji. Produkt ma około tuzina wdrożeń, różnych odmian, wtyczek, powiązanych komponentów itp. Generalnie rozwój do tej pory był napędzany przez instytucje "drapiące się na własną rękę", ale starały się scalić ulepszenia z powrotem do centralnej bazy kodu. Ponieważ zaczyna dojrzewać, interesują mnie możliwe modele zarządzania open source. (Więc to pytanie nie brzmi „jakie są dobre rzeczy do zrobienia”, ale konkretnie „jakie istniejące, przetestowane modele warto przyjrzeć się i ewentualnie podążać”) Konkretne aspekty, które takie modele mogą obejmować: * Jak zmieniają się decyzje o dużym wpływie są dokonywane (i co się stanie, jeśli ktoś dokona dużych zmian bez wcześniejszego omówienia ich) * Kto zarządza publicznym wizerunkiem produktu (marketing produktu, z braku lepszego określenia) * Kto reprezentuje produkt w jakichkolwiek porównaniach z „konkurującymi” produktami * Czy ulepszenia stać się „podstawowymi”, „wtyczkami”, „produktami powiązanymi” itp. * Czy i w jaki sposób tworzone i publikowane są mapy drogowe * W jaki sposób obsługiwane są odmiany produktu (w tym przypadku wersje dla różnych dyscyplin naukowych) * Oczekiwania i obowiązki uczestników projekt * Oczekiwania i obowiązki instytucji, dla których pracują ci programiści Będziemy szukać czegoś tak lekkiego i nieformalnego, jak praktycznego.


title: Czy powinienem napisać interfejs API przed implementacją?

text: Ostatnio zagłębiałem się w bardziej "zorganizowane" programowanie i nauczyłem się, że powinienem programować do interfejsu, a nie implementacji. Mając to na uwadze, czy nie byłoby lepiej „naszkicować” projekt w interfejsach przed napisaniem dla niego implementacji tam, gdzie to możliwe? A jeśli tak jest, to w przypadku korzystania z bibliotek firm trzecich (np. Lidgren), czy powinienem je również pakować w interfejsy i rozwiązywać je za pomocą kontenerów IOC, czy jest w porządku, aby udostępnić je interfejsom?


title: Przeniesienie zaplecza z Parse.com do Amazon Web Services

text: Szukam wglądu od kogoś, kto używał przynajmniej AWS (jeśli nie również Parse.com). Moja aplikacja na iOS używa obecnie Parse.com do następujących celów: 1) do przechowywania danych użytkownika (poprzez tłumaczenie między JSON a danymi podstawowymi) 2) do uruchamiania funkcji javascript w celu aktualizacji mojej bazy danych o dane z sieci 3) do łatwego uwierzytelniania na Facebooku, co jest podstawą kont użytkowników, teraz kwalifikuję się do ogromnego kredytu hostingowego od AWS, więc staram się ocenić trudność zmiany (nie wspominając o nowych obawach dotyczących jakości Parse.com). Z tego, co przeczytałem, wygląda na to, że AWS oferuje różne opcje hostingu. Jednak w odniesieniu do (1) nie widziałem żadnej konkretnej wzmianki o tabelach JSON i jest to jedyny rodzaj bazy danych, który znam. Dlatego szukam lepszego zrozumienia, które opcje bazy danych AWS byłyby najbardziej zbliżone do bazy danych Parse.com opartej na JSON. Interesują mnie również wszelkie komentarze na temat (2) i (3) --- jakie funkcje AWS zapewniłyby najbliższe substytuty. Dziękuję Ci


title: Jaka jest struktura pakietów Curiosity?

text: Jak wygląda pakiet w sieci międzyplanetarnej NASA? Jest to oczywiście forma protokołu redundantnego, przechowywanego w odbiorniku i z wbudowaną kopią zapasową. Czy jest jakaś dokumentacja dotycząca struktury pakietów lub protokołu komunikacyjnego, który musi obejmować 14-minutową komunikację?


title: Tworzenie aplikacji a oprogramowanie pośredniczące w systemie Android

text: Mam 1 rok i 6 miesięcy doświadczenia na Androidzie. Całe moje doświadczenie dotyczyło tworzenia aplikacji. Ostatnio otrzymałem oferty od dwóch firm. Jeden oferuje mi profil do pracy w warstwie aplikacji, a drugi oferuje profil na oprogramowaniu pośredniczącym Androida. Czy możesz mnie poprowadzić, co byłoby lepsze? Czy rozwój oprogramowania pośredniczącego jest lepszy niż tworzenie warstwy aplikacji z perspektywy kariery pod względem pieniędzy i innych możliwości? Naprawdę mam duży dylemat. Każda pomoc byłaby mile widziana. Również czy ktoś może mi powiedzieć, kto zarobi więcej - facet od warstwy aplikacji przez pięć lat czy facet od oprogramowania pośredniczącego? Z góry dziękuję.


title: Jak wprowadzić czysty kod?

text: Mój zespół liczy około 18 członków, a kod jest ogólnie dobry, użycie TDD i dobrych specyfikacji sprawia, że kod działa. Ale myślę, że nadużywają komentarzy na rzecz pisania czystszego, bardziej czytelnego kodu. Chciałbym przedstawić im tę koncepcję i zastanawiam się, jak mogę to zrobić na większą skalę, nie przesiadując z każdym z nich nad ich kodem i wyjaśniając, jak można go ulepszyć. Różni się to od sugerowanego duplikatu, ponieważ wydaje mi się, że już wiem, jak napisać czysty kod. To, czego szukam, to jak wprowadzić _mój zespół_ do pisania czystego kodu?


title: najlepszy sposób na przechowywanie danych z wywołania ajax

text: Piszę aplikację webową, w której pobieram dane z serwera poprzez żądania `AJAX` i dynamicznie generuję zawartość `HTML`. Mam trochę danych do załadowania, wygenerowania z nich HTML i `dołączenia` do mojej strony internetowej. Myślałem teraz o dwóch rozwiązaniach: 1) Wykonaj wywołanie AJAX, wygeneruj kod HTML z odpowiedzi, ustaw `display: none` na to, kiedy potrzebuję, a kiedy będę potrzebował później, ustaw `display: block;` zamiast tego i ` hide()` inne treści, których nie muszę wyświetlać (zawsze generowane dynamicznie). 2) Zapisz odpowiedź AJAX w `zmiennych`, usuń wygenerowany wcześniej HTML, wygeneruj ponownie ze `zmiennej`, gdy będę tego potrzebować później. Nie wiem, czy dobrze to wyjaśniłem, ale chciałbym wiedzieć, co jest najlepszą praktyką pod względem wydajności klient/serwer.


title: Rozwiązania Qt zostały ponownie licencjonowane, czy mogę teraz bezpośrednio korzystać z src?

text: Mam komercyjną aplikację, która używa składnika Qt Solutions. Do niedawna komponent ten był licencjonowany na licencji LGPL, więc zmuszony byłem korzystać z komponentu w formie biblioteki współdzielonej. Zgodnie z tym wpisem http://qt.digia.com/Product/Qt-Add-Ons/Qt-Solutions-Archive/, rozwiązania Qt zostały ponownie licencjonowane z licencją BSD przedstawioną poniżej. Moje pytanie brzmi, czy mogę używać kodu źródłowego bezpośrednio w mojej aplikacji, czy nadal muszę utworzyć bibliotekę współdzieloną? (odpowiednie informacje o prawach autorskich zostaną odtworzone niezależnie) Licencja BSD: > * * * > > To oprogramowanie korzysta z komponentu Qt Solutions, który jest objęty następującą > licencją: > > Copyright (C) 2013 Digia Plc i/lub jej spółka zależna (- j.w.). > > Redystrybucja i używanie w formie źródłowej i binarnej, z > modyfikacją lub bez, jest dozwolone pod warunkiem, że spełnione są następujące warunki: > > * Redystrybucja kodu źródłowego musi zawierać powyższą informację o prawach autorskich, > tę listę warunków i następujące zastrzeżenie . > > * Redystrybucje w formie binarnej muszą zawierać w dokumentacji i/lub innych materiałach dostarczonych wraz z dystrybucją powyższą informację o prawach autorskich, > tę listę warunków oraz następujące wyłączenie odpowiedzialności. > > * Ani nazwa Digia Plc i jej Podmiotów Zależnych, ani nazwy > jej współpracowników nie mogą być używane do promowania lub promowania produktów > wywodzących się z tego oprogramowania bez uprzedniej pisemnej zgody. > > > > ** NINIEJSZE OPROGRAMOWANIE JEST DOSTARCZANE PRZEZ WŁAŚCICIELI PRAW AUTORSKICH I WSPÓŁPRACOWNIKÓW „TAK JAK JEST” ORAZ WSZELKIE WYRAŹNE LUB DOROZUMIANE GWARANCJE, W TYM MIĘDZY INNYMI DOROZUMIANE GWARANCJE PRZYDATNOŚCI HANDLOWEJ I PRZYDATNOŚCI DO SZCZEGÓLNEGO CELU > . W ŻADNYM WYPADKU WŁAŚCICIEL PRAW AUTORSKICH ANI > WSPÓŁPRACOWNICY NIE PONOSZĄ ODPOWIEDZIALNOŚCI ZA JAKIEKOLWIEK BEZPOŚREDNIE, POŚREDNIE, PRZYPADKOWE, SZCZEGÓLNE, > PRZYKŁADOWE LUB WTÓRNE SZKODY (W TYM MIĘDZY INNYMI > ZAKUP TOWARÓW LUB USŁUG ZASTĘPCZYCH; UTRATĘ DANYCH, UTRATĘ UŻYTKOWANIA, LUB ZYSKÓW; > LUB PRZERWANIE W DZIAŁALNOŚCI) JEDNAK SPOWODOWANE I NA DOWOLNEJ TEORII ODPOWIEDZIALNOŚCI, > CZY W KONTRAKCIE, ODPOWIEDZIALNOŚCI ŚCISŁEJ LUB CZYNNE (W TYM ZANIEDBANIA LUB > W INNY SPOSÓB) WYNIKAJĄCE Z KORZYSTANIA Z TEGO OPROGRAMOWANIA, NAWET MOŻLIWOŚCI TAKICH USZKODZEŃ. > > * * *


title: Dlaczego istnieje duża rozbieżność między częstotliwością znaczników przepełnienia stosu a indeksem TIOBE?

text: Przeglądając ostatnio TIOBE Programming Community Index (wrzesień 2012) zauważyłem następującą kolejność: 1. C 2. Java 3. Objective-C 4. C++ 5. C# 6. PHP Jednak patrząc na częstotliwości tagów przepełnienia stosu, sytuacja wygląda następująco: 1. C# 2. Java 3. PHP 4. JS 5. Android 6. jquery (JS) 7. iphone (Objective-C) 8. C++ (Java jest liderem w rozliczaniu postów otagowanych na Androida w/ o znacznik Java). JavaScript również prawdopodobnie przewyższył PHP w ogólnej liczbie programistów? Zdaję sobie sprawę, że częstotliwości znaczników mogą nie być najlepszym wskaźnikiem, ale prawdopodobnie jest to jednak wystarczająca miara. Czego mi brakuje, co wyjaśnia tę rozbieżność, szczególnie w przypadku `ANSI C` i `JavaScript` (11 w indeksie TIOBE)? **Linki** : * Wikipedia Indeks TIOBE * Przejrzysty indeks popularności języków * Praca Trendy w zakresie języków ciągników * Najpopularniejsze języki Github * Langpop


title: Czy można/należy zastosować zasadę pojedynczej odpowiedzialności do nowego kodu?

text: Zasada jest zdefiniowana jako moduły mające _jeden powód do zmiany_. Moje pytanie brzmi, na pewno te powody do zmiany nie są znane, dopóki kod nie zacznie się zmieniać? Prawie każdy fragment kodu ma wiele powodów, dla których _może_ się zmienić, ale z pewnością próba przewidzenia ich wszystkich i zaprojektowania kodu z myślą o tym może skończyć się bardzo słabym kodem. Czy nie lepiej zacząć stosować SRP dopiero wtedy, gdy pojawiają się prośby o zmianę kodu? Dokładniej, gdy fragment kodu zmienił się więcej niż raz z więcej niż jednego powodu, co dowodzi, że ma więcej niż jeden powód do zmiany. Próba odgadnięcia przyczyn zmian brzmi bardzo anty-zwinnie. Przykładem może być fragment kodu, który drukuje dokument. Pojawia się prośba o zmianę go na wydruk w formacie PDF, a następnie pojawia się druga prośba o zmianę w celu zastosowania innego formatowania do dokumentu. W tym momencie masz dowód na więcej niż jeden powód do zmiany (i naruszenia SRP) i powinieneś dokonać odpowiedniej refaktoryzacji.


title: Dlaczego należy unikać „rozszerzeń” dziedziczenia Java

text: Dobry dzień! James Gosling powiedział: „W miarę możliwości należy unikać dziedziczenia implementacji”. zamiast tego użyj dziedziczenia interfejsu. Ale dlaczego? Jak uniknąć dziedziczenia struktury obiektu za pomocą słowa kluczowego „extends”, a jednocześnie uczynić nasz kod Object Oriented? Czy ktoś mógłby podać przykład Object Oriented ilustrujący tę koncepcję w scenariuszu typu „zamawianie książki w księgarni?” Z góry dziękuję.


title: Zamieszanie Little and Big endian

text: Żeby się upewnić, czy dobrze to rozumiem. Czy to prawda, że małe procesory endian odczytują adresy pamięci od najwyższego do najniższego adresu, a procesory big endian mają odczytywać je od najniższego do najwyższego adresu? Zamieszanie pojawiło się, gdy pomyślałem, że to prawda, że małe procesory endian odczytują same dane w kolejności rezerwowej, a nie tylko pamięć, czy w każdym razie oba? Czytałem wystarczająco dużo o tym, jak dane są rozmieszczane w pamięci i chcę tylko wiedzieć, jak dane są interpretowane przez oba rodzaje procesorów?


title: Czy głupie przykłady to zły sposób na naukę OOP?

text: Niektóre tutoriale podają głupie przykłady do nauczania OOP, na przykład: Car _class_ i myCar _object_ , itp. Czy jest to uważane za złe w nauce OOP, zakładając, że te przykłady nie mają zastosowania do prawdziwych problemów programistycznych?


title: Czy *kiedy* można złapać StackOverflowError w Javie?

text: Kiedyś myślałem, że tak nie jest, ale wczoraj musiałem to zrobić. Jest to aplikacja, która używa Akka (implementacja systemu aktorskiego dla JVM) do przetwarzania zadań asynchronicznych. Jeden z aktorów dokonuje pewnych manipulacji PDF, a ponieważ biblioteka jest błędna, co jakiś czas umiera z błędem „StackOverflowError”. Drugim aspektem jest to, że Akka jest skonfigurowana do zamykania całego systemu aktora, jeśli zostanie wykryty błąd krytyczny JVM (np. StackOverflowError). Trzecim aspektem jest to, że ten system aktora jest osadzony w aplikacji internetowej (z powodów WTF, starszych), więc gdy system aktora jest zamknięty, aplikacja internetowa nie. Efekt netto jest taki, że po wystąpieniu „StackOverflowError” nasza aplikacja do przetwarzania zadań staje się po prostu pustą aplikacją sieciową. Jako szybkie rozwiązanie musiałem złapać rzucany `StackOverflowError`, aby pula wątków systemu aktorów nie została zerwana. To skłania mnie do myślenia, że może czasami jest w porządku wyłapywać takie błędy, szczególnie w takich kontekstach? Kiedy istnieje pula wątków przetwarzająca dowolne zadania? W przeciwieństwie do `OutOfMemoryError` nie wyobrażam sobie, jak `StackOverflowError` może pozostawić aplikację w niespójnym stanie. Stos jest czyszczony po takim błędzie, więc obliczenia mogą przebiegać normalnie. Ale może brakuje mi czegoś ważnego. Zauważmy też, że jestem przede wszystkim za naprawieniem błędu (w rzeczywistości naprawiłem już SOE w tej samej aplikacji kilka dni temu), ale naprawdę nie wiem, kiedy to może powstać taka sytuacja. Dlaczego lepiej byłoby zrestartować proces JVM zamiast przechwytywać `StackOverflowError`, oznaczyć to zadanie jako nieudane i kontynuować działalność? Czy jest jakiś ważny powód, aby nigdy nie łapać SOEs? Poza „najlepszymi praktykami”, które jest niejasnym terminem, który nic mi nie mówi.


title: Jaki jest wydajny algorytm losowego przydzielania puli obiektów rodzicowi przy użyciu określonych reguł?

text: Potrzebuję kilku eksperckich odpowiedzi, które pomogą mi określić najbardziej wydajny algorytm w tym scenariuszu. Rozważ następujące struktury danych: typ B { rodzic; } wpisz A { ustaw<B> dzieci; liczba całkowita minimalnaDzieciAllowed; liczba całkowita maksymalnaDzieciAllowed; } Mam sytuację, w której muszę pobrać wszystkie osierocone dzieci (mogą być ich setki tysięcy) i przypisać je LOSOWO do rodziców typu A w oparciu o poniższe zasady. 1. Pod koniec pracy nie powinno być żadnych sierot. 2. Pod koniec pracy żaden przedmiot A nie powinien mieć mniej dzieci niż zakładane minimum. 3. Pod koniec pracy żaden obiekt A nie powinien mieć więcej dzieci niż to z góry wyznaczone maksimum. 4. Jeśli skończą nam się obiekty A, powinniśmy utworzyć nowe A z domyślnymi wartościami minimum i maksimum i przypisać pozostałe sieroty do tych obiektów. 5. Rozmieszczenie dzieci powinno być jak najbardziej równomiernie rozłożone. 6. Może być już kilka dzieci przydzielonych do A przed rozpoczęciem pracy. Bawiłem się, jak to zrobić, ale obawiam się, że po prostu skończę w pętli wśród rodziców posortowanych od najmniejszych do największych, a następnie złapię sierotę dla każdego rodzica. Zastanawiałem się, czy istnieje bardziej wydajny sposób na poradzenie sobie z tym? **EDYTUJ:** * Rozwijając kryteria równomiernego rozmieszczenia dzieci, powinniśmy starać się unikać sytuacji, w której ktokolwiek A ma 2 lub więcej dzieci niż jakikolwiek inny A, chyba że zaczął w ten sposób. Na przykład, jeśli A1 ma 4 dzieci, A2 i A3 mają po 1 dziecku i są 2 sieroty, to A2 i A3 powinny być przydzielone sierotą, tworząc równy rozkład 4, 3 i 3 dzieci na każde A. * Tak, rozumiem, że możemy skończyć tam, gdzie pozostała jedna sierota i A, które nie osiągnęło minimum. Ten wyjątkowy przypadek będzie obsługiwany przez oddzielny algorytm, który spróbuje równomiernie podzielić A na dwa obiekty i przydzielić do nich pozostałe sieroty. **EDYCJA: 2** Ok, źle zrozumiałem wymagania w mojej sytuacji. Model danych dla A pokazuje minimalną i maksymalną właściwość, ale w rzeczywistości powinno to być ustawienie globalne dla każdego A. W istocie jest to pominięte wymaganie, które wymaga późniejszej refaktoryzacji modelu danych. Wszystkie A będą miały teraz to samo minimum i maksimum. To faktycznie znacząco zmienia rzeczy! Przepraszam za zamieszanie.


title: Powtarzalne rysowanie w JavaScript i Canvas

text: Tworzenie strony HTML5 przy użyciu płótna i javascript w celu narysowania określonej liczby muzycznych pięciolinii na stronie, rozmieszczonych z góry ustaloną wartość między nimi. To, co mam, jest przerysowywane na wierzchu płótna 10 razy, a to, czego naprawdę potrzebuję, to coś, co jest odsunięte za każdym razem, gdy pętla jest rysowana. Próbowałem utworzyć JSFiddle, ale niczego nie rysuje (co jestem pewien, że jest to błąd użytkownika), więc oto plik js: window.onload = function(){ var canvas = document.getElementById('sheetmusic' ); c = canvas.getContext('2d'); c.fillStyle = 'biały'; c.fillRect(0,0, płótno.width, płótno.wysokość); // Narysuj pięciolinie for (var i=0; i<10; i++){ c.strokeStyle = 'czarny'; c.ŚcieżkaRozpoczęcia(); c.przenieśDo(0,10); c.lineTo(szerokość.płótna,10); c.skok(); c.moveTo(0,20); c.lineTo(szerokość.płótna,20); c.skok(); c.przenieś do (0,30); c.lineTo(szerokość.płótna,30); c.skok(); c.moveTo(0,40); c.lineTo(szerokość.płótna,40); c.skok(); c.moveTo(0,50); c.lineTo(szerokość.płótna,50); c.skok(); // biały znak personelu c.fillStyle = 'biały'; c.fillRect(0,52, szerokość.płótna, 50); } }; Po prostu nie jestem pewien, jak dodać „i” z mojej „pętli” do atrybutu „height” mojego „stroke”.


title: Jak rozpowszechniać oprogramowanie naukowe z jak najmniejszą liczbą zależności?

text: W ramach moich badań piszę dużo kodu w Pythonie i MATLAB-ie, którego nigdy nie trzeba nikomu udostępniać. Nawet jeśli muszę rozpowszechniać swoje oprogramowanie, Python i MATLAB, oba są interpretowane, sprawiają, że udostępnianie jest stosunkowo proste. Teraz piszę oprogramowanie w C++, które chciałbym rozpowszechniać. Potrafię skompilować oprogramowanie na własnym komputerze, ale nie rozumiem tego, co należy zrobić, aby udostępnić oprogramowanie innym ludziom. Najpierw więcej o moim projekcie: piszę trochę kodu do obliczania i wyświetlania wizualizacji. Projekt jest oparty na grafach, więc korzystam z biblioteki grafów LEMON. Eksploruję implementacje VTK i OpenGL w celu wyświetlania wizualizacji. Chciałbym napisać wiązania Pythona i MATLAB dla użytkowników tych środowisk, aby mogli korzystać z mojego oprogramowania, a także chciałbym produkować wersje dla Windows i Linux (nie myślałem jeszcze o OS X...). Jako przykład weźmy bibliotekę grafów LEMON. Jest to zbiór nagłówków wraz z małym wspólnym obiektem. W moim systemie programistycznym kompiluję bibliotekę za pomocą CMake i łączę ją z moim projektem. Teraz powiedz, że chcę przekazać moje oprogramowanie komuś działającemu w systemie Windows. Chcę, aby mogli pobrać instalator, kliknąć przycisk lub dwa i mieć wszystko załatwione. Nie chcę, żeby martwili się instalacją biblioteki LEMON czy OpenGL. Nie powinni niczego świadomie kompilować. czy to możliwe? Mam wrażenie, że tak, ale szukam referencji za mało. Mam niejasny pomysł, że jeśli skompiluję plik binarny w systemie Windows, powinienem być w stanie rozesłać go do każdego, kto ma system operacyjny Windows. Ale co z bibliotekami, z których korzystam? Zgaduję, że muszę je statycznie połączyć w systemie Windows, a to rozwiąże problem zależności. Ale z tyłu głowy wyczytałem, że statyczne linkowanie nie jest dobrą praktyką (a może to tylko w Linuksie?). Jak możesz powiedzieć, jestem trochę zagubiony. Byłbym wdzięczny za popchnięcie we właściwym kierunku i kilka odniesień do przeczytania, jeśli znasz jakieś!


title: Zachęcasz do przechowywania danych logowania w keystore?

text: Czy podczas tworzenia modułu logowania do aplikacji internetowej sugerujesz zachowanie nazwy użytkownika i hasła w magazynie kluczy? Załóżmy, że magazyn kluczy był przechowywany w bardzo bezpiecznym miejscu na serwerze WWW.


title: Algorytm do wyboru użytkownika

text: Potrzebuję algorytmu do wybierania użytkownika. Użytkownicy są identyfikowani literami {A, B, C, ...} i uszeregowani według numerów {1, 2, 3, ...}. Pozycja to stopień prawdopodobieństwa wyboru, więc prawdopodobieństwo wybrania użytkownika z pozycji 2 jest dwa razy większe niż z użytkownika z pozycji 1, a pozycja 4 jest czterokrotnie większa itd. Załóżmy, że czterech użytkowników to {A, B, C, D}, odpowiednio z rangą {1, 1, 5, 2}. Tabela użytkowników może przechowywać rangę: USER RANK A 1 B 1 C 5 D 2 Jak wybrać użytkownika na podstawie rangi? Moim pierwszym pomysłem na algorytm jest zsumowanie wszystkich rang 1 + 1 + 5 + 2, aby uzyskać sumę 9. Następnie przypisz każdemu użytkownikowi podzakresy od 1 do 9, gdzie rozmiar podzakresu to ranga użytkownika. A więc A ma zasięg [1, 1], B ma zasięg [2, 2], C ma zasięg [3, 7] (5 możliwości ze względu na rangę 5), a D ma zasięg [8, 9]. Tabela wygląda następująco: USER RANK RANGE A 1 [1, 1] B 1 [2, 2] C 5 [3, 7] D 2 [8, 9] Następnie oblicz losową wartość od 1 do 9 i znajdź użytkownika którego zakres zawiera tę wartość. Jeśli więc losowa wartość wynosi 4, wybierany jest użytkownik C, ponieważ 4 mieści się w zakresie [3, 7]. Osiąga to uczciwość w oparciu o rangę. Jeśli w ten sposób powtórzysz losowe wybieranie, użytkownicy będą wybierani sprawiedliwie i żaden użytkownik nie będzie głodny. Jednak wydaje się to niechlujne, ponieważ aby dodać lub usunąć użytkowników, muszę przeliczyć wszystkie zakresy. Tutaj usuwa się użytkownika C (przelicz zakres użytkownika D): RANK RANGE A 1 [1, 1] B 1 [2, 2] D 2 [3, 4] A tutaj zmienia się użytkownik A, aby miał rangę 2 (przelicz zakres z B i D): RANGA UŻYTKOWNIKÓW ZAKRES A 2 [1, 2] B 1 [3, 3] D 2 [4, 5] Jaki jest najlepszy algorytm do wybierania użytkownika? Z pewnością ponowne obliczanie zakresów dla każdego dodanego, usuniętego lub zaktualizowanego użytkownika jest nieoptymalne. Czy istnieje dobrze znana funkcja lub algorytm, który może pomóc? * * * AKTUALIZACJA: @rwong sprawił, że pomyślałem o grupowaniu ludzi według rangi, a następnie wybraniu rangi zamiast wybierania użytkownika. Z **jedną** osobą w każdej randze, zmieniasz losowo ukształtowane zakresy w bardzo liniowo rosnące zakresy (jedna kropka to jedna szansa na wybranie): Pozycja 1: * Pozycja 2: * * Pozycja 3: * * * Ranga 4: * * * * Ranga 5: * * * * * Działa świetnie dla dokładnie jednej osoby na rangę, ale rozpada się, gdy masz dużo osób na randze 1, gdzie ich szanse powinny wzrosnąć o liczbę osób w obrębie tej rangi, prawdopodobnie wyprzedzając szanse wyższych rang. Teraz wracamy do nieregularnego kształtu i musimy z niego wybierać. Znajomy wskazał mi samplowanie Odrzucenia. To wydaje się być świetnym rozwiązaniem, gdzie wybierasz losową współrzędną x i y, sprawdzasz, czy pasuje do kształtu, a jeśli tak, teraz wybraliśmy rangę. Następnie wybierz losową osobę w tej randze. Aby pokazać to rozwiązanie, oto kształt z wieloma osobami w każdej randze. Dla rangi 2 jest 5 osób, więc 2 x 5 = 10 szans: Liczba użytkowników Ranga Szanse(wykres) Szanse(liczba) 5 1 * * * * * 5 5 2 * * * * * * * * * * 10 1 3 * * * 3 0 4 0 1 5 * * * * * 5 Algorytm polega na wybraniu losowego rzędu (jak wybranie współrzędnej x) i losowej wartości od 1 do max(szanse) (jak wybranie współrzędnej y ). Sprawdź, czy jest to mniej niż lub równa liczbie szans na tej pozycji. Jeśli nie, powtarzaj, dopóki nie uzyskasz prawidłowej rangi i szansy. To dba o prawdopodobieństwo rozkładu. Teraz, gdy wybrałeś prawidłową rangę, w tym momencie po prostu wybierasz losową osobę w tej randze. Gotowe! Piękno polega na tym, że aby dodać lub usunąć kogoś, zwiększasz lub zmniejszasz kolumnę liczby użytkowników i przypisujesz nową zmianę (liczbę). Dwie małe bardzo proste aktualizacje. Złożoność pamięci i złożoność czasowa dodawania/usuwania/aktualizowania użytkownika, a także złożoność wybierania użytkownika jest niczym, jak w przypadku O(1). Pogrupowaliśmy użytkowników według rangi i przechwyciliśmy liczbę użytkowników w każdej randze, następnie obliczyliśmy szanse dla tej rangi i użyliśmy prostego algorytmu zapętlania, aby wybrać losowe wiersze i wartości szans, aż otrzymamy trafienie, a na koniec wybraliśmy losową osobę o tej randze.


title: Java: czy w tym przypadku użyłbyś EnumSet?

text: Mam taki dziwny scenariusz, w którym do budowy i zapytania HQL używa się pewnej właściwości Javy, a typ pola to `Boolean`, tj. jest zapakowany w pudełko. Zastanawiałem się dlaczego, ponieważ tak naprawdę nie lubię myśleć o wartościach logicznych jako mających trzy możliwe wartości: „prawda”, „fałsz” i „null”. Niedawno dowiedziałem się, że wartość `null` faktycznie ma semantykę w tym systemie. Semantyka to: „prawda” oznacza „tylko nieobejrzane”, „fałsz” oznacza „tylko oglądane”, a null oznacza „wszystkie”. Tak więc, jeśli ma wartość null, pole jest ignorowane podczas budowania zapytania HQL, tak aby wynik końcowy zawierał zarówno nieprzejrzane, jak i przeglądane wyniki. Moim zdaniem jest to przypadek, w którym należy użyć enum. Coś takiego: enum ViewStatus { VIEWED, UNVIEWED; } Moim dylematem jest teraz, czego użyć dla trzeciego przypadku, który powinien reprezentować połączenie tych dwóch stałych? Dwie opcje to: 1. Wprowadź trzecią stałą wyliczeniową, `WSZYSTKO`. enum ViewStatus { ZOBACZONE, NIEZOBACZONE, WSZYSTKIE; } 2. Użyj `EnumSet`. `EnumSet` w zasadzie istnieje specjalnie do tego celu, ale... wydaje się, że są to tylko dwa znacznie narzuty. Zwłaszcza podczas odczytywania wartości w części kodu budującej HQL. No to o czym myślisz? Czy mam przejść z trzecią stałą wyliczenia i refaktoryzować do „EnumSet”, gdy zajdzie taka potrzeba? Dziękuję! ### Aktualizacja Pójdę do `EnumSet`, ponieważ chcę wprowadzić metody na tym enum, których wywoływanie na `ALL` nie miałoby sensu. Na przykład `ViewStatus.isViewed()`.


title: Jak uniknąć efektu drugiego systemu?

text: http://en.wikipedia.org/wiki/Second-system_effect > Efekt drugiego systemu odnosi się do tendencji małych, eleganckich i > udanych systemów do posiadania jako następców słoniowatych, pełnych funkcji potworności. kontynuacja projektu, który będzie dzielić tę samą bazę kodu, co poprzedni projekt, jak kontrolować drugi efekt systemu? Jak powstrzymać się od przesadzania z przepisywaniem niestabilnych systemów? Jak ograniczyć nowe funkcje „czy nie byłoby fajnie, gdyby...”? Uważam, że jednym z największych czynników jest samozadowolenie ze znajomości kodu. Dodanie nowych funkcji może być bardzo łatwe poprzez „hakowanie” systemów, które znasz od środka i na zewnątrz. Jednak krótkoterminowe korzyści są niwelowane przez spaghetyzację kodu, którą może wytworzyć kilka iteracji tego podejścia. Jak można zmusić programistów do prawidłowego zaprojektowania i zaimplementowania funkcji, gdy rozwiązanie „szybkiego hakowania” jest tak kuszące?


title: Czy istnieją repozytoria wersji, które implementują komentowanie wersji innych niż ustalona pojedyncza wiadomość o zatwierdzeniu?

text: Sangdol zapytał: Dlaczego nie mogę edytować i zatwierdzać wiadomości SVN? Istnieją dobre powody, aby zachować indywidualne zapisy „tak jak są” dla celów historycznych. Istnieje jednak prawdopodobnie obiektywne zagrożenie w nieograniczaniu rozpowszechniania i wykorzystywania wprowadzających w błąd i niebezpiecznych danych. Na bok: Z pewnością czasami należy po prostu podlizywać się, że popełnili błąd. Poza tym, poza tym, wyraźnie korzystne wydaje się posiadanie jakiegoś mechanizmu rejestrowania i dzielenia się jak najlepszymi informacjami. Wyraźnie korzystne wydaje się również posiadanie jakiegoś mechanizmu poprawiania „złych danych” i informowania innych o „niebezpiecznych danych”. W wątku Sangdol l0b0 komentuje: > Masz rację. We wszystkich systemach VCS istnieje fundamentalnie błędne założenie projektowe >, jakie kiedykolwiek widziałem: Zatwierdzenie ma jeden komunikat o zatwierdzeniu, który jest niezmienny. Jak mówi Alex >, powinniśmy "zezwolić na wiele wersji komunikatu zatwierdzenia". Aby pytanie było mniej subiektywne, twoje odpowiedzi powinny być obiektywnie lepszą praktyką niż „Zasada Mojżesza”: „Zrób to dobrze za pierwszym razem, rzeźbimy tego szczeniaka w kamieniu” i odnosić się do umiejętności radzenia sobie z jednym lub więcej problemami wzdłuż linii (chcę zaktualizować i zmienić tę listę, jeśli są lepsze sugestie): Załóżmy, że odkrywam, że wiadomość dotycząca zatwierdzenia, którą wprowadziłem miesiąc temu, jest myląca, myląca i wręcz błędna. Czy nie powinienem być w stanie dodać notacji korygującej, która będzie widoczna dla każdego, kto zobaczy nieprawidłową wiadomość? (Zgadzam się, że oryginalna wiadomość powinna być łatwo dostępna i niezmodyfikowana, a sama zmiana powinna być śledzona i opatrzona znacznikiem czasu. Ale nie zgadzam się, że stanowi to „zmieniającą się historię”). – komentarz Davida Schwartza z pytania Sangdol.


title: Jak wycenić konsultacje programistyczne dla firmy IT?

text: Nie jest to bardzo rzadkie pytanie programistyczne, ale dotyczy ono pracy niezależnego programisty i myślę, że możesz mi pomóc, więc może to w porządku? Więc jedna firma deweloperska poprosiła mnie o konsultacje programistyczne. Powinno być tak, że firma może do mnie zadzwonić, zadawać pytania i uzyskiwać odpowiedzi, jak to zrobić, jak to zrobić i tak dalej. Nigdy nie wykonywałem takiej pracy i myślę, jak najlepiej radzić sobie z taką współpracą. Czy powinienem ładować za godzinę? Mogą to być krótkie pytania, przez telefon lub e-mail, a ich obliczenie i oszacowanie czasu i kosztów może być trudne. Czy powinienem pobierać opłaty za konsultację? A jeśli o czymś nie warto wspominać i krótkich pytań będzie więcej, ale jest ich dużo? Czy powinienem pobierać opłatę miesięczną? Czy zrobiłeś jakieś „konsultacje programistyczne”? Cholera, nawet nie wiem, jaka jest właściwa nazwa dla tego rodzaju pracy. Czy znasz jakieś strony lub słowa kluczowe, które mogłyby pomóc mi uzyskać więcej informacji na temat tego rodzaju współpracy?


title: czy jest coś innego, jak WPF, które można uruchomić w Linuksie i Macu?

text: Szukam czegoś innego, co ma tę samą funkcjonalność `WPF` (animacja, 3D,...), ale może działać na innych platformach (Linux, Mac,...), coś potężnego, szybkiego do rozwijania, może tworzyć własne niestandardowe stylizacja na podstawowym elemencie


title: Liczba kombinacji

text: Jak uzyskać liczbę kombinacji ( C(5,4) ) bez używania rekurencji w C? Czy jest jakaś inna metoda lub wbudowana biblioteka, aby to zrobić?


title: Jak zaimplementować rozproszony serwer proxy z limitami?

text: Jestem w trakcie opracowywania skalowalnego proxy (Linux/C/C++, moduły Nginx lub niestandardowy serwer HTTP) do obsługi przychodzących żądań HTTP i przekierowywania ich do innych lokalizacji w oparciu o parametry zawarte w samym żądaniu przychodzącym (IP, na przykład czas) lub czynniki zewnętrzne (stąd użycie modułu Nginx zdolnego do pobierania czynników zewnętrznych). Jednak trudna część dotyczy kwot. Na przykład chciałbym móc blokować żądania proxy pochodzące z adresu IP po przekroczeniu dziennego limitu przydziału. Wdrażanie kwot nie jest trudne. Jednak posiadanie limitów działa w środowisku rozproszonym (gdzie idealnie wszystko jest współdzielone - nic) nie jest trywialne. Rzeczywiście, stan przydziału musi być udostępniony wszystkim rozproszonym procesom, aby mogły wiedzieć, czy powinny kontynuować, czy nie. Posiadanie centralnej obsługi kwot oznacza używanie zamków. To sprawia, że myślę, że występy spadną bardzo szybko. Blokowanie statusu przydziałów za każdym razem, gdy obsługiwane jest żądanie proxy, nie wydaje mi się rozwiązaniem. Jakieś wskazówki ?


title: Jak wybrać odpowiedni język programowania dla mojej aplikacji bez dużego doświadczenia w programowaniu?

text: Mam własny pomysł na aplikację internetową i nie jestem programistą. Aplikacja będzie działać podobnie do Facebooka i Twittera, profili i kanałów. Nauczyłem się trochę teorii informatyki, aż do OOP, ale nie mam praktycznego doświadczenia. Czy bez żadnego doświadczenia mogę ocenić różne dostępne języki i platformy? Na jakie rzeczy powinienem patrzeć? Łatwość konfiguracji? Ilu ma obserwujących? Jak mogę ocenić, czy język będzie miał potrzebne mi możliwości?


title: Co mogę zrobić, aby pomóc użytkownikom w tworzeniu raportów samoobsługowych?

text: Pracuję w Reporting Services 2008 i stale tworzę raporty ad hoc. Chcielibyśmy używać PowerPivot na Sharepoint, ale utknęliśmy na Sharepoint 2007. Korzystanie z łatwego oprogramowania do raportowania, takiego jak Tableau Server, byłoby fantastyczne, ale nie możemy sobie na to pozwolić SSRS Report Builder niestety nie okazał się zbyt pomocny. Próbowałem wymyślić sposoby wykorzystania programu Excel / PowerPivot lub dowolnego innego (darmowego lub niedrogiego) narzędzia. Musimy tylko być w stanie dostarczyć użytkownikom więcej danych, aby mogli samodzielnie analizować. Jest to obszar, który nasz zespół IT jako całość musi poprawić. Używamy SSRS 2008 i SQL Server 2008. Nie mamy też hurtowni danych, jest w trakcie prac...


title: git: posiadanie osobnego folderu do rozwoju, dlaczego?

text: do tej pory używałem dropboxa jako mojego głównego vcs (nie jest, ale jak na jednego dewelopera robi to całkiem przyzwoicie). Postanowiłem jednak spróbować git i sprawdzić, czy pasuje do moich potrzeb. Dzisiaj czytałem ten samouczek i w pewnym momencie mówi on: Jedną z rzeczy, do których powinieneś się przyzwyczaić, jest tworzenie w oddzielnym obszarze, a nie w miejscu, z którego obsługujesz swoje pliki, z oczywistych powodów robię programowanie w django i nie mogę znaleźć tych "oczywistych powodów". Dlaczego nie mogę po prostu użyć folderu mojego projektu do obsługi plików na github? Byłbym szczęśliwy, gdyby ktoś mi to wyjaśnił teraz, gdy jestem nowy w git.


title: Różnice w stwierdzeniu If... Else...

text: Kiedy po raz pierwszy zacząłem uczyć się programowania, pamiętam, jak pokłóciłem się z moim nauczycielem na temat instrukcji If Else. Argumentowałem, że: if { ... } else if { ... } ... jest w zasadzie tym samym, co: if { ... else { if { ... } else { if { ... } else { ... } } } ale powiedział, że są zupełnie inne. Po chwili kłótni uznałem, że są różne. Teraz, przez lata wracałem do tego i przeglądałem je, aby zobaczyć pozorną główną różnicę, ale za życia mnie nie mogę tego zobaczyć. Czy ktoś może wyjaśnić, dlaczego dokładnie są różne (poza oczywistym zagnieżdżeniem)


title: Kursy wewnętrzne/rozwiązywanie problemów z serwerem MS SQL?

text: Pracowaliśmy z Microsoft nad zgłoszeniem, które otworzyliśmy, ponieważ jedno z naszych zapytań było znacznie wolniejsze na serwerze MS Sql 2k8 enterprise vs sql 2k5 standard. Inżynierowie, z którymi współpracujemy, dysponują niesamowitymi narzędziami i wiedzą na temat wnętrza serwera sql. Czy jest jakiś kurs, który mógłbym podjąć, aby zdobyć tę wiedzę?


title: Jakaś uznana konwencja dla dzienników zmian w repozytorium?

text: Używamy TortoiseSVN, ale nie mamy systemu śledzenia błędów. Wiem, kiepski, ale poza moją kontrolą. Były czasy, kiedy svn nie był używany na co dzień. Teraz udało mi się nalegać na regularne korzystanie z niego, z odpowiednim łączeniem, rozgałęzianiem, tagowaniem itp. Jak można się spodziewać, w rezultacie liczba poprawek wzrosła, co sprawia, że przeglądanie logów repozytorium jest teraz trochę kłopotliwe. Zastanawiałem się nad zastosowaniem jakiejś konwencji opartej na słowach kluczowych ("[poprawka]", "[funkcja]", "[refactored]", "[minor]", "[merged-from-trunk]"... :) aby ułatwić wyszukiwanie. Czuję się jednak jak wymyślanie koła na nowo. Czy istnieje jakaś ustalona konwencja? A może moje podejście jest złe od samego początku? Jakieś lepsze, alternatywne rozwiązanie?


title: Jak mogę uzyskać montaż z EXE?

text: Moje jedyne pytanie to tytuł. Poza tym chcę zobaczyć kod za małymi plikami EXE, ale wiem, że trudno jest go przekonwertować na coś takiego jak c lub c ++, więc dlaczego nie uzyskać asemblera.


title: Kwalifikujące się „szczęście” w tworzeniu oprogramowania?

text: Przyszło mi dzisiaj do głowy, że często prawdziwym celem pytań zadawanych w witrynach takich jak ta (gdzie pytania są bardziej otwarte niż powiedzmy SO) jest to, aby PO stał się szczęśliwszy po osiągnięciu wyniku. Często usprawiedliwiamy się tym, mówiąc, że naszym pragnieniem jest zwiększenie produktywności lub wypuszczenie lepszego produktu, ale jeśli nadal będziesz patrzeć w dół tej ścieżki, możesz stwierdzić, że PO dąży do większej produktywności lub jakości produktu, ponieważ są one ważne dla jego/jej ” szczęście'. Mając to na uwadze, pytam **to** : Czy ich wysiłki zmierzały do studiowania rozwoju oprogramowania z tej perspektywy? Innymi słowy, jakie praktyki zwiększają szczęście tych, którzy rozwijają oprogramowanie w ramach kariery i kto, jeśli ktokolwiek, badał to konkretnie? Jak wspomniałem powyżej, mogą one obejmować strategie zwiększające produktywność lub poprawiające jakość produktu, ale w żadnym wypadku nie powinny ograniczać się tylko do nich.


title: Zasoby do nauki popularnych algorytmów Lisp

text: Wiele książek o algorytmach i strukturach danych jest zakodowanych w językach imperatywnych. Czy jest jakaś książka, która pokazuje, że funkcjonalne języki programowania mogą zrobić to samo lub zrobić je lepiej? W szczególności interesuje mnie sortowanie, wyszukiwanie, struktury danych i wykresy.


title: Jak mogę uwierzytelnić użytkowników z Facebooka/twittera?

text: Muszę zbudować witrynę dla aplikacji mobilnej, która umożliwi użytkownikom logowanie się przez facebook/twitter lub rejestrację jako nowy użytkownik (tradycyjna nazwa użytkownika/hasło). Bez względu na wybraną przez użytkownika metodę, powinien pozostać zalogowany, dopóki nie zdecyduje się na wylogowanie. Podczas gdy rejestracja jako nowy użytkownik jest prosta, używając nazwy użytkownika/hasła jako uwierzytelniania, nie mam pojęcia, jak mogę uwierzytelnić użytkowników, którzy zarejestrowali się za pomocą Facebooka/Twittera. Myślę, że jest zwracany token dostępu, gdy użytkownik daje dostęp do naszej aplikacji, ale czy ten token jest trwały? Czy możemy niezawodnie przechowywać go w naszej bazie danych w celu uwierzytelnienia? Wszelkie porady są mile widziane.


title: Jakiego paradygmatu użyć do pisania silnika szachowego?

text: Gdybyś miał napisać silnik do gry w szachy, jakiego paradygmatu programowania byś użył (OOP, proceduralny itp.) i dlaczego miałbyś go wybrać? Przez silnik szachowy rozumiem część programu, która ocenia aktualną szachownicę i decyduje o kolejnym ruchu komputera. Pytam, bo pomyślałem, że fajnie byłoby napisać silnik szachowy. Wtedy przyszło mi do głowy, że mógłbym wykorzystać go jako projekt do nauki programowania funkcjonalnego. Wtedy przyszło mi do głowy, że niektóre problemy nie pasują do paradygmatu funkcjonalnego. Wtedy przyszło mi do głowy, że to może być dobra pożywka do dyskusji.


title: najlepsze podejście do nauki na studiach licencjackich dotyczących systemów operacyjnych?

text: jakie jest najlepsze podejście do nauki na studiach licencjackich dotyczących systemów operacyjnych, aby zrozumieć pojęcia i uzyskać dobrą ocenę z egzaminu? Wiem, że niektóre kursy można opanować poprzez uważne czytanie podręcznika lub uczęszczanie na wykłady, podczas gdy w przypadku innych koncepcje można zrozumieć tylko poprzez ręczne wykonywanie projektów. Czy istnieje ogólne podejście do nauki, które powinno być przyjęte w przypadku tego typu kursu? Wiem, że to może być subiektywne, ale szukam osobistych doświadczeń/metod studiowania przez tych, którzy przeszli podobne kursy, aby sprawdzić, czy jest jakaś konkretna metoda, która sprawdziła się dla większości.


title: Która technologia .NET sprawdzi się jako ulepszenie dla tej aplikacji klient/serwer?

text: Pomagam znajomemu w przepisaniu jego aplikacji .NET, obecnie korzystającej z WinForms + sockets, która jest programem klient/serwer, który obecnie ma średnio ~120 jednoczesnych użytkowników (wysyłanie wiadomości, korzystanie z czatu). Klient będzie rósł i docelowo musi być w stanie obsłużyć kilka tysięcy jednoczesnych użytkowników. Wątek jest tworzony na użytkownika, ale nie jest to skalowalne ze względu na ograniczenia sprzętowe (serwer zepsuł się podczas testowania większej liczby użytkowników), nie wspominając już o badaniach, które przeprowadziłem na ten temat, wskazując, że jest to zła praktyka. Mówiąc o badaniach, zebrałem następujące możliwości tego przepisania: 1. Używanie wątków asynchronicznych z pulą wątków 8 lub więcej wątków (czy będzie w stanie obsłużyć 8000 użytkowników?) lub 2. Korzystanie z WCF (wygląda na to, że więcej podejścia .NET i bardziej intuicyjne z wywołaniami zwrotnymi zamiast używania pętli) Teraz skłaniam się bardziej w kierunku WCF. Zanim ktokolwiek zapyta, wspomniałem, że może to być aplikacja internetowa, ale on odmówił. Edycja (odpowiedzi na pytania): Wątki aktualnie czytane z gniazda (pakietu) i parsowane (proste parsowanie ciągów) iw zależności od typu ładunku, wykonują inną funkcję. Wykonywane funkcje nie wymagają dużego nakładu zasobów.


title: Git: zmiana bazy i utrzymywanie na bieżąco w odległym oddziale - akceptowane praktyki?

text: Kiedy programujesz na długo działającej gałęzi (tutaj definiowanej jako życie dłużej niż jedno wydanie), jaka jest najbardziej akceptowana praktyka utrzymywania aktualnej gałęzi z jej początkiem, przy jednoczesnym utrzymywaniu względnie czystej historii przed ponownym połączeniem? Jako przykład rozważ gałąź pochodzenia (`m`) i gałąź (temat) (`t`) z następującym wykresem historii: A[1]--------F[2]--H[ 3]--J[4] (m) \ \ \ B----C-D-E--G-----I-----K (t) [1] - Wydanie 1.0 [2] - Wydanie 2.0 [3] - Hotfix 2.1 [4] - Hotfix 2.2 W gałęzi `t` okresowo scalałem z mastera (`m`), aby moja gałąź tematyczna była aktualna, ale jest wiele małych zmian pomiędzy `B` i `K` który chciałbym zmiażdżyć z rebasem. Martwię się, że jeśli zmiażdżę te zatwierdzenia, zmienię hash scalonych zatwierdzeń z mastera i stworzę problemy dla innych, gdy scalę moją gałąź z powrotem do mastera w wersji 3.0. Jeśli "przebazuję -i" gałąź tematu, spodziewam się, że wykres będzie wyglądał tak: A---------F---H---J (m) \ B------ -----------K (t) gdzie `K` zawiera wszystkie zgniecione zatwierdzenia pomiędzy `B` i `K`, w tym scalone zmiany z wzorca (`F` i `H`). Jeśli następnie scalę `t` z powrotem do mastera `m`, zastanawiam się, czy prawdopodobnie wystąpią konflikty z `F` i `H`. Wykres powinien wtedy wyglądać tak: A---------F---H---J---L (m) \ / B------------- ----K (t) `t` można teraz usunąć, ponieważ nie jest już używane. Chciałbym zachować historię rozgałęzienia `t`, aby zmiana bazy `B` na `J` spowodowała utratę tych informacji i prawdopodobnie rozwiązałaby mój problem, ale wykres wyglądałby tak: A------- --F---H---J---K' (m) Czy jest to uzasadniona obawa? Jaka jest powszechnie przyjęta praktyka utrzymywania aktualnej gałęzi funkcji z jej pochodzeniem przy zachowaniu względnie czystej historii? _Uwaga: przykład tutaj jest uproszczony, w rzeczywistości istnieją setki zatwierdzeń od gałęzi do HEAD w gałęzi tematycznej - ponad 300 - z których wiele może zostać zlikwidowanych_


title: Czy próba w końcu jest droga?

text: W przypadku kodu, w którym musisz wykonać czyszczenie zasobów przed wyjściem z funkcji, czy istnieje duża różnica wydajności między tymi dwoma sposobami wykonania tego. 1. Czyszczenie zasobu przed każdą instrukcją return void func() { login(); bool ret = coś(); if(ret == false) { wyloguj(); zwrócić; } ret = cos cos(); if(ret == false) { wyloguj(); zwrócić; } inne rzeczy(); Wyloguj(); } 2. Czyszczenie zasobu w bloku finalnym void func() { login(); spróbuj { bool ret = coś(); if(ret == false) return; ret = docośsię(); if(ret == false) return; rzeczy do jedzenia(); } wreszcie { wyloguj(); } } Zrobiłem kilka podstawowych testów w przykładowych programach i wydaje się, że nie ma dużej różnicy. Tak bardzo wolę "wreszcie" sposób robienia tego - ale zastanawiałem się, czy spowoduje to jakikolwiek spadek wydajności w dużym projekcie.


title: Dlaczego CATALINA_HOME ma taką nazwę i inne ciekawe nazwy programów?

text: Dużo pracuję z oprogramowaniem open source i ciągle natrafiam na dziwne i zabawne nazwy plików wykonywalnych, zmiennych, stałych itp. Obecnie zastanawiam się, dlaczego zmienna środowiskowa CATALINA_HOME została nazwana w ten sposób? Zrobiłem szybkie wyszukiwanie w google, ale nic względnego nie wymyśliłem. Domyślam się tylko, że nazwa pochodzi od wyspy na wybrzeżu południowej Kalifornii. W związku z tym bardzo często znajduję zabawne i sprytne nazwy używane w programach open source. Jednym z moich ulubionych są pliki wykonywalne **slapd** i **slurpd** pakietu OpenLDAP. Jakie są twoje ulubione/warte uwagi nazwy zmiennych/plików wykonywalnych, które widziałeś w swojej karierze programistycznej? Czy uważasz, że nazwanie w ten sposób zmiennych/plików wykonywalnych jest w porządku, czy może wolisz nudne, ale jasne nazwy? PS. To nie jest tak naprawdę pytanie programistyczne, ale myślę, że według faqa trochę tu pasuje.


title: Ogólna wiedza na temat tworzenia aplikacji biznesowych dla (małych) firm?

text: W jaki sposób programista może dowiedzieć się, jak dostarczać rozwiązania biznesowe? w tym między innymi wdrażać aplikacje biznesowe w przyzwoitym stylu architektonicznym oprogramowania? CRM, ERP, MDM, SOA itp. czy naprawdę są zarezerwowane wyłącznie dla _przedsiębiorstwa_? Gdzie można się dowiedzieć o ich... * wspólne cechy * oprogramowanie / architektura danych takiego systemu w ogóle * złożoność * najnowszy trend * brak srebrnych kul, jakie są opcje? * popularne projekty open source, na których można budować? * opcja komercyjna, jeśli pieniądze nie są problemem? Szukałem w Safari Books Online i większość książek zawiera instrukcje, jak dostosować CRM / ERP Vendor X do swoich potrzeb, lub rozwlekłe i nudne napisane dla studentów biznesu (nie dla programistów). Jakieś dobre źródło do nauki tych wymienionych powyżej? A może praca w firmie programistycznej, która pisze tego rodzaju oprogramowanie, to jedyny sposób na poznanie tajników pisania aplikacji biznesowych? **aktualizacja:** odważne założenie - duże przedsiębiorstwa wybrałyby dostawcę takiego jak SAP, nie myśląc o jego zbudowaniu. Dziękuję.


title: Terminologia Microsoft: .NET C++ a tradycyjny C++

text: Ostatnio pracowałem z zespołem, który używa zarówno .NET C++, jak i pre-.NET C++. W pełni rozumiem różnice techniczne między obiema technologiami. Czasami jednak mam wrażenie, że tracę głowę, jeśli chodzi o terminologię używaną do rozróżnienia tych dwóch. Przykład: załóżmy, że mamy dwa projekty: **ProjectA** zawiera kod "C++", który tworzy bibliotekę DLL zestawu .NET. **ProjektB** zawiera kod Visual C++, który buduje tradycyjną natywną bibliotekę DLL systemu Windows. Jaki jest najlepszy sposób na zwięzłe i terminologiczne rozróżnienie między tymi dwoma projektami? Ponownie, nie proszę o dogłębny opis techniczny różnic między obiema technologiami. Szukam tylko nazwisk i etykiet. W ten sposób dzisiaj mógłbym spróbować dokonać rozróżnienia, rozmawiając z kimś: _"ProjectA jest zarządzanym projektem .NET C++"_ i _"ProjectB jest niezarządzanym natywnym projektem DLL C++."_ Jednak wcale nie jestem pewni, że ta terminologia jest idealna, a nawet poprawna. Opisz, jaki Twoim zdaniem może być idealny język do użycia w tej sytuacji (lub podobnych sytuacjach). Zachęcamy do motywowania odpowiedzi.


title: Jak przydatne są testy zatrudnienia podczas rozmów kwalifikacyjnych z kandydatami i przewidywania sukcesu?

text: Podczas wstępnego sprawdzania kandydatów na stanowisko przed pierwszą rozmową bezpośrednią, jak przydatne są testy techniczne w odfiltrowywaniu słabych kandydatów i przewidywaniu ich zdolności do odniesienia sukcesu na danym stanowisku? Podczas gdy niektóre osoby oparte na osobowości mogą niewiele mówić, czy warto wysłać test techniczny (np. na Javie lub C#) przed rozmową twarzą w twarz, a nawet przed ekranem telefonu? Ponadto, czy te testy kiedykolwiek fałszywie identyfikują silnego kandydata jako takiego, który prawdopodobnie słabo pasuje do tego stanowiska?


title: Jaki jest cel białej listy w Phonegap? Czy można to obejść?

text: Używam nowego phonegap 1.5.0 (który jest myląco przemianowany na cordova, pomimo braku wzmianki o zmianie nazwy na stronie phonegap) i stwierdzam, że funkcja białej listy w iOS jest dość restrykcyjna. Rozumiem, że posiadanie białej listy jest bezpieczniejsze, ponieważ zezwala tylko na zaufane domeny, ale co, jeśli chcesz ładować adresy URL, które zostały załadowane dynamicznie? Nie wiesz dokładnie, która domena będzie się ładować, więc nie możesz umieścić jej na białej liście. Przykładowym przypadkiem użycia może być polityka prywatności dotycząca wyświetlania reklam i otwierania. Dlaczego biała lista jest obowiązkowa i czy można ją obejść?


title: Projekt bazy danych i wpływ na wydajność

text: Mam problem z projektowaniem bazy danych, do którego nie jestem do końca pewien, jak podejść, ani czy korzyści przewyższają koszty. Mam nadzieję, że niektórzy członkowie P.SE mogą wyrazić opinię na temat mojego sugerowanego projektu, a także wszelkich podobnych doświadczeń, z którymi mogli się spotkać. Tak się składa, że buduję aplikację, która ma duże wymagania w zakresie raportowania. Szybkość jest ważną kwestią, ponieważ przez cały rok będą szczytowe zastosowania. Ta aplikacja/baza danych ma wielopoziomową relację wiele-do-wielu. np. obiekt a obiekt b obiekt c obiekt d obiekt b ma związek z obiektem obiekt c ma związek z obiektem b, obiekt d ma związek z obiektem c, b, a Teoretycznie może to trwać bez ograniczeń, chociaż logika nakazuje mógł zajść tylko tak daleko. Mój pomysł, aby przyspieszyć raportowanie, polegałby na stworzeniu tabeli „syndykatu”, która działałaby jako globalna tabela sprzężeń wiele-do-wielu. W tej tabeli (przy podanym przykładzie) widać: +----------+-----------+-------------+ | identyfikator_dziecka | rodzic_id | identyfikator_typu | +----------+-----------+---------+ | b | | 1 | | c | b | 2 | | c | | 3 | | d | c | 4 | | d | b | 5 | | d | | 6 | +----------+-----------+---------+ Gdzie a, b, c i d przekładają się na ich odpowiednie identyfikatory w ich odpowiednie tabele. Tak więc, dla ułatwienia raportowania wszystkich a, które istnieją w obiekcie d, można zapytać SELECT * FROM `syndykaty` ... JOINS TO tabele potomne i nadrzędne ... WHERE parent_id=a i type_id=6; zamiast mieć zapytanie ze sprzężeniem do każdego poziomu w górę łańcucha. # Problem Ta tabela rośnie wykładniczo iw danym roku może z łatwością przekroczyć 20 000 rekordów dla jednego klienta. Biorąc pod uwagę wielu klientów przez wiele lat, ta tabela BARDZO szybko eksploduje do milionów rekordów i nie tylko. Teraz baza danych zostanie z czasem podzielona na wiele serwerów, ale chciałbym (jak większość) utrzymać liczbę serwerów na jak najniższym poziomie, jednocześnie oferując elastyczność. Również zapisy i aktualizacje byłyby wykładniczo dłuższe (choć prawdopodobnie niezauważalne dla użytkownika końcowego), ponieważ w tej tabeli byłoby wiele operacji wstawiania/aktualizacji/skanowania, aby zachować synchronizację. Czy idę tutaj we właściwym kierunku, czy też zboczyłem z drogi. Co byś zrobił w podobnej sytuacji? To rozwiązanie wydaje się zbyt skomplikowane, ale pozwala na największą elastyczność i najszybsze operacje odczytu. _Przypis 1_ \- Ta struktura pozwala mi łatwo dodawać nowe poziomy do drzewa. _Przypis 2_ \- Zapytania bazy danych dla tej bazy danych są wykonywane za pomocą struktury ORM.


title: Czy powinniśmy testować wartości obiektów zwracanych z metod testowanych jednostkowo?

text: Będąc nowicjuszem w testowaniu jednostkowym chciałbym wiedzieć, czy mam testować wartości obiektów zwracanych przez metody podczas wykonywania testów jednostkowych. Jako przykład rozważmy następujące klasy: public class Person { public int Id { get; set } public int Wiek { get; ustawić; } ciąg publiczny Nazwa { get; ustawić; } publiczny zwierzak { get; ustawić; } } public class Pet { public int Id { get; ustawić; } public int Wiek { get; ustawić; } rasa publiczna Rasa { get; ustawić; } } I metoda z następującą deklaracją: public Person GetPerson(int id) { ... } Teraz jestem ciekaw, czy mam stworzyć test sprawdzający, czy różne właściwości Person są poprawne (GetPerson_PersonFound_PersonHasCorrectName( ) i tak dalej)? Podejrzewam, że w normalnych okolicznościach powinienem? Wszystko zależy od wymagań? Jeśli te właściwości powinny zostać przetestowane, to czy mam zagłębić się w Peta i sprawdzić również te właściwości? A co z zagłębieniem się w Rasę? Może dość szybko dodać do kilku testów.


title: Czego oczekiwać jako programista w banku?

text: Po trzech rozmowach telefonicznych dostałem tę ofertę w dużym banku jako programista Java. Nie mam wcześniejszego doświadczenia w instytucjach finansowych (tylko dwa lata jako zwykły programista Java), więc trochę się boję i martwię, czy moje umiejętności są odpowiednie do tej roli. Najważniejszą rzeczą, która mnie niepokoi, jest matematyka. Podczas wszystkich tych wywiadów nigdy nie poruszaliśmy tematu matematyki, ale wiem, że ta pozycja jest związana z instrumentami finansowymi, takimi jak instrumenty pochodne. Ile matematyki powinienem oczekiwać, zakładając, że nie chodzi o handel, ale raczej o rachunkowość? Jak mogę się lepiej przygotować do tej pracy? Szukałem w Google poradników/książek na temat programowania finansowego w Javie, ale tu nie mam szczęścia - może możesz coś polecić? Bardzo interesuje mnie giełda, ale nigdy nie próbowałem tego teoretycznego podejścia. Dziękuję!


title: Upewnienie się, że użytkownicy mają nowoczesną przeglądarkę internetową

text: Mamy kilku użytkowników korzystających ze starego sprzętu i starych przeglądarek. Jaki byłby najlepszy sposób, aby skłonić ich do uaktualnienia do nowszej przeglądarki internetowej, bez dokuczania użytkownikom nowszą przeglądarką internetową.


title: Czy możemy powiedzieć, że Java lub C# mają zunifikowane drzewa dziedziczenia?

text: Czy możemy powiedzieć, że Java lub C# to języki OO z ujednoliconym drzewem dziedziczenia/ujednoliconym systemem typów? Przez ujednolicone drzewo dziedziczenia/ujednolicony system typów mam na myśli, że każda klasa wywodzi się niejawnie lub jawnie z jednego typu? Czy jest jakiś język zorientowany obiektowo, który nie jest zgodny z tą koncepcją?


title: Tworzenie internetowego kreatora bazy danych

text: Myślałem o stworzeniu kreatora baz danych online (pomyśl DabbleDB, Zoho Creator, Intuit Quickbase itp.). Myślałem o kilku rozwiązaniach: 1. Mieć 4 tabele bazy danych: **Tables** , **Rows** , **Columns** , **Items**. Aby utworzyć bazę danych jako użytkownik, należy przejść do strony „Dodaj nową tabelę”, podać nazwę i wpisać dowolną liczbę kolumn, a następnie zapisać. Następnie zostaniesz przeniesiony na stronę, która wyświetli listę wierszy zawierających elementy odpowiadające kolumnom. Problem z tym podejściem polega na tym, że nie mogę wymyślić, jak połączyć element zarówno z wierszem, jak i kolumną. 2. Utwórz rzeczywistą tabelę bazy danych dla każdego użytkownika, a kiedy wstawią nową kolumnę (lub pole), będzie to tylko INSERT bazy danych. Minusy: Myślę, że byłoby to powolne i kosztowne (prawda?), nie wspominając o tym, że funkcja taka jak DabbleDB sprawiała, że relacje między tabelami byłyby bardzo trudne do zaimplementowania. Więc jaki jest najlepszy sposób na zbudowanie tego? A może jest lepszy sposób niż nawet te dwa, o których wspomniałem.


title: Jakie elektroniczne narzędzia do tworzenia historii użytkownika możesz polecić?

text: Zwinne tworzenie oprogramowania w dużej mierze opiera się na typie elementu pracy o nazwie **historie użytkownika**. Na przykład masz zaległości pełne historyjek użytkowników i możesz wybrać kilka z nich do pracy podczas następnego sprintu. Ale gdzie i jak znaleźć historyjki użytkowników, które można umieścić w backlogu? Istnieje popularna technika wykonywania tego, nazywana **mapowaniem historii**. Wymyślił to Jeff Patton, a oto ostateczny przewodnik, jak to zrobić. Pytanie brzmi, jakie są dostępne narzędzia elektroniczne, które wspierają technikę tworzenia map Pattona? Zrobiłem trochę badań, znalazłem wtyczki Pivotal i Rally (ale nie jestem ich klientem) i obecnie eksperymentuję z SilverStories. Jakie są inne narzędzia? Czego użyłeś? Co (nie) polecacie? Czemu? **AKTUALIZACJA:** Niektóre osoby, które pisały komentarze, wydają się skłaniać ku odpowiedzi, że zastosowanie tej techniki jest po prostu niemożliwe przy użyciu narzędzia elektronicznego i powinniśmy to zaakceptować. Czy ktoś nie może napisać tego jako odpowiedzi? **AKTUALIZACJA** (aby wyjaśnić pytanie w świetle komentarza Alexa Feinmana): pytanie dotyczy identyfikacji opcji tworzenia map fabularnych. Ponieważ technikę Jeffa Pattona można oczywiście wykonać na białej tablicy z klejem, pytanie skupia się na dodatkowych opcjach, które mogą być dostarczone z narzędziami elektronicznymi. (Przedwczesne) zaangażowanie w jakiekolwiek konkretne narzędzie lub klasę narzędzi nie jest celem tego pytania.


title: Jakie są typowe konwencje nazewnictwa funkcji publicznych i prywatnych OOC?

text: **Krótkie pytanie** Czy istnieje typowy sposób nazywania „publicznych” i „prywatnych” członków projektu OO C? **Tło** W pełni rozumiem, że członkowie publiczni i prywatni _naprawdę_ nie istnieją w języku C. Jednak, jak większość programistów C, nadal traktuję członków jako publicznych lub prywatnych, aby utrzymać projekt OO. Oprócz typowych metod OO, odkryłem, że podążam za wzorcem (patrz przykład poniżej), który ułatwia mi odróżnienie, które metody są _przeznaczone_ dla świata zewnętrznego od prywatnych, które mogą mieć mniej kontroli / są bardziej wydajne itp. ... Czy istnieje standard lub najlepsza praktyka dla takich rzeczy, czy mój przykład poniżej jest dobrym sposobem podejścia do tego? **Przykładowy nagłówek** #ifndef _MODULE_X_H_ #define _MODULE_X_H_ bool MOD_X_get_variable_x(void); nieważny MOD_X_set_variable_x (bool); #endif /* _MODULE_X_H_ */ **Przykładowe źródło** // Identyfikator modułu: MOD_X #include "module_x.h" // Prywatne prototypy static void mod_x_do_something_cool(void); static void mod_x_do_something_else_cool(void); // Zmienne prywatne static bool var_x; // Funkcje publiczne – zwróć uwagę na identyfikator modułu pisany wielkimi literami bool MOD_X_get_variable_x(void) {return var_x;} void MOD_X_set_variable_x(bool input){var_x = input;} // Funkcje prywatne – zwróć uwagę na identyfikator modułu pisany małymi literami void mod_x_do_something_cool(void){ // Niezwykle fajna podprogram } void mod_x_do_something_else_cool(void){ // Kolejna niesamowicie fajna podprocedura }


title: Jeśli język szybko się zmienia, czy uważa się to za dobrą rzecz?

text: Widziałem kilka języków, które szybko się zmieniają (mam na myśli, że są poprawiane co roku) i inne, które są ulepszane powoli. Moje pytanie, jeśli język szybko się zmienia, czy jest to dobra czy zła rzecz dla programisty? Czy programiści lubią uczyć się nowych rzeczy w języku, czy wolą trzymać się tego, co już znają?


title: HTTP API, który otacza dowolny pająk Python-Scrapy

text: Muszę napisać API HTTP, które otacza dowolny pająk Scrapy, powinno akceptować żądania, wykonywać je w Scrapy i zwracać dane wyodrębnione przez pająka i umożliwiać użytkownikowi ponowne wykorzystanie tego samego kodu do interaktywnego wyodrębniania. Scrapy bardzo dobrze obsługuje indeksowanie w trybie wsadowym, tj. długotrwały proces, począwszy od żądań nasion, wyodrębniania i podążania za linkami oraz eksportowania danych. Jak mam się do tego zabrać? Jakie technologie są zaangażowane? Gdzie mogę się tego nauczyć? Każda pomoc byłaby bardzo mile widziana.


title: Jak zarządzać skupieniem dla małego zestawu prostych widżetów

text: Zajmuję się tworzeniem zestawu prostych widżetów na mały wyświetlacz (128x128). Na przykład chciałbym mieć ekran główny z menu nakładki, za pomocą którego mogę przełączać widoczność elementów ekranu głównego. Każda opcja byłaby ikoną otoczoną ramką, gdy jest zaznaczona. Zdarzenia z przycisków (lewy, góra, prawo, dół, enter) należy przypisać do widżetu, który ma „fokus”. Skupienie to prosta rzecz do zrozumienia podczas _używania_ GUI, ale mam problem z zaimplementowaniem tego. Czy możesz zaproponować prostą koncepcję zarządzania zdarzeniami fokusowymi i wejściowymi? Mam te proste pomysły: * Tylko jeden widżet może mieć fokus, więc potrzebuję pojedynczego wskaźnika do tego widżetu. * Kiedy ten widżet otrzyma jakiś rodzaj wejścia „cyklu” (jak w przypadku „podświetl następny element na tej liście”), fokus zostanie przeniesiony na inny widżet. * widżet musi mieć sposób informowania aplikacji, na który widżet zostanie następnie skierowany fokus. * jeśli widżet nie może podpowiedzieć „następnego fokusa”, aplikacja musi być w stanie określić, gdzie powinien się znaleźć fokus. Widgety mają obecnie następującą strukturę: * Widżet może mieć rodzica, który jest przekazywany do konstruktora. Widgety są tworzone statycznie, ponieważ chcę uniknąć dynamicznej alokacji pamięci (mam tylko 16kB pamięci RAM i chciałbym mieć nad tym kontrolę). * widżety mają swoje rodzeństwo, zaimplementowane jako natrętna lista połączona (mają `następnego` członka). Rodzic ma wskaźnik do nagłówka swojej listy dzieci. Zdarzenia wejściowe są argumentami metod `buttonEvent` widgetów, które mogą zaakceptować lub zignorować to zdarzenie. Jeśli zignoruje zdarzenie, może przekazać je do swojego rodzica. **Moje pytania:** 1. Jak mogę zarządzać fokusem tych widżetów? 2. Czy robię to zbyt skomplikowane?


title: Jak obejść problem Circular Reference z JSON i Entity?

text: Eksperymentowałem z tworzeniem strony internetowej, która wykorzystuje MVC z JSON dla mojej warstwy prezentacji i frameworkiem Entity dla modelu danych/bazy danych. Mój problem wchodzi w grę z serializacją moich obiektów Model do formatu JSON. Używam metody code first do tworzenia mojej bazy danych. Podczas wykonywania kodu pierwszej metody relacja jeden do wielu (rodzic/dziecko) wymaga, aby dziecko miało odniesienie do rodzica. (Przykładowy kod może być literówką, ale otrzymasz obrazek) class parent { public List<child> Children{get;set;} public int Id{get;set;} } class child { public int ParentId{get;set;} [ForeignKey("ParentId")] public parent MyParent{get;set;} public string name{get;set;} } Podczas zwracania obiektu "rodzic" za pośrednictwem JsonResult zgłaszany jest błąd odwołania cyklicznego, ponieważ "child" ma właściwość rodzica klasy. Wypróbowałem atrybut ScriptIgnore, ale tracę możliwość patrzenia na obiekty podrzędne. W pewnym momencie będę musiał wyświetlić informacje w widoku rodzic-dziecko. Próbowałem stworzyć klasy bazowe dla rodziców i dzieci, które nie mają odwołania cyklicznego. Niestety, gdy próbuję wysłać baseParent i baseChild, są one odczytywane przez analizator JSON jako ich klasy pochodne (jestem prawie pewien, że ta koncepcja umyka mi). Base.baseParent basep = (Base.baseParent) rodzic; return Json(basep, JsonRequestBehavior.AllowGet); Jedynym rozwiązaniem, które wymyśliłem, jest stworzenie modeli „Widok”. Tworzę proste wersje modeli baz danych, które nie zawierają referencji do klasy nadrzędnej. Każdy z tych modeli widoku ma metodę zwracającą wersję bazy danych i konstruktora, który przyjmuje model bazy danych jako parametr (viewmodel.name = databasemodel.name). Ta metoda wydaje się wymuszona, chociaż działa. UWAGA: Publikuję tutaj, ponieważ uważam, że jest to bardziej warte dyskusji. Mógłbym wykorzystać inny wzorzec projektowy, aby rozwiązać ten problem lub może to być tak proste, jak użycie innego atrybutu w moim modelu. W swoich poszukiwaniach nie widziałem dobrej metody na przezwyciężenie tego problemu. Moim celem końcowym byłoby posiadanie ładnej aplikacji MVC, która mocno wykorzystuje JSON do komunikacji z serwerem i wyświetlania danych. Utrzymując spójny model na wielu warstwach (lub najlepiej jak potrafię).


title: Sortowanie list (globalne vs lokalne)

text: W mojej aplikacji użytkownicy mają listy. Mogą albo dodać nowy element do swojej listy, albo dodać element z poprzedniej listy. Zbiór wszystkich elementów, które będę nazywał G (globalny) (globalna lista każdego użytkownika jest jego własna). G = { a1, a2, a3,...,an} Po (lub w trakcie) utworzeniu przez użytkownika listy może ją posortować. To nie był problem. Problem pojawia się, gdy próbujesz zastosować zamówienie na towary globalnie. Na przykład, jeśli lista pierwsza zawiera m pozycji: L1 = {b1, b2, b3,...,bm} A użytkownik zmienia kolejność b1 z 1 na 9 w L1. Następnie, gdy użytkownik zapisze listę, chciałbym, aby zmienił się również jej globalny porządek. Ale nie jestem pewien, na co to zmienić. Oto jak to teraz robię. Weź naszą listę L1: L1 = { **b 1**, b2, b3,...,bm} Przenieś b1: L1 = {b2, b3, **b 1**,...,bm} Dowiedz się globalny indeks b3 (powiedzmy 41), dodaj jeden (42) i to jest indeks b1. Następnie znajdź wszystkie inne elementy, które mają indeks globalny większy lub równy 42 i dodaj jeden. Jaki jest najlepszy (lub przynajmniej lepszy) sposób, aby to zrobić?


title: Wymyślenie prawidłowego algorytmu rankingu artykułów

text: Tworzę stronę internetową, która będzie publikować jeden lub więcej artykułów tygodniowo. Chciałbym móc uszeregować artykuły na podstawie popularności. Aby to zrobić, potrzebuję wzoru do obliczania punktacji dla każdego artykułu. Ta formuła powinna nagradzać popularne artykuły (te, które otrzymują dużo wyświetleń), a jednocześnie zbliżać nowe artykuły do góry, aby treść była świeża i interesująca. Strona nie obsługuje głosowania na artykuły. Czytelnicy będą mogli komentować, a witryna będzie mogła śledzić liczbę unikalnych wyświetleń, które otrzymuje artykuł. * * * # Moja próba Wymyśliłem sposób na obliczenie punktacji dla każdego artykułu, ale nie jestem pewien, czy jest to właściwy sposób, czy w ogóle zadziała. Ta formuła oblicza wynik: score = unique_views / ( hours_since_release * 4 ) Formuła utrzymuje na powierzchni artykuły z wieloma wyświetleniami, jednocześnie upewniając się, że ostatecznie znikną, aby zostawić miejsce na nowe artykuły. Napisałem mały program do testowania tej formuły. **Oto wynik jednego uruchomienia.** Ten skrypt generuje od 0 do 2 artykułów dziennie i symuluje ich wynik w miarę upływu czasu. Kiedy artykuł jest tworzony, wybiera losową liczbę (`M`) od 100 do 1000, reprezentującą jego popularność. Każdego „dnia” skrypt dodaje losową liczbę wyświetleń od 0 do „M” do każdego artykułu. Rzeczywiste widoki pokazane na wyjściu (`V`) są wynikiem tego wzoru: view_count = (10 * log10( view_count) ) ^ 2 Użyłem tego, aby upewnić się, że liczba wyświetleń nie będzie rosła w nieskończoność. Zamiast tego jego wzrost z czasem zwolni, tak jak w prawdziwym życiu. Wartości „A” i „S” w danych wyjściowych reprezentują odpowiednio wiek w dniach artykułu i jego wynik na podstawie powyższego wzoru. Ta formuła powoduje pewne interesujące zachowanie: jeśli spojrzysz na grę **Tomb Raider: Anniversary** , odradza się z dużą liczbą M, co oznacza, że będzie bardzo popularna. Wspina się na szczyt pierwszego dnia, spada w ciągu następnych 2 dni, a następnie wraca na szczyt przez 3 dni z rzędu ze względu na ilość wyświetleń, jakie uzyskuje. Wydaje mi się, że jest to zachowanie, którego szukam, ale nie jestem pewien, czy zadziała w praktyce, a nawet czy w ogóle jest to właściwe podejście. Możesz znaleźć źródło mojego surowego prototypu tutaj, jeśli chcesz go uruchomić samodzielnie. * * * Tu pojawia się pytanie: **Jak można wymyślić i przetestować algorytmy rankingowe, aby spełniały warunki problemu, korzystając z dostępnych zmiennych?** Pytanie drugorzędne: _Czy mój algorytm rankingowy jest odpowiedni i czy zadziała w opisanej przeze mnie sytuacji?_ * * * EDIT: Z linków w odpowiedzi _maythesource.com_ właśnie zdałem sobie sprawę, że jest też kwestia grania na punkty. Czy tylko uwzględnienie _unikalnych_ wizyt w jakiś sposób zapobiegłoby graniu, czy jest to słaby środek zaradczy?


title: Czy powinieneś używać PHP do renderowania strony html, czy używać frameworków javascript? Renderowanie strony po stronie serwera czy renderowanie strony po stronie klienta?

text: To może być nieodpowiednie pytanie, ale naprawdę potrzebuję pomocy w wyjaśnieniu tego. Załóżmy, że chcemy stworzyć aplikację internetową, taką jak reddit lub Gmail. Sposób, w jaki zrozumiałem to z moich badań, jest taki, że istnieją dwa sposoby podejścia do tego problemu. 1) Aplikacja internetowa, taka jak reddit, może być tworzona tylko przy użyciu PHP. HTML dla front-endu będzie renderowany przez PHP na serwerze, a logika aplikacji będzie również napisana w PHP po stronie back-endu. Dzięki tej metodzie aplikacja internetowa nie będzie odczuwać "czasu rzeczywistego", ponieważ w przypadku jakichkolwiek zmian konieczne byłoby odświeżenie strony. 2) Utwórz backend RESTful w PHP i użyj frameworków JavaScript, takich jak backbone.js, aby stworzyć jednostronicową aplikację internetową i manipulować HTML na interfejsie. Front-end napisany w javascript wysyłałby żądania do back-endu, który zwracałby tylko pakiety JSON (bez HTML). W interfejsie JavaScript powinien decydować, jak manipulować interfejsem na podstawie pakietów JSON zwróconych z zaplecza. Dzięki tej metodzie aplikacje internetowe działałyby w czasie rzeczywistym. Jaka jest przewaga stosowania metody 2 nad metodą 1? Czytałem, że Gmail jest zaimplementowany przy użyciu metody 2. Dlaczego używali frameworków javascript do tworzenia front-endu, skoro mogli wysyłać HTML renderowany po stronie back-endu i wykonywać wywołania AJAX w celu sprawdzenia powiadomień? Czy generalnie lepiej jest stosować metodę 2 zamiast metody 1? Renderowanie strony po stronie serwera czy renderowanie strony po stronie klienta? Z góry dziękuję!


title: Dlaczego podklasowanie jest zbyt złe (i dlatego powinniśmy używać prototypów, aby się tego pozbyć)?

text: Czytałem o wzorcach projektowych i przeczytałem, że prototypowy wzorzec projektowy eliminuje nadmierne podklasy. Dlaczego podklasy są złe? Jaką przewagę przyniosłoby użycie prototypu nad podklasami?


title: Jak przydatny jest dziennik projektu lub dziennik?

text: Chcę wiedzieć, jak trudne/przydatne jest prowadzenie dziennika projektu lub dziennika. Martwię się, że śledzenie tego, co zrobiłem, pochłonie zbyt dużo czasu...


title: Pola/zmienne klas. Zachować pojedynczy punkt odniesienia na poziomie klasy czy przejść do poszczególnych metod?

text: Często widzę klasę, w której wartość jest wstrzykiwana do metody lub nawet konstruktora. Ta wartość jest następnie używana przez kilka metod w tej klasie, a odwołanie jest po prostu przekazywane do każdej metody, która jej wymaga. Wydaje mi się, że to zapach kodu, chociaż równie dobrze mógłbym być po prostu pedantem. O ile zmienna nie jest wymagana tylko raz w zakresie pojedynczej metody, zwykle miałbym pole na poziomie klasy, które jest inicjowane przez metodę, która otrzymuje wartość. W razie potrzeby wszelkie inne metody odwołują się do tego pola. Wydaje mi się, że to o wiele czystsze. Myśli?


title: Krótszy cykl wydawniczy z DVCS

text: Czy wybór korzystania z DVCS zamiast CVCS faktycznie skraca cykle wydawnicze? Jeśli tak, co sprawia, że cykle wydawania oprogramowania są krótsze i jakie są tego argumenty? 1. Powiązane z żądaniem ściągnięcia? Czy odgrywa tu rolę łatwiejsze przesyłanie łatek? 2. Związany z czynnikiem ludzi? Czy zespoły projektowe korzystające z CVCS zachowują się bardziej konserwatywnie w odniesieniu do harmonogramów wydań? 3. Jakieś inne czynniki?


title: Projekt klasy — wiele wywołań z jednej metody czy jedno wywołanie z wielu metod?

text: Ostatnio pracowałem nad pewnym kodem, którego interfejsy z CMS używamy i dało mi to pytanie dotyczące projektowania klas, które moim zdaniem ma zastosowanie w wielu sytuacjach. Zasadniczo to, co robię, to wydobywanie informacji z CMS i przekształcanie tych informacji w obiekty, które mogę wykorzystać programowo do innych celów. Składa się to z dwóch kroków: 1. Pobranie danych z CMS (mamy DAL, którego używam, więc zasadniczo określam, jakie dane z CMS chcę - bez logiki połączenia lub coś w tym rodzaju) 2. Mapuj analizowane dane do moich własnych obiektów [C#] Istnieją zasadniczo dwa sposoby podejścia do tego: **Jedno wywołanie z wielu metod** public void MainMethodWhereIDoStuff() { IEnumerable<MyObject> myObjects = GetMyObjects(); // Zrób inne rzeczy z myObjects } private static IEnumerable<MyObject> GetMyObjects() { IEnumerable<CmsDataItem> cmsDataItems = GetCmsDataItems(); List<MyObject> mappedObjects = new List<MyObject>(); // wykonaj czynności mapujące CmsDataItems do MyObjects return mappedObjects; } private static IEnumerable<CmsDataItem> GetCmsDataItems() { List<CmsDataItem> cmsDataItems = new List<CmsDataItem>(); // zrób coś, aby pobrać potrzebne elementy CmsDataItems return cmsDataItems; } **Wiele wywołań z jednej metody** public void MainMethodWhereIDoStuff() { IEnumerable<CmsDataItem> cmsDataItems = GetCmsDataItems(); IEnumerable<MyObject> myObjects = GetMyObjects(cmsDataItems); // rób rzeczy z myObjects } private static IEnumerable<MyObject> GetMyObjects(IEnumerable<CmsDataItem> itemsToMap) { // ... } private static IEnumerable<CmsDataItem> GetCmsDataItems() { // ... } to drugie jest lepsze niż pierwsze, ponieważ GetMyObjects nie zależy od GetCmsDataItems, a w metodzie wywołującej są jawne kroki, które są wykonywane w celu pobrania obiektów (martwi mnie, że pierwsze podejście jest rodzajem wersji zorientowanej obiektowo kodu spaghetti). Z drugiej strony te dwie metody pomocnicze nigdy nie będą używane poza klasą, więc nie jestem pewien, czy to naprawdę ma znaczenie, czy jedna zależy od drugiej. Co więcej, podoba mi się fakt, że w pierwszym podejściu obiekty można pobrać z jednej linii — najprawdopodobniej każdemu, kto pracuje z metodą główną, nie zależy, jak obiekty są pobierane, wystarczy je pobrać, a „ Daisy chained" metody pomocnicze ukrywają dokładne kroki potrzebne do ich pobrania (w praktyce mam kilka dodatkowych metod, ale nadal jestem w stanie pobrać żądaną kolekcję obiektów w jednym wierszu). Czy jedna z tych metod jest dobra, a druga zła? A może jest to po prostu kwestia preferencji lub kontekstu?


title: Generuj sygnał analogowy z Windows 7

text: Chcę wysłać sygnał analogowy z mojego komputera z systemem Windows 7. Fala będzie kombinacją około 5 częstotliwości, z maksymalnie 28 MHz. Nie będzie problemu z wygenerowaniem danych fali za pomocą C++, ale nie jestem pewien, jak dynamicznie wyprowadzić falę (ponieważ jest generowana). Jestem pewien, że port audio nie jest ustawiony na wyjście 28 MHz, ale czy jest jakiś sposób na ominięcie karty dźwiękowej i bezpośrednie połączenie z portem? Jeśli nie, jaki byłby najłatwiejszy sposób na wyprowadzenie sygnału analogowego o wysokiej częstotliwości za pomocą C++?


title: Jak radzisz sobie wielu użytkowników edytujących ten sam fragment danych w aplikacji internetowej?

text: Pracuję nad projektem, który ma na celu stworzenie aplikacji internetowej, która będzie zarządzać listą zadań między wieloma użytkownikami. Jest to główna lista zadań, której pozycje zadań są dystrybuowane przez autoryzowanego użytkownika. Każdy użytkownik ma swoje własne konto do logowania i przeglądania przydzielonych mu zadań; jedno wspólne zadanie może mieć wielu użytkowników. Próbuję pominąć szczegóły projektu, ponieważ bardziej zmagam się z ogólną koncepcją radzenia sobie z następującymi sytuacjami, ale jeśli to pomaga, używam Java, EclipseLink i GWT z zaimplementowanym RequestFactory. Baza danych to PostgreSQL. Problemy koncepcyjne, które próbuję rozwiązać, są następujące: 1. Jeśli pojedyncze zadanie, które jest wspólne dla wielu użytkowników, zmieni się w jakikolwiek sposób, np. zadanie ukończone, usunięte itp., lista zadań wszystkich użytkowników, którzy mają to zadanie, zostanie zaktualizowana. Jakie istnieją wzorce projektowe, które pomagają w realizacji tej funkcji? * Niektóre wzorce, na które się przyjrzałem, to Obserwator i Pośrednik - czy są inne, które należy wziąć pod uwagę? 2. Załóżmy, że dwóch użytkowników zmienia to samo zadanie w tym samym czasie. * Po pierwsze, czy powinienem pozwolić, aby taka sytuacja się wydarzyła, czy powinienem ją zablokować, dopóki jedna lub druga osoba nie skończy wprowadzać zmian? * Po drugie, jeśli nie zablokuję tego, jak pogodzić, czyje zmiany zaakceptować? Wiąże się to z sytuacją z punktu 1, ponieważ użytkownik 1 mógł przesłać dane i zanim użytkownik 2 otrzyma zaktualizowane dane, mógł kontynuować i przesłać swoje zmiany. Naprawdę szukam wskazówek, porad lub wskazówek, które możesz podać, jak prawidłowo synchronizować dane między wieloma instancjami tej aplikacji internetowej. Byłbym bardzo wdzięczny!


title: jak poprawić zdolność projektowania

text: Niedawno przeprowadziłem kilka wywiadów i wszystkie zadawały jedno lub dwa pytania dotyczące projektowania, na przykład jak zaprojektować szachy, monopol i tak dalej. Nie radziłem sobie z nimi dobrze, ponieważ jestem studentem i brakiem doświadczenia we wdrażaniu dużych i złożonych systemów. Uważam, że jedynym sposobem na poprawę moich możliwości projektowania jest czytanie wielu innych kodów i próba samodzielnego wdrożenia. Dlatego dla tych firm, które zadają te pytania, jakie są ich prawdziwe cele w tym zakresie? Myślę, że większość absolwentów college'u zaczyna pracę w zespole prowadzonym przez starszego lidera w swoich pierwszych pracach. Mogą nie mieć dużego doświadczenia w projektowaniu świeżo po studiach. Czy ktoś mógłby udzielić wskazówek, jak ćwiczyć te umiejętności? Dziękuję Ci bardzo


title: Generowanie dokumentacji - FiM++

text: _Jest to pytanie, które pierwotnie zadałem na Stack Overflow, ale jako pytanie dotyczące projektu koncepcyjnego, w przeciwieństwie do problemu technicznego, uważam, że może być bardziej odpowiednie lub może mieć alternatywną wartość równoległą na tej płycie._ Struktura programu FiM++ wymaga, aby kończyło się ono zamknięciem listu i nazwiskiem autora kodu w określony sposób. Droga Księżniczko Celestio i wymiana stosów i sznurek: próbka: ... Twój wierny uczeń, Zając Southpaw! Zgodnie ze specyfikacją języka słowo kluczowe „Twój wierny uczeń” (wraz z przecinkiem, ale bez spacji) jest używane jako znacznik końcowy definicji klas, a następująca nazwa jest komentarzem bez efektu syntaktycznego. Fakt, że autor jest automatycznie dołączany (jeśli nie jest to bezwzględnie wymagane) do każdego pliku, sprawia, że zastanawiam się, czy można go wykorzystać jako formę interpretowalnej dokumentacji, podobną do Java Docs. Innymi słowy, aby inne programy lub edytory były w stanie przeanalizować tę nazwę i użyć jej w jakiś sposób. 1. Jaki jest wymóg takiej wewnętrznej dokumentacji opartej na komentarzach? Czy w tym konkretnym typie składni jest coś, co mogłoby powodować problemy? 2. Czy słowo kluczowe jest wystarczające, aby pasować do tematu? Przyszło mi do głowy, że brak możliwości użycia słowa „Twoi wierni uczniowie” w liczbie mnogiej (lub ewentualnie „Twój wierny” lub „Naprawdę Twój” w przypadku niejednoznacznej wersji) sprawi, że wymienienie wielu autorów będzie wyglądać niezręcznie i nienaturalnie ( a wygląd jak naturalny list napisany przez człowieka jest jednym z podstawowych paradygmatów projektowania). 3. Jeśli rozważano stworzenie metodologii Java Docs, jakie inne funkcje powinny zostać uwzględnione? Po pierwsze, randka wydaje się powszechna. Umieszczenie jakiejś formy komentarza o dacie na górze listu prawdopodobnie wyglądałoby naturalnie i nie stanowiłoby sprzeczności z paradygmatem projektowania. Ponieważ język jest nowy, nieznany większości i szczerze mówiąc dość głupi, oto kilka zasobów do rozważenia: Pierwotne ogłoszenie o wydaniu w październiku


title: TDD i automatyzacja testów w aplikacjach silnie uzależnionych od baz danych i danych wejściowych użytkownika

text: Ostatnio czytałem w Internecie o programowaniu eXtreme i praktykach zwinnych. Chcę je dostosować. Jednak większość mojego kodu jest w całości w PHP, który jest normalnymi aplikacjami internetowymi typu CRUD. Ponadto korzystam z frameworka internetowego, takiego jak CodeIgniter, który również abstrahuje wiele podstawowych funkcji. Podsumowując, jak mogę zaimplementować programowanie oparte na testach w aplikacjach, które są silnie uzależnione od baz danych i danych wejściowych użytkownika, szczególnie w części automatyzacji testów? ### Chciałbym teraz zadać to pytanie skierowane do mojego obecnego projektu. Pracuję nad aplikacją internetową na forum uczelni. Posiada podstawowe funkcje sieci społecznościowych, a także zawiera serwer XMPP na swoim stosie. Na stos mojej aplikacji składają się następujące komponenty: 1. Serwer WWW Apache z włączonym mod_php. 2. PHP jako język back-end. (framework CodeIgniter) 3. Baza danych MySql. 4. Serwer Openfire dla XMPP. 5. HTML, CSS, jQuery i Strophe (dla XMPP) na interfejsie oraz 6. Oprogramowanie pośredniczące w Pythonie dla XMPP. Obecnie pracuję bez żadnych testów ani cyklu kompilacji. Używam SVN jako systemu kontroli wersji. I chciałbym włączyć TDD i CI do procesu rozwoju. Mam już trochę kodu w projekcie. Jakie strategie i najlepsze praktyki powinienem przyjąć przy wdrażaniu TDD i CI w tego typu projektach? PS: Jesteśmy zespołem trzech osób pracujących nad własnym projektem i nie mamy żadnej innej osoby, która miałaby wpływ na projekt (poza użytkownikami końcowymi). ### To właśnie zrobiłem, aby rozpocząć wdrażanie, zrefaktorowałem funkcję logowania, która pobierała nazwę użytkownika i hasło przekazane z interfejsu użytkownika, a następnie sprawdzała poprawność, sprawdza poprawną nazwę użytkownika, a następnie prawidłowe hasło, jeśli tak, ustawia sesję plik cookie i przekierowuje użytkownika na stronę w oparciu o jego rolę. Podzieliłem powyższą funkcję na trzy: jedną, aby pobrać nazwę użytkownika i hasło i sprawdzić, czy są poprawne, drugą, aby ustawić pliki cookie i ostatnią, która pobiera wartości z frontendu i sprawdza poprawność, wywołuje pozostałe dwie funkcje, a następnie przekierowuje. Mogłem napisać test tylko dla pierwszej funkcji. Czy to wystarczy?


title: Kanban: Jak wybrać rozmiar elementu roboczego?

text: Zaczynając od Kanbana, nie jestem pewien, jak szczegółowe powinny być moje elementy pracy. Chociaż znajdziesz wiele konkretnych zaleceń dotyczących wyboru WIP, większość samouczków Kanban, które czytałem, pozostaje dość niejasna na temat rozmiaru elementu pracy (= karty na tablicy). W celu planowania i szacowania ludzie często zalecają, aby rozmiar przedmiotu był niewielki, powiedzmy 2-16 godzin. Czy to samo dotyczy Kanban? Czy zawsze istnieje mapowanie 1:1 z mojego planu na tablicę? Jeśli nie ma najlepszych praktyk lub ogólnych zaleceń, jakie czynniki wpłynęłyby na mój wybór szczegółowości elementów pracy?


title: Jakie wymagania powinny być stawiane narzędziom do repozytorium/wersji źródłowego?

text: A czy znasz narzędzie, które spełnia te wymagania?


title: Projektowanie jednostek tak, aby były samozarządzane

text: Chociaż jest to projekt gamedev, pytanie dotyczy ogólnych praktyk OOP, więc wierzę, że trafia tutaj. Oto problem: (uwaga: od tej pory każdy odpowiednik rzeczywistych obiektów fizycznych będę nazywał „bytami”; np. kamień w grze to encja) Określona klasa: class Character { public/private CharacterInventory Inventory; publiczne/prywatne statystyki postaci; Wyposażenie do znaków publicznych/prywatnych; } Funkcjonalność Inventory jest niezależna w klasie CharacterInventory. To samo dotyczy statystyk. Moim celem jest, aby każda postać w mojej grze była samodzielną jednostką. Co przez to rozumiem? Mówiąc prościej, chcę zaprojektować bazową klasę Character tak, aby w końcu otrzymać obiekt, który reaguje w całości nawet przy najmniejszej zmianie, w którymkolwiek z jego składników. Aby było jaśniej, oto przykład: gdy przedmiot, który zmienia siłę postaci zostanie wyposażony, komponent CharacterEquipment postaci zostanie zaktualizowany. W tym samym czasie Postać wywoła obiekt Stats, aby zmienić atrybut siły. Myślałem o zrobieniu tego za pomocą wydarzeń. Character subskrybuje zdarzenie OnEquip sprzętu i w swoim module obsługi mówi, że komponent Stats wykonuje swoje zadanie. Uważam, że jest to wystarczająco eleganckie rozwiązanie; mój problem jednak leży gdzie indziej. Mam dwa sposoby na aktualizację ekwipunku postaci. Po pierwsze, ustawiając ekwipunek (i dowolny inny komponent) jako prywatny i udostępniając publiczną metodę wewnątrz Character, która wykonuje pracę polegającą na wywołaniu odpowiedniej metody aktualizacji w ekwipunku. W ten sposób: Charakter chara = new Character(); chara.AddItemToInventory(SomeItem); Drugim sposobem jest upublicznienie komponentów i uzyskanie do nich dostępu: Character chara = new Character(); chara.Inventory.AddItem(SomeItem); Dla mnie oba sposoby wydają się z grubsza równoważne pod względem czytelności. Ale drugi sposób wydaje się łamać całą „samo-zarządzaną” ideę. Zasadniczo wkraczam w „prywatną” przestrzeń postaci. Idąc drugą drogą, mogę podłączyć się do zdarzeń inwentaryzacji z innego miejsca, ale z drugiej strony, to jeszcze bardziej łamie główną ideę. Jednak idąc pierwszą drogą, mam wrażenie, że piszę zduplikowany kod; nawet jeśli tak nie jest! Myślę, że wrażenie robi na mnie fakt, że Character.AddItemToInventory(...) i CharacterInventory.AddItem(...) mają wystarczająco dużo podobieństw w nazewnictwie, aby sugerować zduplikowany kod. Szczerze mówiąc, poszłabym pierwszą drogą, chociaż wydaje mi się, że jest to dodatkowa warstwa kodu. Z drugiej strony, aby postać stała się obiektem, którym można samodzielnie zarządzać, niezbędna jest dodatkowa warstwa _bezpieczeństwa_. Ale chciałbym usłyszeć od ludzi bardziej doświadczonych ode mnie. Czy są jakieś zalety drugiej drogi? Jakieś poważne wady? Po prostu nie mogę się oprzeć wrażeniu, że piszę dodatkowy, niepotrzebny kod.


title: Dlaczego argumenty funkcji podciągów są niezgodne?

text: W wielu językach funkcja substring działa tak: substring(startIndex, endIndex) zwraca podciąg od startIndex do endIndex-1 (jeśli widzisz startIndex i endIndex jako liczone od 0) / od startIndex+1 do endIndex (oparte na 1) To jest mylące. Rozumiem, że te dwa parametry mogą być interpretowane jako „startIndex” i „długość podciągu”, ale moim zdaniem to nadal jest mylące i nawet w tym przypadku startIndex jest oparty na 0, podczas gdy długość jest oparta na 1. Dlaczego nie trzymać się jednej konwencji dla obu argumentów funkcji? i dlaczego nowsze języki, takie jak ruby i python, nadal trzymają się tego standardu?


title: Jak ustalić, czy Wzorzec Projektowy jest zaimplementowany poprawnie?

text: Z powodzeniem jestem w stanie skalować wszystkie moje stare aplikacje, które nie korzystały z udokumentowanych wzorców projektowych. Jaki to jest wzór, nie wiem. W dużej mierze odczuwałem jedynie potrzebę stosowania prostych koncepcji OOP. Koncepcja wzorców projektowych jest złożona i trudna do zrozumienia. Po wdrożeniu, jak ustalić, czy implementacja jest poprawna, a aplikacja ma naprawdę luźne sprzężenie?


title: Co tak naprawdę oznaczają wersje aktualizacyjne?

text: Wiele aktualizacji oprogramowania jest zgodnych ze schematem od v0.1 do v0.2 do v2.6.5.6. Co tak naprawdę oznaczają te „aktualizacje” oprogramowania? Czy jest zawsze przestrzegany standard branżowy, czy też programiści w zasadzie ciągle podnoszą aktualizację # lub dodają więcej liczb dziesiętnych?