title: Jak nazwać funkcję zacisku, która zaciska tylko z jednej strony?

text: Clamp() to funkcja, która zapewnia, że podana zmienna znajduje się w podanym zakresie. Możesz znaleźć taką funkcję w .NET, w Unity i prawdopodobnie wszędzie. Chociaż jest to przydatne, często muszę ograniczać swoją wartość tylko z jednej strony. Na przykład, aby upewnić się, że float jest zawsze nieujemna lub zawsze dodatnia (jak wartość promienia z inspektora). Użyłem nazw ClampFromAbove() i ClampFromBelow(), ale zastanawiam się, czy takie nazwy są dobre, a nawet poprawne gramatycznie w języku programowania. Ponadto prawdopodobnie sensowne jest również rozróżnienie przypadków nieujemnych. Jak nazwałeś taką funkcję? Coś takiego jak Zapewnienie Nieujemne()? Moim zamiarem jest stworzenie pary metod rozszerzających i używanie ich w następujący sposób: var normalizedRadius = originalRadius.ClampFromBelow(0.0001); var distance = someVector.Magnitude.ClampFromAbove(maxDistance);


title: Jaki zestaw umiejętności powinien posiadać każdy programista kończący studia?

text: Mieliśmy gościnnego wykładowcę w naszej szkole, który rozmawiał z tymi, którzy kończą studia i nie osiągają poziomu umiejętności, którego oczekuje, tj. znajomość jednego powszechnie skompilowanego języka, takiego jak Java, C++ lub C#, jednego języka skryptowego, takiego jak Python lub Ruby, jednego frameworka webowego. Jakie są inne umiejętności, które według was powinny być absolutnie kluczowe dla ukończenia studiów?


title: Jak projektuje się gry wieloosobowe?

text: Jeśli każdy gracz ma swój własny awatar, który może poruszać się, skakać i wykonywać akcje na rzeczach na świecie (powiedzmy, pudełka). Jak to jest obsługiwane? Czy klienci wysyłający polecenia do serwera i otrzymujący w odpowiedzi aktualny stan świata to opłacalny projekt?


title: Projektowanie idealnego dosłownego zakresu

text: Zastanawiałem się, jak zaprojektować „doskonały” dosłowny zakres, gdybym miał zaprojektować język. Dla tych, którzy nie znają, znacie literał zakresu w wyrażeniu, które reprezentuje zakres wartości, na przykład 1-4. Są one najczęściej używane w pętlach for/foreach. Wydaje się, że należy wziąć pod uwagę kilka kwestii * Obsługa zakresów inkluzywnych i wykluczających, łączenie +1 lub -1 do punktów końcowych wydaje się nieco niekonsekwentne i podatne na błędy. * Obsługa stopniowania, dzięki czemu można na przykład utworzyć zakres liczb parzystych lub nieparzystych * Czytelność, powinno być łatwo widoczne, co opisuje literał zakresu * Jednoznaczność, powinno być całkowicie jednoznaczne, co opisuje literał zakresu * Domyślna wartość prawdopodobnie powinna wynosić od inkluzywnych do wyłącznych, ponieważ jest to używane w większości przypadków do zapętlania się po tablicach itp. W każdym razie, jednym z przykładów literału zakresu, który widziałem, jest Ruby, który ma postać 1..3 dla wyłącznego (na końcu) zakresu i 1...3 włącznie (na końcu). Możesz także wykonać 1..10.step(5). Po dokładnym rozważeniu znalazłem jednak kilka rzeczy, które mi się nie podobały w tym podejściu (z mojej ograniczonej wiedzy o rubinach) 1. Na koniec możesz opisać tylko inkluzywne i ekskluzywne. Przy opisie większości scenariuszy wydaje się to trochę niespójne. 2. Różni się tylko dodatkowym . wydaje się być receptą na utrudnienie stwierdzenia, czy asortyment jest inkluzywny czy ekskluzywny. Nie wiem jak wy, ale kropki stają się czymś rozmytym :) 3. Dodanie metody takiej jak notacja dla zakresów wydaje się mieszać pojęcie dosłowu z pojęciem klasy, która wydaje się nieco niespójna (nawet jeśli zakresy są kompilowane do klasy) W każdym razie, po rozważeniu różnych alternatyw. Wymyśliłem to * **[5..1]** 5,4,3,2,1 * **[1..5[** 1,2,3,4 * **]1.. 5]** 2,3,4,5 * [ **0..5..20]** 0,5,10,15,20 i tak dalej. Podoba mi się to, ponieważ [ normalnie oznacza zestaw i to tak jakby do tego pasuje, mimo że to w przeciwieństwie do zestawu byłoby uporządkowane. Jedną rzeczą, o którą jestem trochę rozdarty, jest to, czy wskaźniki wyłączności/włączenia są obowiązkowe lub nie, np. jeśli piszesz tylko 1..5, domyślnie będzie to 1,2,3,4, ponieważ jest to najczęstszy przypadek z tablicami itp. Jest łatwiejszy i bardziej czytelny, ale mniej szczegółowy i jeśli musiałbyś pisać [1..5[, dowiesz się wcześnie o tym, jak działają. Więc jak myślisz, czy omówiłem większość zasad, przeoczyłem coś? czy uczyniłbyś [] obowiązkowym? Czy zaprojektowałbyś inaczej literały zakresu w swoim języku programowania? **Kandydaci** * styl nawiasu: **[0..10[** , z krokiem: **[0..5..20[** * zapis interwałowy: **[0..10)** z krokiem: **[0..5..20)** * wykrzyknik dla exlusive. 0..!10, z krokiem: **0..5..!20** * z innym krokiem. 0..!20, 5 * jednak to sprawiłoby, że domyślne * _0..10'_ inclusive-inclusive * wordy: [0 do !20 przez 5] Muszę powiedzieć, że moim ulubionym pod względem estetycznym jest **0. .!10** i **0..5..!20** , chciałbym tylko, aby domyślna **0..10** inclusive-exclusive była bardziej logiczna


title: Biblioteka nazewnicza, która generuje JSON-req do REST-API?

text: Jak nazwałbyś bibliotekę, która generuje JSON-req do REST-API, aby po prostu pracować na poziomie obiektu w celu utworzenia żądania? Wiele firm chce zdefiniować go jako SDK, ale czy jest to odpowiednia definicja dla tego prostego zadania?


title: Jak ma się monada Maybe do typu opcji?

text: Robiłem prezentację na temat F# i omawiałem typ Option, gdy ktoś z publiczności zapytał mnie, czy typ Option jest implementacją monady może w F#. Wiem, że tak nie jest, ale chciałem zapytać, jak te dwie koncepcje są powiązane. Chodzi mi o to, że wydaje mi się, że typ opcji może być wynikiem działania monady może, ale tego nawet nie jestem pewien. Czy ktoś mógłby wyjaśnić związek między monadą być może a typem opcji w tych językach funkcjonalnych, które ją obsługują?


title: Utwórz instancję odpowiedniej klasy na podstawie niektórych danych wejściowych

text: Próbuję zrozumieć, jak "przełącznik jako zapach kodu" ma zastosowanie, gdy właściwa ścieżka kodu jest określana przez jakiś obserwowalny fragment danych. Mój obiekt Webapp ustawia wewnętrzny obiekt „host” na podstawie nazwy hosta bieżącego żądania. Każda podklasa hosta odpowiada jednej możliwej nazwie hosta i konfiguracji aplikacji: WwwHost, ApiHost itp. W jaki sposób podklasa hosta przyjmuje odpowiedzialność za określoną nazwę hosta w sposób OOP, a Webapp otrzymuje instancję odpowiedniej podklasy? Obecnie sprawdzanie nazwy hosta i tworzenie wystąpienia hosta istnieje w obiekcie Webapp. Mógłbym przenieść test do metody statycznej w ramach podklas hosta, ale nadal musiałbym wyraźnie wymienić te podklasy w aplikacji internetowej, chyba że dokonam dalszej restrukturyzacji. Wygląda na to, że każde rozwiązanie będzie wymagało dodania nowych podklas do jakiejś scentralizowanej listy.


title: Dlaczego nie mieć systemu operacyjnego opartego na języku wysokiego poziomu? Czy języki niskiego poziomu są bardziej wydajne?

text: Bez arogancji chciałbym, żebyście rozważyli taką możliwość. Większość dzisiejszych systemów operacyjnych jest oparta na językach całkiem niskiego poziomu (głównie C/C++) Nawet nowe, takie jak Android, używa JNI, a podstawowa implementacja jest w C W rzeczywistości (to osobista obserwacja) wiele programów napisanych w C działa znacznie szybciej niż ich odpowiedniki wysokiego poziomu (np.: Transmission (klient bittorrent na Ubuntu) jest dużo szybszy niż Vuze (Java) czy Deluge (Python)). Nawet kompilatory Pythona są napisane w C, chociaż PyPy jest wyjątkiem. Czy jest więc jakiś szczególny powód? Dlaczego wszystkie nasze tak zwane "języki wysokiego poziomu" ze świetnymi koncepcjami "OOP" nie mogą być użyte do stworzenia solidnego systemu operacyjnego? Więc mam zasadniczo 2 pytania. 1. Dlaczego aplikacje napisane w językach niskiego poziomu są wydajniejsze niż ich odpowiedniki HLL? Czy języki niskiego poziomu działają lepiej z tego prostego powodu, że są na niskim poziomie i łatwiej są tłumaczone na kod maszynowy? 2. Dlaczego nie mamy pełnoprawnego systemu operacyjnego opartego w całości na języku wysokiego poziomu?


title: .Net C# Zdalne wywoływanie metod (RMI) (komunikacja klient/serwer)

text: Czym dokładnie jest **C#** wersja **Java RMI**? Chcę wywołać metody klienta z serwera, pingować klienta z serwera itp. Jak odbywa się komunikacja z serwerem i klientem za pomocą c#?


title: Wewnętrzna mutacja trwałych struktur danych

text: Aby wyjaśnić, kiedy mam na myśli użycie terminów _trwały_ i _niezmienny_ na strukturze danych, mam na myśli to, że: 1. Stan struktury danych pozostaje niezmieniony przez cały okres jej istnienia. Zawsze przechowuje te same dane, a te same operacje zawsze dają te same wyniki. 2. Struktura danych umożliwia „Dodaj”, „Usuń” i podobne metody, które zwracają nowe obiekty tego rodzaju, zmodyfikowane zgodnie z instrukcją, które mogą współdzielić niektóre dane oryginalnego obiektu lub nie. Jednak chociaż struktura danych może wydawać się użytkownikowi trwała, może wykonywać inne rzeczy pod maską. Dla pewności wszystkie struktury danych są wewnętrznie, przynajmniej gdzieś, oparte na pamięci mutowalnej. Jeśli miałbym oprzeć trwały wektor na tablicy i skopiować go za każdym razem, gdy wywoływane jest polecenie „Dodaj”, nadal byłby on trwały, o ile modyfikuję tylko lokalnie utworzone tablice. Czasami jednak można znacznie zwiększyć wydajność, mutując strukturę danych pod maską. W bardziej, powiedzmy, podstępny, niebezpieczny i destrukcyjny sposób. Sposoby, które mogą pozostawić abstrakcję nietkniętą, nie informując użytkownika o jakichkolwiek zmianach w strukturze danych, ale są krytyczne na poziomie implementacji. Załóżmy na przykład, że mamy klasę o nazwie `ArrayVector` zaimplementowaną przy użyciu tablicy. Za każdym razem, gdy wywołasz `Add`, otrzymasz kompilację `ArrayVector` nad nowo przydzieloną tablicą, która ma dodatkowy element. Sekwencja takich aktualizacji obejmie `n` kopii tablicy i alokacje. Oto ilustracja: ![tutaj podaj opis obrazka](http://i.stack.imgur.com/ywLvk.png) Załóżmy jednak, że zaimplementowaliśmy leniwy mechanizm, który przechowuje różnego rodzaju aktualizacje, takie jak `Dodaj `, `Set` i inne w kolejce. W takim przypadku każda aktualizacja wymaga stałego czasu (dodanie elementu do kolejki) i nie jest zaangażowana alokacja tablicy. Kiedy użytkownik próbuje pobrać element z tablicy, wszystkie modyfikacje w kolejce są stosowane pod maską, co wymaga pojedynczej alokacji i kopii tablicy (ponieważ dokładnie wiemy, jakie dane będzie przechowywać ostateczna tablica i jak duża będzie). Przyszłe operacje pobierania będą wykonywane na pustej pamięci podręcznej, więc zajmą jedną operację. Ale aby to zaimplementować, musimy „przełączyć” lub zmutować wewnętrzną tablicę na nową i opróżnić pamięć podręczną – bardzo niebezpieczne działanie. Jednak biorąc pod uwagę, że w wielu okolicznościach (w końcu większość aktualizacji będzie następować po kolei), może to zaoszczędzić sporo czasu i pamięci, może się to opłacać - będziesz musiał zapewnić wyłączny dostęp do stanu wewnętrznego, oczywiście. To nie jest pytanie o skuteczność takiej struktury danych. To bardziej ogólne pytanie. Czy jest kiedykolwiek dopuszczalne mutowanie wewnętrznego stanu rzekomo „trwałego” lub „niezmiennego” obiektu w destrukcyjny i niebezpieczny sposób? Czy wydajność to uzasadnia? Czy nadal mógłbyś nazwać to niezmiennym? Aha, a czy mógłbyś zaimplementować tego rodzaju lenistwo _bez_ mutowania struktury danych w określony sposób?


title: Jak zrobić TDD, gdy oczekiwane zachowanie ma zostać zmienione?

text: Robiłem TDD z projektem, nad którym pracuję i mam dość dużą liczbę testów. Mam sporo automatycznych testów dotyczących ograniczeń wymuszanych w kodzie, upewniając się, że rzeczy, które nie powinny być dozwolone, nie są dozwolone. Teraz powiedziano mi, że ze względu na zmiany w naszym modelu licencjonowania niektóre z tych ograniczeń muszą zostać usunięte. Ponieważ wykonałem cały projekt przy użyciu TDD, nie jestem pewien, jak dokonać takiej zmiany również przy użyciu sposobu myślenia TDD. **Więc moje pytanie brzmi:** Czy wprowadzam zmiany w zapleczu i sprawdzam, które testy się psują, czy też staram się znaleźć testy, które wymuszają zachowanie i najpierw je zmienić? Obawiam się, że jeśli są operacje A, B, C i D, w których wykonywana jest kontrola uniemożliwiająca zachowanie, i mam równoważne testy TestA, TestB, TestC i TestD (prawdopodobnie w różnych miejscach) bez względu na to, którą połowę zmienię po pierwsze, mogę przegapić jedno lub dwa punkty i skończyć z niewłaściwym zachowaniem, ale nadal wszystkie testy zdają (np. co jeśli przegapię TestD?)


title: Elementy blokowe a elementy wbudowane w HTML: po co to rozróżnienie?

text: Rozróżnienie między elementami blokowymi i liniowymi zawsze wydawało mi się dziwne. Cała różnica polega na tym, że element blokowy zajmuje całą szerokość, wymuszając w ten sposób łamanie linii przed i po elemencie, a element śródliniowy zajmuje tylko tyle, ile zawartość. Dlaczego nie mieć tylko jednego typu elementu — elementu wbudowanego, w którym można również zastosować niestandardową wysokość/szerokość i użyć tego? Chcesz łamać linie? Wstaw `<br />`, a może dodaj specjalny znacznik w CSS dla tego zachowania. Tak jak jest teraz, nie widzę w tym żadnego problemu, a zamiast tego wymusza tylko właściwość, o której moim zdaniem powinien decydować projektant. Dlaczego więc te dwa typy?


title: Algorytm obciążenia zespołu

text: **TL;DR** To pytanie dotyczy algorytmów, których można użyć w określonych przypadkach użycia, które wyjaśniono poniżej. * * * Wyobraź sobie taką sytuację w systemie zarządzania projektami (opartym na Agile): Deweloperzy - Jan - Suzy Testerzy - Jan - Katy Więc John jest w obu zespołach. Załóżmy, że są też dwa równoległe projekty: Projekt 1 - Zadanie 1 (2 godziny) - Testerzy - Kolejne zadanie (4 godziny) - Deweloperzy - Ostatnie zadanie (2 godziny) - Suzy Projekt 2 - Jakieś zadanie (4 godziny) - Jan - Inne zadanie (2 godz.) - Testerzy - Również zadanie (4 godz.) - Katy Powiedzmy, że dla każdej osoby zdefiniowane są dostępne godziny: Jan: 8 godzin Katy: 4 godziny Suzy: 10 godzin Teraz chcę obliczyć optymalne nakłady pracy dla każdego osoba/zespół. Komplikuje to fakt, że osoby mogą być w więcej niż jednym zespole i że zadania mogą być przydzielane zarówno zespołom, jak i poszczególnym osobom. Użytecznym wynikiem tego mogą być następujące przykładowe statystyki: Jan: 150% obciążenia Katy: 150% obciążenia Suzy: 60% obciążenia Może to być użyte do dostrojenia ilości zadań w ramach jednego sprintu w celu dopasowania do określonego okresu czasu. * * * Czy ktoś zna algorytm stworzony dla tego rodzaju problemu?


title: Wiele procesów świadomych siebie nawzajem

text: Mam nadzieję, że możesz mi w tym pomóc, dużo szukałem i naprawdę nie wiedziałem, co tu robić. Tworzę program w C i muszę go uruchamiać wiele razy, ile potrzebuję. Więc będzie tak jak poniżej, proces 1 obsługuje wszystkie wiersze w tabeli DB test, gdzie process_flag=1 proces 2 obsługuje wszystkie wiersze w tabeli DB test, gdzie flaga_procesu=2 proces 3 obsługuje wszystkie wiersze w tabeli DB test, gdzie flaga_procesu=3 i tak dalej Jak mogę sprawić, aby procesy były świadome siebie nawzajem, aby jeśli proces 3 ulegnie awarii, procesy 2 i 3 zaczną działać z parametrem process_flag=3?


title: VB.NET - Algorytm generowania kluczy szeregowych (szyfrowanie, haszowanie, kodowanie?)

text: Próbuję stworzyć podstawowy system licencjonowania, w którym pobieram unikalny identyfikator z komputera klienckiego i otrzymuję ten ciąg szesnastkowy (usuwane myślniki, np. "84-18-CE-...."): > > "8418CFEE73FA22E6AB0760C73A496497C6C347DA88A9F63B95FE1E1D6AA350AC3AC4EC077" zakodowane tylko w tym formacie, aby wydłużyć identyfikator. Zasadniczo to, co próbowałem zrobić (bez powodzenia), to stworzyć jakąś procedurę, która może przekształcić ten ciąg w ciąg o długości 25 znaków (bez myślników), taki jak ten poniżej: **`"H8G02-J8293-L02O9 -S920Q-F8D9X"`** _(Klucz alfanumeryczny z cyframi lub literami bez określonego wzoru, najlepiej litera, cyfra, litera lub odwrotnie)_ Po prostu nie wiem, jak mógłbym następnie zweryfikować ten klucz, abym mógł wyodrębnić nieprzekształcony ciąg Hex, od którego zaczęliśmy. * Pamiętaj, że oryginalny ciąg szesnastkowy nie zawsze będzie tej samej długości. Również procedura, która przekonwertuje DOWOLNY ciąg na taki format (alfanumeryczny, tylko wersaliki) będzie akceptowalna. * Właśnie zdałem sobie sprawę, że być może nie jest to możliwe (skrócić ciąg do 25 znaków i nadal zachować informacje (głupie, wiem). Teraz zaakceptuję wszystko, co pozwoli mi stworzyć 25-znakowy LUB DŁUŻSZY ciąg, z którego mogę wybrać 25 znaków.


title: Interpolator łańcuchów Scala: funkcja ad-hoc ogólnej konstrukcji?

text: W Scali 2.10 dodano nową funkcję **interpolatora ciągów** (patrz tutaj). Na przykład val name = "James" println(s"Hello, $name") // Witaj, James Nie jest dla mnie jasne, czy ta funkcja jest dodatkiem ad hoc, czy też jest cukrem składniowym dla innych, więcej ogólna konstrukcja. Jedyną rzeczą, o której mogę pomyśleć, jest to, że kompilator zamienia literał ciągu, taki jak s"Hello, $name" na wyrażenie, takie jak "Hello, " + nazwa, ale mimo to wydaje mi się to bardzo szczególne traktowanie literałów ciągu (zobacz także powiązane pytanie dotyczące literałów XML). A może jest to konkretne zastosowanie jakiejś bardziej ogólnej konstrukcji Scali? **EDYTUJ** Dziękujemy za opinię. Przeczytałem cały artykuł, ale prawdopodobnie moje streszczenie nie było wystarczająco dokładne, przez co sens mojego pytania był niejasny. Dzięki Jörgowi za dobre podsumowanie. Zastanawia mnie, że kompilator rozwija specjalny literał ciągu do wyrażenia, które zawiera nazwy zdefiniowane **wewnątrz** samego ciągu. Wynikowe wyrażenie musi zostać ponownie skompilowane, aby sprawdzić, czy nazwy argumentów używanych do wywoływania instancji „StringContext” są zdefiniowane w bieżącym zakresie leksykalnym. Dla mnie wygląda to na rodzaj wstępnego przetwarzania (pierwszy przebieg: rozwiń specjalne literały, drugi przebieg: skompiluj), ponieważ wartość tokena `s"Hello, $name"` jest wstępnie przetwarzana i rozwijana w całe poddrzewo drzewo składni. Rozszerzenie to jest wbudowane w kompilator: o ile wiem, nie można go zdefiniować w kategoriach samego języka za pomocą bardziej prymitywnych funkcji, przyjmując jako dane wejściowe literał ciągu znaków **tak jak jest**, ponieważ nazwy zdefiniowane wewnątrz ciąg znaków musi zostać wyodrębniony i zinterpretowany jako zmienne z zakresu leksykalnego. Na przykład (o ile dobrze rozumiem) nie można wywołać metody Scali z napisem „Hello, $name” i dowiedzieć się, że w zakresie leksykalnym wyrażenia, w którym została wywołana metoda, znajduje się zmienna `name`. Dlatego to kompilator musi napisać StringContext("Hello").s(name), a następnie ponownie skompilować wynik, sprawdzić, czy zmienna `name` istnieje i wygenerować odpowiednie wywołanie metody. Podsumowując, uważam, że to odniesienie do zmiennej w zakresie leksykalnym z dosłownego ciągu znaków jest bardzo dziwne, wydaje się, że coś się dzieje na innym poziomie języka. Nie wiem, jak lepiej to wytłumaczyć.


title: Status języków opartych na stosie

text: Ostatnio zaciekawił mnie Factor, który, o ile rozumiem, jest najbardziej praktycznym językiem opartym na stosie. Wydaje się, że obecnie Forth nie jest zbyt często używany - myślę, że to dlatego, że miał być używany samodzielnie, zamiast wewnątrz systemu operacyjnego, chociaż porty oczywiście istnieją. Jest też dość niski. Radość jest w zasadzie martwa, gdyż autor stwierdził, że nie ma sensu jej utrzymywanie mimo przyjęcia Faktora. Faktem jest, że sam Factor nie wydaje się dziś zbyt rozwinięty. Repozytorium GitHub nie wydaje się zbyt aktywne, a wiele rzeczy marnieje w „unmantained”. Czy są więc inne języki tego typu, które są bardziej aktywnie utrzymywane? Czy są używane w produkcji?


title: Dlaczego DrRacket IDE traktuje niektóre identyfikatory jako „symbole”, a inne jako „słowa kluczowe”? Jaka jest różnica?

text: Dlaczego DrRacket (rodzaj Scheme) IDE wyróżnia niektóre identyfikatory jako „słowa kluczowe” (na przykład „definiuj”, „lambda”, „wyślij*”), a inne jako „symbole” (identyfikatory zdefiniowane przez użytkownika, „+” , „-”, „abs”, „wyślij”, „wyślij+” itd.)? Jestem szczególnie zdezorientowany różnicą między `send*` a `send+`. Dla odniesienia, oto początki ich definicji: (define-syntax (send* stx) ... (define-syntax (send+ stx) ... (Możliwe, że nie używam terminów "identyfikator", " symbol” i „słowo kluczowe” całkowicie poprawnie, ale tak niektóre z nich wydają się być używane w preferencjach DrRacket.) O ile nie jest to błąd, musi to tłumaczyć „semantyka” języka, więc postanowiłem zapytać tutaj.


title: Kiedy przechowywać wartości w stałych/końcowych?

text: To może wydawać się dziwnym pytaniem, ale martwię się, że umieszczam zbyt wiele rzeczy jako stałych/finałów na szczycie mojej klasy Java. Zacząłem umieszczać każdą wartość w moim programie jako stałą (przynajmniej te, które wpływają na jego ogólny efekt). Powodem, dla którego to robię, jest to, że wtedy łatwo jest znaleźć wartości i zmienić je później, nawet jeśli są używane tylko raz, łatwiej jest je znaleźć na górze. Czy to zła czy dobra praktyka, naprawdę nie mam pojęcia. Oto przykład: prywatny statyczny final Color COLOR_SELECTED = Color.BLUE; prywatny statyczny ostateczny kolor COLOR_ALTERNATE_ONE = Color.WHITE; prywatny statyczny ostateczny kolor COLOR_ALTERNATE_TWO = nowy kolor (240, 240 , 240); prywatny statyczny końcowy Kolor TEXT_COLOR = Kolor.czarny;


title: Czy zmienna powinna mieć nazwę Id czy ID?

text: Jest to trochę pedantyczne, ale widziałem, jak niektórzy używają `Id` jak w: private int userId; public int getUserId(); a inni używają: private int userID; public int getUserID(); Czy jedno z nich jest lepsze od drugiego? Czemu? Widziałem, jak robiono to bardzo niekonsekwentnie w dużych projektach. Gdybym miał ustanowić standard, który większość ludzi zna? Jaki jest konwencjonalny standard?


title: Struktura folderów aplikacji internetowych Java

text: Jako początkujący w J2EE, niedawno zacząłem rozwijać swój własny projekt od podstaw przy użyciu rdzenia J2EE: Servlets & Jsps. Nie mogłem ocenić, czy struktura folderów mojego projektu jest prawidłowa, czy nie. Oto struktura folderów mojego projektu. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/pmpU9.png) Zanim zadam pytanie, przyznaję, że nie potrafię odpowiedzieć, ani uzasadnić, jeśli ktoś mnie zapyta, dlaczego taka struktura folderów jest taka sama. Pytanie: Czy to dobry znak, aby umieścić moje pliki jsps poza web-inf. Jeśli nie, dlaczego tak jest? Jeśli tak, dlaczego? Czy istnieje jakaś standardowa konwencja struktury folderów dla aplikacji internetowej J2EE, wiem, że maven wprowadził pewne standardy, ale nadal możemy dostosować je zgodnie z wymaganiami, które wierzę. Trochę googlowałem i znalazłem dwa odnośniki 1 2, w których odpowiedzi nie znajdują się na tej samej stronie, z czego nie mogłem wyciągnąć żadnych wniosków. Jakie punkty należy wziąć pod uwagę podczas układania struktury folderów dla aplikacji internetowej J2EE, co ważne, gdzie powinna znaleźć się zawartość statyczna Jsps i dlaczego?


title: Sortowanie z ciągłym wprowadzaniem

text: Projektuję (jeszcze nie piszę) system harmonogramu zadań dla złożonej gry wideo. Reszta programu przekazuje mu obiekty zawierające funkcję i niektóre metadane, w tym oszacowanie, ile czasu pozostało, zanim dane będą potrzebne (co może się oczywiście zmienić). Harmonogram jest odpowiedzialny za ustalenie priorytetów tych zadań i wywołanie funkcji. Algorytm, który zaprojektowałem dla tego problemu, jest dość prosty; po prostu sortuje listę obiektów zadań, usuwa jeden z góry, wywołuje go i powtarza. Oczywiście jest to w rzeczywistości bardziej złożone (musi radzić sobie z sytuacjami, w których rzeczy po prostu nie mogą być wykonane na czas, mówiąc innym częściom kodu, że ich zadanie właśnie trafiło na listę…), ale to jest sedno tego . Potrzebuję porady na temat tego, jak posortuję tę listę. Ta pętla będzie oczywiście działała stale podczas działania programu. Myślę, że użyję niewielkiej modyfikacji algorytmu sortowania bąbelkowego, uruchamiając jedno przejście w każdej iteracji. Lista nie będzie prawidłowo posortowana przez kilka pierwszych cykli, ale ponieważ lista będzie prawdopodobnie bardzo mała, gdy program zostanie uruchomiony, spodziewam się, że będzie w stanie niezawodnie ustawić rzeczy tak szybko, jak się pojawią. Czy ktoś to zrobił. to wcześniej i jak to działało? Czy są lepsze sposoby, aby to zrobić?


title: Kiedy nie przenosić kodu „w stylu C” do kodu „C++ lub zorientowanego obiektowo”?

text: **Kontekst** Ja (część zespołu A) opracowuję część funkcjonalności, która zależy od nowych API dostarczonych przez zespół B. Stare API (również dostarczone przez Zespół B) już istnieją i w ten sposób są wykorzystywane w naszym kodzie ... int someFunction() { //-- tu dużo kodu oldAPI.func1(); //-- znowu dużo kodu if (coś) oldAPI.func2(); w przeciwnym razie stareAPI.func3(); //dużo kodu // i tak dalej } Musieliśmy to szybko zakończyć, więc po prostu zmodyfikowałem istniejący przepływ tak, aby używał nowego API i przetestowałem go z kilkoma wywołaniami symboli zastępczych. Niedługo po ukończeniu... Drużyna B poinformowała nas, że zajmie im więcej czasu. Teraz mam dwie opcje... _Opcja 1_ : Poczekaj, aż Drużyna B zakończy; wepchnij swój kod wzdłuż/za nimi _Opcja 2_ : Spraw, aby Twój kod obsługiwał zarówno stary, jak i nowy; na podstawie konfiguracji. jeśli wybierzemy opcję 2; istnieją dwa podejścia... _Podejście 1_ : Modularyzacja kodu; i użyj polimorfizmu w swoim kodzie. class API_BASE {funkcja wirtualna1(),func2(),func3()}; klasa API_OLD : API_BASE {funct1(),func2(),func3()}; klasa API_NEW : API_BASE {funct1(),func2(),func3()}; _Podejście 2_ : użyj prostej logiki warunkowej if (newAvailable) useNew(); w przeciwnym razie użyjOld(); **Pytania** 1. Jeśli możliwości obsługi wielu przepływów w przyszłości są bardzo mniejsze (powiedzmy 15%); ale musisz je wspierać przez jakiś czas (powiedzmy kilka miesięcy), czy zmodyfikowałbyś kod napisany w sposób proceduralny, aby wspierać OOP? Widzę korzyści z łatwości konserwacji, czytelności i łatwego rozszerzania kodu. Ale jaki jest mądry sposób? 2. W starszej bazie danych... jaki jest idealny czas na refaktoryzację kodu? Raz w roku dotykasz jednego pliku i przechodzisz do drugiego. O ile mam czas... czy powinienem refaktoryzować stabilny/działający kod, czy powinienem to zrobić, gdy jest realna potrzeba refaktoryzacji (jak zdefiniować, czego nie wiem) 3. W dużych firmach programistycznych... zespół pracuje w tam własne granice. Jeśli zespół A zakończy swoją pracę, chce szybciej przejść do produkcji i ogłosić światu (mgmt, zespół b) itp., że skończyliśmy. Dopóki nie mamy wszystkiego gotowego (tj. części A i części B), dla użytkownika końcowego (QA/Klienta) nie ma zmiany w funkcjonalności. Czy to dobry sposób myślenia? czy powinienem bardziej skoncentrować się na mojej stronie i pozwolić mgmt martwić się o większy obraz?


title: Dlaczego zmienne prywatne są opisane w publicznie dostępnym pliku nagłówkowym?

text: OK, więc miejmy nadzieję, że jest to wystarczająco subiektywne pytanie dla programistów, ale oto idzie. Nieustannie poszerzam swoją wiedzę o językach i praktykach inżynierii oprogramowania... i natrafiłem na coś, co po prostu nie ma dla mnie żadnego sensu. W C++ deklaracje klas zawierają metody i parametry `private:` w pliku nagłówkowym, które teoretycznie są tym, co przekazujesz użytkownikowi do dołączenia, jeśli uczynisz je biblioteką. W Objective-C, `@interface`s robią prawie to samo, zmuszając cię do wylistowania twoich prywatnych członków (przynajmniej istnieje sposób na uzyskanie prywatnych metod w pliku implementacyjnym). Z tego, co mogę powiedzieć, Java i C# umożliwiają dostarczenie interfejsu/protokołu, który może deklarować wszystkie publicznie dostępne właściwości/metody i daje koderowi możliwość ukrycia _all_ szczegółów implementacji w pliku implementacji. Czemu? Enkapsulacja jest jedną z głównych zasad programowania obiektowego, dlaczego C++ i Obj-C nie mają tej podstawowej umiejętności? Czy istnieje jakieś obejście najlepszych praktyk dla Obj-C lub C++, które ukrywa implementację _all_? Dziękuję,


title: Jak stworzyć auto-grader w Pythonie i dla Pythona?

text: Próbuję stworzyć auto-grader dla jednego z moich początkowych kursów programowania dla Pythona. Z moich wyszukiwań online dowiedziałem się, że jest to w rzeczywistości struktura testów jednostkowych, która testuje kod ucznia, a nie kod produkcyjny, ale nie jestem do końca pewien, jak ustrukturyzować przepływ programu. Czy ktoś może podać strategię przesyłania kodu przez uczniów i zautomatyzowania całego procesu znakowania? Na przykład, w jaki sposób kod ucznia zostanie przesłany, a następnie zapisany/uporządkowany na dysku, w jaki sposób oceny będą przechowywane/raportowane? Szukam tylko szerokiej strategii i sam spróbuję uzupełnić luki. (Początkowo zapytałem o to na stockoverflow.com, ale jest to uważane za nie na temat i zasugerowano, aby zapytać tutaj.)


title: Czy naprawdę można wypracować styl programowania?

text: Zacząłem uczyć się programowania pół roku temu i zauważyłem, że ciągle używam kilku podstawowych technik. Czy to początek stylu, czy po prostu nieznajomość wariacji?


title: Czy uporządkowano tablicę asocjacyjną?

text: Tablica asocjacyjna ma wiele wspólnych podobnych nazw, hash, keymap, map, table, index. Jest to mapa kluczy i wartości, ale nie mogę znaleźć wiarygodnej definicji frazy, która mówi mi, czy mapa musi być tablicą asocjacyjną. * Jaka jest renomowana definicja terminu „tablica asocjacyjna”? * Czy uporządkowano tablicę asocjacyjną? Osobiście zawsze uważałem, że muszą być uporządkowane, ponieważ w JavaScript twierdzimy, że Obiekty nie są tablicami asocjacyjnymi, ponieważ Obiekty są nieuporządkowanymi mapami kluczy i wartości. Jednak być może cytowałem to bez odniesienia lub źródła.


title: Czy mogę zarobić więcej pieniędzy jako freelancer na Androidzie lub tworzeniu stron internetowych?

text: **Czy freelancing w programowaniu na Androida czy programowaniu stron internetowych to lepszy wybór, aby osiągnąć ~300 $ dochodu\miesiąc?** Zbyt trudno jest mi zrobić jedno i drugie. Obecnie studiuję CS na studiach i to jest mój drugi rok. Finansowo jestem w 100% zależna od rodziców i jest to dla mnie naprawdę niewygodne. Moim celem jest zarabianie co najmniej 300$ miesięcznie na programowaniu jako freelancer. Problem w tym, że nie wiem od czego zacząć. Mam solidne podstawy w Javie i podstawową wiedzę na temat C, PHP, Javascript, Ruby, Prolog, CSS, HTML. Myślę, że moje opcje to tworzenie stron internetowych lub programowanie na Androida. Oba już wypróbowałem (zrobiłem podstawową aplikację na Androida i prosty blog). Ciężko mi robić obie rzeczy jednocześnie. Ostatecznie moje pytanie brzmi, z którym z nich powinienem dalej pracować, aby osiągnąć pożądany dochód\miesiąc? Naprawdę uwielbiam robić obie z nich, więc proszę o pomocną radę. Dziękuję za Twój czas. EDYCJA: Przepraszam za to, że nie jestem na temat, ale nie wiedziałem, gdzie zapytać. Na tej stronie jest wielu ekspertów, więc wydawało się logiczne, aby zapytać o to tutaj. Zapraszam do usunięcia tego posta i przepraszam za łamanie zasad.


title: Jaka jest rola starszego web developera w zespole?

text: Wraz z zespołem 3 innych programistów internetowych mam tytuł głównego programisty od roku. To moja pierwsza praca jako lead. Jestem dość nastawiony na to, jakie są moje role od zarządzania. Jestem ciekaw, co robią inni programiści wyższego poziomu. Jestem przede wszystkim ciekaw, jakie są obowiązki innych ludzi jako lidera/starszego programisty w innych organizacjach; ponieważ spotkałem się tylko z pracą w małej/średniej firmie. (a) Czego można oczekiwać od starszego / wiodącego programisty internetowego organizacji (niezależnie od wielkości)? (b) Czy jest różnica między liderem tworzenia stron internetowych a starszym programistą? Sprawdziłem kilka wątków i był tylko jeden, który omawiał, kiedy powinieneś nazywać siebie starszym programistą, ale nie omawia wyczerpująco ról tego, co starszy programista powinien robić ze swoim zespołem.


title: Na tym powolnym rynku pracy nie mam wyboru, aby podjąć zadanie, które używa VB.NET i będzie używać C#. Rada?

text: Naprawdę nie chcę robić VB.NET, ale potrzebuję pracy i potrzebuję pracy szybko. Dwie pozycje, na które patrzę, mają istniejące aplikacje w VB.NET, ale chcą je przekonwertować na C# i wykonać nowe prace w C#, ale jak wszyscy wiedzą, czasami to się nie dzieje przez chwilę i utkniesz z głównym językiem. Moje tło jest w C# i po spojrzeniu na VB.NET boli mnie głowa. Wszelkie porady, gdy podchodzę do takiej pracy. Jak powiedziałem, najlepiej trzymać się C#, ale dzisiaj nie ma wyboru, więc muszę po prostu wziąć to, co dostanę. Szukam porady na ten temat dla tych, którzy tego doświadczyli, doświadczają i tych, którzy tego nie doświadczyli.


title: Łatwy do dostosowania .NET CMS z funkcją e-commerce

text: Próbowałem DNN i nopCommerce. Po przejrzeniu ich kodu źródłowego zdałem sobie sprawę, że nie są tak łatwe do dostosowania i potrzebują sporo czasu na dokumentację, zanim będzie można wprowadzić jakiekolwiek zmiany. Ponadto są one dość duże, ponieważ obejmują każdy aspekt CMS, od strony, przez katalog, po menu, po SEO i tak dalej. Moje wymagania są dość proste; potrzebuję tylko backendu do dodawania produktów i kategorii wraz z funkcjami obsługi sklepu. Inne rzeczy, takie jak strony i menu, nie muszą być objęte CMS. _**Więc, czy jest jakiś prosty CMS .NET, który może pomóc mi przyspieszyć proces rozwoju, czy powinienem stworzyć własny lub użyć jednego z dwóch wymienionych powyżej ??_**


title: Niepisane zasady przepisywania kodu innego członka zespołu

text: Praktykujemy zbiorową własność kodu. W moim rozumieniu oznacza to, że każdy programista może zmienić dowolną linię kodu, aby dodać funkcjonalność, zrefaktoryzować, naprawić błędy lub ulepszyć projekty. Ale co z całkowitym przepisaniem kodu od programisty, który wciąż jest w zespole? Czy powinienem go najpierw zapytać? Jaka jest najlepsza praktyka?


title: Projektowanie zorientowane na aspekty PHP

text: To jest kontynuacja tego pytania Code Review. To, co zostało zabrane z tego postu i innych projektów zorientowanych na aspekty, jest trudne do debugowania. Aby temu przeciwdziałać, zaimplementowałem możliwość włączenia śledzenia wzorców projektowych. Włączenie śledzenia działa tak: //Można to dodać w dowolnym miejscu w kodzie Run::setAdapterTrace(true); Uruchom::setFilterTrace(prawda); Uruchom::setObserverTrace(prawda); //Wykonaj funkcję echo Run::goForARun(8); W rzeczywistym dzienniku z włączonym śledzeniem wyświetla się tak: adapter 2012-02-12 21:46:19 {"type":"closure","object":"static","call_class":"\/ public_html\/examples\/design\/ClosureDesigns.php","class":"Uruchom","method":"goForARun","call_method":"goForARun","trace":"Uruchom::goForARun"," start_line":68,"end_line":70} filtr 2012-02-12 22:05:15 {"type":"zamknięcie","event":"powrót","object":"statyczny","klasa" :"run_filter","method":"\/home\/prodigyview\/public_html\/examples\/design\/ClosureDesigns.php","trace":"Run::goForARun","start_line":51," end_line":58} obserwator 12.02.2012 22:05:15 {"type":"zamknięcie","object":"static","class":"run_observer","method":"\/home\ /prodigyview\/public_html\/public\/examples\/design\/ClosureDesigns.php","trace":"Uruchom::goForARun","start_line":61,"end_line":63} Gdy informacje są podzielone , dane przekładają się na: * Wywoływana przez adapter, filtr lub obserwatora * Wywoływana funkcja była domknięciem * Lokalizacja clo na pewno * Klasa: metoda, w której zaimplementowano adapter * Ślad, z którego wywoływano metodę * Linia startowa i linia końcowa Udowodniono, że kod działa w środowiskach produkcyjnych i zawiera różne przykłady do zaimplementowania, więc dowód koncepcji jest tam. To nie jest DI i dokonuje rzeczy, których DI nie może. Nie nazwałbym schematu kodu, ale nazwałbym go rozdętym. Podsumowując, słabe strony to nadęty kod i krzywa uczenia się w zamian za funkcjonalność zorientowaną na aspekt. Jakie są inne słabości, jeśli w ogóle, we wdrażaniu projektowania zorientowanego aspektowo, poza normalnym strachem przed czymś nowym i innym? PS: Więcej przykładów AOP tutaj: https://github.com/ProdigyView/ProdigyView/tree/master/examples/design


title: Wersjonowanie w ramach platformy

text: Pracuję z kilkoma różnymi platformami internetowymi, a moje rzeczywiste projekty są zazwyczaj dość małe i działają na tych platformach. Pliki projektu są rozrzucone po drzewie platformy, co sprawia, że wersjonowanie jest trochę niezręczne. Utrzymywałem jedno repozytorium na platformę, które dość szybko wymyka się spod kontroli... Największym problemem, jaki miałem, jest Eclipse + SVN, a rozmiar projektu wciąż rośnie, pomimo pracy na dość statycznej platformie/ bibliotekę i tylko kilka plików dla danego projektu na raz. Aby projekt działał, potrzebuję ich w drzewie platformy. Chcę wkrótce przejść całkowicie do Git, więc zastanawiam się, jak mogę oddzielić projekty, a jednocześnie utrzymać wydajną pracę środowiska programistycznego. Szukałem jakiegoś rodzaju synchronizacji plików (rsync, ale w czasie rzeczywistym?), ponieważ rozwiązanie ma sens w mojej głowie. Utrzymam projekty poza drzewem i użyję synchronizacji plików, aby zapewnić ich kopiowanie w czasie rzeczywistym. Dzięki temu projekty, nad którymi pracujemy, są bardzo małe i szybkie, a rzeczywista platforma działa poprawnie. Jednak mam problemy ze znalezieniem odpowiedniego oprogramowania, aby to działało poprawnie. Wszelkie sugestie w tym zakresie również byłyby mile widziane... Czy patrzę na to w niewłaściwy sposób? Jakie są inne możliwe rozwiązania? Wydaje się, że jest to powszechny problem, ale nie mogę znaleźć zbyt wielu informacji o tym, jak go rozwiązać. Dziękuję!


title: Dostępne opcje klasyfikacji słów w tekście?

text: Badam sposoby klasyfikowania słów w tekście i zastanawiam się, jakie są opcje i które najlepiej nadają się do tej pracy. Interesują mnie przede wszystkim słowa kluczowe, którymi najczęściej są rzeczowniki. Jak dotąd wiem, że mógłbym użyć klasyfikatora Bayesa, czarnej listy lub białej listy. Jednak do tej pory nie miałem szczęścia z każdym z nich. Zacząłem od białej listy, używając słów dostarczonych przez wordnet i moby, aby spróbować znaleźć każdy rzeczownik. Jednak wiele słów zostało pominiętych, ponieważ nie istniały w bazie danych lub nie były rzeczownikami. Następnie spróbowałem zbudować czarną listę, aby dopasować wszystko oprócz znanych słów stop, czasowników i tym podobnych. Jednak stworzenie listy wystarczająco dużej, aby obsłużyć 200 000 znanych angielskich słów (nie mówiąc już o innych językach), zajęłoby dużo czasu. Ponadto przechowywanie tak wielu słów w pamięci w celu porównania nie jest praktyczne w przypadku wydajności na standardowym sprzęcie. Używając, miałem szczęście z klasyfikatorem bayes pasującym do spamu i sentymentu, ale nie jestem pewien, jak go użyć do odróżnienia rzeczowników (lub słów kluczowych) od innych słów, ponieważ jest tak wiele podobieństw między wszystkimi grupami słów. Na koniec próbowałem użyć wyrażenia regularnego, aby wykryć słowa kluczowe na podstawie własnych rzeczowników i nazw, ponieważ w języku angielskim są one zawsze pisane wielką literą. Problem polega na tym, że wiele słów kluczowych nie jest pisanych wielką literą, co skutkuje brakiem wyników. ** Jakie są inne opcje klasyfikacji słów kluczowych? Jakich innych wzorców projektowych mogę użyć z powyższymi opcjami, aby uzyskać lepsze wyniki?**


title: Jak zaprojektować aplikację, aby dobrze współpracowała z wybraną przez klienta bazą danych?

text: Chcę napisać aplikację ASP.NET 4.0 z IBM DB2 Express-C jako zapleczem. Martwi mnie fakt, że ta aplikacja jest hostowana na zdalnym serwerze. Nie znam żadnego dostawcy hostingu, który zapewnia hosting ASP.NET DB2 w tym samym przedziale cenowym co SQL Server. Chcę również, aby klient wybrał wybraną przez siebie bazę danych z tej listy: 1. Serwer SQL 2. Oracle 3. DB2 4. PostgreSQL 5. Firebird Te same problemy z hostingiem występują w przypadku Oracle i Firebird. Pomijając kwestie hostingu, chcę wiedzieć, jak zaprojektować aplikację, aby była niezależna od rodzaju używanego RDBMS i będzie działać z każdym z wyżej wymienionych. Czy są jakieś takie aplikacje?


title: Najlepsza opcja dla przeglądarki PDF osadzonej w aplikacji internetowej

text: Mam aplikację sieci Web, która musi być w stanie wyświetlić plik PDF. Musi umożliwiać użytkownikowi przeglądanie stron w pliku PDF, a moja aplikacja musi wiedzieć, która strona jest aktualnie wyświetlana, ponieważ inne aspekty aplikacji internetowej będą się zmieniać w zależności od bieżącej strony. Idealnie nie byłoby to zależne od klienta posiadającego Adobe Readera, ale prawdopodobnie mógłbym obsłużyć tę zależność. Jakie są moje najlepsze opcje? Mój stos aplikacji składa się z ASP.NET 4 wraz z opcjonalnie Silverlight 5. Ponadto mógłbym użyć czegoś, co jest oparte na kliencie, a także przy użyciu JavaScript / HTML, jeśli coś takiego istnieje. Znalazłem ofertę ComponentOne w tym zakresie i wydaje się, że jest to wiodący kandydat w tym momencie, ale chcę wiedzieć, czy są inne opcje, które powinienem rozważyć. Edycja: Zgodnie z komentarzem Fosco, konwersja pliku PDF na inny format (np. HTML) może być opcją, o ile mogę powiązać części przekonwertowanego dokumentu z oryginalną stroną PDF #s. Kolejna uwaga: to musi działać w całości na naszych serwerach. Korzystanie z usług innej firmy do przeglądania plików PDF jest niedopuszczalne.


title: Odpowiedni język programowania do projektowania oprogramowania muzycznego

text: Chcę zaprojektować oprogramowanie dla mojego instrumentu muzycznego, które jest rytmiczne (nie ma melodii). Wszystko, co chcę, aby ten program robił, to: 1. umożliwienie użytkownikowi komponowania muzyki 2. odtworzenie tego, co użytkownik w tym celu skomponował. Muszę nagrać różne dźwięki tego instrumentu i dopasować każdy znak do odpowiedniego dźwięku. Jaki język programowania jest do tego odpowiedni?


title: Czy brak generycznej klasy OrderedDictionary w .NET Framework to naprawdę wada projektowa?

text: Byłem absolutnie pewien, że go potrzebuję (i niektórzy użytkownicy SO), ale okazuje się, że mój przypadek został łatwo zrefaktoryzowany za pomocą prostego `List<object>` i więcej o tym myślę, nie jestem już taki pewien, że jest potrzebne i generyczne klasy do zarządzania kolekcjami wystarczą, jestem po prostu ciekawy :) btw. jest podobne pytanie, ale to pytanie zakłada, że taka klasa jest potrzebna, a tylko jeden komentarz sugeruje, że może nie jest potrzebna. [EDIT] oh f *, miałem napisać OrderedDictionary, a nie SortedDictionary, przepraszam, edytowałem mój post


title: Tworzenie umowy na procent sprzedaży aplikacji

text: Mam partnera biznesowego, który chce zawrzeć umowę, w której otrzymam procent zysków ze sprzedaży aplikacji. Podoba mi się umowa i chcę to zrobić. W naszej umowie biznesowej chcę umieścić jakiś język, który określa, co dzieje się w miarę postępu projektu - na przykład, co zrobić, jeśli chce on aktualizacje aplikacji, które moim zdaniem nie są konieczne? Co zrobić, jeśli w przyszłości będzie chciał pracować z innym programistą, ale chce korzystać z opracowanego przeze mnie kodu?


title: Czy projekt OO lub projekt bazy danych powinien sterować kodowaniem moich klas @Entity?

text: Mam dwie klasy, które chcę ze sobą powiązać w aplikacji JEE przy użyciu JPA2. W świecie OO powiedziałbym, że pokój rozmów ma atrybut Lista wiadomości. W świecie relacyjnym kompozycja taka nie istnieje. Gdybym w ogóle nie korzystał z bazy danych, na pewno zakodowałbym te dwie rzeczy jako kompozycję wiadomości wewnątrz Chatroomu. Ale ponieważ używam ORM ze specyfikacją JPA2, postanowiłem spróbować stworzyć obiekty @Entity, jak napisano poniżej, z tym, że będą one zmapowane do bazy danych. Moje pytanie brzmi: czy powinienem to robić? Czy właściwe jest wydzielenie klas @Entity, aby wspierać bardziej relacyjne podejście? A może powinienem po prostu projektować z perspektywy OO i próbować zignorować fakt, że istnieje ORM kierujący tym od dołu? W tej chwili prowadzę projekt od strony bazy danych, ale czy powinienem robić to w inny sposób? Czy są jakieś implikacje, których mi brakuje, robiąc to w ten sposób? pakiet org.janp.castlerock; importowanie javax.persistence.Entity; importowanie javax.persistence.Id; @Entity public class Chatroom { private String name; @Id public String getName() { return name; } public void setName(String name) { this.name = nazwa; } } pakiet org.janp.castlerock; import java.util.Date; importowanie javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; importowanie javax.persistence.Id; importowanie javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity public class Wiadomość { private int id; prywatny czat w czacie; prywatny znacznik czasu daty; prywatny tekst ciągu; @Id @GeneratedValue(strategy=GenerationType.AUTO) public int getId() { return id; } public void setId(int id) { this.id = id; } @Temporal(TemporalType.TIMESTAMP) public Data getTimestamp() { return timestamp; } public void setTimestamp(Date timestamp) { this.timestamp = timestamp; } public String getText() { return text; } public void setText(String text) { this.text = text; } @ManyToOne @JoinColumn(name="name") public Chatroom getChatroom() { return chatroom; } public void setChatroom(Chatroom chatroom) { this.chatroom = chatroom; } }


Czy Lisp nadal ma jakąś specjalną funkcję, która NIE została zaadoptowana przez inne języki programowania? Przez Lisp mam na myśli wszystkie języki programowania Lisp jako całość. Powiedziano mi, jak niesamowity jest Lisp i wiem, że wiele języków zostało zainspirowanych przez Lisp. Ale czy Lisp wciąż ma jakąś ekskluzywną cechę projektową, której po prostu nie da się zrobić w żadnym innym języku? Powodem, dla którego zadałem to pytanie, jest to, że ostatnio, sam będąc amatorskim programistą, zacząłem uczyć się Clojure dla zabawy, a rezultatem jest to, że znalazłem wiele postów i komentarzy związanych z Lispem, mówiących tylko jedno: „Lisp jest wyjątkowy ", ale inne nowoczesne języki programowania już zaadoptowały i ukradły wiele pomysłów z Lispa, takich jak warunkowe, rekurencja i funkcja obywatela pierwszej klasy. A nawet metaprogramowanie może być wykonane przez wiele języków. Czy coś przegapiłem i czy "Lisp wciąż jest inny"? Albo mam szczęście, ponieważ inne współczesne języki ukradły wszystkie dobre części Lispu, więc nie trzeba zagłębiać się w nawiasy świata Lispu i „Lisp był inny”.


title: Co mogę umieścić na moim blogu poświęconym programowaniu, aby był on dobrą wizytówką mnie?

text: Od jakiegoś czasu chciałem pisać blog o programowaniu. Najlepszą radą, jaką otrzymałem na temat pisania bloga, jest „Napisz bloga, którego chciałbyś przeczytać”. To dobra rada, ale to tylko połowa historii. Kiedy już napiszesz bloga, stanie się on Twoją wizytówką w Internecie, na pewno pojawi się przy każdym wyszukiwaniu prowadzonym przez przyszłego współpracownika lub pracodawcę. Może to być dobra rzecz lub może spowodować poważne szkody. Jeśli więc są jacyś menedżerowie ds. rekrutacji, czy możesz dać mi kilka wskazówek na temat tego, co jest na blogu, co daje dobre wrażenie na temat kandydata i/lub tego rodzaju rzeczy, które powodują, że rzucasz CV kandydata do najbliższego fasola? Czy blog musi co tydzień wymyślać sprytny fragment kodu? (Nie myśl, że sobie z tym poradzę) Czy można blogować więcej niż nie o metodach rozwoju w celu poprawy jakości i produktywności (mam wiele pomysłów na ten temat). Czy mogę blogować o rzeczach, których nie próbowałem z pierwszej ręki, ale wydaje mi się godne uwagi?


title: W rzeczywistości programista również administruje DBMS i systemem?

text: Naprawdę nie wiem, gdzie jeszcze zapytać. Więc oto idzie. Pracuję w bardzo małej firmie, która tworzy oprogramowanie ERP i strony internetowe. 1 programista z ponad 10-letnim doświadczeniem. 2 programistów z ponad 3-letnim doświadczeniem. 3 programistów z rocznym doświadczeniem. Otóż to. Bez zespołu, bez DBA, bez administratora systemu. Nie ma tu nikogo, kto ma doświadczenie w tworzeniu stron internetowych, więc zdarzyło mi się odpowiadać za tworzenie stron internetowych. Ale mam tylko 3 lata doświadczenia! jako deweloper !. Wiem, że w małej firmie jesteś proszony o robienie wielu różnych rzeczy, ale czy to za dużo, jeśli muszę zajmować się sysadminem, architekturą baz danych, projektowaniem i rozwojem oprogramowania? Aha, dodatkowo jestem proszony o zrobienie tego na różnych platformach. Obecnie pracuję z JSP, ASP, MSSQL, MySQL, Oracle, Windows Server i Linux. W bazie danych zajmuję się od pisania zapytań po tworzenie kopii zapasowych i odzyskiwanie. Konfiguracja serwera, odzyskiwanie po awarii systemu, migracja bazy danych i serwera również. Pluszowy HTML, Javascript i CSS :) Ilość projektów, którymi kieruję : 5 Nie jestem ekspertem w każdym z nich ! Muszę przeszukiwać Internet, czytać tutoriale i zadawać pytania w StackOverflow, aby to wszystko zrobić! Więc pytam, czy to normalne? Czy to normalna praktyka? Czy znajdę się w takiej samej sytuacji, niezależnie od tego, do której małej firmy pójdę? Pracuję w Korei Południowej. Jak jest w twoim kraju? **P.S** Dziękuję wszystkim za opinię. Chciałem was wszystkich przegłosować, ponieważ wszyscy pomogliście mi zobaczyć to w inny sposób, ale najwyraźniej potrzebujesz 15 punktów reputacji, aby przegłosować :(


title: Enkapsulacja: oddzielne funkcje dla oddzielnych zmiennych czy zwracanie tabeli? [PHP]

text: Tworzę stronę internetową w PHP i mam kilka klas, jak na razie żadna z nich nie przestrzega zasad enkapsulacji OOP. Powiedzmy, że mam taką klasę użytkownika: class User{ public $username; publiczny identyfikator $uid; publiczna data; $lokalizacja publiczna; publiczne $bio; publiczny awatar; funkcja publiczna __construct($user, $uidOr){ $this->username = $user; $ten->uidLub = $uidLub; } . funkcja publiczna getUser(){ if($this->uidOr){ $which = "uid"; } else { $which = "nazwa użytkownika"; } // /\ Wiem, że powyższe jest złe $getUserInfoQuery = new Database(); $getUserInfoQuery->fetchAll("users", array($which, $this->username)); foreach ($getUserInfoQuery->wynik jako $wartość) { $this->nazwa użytkownika = $wartość['nazwa użytkownika']; $this->uid = $wartość['uid']; $this->data = $value['data']; $to->lokalizacja = $wartość['lokalizacja']; $this->bio = $value['bio']; $this->avatar = $value['avatarurl']; } } } To oczywiście okropna praktyka OOP, prawda? Czy powinienem dodawać funkcje takie jak getUserUsername(); które zwracają nazwę użytkownika obiektu użytkownika, czy powinienem utworzyć funkcję, która zwraca tabelę informacji. Co byłoby najlepsze? Dziękuję! PS: przepraszam za mój zły kod, jestem nowy w OOP.


title: Czy dostęp do zwróconej tablicy za pomocą klucza od razu jest uważany za złą praktykę?

text: Nie mogłem wymyślić dobrego sposobu na sformułowanie tytułu, przepraszam. Ale mam na myśli to, czy uważa się za złą praktykę: print get_array()[2] over: output=get_array() print output[2] (gdzie get_array() to funkcja, która zwraca tablicę, jeśli tak było t jasne). Która metoda jest lepsza? Czemu?


title: Czy przepisanie kodu Java do C++ przy użyciu JNI w celu poprawy wydajności to dobry pomysł?

text: Próbowałem przepisać niektóre funkcje Java w C++ i wywołałem je za pomocą JNI. Zauważyłem, że wykonanie natywnych funkcji C++ zajmuje więcej czasu w porównaniu z funkcjami Javy, ze względu na obciążenie JNI. Ponieważ powszechnie uważa się, że C++ ma pewną przewagę nad Javą, chciałem się dowiedzieć, czy przepisanie jakiegoś kodu Javy na C++, w celu poprawy ogólnej wydajności aplikacji Javy, to dobry pomysł? Jeśli tak, to jakie części aplikacji należy przepisać i jak aplikacja Java może z niej korzystać?


title: Czy istnieje sposób, aby zostać zdalnym programistą T-SQL?

text: Zauważyłem, że większość wakatów SQL nie jest przystosowana do pracy zdalnej (telepracy) tak jak zadania Java czy .NET. Chciałbym wiedzieć, czy istnieje sposób na pracę w trybie zdalnym w kierunku programowania T-SQL? A jeśli to niemożliwe, dlaczego?


title: Czy powinienem używać CMS do nowej dużej aplikacji z wieloma typowymi funkcjami (logowanie, edycja profilu, blog itp.)?

text: Obecnie planuję nowy projekt ASP.NET MVC3, który będzie całkiem zindywidualizowany. Będzie jednak wiele wspólnych funkcji (logowanie, edycja profilu, blog itp.). Początkowo planowałem zbudować to wszystko od podstaw, jednak kusi mnie CMS, aby nie wymyślać koła na nowo i nie tracić czasu na budowanie standardowych funkcji, które będą wymagały wielu testów. Zastanawiałem się nad używaniem Orchard Project CMS i zainstalowałem go poprzedniej nocy, abym mógł się pobawić. CMS wydaje się świetny, jednak wydaje się restrykcyjny pod względem chęci dodawania nowych sekcji. Miałem nadzieję, że CMS będzie w zasadzie rozwiązaniem ASP.NET MVC3, z funkcjami logowania itp., Na których będę mógł następnie budować. Jednak czuję się zobowiązany do pisania "widżetów" dla mojej aplikacji. Rozumiem, że CMS są świetne dla prostych witryn blogowych itp., ale czy nie wydaje się zbyt restrykcyjne, aby móc na przykład zbudować sieć społecznościową. Czy istnieje coś takiego jak rozwiązanie MVC3 o otwartym kodzie źródłowym z wbudowaną funkcją logowania itp., które nie jest związane z interfejsem? Lub jeśli planuję zbudować dużą aplikację, czy CMS jest niewłaściwą ścieżką?


title: Dlaczego html, css i js nie są używane w aplikacjach komputerowych?

text: html, css i js mogą być używane do budowania pięknych (i użytecznych) interfejsów użytkownika (szczególnie z html5 i css3) i wiele osób już je zna. Chociaż wciąż jest to poza moim zasięgiem, ale jak trudne może być przeniesienie całej aplikacji internetowej do aplikacji komputerowych (już opracowujemy aplikacje na naszych lokalnych serwerach przed ich hostingiem). Według mnie jest to fajny prosty pomysł, który przyniesie boom w aplikacjach komputerowych, a biorąc pod uwagę, że te aplikacje będą już udostępniać tak dużo kodu aplikacjom internetowym, mogą być w stanie zaoferować lepszą łączność. Dlaczego się tego nie robi?


title: Projekt dla wielu zwrotów typu

text: Pracuję w C++ i mam ten problem. class Kontener { Kontener(w którym_typ_użyć_a_b_lub_c); A & getData(A & prototyp); B & getData(B & prototyp); C & getData(C & prototyp); prywatne: A a; Bb; Cc; int typ_używany; } Tylko jeden z typów danych A, B lub C jest faktycznie używany w instancji klasy Container. Flaga konstruktora decyduje, którego użyć. Kiedy nadszedł czas, aby uzyskać odwołanie do obiektu wewnętrznego, potrzebuję procedury getData, która zwraca odwołanie innego typu. W celu ujednoznacznienia przekazuję „prototyp” A() B() lub C(). Naprawdę nie lubię tego wzorca, ale nie mogę znaleźć nic lepszego ze względu na moją ograniczoną paletę w c++. Czy masz inne dostępne podejście? należy pamiętać, że szablonowanie kontenera nad A, B lub C nie jest opcją ze względu na inne ograniczenia.


title: Wiosna – zamieszanie związane z konfiguracją?

text: Gdzieś czytałem Spring oferuje wygodę nad konfiguracją. Ale ludzie ze Springa wprowadzają tak wiele zmian w konfiguracji, że teraz naprawdę nie wiem, jak używać konfiguracji xml lub adnotacji. Chciałbym, aby ktoś zasugerował pewną metodologię lub praktyczną zasadę korzystania z xml i adnotacji. * * * Przykłady na SO pokazujące, że wielu początkujących, takich jak ja, jest zdezorientowanych konfiguracją. * link-1 > Wydaje mi się, że nie rozumiem funkcjonalności kryjącej się za `<context:annotation-config>` > i `<context:component-scan>`. > > Z tego, co przeczytałem, wydają się obsługiwać różne adnotacje (@Required, > @Autowired etc vs @Component, @Repository, @Service etc), ale także z czego > Czytałem, że rejestrują te same klasy postprocesora fasoli . > > Aby jeszcze bardziej mnie zmylić, istnieje atrybut `annotation-config` w > `<context:component-scan>`... * link 2 > Nadal mam tag skanowania komponentów: > > > <context:component -scan base- > package="com.mycompany.maventestwebapp" /> > > > ale mam też inny tag (wygląda na to, że ma podobne zadanie), ten: > > > <adnotation-driven /> > > > Co jest różnica między tymi dwoma tagami? Inną „dziwną” rzeczą jest > to, że poprzedni przykład (który nie używa tagu opartego na adnotacjach) jest bardzo > podobny do projektu tworzonego przez STS przy użyciu projektu Spring MVC Template > ale jeśli usunę tag oparty na adnotacjach ze swojego pliku konfiguracyjnego projekt > nie uruchamia się i wyświetla następujący błąd: **HTTP Status 404 -**... Spring 3.2 nie potrzebuje już cglib do proxy, ale niższe wersje używają cglib. Cytat z bloga springsource > Aby wygenerować takie proxy, Spring korzysta z biblioteki innej firmy o nazwie > cglib. Niestety ten projekt nie jest już aktywny. W Spring 3.2 jest bardzo prawdopodobne, że Spring będzie domyślnie używał Javassist. Czy to wystarczy, aby sugerować, że Spring to zamieszanie nad konfiguracją?


title: Potrzebujesz zaleceń licencyjnych dla oprogramowania napisanego we własnym zakresie

text: Obecnie w wolnym czasie dużo się rozwijam, aby poprawić swoją produktywność w pracy. Mam około 50 godzin nieodpłatnej pracy nad kilkoma kawałkami oprogramowania, ale wolałbym, aby nie trafiły one na komputery służbowe, dopóki nie uzyskam licencji uniemożliwiającej redystrybucję bez mojej zgody. Oczywiście nie ładuję ich ani nic. Chcę tylko upewnić się, że jestem chroniony prawnie na wypadek, gdyby postanowili go zapakować i sprzedać jako swój własny. Upewniłem się przed rozpoczęciem, że nie podpisałem żadnej umowy, że są właścicielami wszystkiego, nad czym pracuję przez resztę czasu, który spędzam w tej firmie. Chciałbym mieć własne rozwiązanie licencyjne. IANAL, więc pisanie licencji nie byłoby najlepszą rzeczą, jaką mógłbym zrobić. Czy są jakieś darmowe rozwiązania licencyjne, które można kopiować i wklejać (kopiować i wklejać w taki sam sposób, w jaki można kopiować i wklejać GPL), które wyraźnie uniemożliwiają redystrybucję bez mojej zgody?


title: UberSVN vs Serwer VisualSVN - Jakieś doświadczenia?

text: Patrzę na UberSVN jako możliwy zamiennik naszego istniejącego pakietu kontroli źródła, VisualSVN Server. Istnieje wiele korzyści związanych z interfejsem użytkownika, w tym posiadanie zintegrowanego interfejsu internetowego, portalu administracyjnego i funkcji współpracy. Obawiam się, jakie trudności napotkam podczas migracji z VisualSVN do UberSVN i czy może to wpłynąć na nasze repozytoria. Wszelkie doświadczenia lub zalecenia byłyby bardzo mile widziane.


title: Zwracanie wartości logicznej, gdy jedynym problemem jest sukces lub porażka

text: Często zwracam wartość logiczną z metody, która jest używana w wielu lokalizacjach, aby w jednym miejscu umieścić całą logikę wokół tej metody. Wszystkie (wewnętrzne) metody wywołujące muszą wiedzieć, czy operacja się powiodła, czy nie. Używam Pythona, ale pytanie niekoniecznie jest specyficzne dla tego języka. Są tylko dwie opcje, które przychodzą mi do głowy 1. Zgłoś wyjątek, chociaż okoliczności nie są wyjątkowe, i pamiętaj, aby złapać ten wyjątek w każdym miejscu, w którym funkcja jest wywoływana. 2. Zwróć wartość logiczną tak, jak robię. To jest _naprawdę_ prosty przykład, który pokazuje, o czym mówię. import os class DoCos(obiekt): def remove_file(self, filename): try: os.remove(filename) z wyjątkiem OSError: return False return True def process_file(self, filename): zrób_coś() if remove_file(nazwa pliku): zrób_coś_else( ) Chociaż jest funkcjonalny, naprawdę nie lubię tego sposobu robienia czegoś, „śmierdzi” i czasami może skutkować wieloma zagnieżdżonymi if. Ale nie mogę wymyślić prostszego sposobu. Mógłbym zwrócić się do bardziej filozofii LBYL i użyć `os.path.exists(filename)` przed próbą usunięcia, ale nie ma gwarancji, że plik nie zostanie w międzyczasie zablokowany (jest to mało prawdopodobne, ale możliwe) i nadal muszę określić, czy usunięcie powiodło się, czy nie. Czy jest to „dopuszczalny” projekt, a jeśli nie, jaki byłby lepszy sposób na zaprojektowanie tego?


title: Licencja Java i JVM

text: Czy licencja Java pozwala innym firmom tworzyć własne wersje języka Java, czy po prostu je dokładnie implementować? To samo pytanie o JVM. Słyszałem, że Sun pozwał Microsoft za zmianę implementacji Javy na platformę .NET i Javę na Google Android, ale nie mogę pojąć całej koncepcji jako całości.


title: Jak dziś zmodularyzować i spakować bibliotekę JavaScript po stronie klienta?

text: Nadrabiałem zaległości w zakresie współczesnego ekosystemu JS po stronie klienta i czytałem na CommonJS i AMD (w tym powiązane narzędzia - browserify, requirejs, onejs, jam, dziesiątki innych). Jeśli piszę bibliotekę JavaScript, jak mam ją modularyzować/pakować tak, aby była jak najszerzej dostępna (najlepiej przez użytkowników, którzy przysięgają na CommonJS, AMD, a zwłaszcza żadne z nich)? Popularne biblioteki, takie jak jQuery, wydają się po prostu używać starej szkoły łączenia plików do budowania się i dynamicznie wykrywają, czy powinny pisać do „eksportu”, czy do kontekstu globalnego. Obecnie robię to samo, ale główną wadą jest to, że jeśli (w przeciwieństwie do jQuery) polegam na kilku bibliotekach, fajnie jest nie musieć prosić użytkowników o ręczne wstępne uwzględnienie zestawu przechodniego. (Chociaż obecnie mam tylko dwie zależności.) I oczywiście globalne zanieczyszczenie przestrzeni nazw. A może najczystsze jest generowanie wielu wersji mojej biblioteki dla każdego kontekstu? Zastanawia mnie też pakowanie i publikowanie. Istnieje kilka systemów, ale uważam, że głównym z nich jest altana, z którą łatwo się uporać, ponieważ jedyne, co robi, to pobieranie. Zastanawiam się jednak, czy powinienem kierować się również innymi systemami pakietów, takimi jak component (który wymaga CommonJS). Czy są inne istotne aspekty, o których powinienem wiedzieć? Czy są jakieś dobre przykładowe projekty do naśladowania w tym wszystkim?


title: Znajdź liczbę każdego słowa w ciągu

text: Poszukuję bardziej wydajnego algorytmu do zaimplementowania programu, aby znaleźć liczbę każdego słowa w zdaniu, tj. String w sensie programowania. Wiem, że mój algorytm jest zbyt prosty i Noob. Oto mój algorytm. 1. Przeczytaj ciąg. 2. Tokenize String z ogranicznikiem, umieść każdy token na liście (ArrayList). 3. Przeprowadź iterację wygenerowanej listy, w każdej iteracji porównaj bieżący ciąg z każdym innym ciągiem listy, jeśli pasuje, zwiększ liczbę tego ciągu. 4. Dla każdej iteracji umieść String i jego liczbę na mapie. 5. Przeprowadź iterację mapy i wyświetlacza, z kluczem jako ciągiem i wartością jako jego liczbą. Jakie jest najlepsze podejście niż to?


title: Jak wyszukiwania pasują do interfejsu RESTful?

text: Podczas projektowania interfejsu RESTful semantyka typów żądań jest uważana za kluczową dla projektu. * **GET** \- Wyświetl kolekcję lub pobierz element * **PUT** \- Zastąp kolekcję lub element * **POST** \- Utwórz kolekcję lub element * **DELETE** \- Cóż, erm, usuń kolekcja lub element Wydaje się jednak, że nie obejmuje to pojęcia „wyszukiwania”. Np. projektując pakiet usług internetowych obsługujących witrynę z wyszukiwaniem pracy, możesz mieć następujące wymagania: * Uzyskaj indywidualną ofertę pracy * **GET** do `domain/Job/{id}/` * Utwórz ogłoszenie o pracę * **POST ** do `domena/praca/` * Aktualizuj ogłoszenie o pracę * **PUT** do `domena/praca/` * Usuń ogłoszenie o pracę * **USUŃ** do `domena/praca/` simple: * **GET** to `domain/Jobs/` Jednak w jaki sposób „poszukiwanie” pracy wpisuje się w tę strukturę? Możesz _mogli_ twierdzić, że jest to odmiana „kolekcji list” i zaimplementować ją jako: * **GET** do `domain/Jobs/` Jednak wyszukiwania _mogą_ być złożone i jest całkowicie możliwe wygenerowanie wyszukiwania, które generuje długi ciąg GET. Oznacza to, że odwołując się tutaj do pytania SO, występują problemy z użyciem ciągów GET dłuższych niż około 2000 znaków. Przykładem może być wyszukiwanie aspektowe - kontynuacja przykładu „praca”. Mogę zezwolić na wyszukiwanie po fasetach - "Technologia", "Tytuł pracy", "Dyscyplina" oraz po słowach kluczowych, wieku pracy, lokalizacji i zarobkach. Dzięki płynnemu interfejsowi użytkownika oraz dużej liczbie technologii i tytułów stanowisk możliwe jest, że wyszukiwanie może obejmować dużą liczbę opcji do wyboru. Dostosuj ten przykład do życiorysów, a nie ofert pracy, wprowadzi jeszcze więcej aspektów, a bardzo łatwo możesz sobie wyobrazić wyszukiwanie z wybranymi stu aspektami lub nawet tylko 40 aspektami, z których każdy ma 50 znaków (np. tytuły stanowisk, nazwy uczelni, Nazwy pracodawców). W takiej sytuacji może być pożądane przeniesienie PUT lub POST, aby zapewnić prawidłowe przesyłanie danych wyszukiwania. Np.: * **POST** do `domain/Jobs/` Ale semantycznie jest to instrukcja tworzenia kolekcji. _Możesz_ również powiedzieć, że wyrazisz to jako utworzenie wyszukiwania: * **POST** do `domain/Jobs/Search/` lub (jak sugeruje burngramma poniżej) * **POST** do `domain/JobSearch /` Semantycznie może się to wydawać sensowne, ale w rzeczywistości niczego nie tworzysz, tylko wysyłasz żądanie danych. Tak więc semantycznie jest to **GET** , ale **GET** nie gwarantuje obsługi tego, czego potrzebujesz. Tak więc pytanie brzmi – próbując zachować jak największą zgodność z projektem RESTful, jednocześnie upewniając się, że trzymam się ograniczeń protokołu HTTP, jaki jest najbardziej odpowiedni projekt wyszukiwania?


title: Jak zostać doskonałym programistą aplikacji, wywodzącym się z niskopoziomowego zaplecza?

text: Większość mojej kariery to praca nad algorytmami numerycznymi, przetwarzaniem obrazu, kalibracją danych naukowych, sprawianiem, że diody LED mrugają… bardzo mało na poziomie całych aplikacji i wyrafinowanych GUI. Chociaż napisałem kilka aplikacji, według dzisiejszych (lub 10 lat temu') standardów, były to zabawki, proste opakowania demonstracyjne wokół przełamujących liczby czarnych skrzynek, w których jestem dobry. Rozglądając się, widzę niewielkie zapotrzebowanie na niskopoziomowe umiejętności w zakresie liczb/pikseli, łączenie się bezpośrednio ze sprzętem i tym podobne; to wszystkie aplikacje na komputery stacjonarne, aplikacje na smartfony, aplikacje internetowe. Interesują mnie głównie aplikacje desktopowe, z których mogą korzystać ludzie inteligentni technicznie - naukowcy, inżynierowie, lekarze itp. - ponieważ spędziłem już w takich środowiskach mnóstwo czasu. Może więc czas zostać ekspertem w tego typu tworzeniu oprogramowania. Poza czytaniem, czytaniem i innymi lekturami (oczywiście) oraz zabawianiem się w hobbystyczne projekty zwierząt domowych, jakie są najskuteczniejsze sposoby, aby doświadczony programista spoza aplikacji zaczął rozwijać ten konkretny rodzaj wiedzy? Które książki, witryny i blogi są szczególnie przydatne do nauki projektowania poziomów dla całych aplikacji?


title: Metoda fabryczna a wzorzec projektowy metody fabrycznej

text: Obecnie studiuję wzorce projektowe z książki (które, chociaż nie próbowałem niczego innego, uważam, że są doskonałe) Head First Design Patterns. Nie rozumiem dwóch pojęć: **Metoda fabryczna** i **Wzorzec projektowy metody fabrycznej**. Próbowałem zrozumieć, co każdy z nich oznacza, i doszedłem do pewnego wniosku. Chciałbym wiedzieć, czy moje definicje są dokładne. * * * **Metoda fabryczna** jest metodą, która ma na celu jedno: utworzenie obiektu określonego nadtypu i zwrócenie go. Może, ale nie musi, przyjmować parametr i może, ale nie musi, 'decydować' za pomocą instrukcji `if', jaki rodzaj konkretnego obiektu utworzyć. Na przykład jest to metoda fabryczna: public Hat createHat(String hatColor){ Hat hat; if (hatColor.equals("czerwony")) hat = new RedHat(); else if (hatColor.equals("niebieski")) hat = new BlueHat(); else if (hatColor.equals("zielony")) hat = new GreenHat(); inny kapelusz = nowy DefaultHat(); czapka zwrotna; } * * * **Metoda fabryczna _Wzorzec projektowy_** jest **nazwana na cześć** metody fabrycznej. Ten wzorzec zapewnia określony sposób hermetyzacji tworzenia obiektów od klienta. Działa to tak: Wzorzec to system dwóch klas, **Creator** i **ConcreteCreator**. Creator jest klasą „abstrakcyjną”, a ConcreteCreator jest podklasą tej klasy. **Zadaniem ConcreteCreator** \- utwórz obiekt i zwróć go **przy użyciu metody fabrycznej**. Musi zawierać tylko tę jedną metodę. **Zadanie Twórcy** \- manipulowanie i używanie obiektu otrzymanego z jego podklasy, ConcreteCreator, i zwykle zwracanie go klientowi. Robi się to w ten sposób: Kreator zawiera metodę `abstract`, jej sygnaturę przypomina `SupertypeObject createObject()`. Gdy potrzebuje obiektu typu `SupertypeObject`, wywołuje `createObject()`. Chodzi o to, że `createObject()` jest jak powiedziałem `abstract`. Zadaniem ConcreteCreator jest wdrożenie tej metody. W ten sposób implementacja `createObject()` jest ukryta przed Stwórcą. Nie wie, jaki obiekt **concrete** otrzyma, ale wie na pewno, że jest to typ `SypertypeObject`. W ten sposób klient może użyć obiektu `Creator` do tworzenia obiektów jakiegoś nadtypu, ale tworzone obiekty konkretne będą zależeć od podklasy. W ten sposób zadeklarowanie `ShoeFactory = new CaliforniaStyleShoesFactory()` spowoduje, że `factory` będzie produkować buty w stylu kalifornijskim, podczas gdy `ShoeFactory factory = new NYStyleShoesFactory()` sprawi, że `factory` będzie produkować buty w stylu NY. Ponieważ realizacja tworzenia konkretnych obiektów zależy od ConcreteCreator. Kod do zademonstrowania: Class Client(){ public static void main(String[] args){ Fabryka butów; Buty do butów; fabryka = nowy NYStyleShoeFactory(); but = fabryka.makeBut(); System.out.println(but.getOpis()); // „But w stylu NY”. // Funkcja makeShoe() w ShoeFactory wywołuje metodę createShoe() w podklasie, otrzymuje // but (nie zna konkretnego typu buta. Zależy od podklasy) i // wykonuje na nim manipulacje. // Zwraca but klientowi. factory = new CaliforniaStyleShoeFactory(): shoe = factory.makeShoe(); System.out.println(but.getOpis()); // „Buty w stylu kalifornijskim”. } } * * * Czy moje zrozumienie tych dwóch pojęć jest poprawne? Dziękuję


title: Certyfikat PMP. Jak to osiągnąłeś? Jak było przygotowanie?

text: Uzyskanie certyfikatu Project Management Professional (PMP) może być rygorystyczne. Czy próbowałeś tego? Jak przebiegał twój proces przygotowania? Czy podczas wypełniania szczegółów dotyczących projektu PMP były jakieś czkawki? Obecnie przechodzę przez przewodnik PMbok. Wygląda na to, że jest pełna teorii!! I przeczytałem to co najmniej dwa razy !!


title: Czy LINQ to SQL nie działa?

text: Czy jest jakiś powód, aby nadal używać Linq to SQL, czy lepiej jest przejść na techniki ORM, takie jak EF, NHibernate itp. Używamy Linq to SQL w nowej aplikacji dla dużych przedsiębiorstw, która będzie istnieć przez długi czas. Motywacją dla tej nowej aplikacji korporacyjnej jest to, że aplikacja została napisana zwyczajnie w Visual Basic, a ponieważ Microsoft zaprzestał wsparcia, byliśmy zmuszeni przepisać aplikację. Wygląda na to, że już tam jesteśmy, ale tym razem z naszym DAL (warstwą dostępu do danych). Przeczytałem już ten artykuł, ale porównuje się to tylko do słabości EF.


title: Przeglądy aplikacji / kodu dla samotnych programistów?

text: Czy są jakieś usługi, które „za rozsądną cenę” dadzą i zapewnią dobre i techniczne doradztwo w zakresie zastosowań. W wielu projektach zwykle jestem jedynym programistą i czasami myślę, że część mojej pracy wymaga poprawy pod kątem wydajności, lepszych interakcji MVC itp. Byłoby świetnie, gdyby była profesjonalna usługa, która faktycznie może i zrobię takie recenzje


title: Co oznacza „(powiedz)” w tej metodzie Java w Hadoop The Definitive Guide?

text: Co oznacza „(powiedz)” w tej metodzie Java? > Ponieważ `Mapper` i `Reducer` są oddzielnymi klasami, parametry typu mają > różne zakresy, a rzeczywisty argument typu `KEYIN` (powiedzmy) w > `Mapper` może różnić się od typu parametru typu ta sama > nazwa (`KEYIN`) w `Reducer`. Na przykład w maksymalnej temperaturze > przykład z wcześniejszych rozdziałów, `KEYIN` zastąpiono przez `longWritaeble` dla `Mappera` i `Text` dla `Reducera`. Z Hadoop The Definitive Guide, Tom White, strona 224 (zeskanowana wersja strony pod adresem 223 i 224).


title: BlazeDS: Konwencja nazewnictwa metod serwera DTO

text: Mam następujące pole w Flex: [Bindable] public var zIndex:uint; Próbowałem stworzyć metody przetwarzania wywołań w Javie i napotkałem problem. 1. public int getZIndex(); // Nie działa. 2. public int getzIndex(); // Pracuje. Myślałem, że litera po `get`/`set` powinna być pisana wielkimi literami? Czy jest ku temu powód? Nie mogłem znaleźć żadnej dokumentacji. Znalazłem odpowiedź na StackOverflow, która stwierdza, że pierwsza z nich jest poprawnym sposobem na nazwanie akcesora/mutatora.


title: Plusy i minusy otwartego lub zamkniętego pozyskiwania produktów niszowych

text: Jeden z opracowanych przeze mnie produktów jest tak naprawdę aplikacją typu niszowego (2 lub 3 innych konkurentów na rynku). Chociaż w większości jestem samotnym użytkownikiem tych aplikacji, myślę teraz o sprzedaży aplikacji. Moje pytanie brzmi: * Ze względu na mały udział w rynku i to, że jest to projekt niszowy, czy radzę otworzyć lub zamknąć aplikację?


title: Nauczanie "projektowania/rozwoju stron internetowych" w grupie licealno-szkolnej. Dobre źródła?

text: Być może wkrótce zacznę prowadzić zajęcia z „projektowania i tworzenia stron internetowych” dla grupy kooperatywnej w szkole domowej. **Jakieś sugestie dotyczące materiałów „kursowych”?** Moją pierwszą myślą było zapoznanie się z programem Opera Web Standards Curriculum, ale chciałbym usłyszeć o możliwych alternatywach lub sugestiach, które lepiej opisują „podstawy” rozpoczęcia projektowania i rozwijania strony internetowe. Niekoniecznie szukam tematów, tylko istniejących zasobów. Bardzo dziękuję za Twój wkład!


title: Czy inżynierowie oprogramowania mogą zostać certyfikowanymi profesjonalnymi inżynierami (PE)?

text: Czy ktoś wie, czy inżynier oprogramowania może zostać certyfikowanym profesjonalnym inżynierem lub w skrócie PE? Wiem, że moi kumple, inżynierowie mechanicy, elektrycy lub budowlani, mogli zostać PE, zdając egzamin. Czy taki egzamin istnieje w Inżynierii Oprogramowania?


title: Czy programiści powinni być zaangażowani w fazy testowania?

text: używamy klasycznego procesu rozwoju w kształcie litery V. Następnie mamy wymagania, architekturę, projekt, implementację, testy integracyjne, testy systemowe i akceptację. Testerzy przygotowują przypadki testowe w pierwszych fazach projektu. Problem polega na tym, że ze względu na problemy z zasobami (*) fazy testowe są zbyt długie i często są skracane ze względu na ograniczenia czasowe (znasz kierowników projektów... ;)). Deweloperzy przeprowadzają testy jednostkowe tak, jak powinni. Moje pytanie jest więc proste: czy programiści powinni być zaangażowani w fazę testów i czy nie jest to zbyt „niebezpieczne”. Obawiam się, że da to kierownikom projektów fałszywe poczucie lepszej jakości, ponieważ praca została wykonana, ale czy dodatkowe osobo-dni będą miały jakąkolwiek wartość? Nie jestem przekonany, czy deweloperzy przeprowadzają testy (bez obrazy, ale wszyscy wiemy, że dość trudno jest w kilku kliknięciach złamać to, co zrobiłeś w kilka dni). Dzięki za podzielenie się swoimi przemyśleniami. (*) Z niejasnych powodów zwiększenie liczby testerów nie wchodzi na dzień dzisiejszy. (Tak z góry, to nie jest duplikat Czy programiści powinni pomagać testerom w projektowaniu testów?, który mówi o przygotowaniu testów, a nie o wykonywaniu testów, gdzie unikamy implikacji programistów)


title: Jak najlepiej zaimplementować „pamięć podręczna do odwołania” z memcache na wielu poziomach?

text: **użyty tu termin "klient" nie odnosi się do przeglądarki klienta, ale do serwera klienta** **Przed przepływem pracy w pamięci podręcznej** 1. klient wysyła żądanie HTTP --> 2. proces serwera --> 3. przechowuj przeanalizowane wyniki do memcache do następnego użycia (cache na czas nieokreślony) --> 4. zwróć wyniki do klienta --> 5. klient pobierz wynik, zapisz do lokalnego memcache klienta z TTL **Po przepływie bufora** 1. inny klient wysyła żądanie HTTP --> 2. znaleziono memcache zwraca wyniki memcache do klienta --> 3. klient otrzymuje wynik, przechowuje w lokalnym memcache klienta z TTL _TTL = czas życia_ Czy mogę wiedzieć, kiedy dane zostały zaktualizowane i wygasnąć istotne memcache(s) odpowiednio. Jednak pułapki związane z TTL pamięci podręcznej lokacji klienta 1. Wszelkie aktualizacje danych przed TTL nie są pobierane przez pamięć podręczną klienta. 2. W odwrotny sposób, gdy nie ma aktualizacji, pamięć podręczna klienta nadal wygasa po TTL 3. Pierwsze żądanie (lub jednoczesne żądania) po TTL pamięci podręcznej otrzyma ograniczenie, ponieważ musi powtórzyć _"Przed przepływem pracy w pamięci podręcznej"_ W przypadku gdzie klient wymaga kilku żądań HTTP na jednej stronie internetowej, może to mieć bardzo niską wydajność. Idealnym rozwiązaniem powinien być klient do buforowania w nieskończoność do **informacji**. Oto trzy propozycje dotyczące **dalsza uwaga** **Propozycja 1 :** Użyj nagłówka HTTP (bieżąca implementacja) 1. Klient wysłał żądanie HTTP nagłówek czasu ostatniej modyfikacji 2. Serwer sprawdza, czy ostatnia modyfikacja danych time=ostatnia pamięć podręczna czas powrotu status 304 3. klient na podstawie nagłówka decyduje o dalszym przetwarzaniu DOBRY? ---- - zaoszczędź trochę parsowania dla klienta - mniejszy transfer danych ZŁY? ---- - uruchamianie żądania HTTP jest nadal powolne - serwer nadal musi przetworzyć wiele żądań **Propozycja 2 :** Konsekwentne wysyłanie żądania HTTP w celu sprawdzenia czasu ostatniej modyfikacji wszystkich grup danych 1. klient uruchamia żądanie HTTP 2 .serwer zwraca czas ostatniej modyfikacji dla wszystkich grup danych 3. klient porównuje lokalny czas ostatniej pamięci podręcznej z wynikiem 4. jeśli grupa danych czas ostatniej pamięci podręcznej < czas ostatniej modyfikacji serwera to poproś ponownie tylko o tę grupę danych DOBRY? ---- - pobieraj tylko to, co nie jest aktualne - mniej żądań dla serwera ZŁEGO? ---- - każda strona internetowa wymaga żądania HTTP **Propozycja 3 :** Poinformuj klienta o pojawieniu się nowych danych (Push) 1. Gdy serwer zakończy powiadomienie o zmianie w grupie danych 2. Powiadom klientów o zmianach 3. pomóc klientom ponownie pobrać dane 4. następnie zresetować lokalną pamięć podręczną klienta po przeanalizowaniu danych DOBRE? ---- - niech pamięć podręczna będzie działać/zachowywać się jak prawdziwa pamięć podręczna ZŁA? ---- - zachęcam do wyścigu Moje preferencje to propozycja 3, a coś takiego jak Gearman może być idealne. Tam, gdzie jest zmiana, serwer Gearmana wysyła zadanie do wielu klientów (pracowników). Czy jestem szalony? (Wiem, że moje pierwsze pytanie jest trochę szalone)


title: Czy programista powinien znać wewnętrzne działanie sprzętu komputerowego?

text: Nie mówię tylko o tym, jak przydzielana jest pamięć i zarządzaniu pamięcią (rzeczy, których można się nauczyć na przykład z C), ale raczej o aspekcie sprzętowym io tym, jak każdy element sprzętu komputerowego działa wewnętrznie i jak komunikują się ze sobą. Ilu z was to wszystko wie?


title: Jak pisać testy dla kodu, który zależy od konkretnych implementacji zewnętrznych, których nie można podrobić?

text: Tło: Zastanawiam się nad wprowadzeniem koncepcji testów jednostkowych do moich współpracowników poprzez stworzenie kilku dla modułu, nad którym pracuję; jego wymagania ostatnio się zmieniły i wymagają większej liczby abstrakcji/interakcji, więc wydaje się, że jest to dobry sposób na opracowanie zestawu testów, które „udowodnią”, że działa bez konieczności ręcznego przeglądania aplikacji. Problem polega jednak na tym, że moduł opiera się na niemożliwych do podrobienia czynnikach zewnętrznych, a mianowicie plikach PDF i XSL. Zasadniczo czytam XML z bazy danych i stosuję do niego transformację XSL, a następnie konwertuję go do pliku PDF przy użyciu biblioteki o nazwie ABCPDF. Ten plik PDF jest następnie scalany z innym plikiem PDF na podstawie statycznego szablonu. Wiem, że mogę przetestować XML i upewnić się, że wartości są poprawne, ale wiele potencjalnych błędów i problemów jest związanych z faktycznym wyświetlaniem gotowego dokumentu - m.in. drobiazgi, takie jak zawijanie długich ciągów tekstowych, gdzie określone obszary HTML znajdują się w odniesieniu do dokumentu itp. Czy można w ogóle przetestować te rzeczy (zdaję sobie sprawę, że są to prawdopodobnie testy integracyjne lub... trzeci rodzaj testu, którego nazwa zapomnij [nie o testach akceptacyjnych, innego rodzaju], a nie o testach **jednostkowych**), ponieważ, o ile mi wiadomo, nie mogę łatwo wykpić pliku PDF bez jego utworzenia, a następnie odczytania go z powrotem lub utworzenia ciągu HTML (tj. przekształcony XML) i parsowanie go ręcznie w celu sprawdzenia obecności określonych komórek tabeli w stosunku do innych komórek tabeli. Czy w takiej sytuacji powinienem skupić się na testach jednostkowych, aby upewnić się, że informacje są poprawne i że mogę _utworzyć_ plik PDF, scalić je lub cokolwiek innego i uciec się do ręcznego testowania rzeczywistych problemów z wyświetlaniem?


title: Czy lepiej wydać zasoby na wykwalifikowany zespół, czy na dobrą praktykę procesową?

text: Który z nich jest ważniejszy? Wykwalifikowany zespół czy dobra praktyka procesowa? Kiedy mówię wykwalifikowani, mam na myśli logicznych, kreatywnych członków z dobrymi umiejętnościami kodowania i testowania. Dobrym procesem byłaby metodologia rozwoju, taka jak agile, scrum itp.


title: Jak sprawdzić, czy aplikacja była już wcześniej zainstalowana

text: W jaki sposób aplikacje programowe śledzą, czy użytkownik już wcześniej zainstalował aplikację w swoim systemie Windows? Załóżmy, że instalujesz aplikację X w wersji próbnej, usuwasz ją, a następnie instalujesz ponownie, a po ponownym uruchomieniu wykryje, że już ją zainstalowałeś. Jeśli odinstalujesz i wyczyścisz wszystkie informacje z rejestru, nie powinieneś wiedzieć, że już je zainstalowałeś... Zastrzeżenie: Nie próbuję "hackować" żadnej aplikacji, tylko myślę o tym, jak to jest zaimplementowane.


title: Dlaczego cytowanie identyfikatorów błędów w informacjach o łatach może być uważane za złą praktykę?

text: Opierając się na komentarzu i późniejszych głosach pozytywnych od ponownego otwarcia błędu w porównaniu z nowym: > Cytowanie identyfikatorów błędów w informacjach o łatach jest po prostu... bardzo nieprzyjazne. – Krelp Wygląda na to, że przynajmniej niektórzy uważają, że odwoływanie się do identyfikatorów błędów w informacjach o łatach nie jest dobrym pomysłem. Jestem dość niedoświadczonym programistą, więc zastanawiam się, dlaczego tak jest.


title: Jak mogę poprawić jakość raportów SQL?

text: Ostatnio napotkałem problemy, w których niektóre raporty nie generowały poprawnych wyników. Mamy już dział QA, który przegląda raporty, a następnie nasi właściciele biznesowi również je przeglądają; to nie zapobiegło problemowi. Próbuję znaleźć przyzwoity sposób na posiadanie uprzęży testowej, aby upewnić się, że raporty przynoszą mi pożądany wynik. Do tej pory myślałem o posiadaniu statycznej migawki bazy danych (punkt w czasie), następnie 1. uruchomiłbym sprocs raportu (procedury składowane) na moich danych ze zdefiniowanymi parametrami 2. zapisz dane wyjściowe 3. napisz testujące sprocs, które wywołują raportujące sprocs z parametrami zdefiniowanymi przeze mnie 4. Sprawdź dopasowanie wyników za pomocą słowa kluczowego EXCEPT. Czy możesz zaoferować jakieś sugestie i alternatywy?


title: NDA w wywiadach

text: Mam zaplanowane rozmowy kwalifikacyjne dla dwóch dużych, szanowanych, nieco konkurencyjnych firm amerykańskich. Jeden z nich (ten, dla którego wywiad odbywa się jako pierwszy) poprosił o przyniesienie na rozmowę podpisaną NDA. Nie jestem specjalistą - raczej zwykłym serwerem Java z wieloletnim doświadczeniem - ale nie mam żadnego konfliktu interesów między moimi poprzednimi pracodawcami a żadnym z tych dwóch i nie byłem wcześniej w podobnej sytuacji. Obawiam się jednak, że podpisanie umowy NDA dla pierwszego pracodawcy może stanowić problem, jeśli z drugim pójdzie dobrze i zdecyduję się tam pojechać. Czy to rozsądny strach? Jeśli tak, co mogę zrobić?


title: graficzna struktura danych w Javie (lub Pythonie)

text: **czy Java ma wykresy jako zintegrowaną strukturę danych**? A co z Pythonem? Zostałem przydzielony do napisania programu, który rozwiązuje problem TSP (problem komiwojażera) za pomocą GRASP (procedura chciwego randomizowanego wyszukiwania adaptacyjnego). Dopiero zapoznaję się z GRASP i chciałbym mieć dobrą działającą strukturę danych dla wykresów, która obejmuje **wykreślanie wykresu** i możliwość przypisania specjalnego koloru do krawędzi (abym mógł pokolorować ostateczne rozwiązanie: najtańsza ścieżka hamiltonowska). Będę miał prezentację wyjaśniającą moje ostateczne rozwiązanie, skąd potrzeba wykreślenia wykresu. Pożądana byłaby również opcja **generowania wykresu losowego na n wierzchołkach** , więc mam kilka łatwo dostępnych przykładów. Naprawdę miałem nadzieję, że ktoś to zrobił wcześniej, więc nie zaczynam od zera. Jestem matematykiem (a przynajmniej staram się nim być), więc proszę, bez wymyślnego slangu programistycznego. Dziękuję Ci


title: Czy można zdefiniować wspólny interfejs dla danych współrzędnych kartezjańskich i biegunowych?

text: Przepisuję zestaw czytników plików, które utworzył mój były kolega, które odczytują dane surowego punktu współrzędnych XYZ (kartezjańskich) lub współrzędnych RTZ (biegunowych). Obecnie dane są przechowywane bezpośrednio w czytniku, dzięki czemu wszystko zależy od stanu tych obiektów. Chciałbym oddzielić czytnik od zebranych danych, które czyta, tworząc kilka obiektów danych. Każdy z układów współrzędnych jest prawie identyczny z czysto opartego na danych punktu widzenia. Współrzędne kartezjańskie X (Lista dubli) Y (Lista dubli) Z (Wielowymiarowa tablica dubli w [X,Y]) Współrzędne biegunowe R (Lista dubli) T (Lista dubli) Z (Wielowymiarowa tablica dubletów w [R ,T]) Próbuję ustalić, czy mogę z czystym sumieniem zdefiniować wspólny interfejs dla obu. Dane są takie same, chociaż to, co reprezentują, jest nieco inne. Każda z nich ma dwie przeciwległe osie układu współrzędnych 3D oraz tabelę wartości Z w różnych kombinacjach tych osi. Ale współrzędna X niekoniecznie jest odwzorowana na R. I nie jestem pewien, jak nazwałbym właściwości wspólnego interfejsu – „Oś1”, „Oś2” i „Z”? A może próbuję tutaj skonsolidować coś, co naprawdę musi pozostać oddzielne? Czy powinien istnieć oddzielny (choć podobny) interfejs dla każdego obiektu danych reprezentującego współrzędne z każdego systemu?


title: Jak przetestować funkcję aktualizującą hasło w bazie danych?

text: Mam testową bazę danych z kilkoma kontami użytkowników. Nie chcę łamać żadnych testów. Jeśli piszę funkcję aktualizującą hasło dla użytkownika w db oraz taką, która je odczytuje. Czy najlepiej zresetować hasło do poprzedniego, gdy skończę testować funkcję aktualizacji? Nigdy wcześniej nie pisałem testów jednostkowych, więc jestem trochę zdezorientowany.


title: Co to jest deklaratywny interfejs użytkownika?

text: Ciągle widzę ten termin na blogach o frameworkach. Rozumiem różnicę między programowaniem deklaratywnym a imperatywnym, ale w jaki sposób odnosi się to konkretnie do interfejsu użytkownika? Dlaczego wydaje się, że jest na to specjalne określenie? Czy to są różne „rzeczy”? Jeśli tak, jaka jest alternatywa dla deklaratywnego interfejsu użytkownika i dlaczego miałbym go używać?


title: Jak sprawdzić lub ocenić umiejętności debugowania osoby?

text: Jakie umiejętności określają osobę, która jest w stanie z łatwością debugować kod? Jakiś czas temu mój przyjaciel przeprowadził wywiad ze stosunkowo dobrym programistą. Zatrudniono programistę. Potrafił pisać dobry kod, rozumiał frameworki i wzorce projektowe. To, czego mu brakowało, to umiejętności debugowania. Nie mógł w ogóle debugować, a znalezienie problemów z jego lub cudzym kodem było dla niego ogromnym bólem. Od tego czasu zastanawiamy się, jak możemy ocenić lub oszacować umiejętności danej osoby w zakresie debugowania. Więc pierwsze pytanie brzmi: jakie umiejętności decydują o tym, czy dana osoba może skutecznie debugować oprogramowanie? A po drugie: jak sprawdzić te umiejętności podczas rozmowy kwalifikacyjnej?


title: Czy istnieje wzorzec projektowy, który rozwiąże ten problem?

text: Borykałem się z projektem, więc pomyślałem, że zapytam tutaj i zobaczę, czy ktoś jest w stanie pomóc :) **Omówienie na wysokim poziomie** Projektuję aplikację do grywalizacji ćwiczeń poprzez tworzenie mini konkursów (np. Kto może schudnąć najwięcej w ciągu 3 miesięcy lub przejechać najwięcej kilometrów na rowerze w ciągu miesiąca). Użytkownicy mogą tworzyć zawody (na razie nazywając je wyścigami) i muszą być w stanie określić ograniczenia - uczestnicy muszą być w określonym przedziale wiekowym, mieć określoną wagę, maksymalną liczbę uczestników w wyścigu itp. **Moje obiekty ** RaceParticipant - dla zwięzłości jedyną istotną właściwością jest int Age. Race: public class Race { public virtual int RaceId { get; ustawić; } public wirtualny ciąg RaceName { get; ustawić; } public virtual int RaceTypeId { get; ustawić; } public wirtualny TrainingType RaceType { get; ustawić; } public virtual IEnumerable<RaceParticipant> RaceParticipants { get; ustawić; } public virtual IEnumerable<RaceConstraint> RaceConstraints { get; ustawić; } } Klasa abstrakcyjna RaceConstraint: public abstract class RaceConstraint { public string DisplayText { get; ustawić; } public string ValidationText { get; ustawić; } public virtual bool PassesConstraint(Wyścig, uczestnik RaceParticipant); } Implementacja RaceConstraint MaxNumberOfParticipants: public class MaxNumberOfParticipants : RaceConstraint { public int MaximumNumberOfParticipants { get; ustawić; } public MaxNumberOfParticipants() { DisplayText = "Maksymalna liczba zawodników"; ValidationText = "Ten wyścig osiągnął maksymalną liczbę zawodników."; } public override bool PassesConstraint(Wyścig, uczestnik RaceParticipant) { bool result = false; if (race.RaceParticipants.Count() <= MaximumNumberOfParticipants) { wynik = true; } zwraca wynik; } } Implementacja RaceConstraint AgeRange: public class AgeRange : RaceConstraint { public int Minimalny wiek { get; ustawić; } public int Maksymalny wiek { get; ustawić; } public AgeRange() { DisplayText = "Przedział wiekowy zawodników"; ValidationText = string.Format("Zawodnicy muszą być w wieku od {0} do {1}.", MinimumAge, MaximumAge); } public override bool PassesConstraint(Wyścig, uczestnik RaceParticipant) { bool result = false; if (minimalny wiek <= uczestnik.wiek && uczestnik.wiek <= maksymalny wiek) { wynik = true; } zwraca wynik; } } **Pytanie** Moje pytanie dotyczy miejsca przechowywania wartości MinimumAge, MaximumAge i MaximumNumberOfParticipants. Używam najpierw kodu Entity Framework, więc wiem, że nie muszę się martwić bezpośrednio o schemat, ale muszę pomyśleć o tym, które właściwości dodać do EF i z którym obiektem będą one połączone. Obecnie EF tworzy osobną tabelę dla każdej implementacji RaceConstraint, co wydaje się przesadą i zdecydowanie nie chcę, aby DisplayText i ValidationText były przechowywane w db dla każdej instancji. Myślałem o przeniesieniu wartości MinimumAge, MaximumAge i MaximumNumberOfParticipants do właściwości Race, ponieważ każdy wyścig będzie miał dla nich wartości, ale wydaje się, że Race i RaceConstraint byłyby zbyt połączone. Chciałbym móc dodać RaceConstraint w przyszłości, gdy zmienią się wymagania, bez konieczności dodawania właściwości do Race, a tym samym dodawania kolumny do tabeli Race db. Myślę, że będę musiał utworzyć obiekt kontenera dla RaceConstraint, który będzie zawierał kolekcję wszystkich możliwych RaceConstraints. Czy byłoby sensowne umieszczenie tych właściwości w tym obiekcie, a następnie usunięcie IEnumerable RaceConstraints z Race i zamiast tego dodanie właściwości dla RaceConstraintContainer? A może za bardzo się nad tym zastanawiam i jest pewien wzorzec projektowy, który mogę naśladować. Jestem pewien, że nie jestem pierwszą osobą, która natknęła się na ten scenariusz! Z góry dziękuję. **AKTUALIZACJA** Po zastanowieniu się nad tym przez kilka dni i wypróbowaniu każdej z odpowiedzi, myślę, że @maple_shaft naprawdę rozwiązał problem polegający na tym, że EF przeszkadzał w projektowaniu OO. Myślę, że znalazłem kompromis gdzieś pośrodku. Do obiektu Race dodałem właściwości, takie jak MinimumAge, MaximumAge i MaximumNumberOfParticipants, ponieważ z perspektywy bazy danych wszystkie są bardzo powiązane i każdy wyścig będzie miał wpisy dla każdego z nich. Zmieniłem klasę abstrakcyjną RaceConstraint na interfejs, który wymaga tylko bool PassesConstraint(). Lepiej wykorzystałem DisplayText, czyniąc z niego adnotację danych właściwości w wyścigu (np. [Display(Name = "Maksymalna liczba zawodników")]), ponieważ tak naprawdę chciałem go tylko dla etykiet w interfejsie użytkownika. Przeniosłem tekst z ValidationText do komunikatu o wyjątku, jeśli PassesConstraint() nie powiedzie się. Na koniec stworzyłem klasę RaceManager do przechowywania listy RaceConstraints i obsługi dodawania użytkowników poprzez sprawdzenie każdego RaceConstraint. Ta klasa zajmie się również usuwaniem użytkowników, określaniem zwycięzców itp. Myślę, że będzie to dobrze działać również z punktu widzenia MVC, ponieważ nie przekazuję modeli do widoku, który ma metody. Klasa Race będzie służyła tylko do przechowywania danych EF i stworzy czysty model do dodawania lub aktualizowania wyścigów z widoku. Dzięki za pomoc wszystkim!


title: Jak obsłużyć powiadomienia do kilku widoków cząstkowych tego samego modelu?

text: Pracuję nad refaktoryzacją starej symulacji maszyny Turinga. Aplikacja korzysta z klasy, która zawiera stan i logikę wykonania programu oraz kilka paneli do wyświetlania reprezentacji taśmy i przedstawia stan, komunikaty i kontrolki GUI (start, stop, lista programów, ...). Chciałbym dokonać refaktoryzacji przy użyciu architektury MVC, która nie była pierwotnie używana: ramka jest jedynym sposobem na uzyskanie dostępu do różnych paneli, a ponadto istnieje silne sprzężenie między klasą „silnika” a aktualizacjami GUI w zakresie `frame.displayPanel.state.setText("zatrzymany");` lub `frame.outputPanel.messages.append("coś");` Wygląda na to, że powinienem umieścić kod związany ze stanem w obserwowalnej klasie modelu i uczynić różne panele obserwatorami. Mój problem polega na tym, że klasa java Observable dostarcza tylko globalne powiadomienie do Observerów, podczas gdy wolałbym nie odświeżać każdego Observera za każdym razem, ale tylko wtedy, gdy część, którą konkretnie obserwuje, uległa zmianie. * Zastanawiam się nad zaimplementowaniem sobie kilku wektorów słuchaczy (dla stanu / pozycji, dla komunikatów wyjściowych, ...), ale mam ochotę wynaleźć koło na nowo. * Pomyślałem również o dodaniu kilku flag, które obserwatorzy mogliby sprawdzić, takich jak `isNewMessageAvailable()`, `hasTapeMoved()`, itp., ale brzmi to również w przybliżeniu. BTW, czy mogę zachować pętlę pobierania / wykonywania w modelu, czy powinienem ją przenieść w inne miejsce? Możemy myśleć w sposób teoretycznie idealny, ponieważ całkowicie przerabiam tę małą aplikację.


title: Jakie są struktury danych w arkuszu kalkulacyjnym?

text: Chciałbym zrozumieć, jak rozwiązywany jest arkusz kalkulacyjny (grupa nazwanych lub inaczej zidentyfikowanych komórek zawierających wartości lub formuły odwołujące się do innych komórek). Próbowałem przyjrzeć się istniejącym projektom, ale tak wiele się działo z GUI, serializacją, zdarzeniami itp., że nie mogłem znaleźć arkusza kalkulacyjnego. W najprostszy sposób, jak to działa?


title: Grupowanie zajęć według tematu lub zależności?

text: Nasz projekt składa się z aplikacji użytkownika oraz aplikacji serwerowej. Aplikacja serwera przygotowuje pliki danych, które wykorzystuje aplikacja użytkownika. Ponieważ dane są ogromne, są przechowywane w niestandardowym formacie. Projekt zawiera więc wiele zajęć związanych z odczytywaniem i zapisywaniem danych. Aplikacja użytkownika nie potrzebuje strony do pisania, więc nie chcemy mieć tam kodu, ponieważ może działać na urządzeniach o ograniczonych zasobach, a także dlatego, że wydłuża kompilację (C++ nie jest znany z posiadania szybkich kompilatorów). Powiedzmy, że mam dwie klasy (mam dziesiątki takich par): * `DataReader` * `DataWriter` Te klasy działają na tej samej rzeczy, na danych serializowanych. Ale pierwszy jest potrzebny tylko w aplikacji użytkownika, a drugi jest potrzebny tylko w aplikacji serwera. Czy zasugerowałbyś prowadzenie takich klas * Razem; na przykład * `common/data/DataReader` * `common/data/DataWriter` * Oddzielne jak * `userapp/data/DataReader` * `serverapp/data/DataWriter` Z tym idzie kompilacja. Zwykłe rzeczy żyją w `common` i są kompilowane do biblioteki połączonej z obydwoma. Tak więc pierwsza opcja dzieli się dalej na dwie: * Razem w `common/data` i powiązana z `common.a` lub * Razem w katalogu `common/data`, ale każde połączone z celem, który tego potrzebuje. Teraz każdy ma swoje wady i zalety: * Są blisko spokrewnione, więc warto trzymać je razem. Ale * posiadanie obu w jednej bibliotece sprawia, że biblioteka jest większa i kompiluje się dłużej * kompilowanie każdej z osobna oznacza, że układ katalogu nie odpowiada układowi projektu, co jest raczej mylące i komplikuje skrypty budowania * Trzymanie ich oddzielnie sprawia, że struktura kompilacji jest bardziej logiczna i unika niepotrzebnych pracują dla kompilatora, ale podczas ich aktualizacji komponenty daleko od siebie muszą zostać zmodyfikowane (obie aplikacje są utrzymywane przez ten sam zespół, więc nie jest tak, że ktoś nie byłby świadomy drugiej części) Obecnie mamy mieszankę między podejściami ( niektóre klasy są oddzielne, inne nie, a wspólna biblioteka zawiera sporo rzeczy, które powinny być w poszczególnych projektach), które chciałbym uporządkować. Czy jest jakieś zwykłe zalecenie dla takiej sytuacji? A może jakieś przydatne doświadczenie z podobnymi przypadkami?


title: Za pomocą której techniki Facebook i pininterest wyświetlają obrazy?

text: Jeśli ktoś zauważył, że po otwarciu obrazu na Facebooku dzieje się coś takiego: - załóżmy, że jesteś na swojej stronie głównej na Facebooku: - adres URL to https://www.facebook.com/ teraz, jeśli otworzysz obraz, otrzyma otwarte w nowym modalnym oknie i zmianie adresu URL na:- https://www.facebook.com/photo.php?fbid=10151125374887397&set=a.338008237396.161268.36922302396&type=1&theater O ile wiem, w każdym typowym przypadku nakładka modalna zachowały ten sam adres URL w pasku adresu , Moje pytanie brzmi, w jaki sposób Facebook / pintrest osiąga to zachowanie polegające na nieładowaniu całej strony, ale nadal osiąga zmianę w pasku adresu. Czy jest do tego jakaś wtyczka jquery lub javascript?


title: Czy istnieje coś takiego jak ramy kodu specyfikacji?

text: Od jakiegoś czasu googluję i nie mogę pojąć, dlaczego to jeszcze nie istnieje. Przez workflow specyfikacja-kod rozumiem system, który łączy kod z jego specyfikacją. Na przykład mógłbym patrzeć na repozytorium i podświetlić konkretną wersję, a to dałoby mi powiązaną specyfikację. Mógłbym również odwrócić ten proces i wybrać specyfikację, która pokazałaby mi wszystkie powiązane zmiany i problemy w kodzie. Szukam tego, abym mógł wydobyć obecny system dla pomysłów na mój uniwersytecki FYP pakietu programistycznego wykorzystującego istniejące systemy.