title: tworzenie aplikacji na Androida zawierającej zestaw narzędzi C++

text: Jestem programistą Java i chcę stworzyć aplikację na Androida, która będzie robiła zdjęcia i wydobywała worki wizualnych słów. Aby wyodrębnić te worki słów, używam zestawu narzędzi TOP-SURF, który jest napisany w C++. Jestem nowy w programowaniu C++ i chcę wiedzieć, jak stworzyć aplikację na Androida, która używa tego zestawu narzędzi. Czytałem o NDK. To jest rozwiązanie?


title: Aplikacje komercyjne z Open Source na github

text: Zamierzam wkrótce uruchomić mały serwis internetowy i zastanawiałem się, czy to dobry pomysł, aby przesłać kod do publicznego repozytorium github. Kod nie będzie licencjonowany do użytku komercyjnego, ale publiczność może pobrać kod i hackować go. Czy to dobry pomysł? Czy pomogłoby to w tworzeniu bezpieczniejszego/wolnego od błędów kodu? A może powaliłby mój startup na ziemię? Dzięki, Ben


title: Jak odczytać model Entity Framework Model i sprawdzić jego poprawność względem danego połączenia?

text: Mam pierwszy model bazy danych Entity Framework. Chcę napisać test MSTest/nUnit, aby sprawdzić, czy wszystkie przechowywane procedury, tabele i widoki, które są zdefiniowane w moim modelu edmx, są nadal prawidłowe w bazie danych.


title: Podwójna kontrola / Zasada czterech oczu

text: Mam wymóg zaimplementowania pewnego rodzaju podwójnej inspekcji lub zasady czterech oczu _jako funkcji mojego oprogramowania_, co oznacza, że każda zmiana obiektu dokonana przez użytkownika A musi być sprawdzona przez użytkownika B. Trywialnym przykładem może być system publikujący gdzie autor pisze artykuł, a inny musi go zweryfikować przed publikacją. Jestem trochę zaskoczony, że w sieci prawie nic na ten temat nie znajdziesz. Żadnych wzorców, żadnych bibliotek (oprócz cibet), żadnych rozwiązań workflow itp. **Czy to wymaganie naprawdę jest takie rzadkie? A może szukam niewłaściwych terminów?** Nie szukam konkretnego rozwiązania. Więcej na temat wzorca lub podejścia opartego na najlepszych praktykach. **Aktualizacja:** powyższy przykład jest naprawdę banalny. Dodajmy do tego trochę więcej złożoności. Artykuł został opublikowany, ale teraz wymaga aktualizacji. Umieszczenie artykułu w trybie offline w celu aktualizacji nie jest opcją, ale aktualizacja musi być również przeczytana.


title: O standardzie ANSI C++ 2003

text: Proszę o pomoc. Dużo szukałem w Internecie, ale znalazłem niedopasowane informacje. **Moje pytania:** 1. Próbowałem kupić standard "ISO/IEC 14882:2003(E) Programming Languages - C++" na ansi.org, ale go nie znalazłem. Jednak znalazłem ten standard na nssn.org: www.nssn.org/search/DetailResults.aspx?docid=338353&selnode= Ale niestety ten standard został usunięty lub zastąpiony innym. webstore.ansi.org/RecordDetail.aspx?sku=INCITS/ISO/IEC%2014882-2003 Na iso.org też jest taka sama sytuacja: www.iso.org/iso/catalogue_detail.htm?csnumber=38110 Tak, Wiem, że aktualny standard to C++11, ale potrzebuję standardu C++03. Z innych źródeł słyszałem, że standard C++03 stał się standardem otwartym, więc mogę go pobrać z internetu za darmo, PEŁNY, OFICJALNY standard, np: code.google.com/p/openassist/ downloads/detail?name=C%2B%2B%20Standard%20-%20ANSI%20ISO%20IEC%2014882%202003.pdf cs.nyu.edu/courses/spring13/CSCI-GA.2110-001/downloads/ Czy to jest PRAWDA? I to pełny, oficjalny standard C++03, a nie tylko szkic? 1. Czy to prawda, że C99 (język programowania C, 1999) również stał się otwartym standardem? Jeśli tak, to jest to pełny standard C99?: cs.nyu.edu/courses/spring13/CSCI-GA.2110-001/downloads/C99.pdf


title: Komunikacja/Aktualizacje między jednostkami utworów/kontekstami ram encji kolidujące ze zmianami użytkownika

text: Zajmuję się tworzeniem aplikacji WPF przy użyciu Entity Framework do komunikacji z bazą danych. Aplikacja posiada hierarchię zakładek, gdzie każda zakładka ma kontekst bazy danych. Każda karta umożliwia użytkownikowi przeglądanie określonego obiektu, wprowadzanie zmian, zapisywanie, aktualizowanie, zamykanie lub otwieranie kart powiązanych obiektów. Moje sedno polega na tym, że niektóre zakładki zawierają informacje, które zależą również od innych obiektów, obiekt O typu A może być powiązany z innymi obiektami A (o_1,...,o_n) w relacji rodzic-dzieci, gdzie mam grafikę wskaźnik pokazujący właściwość pogody P w O ma taką samą wartość jak P u wszystkich dzieci O, na przykład. Czerwony wskaźnik oznacza, że są nierówne, zielony oznacza, że są równe. „Nakładanie się” informacji między kontekstami będzie dotyczyć tylko prezentacji, różne zakładki nie będą deptać sobie nawzajem, zmieniając nawzajem dane. Teraz, jeśli mam otwarte karty dla O i o_3, zmień P w o_3 i zapisz, wskaźnik na karcie dla O może również wymagać zmiany, ale ponieważ ta karta ma swój własny (już nieaktualny) kontekst db, wskaźnik nadal pokazuje stara wartość, która może być myląca dla użytkownika. Wydaje się to być bardzo ogólnym i powszechnym problemem, biorąc pod uwagę, ile aplikacji ma tę architekturę. Jak byś rozwiązał problem? Widzę kilka różnych, ale wadliwych/problematycznych rozwiązań. O. Uświadom użytkownikowi, że karty mogą stać się „przestarzałe” podczas zapisywania innych. _To jest jak przepadnięcie problemów technologicznych._ B. Wymuś aktualizacje powiązanych kart podczas zapisywania. _To albo nadpisze zmiany wprowadzone przez użytkownika, albo będę musiał zbudować jakiś system (wzorzec repozytorium?), który przechowuje informacje o zmianach użytkownika i pośredniczy, co zaktualizować, a co zachować, co powiedzieć użytkownikowi itd._ C. Wskaż przestarzałe: liczba powiązanych zakładek. _Wygląda to na pragmatyczne rozwiązanie, ale użytkownik musi się zastanawiać, na co wpłynie ręczna aktualizacja karty, a wszelkie wprowadzone zmiany musiałyby zostać odrzucone_ D. Przekaż zmianę do innej karty bez angażowania kontekstu bazy danych. _To by trochę działało, ale mogłoby prowadzić do skomplikowanych problemów przez wprowadzenie stanu, który nie jest związany z kontekstem bazy danych, ogólnie zwiększyłoby to złożoność_


title: Porady dotyczące GUI dotyczące responsywnego ekranu dotykowego

text: Mam za zadanie zbudować oprogramowanie, które łączy się z bazą danych MySQL, aby użytkownik mógł wybierać utwory do odtworzenia i kolejkować za pomocą ekranu dotykowego, a następnie wyświetlać je jednocześnie na drugim monitorze jako filmy. **Pytania:** Aby umożliwić działanie obu wyświetlaczy, najlepiej byłoby napisać dwa programy (po jednym dla każdego wyświetlacza, czy tylko jeden) Nigdy nie pisałem kodu dla ekranu dotykowego (poza programowaniem mobilnym, niektóre biblioteki do użycia, jak to zrobić) Planuję użyć VLC do odtwarzania filmów, czy istnieje język, który byłby do tego najlepszy? Aby stworzyć naprawdę oszałamiający GUI, powinienem użyć określonego języka Jeśli wiem wszystko wymiary, czy powinienem się martwić o układy płynne? * * * Przepraszam za wiele pytań, to jest mój pierwszy solowy program komercyjny, więc szukam solidnego planu gry. Byłem też pewien, czy to najlepiej pasuje do SO lub tutaj, więc popraw mnie, jeśli się myliłem. Języki, które brałem pod uwagę to: C#, JAVA, python.


title: Kiedy używanie DI i opcjonalnie platformy IoC to krok za daleko?

text: Rozważ system rejestrowania - używany absolutnie wszędzie w Twojej bazie kodu. _(uwaga - logowanie to tylko przykład, nie bierz tego zbyt dosłownie i wskaż mi swój ulubiony system logowania)._ interfejs publiczny ILogger { void LogMessage(string message); } // Właśnie używane do testowania, nic nie rób public class NullLogger : ILogger { public void LogMessage(string message) { } } public class FileLogger : ILogger { public FileLogger(string fileName){...} public void LogMessage(string message) { // Zaloguj się do pliku tutaj } } Nie, mogę sprawić, by każda klasa miała ILogger w ctor lub param i użyć jakiegoś frameworka IoC. Lub mógłbym po prostu użyć czegoś takiego jak public static class Globals { public static ILogger Log = new NullLogger(); } Użyj w dowolnym momencie przez `Globals.Log.LogMessage("Hello Logging World");` A w 'Compositon Root' (główny punkt wejścia programu) ustaw `Globals.Log = new FileLogger("somefile.log"); ` Albo oczywiście można to zrobić jako Singleton. Kiedy używanie DI i opcjonalnie IoC to krok za daleko? Co byś zrobił w tym przypadku?


title: Popraw logikę, znajdując możliwe nieporozumienia

text: Ułożyłem logikę, aby rozwiązać konkretny problem, ale to za długo. Jestem pewien, że można go zmniejszyć, aby go dopasować. Mam następujący model public class ColumnChart { public virtual string type { get; ustawić; } public wirtualny ciąg nazwa { get; ustawić; } public wirtualna lista<podwójne> dane { get; ustawić; } } Ideą `List<double>` jest przechowywanie 12 wartości (1 na miesiąc, jeśli istnieje). Wszystkie te 12 wartości musi należeć do kogoś, więc `name` zachowa legendę Typ to `column` (nie zawsze, ale w tym przypadku to uproszczenie) **Big Logic** // Create a List var list z ColumnChart = new List<ColumnChart>(); // Utwórz wystąpienie jednego obiektu typu ColumnChart var serie = new ColumnChart(); // Utwórz wystąpienie List<double> (tak jak mówi mój model) serie.data = new List<double>(); // Kontroluj pętlę int i = 0; foreach (var element in MyDataSource) { // Jeśli seria.name nie ma aktualnej nazwy grupy, która pochodzi z mojego DataSource if (serie.name != element.GroupName) { // Czy to nie pierwsza pętla? if (i != 0) { // Zwróć nową pustą instancję ChartColumn serie = NewInstance(); // Ustaw legendę należącą do wszystkich danych seria.name = element.GroupName; // Ustaw typ wykresu serie.type = "kolumna"; // Utwórz nową List<double> (tak jak mówi mój model) serie.data = new List<double>(); if (serie.data.Count == element.Month - 1) { seria.data.Insert(element.Month - 1, element.ValueRevenue); } // Jeśli liczba elementów w mojej liście<double> jest mniejsza niż Miesiąc. else { while (serie.data.Count < element.Month - 1) { seria.data.Add(0); } serie.data.Insert(element.Miesiąc - 1, element.ValueRevenue); } } // Czy pierwsza interakcja w pętli else { seria.name = element.GroupName; seria.type = "kolumna"; serie.data.Insert(element.Miesiąc - 1, elemento.ValueRevenue); i++; } } // Serie.name ma tę samą bieżącą nazwę grupy, która pochodzi z mojego źródła danych else { serie.data.Insert(element.Month - 1, element.ValueRevenue); i++; } // Moja zmienna i kontrolująca pętlę jest ostatnią interakcją? if (i == MyDataSource.Count() - 1) { list.Add(serie); } } i = 0; **Źródło danych** MyDataSource [0] Miesiąc: 1 NazwaGrupy: „Muzyka” WartośćPrzychód: 700,0 [1] Miesiąc: 2 NazwaGrupy: „Muzyka” WartośćPrzychód: 700,0 [2] Miesiąc: 3 NazwaGrupy: „Muzyka” WartośćPrzychód: 700,0 [ 3] Miesiąc: 4 NazwaGrupy: „Muzyka” Wartość Przychód: 700,0 [4] Miesiąc: 5 NazwaGrupy: „Muzyka” Wartość Przychód: 700,0 [5] Miesiąc: 6 NazwaGrupy: „Muzyka” Wartość Przychód: 700,0 [6] Miesiąc: 7 NazwaGrupy: ' Muzyka” WartośćPrzychód: 700,0 [7] Miesiąc: 8 NazwaGrupy: „Muzyka” WartośćPrzychód: 700,0 [8] Miesiąc: 9 NazwaGrupy: „Samochód” WartośćPrzychód: 700,0


title: Jak poradzić sobie z kluczem szyfrowania w dużym zespole programistycznym?

text: Jeśli mamy duży zespół programistów, powiedzmy 100, i chcielibyśmy, aby nasz klucz szyfrowania był ukryty przed programistami, którzy nie są bezpośrednio zaangażowani w moduł/algorytm szyfrowania, jakie są najlepsze praktyki, aby zachować ten klucz tak tajny, jak to możliwe, a jednocześnie pozwalając na rozwój i debugowanie?


title: Wyjaśnienie arytmetyczne przejścia w czasie

text: Jakiś czas temu przeniosłem to z http://www.effectgames.com/effect/article.psp.html/joe/Old_School_Color_Cycling_with_HTML5. Jednak teraz chcę go zmodyfikować, aby zmienić go z matematyki zmiennoprzecinkowej na stałoprzecinkową w celu zwiększenia wydajności (dla tych, którzy będą mówić o przedwczesnej optymalizacji, a co nie, chcę mieć cały silnik w stałym punkcie zarówno jako proces uczenia się dla mnie, a więc mogę łatwiej przenieść kod do systemów w przyszłości, które nie mają natywnych liczb zmiennoprzecinkowych, takich jak procesor ramienia) Moja początkowa konwersja do stałych punktów właśnie spowodowała zatrzymanie się na rowerze na pierwszej lub ostatniej klatce kolarski. Dodatkowo byłoby miło lepiej zrozumieć, jak to działa, abym mógł dodać więcej opcji i tak dalej w przyszłości, moja matematyka jest jednak do bani, a komentarze są ograniczone, więc tak naprawdę nie wiem, jak działa matematyka przy określaniu klatki, którą powinna use (cycleAmount) Byłem również początkującym, kiedy go przeportowałem, ponieważ nie miałem pojęcia między liczbami zmiennoprzecinkowymi a liczbami całkowitymi, a czym nie. Podsumowując, moje pytanie brzmi: czy ktoś może podać wyjaśnienie arytmetyki używanej do określania kwoty cyklu (która określa „ramkę” cyklu) To jest działająca matematyczna wersja kodu zmiennoprzecinkowego: public final void cycle(Color[ ] sourceColours, double timeNow, double speedAdjust) { // Przełącz wszystkie animowane zakresy kolorów w palecie na podstawie znacznika czasu. KoloryŹródła = KoloryŹródła.clone(); int cyklRozmiar; podwójny cyklRate; podwójny cykl Kwota; Cykl cyklu; for (int i = 0, len = cykle.długość; i < len; ++i) { cykl = cykle[i]; cycleSize = (cykl.WYSOKI - cykl.NISKI) + 1; cycleRate = cycle.RATE / (int) (CYCLE_SPEED / speedAdjust); kwota cyklu = 0; if (cycle.REVERSE < 3) { // Standard Cycle Amount = DFLOAT_MOD((timeNow / (1000 / cycleRate)), cycleSize); if (cycle.REVERSE < 1) { cycleAmount = cycleSize - cycleAmount; // Jeśli poniżej 1, upewnij się, że nie jest odwrócony. } } else if (cycle.REVERSE == 3) { // Ping-Pong cycleAmount = DFLOAT_MOD((timeNow / (1000 / cycleRate)), cycleSize << 1); if (cycleAmount >= cycleSize) { cycleAmount = (cycleSize * 2) - cycleAmount; } } else if (cycle.REVERSE < 6) { // Sinusoida cycleAmount = DFLOAT_MOD((timeNow / (1000 / cycleRate)), cycleSize); kwota_cyklu = Math.sin((wartość_cyklu * 3.1415926 * 2) / rozmiar_cyklu) + 1; if (cycle.REVERSE == 4) { cycleAmount *= (cycleSize / 4); } else if (cycle.REVERSE == 5) { cycleAmount *= (cycleSize >> 1); } } if (cycle.REVERSE == 2) { reverseColours(sourceColours, cycle); } if (USE_BLEND_SHIFT) { blendShiftColours(sourceColours, cycle, cycleAmount); } else { shiftColours(sourceColours, cycle, cycleAmount); } if (cycle.REVERSE == 2) { reverseColours(sourceColours, cycle); } } kolory = źródłoKolory; } // Ta funkcja narzędzia pozwala na zmiennoprzecinkowy moduł zmiennoprzecinkowy o zmiennej precyzji. prywatny podwójny DFLOAT_MOD(końcowy podwójny d, końcowy podwójny b) { return (Math.floor(d * PRECYZJA) % Math.floor(b * PRECYZJA)) / PRECYZJA; }


title: Kod proceduralny a kod OOP

text: Skończyłem projekt w PHP ponad 13000 wierszy w stylu proceduralnym [ponieważ dobrze się z tym znam, ale znam OOP] i projekt działa idealnie. Ale czy powinienem przekonwertować go na OOP? [ _ponieważ świat jest zajęty OOP_ ] Mój kod nie wymaga żadnej funkcji OOP [enkapsulacja, w zasadzie dziedziczenie...]! Więc co powinienem zrobić? A jaką pomoc otrzymam, jeśli przekonwertuję go na OOP?


title: Jaki jest najlepszy sposób na uzyskanie nazwy metody w czasie wykonywania?

text: Oto krótkie tło mojego problemu: zaimplementowałem klasę rejestratora singleton, która jest wywoływana z kilku projektów. Chcę zarejestrować nazwę klasy, a także nazwę metody, której dotyczy logowanie. Do tej pory myślałem o dwóch sposobach uzyskania nazwy metody i klasy - albo przez odbicie, albo przez ręczne ich zapisanie. Zaletą korzystania z odbicia jest to, że za każdym razem, gdy nazwa klasy lub metody zostanie zmieniona, co nie zdarza się często, zostanie automatycznie zaktualizowana. Wadą refleksji jest to, że pochłania ona wydajność i sugeruje się, aby nie używać jej, gdy tylko można jej uniknąć, jak widać w dokumentacji refleksji (http://docs.oracle.com/javase/tutorial/reflect/ index.html) lub w różnych wątkach online. Jaki byłby najlepszy sposób i dlaczego?


title: Czy używanie tagu <?= w PHP jest złą praktyką?

text: Ostatnio natknąłem się na ten tag PHP `<?= ?>` i niechętnie go używam, ale swędzi tak mocno, że chciałem się z nim zmierzyć. Wiem, że używanie krótkich tagów `<? jest złą praktyką. ?>` i zamiast tego powinniśmy używać pełnych znaczników `<?php ?>`, ale co z tym: `<?= ?>`? Zaoszczędziłoby to trochę pisania i byłoby lepsze dla czytelności kodu, IMO. Więc zamiast tego: <input name="jakaśVar" value="<?php echo $someVar; ?>"> Mógłbym napisać to w ten sposób, co jest czystsze: <input name="jakaśVar" value="<?= $someVar ?>"> Czy używanie tego operatora jest mile widziane?


title: Argumenty za standardem kodowania?

text: Kilku przyjaciół i ja planujemy razem pracować nad projektem i chcemy ZUPEŁNIE INNEGO standardu kodowania. NIE chcemy używać standardu kodowania używanego przez biblioteki/język. To nasz projekt i chcemy się bawić. Więc przyszedłem tutaj, aby zapytać, jakie są według was dobre standardy i argumenty za tym (lub czego nie robić i argumenty przeciwko temu). Style, które pamiętam najbardziej to * Wielkie litery całego słowa * Wielkość liter Camel i Pascal * Używanie '_' do oddzielenia każdego słowa * litery lub słowa poprzedzające lub poprzedzające (nienawidzę m dla członka, ale myślę, że IsCond() to dobra nazwa funkcji SomethingException jako przykład przyrostka) * Używanie '_' na początku lub na końcu słów * Umieszczanie nawiasów klamrowych. Na nowej lub tej samej linii? Znam biblioteki, które używają wielkości liter Pascal na wszystkich publicznych i chronionych członkach. Ale czy kiedykolwiek pomylisz się, jeśli coś jest func, var lub nawet własnością, jeśli język to obsługuje? A co, jeśli zdecydujesz, że członek publiczny będzie prywatny (lub odwrotnie), czy nie byłoby tak dużo pracy lub niespójności? Czy dodawanie przedrostka C do każdej klasy to dobry pomysł? Pytam, co myślisz i dlaczego?


title: Czy akceptowalnym podejściem jest umieszczanie try catch wszędzie tam, gdzie występuje wyjątek wskaźnika zerowego?

text: Istnieją przypadki, w których odniesienia do obiektów, pól, zmiennych itp. mogą mieć wartość NULL i w tym momencie może wystąpić wyjątek Null Pointer. Czy trwałe rozwiązanie polega na umieszczaniu tych bloków kodu, które oczekują, że wyjątek Null ponter zostanie umieszczony w bloku try catch?


title: wymagania dotyczące jakości oprogramowania dla wewnętrznie opracowanego/współdzielonego oprogramowania?

text: W środowiskach, w których oprogramowanie jest budowane wewnętrznie przez jeden zespół, a następnie to oprogramowanie jest używane przez inne zespoły wewnętrzne, jak można zdecydować, jaka powinna być wymagana jakość produkowanych artefaktów? Na przykład: 1. kompletność i dokładność dokumentacji 2. rozszerzalność/ponowne wykorzystanie artefaktu (bez hackowania kodu źródłowego) 3. defekty 4. itd. Myślę, że jednym z aspektów, które należy wziąć pod uwagę, jest czas trwania projektu przed uwzględnieniem jakości. Bardziej opłacalne powinno być zapewnienie, że jakość jest wbudowana w produkt od samego początku, niż pozostawianie jej na później w cyklu życia projektu.


title: Wyszukiwanie tekstu na stronie internetowej

text: Obecnie projektuję algorytm wyszukiwania dla dokumentu i właśnie ciekawiło mnie to podczas projektowania algorytmu: jak przeglądarki internetowe przeszukują stronę internetową? Na przykład w przeglądarce Google Chrome możesz nacisnąć skrót klawiaturowy Ctrl-F, aby aktywować pasek „Znajdź”, który umożliwi wyszukiwanie tekstu na określonej stronie internetowej. Jak to robi, biorąc pod uwagę, że ma tylko surowy kod HTML jako odniesienie?


title: Potrzebne porady dotyczące języka Java, Co to jest usługa przesyłania wiadomości w języku Java

text: Czy jest używany do tworzenia oprogramowania lub tworzenia witryn internetowych? Czy programista JSP musi (lub dobrze) nauczyć się JMS? Znam języki skryptowe po stronie serwera, takie jak JSP i PHP, ale nie znalazłem żadnego związku między JSP a JMS.


title: Powody, aby NIE używać JSF

text: Jestem nowy w StackExchange, ale pomyślałem, że będziesz w stanie mi pomóc. Tworzymy nową aplikację Java Enterprise, zastępującą starsze rozwiązanie JSP. Ze względu na wiele wielu zmian interfejs użytkownika i elementy logiki biznesowej zostaną całkowicie przemyślane i ponownie zaimplementowane. Naszą pierwszą myślą był JSF, ponieważ jest to standard w Java EE. Na początku miałem dobre wrażenie. Ale teraz próbuję zaimplementować funkcjonalny prototyp i mam naprawdę poważne obawy dotyczące jego używania. Przede wszystkim tworzy najgorszy, najbardziej zagracony nieprawidłowy mix pseudo-HTML/CSS/JS, jaki kiedykolwiek widziałem. Narusza każdą zasadę, której nauczyłem się w tworzeniu stron internetowych. Ponadto łączy to, co nigdy nie powinno być tak ściśle powiązane: układ, projekt, logika i komunikacja z serwerem. Nie wiem, jak mógłbym wygodnie rozszerzyć to wyjście, czy to stylizowanie za pomocą CSS, dodawanie cukierków UI (takich jak konfigurowalne klawisze skrótu, widżety przeciągania i upuszczania) lub cokolwiek innego. Po drugie, jest to zbyt skomplikowane. Jego złożoność jest wyjątkowa. Jeśli mnie pytasz, to kiepska abstrakcja podstawowych technologii internetowych, w końcu ułomna i bezużyteczna. Jakie mam korzyści? Brak, jeśli się nad tym zastanowić. Setki komponentów? Widzę dziesięć tysięcy fragmentów kodu HTML/CSS, dziesięć tysięcy fragmentów kodu JavaScript i tysiące wtyczek do jQuery. Rozwiązuje naprawdę wiele problemów - nie mielibyśmy, gdybyśmy nie używali JSF. Albo w ogóle wzorzec kontrolera frontowego. I na koniec myślę, że będziemy musieli zacząć od nowa za powiedzmy 2 lata. Nie wiem, jak mogę zaimplementować wszystkie nasze pierwsze makiety GUI (poza tym nie mamy w naszym zespole eksperta JSF). Może moglibyśmy to jakoś razem zhakować. A potem będzie ich więcej. Jestem pewien, że moglibyśmy zhakować nasz hack. Ale w pewnym momencie utkniemy. Ze względu na wszystko powyżej warstwa usług jest pod kontrolą JSF. I będziemy musieli zacząć od nowa. Moją sugestią byłoby zaimplementowanie interfejsu API REST przy użyciu JAX-RS. Następnie utwórz klienta HTML5/Javascript z MVC po stronie klienta. (lub jakiś smak MVC..) Przy okazji; i tak będziemy potrzebować interfejsu API REST, ponieważ opracowujemy również częściowy interfejs Androida. Wątpię, aby JSF to obecnie najlepsze rozwiązanie. Ponieważ Internet ewoluuje, naprawdę nie rozumiem, dlaczego powinniśmy używać tego „prowizji”. Jakie są plusy/minusy? Jak mogę podkreślić mój punkt widzenia, aby nie używać JSF? Jakie są mocne strony, aby użyć JSF zamiast mojej sugestii?


title: Jakiego rodzaju kontroli źródła używają projekty o wysokim poziomie bezpieczeństwa?

text: Właśnie czytałem ten nieco starszy post dotyczący wyboru dobrego systemu kontroli źródła, kiedy zacząłem myśleć o tym, jak różne projekty wykorzystują kontrolę źródła. Tam, gdzie pracuję, zasadniczo przenieśliśmy się całkowicie na Git i wszystko było w większości dobrze. Zastanawiałem się nad projektami o wysokim poziomie bezpieczeństwa, takimi jak projekty oprogramowania wojskowego. Używanie czegoś takiego jak Git byłoby zasadniczo niebezpieczne; nawet dopuszczenie klonów repo w ograniczonych okolicznościach może być problematyczne. Korzystanie z SVN lub TFS może samo w sobie nie zapewniać wystarczającego bezpieczeństwa. Czy są jakieś systemy VCS, które mają silniejsze względy bezpieczeństwa? A może istnieją dodatkowe kwestie związane z używaniem VCS w projektach o wysokim poziomie bezpieczeństwa?


title: Jakie problemy wiążą się z wykonywaniem pracy jako freelancer?

text: Rozważam wykonanie jakiejś pracy kontraktowej poza moją normalną pracą. Wiem, że to zabije mój wolny czas, ale myślę, że mogę kontrolować, kiedy robię projekty, a potem dostać trochę dodatkowych pieniędzy, a nawet zrobić z tego pracę na cały etat. Ale ponieważ nigdy wcześniej tego nie robiłem, zastanawiam się, jakie problemy napotykają ludzie wykonujący taką pracę. Na przykład: jak znajdujesz klientów? Jakie trudności zwykle napotykasz w projekcie? Jak radzisz sobie z projektami, które są zbyt duże, aby jeden programista mógł je skutecznie zrealizować? A co z projektami, które wymagają innych zestawów umiejętności (na przykład projektowanie stron internetowych dla aplikacji internetowej?)


title: Czy powinienem uwzględnić koszt wyjścia przy wyborze rozwiązania?

text: Obecnie wybieram między dwoma opłacalnymi projektami/rozwiązaniami oprogramowania. Rozwiązanie 1 jest łatwe do wdrożenia, ale zablokuje niektóre dane w zastrzeżonym formacie i trudno będzie je później zmienić. Rozwiązanie 2 jest trudne do wdrożenia, ale później będzie o wiele łatwiejsze do zmiany. Czy powinienem wziąć udział w YAGNI, czy powinienem uwzględnić koszt wyjścia przy podejmowaniu decyzji? Albo zapytać inaczej, czy koszt wyjścia jest częścią TCO? Zastanawiam się, czy wrócić z tym do klienta i zapytać, czy uważa, że koszty wyjścia są istotne, ale najpierw chciałbym wiedzieć, co myśli społeczność. PS Czy koszt wyjścia jest poprawnym terminem?


title: Więc próbują wciągnąć mnie do zarządzania

text: Pracuję w małym dziale IT w firmie non-tech. Mój menedżer niedawno zrezygnował i szukają zastępcy. Myślę, że skoro jestem jednym z tych „rzadkich” programistów z umiejętnościami ludzkimi, reżyser zachęca mnie do aplikowania. Część mnie chce się zgłosić, ale inna część mówi nie. Wynagrodzenie i zdolność do robienia zmian brzmią intrygująco, a po 12 latach jestem trochę wypalony w programowaniu, ale wydaje się, że są też wady. Zarządzałbym kimś innym, kto jest bardzo zainteresowany pozycją i może to być niezręczne, ponieważ jest przyjacielem i obecnie znajduje się wyżej na drabinie niż ja (wraz z kilkoma innymi). Czy ktoś jeszcze był w podobnej sytuacji? Czy ktoś jest w zarządzaniu i jest szczęśliwszy, czy ktoś podjął pracę w zarządzaniu i żałował, że tego nie zrobiłeś? Wszelkie opinie będą mile widziane! * * * @Pratik: Kiedy menedżerowie pracowali dla byłych pracowników w firmach, w których pracowałeś, czy sprawiali im jakieś kłopoty? * * * EDIT: Dziękuję wszystkim za odpowiedzi. Chociaż wydaje się, że może to być dobra okazja, jest kilka rzeczy, które sprawiają, że czuję się niekomfortowo. 1) Byłbym odpowiedzialny za WSZYSTKO, a nie za to, o co mnie proszono. Po kilku rundach zwolnień departament wciąż jest w szoku... przeciążony i na skraju wypalenia. Mam całkiem dobre relacje ze wszystkimi w zespole… ale zastanawiam się, czy to by się nie zmieniło, gdybym przyjął tę pracę. 2) Kilku współpracowników gardzi reżyserem z jakiegokolwiek powodu. Mógłby próbować mnie zmusić do jego brudnej roboty i ukarać ich, jeśli się zderzyli. 3) Zarządzanie osobami starszymi ode mnie, co nie wydaje się być problemem w oparciu o post Codemwnci. 4) Jest to mały dział i naprawdę nie sądzę, aby menedżer na pełny etat był potrzebny. IMO nie potrzebujemy kogoś, kto spędzałby 50% czasu na zamawianiu ludzi (bo każdy wie, co ma robić) i 50% czasu nic nie robi. Departament potrzebuje więcej IMO gracza-trenera. Myślę, że to faktycznie pomogłoby zespołowi, ponieważ mieliby inną osobę do pracy w pełnym wymiarze godzin (zamiast osoby wspierającej pisanie kodu, tak jak ja robię teraz), jeśli ma to jakikolwiek sens. To trudne, ale to, co teraz robię, jest również trudne (praca rozwojowa + wsparcie) Nie chciałbym, aby sprowadzali kogoś z zewnątrz, który nie wie, co robi lub rujnuje zespół, który mamy teraz co jest całkiem solidne. * * * EDYTUJ (4/30) > Twoje relacje z resztą zespołu **ulegną zmianie**. Jesteś teraz > szefem, a nie kolegą. Będziesz musiał powiedzieć ludziom, co mają robić i > powinni to zrobić. Niektórzy będą w porządku ze zmianą, ale inni mogą mieć pretensje, że > awansowałeś, a nie oni. To może być problem, ponieważ większość z nich przyjaźnię się teraz. > W takim przypadku przydziel sobie niektóre z „łatwych” zadań projektowych. Powinny to być przedmioty niekrytyczne, które możesz w każdej chwili podnieść i upuścić. Dzięki temu możesz pomóc w projekcie, nadążać za bazą kodu >, ale nie odwracać uwagi od czynności zarządczych. Inną rzeczą, którą możesz > zrobić, jest pole wszystkich raportów o błędach, które się pojawiają. Sprawdź je, aby upewnić się, > że są prawdziwymi błędami, a jeśli jest to łatwa edycja, napraw je od razu. > Większe problemy można następnie przypisać do pozostałych działań zespołu. Zapobiega to rozproszeniu uwagi zespołu, a także pokazuje > klientowi/wyższemu kierownictwu, że sprawy są naprawiane. Brzmi jak dobra strategia... > Dla mnie sprowadza się to do tego, jakie codzienne czynności lubisz. Lubisz > coaching, spotkania z ludźmi, zarządzanie projektami, budowanie relacji i > rozwiązywanie problemów ludzi? A może potrzebujesz dużo czasu w samotności, znajdujesz spotkania > wyczerpujące, nie lubisz dramatów i lubisz problemy intelektualne/techniczne? Mogę zrobić oba. Najważniejsza dla mnie jest równowaga między życiem zawodowym a prywatnym. Mój stary szef miał równowagę między życiem zawodowym a prywatnym, ale tylko dlatego, że miał pod sobą oddanych pracowników, którzy wiedzieli, co robią, pracowali w nadgodzinach i ułatwiali mu pracę. Oczywiście, gdyby ktoś inny przejął i dział był źle zarządzany, równowaga między życiem zawodowym a prywatnym dla wszystkich mogłaby być przez okno. * * * EDYTUJ (5/1) @Jeff To środowisko korporacyjne i nie mam kontroli nad tym, ile mamy osób, ani nad opisem stanowiska na każdym stanowisku. Mam nadzieję, że koledzy z drużyny będą chcieli, żebym odniósł sukces, ale nie jestem pewien. Z niektórymi z nich zaprzyjaźniłem się i na pewno zmieniłoby to nasz związek. Ale nie jestem pewien, czy pozostali kandydaci byliby w stanie kierować działem i sprawnie działać… chociaż mogę się mylić.


title: Kod źródłowy skradziony\zhakowany przez konkurencyjną firmę

text: W niektórych firmach, dla których pracowałem, menedżerowie wydali sporo pieniędzy na konsultantów ds. bezpieczeństwa IT. Przede wszystkim dlatego, że obawiają się, że kod źródłowy zostanie skradziony przez konkurencyjną firmę. Jednak jako programista uważam, że jest to niewielka obawa, aby konkurencyjna firma uznała rzeczywisty kod źródłowy za przydatny. W końcu wystarczy mieć dostęp do naszej aplikacji, a można to zrobić bez łamania prawa. Moim zdaniem dane obsługiwane przez ludzi biznesu byłyby o wiele bardziej przydatne niż kod źródłowy. Moje pytanie brzmi; _czy są jakieś znane przykłady, w których kod źródłowy został skradziony ORAZ konkurencyjna firma intensywnie go używała?_ Znam jakiś silnik gry (quake 1 i half life 2, jeśli dobrze pamiętam) kod źródłowy został skradziony, ale tak naprawdę nie mogę zobaczyć, że to naprawdę zaszkodziło ich interesom. (Wiem, to pytanie może być bardziej odpowiednie dla innego forum na stackexchange)


title: Symbol pola i odniesienie do danych w SAP-ABAP

text: Jeśli porównamy symbol pola i referencję danych ze wskaźnikiem w C, doszedłem do wniosku, że :- W języku C, powiedzmy, że deklarujemy zmienną "var" typu "Integer" z domyślną wartością "5". Zmienna "var" będzie przechowywana gdzieś w pamięci i powiedzmy, że adres pamięci, który przechowuje tę zmienną to "1000". Teraz definiujemy wskaźnik "ptr" i ten wskaźnik jest przypisany do naszej zmiennej. Tak więc "&ptr" będzie wynosić "1000", a " *ptr " będzie 5. Porównajmy powyższą sytuację w SAP ABAP. Tutaj deklarujemy symbol pola "FS" i przypisujemy go do zmiennej "var". Teraz moje pytanie brzmi, co oznacza "FS"? Przeszukałem to rygorystycznie w internecie, ale dowiedziałem się, że wielu konsultantów ABAP uważa, że FS posiada adres zmiennej tj. 1000. Ale to jest błędne. Podczas debugowania dowiedziałem się, że fs ma tylko 5. Więc fs (w ABAP) jest równoważne *ptr (w C). Proszę mnie poprawić, jeśli moje zrozumienie jest złe. Teraz zadeklarujmy referencję do danych "dref" i kolejny symbol pola "fsym" i po utworzeniu referencji do danych przypisujemy to samo do pola symbol . Teraz możemy wykonać operacje na tym symbolu pola. Tak więc różnica między refernec danych a symbolem pola jest taka:- w przypadku symbolu pola najpierw zadeklarujemy zmienną i przypiszemy ją do symbolu pola. w przypadku odniesienia do danych najpierw tworzymy odniesienia do danych, a następnie przypisujemy je do symbolu pola. Jaki jest zatem pożytek z odniesienia do danych? Tę samą funkcjonalność możemy również osiągnąć poprzez symbol pola.


title: Macierz kompetencji dla umiejętności graficznych 3D

text: W ramach samooceny natknąłem się na tę macierz kompetencji programisty, która zbiera wiele głównych aspektów bycia dobrym/eksperckim programistą. Bardzo mi to pomogło w zrozumieniu tego, co wiem o programowaniu, czego nie wiem io czym nigdy nawet nie pomyślałem. Teraz potrzebowałbym tego samego rodzaju matrycy o umiejętnościach programowania grafiki 3D - nie tyle o używaniu oprogramowania do budowania modeli, ale o ogólnych rzeczach 3D, matematyce, korzystaniu z shaderów, wydajności/optymalizacji itp. Czy ktoś ma pomysł, gdzie mógłbym go znaleźć ? Nie musi być perfekcyjny (i niekoniecznie matrycowy), ale fajnie byłoby mieć przynajmniej kilka podstawowych aspektów.


title: Czy "Dziedziczenie interfejsów" jest zawsze bezpieczne?

text: Czytam "Efektywną Javę" Josha Blocha i tam jest punkt 16, w którym mówi, jak prawidłowo używać dziedziczenia i przez dziedziczenie ma na myśli tylko dziedziczenie klas, a nie implementowanie interfejsów lub rozszerzanie interfejsów o inne interfejsy. W całej książce nie znalazłem żadnej wzmianki o dziedziczeniu interfejsów. Czy to oznacza, że dziedziczenie interfejsów jest zawsze bezpieczne? Czy istnieją wytyczne dotyczące dziedziczenia interfejsu?


title: czy istnieje „sklep z aplikacjami” dla zwykłych aplikacji komputerowych?

text: Napisałem aplikację na komputer w javie, ale nie chcę jej rozdawać za darmo. Chcę pobierać tylko od 0,99 USD do 2,99 USD, czy jest strona internetowa, na którą mogę ją przesłać, aby zrobić to za mnie. Szukam czegoś takiego jak Apple App Store lub Android Market, ale na komputer. Czy to istnieje? również, czy istnieje sposób kontrolowania liczby komputerów, na których można go zainstalować? tj. jeśli dana osoba używa określonego klucza, może korzystać z programu tylko na jednym komputerze naraz, tak jak w przypadku filmów i-tunes. program jest samodzielną aplikacją, co oznacza, że nie ma procesu instalacji, wystarczy otworzyć plik wykonywalny i działa. czy będzie to problem z integracją funkcji licencjonowania.


title: Język oparty na zdarzeniach dla robotyki

text: Dostępnych jest kilka opcji, takich jak C, C++, Matlab i kilka innych. Ale czy istnieje język, który naturalnie przypomina programowanie zdarzeń? Na przykład: Jeśli widzę czerwoną piłkę (Wydarzenie) ---> Zrób to (Działanie)


title: css - użyć uniwersalnego selektora „*” w porównaniu z selektorem html lub body?

text: Zastosowanie stylów do tagu body zostanie zastosowane do całej strony, więc body { font-family: Verdana } zostanie zastosowane do całej strony. Można to również zrobić za pomocą * {font-family: Verdana}, która miałaby zastosowanie do wszystkich elementów, a zatem wydaje się mieć ten sam efekt. Rozumiem zasadę, że w pierwszym przypadku styl dotyczy jednego tagu, treści na całą stronę, a w drugim przypadku czcionka jest nałożona na poszczególne elementy html. Pytam o to, jaka jest praktyczna różnica w robieniu tego, jakie są implikacje i jaki jest powód, sytuacja lub najlepsza praktyka, która prowadzi do używania jednego nad drugim. Jednym ze skutków ubocznych jest z pewnością szybkość (+1 Rob). Najbardziej interesuje mnie rzeczywisty powód wyboru jednego z nich pod względem funkcjonalności.


title: Jak zachować czytelność kodu z kontynuacją/wywołaniami zwrotnymi?

text: Podsumowanie: **Czy są jakieś dobrze ustalone wzorce najlepszych praktyk, które mogę zastosować, aby mój kod był czytelny pomimo używania kodu asynchronicznego i wywołań zwrotnych?** * * * Używam biblioteki JavaScript, która robi wiele rzeczy asynchronicznie i mocno opiera się na wywołaniach zwrotnych. Wydaje się, że pisanie prostej metody „load A, load B,…” staje się dość skomplikowane i trudne do naśladowania przy użyciu tego wzorca. Podam (wymyślony) przykład. Załóżmy, że chcę załadować kilka obrazów (asynchronicznie) ze zdalnego serwera sieci Web. W C#/async napisałbym coś takiego: disableStartButton(); foreach (myData in myRepository) { var wynik = await LoadImageAsync("http://my/server/GetImage?" + myData.Id); if (wynik.Sukces) { mojeDane.Obraz = wynik.Dane; } else { write("błąd ładowania obrazu " + myData.Id); zwrócić; } } write("sukces"); enableStartButton(); Układ kodu jest zgodny z „przepływem zdarzeń”: najpierw przycisk Start jest wyłączony, następnie obrazy są ładowane (`await` zapewnia, że interfejs użytkownika pozostaje responsywny), a następnie przycisk Start jest ponownie włączony. W JavaScript, używając wywołań zwrotnych, wymyśliłem to: disableStartButton(); var count = myRepository.length; function loadImage(i) { if (i >= count) { write("sukces"); enableStartButton(); zwrócić; } mojeDane = mojeRepozytorium[i]; LoadImageAsync("http://my/server/GetImage?" + myData.Id, function(success, data) { if (success) { myData.Image = data; } else { write("błąd ładowania obrazu" + myData. Id); return; } loadImage(i+1); } ); } loadImage(0); Myślę, że wady są oczywiste: musiałem przerobić pętlę na wywołanie rekurencyjne, kod, który ma zostać wykonany na końcu, znajduje się gdzieś pośrodku funkcji, kod rozpoczynający pobieranie (`loadImage(0)`) znajduje się na samym dole i ogólnie jest znacznie trudniej go czytać i śledzić. Jest brzydki i nie lubię tego. Jestem pewien, że nie jestem pierwszym, który napotkał ten problem, więc moje pytanie brzmi: **Czy istnieją pewne dobrze ugruntowane wzorce najlepszych praktyk, które mogę zastosować, aby mój kod był czytelny pomimo używania kodu asynchronicznego i oddzwonienia?**


title: Wyzwania na wieloosobowym serwerze gier na Androida z RESTful Nature

text: Pracuję nad grą na Androida opartą na Contract Bridge, w ramach mojego studenckiego projektu Summer Internship. Gra będzie wieloosobowa, dzięki czemu będą mogły w nią grać 4 urządzenia z Androidem, więc nie trzeba rozwijać odtwarzacza BOT ani procesora. W momencie pozyskiwania projektu zdałem sobie sprawę, że większość studentów już pracowała nad projektem, ale żadna z ich prac nie nadaje się teraz do ponownego wykorzystania (z różnych powodów, takich jak nieudokumentowany kod i architektura projektu, różne implementacje platformy). Mam doświadczenie w pracy nad kilkoma projektami open source, dlatego kładę nacisk na wypracowanie tego projektu w taki sposób, aby komponenty, które tworzę, były w jak największym stopniu wielokrotnego użytku. Teraz, ponieważ gra jest wieloosobowa, a cały postęp gry będzie obsługiwany na serwerze, obecnie pracuję nad projektem serwera, ponieważ chciałem, aby serwer gry był wielokrotnego użytku, tak aby każda platforma kliencka mogła z niego korzystać, wcześniej byłem zdezorientowany w wybierając Socket lub REST dla projektu Game Server, ale później sfinalizowano pracę nad REST API dla serwera. Teraz, ponieważ muszę zsynchronizować wszystkich graczy podczas wykonywania ruchów w grze, na serwerze zaplanowałem użycie bazy danych, która będzie przechowywać postępy wszystkich graczy, specyficzne dla każdego stołu (w brydżu 4 graczy gra na jednym stole , a serwer obsłuży wiele takich stołów do gry). Nie wiem, czy jest to właściwa decyzja, aby użyć bazy danych jako współdzielonego medium do śledzenia postępu każdego stołu do gry (daj mi znać, czy jest odpowiednia lub lepsza opcja). Oczywiście po zakończeniu gry o dany stół dane dla tego stołu w bazie danych serwera są usuwane. Teraz problem polega na tym, że dostęp do usługi REST jest wywołaniem HTTP, więc dopóki klient nie wyśle żadnego żądania, serwer pozostanie bezczynny i rozważy sytuację, w której * gracz zagrał kartę na swoim urządzeniu i urządzeniu żąda zastosowania tej zmiany na serwerze. * Teraz muszę poinformować resztę trzech urządzeń, że gracz zagrał kartę, a także zaktualizować widok na swoim urządzeniu. * AFAIK, REST nie może zapewnić czegoś w rodzaju systemu powiadomień push, ponieważ połączenie z serwerem nie jest trwałe. * Jednym z rozwiązań, o którym myślałem, było sprawienie, aby każde urządzenie stale odpytywało serwer pod kątem jakichkolwiek zmian (np. co 56 ms), a gdy zmiany zostaną znalezione, odzwierciedlają je na urządzeniu. Ale uważam, że nie jest to elegancki sposób, ponieważ każde żądanie HTTP jest drogie. (wybieram REST, aby rozgrywka była solidna, ponieważ urządzenie mobilne ma tendencję do odłączania się od Internetu, a jeśli istnieje trwałe połączenie typu Socket, cały postęp gry może zostać utracony. Ważna jest również przenośność po stronie klienta) * Ponadto, wyobrażając sobie sytuację, w której trwa 10 stołów do gry i gra 40 graczy, serwer musi być w stanie obsłużyć zalane żądania HTTP ze wszystkich urządzeń, które wykonują je co 56 ms. Zastanawiam się więc, czy sytuacja jest uznana za atak DoS. Wyjaśniając sytuację, czy podążam właściwą ścieżką, aby zaprojektować serwer? Chciałem się upewnić, zanim przejdę dalej z kodem.


title: wprowadzenie testów automatycznych bez stromej krzywej uczenia się

text: Jesteśmy grupą 4 programistów aplikacji internetowej ajax/mysql/php. Dwóch z nas koncentruje się na testowaniu aplikacji, ponieważ jest to czasochłonne, zamiast na kodowaniu. Kiedy mówię testowanie, mam na myśli otwieranie ekranów i testowanie linków, upewnianie się, że nic nie jest zepsute, a dane są poprawne. Rozumiem, że istnieją frameworki testowe, które mogą zautomatyzować tego rodzaju testy, ale nie znam żadnego z nich (ani nikogo w zespole) ani fantazyjnego żargonu (czy jest oparte na testach? oparte na zachowaniu (testy akceptacyjne?) Tak więc zamierzamy powoli wprowadzać testy automatyczne. Wszyscy jesteśmy programistami, więc nie musi to być super proste. Ale nie chcemy czegoś, czego nauczenie się zajmie tydzień… I musi pasować do naszej platformy php/ajax… Pytanie: Który framework testowy pozwoli nam wskoczyć od razu bez poświęcania dużo czasu nauka składni i/lub nowego języka programowania.


title: Przyszły kod sprawdzający

text: Tam, gdzie pracuję, programiści zawsze mówią mi, że „dodałem to na wszelki wypadek na przyszłość” lub „Myślę, że to dobry pomysł, ponieważ prawdopodobnie pewnego dnia będą tego chcieli”. Myślę, że to wspaniałe, że aktywnie starają się przewidzieć przyszłe zmiany, ale nie mogę oprzeć się wrażeniu, że jest to niepotrzebne i ryzykuję pisanie kodu, który może nigdy nie być potrzebny, a przez to bezproduktywny (myślę też, że niektórzy programiści chcą po prostu coś wypróbować nowy ze względu na to). Czy argumenty przemawiające za przyszłym sprawdzaniem są nieważne, jeśli po prostu piszesz dobry, uporządkowany kod?


title: Scalanie podobnych wykresów wyłącznie na podstawie struktury wykresu?

text: Poszukuję (lub próbuję zaprojektować) technikę dopasowywania węzłów z bardzo podobnych grafów na podstawie struktury grafu*. W poniższych przykładach górny wykres ma 5 węzłów, a dolny wykres ma 6 węzłów. Chciałbym dopasować węzły z górnego wykresu do węzłów na dolnym wykresie, tak aby pasowały węzły „0”, a węzły „1” itd. Wydaje się to logicznie możliwe, ponieważ mogę to zrobić w moim przejdź do tych prostych przykładów. Teraz wystarczy wyrazić swoją intuicję w kodzie. Czy są jakieś ustalone algorytmy lub wzorce, które mógłbym wziąć pod uwagę? (* Kiedy mówię na podstawie struktury grafu, mam na myśli, że rozwiązanie nie powinno zależeć od etykiet węzłów; etykiety numeryczne na węzłach służą tylko do demonstracji.) AKTUALIZACJA: Słusznie wskazano, że przy użyciu struktury samemu, większości z tych wykresów nie da się rozwiązać ze 100% dokładnością. Do każdego wykresu dodałem kilka przemyśleń. Interesuje mnie również wykonanie wszelkich potencjalnych rozwiązań. Jak dobrze się skalują? Czy mogę połączyć wykresy z milionami węzłów? W bardziej skomplikowanych przypadkach uznaję, że najlepsze rozwiązanie może podlegać interpretacji. Mimo to mam nadzieję na „dobry” sposób scalania złożonych wykresów. (Są to wykresy skierowane; grubsza część krawędzi reprezentuje głowę.) ![Przykład 1](http://i.stack.imgur.com/vxEmS.png) Ten wykres jest cyklem z 1 węzłem „dołączonym do na zewnątrz." Po dołączeniu drugiego węzła na zewnątrz nie można określić, czy nowy węzeł (węzeł 5) jest dołączony do węzła 1 czy 3. 4 węzły tworzące cykl również nie mogą być idealnie dopasowane. ![Przykład 2](http://i.stack.imgur.com/3Bkbd.png) Węzły 1 i 5 można zamienić na dolnym wykresie bez zmiany struktury. W ten sposób możesz tylko zgadywać z dokładnością 50/50, który jest nowym węzłem. ![Przykład 3](http://i.stack.imgur.com/jmU7l.png) Ten wykres ma symetrię w 2 wymiarach i może być odzwierciedlony bez zmiany struktury. Oznacza to, że możesz zamienić kilka węzłów bez zmiany struktury. ![Przykład 4](http://i.stack.imgur.com/CeUEb.png) Ten ostatni wykres jest jedynym, dla którego możesz zidentyfikować nowy węzeł ze 100% dokładnością. Dzięki Kirkowi Broadhurstowi za zwrócenie na to uwagi.


title: jak czysto funkcjonalny język programowania radzi sobie bez instrukcji przypisania?

text: Czytając słynny SICP, zauważyłem, że autorzy raczej niechętnie wprowadzają deklarację przypisania do Schematu w Rozdziale 3. Przeczytałem tekst i trochę rozumiem, dlaczego tak się czują. Ponieważ Scheme jest pierwszym funkcjonalnym językiem programowania, o jakim coś wiem, jestem trochę zaskoczony, że niektóre funkcjonalne języki programowania (oczywiście nie Scheme) mogą się obejść bez przypisania. Posłużmy się przykładem, który oferuje książka, przykładem „konta bankowego”. Jeśli nie ma instrukcji przypisania, jak można to zrobić? Jak zmienić zmienną `balance`? Pytam o to, ponieważ wiem, że istnieją tak zwane czysto funkcjonalne języki i zgodnie z teorią zupełności Turinga, to też musi być zrobione. Nauczyłem się C, Java, Pythona i dużo używam przypisań w każdym programie, który napisałem. Więc to naprawdę otwierające oczy doświadczenie. Naprawdę mam nadzieję, że ktoś może pokrótce wyjaśnić, w jaki sposób unika się zadań w tych funkcjonalnych językach programowania i jaki ogromny wpływ (jeśli w ogóle) ma to na te języki. Wspomniany powyżej przykład jest tutaj: (zdefiniuj (wypłata salda) (lambda (kwota) (jeśli (>= kwota salda) (rozpocznij (ustaw! saldo (- kwota salda)) saldo) "Niewystarczające środki"))) To zmieniono „bilans” przez „ustaw!”. Dla mnie wygląda to jak klasowa metoda zmiany `równowagi` członka klasy. Jak powiedziałem, nie znam się na funkcjonalnych językach programowania, więc jeśli powiedziałem o nich coś nie tak, nie krępuj się wskazać. **EDYTUJ** :Wydaje mi się, że aby w pełni zrozumieć pytanie, muszę zagłębić się w czysto funkcjonalny język programowania.Dziękuję za wszystkie odpowiedzi. Wiele się nauczyłem.


title: Jak zachować separację logiki widoku z serwerem?

text: Piszę aplikację klient-serwer. Chciałem całkowicie oddzielić logikę serwera od widoku. Pierwszą rzeczą, którą chciałem zrobić, to zrobić coś w rodzaju dziennika wiadomości. Sam serwer nie powinien wiedzieć, czy komunikaty będą wyświetlane w GUI, czy na konsoli. To, o czym myślałem, to mieć metodę obsługi, która będzie wywoływana za każdym razem, gdy zostanie wysłana nowa wiadomość. Tak więc aplikacja GUI miałaby własną metodę, którą można by dodać do listView, podczas gdy konsola miałaby prosty printf. Czy jest na to lepszy sposób?


title: Czy niektóre uaktualnienia opublikowane w bibliotece LGPL mogą korzystać z biblioteki komercyjnej?

text: Używam biblioteki LGPL v3 i dokonałem jej aktualizacji. Rozumiem, że przed użyciem tych uaktualnień muszę je opublikować. Jest w porządku. 1. Czy to legalne, jeśli wykonuję uaktualnienia, które korzystają z własnej biblioteki komercyjnej (uaktualnienia zostaną opublikowane, ale nie moja biblioteka komercyjna)? Uwaga: zwykle pytania są po drugiej stronie: aplikacje komercyjne, które chcą korzystać z bibliotek GPL. 2. Jeśli tak do (1), czy istnieją jakieś ograniczenia dotyczące kompilacji zaktualizowanej biblioteki LGPL? Czy komercyjna biblioteka powinna być połączona dynamicznie czy statycznie, czy cokolwiek innego?


title: Jak wyjaśnić koncepcje OOP osobie nietechnicznej?

text: Często staram się unikać mówienia ludziom, że jestem programistą, ponieważ przez większość czasu wyjaśniam im, co to naprawdę oznacza. Kiedy mówię im, że programuję w Javie, często zadają ogólne pytania dotyczące języka i tego, czym różni się od x i y. Nie jestem też dobry w wyjaśnianiu rzeczy, ponieważ 1) nie mam tak dużego doświadczenia w tej dziedzinie i 2) naprawdę nienawidzę wyjaśniać rzeczy osobom nietechnicznym. Mówią, że naprawdę rozumiesz rzeczy, kiedy wyjaśnisz je komuś innemu, w tym przypadku jak wyjaśnisz terminologię i koncepcje OOP osobie nietechnicznej?


title: jak zainstalować lib_mysqludf_sys.dll?

text: Umieściłem "lib_mysqludf_sys.dll" w C:/Xampp/mysql/lib/plugin. w pliku konfiguracyjnym "my.ini" katalog wtyczek został ustawiony poprawnie. po umieszczeniu tego pliku .dll w odpowiednim miejscu zrestartowałem serwer mysql. wszystko wydaje się być poprawne. potem piszę CREATE FUNCTION sys_exec ZWRACA INT SONAME 'lib_mysqludf_sys.dll' w phpmyadmin, ale konfrontuję się z Can't open shared library 'lib_mysqludf_sys.dll' (errno: 193 ) ... czy ktoś może mi pomóc i powiedzieć, gdzie mam zrobione niepoprawnie, a może nie? Twoja współpraca jest doceniana wcześniej. meisam...


title: Wymagania wstępne dotyczące tworzenia aplikacji z obsługą Unicode

text: Jakie mogą być niezbędne wymagania wstępne, które należy spełnić podczas tworzenia aplikacji z obsługą Unicode w kontekście 1. aplikacji internetowych 2. aplikacji komputerowych 3. aplikacji osadzonych Wymagania wstępne, które należy spełnić, dotyczące * rzutowania i konwersji typów * przechowywania danych * powrotu w przypadku braku obsługi Unicode * Przejście z bazy danych bez obsługi Unicode do bazy danych z obsługą Unicode Preferowane są odpowiedzi dotyczące rzeczywistych projektów


title: Jak przedłużyć istniejącą Usługę?

text: Główna funkcjonalność naszego systemu jest zamknięta w usłudze, nazwijmy ją X. Do usługi X-Manager przychodzą żądania, które zajmują się wszystkimi walidacjami i problemami z bezpieczeństwem oraz aktywują funkcjonalność X po tym, jak wszystko przejdzie. Chcemy teraz rozszerzyć funkcjonalność X o nowy moduł, nazwijmy go Y, ale bez zbytniej zmiany kodu X, najlepiej bez zmiany go w ogóle. Poza tym Y może kiedyś pracować samodzielnie (a nie tylko rozszerzając X) Główną ideą w zespole jest sprawienie, aby X-Manager **zadzwonił do Y za pomocą X zamiast po prostu dzwonić do X, aby Y zrobił to jest rzecz, a potem Y nazwie funkcjonalność X zamiast X-Managera.** Nie wiem dlaczego, ale mi to brzydko pachnie, mam nadzieję, że udało mi się to dobrze wyjaśnić... **Czy jest lepszy sposób na zrobienie tego ten?**


title: Najłatwiejszy sposób na stworzenie statycznego pliku HTML z tabelą sortowalną i filtrowalną?

text: Chcę utworzyć statyczny plik HTML, który mogę wysłać pocztą e-mail do kogoś, kto ma dużo danych, i mieć możliwość sortowania i filtrowania tych danych. Jaka jest najłatwiejsza w użyciu biblioteka lub pakiet, którego mogę użyć, aby to uruchomić?


title: Jak mogę obsłużyć tę konkatenację ciągów w C w sposób wielokrotnego użytku?

text: Pisałem małą aplikację w C, która operuje na plikach i odkryłem, że kopiuję i wklejam ten kod wokół moich funkcji: char fullpath[PATH_MAX]; pełna ścieżka[0] = '\0'; strcat(pełna ścieżka, BASE_PATH); strcat(pełna ścieżka, podkatalog); strcat(pełna ścieżka, "/"); strcat(pełna ścieżka, nazwa pliku); // zrób coś z fullpath... Czy jest lepszy sposób? Pierwsza myśl, jaka przychodzi mi do głowy, to stworzenie makra, ale jestem pewien, że jest to powszechny problem w C i zastanawiam się, jak inni go rozwiązali.


title: Przerwa w linii przed/za operatorem

text: Podczas gdy konwencja kodu Java firmy Sun sugeruje umieszczenie łamania linii przed operatorem, wiele innych wytycznych się z nią nie zgadza. Nie widzę żadnych oczywistych zalet i wad, więc czy są jakieś zalety używania jednego z tych stylów nad innym? Ciąg longVarName = a + b + c + d + e + f; vs String longVarName = a + b + c + d + e + f;


title: Czy aby odnieść sukces, trzeba skoncentrować się na jednym konkretnym temacie IT?

text: Ostatnio bardzo niepokoi mnie myśl, że po tylu latach robienia tego jako hobby nadal nie jestem oddany jednemu konkretnemu tematowi IT. Od 12 roku życia zajmowałem się wieloma różnymi hobby związanymi z IT. Spędziłem 8 lat, a teraz mam 20 lat i właśnie skończyłem pierwszy rok studiów w Computer Eng. Wystarczy podsumować różnorodność: * 3D Game Dev. i modelowania (Acknex, Irrlicht, OpenGL, GLES, 3DSMAX) * Mobile App.Dev (Symbian, Maemo, Android) * Electronis (Arduino) * Web.Dev. (PHP, MYSQL, Javascript, Jquery, RaphaelJS, Canvas, Flash itp.) * Wizja komputerowa (OpenCV) Muszę zacząć zarabiać. Ale mam problem, aby wybrać odpowiednią firmę IT, aby to zrobić. **Czy to problem z zainteresowaniem tak wieloma różnymi tematami IT?(w świecie biznesu)** Od czasu do czasu robię sobie dużo zabawy. Poza zarabianiem pieniędzy zauważyłem również, że posiadanie tak wielu różnych zainteresowań obniża moją produktywność. Ale wciąż mam trudności z wybraniem jednego. Wszystkie te tematy są mi bliskie (od czasu do czasu).


title: Licencja open source LGPL

text: Ostatnio zaciekawiły mnie licencje open source. Mam pytanie dotyczące LGPL. Stworzyłem projekt WWW w Javie i zbudowałem go jako pakiet WAR. Czy mogę dodać jary LGPL do tego pliku WAR?


title: Czy istnieje powód, dla którego testy nie są pisane w linii z testowanym kodem?

text: Czytałem ostatnio trochę o programowaniu literackim i skłoniło mnie to do myślenia... Dobrze napisane testy, zwłaszcza specyfikacje w stylu BDD, mogą lepiej wyjaśnić, co robi kod niż proza, i mają dużą zaletę weryfikację własnej dokładności. Nigdy nie widziałem testów napisanych w linii z kodem, który testują. Czy dzieje się tak dlatego, że języki nie ułatwiają oddzielenia kodu aplikacji i kodu testowego, gdy są napisane w tym samym pliku źródłowym (i nikt tego nie ułatwił), czy też istnieje bardziej zasadniczy powód, dla którego ludzie oddzielają kod testowy od kodu aplikacji?


title: Klauzule ochronne nazewnictwa, które zgłaszają wyjątki

text: Mam funkcję `evaluate()`, która analizuje `String` dla niektórych zmiennych i zastępuje je odpowiednią wartością: public String assessment() { String result = templateText; for (Entry<String, String> entry : variable.entrySet()) { String regex = "\\$\\{" + entry.getKey() + "\\}"; wynik = wynik.replaceAll(regex, entry.getValue()); } if (result.matches(".*\\$\\{.+\\}.*")) { //<--sprawdź czy zmienna nie została zastąpiona throw new MissingValueException(); } zwraca wynik; } Ponieważ funkcja `evaluate()` robi teraz 2 rzeczy, najpierw zastępuje zmienne wartościami **AND** check dla wszystkich zmiennych, które nie zostały zastąpione, pomyślałem o refaktoryzacji na: public String Evaluation() { Wynik ciągu = tekst_szablonu; for (Entry<String, String> entry : variable.entrySet()) { String regex = "\\$\\{" + entry.getKey() + "\\}"; wynik = wynik.replaceAll(regex, entry.getValue()); } checkForMissingValues(wynik); } private void checkForMissingValues(String result) { if (result.matches(".*\\$\\{.+\\}.*")) { throw new MissingValueException(); } } Czy to dobra nazwa dla funkcji `checkForMissingValues`? Mam na myśli to, że sprawdza brakujące wartości, ale zgłasza również wyjątek. Myślałem o zmianie nazwy na `throwExceptionIfMissingValueWasFound()`, ale ta nazwa mówi **JAK** funkcja robi to więcej niż **CO** robi. Czy istnieje standard nazewnictwa takich funkcji, które sprawdzają warunek, a następnie zgłaszają wyjątek?


title: Etykieta śledzenia błędów — nekromancja czy duplikat?

text: Natknąłem się na naprawdę stary (2+ lata) problem z żądaniami funkcji w narzędziu do śledzenia błędów dla projektu open source, który został oznaczony jako „rozwiązany (nie naprawi)” z powodu braku narzędzi wymaganych do wprowadzenia żądanego ulepszenia. W czasie, jaki upłynął od podjęcia decyzji, zostały opracowane nowe narzędzia, które pozwolą rozwiązać ten problem, i chciałbym zwrócić na to uwagę społeczności dla tej aplikacji. Nie jestem jednak pewien, jaka jest ogólnie przyjęta etykieta śledzenia błędów w takich przypadkach. Oczywiście, jeśli system wyraźnie stwierdzi, że nie należy duplikować i będzie aktywnie oznaczać nowe elementy jako duplikaty (w podobny sposób, w jaki robią to strony SE), wówczas odpowiedzią byłoby podążanie za tym, co mówi system. Ale co z sytuacją, gdy system nie mówi tego wprost lub nowy użytkownik nie może łatwo znaleźć miejsca, które mówi o preferencjach systemu? Czy ogólnie uważa się, że lepiej jest błądzić po stronie powielania lub nekromancji? Czy to się różni w zależności od tego, czy jest to błąd, czy prośba o nową funkcję?


title: Jakie są zalety i wady korzystania z narzędzi „własnych”?

text: Jakie są plusy i minusy korzystania z „własnych” narzędzi na podstawie rzeczywistych doświadczeń?


title: Dlaczego generyki Java nie mogą znajdować się w tablicach?

text: Dlaczego przy próbie utworzenia tablicy ArrayLists: `ArrayList<Integer>[] arr=new ArrayList<Integer>[40];` pojawia się błąd i java na to nie pozwala? Czy istnieje powód związany z implementacją w javie generyków, generyków w dowolnym języku lub czegoś arbitralnego?


title: Co programiści internetowi powinni wiedzieć o kryptografii?

text: Czy programiści tworzący strony/aplikacje internetowe powinni rozumieć kryptografię? Nie mam pojęcia, jak działa większość algorytmów kryptograficznych i naprawdę nie rozumiem różnic między md5/des/aes/etc. Czy ktoś z was znalazł potrzebę dogłębnego zrozumienia kryptografii? Nie potrzebowałem tego, ale zastanawiam się, czy może czegoś nie brakuje. Użyłem salt + md5 hash do szyfrowania haseł i każę serwerom WWW używać SSL. Poza tym nie mogę powiedzieć, że korzystałem z wielu innych rzeczy, ani nie mogę powiedzieć z całą pewnością _jak_ bezpieczne są te metody. Używam ich tylko dlatego, że inni twierdzą, że są bezpieczne. Czy poza tymi dwoma prostymi przykładami kiedykolwiek znalazłeś potrzebę wykorzystania kryptografii w programowaniu internetowym?


# Ogólne pytanie Jakie są różnice między algorytmami wykorzystującymi struktury danych a algorytmami wykorzystującymi bazy danych? # Jakiś kontekst To pytanie dręczy mnie od jakiegoś czasu i nie byłem w stanie znaleźć na nie przekonującej odpowiedzi. Obecnie pracuję nad pogłębieniem mojego zrozumienia algorytmów, które oczywiście mocno angażują struktury danych. Są to podstawowe struktury, takie jak Bag, Queue, Stack, Priority Queue i Heap. Na co dzień korzystam również z baz danych do przechowywania danych, które zostały przetworzone i przesłane przez użytkownika końcowego lub przetworzone przez program. Pobieram i przesyłam dane za pośrednictwem DAL, który ma własne struktury danych generowane na podstawie tabel w bazie danych. Moje pytania przychodzą, gdy mam możliwość sortowania danych przy użyciu bazy danych, aby wysłać je z powrotem do mnie w kolejności rosnącej/malejącej lub pobrać i załadować dane do mojej logiki, przetworzyć te dane w kolejce priorytetowej i sortować na stercie wszystko. Innym rozwiązaniem byłoby wyszukiwanie rekordów za pomocą bazy danych, zamiast ładowania podzbioru rekordów i używania czegoś takiego jak wyszukiwanie binarne, aby znaleźć rekord lub rekordy, którymi jestem zainteresowany. miejsce na końcu bazy danych przed wysłaniem, ponieważ komunikacja jest kosztowna. To również sprawia, że zastanawiam się, kiedy do przetwarzania danych używacie algorytmów i struktur danych ściśle określonych we własnej logice, a nie bazy danych? Oto pytania... # Pytania 1. Jakie są różnice między strukturami danych a bazami danych? 2. Kiedy używamy algorytmów wykorzystujących struktury danych zdefiniowane wyłącznie w ramach własnej logiki, a nie logiki bazy danych? 3. **@Harvey post:** Kiedy metody w bazie danych stają się mniej wydajne w użyciu niż metody w Twojej logice? * **@mirculixx post:** Co sprawia, że metoda jest skuteczna? 4. **@Harvey post:** W jaki sposób przetwarzanie danych ze strukturami danych jest szybsze niż przetwarzanie w bazie danych? # Wyjaśnienia 1. **@Grant post:** Bazy danych, z którymi normalnie pracuję, są relacyjne, a te pytania wynikają z pracy z nimi. Myślę jednak, że te pytania mają zastosowanie do wszelkich ram trwałości (kiedy mówię ram, mam na myśli to w najbardziej ogólnym sensie). Wiem, że odpowiedzi bez konkretnego kontekstu są trudne. Żywność do przemyślenia, porady lub punkty do dyskusji są głównie tym, czego szukam i byłbym najbardziej wdzięczny!


title: Jak daleko należy posunąć się do weryfikacji adresu e-mail?

text: Zastanawiam się, jak daleko ludzie powinni posunąć się z walidacją adresu e-mail. Moją dziedziną jest przede wszystkim webdevelopment, ale to ma zastosowanie wszędzie. Widziałem kilka podejść: * po prostu sprawdzenie, czy jest obecny znak „@”, który jest po prostu martwy, ale oczywiście nie jest tak niezawodny. * bardziej złożony test wyrażeń regularnych dla standardowych formatów e-mail * pełne wyrażenie zgodne z RFC 2822 \- problem polega na tym, że często adres e-mail może być poprawny, ale prawdopodobnie nie o to chodziło użytkownikowi * Weryfikacja DNS * SMTP walidacja Jak wiele osób może wiedzieć (ale wielu nie wie), adresy e-mail mogą mieć wiele dziwnych odmian, których większość ludzi zwykle nie bierze pod uwagę (patrz RFC 2822 3.4.1), ale musisz pomyśleć o celach walidacji: czy po prostu próbujesz upewnić się, że adres e-mail może zostać wysłany na adres, czy też użytkownik prawdopodobnie zamierzał to wpisać (co jest mało prawdopodobne w wielu bardziej niejasnych przypadkach, gdy jest inaczej ' ważne” adresy). Opcja, którą rozważałem, to po prostu ostrzeżenie z bardziej ezoterycznym adresem, ale nadal pozwala na przejście żądania, ale to zwiększa złożoność formularza i większość użytkowników może być zdezorientowana. Podczas gdy walidacja DNS / walidacja SMTP wydaje się prosta, przewiduję problemy, w których serwer DNS / serwer SMTP jest tymczasowo wyłączony i użytkownik nie może się gdzieś zarejestrować lub serwer SMTP użytkownika nie obsługuje wymaganych funkcji. Jak niektórzy doświadczeni programiści mogą sobie z tym poradzić? Czy istnieją inne podejścia niż te, które wymieniłem? Edycja: zupełnie zapomniałem najbardziej oczywistego ze wszystkich, wysyłając e-mail z potwierdzeniem! Dziękuję odpowiedziom za wskazanie tego. Tak, ten jest dość niezawodny, ale wymaga dodatkowych kłopotów ze strony wszystkich zaangażowanych. Użytkownik musi pobrać trochę wiadomości e-mail, a programista musi zapamiętać dane użytkownika, zanim zostaną potwierdzone jako prawidłowe.


title: Jak mogę efektywnie podejść do obsługi sesji opartej na plikach cookie?

text: Obecnie nasza aplikacja internetowa wykorzystuje sesje po stronie serwera. Ze względu na duże zużycie pamięci chcemy przełączyć się na sesje oparte na plikach cookie. Zastanawiałem się nad kilkoma sposobami: ### Pomysł 1 Moim pierwszym pomysłem było przekazanie klientowi dwóch ciasteczek: `SessionID` (hasz) i `SessionData` (zaszyfrowane dane). `SessionID` zostanie użyty do wyszukania klucza deszyfrującego `SessionData` w tablicy hash znajdującej się w pamięci. Ponieważ na serwerze przechowywane są tylko klucze odszyfrowywania, powinno to oznaczać mniejsze zużycie pamięci. Jednak nadal wykorzystuje trochę pamięci, a obciążenie procesora jest zwiększane z powodu szyfrowania/odszyfrowywania przy każdym żądaniu. Uzależniłoby to również klaster sesji od bezproblemowego przełączania awaryjnego. ### Pomysł 2 Mój drugi pomysł był podobny do pierwszego, ale zamiast szukać klucza deszyfrującego w pamięci podręcznej, użyłbym solonej wersji `SessionID` do odszyfrowania `SessionData`. Plusem jest to, że nie byłoby już żadnej pamięci podręcznej ani tablicy mieszającej, a sesja byłaby niezależna od klastra, gdyby sól była taka sama dla wszystkich klastrów. Jednak kompromis polega na tym, że jest znacznie mniej bezpieczny ze względu na potencjalne niebezpieczeństwo odszyfrowania lub modyfikacji pliku cookie `SessionData` oraz że obciążenie procesora jest zwiększone z powodu szyfrowania/odszyfrowywania przy każdym żądaniu. Czy istnieje lepszy sposób na rozwiązanie tego problemu? Albo sposób na zmodyfikowanie jednego z tych pomysłów, aby był trochę bardziej smaczny?


title: Czy istnieją rzeczywiste przykłady dochodowych „spółdzielni pracowniczych” programistów?

text: http://en.wikipedia.org/wiki/Worker_cooperative Jestem ciekawa, czy gdziekolwiek na świecie istnieją spółdzielnie pracownicze, które skupiają się na biznesie technologicznym, który obejmuje programowanie, IT lub jakiś rodzaj IT lub doradztwo związane z programowaniem lub usług. Powyższy link do Wikipedii zawiera przegląd koncepcji. Wyjaśnienie krótkiej formy jest takie, że spółdzielnia to biznes należący do pracowników. Istnieje również pogląd, że każdy pracownik posiada udziały w firmie. Interesuje mnie, czy w ogóle istnieje przykład „spółdzielni programistów/informatyków”. Uwaga: nie mówię ani nie pytam o finansowany przez rząd inkubator ani o jakąkolwiek inną uspołecznioną, wspieraną przez państwo grupę. Nie mam też na myśli „coworkingu”, czyli wynajmowania biura razem z innymi samozatrudnionymi, którzy robią swoje. Mam na myśli działającą, dochodową firmę IT działającą w konkurencyjnym środowisku, które jest własnością i jest zarządzane przez pracowników.


title: Jak to zrobić w standardowym UML?

text: Na poniższym diagramie sekwencji, gdy użytkownik wprowadzi nazwę użytkownika i hasło, muszę dokonać uwierzytelnienia. Teraz możesz zobaczyć dwa szczegóły **prawidłowe** i **nieprawidłowe** na diagramie, które zwrócę, gdy **hasło użytkownika będzie pasowało** i **niedopasowanie**. Teraz moje wielkie pytanie brzmi, który z nich muszę najpierw narysować, albo **prawidłowe szczegóły**, czy **niepoprawne szczegóły** , skąd mam wiedzieć, który z nich będzie pierwszy.


title: Jakie jest ograniczenie APSL w porównaniu do BSD lub MIT?

text: Słyszałem, że niektórzy narzekają, że APSL 2.0 ( http://www.opensource.apple.com/license/apsl/ ) ma zbyt wiele ograniczeń. Jakie jest to ograniczenie w porównaniu z BSD lub MIT?


title: Czy warto uczyć się javascript, jeśli nie planujesz zostać web developerem?

text: Słyszałem, że JavaScript to pełny język, taki jak c++. Czy to prawda? Co jeszcze nadaje się do programowania poza rzeczami internetowymi?


title: Dlaczego DependencyProperties, a nie obsługa języka ojczystego?

text: Wraz z pojawieniem się WPF i MVVM firma Microsoft wprowadziła interfejs „DependencyProperties” i „INotifyPropertyChange”, aby zapewnić sposób na zaimplementowanie „reaktywnego” podejścia używanego z tymi technologiami. Niestety obie te konstrukcje są bardzo gadatliwe, wymagają dużo schematu, są niezgrabne w użyciu, a także nie są tak naprawdę bezpieczne, ponieważ wymagają użycia "magicznych ciągów". Pojawia się więc pytanie: dlaczego nie umieścili tych funkcjonalności bezpośrednio w języku - dlaczego nie stworzyli nowego rodzaju właściwości tworzonych za pomocą prostego słowa kluczowego, dostarczającego użytecznych rzeczy `DependencyProperties` (jak zdarzenia przy zmianie i tak dalej ...). Co ich powstrzymywało?


title: Czy istnieje nazwa szkoły myślenia stojącej za pisaniem testów?

text: Zasadniczo jest to gałąź inżynierii oprogramowania, ale samo SE jest zbyt dużym parasolem. Byłem ciekaw, czy istnieje tytuł bazy wiedzy obejmującej TDD, BDD, mocki/stubs/spys, testy jednostkowe vs. testy integracyjne, pokrycie kodu itp.


title: Co ryzykuję, jeśli nie będę aktualizować mojego zestawu SDK/JDK i dołączonego środowiska wykonawczego/JRE za każdym razem, gdy pojawia się aktualizacja zabezpieczeń?

text: Wygląda na to, że co drugi tydzień w Javie pojawia się nowa poważna luka w zabezpieczeniach i zakładam, że to samo dotyczy innych platform programistycznych. Po latach frustracji próbujących nakłonić klientów do zainstalowania i skonfigurowania zgodnego środowiska JRE w ich systemach, zaczęliśmy dołączać je do naszego oprogramowania. (Pakietowanie oznacza, że wyodrębniamy kopię JRE w naszym katalogu instalacyjnym — nie instalujemy JRE i nie konfigurujemy go jako domyślnego systemu). -date, ponieważ najpierw musimy wszystko ponownie przetestować, aby upewnić się, że aktualizacja niczego nie zepsuła (w przeszłości zepsuła niektóre z naszych zewnętrznych zależności). Na ile poważnie, jeśli w ogóle, narażamy naszych klientów na ryzyko, jeśli nie aktualizujemy naszego pakietu SDK/JDK i środowiska wykonawczego/JRE, które dołączamy do naszego produktu za każdym razem, gdy pojawia się aktualizacja zabezpieczeń? Czy rozsądne jest aktualizowanie harmonogramu okresowego - powiedzmy raz na 6 miesięcy?


title: Rysowanie interakcji wątku

text: Chciałbym narysować interakcję wątków (pióro i ołówki) w notacji UML(podobnej). Nie nalegam na UML, wszystko, co jest oczywiste dla czytelnika, powinno zrobić. Zacząłem od diagramów sekwencji, ale nie wydaje mi się, żeby to był najlepszy sposób. Przez cały czas pojawiali się „inicjatorzy akcji” spoza ekranu, co w pewnym sensie łamie ideę SSD. Odziedziczyłem średniej wielkości bazę kodu z około 9-10 wątkami, z których każdy jest właścicielem maszyny stanowej i próbuję dowiedzieć się, jak to działa. Jak wizualizować interakcję z wątkiem?


Piszę esej i chciałbym mieć pewne dowody empiryczne, być może dane podłużne, w których porównuje się popularność tych technologii na przestrzeni kilku lat. Czy są jakieś statystyki pokazujące popularność Git w porównaniu z SVN?


title: Dlaczego języki współbieżne mają bardziej skomplikowaną składnię?

text: To jest pytanie, które od jakiegoś czasu zaprzątało mi głowę. Ostatnio sprawdzam języki współbieżne, takie jak Haskell, Go czy Erlang. Z mojego punktu widzenia mają one ogromne korzyści pod względem wydajności w porównaniu z językami takimi jak C++ czy Python ze względu na sposób, w jaki obsługują funkcje równolegle. Moje pytanie brzmi: dlaczego składnia języków takich jak C ++ lub Python tak bardzo różni się (i IMO prostsza) od tych w językach współbieżnych, mimo że większość języków współbieżnych jest wykonywana w czasie wykonywania (i dlatego mają większe możliwości uproszczenia składni)? Oto przykład, rozważmy `sqrt` w Go: // Pakiet newmath to trywialny przykładowy pakiet. pakiet newmath // Sqrt zwraca przybliżenie pierwiastka kwadratowego z x. func Sqrt(x float64) float64 { z := 1.0 for i := 0; < 1000; i++ { z -= (z*z - x) / (2 * z) } return z } Teraz dla odpowiednika w Pythonie (przeportowałem to sam na podstawie przykładu `Sqrt` z Go): def Sqrt(x): z = 1.0 for i in Range(0, 1000): z -= (z*z-x/2*z) return z Teraz, jak widzisz, go ma składnię taką jak „:=” dla przypisania, Jeśli weźmiesz bardziej skomplikowane przykłady, składnia będzie wyglądać bardziej jak to, co próbuję wskazać. A Go jest po prostu najmniej „dziwnie wyglądającym” językiem. Jeśli weźmiesz pod uwagę Erlanga, wygląda jeszcze dziwniej: %% qsort:qsort(List) %% Sortuj listę elementów -module(qsort). % To jest plik 'qsort.erl' -export([qsort/1]). % Funkcja 'qsort' z 1 parametrem jest eksportowana (bez typu, bez nazwy) qsort([]) -> []; % Jeśli lista [] jest pusta, zwróć pustą listę (nic do sortowania) qsort([Pivot|Rest]) -> % Utwórz rekurencyjnie listę z 'Front' dla wszystkich elementów, które powinny być przed 'Pivot' % następnie ' Pivot' a następnie 'Back' dla wszystkich elementów, które powinny być po 'Pivot' qsort([Przód || Przód <- Reszta, Przód <Obrót]) ++ [Pivot] ++ qsort([Tył || Tył <- Reszta, Powrót >= Obrót]). Części, które przykuły moją uwagę to „++ [] ++”, „<-” i „->” Jestem przekonany, że te języki wyglądają tak nie bez powodu, ale nie mogę się powstrzymać od myślenia: Czy to niemożliwe prostsze? Dlaczego języki współbieżne są takie? Dlaczego, jeśli używają środowiska wykonawczego takiego jak Python i JavaScript, czy nadal są bezpieczne dla typów? Wiem, że języki z bezpiecznym typem mają tę zaletę, że nie mieszają typów zmiennych, ale mimo to musi być ktoś, kto stworzył język współbieżny, który nie miał bezpieczeństwa typów, jeśli to możliwe, prawda? Wygląda na to, że prawie wszystkie współbieżne języki mają jedną wspólną cechę: większą listę możliwej / poprawnej składni. Mam nadzieję, że wystarczająco dobrze wyjaśniłem moje pytanie.


title: Jak zarządzać wieloma słuchaczami akcji dla wielu przycisków

text: Mam tę grę w kółko i krzyżyk i pomyślałem o tym naprawdę fajnym sposobie na narysowanie siatki 9 małych pudełek. Myślałem o umieszczeniu guzików w każdym z tych pudełek. Jak nadać każdemu przyciskowi (łącznie 9 przycisków) „ActionListener”, który rysuje **X** lub **O**? Czy każdy z nich powinien mieć swój własny, czy też powinienem zrobić jakiś kod, który wykrywa zwroty w `this`? Czy mógłbym nawet zrobić `JButton Array` i zrobić kilka pętli `for`, aby umieścić 9 przycisków. Tyle możliwości, ale która z nich jest **właściwa**? Dotychczasowy kod: import javax.swing.*; import java.awt.event.*; import java.awt.*; public class Board extends JPanel implementuje ActionListener{ public Board(){ Timer timer = new Timer(25,to); timer.start(); } @Override protected void paintComponent(Graphics g){ for(int y = 0; y < 3; y++){ for(int x = 0; x < 3; x++){ g.drawRect(x*64, y*64 , 64, 64); } } } public void actionPerformed(ActionEvent e){ repaint(); } }


title: Zaleta oznaczania wydania w SVN w porównaniu z pozostawieniem tylko komentarza do zatwierdzenia

text: W mojej firmie mamy politykę tagowania każdego wydania. Dołączył ktoś nowy i zasugerował, że zamiast formalnie używać tagu, możemy po prostu zostawić komentarz do kompilacji wydania, gdy zostanie ona zaewidencjonowana. Lubię używać tagu, ale oczywiście możemy również dostać się do kodu źródłowego budować również szukając komentarza. Jedyną zaletą, jaką widzę, jest to, że ponieważ nasz produkt obejmuje wiele technologii, możemy pogrupować kod źródłowy obu w tym samym katalogu z folderem dla każdego. **Czy jest jakaś inna zaleta tagowania wydań, których mi brakuje?** BTW, używamy SVN.


title: Jak projekt architektoniczny jest wykonywany w zwinnym środowisku?

text: Przeczytałem Zasady dla architekta zwinnego, gdzie zdefiniowali kolejne zasady: > Zasada nr 1 Zespoły kodujące system projektują system. > Zasada nr 2 Zbuduj najprostszą architekturę, która może działać. > Zasada nr 3 W razie wątpliwości zakoduj to. > Zasada nr 4 Oni to budują, testują. > Zasada nr 5 Im większy system, tym dłuższa droga startowa. > Zasada nr 6 Architektura systemu to współpraca ról. > Zasada 7 Nie ma monopolu na innowacje. Artykuł mówi, że większość projektu architektury jest wykonywana w fazie kodowania, a przed nią tylko projektowanie systemu. W porządku. Jak więc projektuje się system? Używasz UML? Albo dokument, który definiuje interfejsy i główne bloki? Może coś innego?


title: Jak sprzedać swoje biblioteki?

text: Jeśli ktoś stworzył coś takiego jak biblioteka DevExpress lub Infragistics, Telerik, RavenDb itp., jaki jest najłatwiejszy sposób na rozpoczęcie sprzedaży? Jakie są wymagane kroki? Czy są jakieś zasady dotyczące licencji i innych rzeczy?


title: Czy biblioteki powinny używać zdarzeń, czy akcji zestawu?

text: Buduję małą bibliotekę wielokrotnego użytku dla dwóch systemów, którymi zarządza nasza firma. Coś, na czym mnie złapano, to to, czy powinienem ujawnić zestaw właściwości typu `Action<T>` dla zdarzeń takich jak Completed, Aborted, ExceptionOccured, czy też powinienem użyć `Event<T>` T : Metodologia EventArgs. W praktyce inna biblioteka wewnętrzna będzie wykorzystywać te informacje i obsługiwać wyświetlanie informacji użytkownikowi. Klasy biblioteki zostaną utworzone w ramach jednego wątku i nie będą używane przez nic poza jego właścicielem. Wydaje mi się to bardziej w stylu, że jeśli muszę tylko, aby powiadomienia były zużywane tylko przez jeden obiekt, to nie ma to znaczenia, jednak dla kompletności i ze względu na to, że ja jako autor biblioteki mam niewielką kontrolę nad tym, jak zaimplementuje to inny programista, powinienem użyć metody Event ze względu na jej szerszą zdolność do obsługi zdarzeń. EDYCJA (przykładowy kod): @Robert Harvey, przeczytałem ten post, szukając uzasadnienia wyboru jednego z drugim. Rozumiem odpowiedź w kontekście tego pytania, ale nie jestem pewien, jak odnosi się ona do użycia słowa kluczowego zdarzenia lub prostego przypisania właściwości. @Fabio Marcolini, rozumiem, że używam słowa wydarzenie, aby opisać to, co się dzieje. Próbuję odpowiedzieć, że jeśli preferowane jest korzystanie ze struktury zdarzeń, po prostu wykonywanie właściwości delegata. Oto właściwości, których używam do definiowania akcji zdarzeń: public Action<WorkflowInstallerCompletedEventArgs> InstallCompleted; public Action<System.Activities.Activity, WorkflowInstallerActivityCompletedEventArgs> ActivityCompleted; public Action<System.Activities.Activity, WorkflowApplicationAbortedEventArgs> InstallAborted; public Func<System.Activities.Activity, WorkflowApplicationUnhandledExceptionEventArgs, UnhandledExceptionAction> UnhandledExceptionDuringInstall; Pomysł polegałby na wywołaniu jednego z nich w ten sposób: if (this.InstallCompleted != null) this.InstallCompleted(new WorkflowInstallerCompletedEventArgs(logs)); Do czasu komentarza @svick powiedziałbym, że możesz mieć tylko jedną akcję (lub funkcję) przypisaną do każdej właściwości. Przykładowa implementacja: Instalator WorkflowInstaller = new WorkflowInstaller(activity, new TestVariablesCollection()) { ActivitiesRunSequentially = true }; installer.AddInstallActivity(aktywność2); installer.InstallCompleted = (e) => { Log[] logi = e.Logs.ToArray(); test ciągu = SerializationHelper<Log>.Serialize(logs.FirstOrDefault()); spróbuj { logOutputFromRun = SerializationHelper<Log[]>.Serialize(logs); } catch (wyjątek ex) { } syncEvent.Set(); }; installer.InstallAborted = (a, e) => { Assert.Fail("Nieoczekiwane przerwanie instalacji."); syncEvent.Set(); }; installer.UnhandledExceptionDuringInstall = (a, e) => { Assert.Fail("Nieoczekiwany wyjątek podczas instalacji."); syncEvent.Set(); return System.Activities.UnhandledExceptionAction.Terminate; }; installer.StartInstalacja(); syncEvent.WaitOne(); Odpowiedź na moje pytanie może nie być ostateczna w ten czy inny sposób, ale raczej w oparciu o najlepsze praktyki lub ogólnie przyjęte podejście. Naprawdę staram się poszerzać swoje horyzonty, jeśli chodzi o tworzenie kodu, który jest akceptowalny dla szerszego grona odbiorców.


title: Słowa kluczowe bez rozróżniania wielkości liter w języku

text: Próbujemy napisać niestandardowy język skryptowy. Pojawiła się sugestia, aby język był wyrozumiały, podając słowa kluczowe **niewrażliwe na wielkość liter**. Osobiście nie podoba mi się ten pomysł, ale w moim zespole niewiele osób skłania się ku temu, twierdząc, że uszczęśliwi użytkownika końcowego! Podano przykłady języków, takich jak FORTRAN, BASIC, SQL, mówiąc, że nie uwzględniają one wielkości liter. Czy to dobry pomysł?


title: Jak poprawnie Google dla C

text: Problem z próbą użycia Google do znalezienia samouczków lub odpowiedzi na język programowania C polega na tym, że C nie jest wystarczająco wyrazistą nazwą, aby zawęzić wyszukiwanie. Nawet w połączeniu ze słowami kluczowymi, takimi jak „Programowanie” i/lub „Język”, daje wyniki głównie dla C++, C# i Objective-C. Czy istnieje sposób na efektywniejsze wyszukiwanie konkretnych zasobów C za pomocą Google?


title: Metody jako czasowniki: czy przedmiot jest podmiotem?

text: Czy istnieje jakaś zalecana praktyka dotycząca metod jako czasowników w OOP? Czy obiekt powinien działać składniowo jako podmiot, czy jako obiekt/uzupełnienie? Czy `object.doSomething()` należy normalnie rozumieć jako „obiekt sam coś robi” (temat) czy „wywołujący coś robi z obiektem”? Podejrzewam, że pierwsza alternatywa jest bardziej słuszna i brzmi bardziej naturalnie z takim ogólnym czasownikiem... Ale rozważmy na przykład "OutputStream.write(byte[])", który... > zapisuje b.length bajtów z określona tablica bajtów do tego strumienia wyjściowego. Tutaj to nie przedmiot jest podmiotem akcji, lecz wołający. Zapisujący (raczej myląco) tak naprawdę nie "pisze", jego rozmówcą jest ten, który "zapisuje" bajty _do zapisującego_. Czy należy to uznać za nieprawidłowe?


title: Jakie umiejętności dodać starszemu absolwentowi CS mieszkającemu na wsi?

text: Odpowiedzi na to pytanie mogą być inne niż ogólne „Ukończyłem szkołę. Co teraz mam zrobić?” Życie na obszarze o małej liczbie ludności stwarza ograniczone możliwości w porównaniu z mieszkańcami bardziej miejskich lub podmiejskich społeczności. Z drugiej strony... może odpowiedzi będą w dużej mierze takie same. Proszę o waszą mądrość ludzi, którzy mogą patrzeć na to z perspektywy wielu lat w środku. Właśnie skończyłem studia CS. Mam około 40 lat (czy to ma jakieś znaczenie?). Porzuciłem udaną karierę zawodową w branży robotyki laboratoryjnej, ponieważ wymagało to albo przeniesienia się do dużego miasta, albo dalszego intensywnego podróżowania. Za kilka lat moglibyśmy potencjalnie przenieść się gdzie indziej lub mógłbym znów zacząć podróżować, ale muszę zacząć pracę już teraz. Muszę być jak najbardziej zdolny do zatrudnienia. W mojej okolicy jest niewiele ofert pracy dla specjalistów komputerowych. Spośród tych nielicznych, większość wydaje się być bardziej związana z IT niż z rozwojem oprogramowania – SharePoint, ERP, bezpieczeństwo sieci, usługi sieciowe itp. Czy może dobrze mi przysłuży się próba zdobycia wiedzy informatycznej? A może powinienem kontynuować pracę nad moimi kotletami programistycznymi? Mam teraz swój własny projekt, z którego jestem dumny i podekscytowany iz radością mógłbym go dalej rozwijać. Jest to dobre narzędzie do nauki nowych rzeczy, dopóki (i miejmy nadzieję po) znajdę pracę. Mam nadzieję, że zaangażuję w to także innych. Albo mógłbym rozpocząć nowy projekt, który byłby narzędziem do uczenia się czegoś, co można by sprzedać – od .net do możliwości obsługi całego tego starego języka COBOL, który wydaje się, że jest tam wiele rzeczy. Dzięki za wszelkie spostrzeżenia, które ktokolwiek podzieli.


title: Wracając do formularzy internetowych ASP.Net z ASP.Net MVC. Polecić wzory/architektury?

text: Dla wielu z was będzie to brzmieć jak śmieszne pytanie, ale pytam, ponieważ **Nie mam doświadczenia z ASP.Net Webforms** \- Poszedłem prosto do ASP.Net MVC. Obecnie pracuję nad projektem, w którym ograniczamy się do .Net 2.0 i Visual Studio 2005. Podobało mi się czyste rozdzielenie problemów podczas pracy z ASP.Net MVC i szukam czegoś, co sprawi, że formularze internetowe będą mniej nie do zniesienia. Czy istnieją jakieś zalecane wzorce lub praktyki dla osób, które preferują asp.net MVC, ale tkwią w .net 2.0 i Visual Studio 2005?


title: Czy spóźnienie ma jakieś znaczenie w metodykach Agile?

text: Wynikało to z niektórych odpowiedzi i komentarzy dotyczących innego pytania (tego). Pracowałem głównie z projektami kaskadowymi i chociaż pracowałem nad projektami ad-hoc, które przyjęły zachowania zwinne i przeczytałem sporo o zwinności, powiedziałbym, że nigdy nie pracowałem nad „właściwym” projektem zwinnym . Moje pytanie brzmi, czy pojęcie „spóźnienia” ma jakiekolwiek znaczenie w agile, jeśli tak, to co? Moje rozumowanie jest takie, że w przypadku Agile nie masz planu z góry i na początku nie masz szczegółowych wymagań. Możesz mieć na myśli cel wysokiego poziomu i dołączoną do niego fikcyjną datę, ale oba mogą się zmienić (potencjalnie masowo) i żadne z nich nie jest pewne. Więc jeśli nie wiesz dokładnie, co zamierzasz dostarczyć w zasadzie, dopóki tego nie dostarczysz, a użytkownik to zaakceptuje, i jeśli nie masz harmonogramu poza następnym sprintem, jak możesz się spóźnić w jakikolwiek sposób, rzeczywiście ma znaczenie? (Oczywiście rozumiem, że sprint może przekroczyć, ale mówię o czymś więcej.) **Edytuj** : Żeby było jasne, jestem (osobiście) zadowolony z założenia, że na czas projekty wodospadowe (nawet stosunkowo duże) są możliwe dzięki temu, że je widziałem i brałem w nich udział - nie są łatwe ani powszechne, ale są możliwe. Tu nie chodzi o to, by pukać w zwinność, chodzi o to, żebym to zrozumiał. Zawsze uważałem, że korzyści płynące z agile nie mają nic wspólnego z terminami ani budżetami (a raczej tylko pośrednio), ale mają związek z zakresem – zwinne dostarcza bliższe temu, co jest naprawdę ważne, a nie tym, co zespół projektowy uważa za ważne przed ich powstaniem”. cokolwiek widziałem.


title: Algorytmy: Znajdź najlepszy stół do gry (problem stałego hazardzisty)

text: _**Wstęp_** To nie jest golf kodowy. Przyglądam się interesującemu problemowi i mam nadzieję, że uzyskam komentarze i sugestie od moich rówieśników. To pytanie nie dotyczy liczenia kart (wyłącznie), a raczej określenia najlepszego stołu do zaangażowania na podstawie obserwacji. Załóżmy, że będziesz mieć jakiś implant mózgowy, który sprawi, że złożoność czasowo-przestrzenna (w dowolnej architekturze) zostanie przeniesiona na ludzki umysł. Tak, to dość subiektywne. Załóż talię francuską bez użycia dzikich kart. _**Tło_** Niedawno odwiedziłem kasyno i widziałem więcej osób postronnych niż graczy przy stole i zastanawiałem się, jaki proces selekcji zmienił tych osób w graczy obstawiających, biorąc pod uwagę, że większość osób postronnych miała fundusze na grę (żetony w ręku). _**Scenariusz_** Wchodzisz do kasyna. Widzisz n stołów grających w wariant Blackjacka, a y z nich gra w Pontoon. Każdy stół gra z nieokreśloną liczbą talii kart, starając się zaciemnić przewagę kasyna. Każdy stół ma inny minimalny zakład. Masz przy sobie walutę Z. Chcesz znaleźć stół, w którym: * Używana jest najmniejsza liczba talii kart * Minimalny zakład jest wyższy niż przy stole z większą liczbą talii, ale chcesz zmaksymalizować liczbę gier, które możesz rozegrać za pomocą Z. * Straty netto, na gracza są najniższe (zdaję sobie sprawę, że w większości odpowiedzi jest to przypadkowy hałas, ale może to ilustrować zepsuty tasak) _**Problem_** Możesz magicznie obserwować każdy stół. Masz X rund do spróbowania, aby oprzeć swoją decyzję. W tym celu każdemu graczowi gra nie zajmuje więcej niż 30 sekund. Jakiego algorytmu użyjesz do rozwiązania tego problemu i jaka jest ich najgorsza złożoność? Czy: * Grasz w Pontoon lub Blackjacka? * Jaki stół wybierasz? * Ile rund musisz obserwować (jaka jest wartość X), biorąc pod uwagę, że kasyno może użyć nie więcej niż 8 talii kart w obu grach? Każdy stół ma od 2 do 6 graczy. * Jak długo stałeś, szukając stolika? Nazywam to „**problemem stałego hazardzisty**” z braku lepszego określenia. Zachęcamy do dopracowania go. _**Dodatkowy_** Gdzie to by było przydatne, jeśli nie w kasynie? _**Ostateczny_** Nie szukam magicznej kuli hazardowej. Właśnie zauważyłem problem, który stał się kością, której mój mózg po prostu nie przestaje żuć. Szczególnie interesują mnie aplikacje wykraczające poza wizytę w kasynie.


title: Osiągnięcie kompatybilności w przód z C++11

text: Pracuję nad dużym oprogramowaniem, które musi działać na kilku platformach. Niektóre z tych platform obsługują niektóre funkcje C++11 (np. MSVS 2010), a niektóre nie obsługują żadnej (np. GCC 4.3.x). Spodziewam się, że ta sytuacja utrzyma się przez kilka lat (moje najlepsze przypuszczenie: 3-5 lat). Biorąc to pod uwagę, chciałbym skonfigurować interfejs kompatybilności tak, aby (w jakimkolwiek możliwym stopniu) ludzie mogli pisać kod C++11, który nadal będzie kompilował się ze starszymi kompilatorami przy minimalnej konserwacji. Ogólnie rzecz biorąc, celem jest zminimalizowanie #ifdef na tyle, na ile to możliwe, przy jednoczesnym włączeniu podstawowej składni/funkcji C++11 na platformach, które je obsługują, i zapewnieniu emulacji na platformach, które tego nie robią. Zacznijmy od std::move(). Najbardziej oczywistym sposobem osiągnięcia kompatybilności byłoby umieszczenie czegoś takiego we wspólnym pliku nagłówkowym: #if !defined(HAS_STD_MOVE) namespace std { // C++11 emulation template <typename T> inline T& move(T& v) { powrót v; } template <typename T> inline const T& move(const T& v) { return v; } } #endif // !defined(HAS_STD_MOVE) Pozwala ludziom pisać takie rzeczy jak std::vector<Thing> x = std::move(y); ... bezkarnie. Robi to, co chcą w C++11 i robi najlepiej, jak może w C++03. Kiedy w końcu usuniemy ostatni kompilator C++03, ten kod może pozostać bez zmian. Jednakże, zgodnie ze standardem, wstrzykiwanie nowych symboli do przestrzeni nazw `std` jest nielegalne. Taka jest teoria. Moje pytanie brzmi: _praktycznie rzecz biorąc_, czy jest jakaś szkoda w robieniu tego jako sposobu na osiągnięcie zgodności w przód?


title: Czy istnieje lepszy sposób na modelowanie relacji wiele do wielu w tej samej tabeli za pomocą Entity Framework?

text: # Kontekst Budujemy aplikację internetową przy użyciu Entity Framework 5.0. Jednym z wymagań jest to, aby administratorzy mieli możliwość łączenia powiązanych produktów, dzięki czemu gdy ktoś przegląda produkt, możemy wyświetlić listę „ _Możesz również polubić te produkty:_ ”. Ponieważ produkt może być powiązany z wieloma produktami, potrzebujemy do tego relacji wiele-do-wielu. Tabela w bazie danych mogłaby wyglądać mniej więcej tak: _________________________ | Połączone produkty | |-------------------------| | Identyfikator produktu1 | Identyfikator produktu2 | |------------|------------| | 1 | 2 | |------------|------------| | 1 | 3 | |------------|------------| | 2 | 4 | |------------|------------| Dodatkowym wymogiem jest to, że łączenie powinno być dwukierunkowe. Oznacza to, że w przypadku przykładowych danych z powyższej tabeli po przejściu do produktu 2 powinien pojawić się produkt 1 i 4 na liście. Tak więc dla danego `ProductId` powinieneś być w stanie uzyskać powiązane produkty z kolumn `ProductId1` i `ProductId2`. # Co wymyśliłem Jednostka produktu: public class Product { public int ProductId { get; ustawić; } ciąg publiczny Nazwa { get; ustawić; } public virtual ICollection<Produkt> Referencje { get; ustawić; } public wirtualny ICollection<Produkt> ReferencedBy { get; ustawić; } public Product() { Referencje = nowa Lista<Produkt>(); ReferencedBy = nowa lista<Produkt>(); } } Mapowanie produktu: public class ProductMapping : EntityTypeConfiguration<Product> { public ProductMapping() { HasKey(t => t.ProductId); Property(t => t.Name).IsRequired().HasMaxLength(150); ToTable("Produkty"); Property(t => t.ProductId).HasColumnName("IdentyfikatorProduktu"); Property(t => t.Name).HasColumnName("Nazwa"); HasMany(x => x.References).WithMany(x => x.ReferencedBy).Map(map => { map.ToTable("LinkedProducts"); map.MapLeftKey("ProductId1"); map.MapRightKey("ProductId2" "); }); } } To wszystko działa. Aby wyświetlić listę powiązanych produktów dla określonego produktu, mogę po prostu uzyskać połączenie `References` i `ReferencedBy`: var product = db.Find(2); var linkedProducts = product.References.Union(product.ReferencedBy); # Problem Jak powiedziałem, to działa, ale nie podoba mi się to i zastanawiałem się, czy istnieje lepszy sposób radzenia sobie z taką sytuacją podczas pracy z Entity Framework. # Rozwiązanie Podobała mi się sugestia Ryathala, aby dodać dwa rekordy do bazy danych podczas łączenia produktów. Tak więc, łącząc produkt 1 z produktem 2, wstawiam teraz dwa rekordy: `{ 1, 2 }` i `{ 2, 1 }`. Dzięki temu mogę również usunąć kolekcję `ReferencedBy` z klasy `Product`, dzięki czemu pozostanie tylko jedna kolekcja: `References`. Aby połączyć z produktami: product1.References.Add(product2); produkt2.Referencje.Dodaj(produkt1); Aby usunąć powiązanie między produktami: product1.References.Remove(product2); produkt2.Referencje.Usuń(produkt1); Oto moja nowa klasa `Product` z mapowaniem: public class Product { public int ProductId { get; ustawić; } ciąg publiczny Nazwa { get; ustawić; } public virtual ICollection<Produkt> Referencje { get; ustawić; } public Product() { Referencje = nowa Lista<Produkt>(); } } Mapowanie produktu: public class ProductMapping : EntityTypeConfiguration<Product> { public ProductMapping() { HasKey(t => t.ProductId); Property(t => t.Name).IsRequired().HasMaxLength(150); ToTable("Produkty"); Property(t => t.ProductId).HasColumnName("IdentyfikatorProduktu"); Property(t => t.Name).HasColumnName("Nazwa"); HasMany(x => x.References).WithMany().Map(map => { map.ToTable("LinkedProducts"); map.MapLeftKey("ProductId1"); map.MapRightKey("ProductId2"); }); } }


title: Dlaczego Java 8 nie zawiera niezmiennych kolekcji?

text: Zespół Java wykonał mnóstwo pracy, usuwając bariery dla programowania funkcjonalnego w Javie 8. W szczególności zmiany w kolekcjach java.util świetnie sprawdzają się w łączeniu przekształceń w bardzo szybkie operacje strumieniowe. Biorąc pod uwagę, jak dobrą robotę wykonali dodając pierwszorzędne funkcje i metody funkcjonalne do kolekcji, dlaczego kompletnie nie zapewnili niezmiennych kolekcji, a nawet niezmiennych interfejsów kolekcji? Bez zmiany istniejącego kodu zespół Java mógłby w dowolnym momencie dodać niezmienne interfejsy, które są takie same, jak te mutowalne, z pominięciem metod „set” i sprawić, by istniejące interfejsy rozciągały się od nich, w następujący sposób: Iterable (already immutable) | ImmutableCollection _______/ / \ \___________ / / \ \ Collection ImmutableList ImmutableSet ImmutableMap ... \ \ \_________|______________|__________ | \ \___________|____________ | \ | \___________ | \ | \ | List Set Map ... Jasne, operacje takie jak List.add() i Map.put() obecnie zwracają wartość logiczną lub poprzednią wartość dla danego klucza, aby wskazać, czy operacja się powiodła, czy nie. Niezmienne kolekcje musiałyby traktować takie metody jak fabryki i zwracać nową kolekcję zawierającą dodany element - niezgodny z dotychczasową sygnaturą. Ale można to obejść, używając innej nazwy metody, takiej jak ImmutableList.append() lub .addAt() i ImmutableMap.putEntry(). Wynikająca z tego szczegółowość byłaby więcej niż przeważona przez korzyści płynące z pracy z niezmiennymi kolekcjami, a system typów zapobiegłby błędom wywołania niewłaściwej metody. Z biegiem czasu stare metody mogą zostać przestarzałe. Wygrane niezmiennych kolekcji: * Prostota — wnioskowanie o kodzie jest prostsze, gdy podstawowe dane się nie zmieniają * Dokumentacja — jeśli metoda przyjmuje niezmienny interfejs kolekcji, wiesz, że nie będzie modyfikować tej kolekcji * Współbieżność — niezmienne kolekcje mogą być bezpieczne udostępnianie w różnych wątkach Jako komuś, kto zasmakował w językach, które zakładają niezmienność, bardzo trudno jest wrócić na Dziki Zachód szalejących mutacji. Kolekcje Clojure (abstrakcja sekwencji) mają już wszystko, co zapewniają kolekcje Java 8, plus niezmienność (choć może zużywają dodatkową pamięć i czas ze względu na zsynchronizowane połączone listy zamiast strumieni). Scala ma zarówno mutowalne, jak i niezmienne kolekcje z pełnym zestawem operacji i chociaż te operacje są chętne, wywołanie .iterator daje leniwy widok (i są inne sposoby leniwego ich oceniania). Nie rozumiem, jak Java może nadal konkurować bez niezmiennych kolekcji. Czy ktoś może wskazać mi historię lub dyskusję na ten temat? Z pewnością jest gdzieś publicznie.


title: Kolejność pakietów UDP z bezpośrednim połączeniem

text: Jeśli mam dwa systemy (A i B) działające w sieci LAN (INTRANET), które są bezpośrednio połączone. W środku nie ma routerów. W takim przypadku, jeśli system A wysyła kilka pakietów UDP co kilka milisekund do systemu B: Czy jest możliwe, że system B odbiera pakiety w innej kolejności? Proszę zauważyć, że nie pytam czy używać TCP czy UDP. Interesuje mnie, czy w powyższym scenariuszu pakiety będą niesprawne - mam świadomość, że pakiety UDP nie mają gwarancji, że dotrą w odpowiedniej kolejności.


Ostatnio zacząłem studiować różne ciekawe koncepcje, które istnieją w językach innych niż Java. Ponieważ jedynym językiem, w jakim kiedykolwiek programowałem, jest Java, wiele z tych koncepcji jest dla mnie bardzo nowych. Więc to pytanie może być bardzo naiwne :) . Niedawno dowiedziałem się o funkcjach pierwszej klasy i wskaźnikach do funkcji. Dlaczego w Javie nie ma wskaźników do funkcji? A przynajmniej ich odmiana, jak delegaci w C#? Może to tylko ekscytacja związana z poznawaniem tego pojęcia, ale wydaje mi się, że może to być potężna cecha języka.


title: Jak przechowywać status dla tabeli rezerwacji?

text: Mam stolik rezerwacyjny (użytkownik wypełnia formularz, aby poprosić o rezerwację). Składa się z dwóch części, które wymagają potwierdzenia. isReservationAccepted (odrzuć, zaakceptuj, czeka) i hasReservationBeenSent (wysłano, odrzucono, czekam) Nie wiem, jak ustrukturyzować moją tabelę, zastanawiam się nad utworzeniem tabeli przeglądowej dla każdej kolumny, a może po prostu utworzeniem ich jako int i posiadaniem 1 = zaakceptowane/wysłane , 2 = odrzucone, 3 = czekanie. nie jestem pewien, czy istnieje lepszy sposób (prawdopodobnie)


title: Udostępnianie kodu w LGPL i oprogramowaniu własnościowym

text: Pracuję nad oprogramowaniem, które zostanie wydane jako biblioteka dll na licencji LGPL. Oprogramowanie łączy się ze sprzętem małej firmy, która dostarczyła mi potrzebne biblioteki i trochę kodu do ich poprawnego użytkowania (nie tylko nagłówki, ale wszystko w osobnym pliku). O ile mi wiadomo, ten sam kod jest używany w ich zastrzeżonym oprogramowaniu, którego nie zamierzają udostępniać, ale będą mogli opublikować fragment kodu, który mi dali. A teraz pytanie: jakiej licencji można użyć na kodzie, który dostałem od firmy? Przypuszczam, że używanie GPL lub LGPL naruszyłoby GPL, używając tego samego kodu w innym oprogramowaniu. Czy MIT to dobry pomysł? Czy mogę po prostu dołączyć plik z licencją MIT do mojego projektu LGPL:ed? Ponieważ nie jestem właścicielem praw autorskich, musiałbym poprosić firmę o zastosowanie licencji, ale to nie powinno być problemem. Dzięki /Martin


title: Nieskończona mapa bitowa

text: Chciałbym zbudować mapę bitową w czasie wykonywania. Bitmapa powinna być skalowalna ze wszystkich stron, a dostęp do pikseli powinien być cichy i wydajny. ![Some illustration](http://img546.imageshack.us/img546/4995/maptm.jpg) Pomiędzy i po poleceniach pokazanych na obrazku, Map.setPixel() i Map.getPixel() powinny ustawić/zwrócić dane zapisane w mapie bitowej. Nie oczekuję implementacji tylko koncepcji, jak alokować pamięć w taki sposób, aby setPixel()/getPixel był tak szybki, jak to możliwe.


title: Jak nagrywać/przechowywać edycje?

text: W wielu programach i aplikacjach internetowych (włącznie z wymianą stosów) program jest w stanie cofnąć zmiany wprowadzone w utworze. Mój problem jest podobny: chcę mieć możliwość przechowywania „oś czasu” edycji, na której użytkownik może wrócić i zobaczyć, co wpisał w określonym czasie/kiedy wpisał określone słowa. Jaki jest standardowy sposób na zrobienie tego? Ponadto w dokumentach Google i innych programach automatycznie „grupują” akcje (na przykład, jeśli usunę coś, cofając się 5 razy, wie, że usuwałem jedno słowo), jakieś pomysły, jak to zrobić?


title: Zmodyfikowany wzorzec projektowy strategii

text: Zacząłem ostatnio przyglądać się wzorcom projektowym i jedna rzecz, którą koduję, idealnie pasowałaby do wzorca strategii, z wyjątkiem jednej małej różnicy. Zasadniczo niektóre (ale nie wszystkie) moje algorytmy wymagają przekazania do nich dodatkowego parametru lub dwóch. Więc albo będę musiał * przekazać im dodatkowy parametr, kiedy wywołam ich metodę obliczania, albo * zapisać je jako zmienne wewnątrz klasy ConcreteAlgorithm i móc je zaktualizować przed wywołaniem algorytmu. Czy istnieje wzorzec projektowy dla tej potrzeby / Jak mogę to zaimplementować, trzymając się wzorca strategii? Rozważałem przekazanie obiektu klienta do wszystkich algorytmów i przechowywanie tam zmiennych, a następnie używanie tego tylko wtedy, gdy dany algorytm tego potrzebuje. Myślę jednak, że jest to zarówno nieporęczne, jak i obala punkt wzorca strategii. Żeby było jasne, implementuję w Javie, więc nie mam luksusu opcjonalnych parametrów (co by to ładnie rozwiązało).