title: Wzorzec projektu State: najlepsza implementacja dla mojego przypadku?

text: Rozmawiamy z kolegą o tym, jaki byłby najlepszy sposób na zaimplementowanie stanu wzorca do zarządzania kilkoma ekranami dla aplikacji, którą tworzymy. Mamy ScreenManagera (chyba klasę Context według niektórych książek), który wygląda tak (nieznaczny kod został usunięty, aby ułatwić zrozumienie): public class ScreenManager : DrawableGameComponent { #region Fields List<GameScreen> screens = new List<GameScreen> (); Lista<EkranGry> screensToUpdate = nowa Lista<EkranGry> (); InputState input = nowy InputState (); #endregion /// <summary> /// Konstruuje nowy komponent menedżera ekranów. /// </summary> public ScreenManager (Gra): base(game) { content = new ContentManager (game.Services, "Content"); graphicsDeviceService = (IGraphicsDeviceService)game.Services.GetService ( typeof(IGraphicsDeviceService)); if (graphicsDeviceService == null) wyrzuć nowy InvalidOperationException ("Brak usługi urządzenia graficznego."); } public override void Update (GameTime gameTime) { // Odczytaj klawiaturę i mysz. wejście.Aktualizacja (); // Utwórz kopię głównej listy ekranów, aby uniknąć nieporozumień, jeśli // proces aktualizacji jednego ekranu doda lub usunie inne // (lub dzieje się to w innym wątku) screensToUpdate.Clear (); foreach (ekran GameScreen na ekranach) screensToUpdate.Add (ekran); while (screensToUpdate.Count > 0) { // Usuń najwyższy ekran z listy oczekujących. GameScreen screen = screensToUpdate [screensToUpdate.Count - 1]; screensToUpdate.RemoveAt (screensToUpdate.Count - 1); // Zaktualizuj ekran. screen.Aktualizacja (czas gry); screen.HandleInput (wejście); } } public void DodajScreen (ekran GameScreen) { screen.ScreenManager = this; if ((graphicsDeviceService != null) && (graphicsDeviceService.GraphicsDevice != null)) { screen.LoadContent (); } ekrany.Dodaj (ekran); } public void RemoveScreen (ekran GameScreen) { screens.Remove (screen); screensToUpdate.Remove (ekran); } } Jak widać, screenmanager posiada listę GameScreen, które są aktualizowane przy każdym wywołaniu metody Update. Następnie mamy kilka ekranów + bazową klasę Screen. W klasie bazowej tworzymy połączenie pomiędzy GameScreen i ScreenManagerem, istnieje również połączenie pomiędzy ScreenManagerem i GameScreen: public abstract class GameScreen { ScreenManager screenManager; publiczny ScreenManager ScreenManager { get { return screenManager; } zestaw wewnętrzny { Menedżer ekranu = wartość; } } public virtual void HandleInput (InputState input) { } public virtual void LoadContent () { } public virtual void UnloadContent () { } public virtual void Aktualizacja (GameTime gameTime) { } } public class TitleScreen : GameScreen { public Texture2D titleScreen; public TitleScreen () { } public override void HandleInput (InputState input) { if (input.MenuSelect) { ScreenManager.AddScreen (nowy PlayingScreen ()); } } public class PlayingScreen : GameScreen { //...... Nieistotne szczegóły implementacji dla mojego pytania } Jak widać, TitleScreen wie o PlayingScreen, tworzy go i dodaje do ScreenManagera (tworząc zależność pomiędzy TitleScreen i PlayingScreen) . Chociaż ten rodzaj implementacji był widziany w książkach (o ile czytałem), mój towarzysz proponuje mi inny rodzaj implementacji: proponuje stworzenie podejścia Obserwatora, zastępując w TitleScreen całe zarządzanie PlayingScreen wydarzeniem, które następnie zostać zasubskrybowany przez ScreenManagera, a następnie ScreenManager zaaranżowałby całe zarządzanie ekranami. Mówi, że dzięki takiemu podejściu TitleScreen mógłby być ponownie użyty w innych aplikacjach i oddzielić ekrany między nimi, ale stworzyć dużą klasę ScreenManagera, która byłaby połączona ze wszystkimi. Nie jestem pewien, czy w moim konkretnym przypadku podejście państwa czy obserwatora jest lepsze. Jaka byłaby najlepsza implementacja? Dziękuję Ci


title: Czy powinienem umieszczać znaki nowej linii przed czy po operatorach binarnych?

text: Kiedy pracujesz w Pythonie lub JavaScript, powinieneś zawsze umieszczać operatory binarne na _koniec_ poprzedniego wiersza, aby zapobiec przedwczesnemu zakończeniu kodu przez nowe wiersze; pomaga wyłapywać błędy. Ale w C lub C++ to nie jest problem, więc zastanawiam się: czy jest jakiś powód, dla którego preferuję drugą wersję od pierwszej? zwróć partie_tekstu + 1; a zwrot partii_tekstu + 1; (Na przykład, czy jeden z nich pomaga zapobiegać innym rodzajom błędów? A może jeden z nich jest uważany za bardziej czytelny?)


Mam 6-letnie doświadczenie w programowaniu, głównie zgodnie z paradygmatem obiektowym i interesuje mnie nauka programowania funkcjonalnego. Moim głównym celem jest zostać programistą paradygmatu funkcjonalnego, a nie programistą, który posługuje się językiem funkcjonalnym, ale nadal pisze w stylu imperatywnym. Kiedy ćwiczę w programowaniu funkcjonalnym, nadal kieruję się myśleniem zorientowanym obiektowo, takim jak pętle, zmienne mutowalne i tak dalej. Wybrałem F# jako podstawowy język funkcjonalny i ponieważ jest bardzo ściśle zintegrowany z innymi językami .Net, takimi jak C#. F# zezwala na zwykłe instrukcje zorientowane obiektowo, dlatego można używać składni języka F#, ale w rzeczywistości nie tworzy kodu funkcjonalnego. Jakich stwierdzeń i podejść powinienem unikać podczas nauki programowania funkcjonalnego?


Jakie są opcje open source dla śledzenia błędów w IIS 7 i SQL Server 2008? Obecnie używamy Windows Server 2008 z IIS 7, Coldfusion 8 i SQL Server 2008. Jakie są najlepsze opcje łatwego w instalacji i użyciu narzędzia do śledzenia błędów?


title: Czym jest TCL i czy jest to umiejętność rynkowa?

text: Zaszedłem dość daleko w niektórych wywiadach dla firmy, która wydaje się używać kilku technologii, o których szczerze mówiąc nigdy nie słyszałem. Największym, z którym bym pracował, gdybym dostał tę pracę, jest TCL. Czym jest TCL, a co ważniejsze, na ile jest rynkowa jako umiejętność? Czy kilkuletnia praca w TCL byłaby jak zachorowanie na ŚWINKĘ?


title: Zarezerwuj dostęp i SQL

text: Mój młodszy brat jest CPA, ale w swojej nowej pracy musi korzystać z dostępu do pobierania własnych danych. Stał się sfrustrowany ograniczeniami raportów w puszkach, do których ma dostęp. Ma jednak dostęp do kostek danych do odczytu i może pisać własne zapytania. Szukam książki, która byłaby dla niego łatwa do zrozumienia. Jakieś sugestie?


title: Projektowanie programowania obiektowego

text: Zasadniczo chcę wykonywać wywołania interfejsu API przy użyciu pisanego przeze mnie zestawu SDK. Mam następujące klasy: * Car * CarData (przechowuje wartości wejściowe potrzebne do stworzenia samochodu, takie jak model, marka itp.) Zasadniczo, aby utworzyć samochód, wykonuję następujące czynności: [Car carWithData: cardata onSuccess: successHandler onError: errorHandler] to w zasadzie jest metodą fabryczną, która tworzy instancję Car po wykonaniu żądania wywołania API i wypełnieniu nowej klasy Car odpowiedzią i przekazuje tę instancję do successHandlera. Tak więc "Car" ma powyższą statyczną metodę tworzenia tego samochodu, ale ma także niestatyczne metody do edycji, usuwania samochodów (co spowoduje edycję, usunięcie wywołań API do serwera) Więc kiedy metoda Car create static przekazuje nowy samochód do SuccessHandler, wykonując następujące czynności: successHandler([[Car alloc] initWithDictionary: dictionary) Program obsługi sukcesu może użyć tego nowego samochodu do wykonania następujących czynności: [aktualizacja samochodu: cardata] [usunięcie samochodu] biorąc pod uwagę nowy obiekt samochodu ma teraz identyfikator dla każdego samochodu, który może przekazać do aktualizacji i usuwania wywołań API. Moje pytania: * Czy potrzebuję obiektu cardata do przechowywania danych wejściowych użytkownika, czy mogę przechowywać je w obiekcie car, który będzie później przechowywał odpowiedzi ze wszystkich wywołań interfejsu API? * Jak mogę ulepszyć ten model? W odniesieniu do CarData należy pamiętać, że mogą istnieć różne dane wejściowe dla różnych wywołań API. Tak więc funkcja tworzenia może wymagać znajomości modelu, marki itp., ale funkcja wyszukiwania może wymagać znajomości liczby elementów do znalezienia, limitu, identyfikatora początkowego itp.


title: Jakie są dobre projekty do stworzenia, aby pokazać swoim przyszłym pracodawcom?

text: Kończę ostatni rok szkoły, pracując na pełny etat, a obecnie mam pracę zupełnie niezwiązaną z programowaniem (praca studencka do płacenia rachunków...). Próbuję znaleźć pracę jako programista (lub programista stron internetowych) lub w pokrewnej dziedzinie, aby zdobyć doświadczenie. Do tej pory widziałem firmy, które zatrudniają studentów na pół etatu i próbowałem tam jechać, ale zawsze proszą mnie o jakieś portfolio, aby pokazać moją pracę i to, co potrafię. Problem w tym, że większość moich dotychczasowych projektów była przeznaczona do pracy w szkole, więc nie są imponujące. Inne projekty są przeznaczone dla mojej obecnej pracy, aby pomóc moim współpracownikom w łatwiejszym wykonaniu niektórych zadań lub aby mogli wykonać moje bieżące zadania, gdy mnie nie będzie. To byłby świetny projekt do pokazania, ale jeszcze nie jest skończony, ponieważ ciągle dodaję nowe funkcje i nie wydaje mi się, żeby to był dobry pomysł, aby pokazać coś, co nie jest wystarczająco dopracowane jako projekt, z którego jestem dumny. Nie mam więc nic do pokazania przyszłym pracodawcom, a oni nie oddzwaniają na rozmowę kwalifikacyjną ani nic. Chciałbym wiedzieć, jakie projekty warto dodać do portfolio, aby pokazać przyszłym pracodawcom. Wiem, że to zależy od tego, gdzie aplikuję i co robi ta korporacja, ale chciałbym mieć wiele różnych projektów, aby pokazać, że szybko się uczę i jestem wszechstronny. Najbardziej znam Pythona, Javę, C++, Javascript, PHP, Oracle i MySQL, ale potrafię nauczyć się innych języków i bardzo szybko z nimi funkcjonować. Pytam, bo nie chcę spędzać dużo czasu na projektach, które nie będą dobrym sposobem na pokazanie, co potrafię. Staram się zaplanować swoją przyszłość najlepiej jak potrafię.


title: Czy w języku C++ semantyka kolejności nabywania-zwalniania pamięci jest przechodnia?

text: Zgodnie z cppreference, możemy użyć semantyki release-acquire, aby zapewnić pierwszeństwo zapisu-odczytu między dwoma wątkami w następujący sposób: // Wątek A 1. Zapis w X 2. Atomic store do Y za pomocą std::memory_order_release // Wątek B 3. Atomic załaduj w Y za pomocą std::memory_order_acquire 4. Czytaj w X Przypuśćmy, że `2` jest uporządkowane przed `3` (przyjmij, że dzieje się to zgodnie z Y), mamy gwarancję, że `A` zapisuje do ` X` jest widoczny dla `B`, ponieważ możemy ustalić całkowitą kolejność zdarzeń (jak wygodnie opisano w moim wyliczeniu powyżej), ponieważ `1 zsekwencjonowane-przed 2 synchronizuje-z 3 zsekwencjonowane-przed 4' i ponieważ release-acquire zapewnia, że wszystkie zapisy `A` są widoczne dla `B` po `3`. _Jednak_ powyższy link wyraźnie stwierdza, że w tej sytuacji „wszystkie zapisy w pamięci (nieatomowe i zrelaksowane atomowe) [przez A stają się] widocznymi efektami ubocznymi w wątku B”. Moje pytanie brzmi zatem: ** czy "widoczne efekty uboczne" są uważane za zapisy wykonane `B` do wątków wcześniej nieświadomych pisania `A`?** Innymi słowy, załóżmy, że mam trzeci wątek `C` i inny atomowy : // Wątek A 1. Zapis w X 2. Atomowy magazyn do Y za pomocą std::memory_order_release // Wątek B 3. Atomowy ładunek w Y za pomocą std::memory_order_acquire 4. Odczyt w X 5. Atomowy zapis do Z za pomocą std: :memory_order_release // Wątek C 6. Obciążenie atomowe w Z za pomocą std::memory_order_acquire 7. Przeczytaj w X (załóżmy podobnie, że `5 dzieje się przed 6`). Czy „C” odczytałby „A” zapisuje do „X”? A może „widoczny efekt uboczny” `B` na `X` nie jest uważany za zapis?


title: Co robi programista w organizacji typu firmy konsultingowej?

text: Jestem na ostatnim roku studiów i zbliżam się do ukończenia szkoły. Uwielbiam programować i na pewno chcę, aby moja pierwsza praca była związana z programowaniem (patrzę też na dopasowanie, kulturę, lokalizację itp. itp.). Zauważyłem, że niektóre duże firmy konsultingowe rekrutują pracowników z wydziału inżynierii mojej szkoły i szukają kierunków informatycznych. Rozważam pójście na kilka sesji informacyjnych, aby poczuć pracę, ale ogólnie, co programista robi w takiej firmie? Jeśli firma chce objąć stanowisko „Analityka biznesowego” na kierunku informatyka, czy ta praca prawdopodobnie będzie obejmować jakiekolwiek programowanie? Jeśli tak, jak ta praca może różnić się od typowej pracy programistycznej w firmie programistycznej? Oto przykład typu firmy, którą widzę w rekrutacji.


title: Jak w MMIX Knutha x może być oktabajtem (64 bity), a M[x] być bajtem (8 bitów)?

text: W zeszycie 1 Knutha w systemie MMIX, sekcja „Pamięć i rejestry” na stronie 4 stwierdza: „więc jeśli _x_ jest dowolnym oktabajtem, M[ _x_ ] jest bajtem pamięci”. i „więc jeśli _x_ jest dowolnym bajtem, $_x_ jest oktabajtem”. Jak _x_ może być oktabajtem (64 bity), a M[ _x_ ] być bajtem (8 bitów)? I odwrotnie, jak _x_ może być bajtem, a $_x_ może być oktabajtem?


title: Budowanie kreatora trasy

text: Ok, już z góry powiem, że jest to dodatkowe zadanie na kursie Struktura danych, który biorę. To powinno rozwiązać wszystkie pytania, czy to jest praca domowa. **Kreator trasy** Mam zadanie, w którym firma musi stworzyć trasę dla zadanego zbioru danych. Zestaw danych można wprowadzić dla każdej operacji, a na końcu powinien wydrukować optymalną trasę. Warunki są następujące: * Ulice mogą być skierowane tylko z północy na południe lub ze wschodu na zachód, dzięki czemu każdy kąt między dwiema ulicami jest równy 90 stopniom. * Zbiór danych zawiera ulice, skrzyżowania oraz miejsca do odbioru i wysadzenia klienta, a także miejsce startu samochodu. Mój problem polega na tym, że mam problem z wymyśleniem prawidłowej struktury danych, aby to zrobić. To, co pojawiło się jako pierwsze z czubka mojej głowy, to wykres kierunkowy. Teoretycznie powinno pasować idealnie * Ulice są wprowadzane z przodu za pomocą identyfikatorów numerycznych * Węzeł reprezentuje skrzyżowanie i jest reprezentowany przez identyfikatory ulic * Krawędź między 2 węzłami reprezentuje fragment ulicy i ma długość * Interesujące miejsca są efektywnie podklasa węzłów Junction, dlatego mają odległość od jednego węzła do drugiego. Najlepsza trasa byłaby wtedy obliczana poprzez znalezienie najkrótszej drogi od miejsca startu samochodu do miejsca startu klienta + najkrótsza droga od miejsca startu klienta do miejsca zakończenia klienta + najkrótsza droga od miejsca zakończenia klienta do miejsca startu samochodu. Czy moje myślenie w tej sprawie jest choć trochę poprawne? Wydaje mi się to dość trudne do wyobrażenia sobie za pomocą innej struktury danych niż ukierunkowany wykres, ale może po prostu ograniczam moje opcje tym myśleniem.


title: artykuły naukowe a książki

text: Do studiowania zaawansowanych tematów, co jest lepsze i bliższe kompletnego podejścia? Czy książki mogą obejmować to, co znajduje się w artykułach naukowych, czasopismach lub tych transakcjach ACM lub LNCS firmy Springer? A może czytanie prac naukowych jest niezbędne, aby osiągnąć postęp? Jeśli nie możemy polegać na książkach w celu uzyskania informacji, w jaki sposób uczący się może wiedzieć, czego mu brakuje w konkretnym temacie, skoro artykuły naukowe obejmują konkretny (bardzo konkretny) temat, którego nie można znaleźć w postaci zebranej całego tematu jako książki. Czy jest miejsce (może to być wikipedia), które mogłoby pomóc w odnalezieniu drogi przez temat? Reformując moje pytanie, czy prace naukowe oferują nowe informacje, których nie można znaleźć w książkach, czy też są one sprytnymi zastosowaniami informacji zawartych w książkach?


title: Czy mogę powierzyć jednej klasie wiele obowiązków, jeśli tylko jedna będzie mogła być ponownie wykorzystana?

text: W zakresie, w jakim rozumiem zasadę pojedynczej odpowiedzialności, JEDNA klasa musi mieć tylko jedną odpowiedzialność. Używamy tego, abyśmy mogli ponownie wykorzystać inne funkcjonalności w innych klasach i nie wpływać na całą klasę. Moje pytanie brzmi: co, jeśli jednostka ma tylko jeden cel, który naprawdę _interakcja_ z systemem, i ten cel się nie zmieni? Czy musisz oddzielić implementacje swoich metod do innej klasy i po prostu utworzyć instancję tych z klasy encji? Innymi słowy… Czy można złamać SRP, jeśli wiesz, że te funkcje nie będą mogły być ponownie użyte w przyszłości? A może lepiej założyć, że _nie wiemy_, czy funkcjonalności tych metod będą nadawały się do ponownego użycia, czy nie i tak po prostu wyabstrahować je do innych klas?


title: Czym różnią się PGP i PEM?

text: Wiadomości e-mail są wysyłane w postaci zwykłego tekstu, co oznacza, że wiadomości, które wysyłam do Derpiny, są widoczne dla każdego, kto w jakiś sposób uzyska do nich dostęp podczas przesyłania. Aby temu zaradzić, opracowano różne mechanizmy szyfrowania: PEM i PGP to dwa z nich. PEM kanonicznie konwertuje, dodaje podpis cyfrowy, szyfruje i wysyła; PGP robi dokładnie to samo. Więc czym się różnią? Czy to PGP (jako program) służy do generowania wiadomości PEM?


title: Czy istnieją badania nad tym, jak programowanie wpływa na mózg?

text: Czy istnieją badania nad tym, jaki wpływ mają języki programowania na mózg lub ogólnie na inne sztuczne języki, takie jak matematyka? Mówiąc z mojego osobistego doświadczenia, za każdym razem, gdy mówię po włosku, czuję się zupełnie inaczej, czuję się jak wirtuoz na wyprawie, ale z drugiej strony, gdy kodowałem kod maszynowy w debug.exe, czułem się jak główny bohater `π(Film) `. Dlaczego o tym wspominam, ponieważ podejrzewam, że języki wpływają na twój umysł, a popularne legendy zbyt często to potwierdzają: są pełne matematyków, którzy przekroczyli Rubikon.


title: Prośba o opinię na temat mojego projektu OO

text: Pracuję nad aplikacją, która sama tworzy muzykę. Do tej pory oczekuję opinii na temat mojego projektu OO. To pytanie skupi się na jednej części programu. * * * Aplikacja produkuje obiekty `Tune`, które są końcowymi produktami muzycznymi. `Tune` to klasa abstrakcyjna z metodą abstrakcyjną `play`. Ma dwie podklasy: `SimpleTune` i `StructuredTune`. „SimpleTune” posiada „Melodię” i „Progresja” (sekwencja akordów). Implementacja `play` odtwarza te dwa obiekty jednocześnie. „StructuredTune” ma dwie instancje „Tune”. Własna „play” odtwarza dwie „Tune” jedna po drugiej zgodnie ze wzorcem (obecnie tylko „ABAB”). `Melodia` to klasa abstrakcyjna z abstrakcyjną metodą `play`. Ma dwie podklasy: `SimpleMelody` i `StructuredMelody`. `SimpleMelody` składa się z tablicy nut. Wywołanie na nim „play” odtwarza te nuty jedna po drugiej. „StructuredMelody” składa się z tablicy obiektów „Melody”. Wywołanie na nim „play” odtwarza te „Melodie” jedna po drugiej. Myślę, że zaczynasz dostrzegać wzór. `Progression` jest również klasą abstrakcyjną z metodą `play` i dwiema podklasami: `SimpleProgression` i `StructuredProgression`, z których każda jest inaczej skomponowana i grana inaczej. „SimpleProgression” posiada tablicę akordów i „odtwarzaj je sekwencyjnie”. `StructuredProgression` posiada tablicę `Progression` a implementacja `play` odtwarza je sekwencyjnie. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/uzgkQ.png) * * * Każda klasa ma odpowiadającą jej klasę `Generator`. `Tune`, `Melody` i `Progression` są dopasowywane do odpowiadających im abstrakcyjnych klas `TuneGenerator`, `MelodyGenerator` i `ProgressionGenerator`, z których każda ma abstrakcyjną metodę `generate`. Na przykład `MelodyGenerator` definiuje abstrakcyjną metodę `Melody generate`. Każdy z generatorów ma dwie podklasy, `Simple` i `Structured`. Na przykład `MelodyGenerator` ma podklasy `SimpleMelodyGenerator` z implementacją `generate`, która zwraca `SimpleMelody`. (Ważne jest, aby pamiętać, że metody `generate` zawierają złożone algorytmy. Są czymś więcej niż tylko metodą fabryczną. Na przykład `SimpleProgressionGenerator.generate()` implementuje algorytm do tworzenia serii obiektów `Chord`, które są używane do tworzenia instancji zwrócony `SimpleProgresja`). Każdy generator „ustrukturyzowany” używa wewnętrznie innego generatora. Domyślnie jest to generator `Simple`, ale w szczególnych przypadkach może to być generator `Structured`. ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/SuK5T.png) * * * Części tego projektu mają na celu umożliwienie użytkownikowi końcowemu wyboru rodzaju muzyki przez GUI bądź kreatywny. Na przykład użytkownik może wybrać między „prostą melodią” (`SimpleTuneGenerator`) a „pełną melodią” (`StructuredTuneGenerator`). Inne części systemu nie podlegają bezpośredniej kontroli użytkownika. * * * Moje pytanie dotyczące tego projektu jest dość specyficzne: **Kiedy patrzę na mój projekt, wygląda on jak odpowiednik 'powielania kodu': _'powielanie-klasy'_ lub _'powielanie-projektu'_. ** Wyraźnie widać, o co mi chodzi, jeśli spojrzysz na powyższy schemat. Moje pytanie dzieli się na dwie części: 1. Czy moja intuicja jest prawidłowa? Czy to powielanie lub powtarzający się wzór w projekcie to zła rzecz? 2. Jeśli tak, jak mogę zaprojektować to inaczej i wydajniej?


title: Zapobiegaj używaniu klucza produktu na wielu maszynach wirtualnych

text: Mam oprogramowanie. prawdopodobnie będzie działać na maszynach wirtualnych, które w ogóle nie mają połączenia sieciowego. Chcę, aby użytkownik płacił za każdą maszynę wirtualną uruchomioną przez użytkownika. Pomyślałem, aby poprosić użytkownika o jakiś identyfikator sprzętowy i podać mu numer seryjny, który jest unikalny dla jego komputera. Ale użytkownik może po prostu skopiować obraz maszyny wirtualnej i uruchomić dwie maszyny? Więc pomyślałem o posiadaniu klucza zabezpieczającego. Ale jak mogę uniemożliwić użytkownikowi uruchamianie dwóch maszyn wirtualnych na tej samej maszynie, które są podłączone do tego samego klucza sprzętowego? Powinna to być tylko podstawowa obrona, tak aby w celu złamania licencji wymagane było faktyczne włamanie, a nie tylko uruchomienie jeszcze jednej maszyny wirtualnej.


title: Jak najlepiej skonstruować nasze obiekty testowe w testach jednostkowych?

text: Niektóre z naszych klas logiki biznesowej wymagają kilku zależności (w naszym przypadku 7-10). W związku z tym, gdy przystępujemy do testów jednostkowych, tworzenie staje się dość złożone. W większości testów te zależności często nie są wymagane (tylko niektóre zależności są wymagane dla poszczególnych metod). W rezultacie testy jednostkowe często wymagają znacznej liczby wierszy kodu, aby zaprojektować te bezużyteczne zależności (które nie mogą mieć wartości NULL z powodu sprawdzania wartości NULL). Na przykład: [Test] public void TestMethodA() { var dependency5 = new Mock<IDependency1>(); dependency5.Setup(x => x. // niektóre ustawienia var sut = new Sut(new Mock<IDependency1>().Object, new Mock<IDependency2>().Object, new Mock<IDependency3>().Object, new Mock<IDependency4>().Object, dependency5);Asert.SomeAssert(sut.MethodA());} W tym przykładzie prawie połowa testu została podjęta tworząc zależności, które nie są używane.Zbadałem podejście, w którym mieć metodę pomocniczą [Test] public void TestMethodA() { var dependency5 = new Mock<IDependency1>(); dependency5.Setup(x => x. // niektóre ustawienia var sut = CreateSut(null, null, null, null , dependency5); Assert.SomeAssert(sut.MethodA()); } private Sut CreateSut(IDependency1 d1, IDependency2 d2...) { return new Sut(d1 ?? new Mock<IDependency1>().Object, d2 ?? new Mock<IDependency2>().Object, } Ale te często bardzo szybko się komplikują. y tworzyć te klasy BLL w klasach testowych, aby zmniejszyć złożoność i uprościć testy?


title: Wzór i referencje MVP

text: Robię aplikację Windows C#. Zadałem to pytanie i powiedziano mi, że widz/prezenter nigdy nie powinien nic wiedzieć o modelu. Czy to oznacza, że nie powinienem dodawać referencji do mojego modelu do tworzonego GUI, a zamiast tego, powiedzmy `List<Car>` powinienem transportować informacje używając tylko stringów i int, np. `Słownik<carID, carName>`? Ponieważ używam EntityFramework, połowa mojego modelu domeny znajduje się w zasadzie w `DAL`, a reszta w `BLL` i wtedy musiałbym dodać referencje do obu tych warstw. Czy to podejście, czy robię to źle?


title: Komputery operujące wyłącznie na algebrze Boole'a

text: Zastanawiałem się, czy istnieją komputery, które działają wyłącznie na operacjach logicznych. Na przykład brak add, sub, mult lub div w zestawie instrukcji (chociaż można je emulować za pomocą odpowiedniego kodu logicznego). Procesor działałby raczej porównując 2 bity na raz, z instrukcjami takimi jak i, lub, xor. Zdaję sobie sprawę, że żaden współczesny komputer nie działałby w ten sposób, ale czy jakieś historyczne komputery miały zestaw instrukcji w taki sposób?


title: Jak uniknąć downcastingu?

text: Moje pytanie dotyczy szczególnego przypadku superklasy Animal. 1. Moje zwierzę może poruszać się do przodu() i jeść(). 2. Pieczęć rozszerza Zwierzę. 3. Pies rozszerza Zwierzę. 4. Jest też specjalna istota, która również rozszerza Animal o nazwie Człowiek. 5. Human implementuje również metodę speak() (nie zaimplementowana przez Animal). W implementacji metody abstrakcyjnej, która akceptuje Animals, chciałbym użyć metody speak(). Wydaje się to niemożliwe bez przygnębienia. Jeremy Miller napisał w swoim artykule, że przygnębiony zapach. Jakie byłoby rozwiązanie, aby w tej sytuacji uniknąć ograniczenia?


title: Konteksty i domeny ograniczone DDD?

text: Pracowałem w stosunkowo złożonej aplikacji z 10 tabelami bazy danych (agregaty, jednostki/obiekty wartości) i stosując DDD. W tym momencie wydaje się, że jest to w zasadzie DDD-Lite, co oznacza, że istnieją usługi aplikacji/domen, model domeny (jednostki, obiekty wartości) i repozytoria. Wziąłem książkę Implementing DDD i pierwszą rzeczą, o której wspomina, jest brak DDD-Lite i Bounded Contexts and Domain Events jako pierwszych błędów, które zwykle pojawiają się na początku DDD. Obecnie próbowałem organizować relacje Domain Model przez Aggregate i używać przestrzeni nazw, aby to zademonstrować. Nie widzę korzyści/wady związanych z rozdzielaniem projektu modelu domeny na oddzielne konteksty ograniczone (jeszcze). Być może później stanie się to oczywiste, ale chciałbym uzyskać informacje zwrotne z życia wzięte na temat Bounded Contexts (i prawdopodobnie subdomen itp., jeśli się z tym wiążą).


title: Kto powinien otrzymać certyfikat programisty od Apple, jeśli klient chce, aby nazwa jego firmy pojawiła się w App Store?

text: Zaraz zaczynam swój pierwszy projekt z klientem, jednak będę pracować jako konsultant. Czy muszę uzyskać certyfikat programisty i opublikować aplikację mojego klienta w sklepie z aplikacjami? A może powinienem poprosić klienta o uzyskanie licencji, a następnie pomóc mu we wdrożeniu aplikacji na jego nazwisko? Nie chcą, aby nazwa firmy była moją organizacją, ale chcą, aby nazwa ich firmy była widoczna w App Store. Jednak twórcą aplikacji jest moja organizacja, a nie oni. Jak poradzić sobie z tą sytuacją?


title: Jak kontrolować wiadomości do tego samego portu z różnych nadajników?

text: _Scena:_ Firma ma wiele fabryk X, z których każda wysyła komunikat do tego samego portu odbioru na serwerze Biztalk Y; jeśli wszystkie komunikaty są przetwarzane bez większych opóźnień, każdy wyzwala komunikat wychodzący do innego systemu Z. _Problem:_ Czasami fabryka traci połączenie na pół dnia lub dłużej, a po ponownym nawiązaniu połączenia wysyłane są tysiące komunikatów. Teraz komunikaty nadal są dobrze przetwarzane przez Y (Biztalk może z łatwością obsłużyć obciążenie), ale system Z nie radzi sobie z rozlewem i może się zawiesić i poważnie opóźnić przetwarzanie wszystkich innych komunikatów z innych X. Jakie jest rozwiązanie? Tworzenie wielu lokalizacji odbioru, które pozwalają nam wstrzymać jeden lub drugi X, spowodowałoby utratę informacji, jeśli fabryka nie jest wystarczająco sprytna, aby wiedzieć, czy wiadomość została odebrana, czy nie. **Jaki jest podstawowy wzorzec do zastosowania w Biztalk w przypadku tego problemu?** Czy niektóre parametry dławienia pomogłyby ograniczyć przepływ z dowolnego X? A może ich techniki są na końcowej części Y, których powinienem użyć zamiast tego? Wolałbym ten ostatni, ponieważ mam pewność, że okno komunikatu zapamięta wszelkie awarie, które następnie można będzie wznowić.


title: Testowanie przepływu sterowania w białej skrzynce — statyczne czy dynamiczne?

text: Wczoraj zadałem pytanie, które akurat miało w sobie inne znaczenie. Widzę, że kontrola/przepływ danych jest często określana jako analiza statyczna (gdy używane są narzędzia) lub dynamiczne testowanie analizy pod kątem testowania białej skrzynki. Czy to możliwe, że narzędzia do automatycznej analizy mogą po prostu pomóc, tworząc wykresy lub faktycznie testują je z danymi wejściowymi (wtedy nie byłoby to statyczne IMHO).


title: Nie rozumiem argumentów przeciwko przeciążaniu operatorów

text: Właśnie przeczytałem jeden z artykułów Joela, w którym mówi: > Generalnie muszę przyznać, że **trochę się boję języka > cechy, które ukrywają rzeczy**. Gdy zobaczysz kod > > > i = j * 5; > > > … w C wiesz przynajmniej, że j jest mnożone przez pięć i > wyniki są przechowywane w i. >> Ale jeśli widzisz ten sam fragment kodu w C++, nic nie wiesz. > Nic. **Jedynym sposobem, aby dowiedzieć się, co naprawdę dzieje się w C++, jest > dowiedzieć się, jakie są typy i oraz j, co może być zadeklarowane gdzieś > zupełnie inaczej. Dzieje się tak dlatego, że j może być typem, który ma `operator*` > przeciążony i robi coś strasznie dowcipnego, gdy próbujesz go pomnożyć.** (podkreślenie moje). Jak możesz się tego bać? Czy ukrywanie rzeczy (znane również jako **abstrakcja**) nie jest jedną z kluczowych idei programowania obiektowego? Za każdym razem, gdy wywołujesz metodę `a.foo(b)`, nie masz pojęcia, co to może zrobić. Musisz dowiedzieć się, czym są typy `a` i `b`, co może być zadeklarowane gdzie indziej. Czy powinniśmy więc zrezygnować z programowania obiektowego, ponieważ ukrywa ono zbyt wiele rzeczy przed programistą? A czym różni się `j * 5` od `j.multiply(5)`, które być może będziesz musiał napisać w języku, który nie obsługuje przeciążania operatorów? Ponownie, musiałbyś znaleźć typ `j` i zajrzeć do środka metody `multiply`, ponieważ i oto, `j` może być typem, który ma metodę `multiply`, która robi coś strasznie dowcipnego. „Muahaha, jestem złym programistą, który nazywa metodę „mnożenie”, ale to, co w rzeczywistości robi, jest całkowicie niejasne i nieintuicyjne i nie ma absolutnie nic wspólnego z mnożeniem rzeczy”. Czy to scenariusz, który musimy wziąć pod uwagę przy projektowaniu języka programowania? Następnie musimy porzucić identyfikatory z języków programowania, ponieważ mogą wprowadzać w błąd! Jeśli chcesz wiedzieć, co robi metoda, możesz rzucić okiem na dokumentację lub zajrzeć do wnętrza implementacji. Przeciążanie operatorów to tylko cukier syntaktyczny i nie widzę, jak to w ogóle zmienia grę. Proszę, oświeć mnie.


title: jak rozplanować dobrą dokumentację

text: Muszę napisać dokumentację dla programistów, aby móc korzystać z oprogramowania internetowego API, jak powinienem ułożyć dokumentację? Co zawsze powinno być uwzględnione? I czy musi to być naprawdę długie, czy też powinno być proste i łatwe, aby ktokolwiek mógł to zrozumieć?


title: Rekurencyjne pobieranie danych z tabeli relacyjnej do XML

text: Mam poziomy tabel (Level1, Level2, Level3, ...) Dla uproszczenia powiemy, że mam 3 poziomy. Wiersze w tabelach wyższego poziomu są rodzicami wierszy tabeli niższego poziomu. Relacja nie pomija jednak poziomów. Np. Row1Level1 jest rodzicem Row3Level2, Row2Level2 jest rodzicem Row4Level3. Rodzic Level(n-1) zawsze znajduje się w Level(n). Biorąc pod uwagę te tabele z danymi, muszę wymyślić funkcję rekurencyjną, która generuje plik XML do reprezentowania relacji i danych. Np. <data> <level levelid = 1 rowid=1> <level levelid = 2 rowid=3 /> </level> <level levelid = 2 rowid=2> <level levelid = 3 rowid=4 /> </level> < /data> Potrzebuję pomocy w wymyśleniu pseudokodu dla tej konfiguracji. Oto, co mam do tej pory: Edytowany/zaktualizowany kod: XElement GetXML(ArrayList list, XElement xml) { XElement xElement = xml; // Pobierz wiersze bieżącej listy do formatu xmlData ArrayList childList = GetChildList(list); if (childList != null) { foreach (wiersz r na liście) { // Konwertuj wiersze na xml xElement = new XElement(xml); xElement.AddFirst(nowy XElement("Wiersz")); xElement.Add(nowy XAttribute("RowId", r.RowId)); // Pobierz dzieci jako xml if (childList != null) { ArrayList childRows = GetChildRows(list); XElement childXml = GetXML(childRows, xElement); if (childXml != null) { xElement.Add(childXml); } } } } return xElement; } To jest główna funkcja. W razie potrzeby mogę dodać resztę programu testowego. Dziękuję Ci. static void Main(string[] args) { Program p = nowy Program(); // Zainicjuj zestawy danych p.InitializeLists(); // Utwórz mapę xml zbiorów danych XElement x = p.GetXML(p.level1, new XElement("Row")); Konsola.WriteLine(x.ToString()); Konsola.CzytajLinię(); }


title: Oddzielanie Db od biznesu za pomocą klas dziedziczonych przy użyciu wielu widoków

text: Posiadam oprogramowanie, które ma model samochodu, który będzie używany w różnych widokach (wykaz, ogłoszenia, strona ze szczegółami, karuzela, widżet sprzedaży itp.). class CarModel extends DbModel{ } Szukam "fajnego sposobu" (kombinacji elastycznego, łatwego w utrzymaniu itp.), aby to było używane w widokach. Myślę na dwa różne sposoby 1. Posiadanie widoków obiektów dla każdego kontekstu CarViewBase{ var car;// typu CarModel function constructor(args){ //będzie instancja zmiennej wewnętrznej car na podstawie funkcji args } funkcja getThumb(){ } getTitle(){ } } CarListingView extends CarViewBase{ function getListing(){ } } CarAdsView extends CarViewBase{ //zmiany zasad biznesowych dla widżetu reklam funkcja getThumb(){ } } 2. Bezpośrednie rozszerzenie CarModel Wyzwania pojawiają się, gdy My Car Model może potrzebować abstrakcyjnej fabryki. Załóżmy, że mam na obiekcie samochód pole, które określa typ samochodu: ciężarówka, rower lub furgonetka. Jak wpłynęłoby to na mój widok obiektu? Powiedzmy, że reguła getTitle() byłaby inna dla każdego jej typu. Jak byś to zrobił?


title: Jak uzyskać bazę danych na moim systemie plików, której mogę używać w mojej aplikacji?

text: Tworzę aplikację .NET, w której będę miał dużo wpisów danych. To jednak nie trafi do żadnego serwera, ale musi być przechowywane i często aktualizowane na komputerze lokalnym. Chciałbym coś w rodzaju bazy danych SQL, która po prostu istnieje w pliku, w folderze mojej aplikacji (lub w %appdata% lub cokolwiek innego). Ale jak mam się do tego zabrać? Czego mogę użyć? Jestem wielkim fanem Linq2Sql, więc jeśli to obsługuje, byłoby wspaniale. Próbowałem użyć MSSQL Compact, ale tak naprawdę nie mogłem go uruchomić zbyt dobrze. Zasadniczo wymagało to ode mnie również zainstalowania MSSQL. Jakie mam opcje inne niż MSSQL Compact?


title: Wydajne mieszanie metod synchronizacji i asynchronicznej w ramach jednej metody?

text: Ok, brzmi to dziwnie, ale kod jest bardzo prosty i dobrze wyjaśnia sytuację. publiczne zadanie wirtualne asynchroniczne RemoveFromRoleAsync (użytkownik AzureTableUser, rola ciągu) { AssertNotDisposed(); var role = czekaj GetRolesForUser(user); role.Roles = UsuńRoles(role.Role, rola); await Run(TableOperation.Replace(roles)); } (Wiem, że mówię trochę w streszczeniu poniżej, ale powyższe jest rzeczywistą metodą z tego, co będzie rzeczywistym kodem produkcyjnym, który faktycznie robi to, o co tutaj pytam, i naprawdę interesuje mnie twój rzeczywisty przeglądanie go pod kątem poprawności vis a vis wzorca async/await.) Coraz częściej spotykam się z tym wzorcem teraz, gdy używam więcej `async`/`await`. Wzorzec składa się z następującego łańcucha zdarzeń: 1. Oczekiwanie na wywołanie początkowe, które dostarcza mi informacji, nad którymi muszę popracować 2. Praca nad tymi informacjami synchronicznie 3. Oczekiwanie na końcowe wywołanie, które zapisuje zaktualizowaną pracę Powyższy blok kodu jest zazwyczaj jak podchodzę do obsługi tych metod. `Oczekuję` na pierwsze połączenie, które muszę, ponieważ jest asynchroniczne. Następnie wykonuję pracę, którą muszę wykonać, która nie jest związana z IO lub zasobami, a więc nie jest asynchroniczna. Na koniec zapisuję swoją pracę, która również jest „asynchronicznym” wezwaniem i poza kultem cargo „oczekuję” na nią. Ale czy jest to najbardziej wydajny/poprawny sposób obsługi tego wzorca? Wydaje mi się, że mógłbym pominąć `oczekiwanie` na ostatni telefon, ale co jeśli się nie powiedzie? I czy powinienem użyć metody `Task`, takiej jak `ContinueWith`, aby połączyć moją pracę synchroniczną z oryginalnym wywołaniem? Jestem teraz w punkcie, w którym nie jestem pewien, czy radzę sobie z tym poprawnie. ** Biorąc pod uwagę kod w przykładzie** , czy istnieje lepszy sposób obsługi tego łańcucha wywołań metody asynchronicznej/synchronizacji/async?


title: Jak zarządzać rosnącym zespołem?

text: Jestem asystentem administracyjnym CTO, a nasza organizacja ostatnio bardzo się rozwinęła. W ciągu sześciu miesięcy połączyliśmy się z inną organizacją, a nasz zespół deweloperski powiększył się z 8 do 16, z kolejnymi 8 osobami w QA. To, z czym mamy teraz do czynienia, to bardzo techniczna osoba, z niewielką cierpliwością, zarządzająca znacznie większym zespołem niż jest przyzwyczajony, z czego 40% to juniorzy, a także ze wzrostem liczby projektów. Nie trzeba dodawać, że mój szef jest ciągnięty w zbyt wielu kierunkach jednocześnie. Jak mogę pomóc mu zarządzać obciążeniem pracą i zespołem, aby zespół czuł, że otrzymuje wystarczającą pomoc i wsparcie oraz pozostaje skuteczny? Gdzie mogę znaleźć dodatkowe zasoby dotyczące zarządzania rosnącym zespołem?


title: Logowanie na podstawie numeru telefonu

text: Próbuję wdrożyć logowanie na podstawie numeru telefonu i nie jestem pewien, czy powinienem prosić użytkowników o pełny numer, tj. kod kraju + numer, czy tylko numer. Co do tej pory mam na myśli: * Spróbuj optymistycznie logować się przy użyciu dowolnej liczby podanej przez użytkownika. * Najprawdopodobniej wróci z dopasowaniem jednego użytkownika. * W przypadku kolizji zgłoś błąd (i pokaż użytkownikowi pomocną wskazówkę, prosząc o wprowadzenie pełnej liczby) Myślę, że jest to uproszczone podejście o minimalnym tarciu i złożoności (w przeciwieństwie do wykrywania IP, rozdzielczości opartej na geografii itp. .).


title: Jaki jest dobry algorytm do dystrybucji przedmiotów o określonych wymaganiach?

text: Muszę programowo rozdzielić zestaw przedmiotów do niektórych podmiotów, ale obowiązują zasady zarówno dotyczące przedmiotów, jak i encji, takie jak: Pozycja pierwsza: 100 jednostek, tylko jednostki z Foo Pozycja druga: 200 jednostek, bez ograniczeń Pozycja trzecia: 100 jednostki, tylko byty, które mają Bar Entity jeden: Tylko przedmioty, które mają Baz Entity sto: Żadnych przedmiotów, które mają Fubar. Muszę tylko wskazać właściwy kierunek, zbadam i nauczę się sugerowanych metod.


title: Czy są jakieś dobre narzędzia, które pomogą zaimplementować lub wymusić prawidłowe wzorce równości i hashcode dla c#?

text: Bardzo częstym błędem w moim zespole programistycznym jest zapominanie lub nieprawidłowe zastępowanie równań i hashcode. Chociaż wzorzec jest prosty, istnieje wiele standardowych kodów, które robią to poprawnie. Implementacja `IEquatable<T>`, `IEquatable`, `IComparable<T>` i `IComparable`. Chociaż czasami trzeba to zrobić w niestandardowy sposób, prawie zawsze jest to proste sprawdzenie typów, po którym następuje sprawdzenie uporządkowanego zestawu pól. W przypadku braku obsługi kompilatora (choć mam nadzieję, że nadchodzi), czy generator/narzędzie do analizy kodu może pomóc w rozwiązaniu tego problemu? Pomysł to po prostu oznaczanie właściwości lub pól atrybutem (powiedzmy [EC_KEY] (dla klucza równości/porównania)). Następnie wszystkie odpowiednie procedury sprawdzania tych pól/właściwości (w porządku leksykalnym) zostałyby wygenerowane (przy użyciu odpowiednich operatorów równości lub porównania typu tego pola i, oczywiście, naturalnego porządkowania prymitywów). nie znaleziono żadnych tagów (lub jawnych przeciążeń), ale mogą mieć tagi, takie jak [EQ_ALL] (aby użyć wszystkich pól/właściwości) lub [EQ_IGNORE], aby jawnie zignorować klasę.


title: Kompleksowe zarządzanie pojazdami wydawniczymi

text: Zastanawiam się nad ulepszeniem naszego systemu kompilacji i wydawania. Jesteśmy sklepem .Net/Windows i nie widzę żadnych naprawdę dobrych narzędzi dla systemu Windows do generowania plików, które mają zostać usunięte w łatce lub hotfixie. Obecnie używamy TFSBuild 2010 z Windows Workflows do naszych ciągłych kompilacji integracyjnych, a także codziennej pełnej kompilacji, która obejmuje pakiet Installshield do wdrożenia. 1. Jaki jest dobry sposób na generowanie listy plików, które mają być uwzględnione w wydaniu w stylu „poprawki”, gdzie nie redystrybuuje się wszystkich plików, ale tylko te, które są niezbędne do wprowadzenia niezbędnych zmian? Czy są jakieś narzędzia typu open source, które dobrze się w tym sprawdzają, czy też zespoły zazwyczaj tworzą własne? Rozważałem użycie Beyond Compare, ale wolałbym coś open source. Tworzenie „łatki” pliku musi być w 100% możliwe do zautomatyzowania. 2. Które pojazdy do wydania naprawdę powinny być w stylu patcha? A które wydania powinny zastąpić wszystkie pliki systemowe związane z naszą aplikacją? Załóżmy, że mamy bardzo dużą ilość zasobów niezbędnych do utrzymania. 3. Czy istnieją jakieś ustalone materiały, które są zaufane w branży w zakresie strategii na ten temat? Zdaję sobie sprawę, że inaczej jest w przypadku „przedsiębiorstw” niż w przypadku typowych stron internetowych. Bardziej szukam strategii „przedsiębiorczych” ze względu na nasz styl dystrybucji produktów. tl;dr > Szukasz informacji na temat wysyłania bardziej niezawodnych paczek?


title: Czy znasz wzorzec projektowy pompy danych?

text: Często spotykam się z sytuacją, w której muszę napisać program, który odczytuje obiekty danych z pliku lub systemu, dokonuje transformacji danych, konwertuje dane do innego modelu danych, a następnie przesyła dane do innego pliku lub systemu. Czy znasz model obiektowy, który ułatwia tego typu programy w taki sposób, że jest wtykowy i skalowalny?


title: Czy porównania językowe mają sens?

text: Dr Bjarne Stroustrup w swojej książce D&E mówi > Kilku recenzentów poprosiło mnie o porównanie C++ z innymi językami. Zdecydowałem się > tego nie robić. Tym samym potwierdziłem długoletni i > mocno wyznawany pogląd: „Porównania językowe rzadko są znaczące, a nawet > rzadziej uczciwe” . Dobre porównanie głównych języków programowania wymaga > więcej wysiłku niż większość ludzi jest w stanie wydać, doświadczenia w szerokim zakresie > obszarów zastosowań, sztywnego utrzymania > niezależnego i bezstronnego > punktu widzenia oraz poczucia uczciwości. Nie mam czasu, a jako projektant > C++ moja bezstronność nigdy nie byłaby w pełni wiarygodna. > > -- Projekt i ewolucja C++ (Bjarne Stroustrup) Czy zgadzacie się z jego stwierdzeniem „`Porównania językowe rzadko kiedy są sensowne, a jeszcze rzadziej są uczciwe`”? Osobiście uważam, że porównywanie języka X z Y ma sens, ponieważ daje o wiele więcej powodów, by kochać/pogardzać X/Y `:-P` Co myślicie?


title: Jakie są rozsądne argumenty przemawiające za oprogramowaniem o zamkniętym kodzie źródłowym?

text: Podoba mi się technologia (w tym język programowania), ale jej platforma jest zamkniętym źródłem i wiele razy spotykam ludzi, którzy pytają mnie: „dlaczego używasz platformy o zamkniętym kodzie źródłowym, dlaczego nie skorzystać z alternatywy open source? Jeśli coś jest nie tak, powinno bądź z zamkniętym źródłem, a nie z otwartym, (jak mówią)”. Właściwie nie wiem, jak odpowiedzieć na ich pytanie. Czy ktoś mógłby mi podać dobrą odpowiedź? Dlaczego korzystasz z platformy o zamkniętym kodzie źródłowym?


title: Jak mogę uczynić moją klasę programowania bardziej interesującą?

text: Podobne pytanie znalazłem już tutaj na SO, ale prawie wszystkie odpowiedzi były bardziej filozoficzne niż praktyczne. Chciałbym kilka PRAKTYCZNYCH pomysłów, jak uczynić mój kurs programowania bardziej interesującym. Nie ma znaczenia, ile wysiłku to wymaga. Zastanawiałem się, czy nie poprosić moich studentów, aby na początku kursu wybrali temat i popracowali nad nim jako prawdziwym, małym, startupowym projektem, który mogliby wykorzystać finansowo po jego zakończeniu. Ale obawiam się, że większość z nich nie doprowadzi projektu do końca i że może się to bardzo znudzić. Myślałem też o zaangażowaniu ich w Torcs, ale obawiam się, że większość z nich nie podołałaby zadaniu. Przy okazji, Torcs to symulacja wyścigów samochodowych, ale istnieje interfejs API dla programistów, dzięki któremu mogą opracować własną sztuczną inteligencję dla kierowcy, a następnie ścigać się swoim samochodem z AI innych programistów. Nie pytam tutaj o przykłady problemów, bo zadałem o tym osobne pytanie. Potrzebuję pomysłów na urozmaicenie i urozmaicenie moich wykładów.


title: Odświeżanie algorytmów. Dlaczego heapsort jest algorytmem insort?

text: Nie rozumiem, dlaczego sortowanie sterty jest uważane za algorytm **sortowania** w miejscu. Mam na myśli **dodatkową** strukturę danych wypełnioną elementami tablicy do sortowania, tj. stertą, która służy do pomocy w wyodrębnieniu wartości minimalnej i procesie sortowania. Więc może nie rozumiem tutaj definicji inplace? Ale na przykład sortowanie przez wstawianie jest oczywiste, że jest to algorytm inplace, tj. Nie potrzeba dodatkowej pamięci dla elementów. Dlaczego więc uważa się to za właściwe?


title: Jak mogę polecić testowanie jednostkowe na prywatnym kodzie?

text: Staram się popierać testowanie jednostkowe w mojej grupie roboczej, ale często spotykam się z zastrzeżeniami, że powinny one być używane tylko do zewnętrznych interfejsów API (który jest tylko minimalną i niekrytyczną częścią naszego systemu), a nie na wewnętrznych i prywatnych kod (który ma teraz tylko testy funkcjonalne). Chociaż uważam, że test jednostkowy może i powinien być stosowany do całego kodu, jak mam przekonać moich współpracowników?


title: Ile uczysz się matematyki w informatyce?

text: Ile musisz wiedzieć o informatyce? Kiedy kończysz studia doktoranckie z informatyki w większości szkół, ile wiesz o matematyce? Zgaduję, że poza liceum, musisz wiedzieć, co nazywa się matematyką dyskretną, która jest zwykle dostępna w większości szkół i obejmuje wszystkie pojęcia wymagane w informatyce (kombinatoryka, prawdopodobieństwo i statystyka, teoria liczb, dowody, języki formalne itp.) I domyślam się, że musisz znać algebrę liniową i rachunek różniczkowy (zarówno jedno, jak i wielowymiarowe). Nie sądzę, że musisz znać równania różniczkowe, algebrę abstrakcyjną, wyższą analizę, geometrię nieeuklidesową i tym podobne - zazwyczaj student matematyki się tego uczy.


title: Tak bardzo zazdroszczę programistom w średnim wieku. Czy mamy pecha?

text: Przede wszystkim nie mogłem wybrać odpowiednich słów na tytuł po przeczytaniu Ile lat jest „za stary”? pytanie. Nadal nie mogę się zdecydować ze starym, w średnim wieku, ekspertem lub profesjonalistą. Jak wiesz, w StackExchange jest wielu programistów w wieku powyżej 35-40 lat. Pomagają początkującym i mniej doświadczonym ludziom. Są tak cennymi użytkownikami. I przede wszystkim ich niektóre odpowiedzi są niesamowite, ponieważ dobrze analizują i dodają swoje doświadczenie do odpowiedzi. Kiedy widzę takich użytkowników, wszyscy zaczynali programować w językach programowania typu Lisp, Pascal, Cobol lub Basic. Są to pierwsze nowoczesne języki programowania. I myślę, że ci ludzie mają takie szczęście, że uczą się najpierw programowania z nimi, ponieważ są blisko języka maszynowego. Może lepiej uczą się podstaw programowania. Teraz wygląda na to, że łatwo pracują z programowaniem obiektowym. Rok temu ukończyłem inżynierię komputerową. W pierwszym roku nauczyliśmy się powierzchownie języka programowania C. Drugi rok to kurs C# i Java. Ale kiedy próbuję nauczyć się tych języków w kolegium, zawsze czuję, że czegoś mi brakowało. Nauka języków, struktur, bibliotek... jeśli dobrze, ale nauczyciele nigdy nie uczą nas "Jak działają kody w maszynie?". Uczą nas języka programowania popularnego na rynku oprogramowania. Tak jakby przygotowują nas do firm. Myślą, że jeśli nauczymy się assemblera lub fortranu, nie możemy łatwo znaleźć pracy w oparciu o Javę lub C#. Niestety w dzisiejszych czasach to prawda. Czy lepiej byłoby uczyć się najpierw Assembly, Fortran, Cobol zamiast Java i C#? Czy mamy pecha?


title: Jak zapobiec traktowaniu mojego pliku wykonywalnego przez AV jak zły lub wirus?

text: Tworzę oprogramowanie, które będzie działać w systemie Windows i będzie działać jak program uruchamiający grę, który będzie służył jako automatyczny aktualizator i weryfikator plików na komputerze klienckim w siede. Jedna rzecz, której nie rozumiem, dlaczego mój program antywirusowy (Avast) uważa mój plik exe za niebezpieczny i nie uruchomi go bez poproszenia o umieszczenie go w piaskownicy w celu bezpiecznego użytkowania. Czy są jakieś zasady, których moje oprogramowanie powinno przestrzegać, aby było traktowane jako dobre, czy też powinienem płacić setki dolarów za jakiś rodzaj podpisu cyfrowego i inne rzeczy? Używam C# z MS Visual Studio 2010. Raport VirusTotal. Brak wstrzyknięć DLL, działający jako zdalny program do pobierania plików, przy użyciu klasy WebClient(). To nie jest tak, że ostrzega przed wirusem, ale "sugeruje" piaskownicę. Spójrz na zrzut ekranu:![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/Cp85Z.png)


title: Architektura aplikacji dla systemu opartego na abonencie

text: Planuję zbudować system, w którym użytkownicy „subskrybują” „rekordy”. Rekordy są aktualizowane zgodnie z harmonogramem, kilka razy dziennie. Gdy rekordy są aktualizowane, użytkownik powinien zostać powiadomiony, że te rekordy zostały dodane/zaktualizowane. Nie chcę, aby każdy użytkownik miał własną kopię rekordów ze względu na przestrzeń dyskową i narzut związany z wstawianiem wielu rekordów, po jednym dla każdego subskrybenta, przy każdym uruchomieniu harmonogramu. Jednak każdy użytkownik będzie musiał dodać metadane do każdego rekordu, który subskrybuje. Takie jak notatki i flagi, że rekord został przeczytany itp. Czy ktoś może mi udzielić porady, jak zbudować taki system lub gdzie mogę dowiedzieć się więcej o tego rodzaju architekturze aplikacji? Czy to właściwe miejsce, by zapytać? W tej chwili nie jestem nawet pewien, po co Google ;)


title: Jak zarządzać moim kluczem prywatnym do podpisywania zestawów .NET?

text: Jako hobby piszę biblioteki klas open source .NET i myślałem o ich podpisaniu. Mogę uzyskać program Visual Studio, aby wygenerował mi chronioną hasłem parę kluczy publiczny/prywatny i zapisać ją jako plik .pfx, ale nie sądzę, że powinienem to robić dla projektu _each and every_. Jedna para kluczy powinna wystarczyć, prawda? Oczywiście nie zamierzam umieszczać mojego pliku .pfx z kodem źródłowym w moim publicznym repozytorium online: tylko udostępnione przeze mnie zestawy powinny być podpisane moją parą kluczy. Inne osoby mogą używać własnych kluczy, jeśli chcą. Zostało mi więc jakiś plik .pfx, który rzekomo zawiera moją parę kluczy publiczny/prywatny. * Jak skutecznie zarządzać moją parą kluczy? * Gdzie mam to przechowywać? * Czy muszę go gdzieś zaimportować? * Jak mogę go używać na moim komputerze i laptopie? * Jak mogę zapobiec piekłu pary kluczy podczas przełączania z komputera na laptopa?


title: Czy wikipedia jest cennym źródłem do badania struktur danych? (czy możemy to nazwać kompletnym?)

text: Czy mogę polegać na Wikipedii, aby w pełni poznać struktury danych, korzystając z listy struktur danych http://en.wikipedia.org/wiki/List_of_data_structures i linków, do których się odnoszą? To samo pytanie do algorytmów http://en.wikipedia.org/wiki/List_of_algorithm_general_topics ?... Co po nauce algorytmów i struktur danych? Specjalizujesz się w określonej dziedzinie algorytmów, takich jak graoika komputerowa, zarządzanie pamięcią... itd.? czyli jaki może być plan opanowania programowania po znajomości składni języka i podstaw projektowania programów i logiki programowania? Pytałem o wikipedię, ponieważ chciałbym znaleźć kompletny zasób lub przynajmniej jest to zasób, który wystarczyłby na dziedzinę struktur danych zamiast szukać osobnych artykułów w różnych miejscach, innymi słowy alternatywa dla książek, które mogą być nawet bardziej kompletne .


title: Pół-bezpieczne przechowywanie danych w zdalnym magazynie kluczy-wartość, zapewniające minimalne uszkodzenie danych/manipulacje

text: Zastanawiam się nad kilkoma pomysłami na przechowywanie danych o użytkowaniu (podobnie jak w Google Analytics) dla niektórych produktów Javascript, nad którymi pracujemy. Niestety, jak dotąd nie wiemy w 100%, jakie dane chcemy przechowywać i mamy tylko podstawowe pojęcie o metrykach, które chcemy z nich zebrać. Myślę, że zasadniczo chcemy przechowywać zestaw par klucz-wartość pogrupowanych według unikalnego identyfikatora instancji (w tej logice mogą być wady :)). Mając to na uwadze, stworzyłem (bardzo) szybki prototyp w monkrb, którego łączna suma jest poniżej: pobierz "/store" wykonaj klucz = params[:klucz] wartość = params[:wartość] instance_id = params[:instance_id ] Ohm.redis.hset instance_id, klucz, koniec wartości Chociaż to powinno działać, obawiam się, że dociekliwy umysł może łatwo zanieczyścić nasze dane losowymi zestawami i wartościami klucz-wartość, podwajając fakt, że wszystko to będzie w języku JavaScript, więc wszystko, co robimy, aby go zabezpieczyć lub zaszyfrować, będzie dość przejrzyste dla każdego, kto chce zobaczyć źródło. Wiele z nich powinno być łatwo odfiltrowanych, ponieważ nadejdzie czas raportowania, będziemy mieli pomysł, które klucze nas interesują (i będziemy wiedzieć, które stworzyliśmy), więc możemy po prostu śmiecić dowolne zestawy zawierające klucze, o których nic nie wiemy o (chociaż znowu istnieje ryzyko, że dodatkowe klucze zostały dodane do inaczej poprawnego zestawu..) Idąc tą ścieżką, oto moje pytania: 1. Jakie kroki mogę podjąć, aby maksymalnie utrudnić dodanie całkowicie fałszywych danych? (uzgadnianie, zaciemnianie, podpisywanie itp.) 2. Co mogę zrobić, aby spróbować wykryć niepotrzebne dane? (bonus za zgrubny pomysł, jak to zaimplementować) 3. Jakie kontrole powinienem mieć, aby powstrzymać odgadnięcie istniejącego identyfikatora instancji i zamieszanie z nim? (więc żadne dane historyczne nie mogą zostać zanieczyszczone) Należy zauważyć, że na obecnym etapie jest to głównie akademickie, ponieważ wiem, że 6 linijek ruby to nie aplikacja, jestem po prostu zainteresowany scenariuszem i chciałbym posłuchaj innych podejść i przemyśleń, gdzie można by z tym pójść.


title: Przechowywanie „wrażliwych” danych w pliku ustawień

text: Piszę małe narzędzie w AutoIt, które łączy się z Twitterem. Chciałbym przechowywać nazwę użytkownika i hasło w pliku ustawień programów, ale wiem, że oczywiście musi być zaszyfrowany. Wcześniej, gdy robiłem to do użytku osobistego, po prostu zaadoptowałem format `ini` - zapisany do pliku tymczasowego, a następnie zaszyfrowałem go za pomocą absurdalnie długiego hasła i 256-bitowego szyfrowania AES, po prostu nazywając plik "settings.eini" . Jednak zamierzam oferować to narzędzie publicznie. Nie oczekuję, że duża liczba ludzi użyje go lub stanie się celem, ale pomyślałem, że najlepiej nie ryzykować. Czytałem o tworzeniu niestandardowych rozszerzeń plików i wydaje mi się, że jest to coś, czego na razie chcę uniknąć, więc czy istnieje standardowy / akceptowalny sposób na zrobienie tego?


title: Dlaczego metoda „format” nie jest szerzej stosowana w Pythonie?

text: Chyba czegoś tu brakuje, po poszukiwaniach nie mogłem znaleźć odpowiedzi. Zbadałem sporo projektów Pythona i jedną rzeczą, którą ciągle zauważam, jest fakt, że większość z nich nadal używa operatora **`%`** do formatowania łańcuchów zamiast nowszego, zalecanego **`.format( )`** metoda. Czy jest ku temu powód? wydaje się to banalną zmianą, chyba że całkowicie mi czegoś brakuje. Na przykład: # policz, ile razy użyto techniki operatora % find . -name "*.py" -exec grep -HE "\"[^\"]+\"\s\%\s\w+|'[^']+'\s\%\s\w+" {} \; | wc -l # i to samo dla format() find . -name "*.py" -exec grep -HE "\w+\.format\(" {} \; | wc -l # Wyniki: # # % operator format() # iPython 670 63 # Django 977 8 # Tornado 91 0 # prośby 25 1 Nie ma powodu do tego pytania, tylko ciekawi.


title: Jaka jest zaleta wyboru kodowania ASCII nad UTF-8?

text: Wszystkie znaki w ASCII można zakodować przy użyciu UTF-8 bez zwiększania pamięci (oba wymagają bajta pamięci). UTF-8 ma dodatkową zaletę obsługi znaków poza „znakami ASCII”. Jeśli tak jest, dlaczego _kiedy_ będziemy wybierać kodowanie ASCII zamiast UTF-8? Czy istnieje przypadek użycia, kiedy wybierzemy ASCII zamiast UTF-8?


title: Jaki byłby optymalny sposób rozwiązania takiego problemu?

text: Mam problem polegający na tym, że muszę zmienić wszystkie X w tablicy 2D na 0 i muszę obliczyć minimalne kroki (gdzie pojedynczy krok polega na zmianie całego wiersza lub kolumny) wymaganych do tego. Na przykład w tablicy takiej jak- [[X, X, X], [X, 0, 0], [X, 0, 0]] Minimalna liczba wymaganych kroków to 2. Myślałem o podejściu brutalnej siły (gdzie sprawdzam raz wiersz, a potem kolumna, a następnie porównuję je, aby sprawdzić, co wymaga minimalnej liczby kroków), ale to dałoby mi odpowiedź 3, co nie jest pożądanym wynikiem. Jakakolwiek pomoc lub wskazówka dotycząca tego, jak mam podejść do tego problemu, będą mile widziane, dzięki!


title: Historia prefiksu css dostawcy

text: Kiedy i jak rozpoczął się proces prefiksowania CSS z prefiksem specyficznym dla dostawcy. Która przeglądarka/organizacja to zaczyna i dlaczego to się zaczęło. Przeszukałem sieć, ale nie znalazłem żadnych szczegółów na ten temat.


title: Jaka jest logika tworzenia ViewBag jako obiektu dynamicznego w ASP.NET MVC 3?

text: Ostatnim razem sprawdzałem, że C# jest uwielbiany przez wielu, ponieważ jest to język statycznie wpisywany, ale wprowadzenie ViewBag w ASP.NET MVC 3 przynosi ten sam problem, co w przypadku stringów: w kontrolerze wpisujesz jedną rzecz, a w widoku możesz błąd wpisz coś innego. Jaki jest powód, dla którego ViewBag jest dynamiczny? Jak jest lepiej?


title: Wyszukiwanie ciągów całkowitych

text: Mam dość złożony problem z wyszukiwaniem, który udało mi się sprowadzić do poniższego opisu. Googlowałem, ale nie udało mi się znaleźć algorytmu, który wydaje się idealnie pasować do mojego problemu. W szczególności potrzeba pominięcia dowolnych liczb całkowitych. Może ktoś tutaj może mi coś wskazać? Weź ciąg liczb całkowitych A, na przykład (1 2 3 4) Weź różne ciągi liczb całkowitych i sprawdź, czy któryś z nich pasuje do A w taki sposób. 1. A zawiera wszystkie liczby całkowite w badanym ciągu 2. Kolejność liczb całkowitych w badanym ciągu jest taka sama w A 3. Nie dbamy o liczby całkowite w A, których nie ma w badanym ciągu 4. Mamy chcesz wszystkie pasujące sekwencje testowe, nie tylko pierwsze. Przykład A = (1 2 3 4) B = (1 3) C = (1 3 4) D = (3 1) E = (1 2 5) B pasuje do A C pasuje do A D nie pasuje do A, ponieważ kolejność jest inna E nie pasuje do A, ponieważ zawiera liczbę całkowitą, której nie ma w A Mam nadzieję, że to wyjaśnienie jest wystarczająco jasne. Najlepsze, co udało mi się zrobić, to skonstruować drzewo sekwencji testowych i iterować po A. Potrzeba możliwości pomijania liczb całkowitych prowadzi do wielu nieudanych ścieżek wyszukiwania. Dzięki Czytając kilka sugestii czuję, że muszę wyjaśnić kilka punktów, które pozostawiłem zbyt niejasne. 1. Powtarzające się liczby są dozwolone, w rzeczywistości jest to dość ważne, ponieważ pozwala pojedynczej sekwencji testowej na dopasowanie A na wiele sposobów A = (1234356), B = (236), dopasowania mogą być albo -23---6 lub - 2-3-6 2. Spodziewam się, że będzie bardzo duża liczba sekwencji testowych, przynajmniej w tysiącach, a sekwencja A będzie miała zazwyczaj maksymalną długość około 20. Tak więc po prostu próbuję dopasować każdą sekwencję testową jeden po drugim jeden przez iterację staje się wyjątkowo nieefektywny. Przepraszam, jeśli to nie było jasne.


title: Ile powinienem zapłacić firmie Microsoft sprzedając oprogramowanie desktopowe i internetowe oparte na VB.NET przy użyciu MS SQL 2005 Express Edition?

text: Czy mogę dystrybuować edycję MS SQL 2005 Express wraz z moją aplikacją do klienta?


title: Dlaczego niektóre pliki w projektach programistycznych są nazywane „wspólnymi”?

text: Widziałem wiele projektów, które mają plik o nazwie `commons`, na przykład: commomns.go Zastanawiałem się, dlaczego przyjęto tę konwencję i jakie znaczenie ma nazwanie pliku lub pakietu lub czegoś wspólnego?


title: Jak odwieść użytkowników od używania tego samego hasła w podobnych systemach?

text: Tworzę aplikację internetową, która łączy się z innymi usługami sieciowymi (przy użyciu ściśle anonimowego powiązania, więc nie są używane żadne hasła użytkownika). Jednak aplikacja internetowa sama utrzymuje swoich użytkowników i jest zobowiązana do proszenia o podanie pewnych szczegółów, takich jak adresy e-mail i publiczne linki do tych innych usług internetowych (na przykład nazwa użytkownika, ale nie hasło). Chcę powstrzymać lub uniemożliwić użytkownikom ponowne używanie haseł w mojej aplikacji, których używali również w aplikacjach, do których łączę się. Na przykład, jeśli poproszę o ich adres e-mail i podam adres gmail, nie chcę, aby używali hasła do Gmaila w moim systemie. Innym przykładem może być ponowne użycie hasła do połączonego systemu, w którym również podali mi swoją nazwę użytkownika. Jednym z pomysłów, jaki miałem, było po prostu spróbować użyć informacji, które mi przekazali, wraz z hasłem, które próbują przechowywać i zalogować się do tych zewnętrznych aplikacji internetowych w celu przetestowania hasła - a następnie natychmiast rozwiąż powiązanie, jeśli mi się udało, i poproś użytkownika o użycie inne hasło. Podejrzewam jednak, że jest tam wiele problemów moralnych i prawnych. Powodem, dla którego jest to dla mnie ważna sprawa, jest odpowiedzialność. Moja aplikacja po prostu nie jest wystarczająco finansowana, aby właściwie zainwestować w zabezpieczenia związane z hasłami użytkowników. Solone, zaszyfrowane hasło w publicznej bazie danych podobnej do SQL jest tak bezpieczne, jak to tylko możliwe. Więc jeśli hasła i powiązane nazwy użytkowników lub e-maile zostaną ujawnione, nie chcę, aby moja baza użytkowników została naruszona.


title: Pisanie/dyskusje na temat estetyki kodu?

text: Szukam odpowiedzi na pytania "Czy kod może być piękny?" i „Co sprawia, że kod jest piękny?” Przykładami mogą być: * Ten artykuł naukowy: zaciemnianie, dziwne języki i estetyka kodu * Ten wpis na blogu: Hamon lub Skin Deep Beauty of Code Proszę zauważyć, że nie próbuję tu rozpoczynać dyskusji ani pytać o opinie na temat tego, co sprawia, że kod jest piękny, lub kod, który uważasz za piękny; Próbuję znaleźć rzeczy, które zostały już opublikowane. Dzięki za pomoc.


title: Czy liczy się profesjonalizm w ogłoszeniach o pracę?

text: Natknąłem się na tę ofertę pracy: http://www.justin.tv/jobs/jobs. Strona zawiera wulgarny język („Bez bulls--t”). Osobiście uważam to za nieco obraźliwe i z pewnością zniechęciłoby mnie to do ubiegania się o pracę w tej firmie: Zastanawiam się, jaki rodzaj/osobowość ludzi pracuje w tej firmie. Przynajmniej tam, gdzie pochodzę (UE), język byłby uważany za złą formę i byłby postrzegany jako zły reprezentujący firmę. Niektóre oferty pracy wydają się iść w drugą stronę, wypełnione bezsensownymi opisami umiejętności i nieistotnymi szczegółami. Kuszące jest wymyślanie zdjęć każdej firmy na podstawie ich oferty pracy. Czy zatem liczy się profesjonalizm w publikowaniu ofert pracy? Czy masz skłonność do przejrzenia wulgaryzmów, nieistotnych wypowiedzi korporacyjnych itp., czy też wpływają one na zainteresowanie pracą?


title: Wersjonowanie dokumentów

text: Mój szef zlecił mi przyjrzenie się systemowi, w którym tworzymy skrypty Pythona i przesyłamy je na serwer oraz przechowujemy szczegóły w DB. Chce również, abym zaimplementował wersjonowanie, aby w przypadku wprowadzenia jakichkolwiek zmian w skrypcie zaktualizowana wersja miała zwiększony numer wersji. To jest obszar, co do którego nie jestem taki pewien. Jak byś zaimplementował narzędzie do wersjonowania? Czy jest to po prostu przypadek zwiększenia pola w Bazie Danych o nowy numer wersji? A może jest bardziej złożony, niż się początkowo wydaje?


title: Jak wyjaśnić, dlaczego wielowątkowość jest trudna?

text: Jestem całkiem dobrym programistą, mój szef też jest całkiem dobrym programistą. Chociaż wydaje się, że nie docenia niektórych zadań, takich jak wielowątkowość i tego, jak trudne może to być (dla mnie bardzo trudno jest coś więcej niż uruchomienie kilku wątków, czekanie, aż wszystko się skończy, a następnie zwrócenie wyników). W chwili, gdy zaczynasz się martwić o impas i warunki wyścigu, jest to dla mnie bardzo trudne, ale szef chyba tego nie docenia – nie sądzę, żeby kiedykolwiek się z tym zetknął. Po prostu zatrzaśnięcie blokady to w zasadzie nastawienie. Jak więc mogę go przedstawić lub wyjaśnić, dlaczego może nie doceniać złożoności współbieżności, równoległości i wielowątkowości? A może się mylę? Edycja: Po prostu trochę o tym, co zrobił - przejdź przez listę, dla każdego elementu na tej liście utwórz wątek, który wykonuje polecenie aktualizacji bazy danych na podstawie informacji w tym elemencie. Nie jestem pewien, w jaki sposób kontrolował, ile wątków jest wykonywanych jednocześnie, myślę, że musiał je dodać do kolejki, jeśli było ich zbyt wiele (nie użyłby semafora).


title: Przechowywanie różnych algorytmów i używanie ich do demonstracji

text: Mam aplikację do tworzenia prostych wykresów (takich jak wierzchołki i krawędzie), a następnie używania na nich różnych algorytmów (BFS, DFS, topsort, Prim's itp.) w celu zademonstrowania ich działania. Teraz pracuję nad przeniesieniem go do aplikacji Rails i wdrożeniem, aby mógł być używany przez moją uczelnię (mam nadzieję). Obecnie wykresy są przechowywane w bazie danych SQLite i planuję zrobić na nich trochę magii D3. Następnie do prawdziwego problemu, jak mam zaimplementować i przechowywać algorytmy? Chcę móc „kroczyć” przez algorytm, pokazując krok po kroku, jak działa na wykresie. W mojej poprzedniej implementacji, napisanej w Javie, miałem abstrakcyjną klasę Algorithm z abstrakcyjnymi metodami, takimi jak init, step i reset. Ale teraz, kiedy jesteśmy poza światem Javy i używamy wspaniałego Rubiego, mam wrażenie, że istnieje naprawdę sprytny i elegancki sposób na osiągnięcie tego samego. Planuję zapakować go do silnika Rails, tylko dla zabawy. Oto wspomniana implementacja Java: https://github.com/7SLEVIN/visualgraphalgs


title: Zbiór danych ze współrzędnymi granic państw

text: Tworzę aplikację, która wizualnie wyświetla regiony świata, m.in. do umieszczania znaczników w regionie administracyjnym. Czy istnieje zbiór danych z geometrycznymi lub geograficznymi (długi/łat) opisami obecnych granic państw na świecie (i ewentualnie innych podziałów administracyjnych)? Idealnie zestaw danych byłby w formacie, w którym mógłbym łatwo wygenerować obrazy obramowania o wymaganym rozmiarze.


title: Czy można użyć kompilatora Intel C/C++ w systemie Linux do tworzenia plików obiektowych, które mają być połączone w systemie Windows?

text: **Dlaczego?** W zależności od źródła, kompilator firmy Intel jest prawdopodobnie lub z całą pewnością kompilatorem generującym najszybsze pliki wykonywalne dla architektury x86 (skrócenie czasu wykonywania o 5 do 100%). Intel oferuje swoje kompilatory dla Linuksa na licencji niekomercyjnej za darmo (chyba przeczytałem, że jest darmowy gdzieś na ich stronie: Intel - Non-Commercial Software Development). Istnieje również bezpłatna licencja niekomercyjna dla studentów, ale ta licencja nie ma zastosowania, chociaż oferowane są narzędzia dla wszystkich trzech głównych systemów operacyjnych (link został usunięty z powodu ograniczenia reputacji). **Cel** I (jako osoba niebędąca studentem) chciałbym móc używać kompilatorów Intel do ewentualnej poprawy szybkości wykonywania w ramach licencji niekomercyjnej do kompilowania plików obiektowych, które można łączyć w celu tworzenia plików wykonywalnych i bibliotek dołączanych dynamicznie dla Windows (i prawdopodobnie OS X) **Więcej szczegółów:** Z tego dokumentu wywnioskowałem, że kompilatory Intela tworzą pliki obiektowe, które są kompatybilne z dominującymi kompilatorami platformy. **Pytania dodatkowe:** 1. Jakie są formaty plików obiektowych gcc, g++, cl, mingw32, icc, icpc i icl w systemach Windows i Linux (bieżące wersje)? 2. _Czy części łańcucha narzędzi mingw32 cross-compiler można wykorzystać do osiągnięcia celu?_ 3. Czy mam rację, że głównym problemem są metadane w generowanych plikach obiektowych? ad 2: mingw32-objcopy wydaje się być w stanie przekonwertować dane wyjściowe kompilatora Intela w systemie Linux (przypuszczalnie ELF) do COFF zgodnego z Microsoft (możliwe z wyjątkiem relokowalnych plików obiektowych). Czy ktoś mógłby potwierdzić, że to faktycznie działa (dla nietrywialnych aplikacji), proszę?


title: Jaki jest najlepszy sposób na zbudowanie witryny sieci Web ze stroną statyczną za pomocą interfejsu API JSON?

text: Mam interfejs API JSON, który zawiera kilka dyskusji. Chcę zbudować statyczną witrynę html na innym serwerze, strony, które są zbudowane z danych w tym interfejsie API. Czuję się bardziej komfortowo używając Railsów niż Node. API odbywa się w węźle. Pomysł polega na tym, że okresowo wywołuję api JSON, aby uzyskać dane i dynamicznie buduję strony html na serwerze Rails. W ten sposób strony internetowe byłyby superszybkie, nie musiałyby wywoływać JSON API. Jedną z technologii, która wygląda na to, że wykona tę pracę, jest http://middlemanapp.com/, ale wcześniej jej nie używałem. Czy ktoś to robił wcześniej i ma jakieś sugestie? Preferuję używanie Railsów i Heroku.


title: Jak stać się wielkim współtwórcą projektu open source?

text: Wiem, że domyślną radą dla projektów open source i na początek jest rozpoczęcie naprawiania błędów. Ale mam wrażenie, że jest to ścieżka, którą chciałoby się obrać, gdyby chciał być testerem/naprawiaczem błędów w projekcie. Jak zostać aktywnym współtwórcą projektu opensource? [Tj. na poziomie architektury]


title: Jak napisać książkę o nowym frameworku?

text: W jaki sposób autorzy są w stanie napisać książkę na podstawie, która właśnie została wydana? Ramy takie jak wiosna są aktualizowane, a następnego dnia zostaje wydana książka. Czy to zazwyczaj ludzie, którzy są bezpośrednimi współpracownikami? Czy opierają go na wersjach beta/alfa? Uważam, że jest to dość trudne do zrozumienia, ponieważ dokumentacja rzadko jest dopracowana do czasu aktualizacji frameworka.


title: Railsy — czy używanie podszablonów spowalnia renderowanie widoków?

text: Mam problemy z wydajnością w aplikacji Rails `3.1.0`, teraz zrobiłem zmiany kopuły w moich zapytaniach za pomocą AR, więc renderowanie widoków nadal zajmuje zbyt dużo czasu, podzieliłem widoki, pętle i tak , na wielu podszablonach, które są renderowane dynamicznie wewnątrz widoków i wewnątrz innych podszablonów. Więc posiadanie dużej liczby podszablonów jest złą praktyką? Czy powinienem zmniejszyć liczbę podszablonów, aby skrócić czas renderowania widoków? Dziękuję


title: Czy jest coś nie tak ze sposobem, w jaki wykonujemy kontrolę wersji?

text: Współpracuję z zespołem programistów jako analityk biznesowy. Właśnie wydaliśmy wersję 2.0 naszego produktu i pracujemy nad następną wersją, która zostanie wydana za 3 miesiące (jest to oprogramowanie wewnętrzne). Niestety wersja 2.0 ma pewne problemy, które musieli naprawić i zamierzamy wdrożyć te poprawki za kilka tygodni. Problem polega na tym, że nie chcemy też wdrażać zmian, nad którymi wciąż trwają prace i które nie mają być wydane przez kolejne 3 miesiące. Programiści zdecydowali, że sposobem na poradzenie sobie z tym jest to, że tylko kod dla defektów zostanie zaewidencjonowany, a kod nowych ulepszeń będzie przechowywany na lokalnych maszynach dewelopera, dopóki nie zostaną skończone. Będę musiał pobrać lokalne kompilacje z ich maszyn do przetestowania, ponieważ jeśli zajmą się kodem i będziemy musieli wydać kolejną łatkę, aby naprawić defekty, nie chcemy jeszcze włączać tych ulepszeń. Występuje również problem polegający na tym, że ten sam plik kodu zawiera zarówno poprawki defektów, jak i ulepszenia, więc muszą skopiować plik kodu lokalnie, następnie wprowadzić zmianę, aby naprawić błąd i sprawdzić ten, a następnie wznowić pracę nad ulepszeniami, korzystając z lokalną kopię, którą zrobili. Wydaje się to dość zawiłe - czy istnieje lepszy sposób na poradzenie sobie z tego typu scenariuszem? Używamy Team Foundation Server i Visual Studio 2010.


title: Czy jest jakiś techniczny powód, dla którego nie możesz tworzyć aplikacji na iOS na komputerze z systemem Linux?

text: Rozumiem, dlaczego nie możesz tworzyć aplikacji na OS X na komputerze z systemem Linux, ale czy istnieje dobry techniczny powód, dla którego nie możesz tworzyć aplikacji na iPhone'a i iPada w systemie Linux? Dlaczego nie można skompilować kodu źródłowego iOS do pliku wykonywalnego iOS i uruchomić go w symulatorze iOS w systemie Linux lub zainstalować na deweloperskim urządzeniu iOS? Czy to tylko dlatego, że XCode IDE jest aplikacją Cocoa? Wygląda na to, że możesz tworzyć aplikacje na Androida na dowolnej platformie. Nie rozumiem, dlaczego to samo nie może dotyczyć iOS.


title: AGPL Pytanie o łączenie i prace pochodne

text: Zastanawiam się nad sprzedażą kolekcji napisanych przeze mnie aplikacji Django, które zapewniają podstawową funkcjonalność gry na Facebooku, ale myślę też o wydaniu jej na licencji GNU Affero GPL. Przeczytałem Affero GPL, a dodatkowa klauzula określała, że zmodyfikowane wersje utworu objętego licencją muszą być rozpowszechniane na tej samej licencji. Zastanawiam się, czy prace pochodne muszą być rozpowszechniane na licencji GNU Affero, nawet jeśli nie modyfikują oryginału? Scenariusz jest taki, że ktoś mógłby użyć mojego projektu i dodać kilka własnych funkcji zawartych w osobnych aplikacjach Django; czy te nowe aplikacje, które napisali, które są zależne od mojego oprogramowania, również musiałyby zostać wydane na licencji Affero?


title: Czy warto przeczytać kod źródłowy kompilatora?

text: Jestem młodszym studentem na kierunku Informatyka. Oprócz pisania dużej ilości kodu, chcę zacząć czytać kod źródłowy napisany przez innych, aby poprawić swoje umiejętności kodowania i nauczyć się lepszych/różnych sposobów robienia rzeczy. Pomyślałem, że powinienem zacząć czytać niektóre kluczowe części kodu w kompilatorach C++. Myślę, że pomogłoby mi to zrobić dwie rzeczy: * Nauczyć się eleganckich praktyk kodowania, ponieważ kompilatory są trudne, a kod reprezentuje rozwiązania tego trudnego problemu. * Pomogłoby mi to również dowiedzieć się, jak jest kompilowany mój najczęściej używany język, szczegóły, jak generowany jest każdy błąd, jak jest analizowany kod i stać się naprawdę dobrym ze specyfikacjami języka. Myślisz, że to dobry pomysł?


title: Czy większość programistów kopiuje i wkleja kod?

text: Bardzo wcześnie nauczyłem się, że wycinanie i wklejanie cudzego kodu trwa na dłuższą metę dłużej niż samodzielne pisanie. Moim zdaniem, jeśli naprawdę tego nie rozumiesz, wytnij i wklej kod prawdopodobnie będzie miał problemy, które będą koszmarem do rozwiązania. Nie zrozum mnie źle, mam na myśli to, że znalezienie kodu innych ludzi i uczenie się z niego jest niezbędne, ale nie wklejamy go po prostu do naszej aplikacji. _Przepisujemy_ _koncepcje_ do naszej aplikacji. Ale ciągle słyszę o ludziach, którzy wycinają i wklejają i mówią o tym, jakby to była powszechna praktyka. Widzę też komentarze innych, które wskazują, że jest to powszechna praktyka. Czy większość programistów wycina i wkleja kod?


title: Jak mogę wysyłać dane bez POSTFIELDS w PHP curl?

text: Używam interfejsu API REST za pośrednictwem PHP i jestem nieco zdezorientowany zachowaniem CURL_POSTFIELDS, co oznacza, że muszę wysłać ciąg zapytania lub tablicę, ale chcę tylko wysłać ciąg tekstu JSON. W używanym przeze mnie API nie ma czegoś takiego jak pole: https://developer.atlassian.com/display/JIRADEV/JIRA+REST+API+Example+-+Edit+issues Więc jak mogę po prostu wysłać dane który nie jest interpretowany jako ciąg zapytania i bez konieczności używania pliku?


title: Utrata zainteresowania programowaniem

text: Obecnie jestem studentem informatyki na drugim roku studiów licencjackich. Mój problem jest dość prosty, ale jak dotąd nie udało się go rozwiązać. Po prostu jestem zmęczony programowaniem. Nie wiem dlaczego, ale to się po prostu stało. Kiedy zacząłem swój pierwszy kurs w c++ byłem bardzo podekscytowany. Tak podekscytowany, że w ciągu 2 miesięcy skończyłem dwie ciężkie książki o C++ i znacznie wyprzedziłem swoją klasę i własne oczekiwania. To było tak, jakbym mógł łatwo tworzyć algorytmy i je kodować. Dużo zgłębiałem C++, ale > przez ostatnie 2 semestry prawie nie zajmuję się kodowaniem i straciłem > dużo zainteresowania lub pasji do tego języka. Uwielbiam programować również mój stopień CS. Ale nawet z tym nie jestem w stanie nic ustawić. Uprzejmie powiedz mi, co mam robić? Zacząłem samodzielnie tworzyć gry C# i XNA, ale nadal mam wrażenie, że się pcham. Czy ktoś może dać sugestie, jak obudzić we mnie kodera?


title: Wywiady: Jak daleko posunąć się w doświadczeniach z DVCS?

text: Rozmawiałem z kilkoma potencjalnymi stażystami do projektu, nad którym pracuję. Używamy git, więc szukam kogoś zaznajomionego z DVCS (lub SVN/CVS lub chęcią nauki). Odpowiedzią, która mnie wyrzuciła, było „Pracowałem z githubem” bez dalszych informacji, więc zmusiło mnie to do zastanowienia się, czego oczekiwać od programisty pracującego z kontrolą wersji. Właściwie kierowałem konwersją VCS, więc bardziej zaangażowałem się w administrację Git/DVCS, niż myślałem, że kiedykolwiek będę, więc nie sądzę, aby uczciwe było trzymanie ucznia na tym poziomie. Moje pytanie brzmi: co młody programista powinien czuć się komfortowo podczas pracy z DVCS? Czy ma to być proste dodawanie, zatwierdzanie, scalanie, zdalne, czy oczekujesz czegoś więcej? Jeśli zadano ci dobre pytania podczas wywiadów, byłbym wdzięczny za ich udostępnienie. Tak naprawdę nie chcę zatrudniać programisty, który popycha wsteczną fuzję! Edycja: Naprawdę powinienem był wspomnieć, zanim to się zaczęło, że nasz model dystrybucji w dużej mierze opiera się na Git i naszym własnym repozytorium (jestem programistą stron internetowych) i dlatego uważam, że ważne jest, aby wiedzieć (przynajmniej) konsekwencje poważnych działań, takich jak zdalne pchnięcia; te działania uruchamiają kilka różnych procesów w naszym środowisku. Moja wina! Odpowiedzi nadal były bardzo pomocne.


title: Dlaczego Eclipse musi zostać ponownie uruchomiony po zainstalowaniu wtyczki?

text: Ponieważ Eclipse używa OSGi do obsługi modułów i pakietów, a zatem powinno być w stanie je wdrażać na gorąco, dlaczego sugeruje ponowne uruchomienie po zainstalowaniu wtyczki „aby zmiany odniosły skutek”? Czy Eclipse natrafiło na pewne ograniczenia OSGi, czy też jego architektura jest taka, że nawet przy wdrażaniu na gorąco nie może zagwarantować, że wdrożenia przebiegły sprawnie, a zatem wybiera najbezpieczniejszą drogę, oferując ponowne uruchomienie?


title: Czy MVC nie jest anty OOP?

text: Główną ideą OOP jest ujednolicenie danych i zachowań w jednym elemencie - obiekcie. W programowaniu proceduralnym są dane i osobno algorytmy modyfikujące dane. We wzorcu Model-View-Controller dane i logika/algorytmy są umieszczone w odrębnych jednostkach, odpowiednio modelu i kontrolerze. Czy w równoważnym podejściu OOP model i kontroler nie powinny być umieszczone w tej samej jednostce logicznej?


title: Aplikacja Backbone.js pobiera duże zbiory danych za pomocą funkcji fetch()

text: Obecnie wprowadzam pewne ulepszenia dla klienta w aplikacji backbone.js. Aplikacja to sklep internetowy i system zarządzania zapasami. Jedną rzeczą, która przeszkadza mi w tej aplikacji (i innych aplikacjach backbone.js, z którymi się spotkałem), jest to, że ładuje całą kolekcję elementów inwentarza do pamięci z serwera przy każdym początkowym załadowaniu strony. Po około półtora roku w produkcji ten zestaw danych (bez zasobów graficznych) wynosi około 2,7 MB. Tak więc dla każdego odwiedzającego witrynę front-end javascript pobiera 2,7 MB danych przez sieć podczas początkowego ładowania strony. Oczywiście skutkuje to poważnym opóźnieniem (około 8-12 sekund, aby załadować większość łączy szerokopasmowych klasy konsumenckiej w mojej okolicy). Dla mnie ten czas ładowania jest nie do zaakceptowania. Oczywiście po załadowaniu danych reszta witryny jest bardzo szybka i responsywna. Czy ładowanie całej kolekcji to naprawdę najlepszy sposób tworzenia aplikacji backbone.js? Próbuję to rozgryźć, ponieważ książki i samouczki, na które natknąłem się, wydają się tego nauczać. Czy istnieje inny wzór do naśladowania? Staram się, aby był specyficzny dla backbone.js --- ale jak zarządzać dużymi zestawami danych w tym frameworku?


title: Gdzie jest najlepsze miejsce, aby zacząć programować w Pythonie?

text: Próbowałem wcześniej nauczyć się C++ i Javy, ale składnia mnie zdezorientowała. Na pewno będę się ich później uczyć, ale na razie, gdzie jest najlepsze miejsce dla faceta, który wcześniej programował do nauki Pythona? Czy zgadzasz się ze mną w nauce Pythona? Czy powinienem wcześniej trzymać się Javy czy C++?


title: Warstwa usług a DAO — dlaczego jedno i drugie?

text: Pracowałem z SpringMVC, Hibernate i niektórymi bazami danych w przykładzie aplikacji internetowej java. Jest kilka różnych, które to robią, ale ten samouczek dotyczący integracji Spring 3 i hibernacji z przykładem zawiera klasę modelu, widok (w JSP) oraz klasy service i dao dla kontrolera. Moje pytanie brzmi, czy klasy service i DAO nie robią tego samego? Dlaczego potrzebujesz ich obu? EDYCJA: To był samouczek, którego faktycznie używałem (nie ma to znaczenia) http://fruzenshtein.com/spring-mvc-security-mysql-hibernate/


title: Śledzenie żądań funkcji dla komponentów na małą skalę

text: Jestem ciekaw, jak inne zespoły programistyczne (szczególnie te, które pracują w średnich i dużych grupach programistycznych) śledzą "przyszłe" funkcje/listy życzeń pod kątem funkcjonalności dla wewnętrznie opracowanych frameworków lub komponentów. Wiem, że standardowa rada jest taka, że zespół programistów powinien znaleźć jedno dobre narzędzie do śledzenia błędów/funkcji i używać go do wszystkiego, i zgadzam się z tym, jeśli przyszłe żądania dotyczą samego produktu. W mojej firmie mamy dział inżynierski, który jest podzielony na wiele grup, a w każdej z nich może znajdować się od jednego do kilku zwinnych zespołów. Produkt do śledzenia błędów, którego używamy, był „liderem od 1997 roku” (ich interfejs użytkownika/użyteczność wydaje się być również oceniany w odniesieniu do tego roku nawet dzisiaj), ale mój zespół, a nawet grupa, tak naprawdę nie kontroluje tego, co jest używane przez cały dział . To, co chcemy śledzić, niekoniecznie jest funkcjami produktu, ale rozszerzeniem/miłą funkcjonalnością dla wewnętrznych komponentów wchodzących w skład naszego produktu. Żeby wymienić tylko kilka z nich... * framework/biblioteka narzędziowa na wierzchu CppUnit, którą dzielą nasi programiści * framework komunikacyjny IPC niskiego poziomu * wspólny programowy SDK, który ja i kilku innych kierowników zespołu zaczęliśmy pomagać w dzieleniu się wspólnym kodem/narzędziami na poziomie działu (ten pakiet SDK jest udostępniany jako wewnętrzny „produkt” dla każdej z grup). Czy standardową praktyką jest używanie jednego narzędzia do śledzenia błędów? A może bardziej sensowne byłoby skonfigurowanie czegoś bardziej zlokalizowanego specjalnie dla naszych potrzeb i samodzielne utrzymanie tego? Nie jest również jasne, jak będzie się czuło kierownictwo, jeśli programiści zaczną pełnić role „informatyczne” związane z konserwacją oprogramowania i serwerów. W tym samym czasie, teraz używamy plików Excela, wewnętrznej wiki i MS OneNote do tego rodzaju rzeczy, a to po prostu nie wydaje się właściwe. (Boję się prosić o rzeczywiste zalecenia dotyczące oprogramowania, ponieważ może to sprawić, że pytanie będzie bardziej zlokalizowane lub coś takiego. Również programiści potrzebują tego bardziej niż zarządzanie, więc byłoby miło znaleźć coś za darmo lub nie więcej niż koszt szczęśliwa Godzina).


title: Nauka podstaw

text: Jestem przede wszystkim administratorem serwerów linuksowych... Powiedziawszy to, zostałem poproszony przez mojego byłego nauczyciela z liceum, abym nauczył trochę studentów programowania. Jak każdy administrator Linuksa, znam swój udział w Pythonie i Bashu. Problem polega na tym, że nie wiem NIC o rzeczach niższego poziomu, takich jak "kod maszynowy" i kompilacja. Głównym celem tej serii jest nauka programowania, a nie informatyki, więc nie potrzebuję do tego poziomu wiedzy absolwenta, będą przede wszystkim uczyć się Pythona. Chciałabym jednak nauczyć się na tyle, aby przynajmniej poruszyć z nimi temat, jakieś pomysły, w których mógłbym stosunkowo szybko nauczyć się tego typu rzeczy?


title: Jaka technologia może renderować środowiska 3D w średniej skali w przeglądarce internetowej?

text: Zamierzam stworzyć aplikację webową wyświetlającą środowiska 3d, po których można poruszać się poprzez przeciąganie (palcem lub myszką w zależności od platformy). Aplikacja internetowa będzie renderować środowiska 3D witryn deweloperskich, w tym kontury, lokalizacje wodociągów, budynki itp. Próbuję zdecydować, jakiej technologii/bibliotek użyć, aby stworzyć aplikację internetową działającą na Android-Web-Browser, iOS- Safari, IE9, Safari, Firefox i Chrome. A także jaka technologia zapewni szybkość rozwoju. Rozumiem, że to jest _'proszenie o moje ciasto i jedzenie go'/'proszenie o księżyc'_, ale nie znam wszystkich dostępnych technologii - więc mogą istnieć zaawansowane biblioteki, które mogą renderować środowiska 3D w wielu sieciach -przeglądarki, w tym główne smartfony i nie znam ich. Rendering 3d nie byłby bardzo szczegółowymi budynkami lub wodą z efektami, ale raczej prostymi trójwymiarowymi reprezentacjami tych obiektów. Środowisko można nawigować po przeciąganiu i można oglądać krajobraz warstwami (wyświetlaj tylko kontury, wyświetlaj tylko podziemne rurociągi, wyświetlaj tylko rury kanalizacyjne itp.). **Czy istnieją jakieś biblioteki 3D dla przeglądarek internetowych? Czy istnieje sposób na uruchomienie OpenGL (lub OpenGL ES) przez przeglądarkę internetową?** **Jakiej technologii byś użył, tworząc tego rodzaju aplikację/aplikację internetową, która powinna działać na komputerach z systemem Windows, Android, iOS i WindowsPhone?* * **Czy jest jakaś technologia, o której nie wspomniałem, a która byłaby dobra dla tego rodzaju projektu?** Skłaniam się ku aplikacji internetowej opartej na przeglądarce, ponieważ mam możliwość korzystania z wielu platform (gdzie działa nawet na Linuksie i MacOS przez za pomocą kompatybilnych przeglądarek internetowych). Znam również transformacje CSS3, które mogą tworzyć kostki, które można obracać w przestrzeni 3d (UWAGA działa tylko dla przeglądarek WebKit - więc nie ma IE :( ). _Ale nie wiem, czy CSS3 jest wystarczająco solidny, aby renderować całe środowiska 3d? myślisz, że może? Może mógłbym użyć do tego kanw HTML5? Czy mapy Google mogą tworzyć niestandardowe mapy 3d?_


title: Czy warto zachować jednostki "definicji" w bazie danych w porównaniu z używaniem wyliczenia?

text: W projekcie, nad którym zacząłem pracować, baza danych zawiera wiele tabel `FooDefinition`, które działają jak wyliczenia. Jest to projekt C# przy użyciu Entity Framework, chociaż nie jest to kluczowe dla pytania. Jednostki mają identyfikator, pole tekstowe Nazwa i pole typu int, które jest konwertowane na wyliczenie. Na przykład: public class FooDefinition { public int Id { get; ustawić; } ciąg publiczny Nazwa { get; ustawić; } public FooType FooType { get; ustawić; } // to jest wyliczenie, które definiuje jednostkę } Tabela FooDefinition jest wypełniana jednostką dla każdej zdefiniowanej wartości wyliczenia i nie zmienia się, dopóki nie zostanie dodana nowa wartość wyliczenia. Zmagam się, aby zobaczyć użycie tego wzorca zamiast bezpośredniego używania wyliczenia, w przeciwieństwie do łączenia w tej tabeli definicji. Jakie są możliwe korzyści z takiego podejścia?


title: Dziesiąta zasada Greenspun, czy każdy duży projekt zawiera tłumacza Lisp?

text: Dziesiąta zasada Greenspun (właściwie jedyna) mówi, że: „Każdy wystarczająco skomplikowany program w języku C lub Fortran zawiera ad hoc, nieformalnie określoną, obarczoną błędami, powolną implementację połowy Common Lisp”. na ten temat, być może dla projektu Quattro (arkusz kalkulacyjny) Borlanda i ewentualnie innych. Google jest bezużyteczne, może nie przychodzą mi do głowy odpowiednie wyszukiwane hasła. Szukam dokumentów lub artykułów popierających to twierdzenie, jeśli takie istnieją.


title: Jak mogę zainspirować moją grupę do dalszego korzystania z internetowego narzędzia do współpracy?

text: Współpracuję z 4 innymi osobami i jestem skłonny w pełni zaadoptować narzędzie do współpracy, aby umożliwić udostępnianie informacji i przechowywanie danych (PDF, DOC itp.) w narzędziu online, a nie robi to przez e-mail. Problem w tym, że tylko ja to egzekwuję; właściwie tylko ja go używam. Inni używają go tylko wtedy, gdy ich o to poproszę. Jak byś sobie z tym poradził? Czy doświadczyłeś czegoś podobnego, jeśli tak, to co zrobiłeś?


title: Jak możesz zmierzyć swój dzienny wkład?

text: Niedawno skończyłem _Trzy oznaki nieszczęśliwej pracy_ Patricka Lencioniego i jednym z jego głównych pomysłów jest to, że trzeba mieć _jakąś_ formę pomiaru. Mam dość standardową pracę wewnętrznego programisty, w której pracuję nad nowymi narzędziami i wykonuję pewne wsparcie / poprawki błędów dla wcześniejszych narzędzi, które napisałem. Z czysto osobistego spełnienia, jakie rzeczy byś codziennie mierzył? (To nie jest raport dla menedżerów i nie jest to coś do gry, po prostu coś, co pomoże mi ocenić postępy). Celem jest znalezienie rzeczy, które mierzą nie tylko produktywność, ale także to, jak dobrze wykonujesz pracę (tak, że pracownik obsługi klienta może rejestrować pozytywne interakcje oprócz liczby odebranych połączeń). Moje zadanie polegałoby na codziennym mierzeniu dwóch rzeczy: otwartych/zamkniętych żądań wsparcia oraz liczby meldowań do kontroli źródła. Rozumiem, że to się zamknie, ale po raz kolejny nie jest to pytanie o zarządzanie, chodzi o rozwój osobisty jako programisty/programisty.


title: Czy rozsądne jest uruchamianie procesów za pomocą narzędzi CI?

text: W mojej firmie mamy grzęzawisko różnych zadań cron (na wielu systemach) i ręcznie uruchamianych procesów, które podtrzymują funkcjonowanie naszej firmy, co jest wynikiem lat celowego rozwoju i kolejnych zaniedbań. Pewnego dnia z oczywistych powodów będziemy musieli wymyślić bardziej scentralizowane rozwiązanie. Jedną z myśli, którymi się posługujemy, jest użycie naszego oprogramowania do ciągłej integracji (Jenkins) do uruchamiania tych procesów, co wydaje się logiczne. **Moje pytanie brzmi, czy robią to inne firmy? Czy jest to ogólnie przyjęta praktyka? Czy nie jest to sprzeczne z definicją narzędzia CI ukrytą w jego nazwie? Czy są jakieś inne opcje?** Uwaga: https://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins Jenkins twierdzi, że koncentruje się na "Monitorowaniu wykonania zadań uruchamianych zewnętrznie, takich jak zadania cron i procmail Oferty pracy". Nie jestem pewien, czy dokładnie o tym mówię.


title: Architektura/projekt aplikacji internetowych PHP

text: Zostałem rzucony głową naprzód do nowej pracy tworzenia aplikacji internetowych w PHP. Nie jestem nowy w PHP, ale nie tworzyłem wcześniej aplikacji na dużą skalę. Zastanawiam się, jak ustrukturyzować swój rozwój, aby nie narażać się na problemy w przyszłości. Jak zaprojektować i zaprojektować swoje aplikacje w sposób umożliwiający ich skalowanie w czasie pod względem funkcjonalności i wydajności. Myślę o takich rzeczach jak: * Oddzielenie backendu od frontendu * Struktury katalogów Doceniłbym wskazówki do wzorców, frameworków i metod projektowania architektury i aplikacji, które pozwalają mi podejść do tworzenia aplikacji internetowych PHP na dużą skalę w sposób zrównoważony.


title: Szacowanie kosztu modyfikacji cudzego kodu

text: Jestem stosunkowo nowy w tworzeniu stron internetowych i nie musiałem jeszcze przedstawiać szacunków dla wielu dużych projektów (mój ostatni duży projekt został właśnie opłacony za godzinę bez ścisłego terminu lub budżetu). Klient prosi mnie o oszacowanie kosztów i czasu dostarczenia niezliczonej ilości zmian w kodzie innych programistów dla strony internetowej (backend php/mysql). Czy ktoś może udzielić porady lub linków, jak to zrobić, aby to przeanalizować i oszacować? Kod jest okropny (strona internetowa została pierwotnie zlecona do Indii lata i lata temu) i trudno mi powiedzieć, czy nagle natrafię na przeszkody i zdmuchnę moje szacunki z wody.


title: Czy istnieje język między C i C++?

text: Naprawdę podoba mi się prosta i przejrzysta natura języka C: kiedy piszę kod w C, nie czuję się obciążony „nieszczelnymi abstrakcjami” i prawie zawsze mogę sprytnie zgadywać, co do zespołu, który tworzę. Podoba mi się również prosta, znajoma składnia dla C. Jednak C nie ma tych prostych, pomocnych dodatków, które oferuje C++, takich jak klasy, uproszczona obsługa nie-cstringów itp. Wiem, że to wszystko jest możliwe do zaimplementowania w C za pomocą tabel skoku i tym podobne, ale czasami jest to trochę rozwlekłe iz różnych powodów niezbyt bezpieczne. Nie jestem jednak fanem nadmiernego nacisku na obiekty w C++ i boję się „nowego” operatora i tym podobnych. Wydaje się, że C++ ma zbyt wiele problemów, aby na przykład być używany jako język programowania systemowego. Czy istnieje język, który znajduje się pomiędzy C i C++ w skali widżetów i gadżetów? Zastrzeżenie: mam na myśli to pytanie czysto rzeczowe. Nie mam zamiaru cię denerwować, ponieważ nie podzielam twojego poglądu, że C{,++} jest wystarczająco dobry, by robić to, co planuję.


title: Czego programiści chcą w internetowym interfejsie API?

text: Obecnie buduję internetowe API dla popularnego oprogramowania forum (XenForo). Jakie rzeczy programiści uważają za ważne w internetowym interfejsie API? Czy istnieją pewne architektury (REST, SOAP itp.), które są znacznie lepsze niż robienie własnych rzeczy? API, z którym mam największe doświadczenie, to API MediaWiki, ale wydaje się, że nie jest to zgodne z żadnym standardem. Co powinienem planować uwzględnić (np. formaty wyjściowe, OAuth) i jakie są dobre przykłady do naśladowania?


title: Jak wygodnie monitorować 5 demonów podczas ich tworzenia?

text: Oto scenariusz: jestem w tym projekcie, do którego napisałem 4 skrypty Node.js, które działają jako „serwery” dla jakiejś usługi (muszą być rozdzielone). Korzystam również z Redis, czyli kolejnej usługi, na którą warto mieć oko. System nie jest jeszcze w produkcji (niezawodność spowoduje kolejny zestaw problemów, ale nie teraz). Podczas rozwoju usługi te rzucają wiele interesujących komunikatów console.log(), na których mi zależy. Właściwie używam dużego okna terminala podzielonego na 4 z ekranem GNU, ale za każdym razem, gdy muszę uruchomić ekran, ctrl + a + c, ctrl + a + c, ctrl + a + c i tak dalej, a następnie ręcznie uruchom usługi . Jak wygodnie zautomatyzowałbyś tę operację? A może są jakieś narzędzia, które poprawią wrażenia użytkownika jako pasterza tych małych potworów? :) Jestem w drodze korzystając z KOLEJNEJ usługi, która opublikuje te logi przez HTTP. Dzienniki (głównie komunikaty debugowania) zostaną opublikowane przez pozostałych 4 gości na kanale Redis, który subskrybuje serwer log2http...


title: Co oznacza artefakt?

text: Słownik definiuje artefakt jako: > artefakt, artefakt [ˈɑːtɪˌfækt] n > > 1. coś stworzonego lub nadanego przez człowieka kształtu, np. narzędzie lub dzieło sztuki, > zwłaszcza przedmiot zainteresowania archeologicznego > > 2. cokolwiek człowieka- wykonane, takie jak fałszywy wynik eksperymentu > > 3. (Nauki przyrodnicze i pokrewne zastosowania / Biologia) Cytologia struktura > widoczna w tkance po śmierci, utrwaleniu, zabarwieniu itp., która normalnie > nie występuje w żywej tkance > > Słowo „artefakt” często pojawia się w tworzeniu oprogramowania, cyklach rozwoju oprogramowania, szacowaniu nakładu pracy itp. Ale powyższa definicja nie ma dla mnie sensu w tym kontekście. Czy ktoś mógłby wyjaśnić to słowo, podając kilka konkretnych przykładów z branży oprogramowania?


title: Jakich standardów używa Twój zespół w nagłówkach i stopkach dokumentów specyfikacji?

text: ## TL;DR: Jaki nagłówek/stopkę umieszczasz w swoich specyfikacjach funkcjonalnych i technicznych, aby uniknąć osób mających różne wersje na spotkaniach? ## Historia: Mamy dużo dokumentów, które wszyscy zmieniają. Specyfikacje funkcjonalne, specyfikacje techniczne, aneksy itp. Problem polega oczywiście na tym, że podczas spotkania po godzinie ktoś zauważa, że jego wydrukowana wersja różni się od cudzej. Pomyślałem, że można to rozwiązać, zmuszając wszystkich do używania tego samego nagłówka/stopki w każdym dokumencie: ### Nagłówek * Przedmiotowy projekt * Tytuł dokumentu (wyśrodkowany) * Autor dokumentu (wyrównany do prawej) ### Stopka * Data ostatniej modyfikacji * Data wydrukowania dokumentu * Pełna ścieżka i nazwa dokumentu (zawsze zawierają numer wersji) * Strona X z Y W ten sposób wszyscy moglibyśmy łatwo sprawdzić nazwę pliku i datę ostatniej modyfikacji przed rozpoczęciem spotkania i upewnić się, że wszyscy mają ten sam egzemplarz i mówi o tym samym dokumencie. Czy to zadziała? Czy czegoś mi brakuje? Czego używacie w swoich specyfikacjach, aby uniknąć problemów z wersjonowaniem?


title: W programowaniu w parach, jak nazywa się każda rola i dlaczego?

text: Słyszałem, że osoba przy klawiaturze nazywa się „kierowca”, a druga osoba nazywa się „nawigator”. Wyobrażałem sobie rajdowców, w których osoba za kierownicą po prostu _nie może_ nadążyć za _wszystkim_, co się dzieje, a oni _muszą_ mieć pomoc „nawigatora”, który wykrzykuje im tony i tony wskazówek, aby, dosłownie, ich zatrzymać "z chwastów", podobnie jak osoba przy klawiaturze jest utrzymywana "na kursie" przez osobę na drugim krześle. Jakie są najczęściej/najczęściej akceptowane terminy dla dwóch ról w programowaniu w parach i (jeśli nie jest to oczywiste) czy są one zapożyczone z wcześniejszych zawodów?