title: Metody udostępniania pamięci lub stanu w maszynach JVM?

text: To jest długie pytanie, które znam. Mam kilka opcji na to, czego chcę. Nie chcę wiedzieć, że „to jest oczywiście najlepsze”, ale może jakieś plusy lub minusy, których mogę pominąć, jeśli chodzi o opcje, a także wszelkie opcje, o których nie wiem. Mamy aplikację Java oddzielnie uruchamianą jako wiele demonów, z których każdy jest osobną JVM. Obecnie SQL jest używany do przechowywania danych i efektywnie naszej „pamięci współdzielonej”, ale na szczęście niewiele jest dynamicznych w pamięci. Wkrótce będziemy dynamicznie tworzyć i niszczyć połączenia, a to oznaczać będzie, że dynamiczne zmiany zachodzą półszybko i potrzebujemy czegoś lepszego niż baza danych SQL. _Myślimy_, że wszystkie dynamiczne rzeczy będą miały miejsce tylko w jednym daemonie, ale nie jesteśmy pewni. Będziemy potrzebować szybszej metody zapisywania i ładowania tych danych stanu, ponieważ za każdym razem przechodzenie na dysk jest po prostu zbyt wolne. Obecna baza danych i tak wymaga remontu pod kątem tej zmiany, więc jesteśmy również otwarci na jej modyfikację lub wyrzucenie. Możemy ponownie nauczyć się całego stanu, który zachowujemy w pamięci; ale to powolny proces. Utrzymywanie części lub wszystkich danych w bazie danych między uruchomieniami, aby zaoszczędzić czas podczas uruchamiania, jest miłe, jeśli możemy być pewni, że zostanie prawidłowo utrwalone. Możliwość łatwego zapytania „bazy danych”, aby zobaczyć aktualny stan do debugowania, jest dużym plusem. Rozważane przeze mnie rozwiązania, a niektóre wady i zalety to: 1) jakieś rozwiązanie hibernacji połączone z bazą danych sql w pamięci. Nie używałem jeszcze hibernacji (naprawdę chcę!), ale myślę, że może to rozwiązać problem trwałości i uniknąć nieaktualnych obiektów między JVM dla nas, a sql nadal będzie zbliżone do szybkości innych opcji, jeśli w pamięci? Nie wiem, ile kosztuje to obciążenie ani jak skaluje się do wielu JVM i możliwych (pół?) szybkich zmian danych. Można przypuszczać, że jest to wolniejsze niż wszystkie inne opcje, ale myślisz, że jest wystarczająco szybkie dla naszych potrzeb? 2) Każda maszyna JVM przechowuje swój własny stan wewnętrzny bez współużytkowanego systemu. Użyj niezawodnej komunikacji wewnętrznej (prawdopodobnie JVM), aby zachować spójność stanu. Najważniejszy stan znajduje się w jednym daemonie, więc nie będzie tak dużo współdzielenia stanu dynamicznego, ale nadal trzeba rozwiązać niespójny stan i wyścigi danych, gdy to nastąpi. Nie jestem pewien, jak chcielibyśmy rejestrować stan trwały, aby umożliwić szybkie ponowne uruchomienie, nawet jeśli demon nieoczekiwanie umrze. Ponadto to rozwiązanie wymagałoby zaimplementowania kilku szybkich komunikatów, aby umożliwić pobranie opisu stanu pamięci w celu ułatwienia debugowania. Oferowałby najwyższą wydajność, gdybyśmy to zrobili dobrze, ale prawdopodobnie najbardziej czasochłonny do wdrożenia (przewiduję niejasne błędy spowodowane wyścigiem danych i niespójnymi danymi?). 3) Użyj systemu, aby zezwolić na część pamięci współdzielonej między maszynami JVM. Szybkie badania sugerują, że MappedByteBuffer i Ecache są możliwymi opcjami, może być ich więcej. Do tej pory tylko trochę się temu zajrzałem, więc nie znam jeszcze w pełni zalet i wad. Trochę boi się stworzyć pojedynczy punkt awarii, jeśli nasza pamięć jest wspólna. 4) Jakaś alternatywa, o której nie wiem lub możliwe połączenie dwóch z tych pomysłów.


title: Co sprawia, że algorytm mieszający jest „bezpieczny”?

text: Po przeczytaniu tego interesującego pytania czułem, że mam dobry pomysł, którego niezabezpieczonego algorytmu mieszającego użyłbym, gdybym go potrzebował, ale nie mam pojęcia, dlaczego mógłbym zamiast tego użyć bezpiecznego algorytmu. Czym więc jest rozróżnienie? Czy wynik nie jest po prostu liczbą losową reprezentującą zahaszowaną rzecz? Co sprawia, że niektóre algorytmy haszujące są bezpieczne?


title: Obracaj, skaluj i przekształcaj w grach wideo

text: JEŚLI wektor 3 punktów i macierz 3x3 mogą obracać, skalować i przekształcać rzeczy w wirtualnej przestrzeni 3D, czy możesz użyć macierzy 3x3x3 i wektora 3.3.3, aby zmienić poczucie czasu w grach?


title: Firma jednoosobowa, która chce się rozwijać, jest już zbudowana w PHP. Czy nadszedł czas, aby przejść na Ruby?

text: Jestem właścicielem strony internetowej i rozwijam się w Yii, więc w skrócie myślę, że pracuję z mniej więcej "najlepszym" PHP (np. PDO, OOP...itd.). Moja główna strona internetowa (która nie jest zbudowana w żadnym frameworku, tylko natywnym PHP) od 2,5 roku w końcu zarabia wystarczająco dużo pieniędzy, abym mógł zatrudnić mojego pierwszego pracownika, który chcę zostać programistą, aby przekonwertować ją na Yii. Założyłem również nową witrynę, która jest dopiero od czterech tygodni w fazie rozwoju zbudowana przy użyciu Yii, ale zamiast tworzyć cokolwiek w tym tygodniu, przechodzę przez RubyKoans, ponieważ wciąż zmagam się z myślą, że teraz nie ma lepszego czasu na przejście na korzystanie z Rubiego on Rails... Przechodzę przez Yii i wiele najwspanialszych rzeczy jest przeniesionych z Rails (np. zakresy). Wiele naprawdę świetnych stron internetowych jest zbudowanych na szynach (np. Twitter, GitHub, Hulu). Deweloperzy Rails są "drożsi", ale jeśli zatrudnisz jednego, czy nie masz gwarancji pewnego poziomu jakości, podczas gdy tak jak w przypadku PHP, jest wielu kiepskich programistów? Jeśli kiedykolwiek dokonam zmiany, czy nie lepiej zrobić to teraz, kiedy będzie to mniej bolesne? Jeśli chcę stworzyć firmę, która przyciąga utalentowanych programistów, dlaczego nie pracować w ruby, aby moja firma się wyróżniała? Jednocześnie PHP jest szybkie, niezawodne, a kiedy pracujesz z "najlepszymi" (np. Yii, Symfony2), myślę, że jest to całkiem fajny i łatwy w utrzymaniu język. Powstało w nim również wiele dużych witryn (Facebook, Digg, Craigslist, Hootsuite) oraz wszystkie strony pornograficzne, które wszyscy musimy przyznać, że radzą sobie z mnóstwem ruchu. Poza tym jest o wiele więcej deweloperów PHP, więc dopóki będę stosował dobre praktyki w rozmowach kwalifikacyjnych, czy nie będzie łatwiej znaleźć dobrych deweloperów PHP? A może łatwiej byłoby wiedzieć, że każdy twórca, który przyszedł na rozmowę kwalifikacyjną, już używał ruby? Poza tym duża część mnie chce po prostu zacząć i nie spędzać sześciu miesięcy na przedzieraniu się przez rubin, dopóki nie będę wystarczająco pewny, że chcę przenieść do niego moje istniejące projekty. jakieś pomysły?


title: Jaki byłby najlepszy sposób na przechowywanie ruchów w grze, aby umożliwić wycofanie?

text: Opracowuję grę planszową, która ma klasę gry, która kontroluje przepływ gry i graczy dołączonych do klasy gry. Plansza jest tylko klasą wizualną, ale kontrola ruchów zależy od gry. Gracz może próbować wykonywać fałszywe ruchy, które prowadzą do gry, mówiąc mu, że ten rodzaj ruchu jest niedozwolony (i podać powód tego). Ale w niektórych przypadkach gracz może po prostu wykonać ruch i zdać sobie sprawę, że nie jest to najlepszy ruch, lub po prostu nie kliknąć planszy lub po prostu spróbować innego podejścia. Grę można zapisywać i ładować, więc podejściem może być przechowywanie wszystkich danych przed ruchem i nie zezwalanie na cofanie, ale pozwalanie użytkownikowi na załadowanie ostatniej automatycznie zapisanej tury. Wygląda to na ładne podejście, ale wymaga interakcji z użytkownikiem, a przerysowywanie tablicy może być dla użytkownika nużące. Czy jest lepszy sposób na robienie tego typu rzeczy, czy architektura naprawdę ma w tym znaczenie? Klasa gry i klasa gracza nie są skomplikowane, więc klonowanie klas to dobry pomysł, albo oddzielenie danych gry od reguł gry lepszym podejściem, czy też zapisywanie/ładowanie (nawet automatyczne po wywołaniu cofnięcia) jest w porządku? AKTUALIZACJA: jak działa ta gra: Ma główną planszę, na której wykonujesz ruchy (proste ruchy) oraz planszę gracza, która reaguje na ruchy wykonywane na głównej planszy. Posiada również ruchy reakcji zgodnie z ruchami innych graczy i ruchami na siebie. Możesz także reagować, gdy nie jest twoja kolej, robiąc rzeczy na swojej planszy. Może nie mogę cofnąć każdego ruchu, ale podoba mi się pomysł cofania / ponawiania unoszący się w jednej z bieżących odpowiedzi.


title: Jaka jest najlepsza strategia wydania aplikacji na Androida?

text: Jestem bliski ukończenia pierwszego zestawu funkcji darmowej aplikacji, którą rozwijam na platformę Android i zaczynam się zastanawiać nad najlepszym momentem na wypuszczenie jej na rynek. Z jednej strony podoba mi się model „wysyłaj tak wcześnie, jak to możliwe”, chociaż biorąc pod uwagę, że użytkownicy mogą głosować na aplikacje, nie chcę wydawać zbyt szybko aplikacji w wersji beta i z ograniczonym zestawem funkcji, ponieważ nie będę uzyskać wysokie oceny. Mógłbym wyjaśnić, że jest to wersja beta, ale czy użytkownicy nietechniczni zrozumieją lub przejmą się tym? Nie sądzę. Z drugiej strony, jeśli wybiorę model kaskadowy i poczekam, aż aplikacja zostanie ukończona, będę miał bardziej konkurencyjną aplikację pod względem funkcji, ale wadą jest to, że w miarę jak aplikacja się rozrasta, więc liczba problemów użytkowników jest prawdopodobna doświadczyć. Wiem, że mogę przetestować moją aplikację, ale myślę, że to nie wystarczy, biorąc pod uwagę, że niektóre aplikacje zachowują się nieco inaczej na różnych urządzeniach. Pracuję w tej aplikacji w niepełnym wymiarze godzin, więc obawiam się, że nie będę miał czasu na naprawienie w krótkim czasie problemów, które w końcu się pojawią, a to ponownie doprowadzi do negatywnych ocen. Chcę wiedzieć od deweloperów, którzy już przeszli przez ten dylemat, czy najlepiej jest wydać niekompletny produkt w jakości beta wcześnie, czy poczekać, aż będzie gotowy, a następnie zająć się wszystkimi błędami na raz? Podaj odpowiedzi dotyczące platformy i rynku Android.


title: Powrót do programowania/matematyki po latach bezczynności; stawanie się lepszym profesjonalistą; ustalać cele

text: Mam nadzieję, że jestem w nieco podobnej sytuacji dla wielu moich rówieśników z Nowego Jorku. Będę tu brutalnie szczery. Ukończyłem studia CS (drobna matematyka) w jednej z 20 najlepszych szkół, przez 4 lata pracowałem w programowaniu/qa w sklepach z oprogramowaniem, a potem powoli przeniosłem się do finansów, przyjmując pracę na Wall St (około 2 lata). Chociaż nadal trochę programuję, głównie w C/C++ (nie żartuję). Większość pracy programistycznej kręci się wokół utrzymania systemu lub naprawiania drobnych błędów. I porównywalnie, robię coraz mniej rzeczywistego programowania. A poza biurem prawie nie mam motywacji, żeby to poprawić. Bary, hobby, siłownia, kobiety i co najważniejsze LAZINESS są głównymi winowajcami. Aby być uczciwym, czuję, że NIE nauczyłem się niczego nowego, zapominałem o starych i pozostawałem w tyle za wszystkimi fajnymi technologiami, a także NIE poprawiałem się ani nie budowałem na tym, co znałem. Nie biorę udziału w społeczności (na studiach pisałem na forach, subskrybowałem najważniejsze publikacje itp.). Moja matematyka też bardzo ucierpiała. Zauważyłem również, że moje pojęcie „programowania” zmieniło się z fajnego/haniebnego na niefajny/geekowy/szybki sposób, aby PRZESTAĆ uprawiać seks. To samo w sobie wystarczy, aby wyjaśnić, dlaczego nie ewoluowałem jako programista. Krótko mówiąc, czuję, że zamiast stawać się lepszym profesjonalistą, a tym samym doskonalić swoje umiejętności w odpowiednich dziedzinach, w zastraszającym tempie kieruję się na południe. Mam teraz 30 lat i NIE chcę jeszcze bardziej pogarszać swojej sytuacji. Jak na ironię, jestem bardzo dobrze opłacany i żyję z tego. Przyznaję, że to tylko fasada i pewnego dnia wszystko się zmiażdży, kiedy nastąpi _poprawka_. Wkrótce. W ten weekend zacząłem ponownie czytać serię Effective C++ (Scott Meyers), słuchając wykładów wideo z matematyki/cs na www.khanacademy.org/ i http://see.stanford.edu/see/lecturelist.aspx?coll= 11f4f422-5670-4b4c-889c-008262e09e4e Chcę wrócić na właściwe tory, ale nie mam konkretnego celu i planu, tylko pomysły, które powinienem (bardziej jak - MUSI), aby zebrać moje gówno do kupy. Z całego serca będę wdzięczny za wskazówki, sugestie, rekomendacje. Proszę doradzić, jakie są najlepsze praktyki. Potrzebuję planu. Bardzo dziękuję! Edycja: _Chłopaki (i dziewczyny) – bardzo dziękuję za wsparcie, cenne informacje zwrotne, zachętę do tej pory. Cieszę się, że ten post został potraktowany poważnie i nie został odrzucony jako kolejna próba trolla lub gromadzenie uwagi. Nie masz pojęcia – to wszystko opłaci się mi na milion sposobów._


title: Konwersja między typami danych i prezentacji

text: Jestem całkiem nowy w takich rzeczach jak DI, MVVM i WPF, więc jest całkiem możliwe, że brzmi to jak gigantyczny _WTF_... Zdefiniowałem interfejs w mojej warstwie biznesowej, `ISomeEntity`; następnie w mojej warstwie danych mam typ jednostki `public class SomeEntity: ISomeEntity`. Należy zauważyć, że warstwa biznesowa nie odwołuje się do warstwy danych. W warstwie prezentacji mogę wyświetlić listę tych elementów, biorąc pod uwagę, że ViewModel mojego okna ma właściwość `IEnumerable<ISomeEntity>` (czy też powinna to być `IEnumerable<SomeEntityViewModel>`?). Teraz chciałem móc oznaczyć element listy jako „do usunięcia”, a ponieważ w końcu będę miał całą masę takich „usuwalnych” typów, stworzyłem interfejs `IDeletable`. Typ `SomeEntity` w warstwie danych nie musi wiedzieć o `IDeletable`, więc zaimplementowałem interfejs w klasie `SomeEntityViewModel : ISomeEntity, IDeletable` w warstwie prezentacji (część mnie zaczyna myśleć, że powinien zamiast tego należy zdefiniować w warstwie biznesowej/domenowej). Problem, który mam, polega na tym, że mój model wypluwa `ISomeEntity`, co tak naprawdę jest `SomeEntity` z warstwy danych: potrzebuję sposobu na konwersję z `SomeEntity` na `SomeEntityViewModel` i biorąc pod uwagę, że `SomeEntityViewModel` jest zadeklarowana w warstwie prezentacji, moja jedyna opcja wydaje się, że moja klasa ViewModel ma taki konstruktor: public SomeEntityViewModel(ISomeEntity poco) { // ustaw właściwości z implementacji POCO } ...a następnie w klasie, która przechowuje logiki prezentacji, mogę połączyć te dwie implementacje, wykonując coś takiego: _viewModel.Items = _model.SelectThoseItems() // zwraca IEnumerable<SomeEntity> .Select(e => new SomeEntityViewModel(e)) .ToList(); ...i działa, ale jakoś nie pasuje... czy tak? Biorąc pod uwagę `ISomeEntity`, `SomeEntity`, `SomeEntityViewModel` i `IDeletable`, jaki byłby „powszechny” lub „normalny” sposób implementacji tego? A może mam to wszystko źle?


title: Wersja offline stron dynamicznych

text: Badając systemy archiwizacji, takie jak archive.org, okazało się, że głównym problemem takich systemów jest dynamiczna zawartość. Wstępna analiza pokazuje, że „dynamikę” treści można przypisać do jednego z następujących poziomów: 1. **Statyczna treść html** \- zwykła stara strona internetowa, która jest reprezentowana tylko przez znaczniki html z pomocniczymi zasobami odwołującymi się do css (zwykle obrazami) . 2. **Statyczny html obsługiwany przez javascirpt** – taki sam jak Level 1, ale zawiera kod javascript, który manipuluje tylko istniejącymi znacznikami (np. rozwiń/zwiń). 3. **Budowa strony „Onload”** – strona internetowa z kodem javascript, który w fazie ładowania strony wykonuje pewne dodatkowe żądania. Po załadowaniu zawartość strony jest w pełni skonstruowana. 4. **Dynamiczna zawartość po stronie klienta** – elementy interfejsu użytkownika są modyfikowane za pomocą kodu javascript na bieżąco, gdy użytkownik przechodzi przez interfejs. Zwykle są to nowoczesne SPA (aplikacje jednostronicowe, takie jak gmail.com), listy „nieskończone” (ogon listy jest ładowany, gdy użytkownik przewinie się w dół listy), ładowanie treści na żądanie (inteligentne ekspandery) i tak dalej. Zakładam więc, że poziomy 1 i 2 można zarchiwizować dość łatwo. Czy mógłbyś zasugerować, jak radzić sobie z poziomami 3 i 4? Wygląda na to, że powinno to obejmować renderowanie strony, ale niektóre szczegóły byłyby pomocne. _Aktualizacja_ : Aby wyjaśnić pytanie: najlepiej, aby wersja offline była w pełni funkcjonalna, przynajmniej na poziomie witryny (ignorując zawartość domen zewnętrznych). Ponadto, jeśli Level4 jest zbyt trudny, aby w pełni zautomatyzować - czy istnieje podejście angażujące człowieka, który daje wskazówki systemowi na temat treści?


title: Czy muszę dbać o „Bezpieczeństwo wątków” w aplikacjach internetowych Java?

text: Mam ogólne zrozumienie, co oznacza bezpieczeństwo wątków, ale nie wiem zbyt wiele o wątkach w kontekście aplikacji internetowej java. Jestem po prostu ciekaw, czy podczas pracy z aplikacjami internetowymi muszę się martwić o bezpieczeństwo wątków. Czy są szanse, że moja aplikacja internetowa będzie sprawiać problemy, jeśli piszę kody bez dbania o „bezpieczeństwo wątków”? Czy muszę się nad tym zastanawiać, czy używam kolekcji bezpiecznej dla wątków, czy nie?


title: Czy stworzyłem Wielką Kulę Błota?

text: Pracuję nad aplikacją WPF, starając się zachować ścisłe w oddzielaniu View, ViewModel i Model. Moja aplikacja ma kilka różnych widoków w stosunkowo płaskiej hierarchii. Istnieje jeden widok do edycji czegoś, co nazywamy substancją, i jeden do klasyfikacji, gdzie każda substancja ma kilka klasyfikacji. Moje pytanie dotyczy klas ViewModel dla substancji i klasyfikacji, każda ma około 1000 linii! Chodzi o to, że kod składa się głównie z właściwości get/set, z pewną nieodłączną logiką działającą przeciwko mojemu modelowi, a także z niektórymi poleceniami i funkcjami prywatnymi. Mogę więc łatwo podzielić klasę na kilka mniejszych klas (takich jak jedna na GroupBox w moim widoku lub cokolwiek) z jedną klasą będącą właścicielem instancji drugiej, aby uzyskać mniejsze klasy. Ale to nie wydaje mi się znaczące, wydaje się, że jest to rozwiązanie problemu, jak robienie tego dla niego samego. Wielkość klasy wyraźnie zależy od ilości pól związanych z substancjami i klasyfikacjami, a ja nic na to nie poradzę. Myślisz, że mam tu kłopoty? Czy to normalne, że aplikacje WPF są tak zdominowane pod względem rozmiaru przez ViewModels? Jak poważnie powinienem podchodzić do ograniczania rozmiarów klas? Mógłbym to znacznie zmniejszyć, zmieniając sposób pisania nawiasów klamrowych, ale myślę, że teraz wygląda to wyraźniej niż w przypadku nawiasów egipskich. Moje pytanie tak naprawdę nie dotyczy tego, czy mój kod jest niejasny, czy nie (część z nich jest), ale raczej, czy rzeczywiście można powiedzieć, że klasa ViewModel jest niejasna tylko dlatego, że jest duża. Aby dać pewną perspektywę, mój widok substancji ma 7 list/siatek danych/podobnych, 13 przycisków, 9 pól combobox, 5 pól wyboru, 9 pól tekstowych i 3 przyciski radiowe. W sumie daje to około 26 rzędów na kontrolę. W niektórych przypadkach zachodzi interakcja między różnymi kontrolkami, ustawienie wartości w jednej kontrolce spowoduje wyłączenie i unieważnienie innej itd. Niektóre próbki kodu: public RelayCommand AddSubstanceNumberCommand { get { return new RelayCommand( (x) => { var number = new SubstanceNumber(); number.SubstanceID = Id; number.ModifiedBy = Main.op.LoginName; number.ModifiedDate = DateTime.Now; number.CreatedDate = DateTime.Now; number.Type = Converters.NumberTypeToStringConverter.translation.First(t => t.Value == SelectedNewSubstanceNumberType).Key; number.NumberText = Validator.Normalize(NewSubstanceNumber, SelectedNewSubstanceNumberType); var temp = NewSubstanceNumber.Replace("-", ""); number.NumberValue = Int32.Parse(temp.Substring(0, temp.Length - 1)); if (NowaSubstancjaNumer != null && !SubstanceNumbers.Any(sn => sn.NumberText.Replace(" ", "") == number.NumberText && sn.Type == number.Type)) SubstanceNumbers.Add(number); NumerNowejSubstancji = ""; }, param => this.CanAddSubstanceNumber); } } public ObservableCollection<SubstanceGroup> SubstanceGroups { get { return Substance.SubstanceGroups; } set { Substance.SubstanceGroups = wartość; OnPropertyChanged("Grupy substancji"); } } public RelayCommand OpenAllClassificationsCommand { get { return new RelayCommand( (x) => { // Otwieranie kart dla wszystkich klasyfikacji, które nie mają jeszcze otwartej karty var currentSubstanceTab = Main.SelectedTab; var ClassificationTabsNow = currentSubstanceTab.Tabs.Where( t => t.GetType() == typeof(ClassificationViewModel)); var toOpen = Classifications.Where(c => !classificationTabsNow.Any(ctn => ctn.Id == c.SubstanceClassificationID)); toOpen.ToList() .ForEach(o => Main.SelectedTab.Tabs.Add(nowy ClassificationViewModel(Main, o.SubstanceID, o.SubstanceClassificationID, false, nowe Services.MessageBoxNotifyUserService()))); }); } } A oto jeden, który jest szczególnie niejasny i powtarzany: public OccupationalExposureLimitUnit OccupationalExposureLimitUnit5 { get { if (SubstHasOccExpLimits) return Substance.OccupationalExposureLimitUnit5; else if (GroupForLimits != null) return GroupForLimits.OccupationalExposureLimitUnit5; zwróć null; } set { bool hadValue = SubstHasOccExpLimits; if (value.Name_SV == "") OccupationalExposureLimitShortTerm2 = null; Substancja.OccupationalExposureLimitUnit5 = wartość; if (!hadValue && SubstHasOccExpLimits) TransferLimitValuesFromGroupToSubstance(); OnPropertyChanged("OccupationalExposureLimitUnit5"); } } Ta właściwość zawiera pewne funkcje awaryjne, gdy w substancji brakuje pewnego zestawu wartości, oraz pewne zmiany stanu w celu przejścia do stanu substancji ma wartości, gdy użytkownik rozpoczyna edycję jednej z wartości. Z pewnością jest tu miejsce na ulepszenia, ale nawet bez tego klasa byłaby kilka razy większa niż 200 wierszy, które niektórzy zalecają dla rozmiaru klasy.


title: Umiejętności wymagane od starszego programisty, który zna C# i WPF

text: Mam średni poziom wiedzy zarówno w C#, jak i WPF. Chcę przejść na wyższy poziom. Jakie umiejętności są potrzebne do tego oznacza dla Senior Developera?


title: Czy wskazane jest wyłączenie wymuszonych przez Microsoft standardów kodowania w VC# 2010?

text: Pochodząc z Eclipse wypracowałem własne standardy kodowania, do których się przyzwyczaiłem. W Visual C# 2010 wydaje się jednak, że niektóre standardy kodowania zalecane przez MS są wymuszane w domyślnej konfiguracji. Np.: Jestem przyzwyczajony do pisania instrukcji warunkowych w następujący sposób: if (jakiśwarunek) { return true; } else { return false; } Ale nawiasy klamrowe są wymuszane do nowego wiersza w wizualizacji c#. Czy zaleca się używanie tego standardu?


title: Która metodologia oprogramowania działa, gdy jesteś w fazie uczenia się technologii?

text: W moim scenariuszu mamy zespół doświadczonych programistów z ponad 3 latami, którzy nie są razem. Jesteśmy w fazie uczenia się w zakresie domeny i technologii. Chcę kilka zaleceń dotyczących tego, jaką metodologię oprogramowania powinniśmy dostosować. Myślałem o wdrożeniu wodospadu, ponieważ musimy projektować z góry i znamy wszystkie problemy projektowe i wyzwania techniczne. Używając metodyki Agile w zespołach, które nie znajdują się w jednej lokalizacji, nie jesteśmy pewni, jak szacować na podstawie tygodniowej, gdy nie mamy pełnego zrozumienia technologii.


title: Użytkownicy Vagranta: Jakie są jego wady?

text: Studiuję http://www.vagrantup.com/ od kilku dni i chcę otrzymać informację zwrotną od osób używających go w kontekście zawodowym lub do osobistych projektów. Myślę, że rozumiem, jakie pozytywne rzeczy może przynieść Vagrant, ale mam pytania dotyczące jego wad: * Jestem programistą php i pracuję w małej firmie. Zastanawiam się, czy Vagrant mógłby być przydatny dla mnie i dla nowoprzybyłych w mojej firmie, ponieważ wymusza całkowite środowisko programistyczne. To znaczy, ludzie często wolą pracować na swoim systemie operacyjnym (Linux/Mac/Windows). Jak sobie z tym radzisz, czy zmuszasz wszystkich do używania na przykład Linuksa? * Czy to nie dodaje złożoności, ponieważ całkowicie pracujesz na maszynie wirtualnej? * Czy nie obawiasz się, że Twój główny plik maszyny wirtualnej pewnego dnia ulegnie uszkodzeniu i nie będziesz mógł go ponownie użyć? Z tego powodu czuję się zdenerwowany używaniem VM. Dziękuję Ci.


title: Korporacyjny a osobisty e-mail dla sponsorowanego przez firmę OSS

text: W przypadku braku pisemnej polityki, jaka jest preferowana domena poczty e-mail (firmowa lub osobista) podczas wnoszenia wkładu do projektu open source sponsorowanego przez pracodawcę? \--Edytuj-- Interesuje mnie preferencja programisty, zakładając, że firma i tak nie dba o to.


title: Google Blink (nowy widelec WebKit): Znaczenie „Moving DOM to Javascript”?

text: Z bloga Blink: > Na koniec chcielibyśmy zbadać jeszcze większe pomysły, takie jak przeniesienie całego > Document Object Model (DOM) do JavaScript. Co to znaczy? Czy to oznacza, że DOM WebKit jest obecnie _nie_ kodowany w JavaScript, ale w jakimś innym języku? Czy to oznacza, że chcą ujawnić więcej publicznych dostępów do DOM? Albo co?


title: Najlepsza struktura kodowania JavaScript przy użyciu Object Literal?

text: Literał obiektowy bez wątpienia stał się w ostatnich latach jednym z podstawowych elementów najlepszych praktyk kodowania JavaScript. Jednak nie jestem pewien, jak najlepiej ustrukturyzować moje kody za pomocą Object Literal. Wcześniej sugerowano, że wzorzec modułu może być dobrą techniką strukturyzowania twoich kodów [1] [2], ale krytyka dotycząca wzorca modułu zaczęła się pojawiać, ponieważ ludzie spędzali więcej czasu na badaniu zakresu techniki. [3] [4] Więc moje pytanie brzmi: od lata 2011, jaki jest uznany najlepszy sposób na ustrukturyzowanie twojego kodu z wykorzystaniem dosłowności obiektowej? Czy nadal jest to wzorzec modułu, czy może pojawiła się już inna technika jako jeszcze lepszy zamiennik?


title: Czy powinienem używać wyszukiwania HTTP?

text: Pracuję nad internetowym interfejsem API i jestem ciekawa czasownika `HTTP SEARCH` i tego, jak go używać. Moje pierwsze podejście było takie, że na pewno można go użyć do wyszukiwania. Ale asp.net WebApi nie obsługuje czasownika „SEARCH”. Moje pytanie brzmi w zasadzie, czy powinienem użyć „SZUKAJ”, czy nie jest to ważne? PS: Znalazłem czasownik `SEARCH` w fiddler2 z telerik.


title: Rozwój tabletu dla dedykowanego systemu

text: Muszę podjąć decyzję architektoniczną dotyczącą opracowania (właściwie przeniesienia) mojego wbudowanego rozwiązania na tablet. Wybór sprowadza się do Ubuntu lub Androida, więc mam kilka konkretnych pytań, które pomogą mi zdecydować. * Czy w systemie Android można tworzyć aplikacje poza Dalvik za pomocą Pythona? Jeśli tak, czy mogę uzyskać dostęp do sprzętu w ten sposób, bez interfejsu API dostarczanego przez Android SDK? * Czy w systemie Android mogę kontrolować `core_affinity` procesu, aby powiązać proces z pojedynczym rdzeniem? I czy mogę użyć `isolcpus` do odizolowania innych procesów od tego rdzenia, czyniąc go (prawie) dedykowanym rdzeniem dla procesu? Jest to możliwe w zwykłym Linuksie, nie jestem pewien, czy można to zrobić w Androidzie. * W Ubuntu, jak dużą kontrolę nad sprzętem mam poza pakietem Ubuntu SDK?


title: Problemy funkcjonalne spowodowane lokalizacją

text: Wraz z lokalizacją pojawiają się różne problemy z interfejsem użytkownika, takie jak nieprzetłumaczone lub źle przetłumaczone ciągi, przycięte ciągi, niepoprawnie sformatowane daty lub liczby, nieprawidłowa kolejność sortowania i inne. Czy są jednak jakieś problemy niezwiązane z wyświetlaniem, które powodują poważną utratę funkcjonalności? Jednym z takich przykładów może być przechowywanie w bazie danych liczby zmiennoprzecinkowej w formacie oddzielonym przecinkami, a następnie analizowanie jej w formacie oddzielonym kropkami w niezmiennej kulturze. Może to spowodować awarię aplikacji lub spowodować błędne obliczenia. Będąc Kierownikiem Testów w mojej organizacji, zastanawiam się, jakie inne problemy związane z wyświetlaniem napotkałeś i mogą wystąpić w zlokalizowanym środowisku. Bardzo mile widziane są konkretne przykłady.


title: Czy można określić datę utworzenia konta e-mail?

text: Czy można określić datę utworzenia wiadomości e-mail dostarczonej z przebiegiem procesu uwierzytelniania; A może przynajmniej ustalić, że wiadomość e-mail została/nie została utworzona tego samego dnia co rejestracja (a konkretnie po potwierdzeniu)? Przykładem użycia jest oznaczenie takich kont do bliższej analizy w ramach systemu zarządzania ryzykiem. Jakie ogólne względy Twoim zdaniem wchodzą w grę w podejściu do tego problemu? Wyobrażam sobie, że rozwiązania mogą być specyficzne dla różnych dostawców poczty e-mail, ale gdybym mógł określić te informacje dla głównych, jest to dobre miejsce. Chciałbym uzyskać konkretne odpowiedzi w dowolnym języku lub pseudokodzie, zakładając, że jest to możliwe do rozwiązania w ramach zasad etycznych. _Disclaimer: Zadałem to pytanie na Stackoverflow. Jakaś miła osoba powiedziała, że dostawcy poczty e-mail nie zezwalają na to ze względu na ochronę prywatności. Całkowicie do przyjęcia, ale IMHO uważam, że wiek wiadomości e-mail ma niewiele wspólnego z prywatnością osobistą. Poza tym jest zbyt wielu mądrych ludzi korzystających z forów Stack*, abym mógł po prostu położyć się i umrzeć._


title: Korzystanie z T4 w świecie rzeczywistym

text: Ilu z was kiedykolwiek używało (lub nawet znało) silnik szablonowania tekstu programu Visual Studio? Mam na myśli, że szablony T4 istnieją już od kilku lat. Te, które początkowo były zawarte w pakiecie SDK programu Visual Studio 2005, zostały przeniesione do rdzenia programu Visual Studio 2008 tuż przed jego wydaniem. Chcę wiedzieć, czy to naprawdę jest tam używane. Mam na myśli, dlaczego zespół VS nie zainwestował w przyzwoity minimalny edytor szablonów? Nie ma nawet kolorowania składni! Wiem, że istnieje kilka dobrych edytorów T4, ale ponieważ nie są one wbudowane, wydaje mi się, że jest to nieznana funkcja dla większości programistów. Czy kiedykolwiek używałeś szablonów T4 w swoich projektach? Naprawdę interesują mnie odpowiedzi, które wyjaśniają, w jaki sposób stworzyli własne T4, aby przyspieszyć, zautomatyzować lub wygenerować artefakty dla twojego projektu.


title: Czy kiedykolwiek czytałeś specyfikacje językowe?

text: Próbując odpowiedzieć na pytania na stronie SO (szczególnie pytania C++) stwierdzam, że w większości przypadków jedna lub druga osoba zawiera cytat ze standardu. Sam prawie nie czytałem specyfikacji językowej. Nawet kiedy próbuję to przeczytać, nie mogę zrozumieć języka użytego w specyfikacjach. Tak więc moje pytanie, aby zostać dobrym programistą w danym języku, czy konieczne jest przeczytanie jego specyfikacji i poznanie wszystkich jego zakurzonych zakamarków, które wywołują niezdefiniowane/zdefiniowane w implementacji zachowanie?


title: Jak określasz swój projekt?

text: wszystko. Zastanawiam się jak opracowujecie/planujecie swój projekt? Na przykład na stronie internetowej możesz użyć Wireframe. Co powiesz na pulpit lub dodatki, takie jak dodatki MS Office? Chcę, aby było to jak najprostsze i nie chcę spędzać całego dnia na korzystaniu z jakiegoś oprogramowania do tworzenia diagramów, aby to naszkicować. Czy po prostu zapisuję, jakie funkcje chcę zbudować dla oprogramowania, a następnie odfiltrowuję, co jest możliwe, a co nie? Wszelkie wskazówki są mile widziane.


title: Jak skonfigurować dla siebie system kontroli kodu źródłowego?

text: Programuję na pulpicie w biurze, ale czasem też w domu w innym pokoju na laptopie, a nawet poza domem. To, czego potrzebuję, to system, który automatycznie lub na żądanie synchronizuje moją pracę między sobą w razie potrzeby. Nie mam konfiguracji sieci domowej i chociaż myślę, że mógłbym to zrobić, być może byłoby to pytanie do innej płyty. Myślałem o jakimś systemie, który utrzymywałby kod źródłowy w chmurze, ale nie wiem o tym wystarczająco dużo, aby zacząć. Potrzebuję na to darmowego lub taniego sposobu. Pracuję w .NET (w rzeczywistości Windows Phone 7).


title: Notacja argumentów w dokumentacji Pythona

text: Dużo czytam dokumentację Pythona i czasami dziwi mnie ta notacja: > os.path.join( **path1[, path2[, ...]]** ) Jakoś to robię **[, path[, ...]]** to lista, ale chciałbym wiedzieć, czy dobrze ją czytam. Wytrzymaj ze mnie, to pochodzi od programisty Java, który testuje Pythona. X)


title: Alternatywy dla *dokumentów* w SDLC?

text: Ponieważ nikt już niczego nie drukuje, wydaje się, że można by ulepszyć koncepcję rzeczywistych dokumentów projektowych (czyli monolitycznego fragmentu sformatowanego tekstu). Problemy z dokumentami to takie rzeczy, jak niekompatybilność wersji Worda, niekończące się grzebanie w szablonach, fakt, że ludzie nie lubią ich czytać... Zastanawiam się, czy istnieją alternatywy, takie jak strony internetowe, które pomogłyby zarządzać treścią, narzucając pewną strukturę, ale zezwalając na rzeczy jak łączenie z poszczególnymi bitami. Ale myślę, że witryna musiałaby być w stanie wypluć „dokument” na czas, w którym jest potrzebny (zgłoszenie, pokazanie sponsorów, którzy pytają itp.) Na przykład zamiast „dokumentu planu projektu” wyobrażam sobie projekt planowanie witryny, w której możesz pracować tylko nad zasobami z odpowiednimi osobami, następnie pracujesz nad planowaniem z innymi odpowiednimi osobami i nad pakietami roboczymi z innymi odpowiednimi osobami. Zamiast dokumentu SRS, jakąś witrynę, która pozwala zarządzać wymaganiami, przypisywać priorytety, fazy itp., Ale ostatecznie może wygenerować rzeczywisty dokument SRS, jeśli go potrzebujesz. Myśli? Kontekstem są tutaj małe, sprawne zespoły, ale z okazjonalną potrzebą opracowania dokumentów w celu wykazania postępów. Z pewnością nie jesteśmy wystarczająco duzi, aby zagwarantować coś takiego jak Rational lub cokolwiek, czego obecnie używają w dużych firmach.


title: Czy warto rozwijać się dla niszowego rynku tabletów?

text: Jako zagorzały fan tabletów, jakiś czas temu w końcu kupiłem Nook Color. Ponieważ jest oparty na Androidzie i mam doświadczenie w Javie, intryguje mnie możliwość tworzenia dla niego. Widziałem, że szacuje się, że wysyłanych jest kilka milionów jednostek (te statystyki były dość nowe), a rynek aplikacji jest w tej chwili raczej niewielki (co, jak przypuszczam, byłoby zaletą dla nowej aplikacji). Zastanawiam się, jakie są zalety i wady programowania na tak małym, opartym na czytaniu rynku - pod względem popularności i użytkowania aplikacji? Czy mylę się, zakładając, że mały rynek aplikacji jest zaletą? Czy programowanie dla tabletu niszowego ma jakąkolwiek synergię z większym rynkiem telefonów, jeśli chodzi o rozwój lub promocję?


title: Jak z nowym prawem będziemy mogli tworzyć strony internetowe bez używania plików cookie?

text: > **Możliwy duplikat:** > Jak mam przestrzegać unijnej dyrektywy o plikach cookie? Zgodnie z nowym prawem UE nie wolno nam używać plików cookie bez uprzedniego pytania, po pierwsze, muszę użyć pliku cookie, aby zarejestrować zalogowanego użytkownika, tak jakby nie za pomocą pliku cookie, mogą zalogować się więcej niż raz i złamać warunki licencji oprogramowania. więc zastanawiam się, czego możemy użyć zamiast plików cookie, aby wykonać to zadanie?


title: Jak możemy realistycznie planować projekty, jednocześnie rozliczając się ze wsparcia?

text: Mamy problem w pracy: próbujemy zaplanować pracę, aby móc ocenić ramy czasowe i uzyskać terminy. Problem w tym, że trudno zaplanować projekt bez wiedzy o wszystkim, co się wydarzy. Na przykład w tej chwili zaplanowaliśmy wszystkie nasze projekty do początku grudnia, jednak w tym czasie będziemy mieć różne spotkania wewnętrzne i zewnętrzne, telekonferencje i dodatkową pracę. Dobrze jest powiedzieć, że projekt potrwa trzy tygodnie, ale jeśli w tym czasie nastąpi tygodniowa przerwa, to data ukończenia zostanie przesunięta o tydzień. Problem jest potrójny: 1. Kiedy planujemy projekty, skale czasowe są brane dosłownie. Jeśli szacujemy, że trzy tygodnie, termin jest ustalony na trzy tygodnie, mówi się klientowi i nie ma miejsca na przedłużenie. 2. Praca dorywcza i taka oznacza, że tracimy czas produktywny pracując nad projektem. 3. Czasami klienci nie mają czasu, który potrzebujemy na wykonanie pracy, więc czasami przychodzą do nas i mówią, że potrzebują projektu do końca miesiąca, nawet jeśli wydaje nam się, że praca zajmie dwa miesiące - nie wspominając, że mamy już pracę do wykonania. Mamy wykres Gantta, który próbujemy wypełnić wszystkimi projektami, które mamy, i wypełniamy grafików, ale w ogóle nie są one porównywane z wykresem Gantta. To sprawia, że trudno powiedzieć: „Cóż, zaplanowaliśmy 3 tygodnie na ten projekt, ale straciliśmy tydzień tutaj, więc termin musi się cofnąć o tydzień”. Nieprofesjonalne jest również dotrzymywanie terminów, które zakomunikowaliśmy klientowi. Jak inni ludzie radzą sobie z tego typu sytuacją? Jak zarządzasz planowaniem projektów? Ile „dodatkowego” czasu planujesz poświęcić na projekt, aby uwzględnić pracę niezwiązaną z projektem, która ma miejsce podczas projektu? Jak radzisz sobie z problemami ze wsparciem, błędami i innymi rzeczami? Rzeczy, których nie możesz uwzględnić podczas planowania? **AKTUALIZACJA** Dużo dobrych odpowiedzi, dziękuję.


title: W starszej bazie kodu, jak szybko dowiedzieć się, co jest używane, a co nie?

text: Zostałem poproszony o ocenę tego, co wydaje się być znaczną przestarzałą bazą kodu, jako prekursorem zawarcia umowy utrzymującej tę bazę kodu. To nie pierwszy raz, kiedy jestem w takiej sytuacji. W obecnym przypadku kod jest przeznaczony dla witryny z grami wieloosobowymi o dość wysokim profilu i dość dużym obciążeniu, obsługującej co najmniej kilka tysięcy graczy online jednocześnie. Jak wiele takich witryn, ta jest mieszanką technologii front-end i back-end. Struktura strony widziana od wewnątrz jest bałaganem. Wszędzie leżą foldery z końcówkami „_OLD” i „_DELETE”. Wiele folderów wydaje się być bezcelowych lub ma bardzo zagadkowe nazwy. Może znajdować się dowolna liczba starych, nieużywanych skryptów, nawet w autentycznie wyglądających folderach. Nie tylko to, ale bez wątpienia istnieje wiele nieistniejących sekcji kodu, nawet w skryptach operacyjnych w inny sposób (o wiele mniej paląca kwestia). To jest przekazanie od dotychczasowych opiekunów, z powrotem do pierwotnych programistów/opiekunów witryny. Co zrozumiałe, typowe w tego rodzaju scenariuszach, operator zasiedziały nie chce mieć nic wspólnego z przekazaniem, poza tym, co jest od niego wymagane umową i prawem, aby przekazać go nowo wybranemu opiekunowi. Tak więc wydobycie informacji o istniejącej strukturze witryny z operatora zasiedziałego jest po prostu wykluczone. Jedyne podejście, które przychodzi mi do głowy, aby dostać się do bazy kodu, to zacząć od katalogu głównego witryny i powoli, ale pewnie poruszać się po powiązanych skryptach… a prawdopodobnie są używane setki, a setki innych nie. Biorąc pod uwagę, że znaczna część witryny jest we Flashu, jest to jeszcze mniej oczywiste, ponieważ, szczególnie w starszych aplikacjach Flash, linki do innych skryptów mogą być osadzone w plikach binarnych (.FLA), a nie w plikach tekstowych (.AS/ActionScript). Zastanawiam się więc, czy ktoś ma lepsze sugestie, jak podejść do oceny kodu jako całości pod kątem utrzymania. Byłoby wspaniale, gdyby istniał jakiś sposób, aby spojrzeć na wykres częstotliwości dostępu do plików w systemie operacyjnym serwera WWW (do którego mam dostęp), ponieważ może to dać pewien wgląd w to, które pliki są najbardziej krytyczne, nawet jeśli nie być w stanie wyeliminować te pliki, które nigdy nie są używane (ponieważ niektóre pliki mogą być używane tylko raz w roku).


title: Czy ktoś pracuje na 10-godzinne zmiany jako programista?

text: Chciałbym zmienić 5-dniowy tydzień pracy na 4-dniowy, ale utrzymać 40-godzinny tydzień pracy. Czy 10 godzin dni wpłynie na twoją zdolność do produktywności? Nienawidzę naszego systemu transportu publicznego, więc gdybym mógł zredukować transport o 20%, byłbym szczęśliwy. Jeśli inni programiści, którzy pracują na 10 godzin, mogą być jasne, jak ich doświadczenia z tym pomogłyby mi. Myślę, że mój szef jest na tyle elastyczny, że byłby z tym fajny.


title: Używanie Scrum w małych projektach, w których Właściciel nie chce się angażować

text: Ostatnio sporo czytam i uczę się o scrumie i bardzo go lubię. Mam jednak w głowie kilka prawdopodobnych scenariuszy, na które nie znam rozwiązania. Załóżmy więc, że mógłbym chcieć zorganizować zwinny zespół (na przykład) czterech programistów internetowych (jeden z nich projektant UI/UX). Ten zespół działałby na zasadach scrum. Początkowo prawdopodobnie pracowalibyśmy nad projektami, takimi jak strony docelowe dla małych firm zwykłych ludzi, takich jak wynajmowanie mieszkań, sprzedaż ciasteczek... Takich klientów po prostu nie można ustawić z rolą Product Ownera (IMHO), ponieważ zwykle spodziewają się zatrudnienia firmy , podaj im ogólny cel projektu z pewnymi szczegółami, a następnie oczekuj, że praca zostanie wykonana (w tym wiele decyzji) przy jak najmniejszym zaangażowaniu (w ich opinii mają ważniejsze rzeczy do zrobienia). Powiedzmy, że chciałbym zaangażować się w rolę programisty/scruma mastera (wiem, że nawet to jest dyskusyjne, będąc jednocześnie członkiem zespołu i scrum masterem), więc po prostu nie powinienem pełnić roli właściciela produktu jako dobrze. A jeśli chodzi o moje pytania: Jeśli jestem właścicielem firmy, to czy po prostu muszę być również właścicielem produktu (czy te role obejmują się nawzajem)? Czy mogę zatrudnić sprzedawcę, który może pełnić rolę właściciela produktu? Czy nie byłoby lepiej, gdyby był doświadczonym deweloperem, a nie sprzedawcą? Czy to w ogóle sprytne posunięcie? Na koniec, czy istnieje inne zwinne podejście, które może lepiej pasować do mojej pozycji? * * * **EDYTUJ:** Dziękuję wszystkim za dobre dane wejściowe. Dodałem kilka komentarzy, wszelkie dodatkowe informacje będą mile widziane.


title: Jaki jest tytuł kogoś, kto prezentuje oprogramowanie do życia?

text: Zastanawiam się, jak nazywa się osoba, której głównym zadaniem jest prezentowanie oprogramowania/produktów (w zasadzie robienie prezentacji) (wewnętrznie lub zewnętrznie)? Nie mówię tak naprawdę o sprzedawcach, ale bardziej po stronie ludzi, którzy wychodzą i robią prezentacje jako kluczową część swojej pracy, a jednocześnie są zaangażowani w rozwój? Możliwy tytuł: Ewangelista Produktu. Czy tylko menedżerowie programu i wiceprezesi wychodzą i prezentują się „wyższym” lub publiczności?


title: Klasy zagnieżdżone: przydatne narzędzie czy naruszenie zasad enkapsulacji?

text: Więc wciąż nie wiem, czy powinienem ich używać, czy nie. Czuję, że jest to skrajne naruszenie enkapsulacji, jednak uważam, że jestem w stanie osiągnąć pewien stopień enkapsulacji, jednocześnie zyskując większą elastyczność w moim kodzie. W poprzednich projektach Java/Swing w pewnym stopniu korzystałem z klas zagnieżdżonych, jednak teraz przeszedłem do innych projektów w C# i unikam ich używania. Co myślisz o klasach zagnieżdżonych?


title: Gdzie jest dobre miejsce, aby zacząć uczyć się o niestandardowym buforowaniu w .Net?

text: Zamierzam wprowadzić pewne ulepszenia wydajności naszej witryny, ale nie jestem pewien, od czego zacząć. Mamy trochę niestandardowego buforowania obiektów, ale myślę, że możemy zrobić to lepiej. **Nasza firma** Zbieramy wiadomości w witrynie typu wiadomości. Tygodniowo dostajemy około 500-1000 nowych historii. Mamy strony indeksowe, które pokazują różne listy przedmiotów i strony szczegółów, które pokazują poszczególne historie. **Nasz obecny przypadek użycia: uzyskanie indywidualnej historii** 1. Użytkownik składa żądanie 2. Warstwa dostępu do danych (DAL) sprawdza, czy element znajduje się w pamięci podręcznej i czy jest świeży (15 minut). 3. Jeśli pozycja nie znajduje się w pamięci podręcznej lub nie jest świeża, pobierz ją z SQL Server, zapisz do pamięci podręcznej i wróć do użytkownika. **Problemy z tym podejściem** * Przyciągający charakter buforowania oznacza, że użytkownicy muszą ponosić koszty oczekiwania za każdym razem, gdy pamięć podręczna jest odświeżana. Gdy historia zostanie opublikowana, rzadko się zmienia i myślę, że powinniśmy zastąpić model pull czymś lepszym. **Moje początkowe przemyślenia** * Początkowo myślałem, że WSZYSTKIE historie powinny być przechowywane lokalnie w jakimś słowniku. (Cache czy jest inny, lepszy sposób?). Jeśli historia nie zostanie znaleziona, udaj się do bazy danych, zaktualizuj lokalny słownik i odeślij przedmiot. * Ponieważ od czasu do czasu mogą pojawiać się aktualizacje historii, powinien to być wyłącznie proces użytkownika. * Obejrzałem film Brenta Ozara How StackOverflow Scales SQL Server, w którym Brent stwierdza, że „najszybsze zapytanie do bazy danych to takie, którego nie robisz”. **Od czego mam zacząć?** W tym momencie nie wiem dokładnie, jakie jest rozwiązanie. Czy to buforowanie? Czy istnieje lepszy sposób korzystania z pamięci lokalnej? Czy używam Dictionary, OrderedDictionary, List ? Wydaje się to zniechęcające i po prostu szukam dobrych punktów wyjścia, aby dowiedzieć się więcej o tym, jak wykonać tego rodzaju optymalizację.


title: Dlaczego funkcja zwracająca przez adres nie może być L-wartością?

text: Dlaczego nie można ustawić go jako LValue, jeśli funkcja zwracana jest przez adres (choć jest to możliwe w przypadku odwołania)? int* returnByAdres() { int x =20; powrót &x; } int& returnByReference() { int x =30; powrót x; } int main() { returnByReference() = 23; //możliwe int x = 23; returnByAdress() = &x;//nie jest to błąd lValue *returnByAdress() = 245;//możliwy return 0; }


title: Wyjątki jako potwierdzenia czy jako błędy?

text: Jestem profesjonalnym programistą C i hobbystą programistą Obj-C (OS X). Ostatnio pokusiłem się o rozszerzenie do C++, ze względu na jego bardzo bogatą składnię. Do tej pory kodowaniem nie zajmowałem się zbytnio wyjątkami. Objective-C je posiada, ale polityka Apple jest dość surowa: > **Ważne** Należy zarezerwować stosowanie wyjątków dla programowania lub > nieoczekiwanych błędów wykonawczych, takich jak dostęp do kolekcji poza granicami, próby > mutowania niezmiennych obiektów, wysyłanie nieprawidłowej wiadomości i utrata > połączenia z serwerem Windows. C++ wydaje się preferować częstsze używanie wyjątków. Na przykład przykład wikipedii na RAII zgłasza wyjątek, jeśli nie można otworzyć pliku. Objective-C "zwróci zero" z błędem wysłanym przez out param. Warto zauważyć, że wydaje się, że std::ofstream można ustawić w dowolny sposób. Tutaj na programistach znalazłem kilka odpowiedzi, które głoszą, że używają wyjątków zamiast kodów błędów lub w ogóle nie używają wyjątków. Te pierwsze wydają się bardziej rozpowszechnione. Nie znalazłem nikogo, kto przeprowadzałby obiektywne badanie C++. Wydaje mi się, że skoro wskaźniki są rzadkie, musiałbym użyć wewnętrznych flag błędów, jeśli zdecyduję się uniknąć wyjątków. Czy będzie to zbyt uciążliwe, czy może będzie działać nawet lepiej niż wyjątki? Najlepszą odpowiedzią byłoby porównanie obu przypadków. Edycja: Chociaż nie jest to do końca istotne, prawdopodobnie powinienem wyjaśnić, co to jest „nil”. Technicznie jest to to samo co `NULL`, ale chodzi o to, że można wysłać wiadomość do `nil`. Możesz więc zrobić coś takiego jak NSError *err = nil; id obj = [NSFileHandle fileHandleForReadingFromURL:myurl error:&err]; [obiekt zachowaj]; nawet jeśli pierwsze połączenie zwróciło `nil`. A ponieważ nigdy nie robisz `*obj` w Obj-C, nie ma ryzyka dereferencji wskaźnika NULL.


title: Zachowanie historii zatwierdzenia kontroli wersji a refaktoryzacja i dokumentacja

text: Korzystanie z historii zmian utrzymywanej przez system kontroli wersji prawie nic nie kosztuje. Jednak podczas dużego wysiłku związanego z refaktoryzacją (lub reorganizacją/oczyszczaniem) projektu funkcje i klasy, a nawet przestrzenie nazw zostaną przeniesione; czasami kilka plików zostanie połączonych, a inne zostaną podzielone. Zmiany te często prowadzą do utraty oryginalnej historii zatwierdzenia kilku plików. W mojej osobistej opinii utrzymanie organizacji projektu jest ważniejsze niż prowadzenie historii kodu źródłowego. Dobra organizacja projektu pozwala na ciągłe dodawanie nowych funkcji przy rozsądnym wysiłku, podczas gdy wartość historii kodu źródłowego wydaje się być wątpliwa. Co więcej, za pomocą testów jednostkowych szybko identyfikowane są problemy z regresją. Dopóki najnowsza wersja nadal spełnia wszystkie wymagania oprogramowania, czy rzeczywiście musimy zachowywać historię kodu źródłowego? Rozumiem, że każdy _dostarczony_ kod źródłowy musi zostać zachowany ze względu na konieczność zapewnienia wsparcia klientom bez konieczności wykonywania uaktualnienia wersji głównej. Ale poza tym, czy jest jakaś wartość w przechowywaniu historii zatwierdzeń kodu źródłowego? Czy historia zatwierdzenia kodu źródłowego odgrywa jakąkolwiek rolę w komunikacji między członkami zespołu? Co się stanie, jeśli zniesiemy historię zmian, ale zamiast tego będziemy polegać na "kodzie źródłowym" + "kodzie testów jednostkowych" do komunikacji? Czy istnienie historii zatwierdzeń sprawia, że można pogodzić się z długoterminową dokumentacją ważnych informacji o projekcie, takich jak główne zmiany projektu/wymagań i strumienie myśli, które doprowadziły do tych zmian?


title: Jak napisać „SMART” Cele jako zwinny programista?

text: Podobnie jak wiele korporacji, firma, dla której pracuję, przechodzi na system oceny wyników oparty na celach SMART. Mój zespół to wysoko funkcjonujący zwinny zespół programistyczny wykorzystujący praktyki zarówno ze SCRUM, jak i Extreme Programming. Na naszą wielką korzyść, nasze stosowanie zwinnych praktyk ma pełne wsparcie bezpośredniego i wyższego kierownictwa. Do wykonania pracy nasz zespół wykorzystuje trzytygodniowe iteracje. Poza natychmiastową iteracją mamy ogólny plan rozłożony na ćwiartki. Oznacza to, że to, co osiągniemy za kilka kwartałów od teraz, jest znacznie bardziej mgliste niż to, co osiągniemy w najbliższym kwartale. Z pewnością mamy ogólne pojęcie o tym, dokąd zmierza nasz projekt, ale słowo kluczowe jest tutaj ogólne. Biorąc pod uwagę nasze podejście do planowania projektów, członkom naszego zespołu i mnie trudno jest napisać cele, które są konkretne, mierzalne, osiągalne, istotne i określone w czasie. Dwa istniejące pytania na Programrs.se dobrze radzą sobie z niektórymi z naszych obaw: * Jaki jest przykład dobrego celu SMART dla programisty? * Czy cele SMART są przydatne dla programistów? Jednak pytania wywołały bardziej ogólne odpowiedzi niż konkrety dotyczące radzenia sobie z celami SMART podczas pracy w zwinnym zespole programistycznym. Jako zwinny programista, jak piszesz cele na okres od pięciu do siedmiu lat, które są konkretne, mierzalne, osiągalne, istotne i określone w czasie?


title: Czy języki specyficzne dla domeny używają innych języków programowania?

text: Czy język specyficzny dla domeny używa innych języków, takich jak c++ lub java, czy jest samodzielny?


title: Czy programowanie to zawód nie dla osoby z dysfunkcją mowy?

text: Mój przyjaciel ma 15 lat doświadczenia w programowaniu i doktorat. w matematyce. Ma również porażenie mózgowe z upośledzeniem mowy. Z powodu swojej niepełnosprawności, po doktoracie zdecydował się zostać programistą. O ile widzę, nadal jest doskonałym programistą c#. Obecnie jednak ciężko mu znaleźć pracę dla siebie, ponieważ większość prac programistycznych wymaga dobrych umiejętności komunikacyjnych. Patrząc na niego walczącego tak bardzo, czy muszę mu radzić, że branża programistyczna już nie jest dla niego odpowiednia? Będzie mi bardzo trudno zrobić to przyjacielowi, ale myślę, że byłoby to lepsze niż zmuszenie go do marnowania czasu. Co myślisz? **Aktualizacja:** bardzo dziękujemy za doskonałe odpowiedzi. Widzę większość odpowiedzi zalecanych wbrew moim radom i naprawdę mam nadzieję, że macie rację. W rzeczywistości jednak został odrzucony w około 100 wywiadach telefonicznych. Właśnie tam chcę być potencjalnym złym doradcą, a nie politycznie słusznym przyjacielem.


title: Czy napisanie kodu, a NASTĘPNIE cofnięcie się i optymalizacja jest nieefektywnym przepływem pracy?

text: Jestem nowszym entuzjastą programisty. Robię małe i duże projekty z przerwami przez ostatnie dwa lub trzy lata. Zawsze trafiam na małe dziury w moim kodzie, które przyczyniają się do dużej ilości pamięci lub niepotrzebnych linii kodu. Moja filozofia przy dużych projektach zawsze polegała na „wyrzuceniu tego z głowy” i napisaniu całego kodu do działającego produktu, a następnie cofnięciu się i zredukowaniu kodu do prostszej, bardziej zoptymalizowanej formy. Jednak to nie zawsze działa: tworząc struktury baz danych, często muszę wracać, aby dodać funkcje, które pojawiają się pod wpływem chwili. Całe bloki kodu muszą zostać usunięte z powodu spontanicznego pomysłu. Moje pytanie do Ciebie brzmi: **czy bardziej efektywne jest napisanie całego programu, a NASTĘPNIE cofnięcie się i zoptymalizowanie go, czy też powinienem optymalizować kod podczas pisania?**


title: Pytanie o licencjonowanie kodu. Klient ukradł mój kod

text: Klient, dla którego zrobiłem projekt, przypadkowo trafił z kodem źródłowym wspomnianego projektu. Głupi wiem. Ustalono, że dostaną produkt, nigdy kod źródłowy. Jednak oczywiście teraz starają się zrobić szybki i wykorzystać kod źródłowy do tworzenia własnych produktów dla innych klientów. Teraz nie chcę robić z tego wielkiego interesu, ale rozważam wydanie kodu jako projektu open source dla każdego, aby każdy mógł użyć, aby ich „unikalny” punkt sprzedaży (mój kod) był dyskusyjny. Co sugerujecie, żebym zrobił/zwolnił kod, jeśli zdecydują się na to *ssholes?


title: Oprogramowanie open source z dobrą dokumentacją kodu w celu poprawy umiejętności projektowania

text: Ponieważ staram się być lepszy w projektowaniu dobrego oprogramowania, zastanawiam się, czy istnieje dobre (jak w dobrze napisanym) oprogramowanie typu open source z dużą ilością dokumentacji kodu, która ma na celu wyjaśnienie szczegółów dotyczących tego, dlaczego dokonano takiego lub innego wyboru projektu w kontekście tego konkretnego zestawu problemów. Interesuje mnie OOP i nie bardzo zależy mi na języku (preferowane są php / java / c# :)) Przykład: Problem: X Możliwy sposób rozwiązania tego problemu: A, B, C. Wybieramy B ponieważ... (szczegóły techniczne implementacji, plusy i minusy, komentarze do kodu itp.)


title: Jak narysować wykres wypalania wydania?

text: Brałem udział w różnych projektach Agile i widziałem wiele stylów wykresów wypalania. Większość z nich była obsługiwana ręcznie, ponieważ jakoś wszystkie narzędzia, z którymi się zetknąłem, nie dają naprawdę użytecznych wykresów spalania. W rzeczywistości możemy nie mieć do czynienia ze wszystkimi szacowanymi historiami i po prostu płoniemy. Wielokrotnie zakres jest dodawany podczas wydania. Obecnie mam do czynienia z tymi problemami z wykresem spalania i mam pytania dotyczące następujących rzeczy: 1. Jak przedstawiamy dodany zakres w wykresie spalania? 2. Jak radzimy sobie z nieoszacowanymi historiami na wykresie wypalania, zakładając, że istnieje duże prawdopodobieństwo, że to zrobimy, ale po prostu nie mamy jeszcze czasu na ich oszacowanie? 3. Jak wyobrażasz sobie koniec wydania? Poniższy wykres spalania pochodzi z fikcyjnego studium przypadku w dodatku do klasycznej książki Mike'a Cohna Estimating and Planing. ![Spalenie Mike'a Cohna](http://i.stack.imgur.com/MXQ5o.png)


title: Do której warstwy należy kod asynchroniczny?

text: Zajmuję się tworzeniem aplikacji, która pobiera dane z usługi zewnętrznej. Aplikacja jest wdrażana zgodnie z typową architekturą warstwową z warstwami UI, Presentation, Domain i Data. Klient usługi znajduje się w warstwie danych. Jak to zwykle bywa, nie chcę, aby interfejs użytkownika „zawieszał się” podczas oczekiwania na zakończenie połączeń z usługi zewnętrznej. Jednak zaimplementowanie agentów usługi z metodami asynchronicznymi powoduje skomplikowanie modelu łączenia metod asynchronicznych w górę warstw, dzięki czemu interfejs użytkownika może pozostać responsywny. Na przykład: W ViewModel: TheRepository.LoadDataAsync().ContinueWith(t => { _data = t.Result; }); W TheRepository: public Task<TheData> LoadDataAsync() { return ServiceClient.GetDataFromServiceAsync(); } (Zauważ, że jest to znaczne uproszczenie, które ma na celu przekazanie tego, co rozumiem przez tworzenie łańcuchów zadań). Ponieważ wymaganie jest wymogiem interfejsu użytkownika (zapobiegaj „zablokowaniu” interfejsu użytkownika), czy nie ma sensu utrzymywanie domeny i Warstwy danych są synchroniczne i pozostawienie warstwie prezentacji decyzji, kiedy musi wykonać jakąś operację asynchronicznie? Z drugiej strony bardzo łatwo i naturalnie jest zaimplementować klienta usługi/proxy za pomocą metod asynchronicznych (VS wygeneruje je automatycznie, jeśli zajdzie taka potrzeba), ponieważ o tym myślimy, gdy myślimy o potrzebie async. Gdyby aplikacja pobierała dane z bazy danych zamiast wykonywać wywołanie usługi, warstwy nie różniłyby się niczym i nie powinno to tak naprawdę zmieniać sposobu, w jaki zostały zaimplementowane warstwy interfejsu użytkownika, prezentacji lub domeny, prawda? W takim przypadku nie zastanawialibyśmy się dwa razy nad tym, aby dostęp do danych był synchroniczny. Czy lepszym projektem byłoby synchroniczne modelowanie domeny i pozostawienie jej w warstwie prezentacji, aby rozwiązać problemy z wydajnością w interfejsie użytkownika? A może, w wyłaniającym się świecie async, powinniśmy po prostu zaakceptować async jako normę i dopasować wszystko do tego modelu?


title: Co ma znaczyć casting?

text: Kiedy koduję w językach niskiego poziomu, takich jak C, widzę, że rzutowanie czasami oznacza „reinterpretację tych bajtów tak, jakby zawsze były tego innego typu”, a innym razem „inteligentną konwersję tej wartości na inny typ”. Jakie jest pierwotne znaczenie tego słowa i czy jest jakaś konsekwencja w tym, kiedy spodziewać się nawrócenia, a kiedy spodziewać się surowej reinterpretacji?


title: Nauka nowych języków programowania i technologii

text: Jakiś czas temu miałem w pracy uczyć się programowania na iOS. Nie zdążyłem się tego nauczyć, ponieważ zostałem przeniesiony do ważniejszego zadania z inną znaną mi już technologią. Jednak krótki czas, jaki spędziłem na iOS, czułem, że mógłbym zrobić lepiej, gdybym spędził kilka godzin w miejscu pracy, podczas których mogłem przedyskutować niektóre sprawy dotyczące iOS z moimi kolegami, którzy go znają, a resztę czasu pracując w domu . Myślę, że wielu programistów podzieliłoby moją opinię i wolałoby uczyć się nowej technologii w domu. Czy jest jakaś przyjęta praktyka? Czy jakiś programista miał doświadczenie, kiedy firma zachęcała programistów do wybrania miejsca, w którym czują się bardziej komfortowo, aby uczyć się nowych technologii?


title: Jak ustrukturyzować system szablonów za pomocą zwykłego PHP?

text:
Czytałem to pytanie na stackoverflow: http://stackoverflow.com/questions/104516/calling-php-functions-within-heredoc-strings i zaakceptowana odpowiedź mówi, aby zrobić zwykłe szablony PHP, takie jak: template.php:   <title><?=$title?></title>   <?=getContent()?>   index.php: <?php $ title = 'Tytuł demonstracyjny'; function getContent() { return '
Witaj świecie!
'; } include('szablon.php'); ?> Dla mnie powyższe nie jest dobrze zorganizowane w tym sensie, że template.php zależy od zmiennych zdefiniowanych w innych skryptach. A używasz include() do wykonania kodu, gdy robisz `include('template.php')`(w przeciwieństwie do include() w celu dołączenia klasy lub funkcji, która nie jest natychmiast wykonywana). Wydaje mi się, że lepszym podejściem jest zawinięcie szablonu w funkcję: template.php: <?php function template($title, $content) { ob_start(); ?>   <title><?=$title?></title>   <?=$content?>   <?php return ob_get_clean( ); } ?> index.php: <?php require_once('template.php'); print template('Tytuł Demo', '
Witaj świecie!
'); ?> Czy drugie podejście jest lepsze? Czy jest na to jeszcze lepszy sposób?


title: Czy Agile jest wariantem RAD?

text: Wikipedia mówi, że Agile jest rodzajem „RAD”, co moim zdaniem jest niepoprawne. Z tego, co wiem, Agile został opracowany, ponieważ sam RAD nie był aż tak udany w latach 90-tych (zbyt sztywny na zmiany). Czy się mylę? Odniesienie z książki Radical Project Management (Thomsett) > "..nowa moda na rozwój, taka jak RAD, Agile, Object orientated..." Certyfikowany audytor systemu informacyjnego CISA: > ..świadomy **dwóch alternatywnych** dev. metody: Agile i Rapid > Tworzenie aplikacji Zwinne zarządzanie oprogramowaniem: > Metody zwinne wywodzą się głównie z lekkiego podejścia RAD. Najlepsze praktyki szacowania oprogramowania: > Główne metody sw. dev. można podsumować następująco: > 1\. Wodospad .. > 4\. RAD > 5\. Agile Sednem tego pytania jest: **Czy RAD jest Agile czy samodzielnym podejściem programistycznym?**


title: Zarabianie pieniędzy na tworzeniu oprogramowania Open Source. Jak to działa?

text: > **Możliwy duplikat:** > Zarabianie pieniędzy na Open Source jako programista? Ostatnio słyszę, że coraz więcej programistów wnosi swój wysiłek do wielu produktów open-source. Będąc nowicjuszem w wielu aspektach tworzenia oprogramowania, nigdy nie myślałem o sobie jako o członku zespołu, który buduje produkt, z którego prawie każdy może korzystać za darmo. Ale ten trend zyskuje coraz więcej uwagi i dziś prawie uważa się, że każdy szanujący się inżynier oprogramowania powinien mieć przynajmniej jeden przykład, gdy uczestniczył w projekcie open source. To daje ci kilka punktów więcej na rozmowie kwalifikacyjnej, fajnie, to znaczy coś bardzo dobrego, zwłaszcza jeśli produkt jest popularny i odnosi sukcesy. Wydaje się jednak, że to nie tylko fajny, ale jakoś dobrze prosperujący biznes dzisiaj. Już nie tylko niektórzy studenci czy pasjonaci, ale znani programiści rzucają pracę i zaczynają spędzać większość czasu w tym sektorze, firmy własne wydają na ich utrzymanie niemałą sumę pieniędzy. Rozumiem, że istnieje wiele różnych rodzajów licencji i innych rzeczy. Ale po prostu nie rozumiem, jak ci programiści zarabiają? Jak firmy osiągają z tego przychody? Nie wierzę, że za tym wszystkim stoi tylko altruistyczna natura ludzi, a oni po prostu chętnie pracują praktycznie za darmo. Czy możesz mi wyjaśnić, biorąc za przykład jakiś dobrze znany projekt, jego model biznesowy? Jak ktoś może uczestniczyć? Co powinieneś wiedzieć najpierw? Jak możesz zarabiać na swoich wysiłkach? Czy jest jakiś „przewodnik dla początkujących” lub „kompletny podręcznik dla idiotów” na początek?


title: Czy wcześniej komercyjne silniki open-sourcingu to sprytne posunięcie?

text: Zobaczyłem, że Unreal Engine przechodzi na open-source na githubie (patrz link1 i link2) i to sprawiło, że zacząłem się zastanawiać: „czy open-sourcing wcześniej komercyjnego silnika jest mądrym posunięciem?” Jaka korzyść odniesie Epic Games z udostępnienia podstawowego kodu w ten sposób? Jak mogą nie martwić się, że ludzie kradną jego części tylko dlatego, że umieścili na kodzie oświadczenie o prawach autorskich i licencji? Wygląda na to, że musi być jakiś haczyk. W jaki sposób udostępnienie kodu źródłowego jest korzystne dla Epic Games?


title: Czy „oczywista implementacja” TDD oznacza najpierw kod, a potem test?

text: Mój przyjaciel i ja jesteśmy stosunkowo nowym TDD i kłócimy się o technikę „Oczywistej implementacji” (z „TDD By Example” Kenta Becka). Mój znajomy mówi, że oznacza to, że jeśli implementacja jest oczywista, powinieneś to napisać - **przed** każdym testem tego nowego zachowania. I rzeczywiście książka mówi: > Jak realizujesz proste operacje? Po prostu je zaimplementuj. Ponadto: > Czasami jesteś pewien, że wiesz, jak przeprowadzić operację. Zacząć robić. Myślę, że autor ma na myśli to, że najpierw należy przetestować, a potem „po prostu zaimplementować” to – w przeciwieństwie do „Fake It ('Till You Make It)” i innych technik, które wymagają mniejszych kroków na etapie implementacji. Również po tych cytatach autor mówi o uzyskiwaniu „czerwonych pasków” (nieudane testy) podczas wykonywania „Oczywistej implementacji” – jak można uzyskać czerwony pasek bez testu?. Nie znalazłem jednak żadnego cytatu z książki mówiącego, że „oczywiste” nadal oznacza najpierw test. Co myślisz? Czy powinniśmy testować najpierw, czy później, gdy implementacja jest „oczywista” (oczywiście według TDD)? Czy znasz książkę lub wpis na blogu, który właśnie to mówi?


title: Przeszukaj wiele stołów

text: Stworzyłem aplikację internetową, która służy głównie do archiwizacji wszelkiego rodzaju materiałów tekstowych (dokumentów, odnośników do artykułów, książek, czasopism itp.). W moim systemie może istnieć dowolna liczba tabel archiwum, każda z własnym schematem. Schemat może zostać zmieniony przez moderatora za pośrednictwem aplikacji (wyobraź sobie coś podobnego do naprawdę uproszczonej wersji phpMyAdmin). Użytkownicy mogą wyszukiwać wszystko ze wszystkich tabel. Używając indeksów FULLTEXT wraz z wyszukiwaniem podciągów (pola, które nie obsługują indeksowania FULLTEXT) skrypt wstawia wyniki wyszukiwania do pojedynczej tabeli i porządkując te wyniki według miary podobieństwa, mogę dość łatwo zwrócić wyniki podzielone na strony. Jednak takie podejście ma kilka problemów: * wyszukiwanie podłańcuchów może liczyć tylko dokładne wyniki * reguła 50% dotyczy wszystkich tabel z osobna i dlatego mysql może nie zwracać ważnych dopasowań lub zbyt naiwnie odrzucać popularne słowa. * jest dość kosztowny pod względem liczby zapytań i czasu wykonania (teraz nie ma problemu, ponieważ w tabelach nie ma jeszcze dużo danych). * dane znormalizowane nie są nawet wyszukiwane (mam różne tabele dla kategorii, języków i załączników plików). **Moje planowane rozwiązanie** Utwórz pojedynczą tabelę zawierającą kolumny podobne do id, table_id, row_id, data Za każdym razem, gdy nowy wiersz jest tworzony/modyfikowany/usuwany w którejkolwiek z tabel danych, ta centralna tabela również jest aktualizowana za pomocą `data` kolumna zawierająca konkatenację wszystkich pól w rzędzie. Mógłbym wtedy stworzyć pojedynczy indeks dla Sphinxa i użyć go do wyszukiwania. Czy istnieją bardziej efektywne rozwiązania lub najlepsze praktyki, jak do tego podejść? Dziękuję.


title: Zrozumienie aktualizacji prędkości w Binary Particle Swarm Optimization

text: Zastanawiam się, jak interpretować aktualizację prędkości w _BinaryParticle Swarm Optimization_ (PSO). Podsumowując aktualizację prędkości: V(t+1) = V(t) + c1 * r1 * (XlocalBest - X(t)) + c2 * r2 * (XglobalBest - X(t)) Rozumiem, że binarny wektor pozycji mapuje do wartości w domenie dyskretnej. Jednak wektor binarny zawiera tylko „0” i „1”, gdzie długość tego wektora jest „n”-wymiarowa. To, czego nie rozumiem, to fakt, że wektor prędkości o rzeczywistej wartości „n” przyjmuje wektor binarny (pozycję) „n” i przyjmuje np. różnicę między lokalną najlepszą pozycją przy danym indeksie a bieżącą pozycją. Czy to prawda, że są tylko wartości „0”, „1”, które są odejmowane dla każdej wartości „X” w aktualizacji ? (Więc np. `c1 * r1` jest mnożone tylko przez `0`, `1` lub `-1`)? Jak mogę wykorzystać te informacje w odniesieniu do funkcji sigmoidalnej, która jest często używana w tych PSO? Czy powinienem zaktualizować prędkości i na przykład wziąć wektor prędkości cząstek, w którym każdy element znajduje się w domenie `[0,1)` i umieścić to w funkcji sigmoid i włączyć lub wyłączyć odpowiednie pozycje bitów w binarnej cząstki wektor taki jak `r < sigmoid(wartość prędkości)`, gdzie `r` jest losowe w `[0,1)`? Czy to brzmi dobrze, czy może źle?


title: Io (Język) IDE/Kompilator

text: Czy możesz polecić darmowy kompilator/IDE do pisania prostych programów Io? W wolnym czasie chcę uczyć się języka w domu.


title: Aktualne najlepsze praktyki firmy Microsoft dotyczące tworzenia warstwy danych .NET? A rzeczywistość?

text: Zespół programistów, z którym pracuję, wkrótce przeniesie się do .NET 4.0, jednak używana przez nas biblioteka klas dostępu do danych nadal używa „klasycznej” ADO.NET, czyli SqlDataReader, DataTable i tym podobnych. Tymczasem wydaje się, że Microsoft i prawdopodobnie reszta świata posuwa się naprzód dzięki Entity Framework i WCF Data Services. W witrynie MSDN nie znalazłem niczego, co wskazywałoby, które z technologii dostępu do danych Microsoft uważa za najlepsze praktyki. Czy firma Microsoft ma preferencje? Z jakiego dostępu do danych korzysta obecnie większość osób? Czy istnieją dobre powody, aby pozostać przy ADO.NET classic i nie przenosić się na Entity Framework?


title: Jaki był pierwszy hierarchiczny system plików?

text: Wydaje się, że „Katalogi zawierające katalogi i pliki” istniały od zawsze, ale musiał być pierwszy.


title: Jak zgłosić postępy mojego projektu (Agile) mojemu pracodawcy (który nie jest programistą)?

text: Mam problem ze zgłoszeniem postępów mojemu pracodawcy. Jestem programistą w niepełnym wymiarze godzin, obsługującym projekt oprogramowania dla wydziału (nietechnicznego) mojej szkoły. Osoba kontaktowa: 1\. Personel, który faktycznie korzysta z oprogramowania i zgłasza prośby o dodanie funkcji, 2\. Moja szefowa (nie programista), a ona nie jest użytkownikiem oprogramowania. Charakter projektu: Jest to gotowe oprogramowanie, które zostało zakupione od strony trzeciej. Muszę zmodyfikować lub dodać funkcję/funkcję do tego oprogramowania, aby zaspokoić potrzeby działu. Jest to oprogramowanie, którego należy używać przez cały semestr. Nie wszystkie funkcje muszą być używane na początku. Dlatego używamy modelu Agile: kiedy personel potrzebuje określonej funkcji, zgłasza prośbę, a ja wprowadzam zmiany. Przypuszczam, że do końca semestru wszystkie wymagane funkcje zostaną podniesione i wdrożone. Problem: Za każdym razem, gdy szef pytał mnie o postępy, nie mogę odpowiedzieć, bo nie wiem, jak odpowiedzieć. Nie mam pełnej listy wszystkich wymaganych funkcji. Mimo że ukończyłem funkcje, które pojawiły się w zeszłym tygodniu, nadal nie mogę powiedzieć mojemu szefowi, że „ukończyłem”, ponieważ pojawiają się też nowe funkcje i nie wiem, ile. Nie mogę powiedzieć „Mamy ile % ukończenia” ani „Zamierzamy to ukończyć do xxx”. Kiedyś z 3 próśb udaje mi się ukończyć 2, powiedziałbym mojemu szefowi „Ukończyłem 2, ale jest jeszcze jedna funkcja, która nie została jeszcze ukończona”. Po długim czasie brzmię jak „Zawsze mam coś nie dokończyć, po tak długim czasie”. Brak możliwości zgłoszenia postępów sprawia, że wyglądam naprawdę źle. Nie chodzi o to, ile zrobiłem, ale o to, jak poinformować ludzi. Gdybym był menedżerem, a moi pracownicy nie zgłaszali mi postępów przez wiele miesięcy, czułbym, że ten facet też nie jest w stanie. Czy macie pomysł jak zgłosić, lub odpowiedzieć na pytanie tak proste jak "jaki jest stan/postęp modyfikacji oprogramowania"? **AKTUALIZACJA** Moja szefowa nie zajmuje się bezpośrednio zadaniami programistycznymi, więc nie ma pojęcia, co robię ani jak działa program. Nie spotykamy się regularnie, ponieważ jest zajęta i czuję, że będzie to strata czasu, ponieważ nie jest głównym użytkownikiem, nie zna szczegółów programu. Regularnie spotykam się z pracownikami, którzy używają i lepiej znają się na oprogramowaniu. Trudno mi wytłumaczyć postępy mojemu szefowi.


Mój kod jest podany poniżej. W pętli for otrzymuję nieoczekiwane dane wyjściowe, tj. przed zakończeniem wykonywania pętli for przez pierwszy wątek, drugi wątek pojawia się w pętli for i pokazuje zwiększoną wartość. public class ThreadSafe { public static void main(String[] args) wyrzuca InterruptedException { System.out.println("main()"); B b=nowy B("1. wątek"); B b1=nowy B("Drugi wątek"); B b2=nowy B("3. wątek"); b.start(); b1.start(); b2.start(); } } class MyCounter { private static int count; public static int getCount(){ for(int m=0;m<2;m++){ System.out.println(count+" "+Thread.currentThread().getName()); } zwróć licznik++; } } klasa B extends Thread{ public B(String tname) { super(tname); } public void run() { MójLicznik.getCount(); } } Pytanie brzmi, kiedy pierwszy wątek wykonuje pętlę for, a następnie inne wątki wykonujące instrukcję return, czy to jest powód wyświetlania wartości przyrostu, czy coś innego? W jaki sposób inny wątek może pokazać zwiększoną wartość, chyba że pierwszy wątek osiągnie instrukcję return?


title: Jak zaprojektować warstwę prezentacyjną serwisu WWW?

text: Zajmowałem się różnymi podejściami do projektowania warstwy prezentacji dla stron internetowych. Wiele osób przysięga, że jeden z różnych pakietów CMS jest zbyt ograniczający i nieelastyczny. Wiele osób sugeruje ręczne pisanie kodu HTML, który wydaje się nie skalować w przypadku wielu stron. Mam nową aplikację internetową, którą projektuję i naprawdę chcę mieć "poprawne" i "eleganckie" i praktyczne podejście do tego, jak ją zaprojektuję. Czy ktoś zrobił to w sposób, z którego jest zadowolony i może bez problemu wpinać różne moduły i biblioteki? Jakieś wskazówki lub pułapki, na które powinienem zwrócić uwagę?


Jaka jest najlepsza praktyka tworzenia komponentu wizualnego w programie Flex Hero? Robię to tak: uważam, że komponent ma 2 "części", część deklaratywną (podkomponenty wizualne), które definiuję w skórce (tylko mxml) i część kodową (obsługę zdarzeń...), którą definiuję w klasie skryptu akcji. Wgrywam skórkę do ctora klasy skryptu akcji. Definiuję również części skóry, stany i wiążę obsługę zdarzeń w funkcji partAdded. Kłócę się o to; że powinienem zdefiniować komponent czysto w .mxml, ze słuchaczami w tagu skryptu i może dołączyć skórkę (ale skórka powinna być luźna - może do ponownego wykorzystania :-?) Pochodzę z .NET i może jestem stronniczy kod za wzorcem i zastanawiam się na podstawie twojego doświadczenia i intencji Adobe, jaka jest najlepsza praktyka, aby zwykle zaimplementować komponent wizualny?


title: Jakie umiejętności powinien posiadać inżynier, aby zbudować duży serwis społecznościowy?

text: Próbuję zbudować witrynę społecznościową, ale potrzebuję rąk doświadczonego inżyniera / architekta, który poprowadzi mnie i pomoże mi w rozwoju po stronie serwera, ponieważ jestem nowicjuszem. Technologia (z którą jestem zaznajomiony) do wykorzystania obejmuje Java, JAX-RS, Spring i Hibernate. Niestety nie wiem, jakie inne umiejętności technologiczne powinien posiadać inżynier/architekt poza wymienionymi powyżej? SNS, który próbuję zbudować, jest jak Facebook, który może Cię poprowadzić pod względem funkcji i funkcjonalności.


title: Dobre referencje dotyczące przykładów dokumentacji i porad dla użytkowników końcowych

text: Nasze autorskie oprogramowanie było używane przez wielu użytkowników, a dział szkoleń poprosił nas o wszelkie wskazówki dotyczące formatu dokumentacji użytkownika końcowego. Czy ktoś wie, gdzie mogę znaleźć dobre przykłady dokumentacji oprogramowania dla użytkowników końcowych, które dział szkoleń może wykorzystać jako inspirację lub jakiekolwiek strony z dobrą radą? Jest to podobne do tego pytania, jednak szukam dokumentacji użytkownika końcowego do użytku przez użytkowników nietechnicznych.


title: Czy dokumentacja użytkownika powinna zawierać zrzuty ekranu?

text: To pytanie koncentruje się na dokumentacji _user_, a nie na dokumentacji kodu. Właśnie skończyłem mój projekt oprogramowania, a ludzie, dla których pracuję, oczekują ode mnie pisania dokumentacji użytkownika, opisującej wszystko, co robi oprogramowanie. Cała dokumentacja, którą mieli do tej pory (o pozostałej części używanego przez nich oprogramowania) jest pełna zrzutów ekranu, a czasami prawie nie zawiera tekstu. Myślę, że to okropne. Od godzin walczyłem, aby zrozumieć, w jaki sposób zrzuty ekranu są połączone i przez większość czasu musiałem prosić o pomoc kogoś innego. Napisałem aplikację komputerową Java, a jej wygląd prawdopodobnie będzie zależał od aktualnego motywu systemu Windows i aktualizacji Java. Nie sądzę, aby zrzuty ekranu mogły stanowić wiarygodne, ostateczne odniesienie. Robienie setek zrzutów ekranu i dodawanie do nich adnotacji zajmie wieczność i nie wierzę, że pomoże to bardziej niż dokładna dokumentacja w postaci zwykłego tekstu. **Jak mam podejść do składania dokumentacji użytkownika? Jakimi wytycznymi powinienem się kierować w odniesieniu do korzystania ze zrzutów ekranu w porównaniu z wyjaśnieniem w tekście z dokumentacją użytkownika?**


title: Sprzedałem swój kod źródłowy klientowi, czy mogę teraz odbudować podobny kod i sprzedać go komuś innemu?

text: Zbudowaliśmy więc stronę internetową i oprogramowanie dla klienta, pobraliśmy opłatę i przekazaliśmy kod. Następnie klient otrzymał zapytanie od innej firmy dotyczące oprogramowania. Klient przekazał prośbę, ale powiedział, że ponieważ jest właścicielem kodu, będzie musiał otrzymać za niego pieniądze. Myślę, że są tutaj 2 opcje: 1. Pracuj z klientem zgodnie z życzeniem 2. Właściwie przebudowaliśmy oprogramowanie, ulepszyliśmy je i używamy do innych projektów. Czy mam prawo sprzedawać to bezpośrednio firmie, która o to zapytała, zamiast przechodzić przez klienta? Jakakolwiek pomoc w tym zakresie byłaby bardzo mile widziana


title: Java - używanie jednej klasy czy wielu klas dla każdego typu?

text: Obecnie mam klasę Java o nazwie „węzeł”, która ma wiele pól. To, które pola w klasie są używane, zależy od pola o nazwie „typ”. Istnieje blisko 10 (może to wzrosnąć) różnych typów „węzłów”. Zastanawiałem się, czy dobrze jest mieć jedną klasę do obsługi wszystkich typów, czy też mieć inną klasę dla każdego typu. Jaka jest najlepsza praktyka programistyczna w takich przypadkach? Chciałbym wiedzieć (lub link do podobnego pytania / samouczków), w jaki sposób wpłynie na wydajność (np. Pamięć itp.), Jeśli użyję pojedynczej klasy?


title: Czy możliwe jest wydanie biblioteki opartej na ASIO SDK pod LGPLv3?

text: Zastanawiam się, czy jest możliwe napisanie i wydanie biblioteki opartej na ASIO SDK pod LGPLv3. Dokładniej, licencja ASIO mówi coś, czego nie jestem pewien jak interpretować (2.2) : > Licencjobiorca nie ma pozwolenia na [...]. Obejmuje to przepracowanie tej > specyfikacji, **lub odtworzenie jakichkolwiek produktów opartych na tej > specyfikacji.** Brzmi to tak, jakby mogło to kolidować z LGPL: > Możesz przekazać Pracę łączoną na wybranych przez siebie warunkach, > razem, skutecznie nie ograniczają modyfikacji części > Biblioteki zawartej w Połączonej Pracy i inżynierii wstecznej w celu debugowania > takie modyfikacje Również 5.a) trochę mnie wkurza : > Dołącz do połączonej biblioteki z kopią tego samego praca oparta na > Bibliotece, niepołączona z innymi obiektami bibliotecznymi Z mojego punktu widzenia, moja Biblioteka nie będzie miała żadnego zastosowania, punktu ani wpływu sama z siebie, gdy nie jest połączona z ASIO SDK. Czy nadal będę musiał wydać nieskombinowaną fikcyjną część oprogramowania, aby przestrzegać 5.a), jeśli wybiorę LGPL?


title: czy istnieje biblioteka java do tworzenia wspomaganego przepływu kreatora w aplikacji komputerowej?

text: Chcę stworzyć przewodnik wprowadzający/kreator krok po kroku, który pomoże użytkownikom utworzyć pracę w mojej aplikacji. Na przykład, powiedzą, w co kliknąć, i zostaną zapytani, jakie działania chcieliby podjąć w następnej kolejności itp. Framework lub biblioteka, która w tym pomaga? Jak nazywasz ten kreator/krok po kroku przepływ pracy w oprogramowaniu? Coś znalazłem: http://code.google.com/p/cjwizard/


title: Kkursy, przewijanie multilinii, wskaźnik „bieżąca pozycja” i „wybrane pozycje”

text: Poszukuję wskazówek/pomysłów na najlepszy (najefektywniejszy) sposób przewijania elementów wielowierszowych, a także podkreślenie "bieżącego elementu" i "wybranych elementów", takich jak: 1 FOO ITEM 1 Foo sub-pozycja 2 Podpozycja Foo 3 Podpozycja Foo 2 BAR POZYCJA 1 Bar podpozycja 3 BAZ POZYCJA 1 Podpozycja Baz 2 Podpozycja Baz 4 RAB POZYCJA 5 ZZZ POZYCJA 1 Zzz Podpozycja 2 Zzz Podpozycja 3 Zzz pkt 4 Zzz podpunkt za pomocą _NCurses_ (jakaś kombinacja okien, podokien, podkładek, copywin? Uff! W rzeczywistości linie mogłyby przekraczać szerokość `stdscr`, więc możliwość przewijania w lewo/w prawo byłaby również przyjemna - pady?)... Całe pozycje (łącznie z podpunktami) mają być podkreślone jako obszary okien/padów o pełnej szerokości. Należy podkreślić "bieżącą pozycję" (w tym jej zestaw linii) (tj. używając `A_BOLD`), wybrany zestaw wybranych pozycji (w tym zestaw linii dla każdego wybranego elementu) należy wyróżnić w inny sposób (tj. używając „A_REVERSE”). Co wybrałbyś, aby poradzić sobie z tym najbardziej efektywnym sposobem NCurses? (Im mniej przerysowań/odświeżeń, tym lepiej, a terminal powinien mieć możliwość zmiany swojego rozmiaru - na przykład XTerm działający w ramach zarządzania "pływającym oknem".) Dziękuję za twoje pomysły (lub może jakiś fragment kodu, w którym coś podobnego już jest rozwiązany - nie udało mi się znaleźć niczego przydatnego w Internecie.To znaczy nie zamierzam kopiować/wklejać obcego kodu, ale programowanie NCurses _właściwie_ nadal jest dla mnie jakoś trudne). P.S.: Czy sugerowałbyś „gładkie przewijanie” linii ekranu +1/-1, czy raczej „skok-przewijanie” +linie/-linie elementów? (Osobiście wolę to drugie.) Z poważaniem, \-- mjf


title: Algorytm wykrywania okien w pomieszczeniu

text: ![tutaj podaj opis obrazka](http://i.stack.imgur.com/kvzbf.png) Mam do czynienia z następującym problemem i chciałem napisać pseudokod do opracowania algorytmu, który może być generyczny dla taki problem. Oto, co do tej pory wymyśliłem. **KROK 1** W tym kroku staram się umieścić robota tam, gdzie może być umieszczony w lewym górnym rogu. Skręć w lewo -> Jeśli nie wykryto okna lub ściany idź dalej o 1 jednostkę.. jeśli wykryto okno lub ścianę ->Skręć w prawo --> jeśli nie wykryto okna lub ściany idź dalej.. jeśli wykryto okno lub ścianę, lewy górny róg jest osiągnięty. **KROK 2** (Po przejściu do tego etapu zaczynamy liczyć okna, aby uniknąć pomyłek) Chciałbym zadeklarować zmienną o nazwie **obroty**, ponieważ pomoże mi to śledzić, czy robot okrążył całe pomieszczenie. Obroty = 4; Teraz jesteśmy zwróceni na północ i umieszczeni w lewym górnym rogu. while(obroty>0){ Jeśli wykryto okno lub ścianę (jeśli liczba okien++) Obróć w prawo Obróć--; While(detekcja!=ściana ||wykrywanie!=okno){ przesuń 1 jednostkę do przodu Skręć w lewo (jeśli liczba okien++) Skręć w prawo } } Wierzę w to, że robot obejdzie całe pomieszczenie i policzy okna i zatrzyma się raz okrążył cały pokój, gdy zwoje się zmniejszają. Uważam, że to nie jest najlepsze rozwiązanie i byłbym wdzięczny za sugestie, jak mogę ulepszyć mój pseudokod. Nie szukam żadnego kodu, tylko algorytmu do rozwiązania takiego problemu i dlatego nie zamieściłem tego w przepełnieniu stosu. Przepraszam, jeśli mój pseudokod jest źle napisany, proszę o sugestie, czy mogę to poprawić, ponieważ jestem w tym nowy. Dziękuję.


title: Od czego zacząć pisanie prostego środowiska Java?

text: Chciałbym rozpocząć pracę nad własnym niestandardowym IDE. Największym powodem, dla którego chcę pracować nad IDE, jest pomoc w zdobyciu jeszcze większego, bardziej intymnego zrozumienia Java (i innych języków, które do niego dodaję). Nie chcę robić niczego super wymyślnego ani rewolucyjnego, chciałbym bądź szczęśliwy, gdybym mógł stworzyć coś tak kompaktowego, jak BlueJ IDE, którego używałem w szkole średniej i bądź zadowolony. Mam kilka pytań dotyczących specyfiki zadania, które mam nadzieję, że uda mi się wyjaśnić, zanim zacznę w to inwestować czas: * Czy jest coś, o czym powinienem wiedzieć podczas pisania parsera? * Czy ktoś ma jakieś wskazówki, o których powinienem wiedzieć; pułapki, ceglane ściany lub inne ograniczenia?


title: Jaka jest właściwa nazwa tego wzorca projektowego w Pythonie?

text: Czy w Pythonie właściwa nazwa klasy PersonXXX znajduje się poniżej PersonProxy, PersonInterface itp.? importuj resztę klasy PersonXXX(object): def __init__(self,db_url): self.resource = rest.Resource(db_url) def create(self,person): self.resource.post(person.data()) def get(self ): pass def update(self): pass def delete(self): pass class Osoba(obiekt): def __init__(self,name, age): self.name = name self.age = wiek def data(self): return dict(imię=ja.imię,wiek=ja.wiek)


title: Aplikacje na iOS7 tylko przy użyciu iPada

text: Chciałbym tworzyć aplikacje na iOS, ale z powodu problemów budżetowych stać mnie tylko na iPada mini gen1 lub iPoda touch 5 gen. Czy mogę tworzyć aplikacje na wszystkie iPhone'y i iPady/iPody przy użyciu tylko jednego urządzenia? Kolejne pytanie brzmi, jak najnowszy iOS7 działa na iPadzie mini gen 1/iPod touch i jakie są ograniczenia podczas pracy z tymi urządzeniami w porównaniu z iPhonem (Moje docelowe aplikacje to ciekawostki i gry typu endless runner). Dzięki PS Mam Maca z xcode i teraz pracuję nad aplikacją kakaową i pytanie brzmi, czy mogę programować dla wszystkich urządzeń io7, używając tylko jednego oszustwa do końcowych testów.


title: Czy zawsze powinienem całkowicie hermetyzować wewnętrzną strukturę danych?

text: Proszę rozważyć tę klasę: class ClassA{ private Thing[] things; // przechowuje dane // rzeczy pominięte public Thing[] getThings(){ return things; } } Ta klasa udostępnia tablicę, której używa do przechowywania danych, dowolnemu zainteresowanemu kodowi klienta. Zrobiłem to w aplikacji, nad którą pracuję. Miałem klasę `ChordProgression`, która przechowuje sekwencję `Akordu` (i robi kilka innych rzeczy). Miał metodę `Chord[] getChords()`, która zwracała tablicę akordów. Kiedy struktura danych musiała się zmienić (z tablicy na ArrayList), cały kod klienta się zepsuł. To skłoniło mnie do myślenia - może następujące podejście jest lepsze: class ClassA{ private Thing[] things; // przechowuje dane // rzeczy pominięte public Thing[] getThing(int index){ return things[index]; } public int getDataSize(){ return things.length; } public void setThing(int index, Rzecz rzecz){ rzecz[indeks] = rzecz; } } Zamiast ujawniać samą strukturę danych, **wszystkie operacje oferowane przez strukturę danych są teraz oferowane bezpośrednio przez klasę ją obejmującą, przy użyciu publicznych metod, które delegują do struktury danych.** Gdy zmienia się struktura danych, tylko te metody muszą się zmienić - ale po ich zmianie cały kod klienta nadal działa. **Zauważ, że kolekcje bardziej złożone niż tablice mogą wymagać od otaczającej klasy implementacji nawet więcej niż trzech metod tylko w celu uzyskania dostępu do wewnętrznej struktury danych.** * * * Czy to podejście jest powszechne? Co o tym sądzisz? Jakie ma inne wady? Czy rozsądne jest, aby otaczająca klasa implementowała co najmniej trzy metody publiczne tylko w celu delegowania do wewnętrznej struktury danych?


title: Dlaczego funkcja nazywa się lseek(), a nie seek()?

text: Funkcja C służąca do wyszukiwania w pliku nazywa się lseek(). Dlaczego nie nazywa się to po prostu seek()?


title: Kto jest właścicielem praw autorskich do pliku poprawki?

text: Próbuję określić zgodność z OSS dla ciała kodu źródłowego, którego część zawiera sekcje z OpenEmbedded i zawiera wiele plików łatek, ponieważ (wydaje się) próbują zaadaptować różne narzędzia. W tych plikach łaty znajduję szereg możliwości związanych z prawami autorskimi * plik łaty usuwa kawałek kodu z oryginału, stąd 90% samego pliku łaty to oryginalny kod, więc plik łaty jest „pochodny”, a oryginalne prawa autorskie nadal stosuje się * w międzyczasie * plik łaty zawiera tylko kilka linijek aktualnych poprawek (lub jest głównie dodatkami) i ma dużą liczbę linijek jako komentarza wyjaśniającego, dlaczego jest to potrzebne. Przypisanie praw autorskich do tego pliku autorowi łatki, a nie oryginałowi, wydaje się słuszne. Jak należy zidentyfikować prawa autorskie osób pośrednich? Jakie linie można narysować? Narzędzie, którego używam, nalega na atrybucję na plik, więc oceniałem „stosunek wkładu” dla autorów oryginalnych/poprawek i wybierałem jednego. Czy to rozsądne/sprawiedliwe/prawne podejście? Ponadto: stosowałem doktrynę łączenia linii kontekstowych w pliku łatki (te linie wokół faktycznej zmiany). Stąd wykluczenie ich z „jaki stosunek jest oryginalny do łatki?”) i to ma tendencję do odchylania stosunku w stronę autora łatki, a nie oryginalnego autora – czy to sprawiedliwe?


title: W jakich typach środowisk programistycznych zarządzanie reaktywne jest lepsze niż zarządzanie proaktywne?

text: Wydaje się, że prawie wszyscy zgadzają się, że zarządzanie reaktywne jest gorsze niż zarządzanie proaktywne; jednak wydaje mi się, że ciągle spotykam się z zarządzaniem reaktywnym u menedżerów ds. rozwoju. Logika sugerowałaby, że zarządzanie reaktywne przynosi pewne korzyści, ponieważ jest tak często obserwowane. Zwykle widzę tylko negatywne problemy wynikające z tego rodzaju zarządzania, ale mogę być naiwny. W jakich środowiskach/sytuacjach programistycznych zarządzanie reaktywne byłoby korzystne?


title: Interfejsy kolekcji w C#, pochodzące z Javy

text: W Javie jestem przyzwyczajony do deklarowania kolekcji przy użyciu możliwie najbardziej abstrakcyjnego interfejsu, a następnie konstruowania ich przy użyciu konkretnej implementacji, która ma sens w danym momencie. Zwykle wygląda to mniej więcej tak: public class MyStuff { private Mapa<String, Address> customerAddresses; prywatne zadania Lista<ToDoItem>; prywatne Ustaw<Osoba> osób; public MyStuff() { customerAddresses = new HashMap<String, Address>(); task = new ArrayList<ToDoItem>(); ludzie = new HashSet<Osoba>(); } } Pozwala mi to na większą elastyczność późniejszej zmiany implementacji kolekcji, gdy wszystko, na czym naprawdę polegam, to interfejs wysokiego poziomu (tj. potrzebuję czegoś do przechowywania par klucz-wartość lub czegoś do przechowywania uporządkowanych danych) i jest to ogólnie uważane za standardowe "najlepsze praktyki" w Javie. Po prostu zaczynam programować w C# i nie jestem pewien, czy istnieje równoważna praktyka dla hierarchii kolekcji C#. Kolekcje w C# różnią się od kolekcji w Javie na kilka sposobów: `Collection` jest typem konkretnym, interfejs `ICollection` udostępnia metody podobne do `Set` w Javie, podczas gdy interfejs `ISet` określa dużo więcej funkcji, a zestaw kluczy lub zestaw wartości `Słownik` nie jest `ISet`, żeby wymienić tylko kilka. Czy ma sens robienie czegoś takiego w C#? public class MyStuff { private IDictionary<String, Address> customerAddresses; prywatne zadania IList<ToDoItem>; prywatne osoby ISet<Person>; public MyStuff() { CustomerAddresses = new Dictionary<String, Address>(); zadania = new List<ToDoItem>(); ludzie = new HashSet<Osoba>(); } } A może istnieją różne "standardowe" interfejsy i implementacje, których można używać dla takich kolekcji? Czy powinienem używać `ICollection` i `Collection` zamiast `Set`, czy `List`? Mam pokusę, aby użyć klas i interfejsów C#, które "wyglądają najbliżej" tych Java, do których jestem przyzwyczajony, ale wolę użyć konfiguracji, która lepiej pasuje do paradygmatów i standardów C#.


title: Dlaczego nie możemy programować bez kompilacji (używając IDE/debuggera)?

text: Uważam za bardzo interesujące, że nawet ludzie, którzy projektują konkretny framework, nadal muszą polegać na kompilacji, aby upewnić się, że kod jest poprawny. Nie mam na myśli 100s linii kodu, ale 2-10 linii. Mówię to, ponieważ wspominają, że kod, który napisali, może nie skompilować/działać, ponieważ nie został przetestowany. Ale dlaczego nie możemy napisać nawet najbardziej podstawowego kodu bez polegania na kompilacji? Czy to z powodu języków czy frameworków? A może dlatego, że za bardzo przyzwyczailiśmy się do używania IDE? Nie jestem przeciwny temu, tylko zastanawiam się nad przyczynami.


title: Dobre praktyki wdrażania maperów w aplikacji wielowarstwowej

text: Podczas pracy z aplikacją wielowarstwową bardzo często napotykasz zadanie konwersji obiektów z jednej warstwy na obiekty z innej warstwy. Może to być konwersja obiektów bazy danych na obiekty domeny, obiektów usług na obiekty domeny, obiektów domeny na modele widoku itp. Widziałem to na wiele sposobów, w tym: 1. Konwersja in-line 2. Tworzenie klasy translatora ze statycznymi metodami pomocniczymi 3. Używanie metod rozszerzających w celu uproszczenia konwersji 4. Nadpisywanie operatorów rzutowania 5. Tworzenie oddzielnych klas mapperów dla każdej możliwej translacji 6. Wykorzystanie rozwiązań takich jak automapper Jaki byłby "właściwy" sposób obsługi tego. Aplikacja, z którą obecnie pracuję, wykorzystuje osobną klasę mapperów dla każdego możliwego tłumaczenia i chociaż ma zalety testowalności, używamy wstrzykiwania zależności i musimy przekazać wszystkie te mapery jako zależności w konstruktorze. Czy ktoś wymyślił lepszy sposób na zrobienie tego? **UPDATE** Używam tutaj stosu .NET (EF + Business Layer + MVC)


title: Projekt biblioteki: zapewnij wspólny plik nagłówkowy lub wiele nagłówków

text: Zasadniczo istnieją dwa obozy projektantów bibliotek dotyczące projektowania końcowego dołączania pliku nagłówkowego: * Zapewnij pojedynczy plik nagłówkowy, który zawiera każdy inny plik nagłówkowy tworzący publiczne API. Na przykład GTK+ dyktuje, że dołączane będą tylko `gtk.h`. To _nie_ oznacza, że wszystko jest jawnie zapisane w tym wspólnym pliku nagłówkowym. * Poproś użytkownika o dołączenie pliku nagłówkowego, którego funkcjonalność najbardziej go interesuje. Najbardziej widocznym przykładem jest standardowa biblioteka, w której musi dołączyć `stdio.h` dla I/O, `string.h` do manipulacji ciągami itp. , zamiast zwykłego `std.h` Czy istnieje preferowany sposób? libabc nie udziela żadnych porad w tej sprawie, natomiast odpowiedź na podobne pytanie sugeruje, aby je rozdzielić, ale nie wyjaśnia, dlaczego.


title: Dlaczego e-maile wysyłane z mojej witryny trafiają do folderów SPAM?

text: Zajmuję się tworzeniem strony rejestracji kursów w Django. Nowi użytkownicy muszą potwierdzić swój adres e-mail, klikając link przesłany do nich e-mailem. Niestety, ta wiadomość stale trafia do folderów spamu użytkowników. Jakie kroki mogę podjąć, aby temu zapobiec? Czy powinienem dołączyć akapit rezygnacji z subskrypcji? Czy powinienem wysyłać mniej poczty masowej z mojej witryny (od czasu do czasu wysyłam wiadomość na 500 e-maili).


title: Czy istnieje korelacja między rodzajem firmy/branży a rygorem inżynierii oprogramowania?

text: Chciałbym, aby odpowiedź wyjaśniła, jaki wpływ, jeśli w ogóle, ma rodzaj firmy/branży na rygor, głębokość i szerokość praktyki inżynierii oprogramowania. Najlepiej byłoby kilka linków wspierających odpowiedź referencjami. Jako punkt kontrolny przyjmijmy założenie, że firma, która podąża za SWEBOK lub CMMI (dowolny poziom) robi 100% (najlepiej), a firma, która w ogóle nic nie przestrzega, to 0% (najgorzej). Czy byłoby możliwe dowiedzieć się, jakie firmy lub jakie branże uzyskują najwyższe, średnie i najniższe wyniki? **EDYTUJ:** CMMI (dowolny poziom) odnosi się do każdej organizacji, która posiada certyfikat CMMI. **EDYTUJ 2:** Środkowy akapit określa, że firma, która przestrzega pewnych rygorystycznych standardów inżynierii oprogramowania, powinna uzyskiwać wyższe wyniki niż firma, która tego nie robi. **EDYTUJ 3:** SWEBOK to nie tylko porządkowanie treści. Robi znacznie więcej, tzn. **SWEBOK charakteryzuje zawartość wiedzy z zakresu inżynierii oprogramowania**. **SWEBOK promuje spójny pogląd na inżynierię oprogramowania na całym świecie**, co jest głównym punktem. Skierowany jest zarówno do praktyków, jak i naukowców, osób i organizacji. Na przykład zobacz WPBiO i rozważ firmy, które ich zatrudniają. Są to firmy, które podążają za SWEBOK. **EDYTUJ 4:** Pamiętaj, że odpowiedź powinna nam powiedzieć o branżach lub firmach, które przestrzegają pewnych rygorystycznych standardów inżynierii oprogramowania z zalecaną głębią i oddechem, oraz o tych, które tego nie robią. Jaka jest korelacja między rodzajem firmy/branży a rygorem inżynierii oprogramowania? Wrzucenie kilku linków w celach informacyjnych byłoby świetne.


title: Zasoby do małych ćwiczeń programistycznych

text: > **Możliwe duplikaty:** > Książki lub strony internetowe zawierające proste problemy z programowaniem? Czy są jakieś zasoby, które oferują małe ćwiczenia programistyczne? Szukam problemów, które są stosunkowo niewielkie, ale w ten czy inny sposób obciążają. Byłoby dobrze, gdyby problemy koncentrowały się na konkretnych obszarach umiejętności – tj. algorytmie, logice, rozwiązywaniu problemów, wydajności itp. Tak, aby można je było dobierać do celu. Szukam jednego programu na kilka dni, który mógłbym wykorzystać do poprawy moich umiejętności programistycznych. Również staram się nauczyć tdd i te ekscesy też mi w tym pomogą. Co kilka dni staram się myśleć o problemach i wolałbym ćwiczenia, o których wiadomo, że rozwijają określone umiejętności programistyczne.


title: Zawijanie prymitywów w celu umożliwienia zwracania wartości null — zła praktyka?

text: Często kusi mnie, aby zawijać liczby całkowite itp. wyłącznie w celu pisania metod, które mogą zwrócić `null`. Negatywne 1 może działać w wielu przypadkach, ale zbyt często (zwłaszcza w dźwięku) jest to prawidłowa wartość zwracana. Często, aby obejść ten problem, zwracam referencję do większego obiektu, który zawiera dany prymityw i wywołuję metodę pobierającą. Wydaje się to mniej wydajne niż opakowanie, aw niektórych przypadkach mniej hermetyzujące. Czy z tego powodu są jakieś kary za owijanie? Czy ktoś to robi? Czy to pachnie?


title: Czy podklasa metody Factory jest w istocie podklasą fabryki abstrakcyjnej?

text: Czy słuszne jest stwierdzenie, że metoda fabryki jest zasadniczo tylko szczególnym przypadkiem fabryki abstrakcyjnej, która produkuje jedyny obiekt, a nie grupę? Wiem, że klasyczne realizacje zakładają odmienność architektoniczną, ale celem wzoru jest nie tylko konkretna realizacja, ale konceptualna abstrakcja, prawda?


title: Dlaczego wzorzec Factory Method nie może utworzyć rodziny obiektów?

text: Istnieją dwie główne różnice pomiędzy wzorcami projektowymi Factory Method i Abstract Factory. Różnica 1 polega na tym, że metoda fabryczna opiera się głównie na dziedziczeniu. Klasa w pewnym sensie wykorzystuje swoją podklasę do tworzenia obiektów. Tworzone obiekty zależą od używanej podklasy. Podczas gdy Fabryka abstrakcyjna jest oparta na dziedziczeniu, ale w pewnym sensie również na kompozycji - Klient "posiada" instancję Fabryki Abstrakcyjnej, która przechowuje fabrykę betonu. Różnica 2 polega na tym, że Factory Method tworzy jeden obiekt, podczas gdy Abstract Factory tworzy rodzinę powiązanych obiektów. Różnica 1 Rozumiem (chociaż mam problem ze zrozumieniem, dlaczego ktoś wolałby podklasę klasy, która potrzebuje fabryki, zamiast po prostu „dawać” jej fabrykę za pomocą składu [chyba że ta klasa ma już podklasę]). Ale różnicy 2 nie rozumiem. Dlaczego Factory Method nie może stworzyć rodziny produktów zamiast jednego produktu? Z pewnością może zwrócić szereg produktów z tej samej rodziny. Wszystkie te produkty mają wspólny interfejs — metoda może zwrócić tablicę tego typu. Dlaczego mówi się, że ta metoda wytwarza tylko jeden produkt? Dodatkowo metoda fabryczna wewnątrz konkretnej podklasy fabryki abstrakcyjnej tworzy różne produkty przy użyciu różnych metod, które są wywoływane przez klienta. Dlaczego fabryka betonu we wzorcu Factory Method nie może zrobić tego samego? Masz różne metody fabryczne dla różnych produktów?


title: Dlaczego powinniśmy budować z najwyższym poziomem ostrzeżenia w .NET?

text: Słyszałem, że musimy budować na najwyższym poziomie ostrzegawczym. **Czy to prawda? dlaczego?** I **jak zmienić domyślny poziom ostrzegania .NET?**