title: A co z wykorzystaniem MVC jako sposobu na zapewnienie Responsive Web Design?

text: Responsive Web Design pokazuje użytkownikowi różne elementy – lub elementy ułożone na różne sposoby – za pomocą zapytań o media (jeśli urządzenie to komputer stacjonarny lub laptop, pokaż im to; jeśli tablet, pokaż im; jeśli „telefon”, pokaż im inną rzecz) lub inne metodologie. A co z (zwłaszcza jeśli Twoja aplikacja/witryna i tak używa MVC) wykorzystania MVC do zwracania różnych widoków w zależności od typu urządzenia/agenta użytkownika? Każda para Model/Kontroler może mieć co najmniej trzy widoki (komputer stacjonarny, tablet, telefon, a także być może bardziej szczegółowe gradacje i/lub widoki dostosowane do większych urządzeń) i, w zależności od wielkości nieruchomości klienta użytkownika, wywoływać odpowiednie Pogląd. Myślę, że może to być bardziej naturalny i łatwiejszy do wdrożenia sposób optymalizacji doświadczenia dla wszystkich użytkowników, przynajmniej dla tych, którzy są zaznajomieni z MVC. Jak dokładnie jest to zaimplementowane (jak określany jest agent użytkownika i wywoływany jest odpowiedni kontroler ActionResult) Nie jestem jednak pewien... myśli? ## UPDATE Odpowiedź na komentarz i odpowiedź: Myślę bardziej zgodnie z tym scenariuszem, dla którego IMO zapytania o media nie poradzą sobie w zadowalający sposób: Twoja aplikacja/witryna ma jako centralny element mapę. Istnieją pomocnicze, ale ważne elementy, które są umieszczone wokół mapy (u góry, na dole i z boku), które pasują do tabletu (ledwo) i większych urządzeń. Jednak na telefonie – nie ma mowy – jest tylko miejsce na mapę, a nawet wtedy mapa jest prawie zbyt słaba. Jedynym sposobem, jaki przychodzi mi na myśl, aby sobie z tym poradzić, jest pokazanie mapy na pełnym ekranie w telefonie, z przyciskami lub linkami w stanach takich jak Wyoming, Montana i Nevada, które będą przywoływać części otaczające mapę na większych urządzeniach, ale będą zmonopolizować ekran telefonu. W każdym przypadku aktualnie wyświetlany widok będzie wymagał linków do [ponownego] otwarcia innych części aplikacji/witryny. W przeciwnym razie jedynym sposobem, w jaki można go używać z telefonem, jest noszenie ze sobą szkła powiększającego (lub powiększanie i przesuwanie po ekranie jak szaleniec, ale IMO to ból w gluteus maximus). I tak, w takim scenariuszu wydaje mi się, że Views byłoby łatwiej zaimplementować niż przerabiać CSS, bo to poważna renowacja ekranu, a nie tylko przemeblowanie.


title: W jakich okolicznościach schematy blokowe są nadal cennym i użytecznym narzędziem?

text: Kiedy po raz pierwszy zacząłem programować, w dużym stopniu polegałem na schematach blokowych (i wykresach odstępów między drukarkami). Kiedy byłem na zajęciach COBOL, nie mogłem zacząć pisać żadnego kodu, dopóki mój schemat blokowy nie został podpisany przez instruktora. Wtedy musiałem zrobić schemat blokowy do wszystkiego. Dzisiaj, dwadzieścia pięć lat później, mam tylko dwa rodzaje schematów blokowych. Bardzo specyficzne algorytmy, w których logika jest trudna lub bardzo ogólne koncepcje, aby zapewnić, że wszystkie duże kroki zostaną zdefiniowane i we właściwej kolejności. Czy istnieją inne przypadki użycia schematów blokowych, które po prostu przeoczyłem?


title: Sortowanie wierszy z autoinkrementacji klucza podstawowego

text: Czy poleganie na automatycznym kluczu podstawowym do sortowania wierszy w tabeli jest złą praktyką? Współpracownik i ja kłóciliśmy się na ten temat. Musimy być w stanie znaleźć ostatni wstawiony wiersz w tabeli i nie mamy kolumn czasu tworzenia/aktualizacji (co samo w sobie może być uważane za złą praktykę, ale to inny argument). Oczywiście nie możemy polegać na naturalnej kolejności rzędów, ponieważ może to być niespójne. Czy jest coś z natury złego w używaniu klucza podstawowego w ten sposób, biorąc pod uwagę, że jest to wartość niezmienna? Powinienem był zauważyć: nasza implementacja używa Hibernate (ORM) do pobierania naszych obiektów. Nie używamy żadnych zapytań natywnych — tylko funkcje JPQL lub Hibernate.


title: Czy warto być poliglotą języków komputerowych?

text: Często można usłyszeć, że programiści powinni uczyć się wielu różnych języków, aby się doskonalić. Nadal chodzę do szkoły i nie mam dużego doświadczenia w programowaniu (trochę ponad rok). Ale to, co było szlachetnym zamiarem poprawy umiejętności programowania, przekształciło się w pewnego rodzaju OCD: Czuję, że **Nie uspokoję się, dopóki nie nauczę się wszystkich stosunkowo znanych języków programowania.** pomóc ci (I nie mam na myśli zwykłego "Programista powinien znać przynajmniej wszystkie paradygmaty", mam na myśli naprawdę **wszystkie** języki, o których zwykle słyszysz)? Czy ktoś ma podobne doświadczenie? Czy pomaga w pracy/umiejętnościach/karierze? Jak często jesteś w stanie zastosować te umiejętności?


title: Czy coraz trudniej jest zatrudnić programistów VB.NET?

text: Jestem konsultantem, a moje ostatnie dwa zaangażowania były w sklepach VB.NET. Stało się dla mnie oczywiste, że organizacje te mają naprawdę trudność ze znalezieniem programistów FTE. Czy ktoś z Was zauważył, że coraz trudniej znaleźć deweloperów VB.NET? Jakieś myśli, dlaczego?


Zajmuję się tworzeniem strony klienta dla mojej aplikacji internetowej w JavaScript. JavaScript może komunikować się z moim serwerem przez REST (HTTP) [JSON, XML, CSV] lub RPC (XML, JSON). Piszę tego oddzielonego klienta, aby używać tego samego kodu zarówno dla mojej głównej strony internetowej, jak i moich aplikacji mobilnych PhoneGap. Jednak ostatnio martwiłem się, że pisanie strony bez prawie statycznej zawartości uniemożliwiłoby wyszukiwarkom (takim jak Google) indeksowanie mojej strony internetowej. Nauczono mnie o tym ograniczeniu około 4 lata temu, dlatego proszę tutaj, aby sprawdzić, czy to ograniczenie nadal obowiązuje. **Czy intensywne używanie JavaScriptu niekorzystnie wpływa na Googleability?**


title: Jaki jest najlepszy sposób logicznego porównania dwóch plików XML?

text: Chcę logicznie porównać dwa pliki XML. Oznacza to, że następujące wiersze tekstu powinny być takie same dla narzędzia porównywania: 1. <test><hello/><test/> 2. <test> <hello/> <test/> Jestem programistą Windows i wypróbowałem kilka narzędzia do porównywania teraz: Beyond Compare, WinMerge, Total Commander, ale wszystkie z nich porównują XML jak zwykłe narzędzie do porównywania tekstu. Czy są jakieś inne narzędzia lub podejścia, które mogę zastosować?


title: Które źródło jest godne cytowania ze względu na popularność języków programowania?

text: Piszę teraz artykuł i potrzebuję cytowanego źródła popularności języków programowania. Jednym ze znanych mi źródeł jest indeks TIOBE, jednak istnieje kilka innych, jeśli przeszukujesz google, a ranking jest inny w każdym indeksie. Którą sugerowalibyście jako cytowalną?


title: Czy powinienem trzymać moje repozytoria rozwidlone GitHub na zawsze?

text: Więc rozwidlałem czyjeś repozytorium, wprowadziłem kilka zmian, wysłałem żądanie ściągnięcia i moje zmiany zostały wprowadzone do produktu. Świetny! Ale... co powinienem zrobić z moim repozytorium rozwidlonym? Czy istnieje ważny powód, dla którego mam zachować swoje repozytorium, czy powinienem je usunąć? Nie planuję wnosić żadnych dodatkowych wkładów, ale jeśli zmienię zdanie, zakładam, że zawsze mogę to zmienić. Nie przejmuję się prowadzeniem kopii zapasowej. Bardziej martwię się o zrywanie linków, utratę wiadomości z commitem itp.


title: Projekt w tydzień / bootcamp rozwojowy

text: Nasz zespół myśli o zrobieniu „Projektu w tydzień” (bootcamp) i jestem ciekaw, czy ktoś inny ma w tym doświadczenie lub ma jakąś radę? Ideą, która się przy tym kryje, jest oderwanie się od uciążliwości biura, wzajemne motywowanie się i budowanie więzi w zespole, aby w krótkim czasie stworzyć innowacyjny i rentowny produkt. Plan jest taki, aby cały zespół deweloperski (około 5 deweloperów), projektant, kierownik projektu, kilka osób zajmujących się sprzedażą i marketingiem przebywało w centrum konferencyjnym/hotelu przez cały tydzień pracy. Będziemy całkowicie skoncentrowani na zbudowaniu jednej aplikacji internetowej (planowanej z wyprzedzeniem) i udostępnieniu jej na rynku w ciągu tygodnia. Popracujemy dość długo, ale wieczorami będziemy się bawić razem jako drużyna. W biurze zostałoby kilku członków zespołu, aby upewnić się, że nie będziemy rozpraszać się na codzienną obsługę klienta. Podobne „wciągające” podejścia są stosowane przez firmy szkoleniowe, takie jak Firebrand. Dobry pomysł? Straszny pomysł? Co powinniśmy zrobić, aby zmotywować zespół? Wszelkie przemyślenia/doświadczenia/rady byłyby bardzo mile widziane. Twoje zdrowie


title: Czy powinniśmy używać progresywnych tytułów zawodowych dla programistów?

text: Obecnie zastanawiam się nad tytułami stanowisk dla mojego zespołu programistów. Historycznie było to dość płaskie, z większością ludzi po prostu „Programistą”, a bardzo niewielu „Starszym Programistą”. Ale oba te tytuły obejmują szeroką gamę doświadczeń i wynagrodzenia. Myślałem o zastąpieniu tego postępem pięciu poziomów - * Programista * Starszy Programista * Główny Programista * Architekt * Starszy Architekt Chciałbym usłyszeć, co ludzie myślą o zaletach i wadach takiego programu. Z drugiej strony zauważyłem, że programiści pożądają dobrych tytułów. Z drugiej strony zasugerowano mi, że taka hierarchia może wywoływać urazę. Przyjmę twoje myśli. **Aktualizacja:** Dziękujemy za wszystkie świetne odpowiedzi! Z pewnością zmieniło to moje myślenie na ten temat i prawdopodobnie zachowam w tym momencie bardziej płaską strukturę.


title: Migracja z .Net 1.1 do .Net 4.0

text: Współpracuję z .Net od 7 lat. ASP Web Apps, Windows Forms, Windows Services, głównie w C#, ale niektóre w VB.Net. A kiedy zaczęliśmy pracować z .Net 1.1, pozostaliśmy przy .Net 1.1. Ostatnio zrobiłem kilka projektów w .Net 4.0, które z pewnością nie różnią się od tych wykonanych w .Net 1.1 i myślę, że można je łatwo skompilować w .Net (choć tego nie próbowałem). Widzę, że pojawiły się nowe sztuczki i metody i oczywiście framework znacznie się rozrósł... 1. Zastanawiam się, czy jest jakaś różnica między 1.1 a 4.0 w kodzie, technikach, umiejętnościach językowych (nie masz aby je wymienić, po prostu wskaż swoje ulubione, jeśli są), itp.? 2. Co poleciłbyś zrobić, aby nauczyć się nowych rzeczy stworzonych w późniejszych frameworkach niż 1.1?


title: Licencja na moje oprogramowanie

text: Nie jestem dobry w wymyślaniu, jakiego rodzaju licencji użyć, a nie chcę być pozwany lub skradziony mojej pracy, więc zamierzam zapytać. Oto moja sytuacja: tworzę oprogramowanie dla mojego szefa i YMCA, które pomaga śledzić naszych pracowników, ich uczniów i ilość lekcji, które im pozostało (w skrócie, ale program jest znacznie bardziej rozbudowany), Spędziłem prawie 100 godzin na jego tworzeniu i nie jest do końca skończony. Niektóre z godzin spędzonych w pracy były w pracy, otrzymując wynagrodzenie (nie jestem pewien, czy to ma znaczenie). Oto lista warunków, których pragnę: 1. Moje oprogramowanie nie może być w żaden sposób rozpowszechniane bez mojej wiedzy i pisemnej zgody. 2. Nie ponosić odpowiedzialności za jakiekolwiek szkody, które powoduje, za utrzymanie oprogramowania lub za jego sukces. 3. Nie życzę sobie również sprzedaży oprogramowania bez mojej wiedzy i zgody. 4. Chcę, aby oprogramowanie było zamknięte. Jeśli istnieje sposób, abym mógł mieć wszystkie te licencji w moim oprogramowaniu, byłbym wdzięczny, również gdyby ktoś mógł mi wyjaśnić, gdzie potrzebuję wyświetlonej licencji i czy musi być w kodzie źródłowym (ponieważ mam ją zamkniętą pozyskiwane).


title: Optymalizacja widżetów MVC podczas uzyskiwania dostępu do CSS i zasobów

text: Dlatego próbujemy ponownie wyobrazić sobie nasze rozwiązanie internetowe w stylu MVC. Przejście ze starego rozwiązania opartego na formularzach internetowych do pracy z ASP.NET MVC z głównym menu ładowania początkowego i dodawaniem funkcji w formularzach widżetów za pomocą HTML.Action(), która wywołuje kontroler i akcję w celu wypełnienia informacji w tej części strony . Zastanawiamy się teraz, w jaki sposób CSS i zasoby, które otrzymamy dla każdego widżetu osobno w ich własnym kontrolerze, mogą być efektywnie wykorzystane w tym scenariuszu. Jeśli użyjemy tylko HTML.Action i pozwolimy kontrolerowi dodać naszą funkcjonalność do strony, stracimy połączenie ze stroną jako całością i prawdopodobnie będziemy mogli w kółko ładować pakiet zasobów i CSS dla tego samego typu obiektów. Jak rozwiązać ten problem i umożliwić naszemu portalowi internetowemu posiadanie wiedzy o tym, które pliki css i zasoby zostały już dodane do rozwiązania?


title: Czy Razor czy XSLT są lepsze dla mojego projektu?

text: Jestem na wczesnym etapie projektowania systemu, który zasadniczo będzie podzielony na dwie części. Jedna część to usługa, a druga to interfejs z usługą dostarczającą dane za pośrednictwem czegoś takiego jak OData lub XML. Aplikacja będzie oparta na wzorcu architektonicznym MVC. W przypadku widoków rozważamy użycie XSLT lub Razor w ASP.NET. XSLT lub Razor pomogłyby w separacji problemów, w których oryginalny kod XML lub odpowiedź reprezentuje Twój model, XSLT lub „Widok Razor” reprezentuje Twój widok. W tym przykładzie zostawię kontroler. Początkowa propozycja projektu zaleca XSLT, jednak zasugerowałem użycie Razor jako bardziej przyjaznego silnika widoku. Oto powody, które zasugerowałem dla Razor (C#): * Łatwiejsza praca i tworzenie bardziej skomplikowanych stron. * Może łatwo tworzyć dane wyjściowe inne niż *ML, np. csv, txt, fdf * Mniej szczegółowe szablony * Model widoku jest silnie typowany, gdzie XSLT musiałby polegać na konwencji, np. wartości logiczne lub daty * Znaczniki są bardziej przystępne, np. nbsp , normalizacja nowej linii, normalizacja wartości atrybutów, reguły białych znaków * Wbudowany helper HTML może generować kod walidacji JS na podstawie atrybutów DTO * Wbudowany helper HTML może generować linki do akcji Argumenty dla XSLT over Razor były następujące: * XSLT jest standardem i będzie nadal istnieje wiele lat w przyszłości. * Trudno przypadkowo przenieść logikę do widoku * Ułatwienie dla nieprogramistów (z czym się nie zgadzam). * Odniósł sukces w niektórych z naszych wcześniejszych projektów. * Wartości danych są domyślnie zakodowane w formacie HTML * Zawsze dobrze uformowane Więc szukam po obu stronach narzędzi, rekomendacji lub innego doświadczenia przy dokonywaniu podobnego wyboru?


title: Jak działają programiści z niełacińską klawiaturą?

text: Czytałem pytanie o stackoverflow, gdzie kod był przeplatany rosyjskimi komentarzami i zacząłem się zastanawiać; jak pracują programiści używający niełacińskich klawiatur? Czy nadal przełączają układy klawiatury w systemie operacyjnym lub używają oddzielnych klawiatur? I dlaczego tak naprawdę zawracają sobie głowę przesiadką tylko po to, by napisać jednowierszowe komentarze?


title: Jak przeprowadzić rozmowę kwalifikacyjną do pracy w .NET/C# z facetem z doświadczeniem na Progressie?

text: Wyraźniej jest przeprowadzić wywiad z kimś doświadczonym w Javie/C++ lub innych językach bliższych C#. W takich przypadkach język i konkretne technologie są mniej ważne; ważne są zasady OOP. Ale jak to zrobić z kimś, kto pochodzi z Progress na .NET, a także ja jako ankieter, który w ogóle nie zna Progress? Ile liczy się doświadczenie postępu dla .NET/C# lub OOP? Czy te dwa światy mają wspólne zasady programowania? Czy to naprawdę dwa różne światy?


title: Duży monitor wielodotykowy?

text: Jestem pewien, że większość sklepów używa standardowej tablicy lub bardziej wymyślnej „szklanej tablicy” do omawiania pomysłów podczas spotkania. Po spotkaniu ludzie zwykle robią zdjęcia artefaktów za pomocą aparatu typu „wskaż i strzelaj”, a następnie wysyłają cyfrowe zdjęcie do wszystkich uczestników. Zastanawiam się nad zakupem naprawdę ogromnego wspornika do ekranu LCD, aby ułatwić dyskusję. Ten ekran LCD będzie wyposażony w wielodotykowy „filtr”, który będzie podłączony do komputera przez port USB. Komputer zostanie podłączony do ekranu przez port HDMI. Komputer będzie działał na standardowej instalacji systemu Windows 7. Zamiast pisać/rysować na tablicy za pomocą markera, uczestnicy będą rysować/pisać rzeczy na powierzchni ekranu palcami. Jakiekolwiek dane wejściowe otrzyma „filtr”, zostaną one odesłane z powrotem do komputera. Tak więc aplikacja, na której się koncentruje, jest odpowiedzialna za zrozumienie danych wejściowych. Zastanawiam się na razie nad użyciem "PAINT". Po dyskusji „płótno” zostanie zapisane jako obraz i przekazane uczestnikom na e-mail. ^To jest łatwa/nudna część. Oto fajna część: Możemy napisać aplikację, która w pełni wykorzysta technologię Multi-touch, aby skuteczniej ułatwiać dyskusję. Zastanawiam się nad pisaniem aplikacji takich jak te w filmach o komputerach Microsoft Surface. Możemy również wyposażyć komputer w kamerę i użyć technologii rozpoznawania twarzy, aby automatycznie określić, kim są uczestnicy, dzięki czemu możemy udostępnić pojedynczy przycisk „Roześlij kopię tego płótna uczestnikom”. Pytanie: 1. Czy ktoś używał gigantycznego ekranu wielodotykowego nad tablicą, aby ułatwić dyskusję? 2. Jeśli tak, jaki był sukces? 3. Czy jest już dostępne oprogramowanie, które umożliwia takie rzeczy? 4. Czy znasz sprzedawcę/dostawcę, który zapewnia kompletne rozwiązanie dla tego rodzaju rzeczy? Dziękuję!


title: Czy modyfikowanie __dict__ obiektu w celu ustawienia jego właściwości jest uważane za Pythona?

text: Mam klasę, która napełnia obiekty z wierszy znalezionych w bazie danych (lub innym źródle, np. MongoDB, plik CSV itp.). Aby ustawić właściwości obiektu, robi coś takiego jak `self.__dict__.update(**properties)` lub `obj.__dict__.update(**properties)`. Czy to jest uważane za Pythona? Czy to dobry wzór, którego powinienem nadal używać, czy też uważa się to za złą formę?


title: Czy Turing-complete sugeruje możliwość złośliwego oprogramowania?

text: Czy można zbudować system operacyjny, który zawiera kompletny kompilator Turinga (język?), ale nie jest w stanie uruchomić żadnego złośliwego oprogramowania? A może istnieje jakaś definicja złośliwego oprogramowania? To pytanie pojawiło się w mojej głowie, gdy zastanawiałem się, dlaczego Windows ma więcej złośliwego oprogramowania niż Linux. Jeśli Linux zawiera język programowania C i jego kompilator, myślę, że można napisać program dla Linuksa, który działa podobnie jak wirusy Windows. Ale dla Linuksa jest mniej złośliwego oprogramowania niż dla Windowsa, chociaż istnieje Wine dla Linuksa do symulacji programów Windows.


title: Programowanie formularzy systemu Windows — książki

text: Czytam więc książkę o architekturze aplikacji dla przedsiębiorstw wydaną przez Microsoft Press. To świetna książka i dużo się uczę. Jest to jednak bardzo wysoki poziom i może być stosowany w wielu różnych domenach (nawet nie tylko .NET, mimo że tak jest nastawiona książka). Pierwszym projektem, który chcę rozwinąć po przeczytaniu książki, jest aplikacja Windows Forms w .NET 4.0. Chcę wykorzystać wiele koncepcji książek do opracowania aplikacji, ale naprawdę chcę, aby przed rozpoczęciem przeczytania świetnej książki poświęconej Windows Forms, która naprawdę powie mi wszystko, co muszę wiedzieć o tworzeniu aplikacji Windows Forms. Znalazłem mnóstwo książek na temat .NET 2.0 i innych rzeczy, ale nic na temat Windows Forms w nowym .NET 4.0 Framework. Jakieś sugestie?


title: Czy powinienem zrozumieć SVN przed przejściem do GIT?

text: Pracuję w dziale, w którym nikt wcześniej nie korzystał z kontroli źródeł, łącznie ze mną. Staram się przeforsować koncepcję. Spędziłem trochę na badaniu SVN. Nauczyłem się podstaw. Mogę tworzyć/aktualizować/zamawiać/zatwierdzać za pomocą wiersza poleceń iz Tortoise. Zaczynam się uczyć tagowania i rozgałęziania, ale wciąż bardzo się mylę, jeśli chodzi o konflikty między gałęziami a pniem itp. Nadal się uczę, ale nie mam fizycznej osoby, która mogłaby mi cokolwiek pokazać. To wszystko z książek / samouczków i prób i błędów. Z tego, co wyczytałem w Internecie, wydaje się, że lepiej jest wiedzieć `git`, ale jest też bardziej skomplikowany. Nie chcę się przytłoczyć. Czy powinienem kontynuować opanowanie svn przed przejściem do git, czy też byłbym mądrzejszy, aby przejść do git teraz? Czy są plusy i minusy obu podejść?


title: Wspólna nazwa oprogramowania układowego, które może testować płytę produktu

text: Zapytanie o to może być głupie. Rozważmy wewnętrzną płytkę drukowaną dowolnego urządzenia elektronicznego (na przykład telefonu komórkowego) sterowanego przez mikrokontroler, również na tej samej płytce. Mam zamiar napisać firmware, który będzie miał funkcje do testowania różnych urządzeń peryferyjnych i innych rzeczy na płycie (piny IO, EEPROM, LCD itp.). Czy istnieje jakaś popularna nazwa takiego oprogramowania? Na przykład bootloader to rodzaj oprogramowania układowego, który umożliwia zapisywanie pamięci kodu w czasie wykonywania. EDYCJA: To nie będzie autotest. Zewnętrzne polecenia zostaną przekazane mikro, a mikro wykona je. Każde polecenie przetestuje określoną funkcję.


title: Wybór konkretnego stosu ze względu na IDE, narzędzia i łatwość konfiguracji dev env

text: Prawie zawsze wybieram stos Microsoftu zamiast czegokolwiek innego ze względu na Visual Studio, dostępne narzędzia i to, jak łatwo mogę rozpocząć programowanie z konkretnym nowym frameworkiem. **Proszę, to był tylko przykład; mogą to być inne stosy dla innych ludzi.** Nie tworzę aplikacji o znaczeniu krytycznym w czasie rzeczywistym, w których elektrownia jądrowa eksplodowałaby, gdyby moja aplikacja nie działała dobrze... Bardziej jak aplikacje dla małych firm. Ale kiedy mówię to innym programistom, nawet zanim zareagują, czuję, że mogłem się zawstydzić - wybierając stos ze względu na IDE?!.. łatwość konfiguracji?! Czuję, że „profesjonaliści” wybierają stos przez inne „ważne” rzeczy, o których nie jestem świadomy, a w wielkim schemacie rzeczy, IDE i łatwość konfiguracji dev env nie mają większego znaczenia. Uważam, że robienie tego, co robię, jest trochę niedojrzałe. Czy to naprawdę zła rzecz? Zauważ, że wybieram stos Microsoft z wielu innych powodów (C# to niesamowity język, a .Net to niesamowita platforma).. ale IDE, narzędzia i konfiguracja dev env odgrywają dla mnie dużą rolę. Zauważ też, że jestem sklepem dla 1 osoby, bardzo czasami 2 lub maksymalnie 3.


title: Co dokładnie oznacza undefined w JavaScript? Dlaczego tam jest? Jakie ma zastosowania? Jak to może być przydatne?

text: W JavaScript mamy coś, co nazywa się **undefined**. Powiedziałem coś, ponieważ tak naprawdę nie wiem, czy jest to klasa bazowa, czy zmienna wbudowana, słowo kluczowe, czy cokolwiek innego. Po prostu wiem, że tam jest. Aby zobaczyć to w akcji, możesz po prostu napisać: undefined; typnieokreślony; Czy ktoś może mi wyjaśnić, dlaczego to **coś** zostało wstawione do JavaScript? W tym języku mamy wartość `null`, więc nie powinno to być coś w rodzaju `null`. W innych językach, gdy nie znamy wartości właściwości lub zmiennej, po prostu ustawiamy ją na null. Tutaj możemy zrobić to samo. Jak możemy użyć tego _rzeczy_ w JavaScript?


title: Nie używanie słabych jednostek może denormalizować DB?

text: W następującej scenerii w ER i modelu relacyjnym: Obiekt 1-----N [Część] 1-----N [Podczęść] 1-----N [Przedmiot] (Gdzie "1---- -N" to relacja 1 do N; a [Entity] jest słabe). Rozwiązanie 1: „Obiekt” jest silną jednostką; a 'Część', 'Subpart' i 'Item' są słabymi jednostkami: Obiekt (*IDObject,...) Część (*IDObject, *IDPart,...) Podczęść (*IDObject, *IDPart, *IDSubpart,.. .) Item (*IDObject, *IDPart, *IDSubpart, *IDItem,...) (Atrybuty oznaczone * tworzą klucz składowy tabeli) W tym konkretnym przypadku "Pozycje z podczęści części obiektów", inny sposób zaprojektowania i wdrożenia tego samego problemu może być: Rozwiązanie 2: Obiekt 1-----N Część 1-----N Podczęść 1-----N Element (Wszystkie encje są silne) Implementacja tabeli: Obiekt (* AutoincrementID,...) Część (*AutoincrementID,...) Podczęść (*AutoincrementID,...) Pozycja (*AutoincrementID,...) (Każda tabela ma swój własny identyfikator: unikalne pole autoinkrementacji) Moje pytania to: Chciałbym otrzymać odpowiedź akademicką; Mam na myśli teorię o tych praktykach. 1. Jaki jest właściwy sposób zaprojektowania i wdrożenia tego scenariusza? 2. Czy „Rozwiązanie 2” jest zdenormalizowanym modelem/wdrożeniem? W którą stronę?


title: Wspólne metodologie pisania recenzji „post-mortem”

text: Niedawno dodaliśmy do naszego produktu stosunkowo dużą funkcję, która obejmowała cały dział R&D (wraz z różnymi zespołami). Ta funkcja obejmowała rozwój interfejsu użytkownika, rozwój po stronie serwera i ogromne migracje schematów SQL (i innych rzeczy, w które sam w ogóle nie byłem zaangażowany). Proces rozwoju tej funkcji był chaotyczny – zespoły Front-End i Server nie były zsynchronizowane, migracje SQL łamały bazę danych, a specyfikacje produktów były niekompletne, co oznaczało, że na każdym kroku znajdowaliśmy nowe problemy z początkową definicją, wymagające zmian do podstawowych koncepcji, na których polegali programiści. Podsumowując, funkcja, która miała zostać wydana w ciągu 10-14 dni, zajęła około 24 (intensywne) dni rozwoju. Zostałem poproszony o napisanie raportu 'Co poszło nie tak' (ze strony mojej drużyny - każda drużyna pisze taki raport ze swojego punktu widzenia). Jakie są wspólne metodologie pisania takich raportów, szczególnie w dziedzinie tworzenia oprogramowania? Również - Czy istnieje jakaś formalna nazwa dla takich raportów? EDYCJA I ODPOWIEDŹ: Najwyraźniej taki raport/proces recenzji jest powszechnie określany jako „Project Post-Mortem” (istnieją również inne nazwy). Po zrozumieniu tego znalazłem te dwa zasoby, które przedstawiają sugerowane metodologie gromadzenia niezbędnych danych, organizowania ich, analizowania i formułowania rozwiązań dla wykrytych problemów (a także kilka ogólnych informacji na temat tych recenzji i ich celów): „Zdefiniowany Process For Project Post Mortem” – http://www.csee.umbc.edu/courses/undergraduate/345/spring12/mitchell/readings/aDefinedProcessForProjectPostMortemReview.pdf „Post-Mortem Reviews: Cel i podejścia w inżynierii oprogramowania” – http: //www.uio.no/studier/emner/matnat/ifi/INF5180/v10/undervisningsmateriale/reading-materiały/p08/post-mortems.pdf


title: Czy klasy statyczne z metodami statycznymi są uważane za SOLIDNE?

text: SOLID zawiera zasadę substytucji Liskov, która mówi, że „obiekty w programie powinny być zastępowalne wystąpieniami ich podtypów bez zmiany poprawności tego programu”. Ponieważ klasy statyczne z metodami statycznymi (trochę jak klasa `Math`) w ogóle nie mają instancji, czy mój system jest uważany za SOLID, jeśli mam statyczne klasy z metodami statycznymi?


title: Gdzie mój inny rytm rozwoju byłby odpowiedni do pracy?

text: Przez lata pracowałem nad wieloma projektami, z niektórymi udanymi i wielkimi korzyściami dla firmy, a także kilkoma całkowitymi niepowodzeniami, gdy zostałem zwolniony lub w inny sposób odszedłem. Jaka jest różnica? Oczywiście wolę to pierwsze, a drugiego chcę uniknąć, więc zastanawiam się nad tą kwestią. Kluczem wydaje się być to, że moje osobiste podejście odbiega od normy. Najpierw piszę kod, pozwalając, by wszystko było spaghetti i chaosem, używając narzędzi, które „pasują mi do ręki”, którymi biegle się posługuję. Staram się to uporządkować, a potem poddaję się i zaczynam od nowa z lepszym projektem. Przechodzę przez cykle, od myślenia-projektowania do kodowania-testowania. Może się wydawać, że jest to taki sam jak każdy inny proces rozwoju, Agile lub cokolwiek innego, cykliczne między projektowaniem a kodowaniem, ale wydaje się, że istnieje subtelna różnica: metody (najlepiej) stosowane przez większość zespołów to projektowanie, kodowanie; projekt, kod; ... kiedy idę kodować, projektować; kod, projekt; (jeśli to ma sens.) Analogia do muzyki: niektóre rodzaje muzyki mają mocny takt, podczas gdy inne mają wyraźne synkopy. W praktyce po prostu nie mogę myśleć w kategoriach UML, specyfikacji i tak dalej, ale tylko próbuję kodować, debugować i refaktoryzować ad-hoc. Potrzebuję ugruntowania, jakie daje kodowanie, aby myśleć konstruktywnie, a następnie oferować zespołowi wszelkie opinie, porady lub rozwiązania i wykonywać prawdziwą pracę. Na stanowiskach, w których mogę początkowo zhakować kod kowbojski bez ograniczeń związanych z wyborem narzędzi lub języka, łatwo nabieram „wyczucia” danych, wymagań itp. i ostatecznie wykonuję dobrą robotę. W sformalizowanych stanowiskach, gdzie papierkowa robota i czysty „design” są na pierwszym miejscu, a dopiero później jakiekolwiek kodowanie (nawet dla małych projektów typu proof-of-concept), gubię się na morzu i tonę. Dlatego chciałbym wiedzieć, jak 1) zmienić swój rytm, aby pasował do bardziej sformalizowanych metod pracy zespołowej zorientowanych na metodologię, lub 2) znaleźć stanowiska w organizacjach, w których moje poczucie rytmu rozwoju jest idealne do pracy. Zmiana podstawowego podejścia do rzeczy jest prawdopodobnie nierealna. Dlatego preferowana jest opcja 2). Więc gdzie znajdę takie stanowiska? Jak powszechne jest moje podejście i gdzie jest postrzegane jako opłacalne, ale inne i nie odrzucane jako niezdyscyplinowane lub kowbojskie sposoby kodowania?


title: Jak zachować te same fragmenty kodu w wielu projektach?

text: Jestem niezależnym programistą pracującym nad wieloma projektami Androida. Mam problem z utrzymaniem tej samej funkcjonalności na różnych projektach. Na przykład trzy z moich aplikacji używają tych samych 2 klas; ponieważ to są różne projekty, kiedy muszę dokonać zmiany na tych zajęciach, muszę to zrobić trzy razy. Czy istnieje proste rozwiązanie tego rodzaju powszechnego problemu?


title: Jak obsłużyć zestaw różnych klas zdarzeń z różnymi interfejsami obsługi w jednym procesorze zdarzeń?

text: Pracuję nad frameworkiem procesora zdarzeń dla prostej gry, którą piszę, w której wiele typów zdarzeń jest obsługiwanych w pętli. Ponieważ te zdarzenia niosą ze sobą różne fragmenty danych (tj. jedno zawiera gracza i pozycję, drugie niesie wiadomość i znacznik czasu), w końcu stworzyłem dla nich różne klasy (chociaż nadal implementują wspólny interfejs, który jest _obecnie_ interfejsem znacznika) . W moim procesorze zdarzeń mam, dla każdego typu zdarzenia, zestaw obsługi zdarzeń implementujących odpowiedni interfejs (np. anonimową klasę implementującą `PlayerInteractHandler`, która obsługuje `PlayerInteractEvent`s). Ponieważ te interfejsy są implementowane przez silnik Javascript (Rhino), nie mogę użyć jednego ogólnego interfejsu. Próbując zaimplementować rzeczywisty silnik, obecnie mam następujący kod (metody wbudowane, aby pokazać ideę kodu w bardziej zwartych reprezentacjach): if (recvdEvent instanceof FooEvent){ // getHandlerList() zwraca List<EventHandler> ze względu na ograniczenia of generics for(EventHandler eh : getHandlerList(FooHandler.class) { FooEvent eventAfterCast = (FooEvent) recvdEvent } } Oczywiście istnieje kilka innych blokad `else if (recvdEvent instanceof BarEvent)`, a ja łapię i radzę sobie z problemem ClassCastExceptions. jest to, że wydaje się, że jest to niewłaściwe użycie języka zorientowanego obiektowo i muszę rygorystycznie zweryfikować inny kod ręcznie, aby zachować bezpieczeństwo typów.Inne znane mi alternatywy to zwracanie przez moje zdarzenie `Class<? rozszerza EventHandler>` w określonej metodzie, aby użyć polimorfizmu / dynamicznej wysyłki, ale wymagałoby to rzutowania _odblaskowego_ lub metody polimorficznej w klasie obsługi, która nadal zepsułaby com pełne bezpieczeństwo typów (i kolejna warstwa na samym interfejsie). Wiele procesorów zdarzeń prowadziłoby do powielania kodu i oznaczałoby posiadanie oddzielnych wątków dla każdego z nich, ponieważ projektowany jest bieżący procesor zdarzeń. Gdybym miał zachować pojedynczy wątek i procesor, potrzebowałbym jednej kolejki, której zadeklarowany typ to `AbstractQueue<GameEvent>` i byłbym z powrotem na pierwszym miejscu. Czy podchodzę do tego w całkowicie niewłaściwy sposób?


title: Jak przekonać klienta nietechnicznego, że jego specyfikacja aplikacji wymaga uproszczenia?

text: Często spotykam się z sytuacją, gdy przychodzi do mnie nowy klient z aplikacją, która ma dosłownie setki niepotrzebnych funkcji i jest całkiem jasne, że trzeba drastycznie uprościć sprawę, aby projekt miał jakiekolwiek szanse powodzenia. W jaki sposób przekonasz klienta, aby przyjął bardziej podejście Minimum Viable Product (MVP) i uprościł? edytuj: Tak więc obecnie najlepszą odpowiedzią jest dostarczenie klientowi szacunkowego czasu/kosztu dla ogromnej aplikacji. Nie przepadam za tą odpowiedzią, ponieważ nie rozwiązuje ona prawdziwego problemu w tej sytuacji. I to jest - złą praktyką jest określanie ogromnej aplikacji, a następnie próbowanie jej tworzenia od samego początku. Czuję się o wiele bardziej komfortowo początkowo budując mały, prosty fundament MVP. A potem dodawaj do tego fundamentu małe elementy, jeden po drugim. Jak więc przekonać klienta do takiego podejścia do tworzenia oprogramowania?


title: Najlepsza praktyka, aby uniknąć „grania w telefon” z argumentami konstruktora

text: Uważam, że enkapsulacja wymagana przez OO sprawia, że często przekazuję parametry od rodzica do dziecka, przez prawnuka do drugiego wnuka, po usunięciu (w rzeczywistości nie tak źle). Ale nieuchronnie w trakcie tego procesu, a zwłaszcza jeśli w grę wchodzi grafika, nastąpi zniekształcenie przez trzecią iterację `someConstructor(int minX, int minY, int maxX, int maxY)`. Znalazłem tu przynajmniej jedno pytanie sugerujące, że rozwiązaniem są obiekty parametrów. Wydaje mi się, że bardziej przypominają one kłębek zaprojektowany, aby zaspokoić fetysz o niskiej liczbie parametrów, niż naprawdę przydatny. Poza tym w tych scenariuszach generalnie tnę liczby na mniejsze kawałki (ekranu) przy każdym kroku. Przyszło mi do głowy, że jeśli te wywołania konstruktorów są ułożone linijka po linijce wyżej w łańcuchu, będę miał łatwe porównania. Ale to wydaje się tracić wszelkie pozory OOPiness. W mojej ostatniej przygodzie ze znajdowaniem-transponowanych-pomiarów rysowałem klawiaturę muzyczną. Nie chcę, aby główny widok wiedział lub dbał o to, co lub gdzie jest klucz G#. A więc najlepsze praktyki? Proszę nie mów, jedź wolniej, bądź mniej niechlujny.


title: Etyka pozyskiwania recenzji aplikacji w App Store?

text: Widzę, że więcej niż kilku programistów zabiega o 5-gwiazdkowe oceny i dobre recenzje swoich aplikacji w App Store, na swoich blogach, stronach internetowych, w opisach sklepów z aplikacjami, a nawet w oknach dialogowych, które pojawiają się w aplikacji po pewnym czasie korzystania z nich. Co ludzie uważają za wytyczne etyczne dotyczące takich próśb o recenzje i oceny? Co jest za linią? (Oprócz oczywiście złych rzeczy, takich jak płacenie za sfałszowanie przez kogoś wielu negatywnych recenzji na temat aplikacji konkurencji itp.)


title: 2 różne zadania w metodzie szablonowej

text: Czytałem o wzorcu metody szablonu, ale co do jednego nie jestem pewien. Kroki (metody) algorytmu powinny znajdować się w metodzie szablonu. W przypadku, gdy algorytm mojej metody szablonu obejmuje 2 zupełnie różne zadania, które chciałbym wykonać dla wszystkich moich obiektów, powiedzmy, że jedno to rysowanie, a drugie obliczanie, czy nadal mogę umieścić wszystkie te metody w jednej metodzie i nazwać ją moją metodą szablonu ?


title: Czy Oracle WebCenter 11g jest odpowiednikiem większej wersji SharePoint?

text: Mam pewne doświadczenie z SharePoint. Moja firma zdecydowała się wykorzystać Oracle WebCenter do stworzenia portalu wewnętrznego. Żaden z pracowników działu IT nie ma żadnego doświadczenia z Oracle WebCenter i myślę, że moglibyśmy do tej pracy wykorzystać SharePoint, ponieważ używamy go do tej pory. Jakie są więc zalety korzystania z Oracle WebCenter? Jakie masz doświadczenia z Oracle WebCenter 11g? A czym różni się od SharePoint? Co mogę zrobić z Oracle WebCenter, czego nie mogę zrobić z Microsoft SharePoint?


title: Czy należy używać oddzielnej bazy danych dla danych aplikacji i danych użytkownika?

text: Od jakiegoś czasu pracuję nad projektem i nie jestem pewien, która architektura jest lepsza. Interesuje mnie konsensus. Odpowiedź wydaje mi się dość oczywista, ale coś się we mnie gryzie i nie mogę się domyślić, co. **TL;DR to:** jak obsługiwać program z danymi aplikacji i danymi użytkownika w tej samej bazie danych, który musi mieć możliwość okresowego otrzymywania aktualizacji danych aplikacji? Jedna baza danych dla danych użytkownika i jedna dla aplikacji, czy obie w jednej? **Wersja szczegółowa to…** Jeśli aplikacja ma bazę danych, która musi przechowywać dane aplikacji ORAZ dane użytkownika, a wszystkie dane użytkownika odwołują się do danych aplikacji, bardziej naturalne wydaje mi się przechowywanie ich w tej samej bazie danych. Ale jeśli istnieje potrzeba okresowej aktualizacji danych aplikacji w tej bazie danych, czy należy ją rozłożyć na dwie bazy danych, aby można było po prostu pobrać zaktualizowany plik bazy danych danych aplikacji jako aktualizację i zastąpić stary? A może powinny pozostać jako jedna baza danych, a dane aplikacji aktualizować za pomocą skryptu, który wstawia nowe dane do istniejącej bazy danych? Drugi brzmi wyraźnie lepiej dla mnie… ale z jakiegoś powodu po prostu nie czuję się dobrze i nie mogę zrozumieć, dlaczego.


title: Jak mogę wydajnie pracować nad przepływem pracy udostępniania pulpitu?

text: Jestem niezależnym programistą Magento z siedzibą w Hiszpanii. Jednym z moich klientów jest firma zajmująca się tworzeniem stron internetowych z Niemiec i pytają mnie o coś, co wydaje mi się niemożliwe. OK, może nie niemożliwe, ale zdecydowanie nie jest to preferowany sposób robienia rzeczy. Jeden z ich klientów posiada instalację Magento Entreprise, która jest płatną (i chyba zastrzeżoną) wersją Magento. Ich klient **zabronił im pobierania plików** ze swojego serwera. Mój klient prosi mnie teraz o przestudiowanie jednego konkretnego modułu aplikacji w celu interakcji z nim z niestandardowego modułu, który będę musiał opracować. Ponieważ mają **dostęp ssh tylko do odczytu** do serwera klienta, wymyślili to _rozwiązanie_ : skonfiguruj **sesję udostępniania pulpitu/ekranu** między jedną ze stacji ich programisty a moją, wraz ze skype'em rozmowa. Ich pomysł jest taki, że powiem programiście: > pokaż mi plik foo.php Programista otworzy wtedy ten plik foo.php w swoim IDE. Będę musiał poprosić go, aby pokazał mi metodę bar, klasę nadrzędną itp. Pamiętaj, że jest to sesja tylko do odczytu, więc zapomnij o umieszczaniu `Zend_Debug::log()` w dowolnym miejscu i nie rób tego. nawet pomyśleć o punkcie przerwania xDebug (nie używają żadnego debuggera, sic). Ich klient również **zabronił im używania jakiegokolwiek systemu kontroli wersji**... Moja pierwsza reakcja, kiedy mi to wyjaśnili, była (i rzeczywiście powiedziałam im to na głos): > Cóż, znajdź innego klienta. ale uznali to za żart ode mnie. Rozumiem, że z biznesowego punktu widzenia odrzucenie klienta nie jest dobrą praktyką, ale uważam, że warunek tego zlecenia uniemożliwia jego zrealizowanie. Przynajmniej według mojego przepływu pracy. Mam na myśli sposób, w jaki pracuję lub uczę się nowego frameworka/programu to: 1. ściągnij wszystkie pliki i kopię db na mój komputer 2. utwórz repozytorium git i branch 3. uruchom aplikację lokalnie * użyj breakpointów * użyj Zend_Debug: :log() 4. napisz kod i przetestuj 5. zgódź się na git repo 6. prześlij na (najpierw test/staging, jeśli jest, produkcyjny, jeśli nie) Zgodziłem się wypróbować sesję współdzielenia pulpitu, chociaż tak myślę będzie stratą czasu. Z jednej strony mi to nie przeszkadza, płacą mi za ten czas, ale znam siebie i nie lubię uczucia utraty czasu. Z drugiej strony mam innych klientów, dla których mogę pracować zgodnie z moim workflow. Zaraz im powiem, że nie mogę (nie chcę) tego zrobić. Cóż, najpierw wypróbuję tę sesję udostępniania pulpitu: może się mylę i to faktycznie może działać. Ale lubię uważać się za profesjonalistę i wiem, że nie wiem wszystkiego. Dlatego staram się mieć otwarty umysł i zawsze chętnie uczę się nowych rzeczy. Moje pytania są następujące: 1. Czy ten przepływ pracy z udostępnianiem pulpitu może działać? Co należy zrobić, aby w pełni wykorzystać to? 2. Biorąc pod uwagę wszystkie przeszkody (lokalizacje geograficzne, brak lokalnego, brak git), czy jest inny sposób na pracę nad tym projektem?


title: używa PUT z akceptowalnymi efektami bocznymi (REST)

text: Chcę utworzyć historię cofania za każdym razem, gdy użytkownik aktualizuje formularz. Ponieważ jest to aktualizacja, chcę użyć żądania PUT. Czytałem jednak, że PUT nie musi mieć żadnych skutków ubocznych. Czy dopuszczalne jest tutaj użycie PUT? Czy istnieją lepsze alternatywy? `PUT /person/F02E395A235` { godzina: 1234567, pola: { imię: 'Jan', wiek: '41' } } Na serwerze doGet('person/:personId', // utwórz nowy zrzut osoby) Edytuj: Historia będzie widoczna dla użytkownika, wielokrotne wywołanie spowoduje powstanie wielu wersji. Rozwiązaniem było sprawdzenie, czy wersja jest unikalna przed jej utworzeniem.


title: Czy należy zdefiniować stałą łańcuchową, jeśli ma być użyta tylko raz?

text: Wdrażamy adapter dla Jaxena (bibliotekę XPath dla Javy), który pozwala nam używać XPath do uzyskiwania dostępu do modelu danych naszej aplikacji. Odbywa się to poprzez implementację klas, które mapują ciągi (przekazywane nam z Jaxena) na elementy naszego modelu danych. Szacujemy, że będziemy potrzebować około 100 klas z ponad 1000 porównań ciągów. Myślę, że najlepszym sposobem, aby to zrobić, są proste instrukcje if/else z ciągami pisanymi bezpośrednio w kodzie — zamiast definiowania każdego ciągu znaków jako stałej. Na przykład: public Object getNode(String name) { if ("name".equals(name)) { return contact.getFullName(); } else if ("tytul.equals(nazwa)) { return contact.getTitle(); } else if ("first_name.equals(name)) { return contact.getFirstName(); } else if ("last_name.equals(name)) { return contact.getLastName(); ... Jednak zawsze uczono mnie, że nie powinniśmy osadzać wartości łańcuchowych bezpośrednio w kodzie, ale zamiast tego tworzyć stałe łańcuchowe. To wyglądałoby mniej więcej tak: private static final String NAME = "name"; prywatny statyczny końcowy String TITLE = "tytuł"; prywatny statyczny końcowy String FIRST_NAME = "first_name"; prywatny statyczny końcowy String LAST_NAME = "last_name"; public Object getNode(String name) { if (NAME.equals(name)) { return contact.getFullName(); } else if (TYTUŁ.equals(nazwa)) { return contact.getTitle(); } else if (FIRST_NAME.equals(name)) { return contact.getFirstName(); } else if (NAZWISKO.equals(imię)) { return contact.getLastName(); ... W tym przypadku uważam, że to zły pomysł. Stała będzie użyta tylko raz, w metodzie `getNode()`. Bezpośrednie używanie łańcuchów jest tak samo łatwe do odczytania i zrozumienia jak używanie stałych i oszczędza nam pisania co najmniej tysiąca linii kodu. Czy jest więc jakiś powód, aby definiować stałe łańcuchowe do jednorazowego użytku? Czy dopuszczalne jest bezpośrednie używanie ciągów? * * * PS. Zanim ktokolwiek zasugeruje użycie wyliczenia, zrobiliśmy prototyp, ale konwersja wyliczenia jest 15 razy wolniejsza niż proste porównanie ciągów, więc nie jest brane pod uwagę. * * * **Wniosek:** Poniższe odpowiedzi rozszerzyły zakres tego pytania poza stałe łańcuchowe, więc mam dwa wnioski: * Prawdopodobnie w tym scenariuszu można używać łańcuchów bezpośrednio zamiast stałych łańcuchowych, **ale* * * Są sposoby na uniknięcie używania ciągów, co może być lepsze. Wypróbuję więc technikę wrapper, która całkowicie unika strun. Niestety nie możemy użyć instrukcji string switch, ponieważ nie działamy jeszcze w Javie 7. Ostatecznie jednak uważam, że najlepszą odpowiedzią dla nas jest wypróbowanie każdej techniki i ocena jej działania. Rzeczywistość jest taka, że jeśli jedna technika jest wyraźnie szybsza, to prawdopodobnie wybierzemy ją bez względu na jej piękno czy przestrzeganie konwencji.


title: Analityk systemowy a programista komputerowy?

text: Moje pytanie dotyczy pracy. Obecnie zajmuję stanowisko Analityka Systemowego. Jaka jest różnica między analitykiem systemu a programistą/analitykiem? Czy ta pozycja jest wyższa niż programista? Lub jak mam się ulepszyć?


title: Dlaczego preferuje się pisanie komunikatu w czasie teraźniejszym/imperatywnym?

text: Często czytam/słyszę, że dobre komunikaty commit powinny być pisane w czasie teraźniejszym lub używać trybu rozkazującego przy opisie zmiany, np. „Napraw xyz” zamiast „Naprawiono xyz”. Jakie są zalety takiego postępowania? Czy są różnice między różnymi VCS (czytałem je głównie o git, ale może dlatego, że głównie pracuję z git)?


title: Kontrolowanie numerów wersji w sprintach

text: Tradycyjnie numery kompilacji oprogramowania pasują do formatu * Główne * Drobne * Wydanie * Kompilacja Gdzie główna wersja jest wdrażana za każdym razem, gdy występują istotne zmiany, Drobna, gdy dodawane są nowe mini funkcje, Publikuj, gdy coś jest publikowane i Kompiluj za każdym razem, gdy jest budowane. Uważam, że dwie ostatnie cyfry działają naprawdę dobrze w środowisku CI, każda kompilacja CI zwiększa numer kompilacji, a każde wydanie do życia zwiększa numer wydania. Jednak w bardziej nowoczesnych metodologiach zniechęca się do poważnych prac nad wodospadem i przełomowych zmian. Wolimy wydawać mało i często, więc nie robimy wielkich przełomowych zmian. Biorąc to pod uwagę, bardzo trudno jest określić, kiedy utworzyć nową wersję Major. Staramy się unikać wprowadzania poważnych, przełomowych zmian i dlatego otrzymujemy bardzo wysokie liczby drugorzędnych/wydań, ale nie mieliśmy jeszcze wymówki, aby przejść na wyższą wersję. Jakie kryteria należy zastosować, aby określić, kiedy należy wykonać kompilacje główne i podrzędne (w szczególności aplikacje internetowe)? Wiem, że istnieją wersje w stylu daty, ale interesuje mnie tylko Major.Minor.Build.Release.


title: Analiza kodu i raportowanie: Maven kontra Jenkins

text: Mój zespół (ok. 10 programistów) niedawno przeszedł na Maven (projekt wielomodułowy, ok. 50 modułów) i teraz używamy Jenkins do ciągłej integracji. Ponieważ ogólna konfiguracja działa, planujemy włączyć narzędzia do analizy kodu i raportowania (np. Checkstyle i Corbertura). O ile widzę, mamy zasadniczo dwie opcje generowania takich raportów: albo użyj wtyczek raportowania Mavena do wygenerowania witryny **i/lub** użyj wtyczek Jenkins do wykonania raportu. **Które podejście jest lepsze i z jakich powodów?** Wydaje się, że oba mają swoje zalety: Maven-Reporting: * wszystko jest skonfigurowane w jednym miejscu (pliki pom) * generowanie raportów na komputerze lokalnym (tzn. bez Jenkinsa ) jest proste i nie wymaga żadnych dodatkowych kroków Jenkins-Reporting: * dostosowanie konfiguracji raportowania wydaje się bardziej intuicyjne niż w przypadku Mavena i nie koliduje z głównym zadaniem mavena w naszej konfiguracji (budowanie i wdrażanie) * pojedynczy interfejs sieciowy do sprawdzić ogólny status projektu, aby zgłoszone problemy były łatwiejsze do odnalezienia i trudniejsze do zignorowania (np. nie trzeba przeklikiwać się przez stronę mavena, kilka fajnych wątków historii, powiadomień itp.) Czy ktoś podjął podobną decyzję w przeszłość, czy z jakiegoś powodu nie jest to problem? (Jak dobrze to działa? Żałujesz?) Czy wskazane jest, aby przejść **w obie strony**, czy też ta konfiguracja jest zbyt żmudna, aby ją utrzymać? Czy istnieją aspekty problemu, o których nie wiem, lub jakieś zalety, których nie zauważyłem (np. czy raportowanie oparte na Maven jest dobrze zintegrowane z m2eclipse)? Jakieś pułapki lub typowe problemy, które możemy napotkać? **EDYTUJ:** Wypróbowaliśmy **Sonar** , jak zasugerowano poniżej (w tym jego wtyczkę Jenkins). Jak dotąd działa całkiem nieźle. Sonar jest stosunkowo prosty w instalacji i działa w oparciu o naszą konfigurację Mavena (po prostu wywołuje się `mvn sonar:sonar` lub ponownie konfiguruje zadanie Jenkinsa, to wszystko). Oznacza to, że nie musimy utrzymywać zduplikowanej konfiguracji, ponieważ wszystkie nasze ustawienia Mavena są używane automatycznie (jedynym wyjątkiem są wzorce wykluczania). Interfejs sieciowy jest fajny, a — jeszcze lepiej — jest dostępna **wtyczka Eclipse**, która automatycznie pobiera wszystkie problemy, dzięki czemu nikt tak naprawdę _nie musi_ przeglądać witryny Sonar, ponieważ **wszystkie problemy mogą być automatycznie wyświetlane w IDE**.


title: Czy mogę użyć opatentowanego algorytmu Octree w publicznym wyzwaniu programistycznym?

text: Podobne do tego pytania, ale w zupełnie innej sytuacji. Opracowywałem przykładowy kod towarzyszący proponowanemu wyzwaniu programistycznemu i zadawaniu pytań o trudne bity. W moim ostatnim pytaniu odpowiedź, którą otrzymałem, sugeruje, że używam Octree zamiast BSP-Tree. Ale Wikipedia twierdzi, że jest opatentowany. A publiczne wyzwanie programistyczne – znacznie bardziej niż prywatny program lub nawet darmowe (piwne) oprogramowanie – naprawdę zachęca ludzi do ponownego wykorzystania pomysłu bez względu na własność. Więc nie mogę ( _legalnie_ lub _z czystym sumieniem_) go tutaj użyć, prawda?


title: Jakie wytyczne sugerujesz dotyczące korzystania z właściwości celu C?

text: Objective-C 2.0 wprowadził właściwości. Chociaż osobiście uważam, że właściwości są miłym dodatkiem do języka, zauważyłem tendencję, aby każda instancja była zmienna jako właściwość. Przykładowe kody Apple nie są od tego wyjątkiem. Uważam, że jest to sprzeczne z duchem OOP, a ponieważ udostępnia klientowi znacznie więcej szczegółów implementacji klasy, niż musi wiedzieć. Jakie wskazówki proponujesz dla właściwych właściwości użytkowych w celu C?


title: Czy rekrutacja nie powinna być odwrotna?

text: Naprawdę nie wiem, dlaczego nikt do tej pory o tym nie pomyślał, ale rekrutacja powinna być odwrotna. Inżynierowie powinni mieć jakąś wspólną platformę, na której będą rejestrować interesujące ich umiejętności lub domeny, demonstrować swoje możliwości, a firmy powinny to stamtąd przejąć. Myślę, że jest to o wiele bardziej skuteczne, ponieważ jeśli dobrze zarabiasz za pracę, którą lubisz wykonywać, generalnie zrobisz z tego dobrą robotę. Czy ktoś zna taką platformę rekrutacyjną?


title: Jakie są najlepsze sposoby na pozyskanie beta testerów?

text: Mam kilka projektów, które wkrótce zostaną opublikowane, zarówno komercyjne, jak i open source. Wszystkie projekty można pobrać, a nie aplikacje internetowe. Pracowałem nad nimi sam i chciałbym otrzymać informację zwrotną w okresie beta, ale obecnie nie mam dużej liczby odbiorców (choć rynki są duże). Jakie są najlepsze sposoby na udział w betach? Czy są jakieś istniejące witryny lub społeczności specjalizujące się w testowaniu oprogramowania, z którymi mogę się skontaktować? W tym momencie szukam specjalnie testerów technicznych, którzy nie są zastraszeni zagłębieniem się w kod i mogą pomóc w wykryciu błędów bezpieczeństwa, błędów logicznych itp. **Edytuj** : szukam witryn lub społeczności podobnych do Invite Dzielić. Samo zaproszenie do udostępniania byłoby idealne, ale wydaje się, że nie ma żadnych publicznych informacji o tym, jak przesłać wersję beta. **Objaśnienie nagród** : Chociaż artykuł Joela na temat uruchamiania wersji beta jest pomocny, zastanawiam się, czy nie istnieje istniejąca społeczność dostępna do testów beta jakiegokolwiek rodzaju, technicznych lub użytkowników. Jako samouk i jedyny programista nie mam zbyt wielu kontaktów technicznych, które byłyby odpowiednie do testowania. Kilka miesięcy temu zaproponowałem witrynę do testowania wersji beta w Strefie 51, ale wygląda na to, że albo została zakopana, nie było dużego zainteresowania, albo słabo pasuje do StackExchange. Jeśli znasz istniejące społeczności testowe, witryny takie jak InviteShare lub inne sposoby pozyskiwania testerów, udostępnij je.


title: Która technologia asp.net najlepiej pasuje do tej sytuacji?

text: Myślę, że mogę liczyć na WebAPI, ale WebForms, WebPages i MVC to wszystkie możliwości. Chcę utworzyć witrynę sieci Web asp.net zawierającą głównie zawartość statyczną i łącza do innych witryn. Jedynym "wymyślnym" bitem będzie mapa Bing z pinezkami, które dodam - ale nawet one są statyczne. I będzie galeria zdjęć. No i reklamy też. I wreszcie, musi działać dobrze na telefonach i tabletach, a także w przeglądarkach komputerowych. Który „smak” technologii asp.net jest najbardziej odpowiedni dla tego typu witryny internetowej? ## AKTUALIZACJA W VS 2012 projekty stron internetowych nie są dostępne pod szablonami | Wizualizacja C# | Sieć. Co _jest_ tam: ASP.NET Empy Web Application ASP.NET Web Forms Application ASP.NET MVC 3 Web Application ASP.NET MVC 4 WebApplication Dynamiczne jednostki danych ASP.NET Web Application i formularze internetowe to to samo?


title: Zrozumienie licencji publicznej Microsoft (MS-PL)

text: Zamierzam użyć kilku produktów open source w komercyjnej aplikacji, nad którą pracuję. Jeden z nich jest na licencji MIT, co rozumiem jako umożliwiające łączenie oprogramowania komercyjnego. Jednak drugi produkt open source jest objęty licencją MS-PL, ale nie rozumiem, czy ta licencja jest w pełni kompatybilna z oprogramowaniem komercyjnym. Pytanie brzmi, czy mogę używać OSS na licencji MS-PL w aplikacji komercyjnej/własnej/na sprzedaż? Dziękuję.


title: Co ma na myśli Dijkstra, kiedy zaleca wyjątkowo dobre opanowanie języka ojczystego?

text: Dijkstra pisze tutaj: > Poza skłonnością do matematyki, wyjątkowo dobre opanowanie > języka ojczystego jest najważniejszym atutem kompetentnego programisty. Nie rozumiem drugiej części tego cytatu. Czy możesz wyjaśnić lub rozwinąć? PS Dorastałem w Indiach. W domu mówię po bengalsku; Mówię marathi w społeczności, w której żyję; Hinduski jest językiem narodowym i bardzo powszechnie używanym, więc wiem o tym, a w szkole i na studiach uczono mnie angielskiego jako pierwszego języka. Oczywiście teraz myślę w wielu językach i muszę przyznać, że nie mam nad nimi _mistrzostwa. Czy to naprawdę wpływa na moje umiejętności programistyczne? Jeśli tak, to jak? i czy są jakieś _rozwiązania_?


title: Programowanie Flash pod Ubuntu

text: To niefortunne, ale biorę ten kurs, który wymagałby ode mnie pracy we Flash CS3 (szczególnie programowanie), co zmusiłoby mnie do korzystania z okien. Jestem bardzo przyzwyczajony do programowania w Ubuntu, a uruchomienie systemu Windows wymagałoby ode mnie zmiany dysku twardego. Zastanawiałem się, czy: * mógłbym użyć Flex 4.5 SDK do opracowania (coś w rodzaju aplikacji konsolowej), a później podłączyć go w Windows z GUI, który mam zaprojektować? (Innymi słowy, czy Flex 4.5 SDK jest zgodny z CS3)? * Czy istnieje dobry lekki edytor, w którym mogę edytować ActionScript 3?


title: Jaka jest najlepsza praktyka dostarczania zadania programiście?

text: Jako bardzo nowy kierownik ds. oprogramowania/kierownik zespołu, chcę tylko wiedzieć, jaka jest najlepsza praktyka w zakresie dostarczania pełnych wymaganych informacji o zadaniu programistom w moim zespole. W tym czasie po prostu dostarczam im: * Interfejs GUI (jeśli jest używany) * Schemat DB (jeśli jest używany) * Schemat głównych klas. Myślę, że to nie wystarczy. Zwykle prowadzimy długie dyskusje o szczegółach; Chcę tylko zmniejszyć obszar dyskusji. Co powinienem zrobić? Czy uważasz, że powinniśmy przynajmniej przeprowadzić proces przeglądu kodu?


title: Czy wzorzec dekoratora istnieje w klasach Java IO?

text: Aby wykonać zadanie, muszę dowiedzieć się, który z wzorców projektowych Gang of Four jest klasą `java.io.Reader` i jej podklasami `java.io.PushbackReader`, `java.io.BufferedReader` i `java.io. FilterReader` zostały zbudowane z. Zgodnie z tym postem wzorem projektowym byłby wzór dekoratora. Ma to dla mnie sens tylko wtedy, gdy `PushbackReader`, `BufferedReader` i `FilterReader` można udekorować tak, aby były używane w tym samym czasie, tworząc efektywnie `BufferedPushbackFilterReader`. Czy to jest pomysł?


title: Ustalenie kosztu utrudnień (odpadów)

text: Od jakiegoś czasu nasze zespoły Scrumowe doświadczają powtarzających się utrudnień spowodowanych czynnikami zewnętrznymi dla zespołu. Zespoły omówiły utrudnienia w swoich retrospektywach, a także wspomniały o tym w „Scrumie Scrums”. Wydaje się, że utrudnienia mogą wymagać zaangażowania kierownictwa, ponieważ wymaga to dość istotnych zmian w sposobie działania i konfiguracji naszych środowisk technicznych. W małej scenerii tego rodzaju problemy byłyby prawdopodobnie łatwe do rozwiązania, ponieważ zespół miałby większą kontrolę, ale w tym środowisku jest wiele zespołów, interesariuszy i stron. Chciałbym poznać Twoje doświadczenie w uwidacznianiu marnotrawstwa i kosztów. Czy po prostu szacujesz godziny stracone na powtarzające się utrudnienia (takie jak „marnujemy 10 godzin każdego sprintu czekając na serwerze kompilacji), czy masz bardziej systematyczny sposób zbierania i pokazywania marnotrawstwa? Chciałbym zebrać odpady w oparciu o Six Sigma (i Lean Software Development) i oszacować koszt odpadów w postaci punktów fabularnych. Np. na każdej retrospektywie wyróżnij marnotrawstwo w siedmiu kategoriach, podając liczbę zmarnowanych punktów historii w każdej kategorii. Siedem kategorii to: Praca częściowo wykonana, Dodatkowe funkcje, Ponowne uczenie się, Przekazania, Przełączanie zadań, Opóźnienia i Wady. Na końcu retrospektywy pojawiłoby się jasne wskazanie kosztów zewnętrznych przeszkód, na które kierownictwo byłoby w stanie z łatwością zareagować. Co myślisz?


title: Cross Compile Arm Program dla firmy Intel

text: Szukałem sposobu na uruchomienie programu przeznaczonego dla procesorów ARM na komputerze Intela, ale mogę znaleźć tylko sposoby na odwrotne działanie, kompilowanie programów Intela dla ARM. Czy są jakieś kompilatory typu open source, które mi na to pozwolą? Dzięki za pomoc.


title: Niezależność i szacowanie historyjek użytkownika, które opierają się na wspólnym poprzedniku

text: Powiedzmy, że mam historyjki użytkowników dotyczące korzystania z katalogu produktów w sklepie: * Jako administrator mogę dodawać/modyfikować/usuwać pozycje katalogu (jedna lub więcej historyjek użytkownika, tutaj nie ma znaczenia) * Jako klient mogę przeszukiwać katalog produktów * Jako klient Mogę zobaczyć szczegóły produktu Każda z tych historii opiera się na poprzedniku: zaprojektuj i utwórz bazę danych do przechowywania informacji o produkcie. Tworzenie db mogę wyrazić jako: 1. inna historia: Jako właściciel sklepu chcę przechowywać informacje o produktach, które sprzedaję 2. Zadanie do wykonania w historii, które w pierwszej kolejności zostanie wybrane do wykonania W pierwszym przypadku tworzę zależność narracyjną, w drugim Zastanawiam się gdzie oszacować to dodatkowe zadanie. Powiedzmy, że dodaje dwa dodatkowe punkty fabularne. Do której historii należy dodać te punkty? Wszystkie (i przeszacować pozostałe historie w przyszłości), żadne? Myślę, że ta druga opcja również może utrudnić szacowanie - muszę pamiętać, aby dodać tę historię do historii zależnych, a następnie ewentualnie ją usunąć. Jak radzić sobie w takich sytuacjach?


title: Który wzorzec projektowy może być dobrym wzorcem do złożonych obliczeń numerycznych między co najmniej trzema różnymi modelami danych?

text: Kod źródłowy, nad którym obecnie pracuję, wykonuje obliczenia numeryczne między wieloma różnymi właściwościami należącymi do różnych modeli danych. Wszystkie obliczenia są zakodowane dużą metodą z dużą ilością instrukcji If, co czyni je bardzo złożonymi, trudnymi do zmiany i zawierającymi pewne błędy. Nie znalazłem wzorca projektowego, który pasowałby do tego problemu, który moim zdaniem jest bardzo powszechny w każdej aplikacji finansowej. Jakaś pomoc z tym? Kod źródłowy to c# z .NET fw 4.


title: Licencjonowanie przeniesionych funkcji

text: Znalazłem kilka funkcji w Pythonie 2.7.2, które są bardzo przydatne i odtworzyłem je w C++ na własne potrzeby. Jak prawidłowo przyznać im kredyt w Pythonie? Czy w ogóle muszę? Właściwie nigdy nie spojrzałem na ich kody źródłowe. Właśnie napisałem funkcje, które wyświetlają te same wartości, co wersje funkcji w Pythonie.


title: instrukcje if/else lub wyjątki

text: > **Możliwy duplikat:** > Programowanie obronne a obsługa wyjątków? Nie wiem, czy to pytanie lepiej pasuje do tej strony, czy Stack Overflow, ale ponieważ moje pytanie jest związane raczej z praktykami, że jakiś konkretny problem. Rozważ więc obiekt, który coś robi. I to coś może (ale nie powinno!) pójść nie tak. Tak więc tę sytuację można rozwiązać na dwa sposoby: po pierwsze, z wyjątkami: DoSomethingClass exampleObject = new DoSomethingClass(); spróbuj { przykładowyObiekt.DoCoś(); } catch (ThisCanGoWrongException ex) { [...] } Po drugie, z instrukcją if: DoSomethingClass exampleObject = new DoSomethingClass(); if(!exampleObject.DoSomething()) { [...] } Drugi przypadek w bardziej wyrafinowany sposób: DoSomethingClass exampleObject = new DoSomethingClass(); ErrorHandler error = exampleObject.DoSomething(); if (error.HasError) { if(error.ErrorType == ErrorType.DivideByPotato) { [...] } } który sposób jest lepszy? Z jednej strony słyszałem, że wyjątki powinny być używane tylko w naprawdę nieoczekiwanych sytuacjach, a jeśli programista wie, że coś może się wydarzyć, powinien użyć if/else. Z drugiej strony, Robert C. Martin w swojej książce Czysty kod napisał, że wyjątki są znacznie bardziej zorientowane obiektowo i łatwiejsze do utrzymania w czystości.


title: Dlaczego wyjątki są uważane za lepsze niż testowanie jawnych błędów?

text: > **Możliwy duplikat:** > Programowanie obronne a obsługa wyjątków? > stwierdzenia lub wyjątki if/else Często natrafiam na gorące posty na blogu, w których autor używa argumentu: „wyjątki kontra jawne sprawdzanie błędów”, aby opowiedzieć się za swoim preferowanym językiem w stosunku do innego języka. Ogólny konsensus wydaje się być taki, że języki korzystające z wyjątków są z natury lepsze/czystsze niż języki, które w dużej mierze opierają się na sprawdzaniu błędów za pomocą jawnych wywołań funkcji. Czy stosowanie wyjątków jest uważane za lepszą praktykę programistyczną niż jawne sprawdzanie błędów, a jeśli tak, to dlaczego?


title: Czy mamy obowiązek ulepszania starego kodu?

text: Przeglądałem jakiś stary kod, który napisałem. Działa, ale to nie jest świetny kod. Wiem teraz więcej niż wtedy, więc mogłem to poprawić. To nie jest aktualny projekt, ale aktualny, działający kod produkcyjny. Czy mamy obowiązek cofnąć się i ulepszyć kod, który napisaliśmy w przeszłości, czy też właściwą postawą jest „jeśli nie jest zepsuty, nie naprawiaj go”? Moja firma sponsorowała zajęcia z przeglądu kodu kilka lat temu i jednym z głównych wniosków było to, że czasami jest to po prostu wystarczająco dobre; pójść dalej. Czy w pewnym momencie powinieneś po prostu nazwać to wystarczająco dobrym i przejść dalej, czy też powinieneś spróbować popchnąć projekty, aby ulepszyć stary kod, kiedy myślisz, że mógłby być lepszy?


title: Buforowanie obiektów biznesowych w aplikacji MVC

text: Pomyślałem, że to bardziej pytanie architektoniczne, więc zdecydowałem się opublikować je tutaj, a nie Stack Overflow. Tworzę więc aplikację internetową MVC i właśnie skończyłem pisać kod, który opakowuje moje wywołania do bazy danych (DAL) i daje mi dostęp za pośrednictwem interfejsu do tworzenia, aktualizowania i usuwania moich obiektów biznesowych. Szybki przykład, abyś mógł się zapoznać, zanim zajmę się moim prawdziwym pytaniem — oto jak załadować przechowywany rekord w bazie danych dla kogoś z frontendu: BusinessObjects.Record record = DAL.LoadRecord(int recordId); Teraz po załadowaniu `rekordu` mogę go dostarczyć do interfejsu użytkownika (sieci) poprzez `Model` na jednej z moich stron lub dołączając go do `ViewBag` lub czegoś podobnego. To, jak się tam dostanie, nie jest ważne ani o co się martwię, bardziej chodzi o to, jak mogę utrzymać stan w środowisku bezstanowym (sieciowym). Problem, z którym mam teraz do czynienia, polega na tym, że dostarczam ten „rekord” do interfejsu, a moja strona odczytuje z niego i generuje wokół niego interfejs użytkownika. W tym momencie „zapis” w mniejszym lub większym stopniu zniknął. Został stworzony, przekazany i przeczytany, ale z powodu bezpaństwowego środowiska został utracony. Mogę odtworzyć ten rekord na podstawie danych, które mam w interfejsie użytkownika w drodze powrotnej, ale zwykle jest to obsługiwane przez dodanie tego „rekordu” do pamięci podręcznej, a następnie po prostu pracuję z nim, dopóki nie będzie w pełni gotowy ma być ponownie utrwalony (coś w rodzaju `Saver.SaveRecord(record);`)? To znacznie przyspieszyłoby pracę dla użytkownika, ponieważ nie musiałby wywoływać „Zapisz” i „Załaduj” za każdym razem, gdy zmieniono stronę lub coś się wydarzyło, ale nie wiedziałem, czy to jest właściwa architektura, czy jeśli istnieje wspólny wzorzec, który ignorancko zignorowałem. Próbowałem załadować kilka linków i właśnie znalazłem przykłady _jak_ skonfigurować coś takiego, ale naprawdę chcę wiedzieć, _czy_ powinienem_ coś takiego ustawić, czy jest lepszy sposób na zrobienie tego . Musisz wybaczyć początkujące pytanie. Jest dość oczywiste, że ten problem był rozwiązywany wiele razy, po prostu nie znam niektórych z bardziej powszechnych wzorców, w związku z czym nie jestem pewien, czego dokładnie szukać.


title: Jakie optymalizacje można wykonać dla miękkiego kodu czasu rzeczywistego w C#?

text: Piszę miękkiej aplikacji czasu rzeczywistego w C#. Niektóre zadania, takie jak odpowiadanie na żądania sprzętowe przychodzące z sieci, muszą zostać zakończone w ciągu kilku milisekund; jednak nie jest to w 100% krytyczne dla misji (tzn. możemy tolerować to, że jest na czas przez większość czasu, a 1% jest niepożądany, ale nie jest porażką), stąd „miękka” część. Teraz zdaję sobie sprawę, że C# jest językiem zarządzanym, a języki zarządzane nie są szczególnie odpowiednie dla aplikacji czasu rzeczywistego. Jednak szybkość, z jaką możemy wykonywać zadania w C#, a także funkcje języka, takie jak zarządzanie odbiciem i pamięcią, znacznie ułatwiają zadanie budowania tej aplikacji. Czy są jakieś optymalizacje lub strategie projektowe, które można zastosować, aby zmniejszyć ilość kosztów ogólnych i zwiększyć determinizm? Idealnie miałbym następujące cele: * Opóźnij wyrzucanie elementów bezużytecznych, aż będzie „bezpieczne” * Pozwól, by garbage collector działał bez ingerencji w procesy w czasie rzeczywistym * Priorytety wątków/procesów dla różnych zadań Czy są jakieś sposoby na zrobienie tego w C#, i czy są jakieś inne rzeczy, na które należy zwrócić uwagę w odniesieniu do czasu rzeczywistego podczas korzystania z C#? Platforma docelowa dla aplikacji to profil klienta .NET 4.0 w 64-bitowym systemie Windows 7, z. Obecnie ustawiłem go na profil klienta, ale była to tylko domyślna opcja i nie została wybrana z żadnego konkretnego powodu.


title: Czy istnieje narzędzie lub proces, który pomoże autorom FOSS w uzgodnieniu licencji?

text: Projekt Evercookie ma kilku współautorów i nie ma wyraźnej licencji na kod. Obecnie toczy się dyskusja na liście dyskusyjnej deweloperów, próbująca dowiedzieć się, jakie są opcje licencjonowania. * Czy jest jakieś narzędzie lub proces, którego można użyć do znalezienia konsensusu między różnymi licencjami? * Co można zrobić, jeśli niektórzy współtwórcy nie odpowiadają, nie można ich znaleźć itp.?


title: Gdzie należy pisać testy akceptacyjne?

text: Zaczynam zajmować się pisaniem automatycznych testów akceptacji i nie wiem, gdzie pisać te testy, a konkretnie na jakiej warstwie w aplikacji. Większość przykładów, które widziałem, to testy akceptacji napisane dla **domeny**, ale co z testami, takimi jak: > Podanie nieprawidłowych danych Gdy użytkownik prześle formularz Następnie odtwórz sygnał błędu Wygląda na to, że pasują do **UI** a nie dla **Domeny** ani prawdopodobnie nawet **Warstwa usług**.


title: Demonstracja, że usuwanie śmieci jest szybsze niż ręczne zarządzanie pamięcią

text: Czytałem w wielu miejscach (do diabła, nawet tak napisałem), że wyrzucanie śmieci _mogłoby_ być (teoretycznie) szybsze niż ręczne zarządzanie pamięcią. Jednak o wiele trudniej jest pokazać, niż opowiedzieć. Tak naprawdę nigdy nie widziałem **_widziałem_** żadnego fragmentu kodu, który demonstrowałby ten efekt w działaniu. Czy ktoś ma (lub wie, gdzie mogę znaleźć) kod, który demonstruje tę przewagę wydajności?


title: log4cxx: czy jest to stabilna opcja dołączania jako część biblioteki rozproszonej?

text: Przenosimy naszą bibliotekę Java API do C++. (Nasze platformy docelowe to Linux i Windows.) Ponieważ mamy minimalne doświadczenie w C++, krzywa uczenia się była dość stroma, ale ogólnie byliśmy w stanie zrobić czysty port. W Javie używamy log4j i szukamy użycia log4cxx w wersji C++. Kilka godzin zajęło nam skompilowanie log4cxx do kompilacji w systemie Windows (zarówno z powodu naszego braku doświadczenia, jak i dokumentacja kompilacji wydaje się nieaktualna). Nie próbowaliśmy jeszcze budować na Linuksie. Dla mojego niedoinformowanego oka log4cxx wydaje się niechlujny i nieco przestarzały. Czy istnieje konsensus co do tego, czy jest to dobra platforma rejestrowania, z którą można iść dalej? (Wydaje się, że Log4j został zastąpiony przez SLF4J i Logback.) Patrzyłem również na rejestrowanie doładowań, ale nie wydaje się to być częścią głównej dystrybucji, więc nie byłem pewien, czy otrzymałem bardziej standardową opcję z tym albo nie. Jeszcze jedna informacja, którą należy dodać do oceny — pierwszy klient, któremu ją przekazujemy, już używa log4cxx.


title: Stopniowe podejścia do wstrzykiwania zależności

text: Pracuję nad umożliwieniem testowania jednostkowego moich klas przy użyciu wstrzykiwania zależności. Ale niektóre z tych klas mają wielu klientów i nie jestem jeszcze gotowy na refaktoryzację ich wszystkich, aby zacząć przekazywać zależności. Więc staram się robić to stopniowo; zachowując na razie domyślne zależności, ale pozwalając na ich nadpisanie na potrzeby testowania. Jednym z podejść, które rozważam, jest po prostu przeniesienie wszystkich "nowych" wywołań do ich własnych metod, np.: public MyObject createMyObject(args) { return new MyObject(args); } Następnie w moich testach jednostkowych mogę po prostu podklasować tę klasę i nadpisać funkcje tworzenia, aby zamiast tego tworzyły fałszywe obiekty. Czy to dobre podejście? Czy są jakieś wady? Ogólnie rzecz biorąc, czy można mieć zakodowane zależności, o ile można je zastąpić do testowania? Wiem, że preferowanym podejściem jest jawne wymaganie ich w konstruktorze i chciałbym w końcu się tam dostać. Ale zastanawiam się, czy to dobry pierwszy krok. **EDYTUJ:** Jedna wada, która właśnie mi się pojawiła: jeśli masz prawdziwe podklasy, które musisz przetestować, nie możesz ponownie użyć testowej podklasy, którą napisałeś dla klasy nadrzędnej. Będziesz musiał stworzyć podklasę testową dla każdej prawdziwej podklasy, która będzie musiała zastąpić te same funkcje tworzenia.


title: Jaka jest dobra strategia zarządzania danymi statycznymi w SOA?

text: Pracuję nad aplikacją sieci Web, która znajduje się na szczycie wielu usług internetowych RESTful, wchodzących w interakcję głównie z tymi usługami za pośrednictwem wiadomości w formacie JSON przez HTTP. Nasza aplikacja posiada dużą ilość danych statycznych, które są odczytywane z tych usług (wyszukiwania internacjonalizacji, konfiguracja itp.) podczas pracy. Niestety, ściśle współpracujemy z zespołem, który opracowuje serwisy internetowe, więc architekturę backendu znamy dość dokładnie. Większość usług korzysta ze sklepu MongoDB w celu zapewnienia trwałości, a nasza dotychczasowa strategia zarządzania danymi statycznymi, które są wymagane do załadowania, polega na wykorzystaniu zrzutów MongoDB przeznaczonych do kontroli wersji, które są ładowane podczas wdrażania/uaktualniania. Chcielibyśmy oddzielić nasze dane statyczne od magazynu trwałości. Najlepsze pomysły, które pojawiły się do tej pory, polegają głównie na przechowywaniu statycznych danych sformatowanych tak, jak byłyby przekazywane do usług (pliki JSON), a następnie napisaniu procesu/skryptu „ładującego”, który będzie działał jako część procesu wdrażania, który będzie współdziałał z usługami aby załadować dane. Czy istnieją wzorce/strategie zarządzania/ładowania/wdrażania danych „aplikacji” w usługach?


title: Ogólny odtwarzacz treści?

text: Ogólną ideą w sieci wydaje się, że wideo/audio mają być oddzielone zwykłym tekstem. Przez odseparowanie rozumiem, że masz miejsce, które odtwarza wideo/audio i miejsce, w którym czytasz tekst. Dzieje się tak, ponieważ powszechnie wiadomo, że są one bardzo różne. Jednak audio i wideo to tylko kolejny sposób komunikacji, podobnie jak tekst. Dlaczego więc rozdzielamy te dwie rzeczy, nawet jeśli są prawie tym samym? Popraw mnie, jeśli się mylę, ale większość samouczków to albo poradniki w postaci zwykłego tekstu (w stylu wiki) albo wizualne/audialne filmy instruktażowe (YouTube). Dlaczego nie są połączone? Lub, jeśli to już zostało zrobione, czy ktoś może odpowiedzieć, podając link? To może być graniczące z tematem, a jeśli jest nie na temat, wskaż mi właściwe miejsce, aby tak nie było. To może również wydawać się oczywistym pytaniem, jednak nie jestem pewien, czy ten temat był naprawdę głęboko przemyślany przez więcej niż kilka osób.


title: Lepszy sposób przechowywania par klucz-wartość w bazie danych?

text: Mam program C#/SQL Server, który czasami wymaga przechowywania danych. Dane mogą być odpowiedzią z usługi internetowej, wynikiem zapytania do bazy danych lub dowolną liczbą innych rzeczy. Nie ma możliwości sprawdzenia przed zapisaniem danych, ile pól może zawierać lub jaka może być struktura danych. Mamy taką bolesną tabelę, której używamy do tego... cztery kolumny i wiele wierszy. Przykład danych może być łatwiejszy niż wyjaśnienie. InstanceID RowID PropertyName PropertyValue 1 1 Property1 Value1 1 1 Property2 Value2 1 1 Property3 Value3 1 2 Property1 Value1 1 2 Property2 Value2 1 2 Property3 Value3 2 1 OtherProp1 Value1 2 1 OtherProp2 Value2 2 2 OtherProp1 Value1 2 2 OtherProp2 Value2 Te wartości zostaną następnie ściągnięte z powrotem i wprowadzone do obiektu słownika, który może być aktualizowany, a następnie pola zostaną z powrotem wprowadzone do bazy danych. Kodowanie może być bolesne, a także wymaga wielu wstawek, co może bardzo spowolnić. Nie mogę wymyślić lepszego sposobu na zrobienie tego, ale czuję, że musi być jeden. Jakakolwiek rada?


title: Potrzebna pomoc podczas rozmowy z programistą/interfejsem użytkownika

text: Mam telefoniczny wywiad z dużą firmą internetową i jest to głównie stanowisko front-end developera. Jeśli ktoś ma doświadczenie w rozmowach z programistami/interfejsami i może udzielić porad/zadanych pytań itp., będzie świetnie. Dodatkowo, jakie zasoby można przeczytać i przejrzeć w następujących kwestiach: * Projektowanie pod kątem wydajności, skalowalności i dostępności * Podstawy bezpieczeństwa w Internecie i systemie operacyjnym **EDYTUJ:** Teraz powiedziano mi, że rozmowa, o której mi powiedziano, będzie dotyczyła głównie kodowania, danych Konstrukcje, pytania projektowe itp. Ktoś?


title: Jakie części funkcjonalności powinny zostać przekształcone w dyrektywę?

text: Tworzę aplikację ze starszego kodu przy użyciu AngularJS. Zastanawiam się, jakie części mojego kodu powinny zostać przeniesione do dyrektywy. Na przykład myślałem o przeniesieniu tabeli, która jest używana wielokrotnie w aplikacji, do dyrektywy. Tabele różnią się od nagłówków i rozmiaru. Czy warto zrobić wysiłek, a nawet dobrą praktykę, aby zmienić takie rzeczy we własne wytyczne, czy też powinienem stworzyć każdy stół w wyjątkowy sposób?


title: Wyjaśnienie MVVM

text: Wkrótce napiszemy naszą pierwszą aplikację WPF i zapoznamy się ze wzorcem MVVM. Zbudowaliśmy wiele aplikacji Wininform i mamy architekturę, która okazała się dla nas bardzo udana. Mamy trochę problemów z tłumaczeniem tej architektury lub określeniem, gdzie niektóre elementy naszej architektury pasują do modelu MVVM. Historycznie mamy Gui (główny plik exe), który następnie komunikuje się z biblioteką dll BusinessLogic. BusinessLogic komunikuje się z biblioteką DLL DAL za pośrednictwem usługi sieci Web, a biblioteka DAL współdziała z bazą danych. DAL, BusinessLogic i GUI odwołują się do tej samej biblioteki dll BusinessObjects. ![Architektura AsIs](http://i.stack.imgur.com/uWIvW.png) Niektóre przejścia do MVVM są dość proste. Nasze GUI nadal będzie zawierało widoki, nasz BusinessOjbects nadal będzie zawierał model, a nasz DAL nadal będzie wchodzić w interakcje z bazą danych (chociaż technologia ich implementacji może ulec zmianie). To, czego nie jesteśmy pewni, to nasz komponent BusinessLogic. Historycznie zapewniałoby to funkcje do wywołania przez GUI, aby następnie wypełnić kontrolki w widokach (np. GetCustomerList, który zwróciłby listę obiektów Customer lub typowe funkcje CRUD). Głównym problemem, jaki mamy, jest to, czy wzorzec MVVM wymagałby dodatkowego komponentu do przechowywania ViewModels, czy po prostu zmienimy nasze myślenie i przeniesiemy to, co używaliśmy jako nasz komponent BusinessLogic do ViewModels? Czy nasz komponent BusinessLogic reprezentuje ViewModels?


title: Najlepsze praktyki dotyczące architektury MVC

text: Istnieje wiele pytań dotyczących przepełnienia stosu dotyczących najlepszych praktyk MVC, ale większość z nich wydaje się obracać wokół takich rzeczy, jak używanie wstrzykiwania zależności lub tworzenie funkcji pomocniczych, czy też nakazów i zakazów dotyczących tego, co robić w widokach i kontrolerach. Moje pytanie dotyczy więcej tego, jak zaprojektować aplikację MVC. Na przykład zachęcamy do używania DI ze wzorcem repozytorium w celu oddzielenia dostępu do danych od kontrolera, jednak niewiele mówi się o tym, JAK to zrobić specjalnie dla MVC. Gdzie umieścilibyśmy na przykład klasy Repository? Wydaje się, że nie są one związane z modelem, ponieważ model powinien być również stosunkowo oddzielony od rzeczywistych technologii dostępu do danych. Drugie pytanie dotyczy struktury warstw lub poziomów. Większość przykładowych aplikacji (kolacja dla nerdów, sklep muzyczny itp.) wydaje się wykorzystywać jednowarstwowe, dwuwarstwowe podejście (nie licząc testów), które zazwyczaj ma kontrolery bezpośrednio wywołujące kod L2S lub EF. Jeśli chcę utworzyć aplikację wielowarstwową/warstwową, jakie są niektóre z najlepszych praktyk w odniesieniu do MVC?


title: Jak nauczyć się rysować diagramy sekwencji UML

text: Jak mogę nauczyć się rysować diagramy sekwencji UML. Mimo że nie używam zbyt wiele UML, uważam, że ten typ diagramów jest dość wyrazisty i chcę się nauczyć, jak je rysować. Nie planuję używać ich do wizualizacji dużych fragmentów kodu, dlatego chciałbym uniknąć używania narzędzi i nauczyć się rysować je tylko długopisem i papierem. Pamięć mięśniowa jest dobra. Myślę, że najpierw musiałbym nauczyć się podstaw notacji, a potem po prostu przećwiczyć to tak, jak w „weź kawałek kodu, narysuj kolejny diagram wizualizujący kod, a następnie wygenerował diagram za pomocą jakiegoś narzędzia/strony internetowej, a następnie porównaj to, co ja Przyciągnęło mnie to, co daje narzędzie. Znajdź różnice, popraw je, powtórz.". Gdzie zaczynam? Czy możesz polecić książkę, stronę internetową lub coś innego? **Aktualizacja** : Zdecydowałem, że warto podnosić swoje umiejętności w UML i znalazłem tę książkę: http://www.amazon.com/The-Elements- UML-2-0-Style/dp/0521616786 \ - opinie mówią, że jest to książka o najlepszych praktykach w UML. Czytałeś to? Czy możesz to polecić? Dziękuję Ci.


title: Dostęp do repozytoriów z domeny

text: Załóżmy, że mamy system rejestrowania zadań, kiedy zadanie jest rejestrowane, użytkownik określa kategorię, a zadanie domyślnie ma status „Zaległe”. Załóżmy w tym przypadku, że kategoria i status muszą być zaimplementowane jako jednostki. Normalnie zrobiłbym to: **Warstwa aplikacji:** public class TaskService { //... public void Add(Guid categoryId, string description) { var category = _categoryRepository.GetById(categoryId); var status = _statusRepository.GetById(Constants.Status.OutstandingId); var zadanie = Zadanie.Utwórz(kategoria, stan, opis); _taskRepository.Save(zadanie); } } **Entity:** public class Zadanie { //... public static void Utwórz(Kategoria kategorii, Status statusu, opis napisu) { return new Zadanie { Kategoria = kategoria, Status = status, Opis = opis }; } } Robię to w ten sposób, ponieważ konsekwentnie mówi mi się, że podmioty nie powinny uzyskiwać dostępu do repozytoriów, ale miałoby to dla mnie znacznie więcej sensu, gdybym zrobił to: **Entity:** public class Zadanie { //... public static void Create(Kategoria kategoria, opis ciągu) { return new Task { Kategoria = kategoria, Status = _statusRepository.GetById(Constants.Status.OutstandingId), Description = opis }; } } Repozytorium statusu i tak jest wstrzykiwaną zależnością, więc nie ma prawdziwej zależności i wydaje mi się, że to domena podejmuje decyzję, że zadanie jest domyślnie zaległe. Poprzednia wersja wydaje się, że to warstwa aplikacji podejmuje tę decyzję. Dlaczego umowy repozytoriów są często w domenie, jeśli nie powinno to być możliwe? Oto bardziej ekstremalny przykład, tu domena decyduje o pilności: **Entity:** public class Task { //... public static void Create(Category category, string description) { var task = new Task { Category = category, Status = _statusRepository.GetById(Constants.Status.OutstandingId), Opis = opis }; if(jakiśWarunek) { if(jakaśWartość > innaWartość) { zadanie.Pilność = _urgencyRepository.GetById (Constants.Urgency.UrgentId); } else { task.Urgency = _urgencyRepository.GetById (Constants.Urgency.SemiUrgentId); } } else { task.Urgency = _urgencyRepository.GetById (Constants.Urgency.NotId); } zadanie powrotu; } } Nie ma mowy, abyś chciał przekazać wszystkie możliwe wersje Urgency i nie chciałbyś obliczyć tej logiki biznesowej w warstwie aplikacji, więc na pewno byłby to najbardziej odpowiedni sposób? Czy jest to więc ważny powód, aby uzyskać dostęp do repozytoriów z domeny? **EDYTUJ: Może to również dotyczyć metod niestatycznych:** public class Task { //... public void Update(Category category, string description) { Category = category, Status = _statusRepository.GetById(Constants.Status .OutstandingId), Description = opis if(someCondition) { if(someValue > otherValue) { Pilność = _urgencyRepository.GetById (Constants.Urgency.UrgentId); } else { Pośpiech = _urgencyRepository.GetById (Constants.Urgency.SemiUrgentId); } } else { Pilność = _urgencyRepository.GetById (Constants.Urgency.NotId); } zadanie powrotu; } }


Która platforma Java spełnia te wymagania? Jaki zestaw ram byłby najlepiej dostosowany do spełnienia tych wymagań? Wymagania są następujące: * zorientowane na web * wsparcie dla transakcji * wsparcie dla tworzenia usług internetowych RESTful * wsparcie dla bezpieczeństwa, poziomy bezpieczeństwa * integracja z pewnego rodzaju frameworkiem ORM jak Hibernate * możliwość zmiany front-endu bez konieczności wprowadzania zmian w zaplecza. Po pierwsze, chcę stworzyć front-end oparty na flexie, ale jeśli kiedykolwiek chciałem zmienić go na HTML5, to nie chcę wprowadzać zmian w moim zapleczu * gotowy do chmury * darmowy do użytku komercyjnego przychodzi mi do głowy wiosna, ale czy są jakieś inne alternatywy spełniające te wymagania? A jeśli nie jest to konieczne java? Czy znasz framework, zestaw frameworków połączonych razem w innym języku, które najlepiej spełniają te wymagania?


title: Czy superklasa zawiera listę podklas?

text: Jeśli chodzi o GUI programu, chcę wymienić kilka elementów, z których wszystkie są, z punktu widzenia programowania, tylko podklasami. Mogą dodać jeden z tych elementów do listy. Nie chcę na sztywno kodować, jakie są podklasy. Jaki byłby najlepszy sposób, aby GUI wiedział o podklasach, mając tylko klasę bazową, do której ma się odnosić?


title: Najlepszy sposób na stworzenie aplikacji php open source

text: Zacząłem tworzyć aplikację php, którą chciałbym w niedalekiej przyszłości stworzyć jako open source. Jednak nie wiem, czy jest to konieczne do przestrzegania jakiejkolwiek konwencji kodu/dokumentacji, aby po wydaniu była bardziej użyteczna i akceptowalna. Czy istnieje jakiś model do naśladowania, aby stworzyć dobrą aplikację open source? Czy uważasz, że konieczne (lub lepsze) jest rozwijanie go w całości lub w większości obiektowo?


title: Przechowywanie użytkowników aplikacji w SQL: utwórz nową tabelę „Użytkownicy” lub skorzystaj z wbudowanego zarządzania użytkownikami bazy danych?

text: Szczególnie interesuje mnie SQL Server, ale to samo pytanie dotyczy ogólnie. Podczas tworzenia nowej aplikacji, tak jak ja to widzę, są dwie opcje: * Utwórz tabelę o nazwie „Użytkownicy” i przechowuj nazwę użytkownika, hasło itp. Skonfiguruj jednego użytkownika bazy danych o nazwie „aplikacja” (i prawdopodobnie więcej użytkowników dla różne elementy systemu). * Skonfiguruj każdego użytkownika aplikacji jako użytkownika bazy danych. Może to ułatwić konfigurację pojedynczego logowania w systemach Windows. Które podejście jest ogólnie preferowane? Czemu? Jakie są wady i zalety?


title: Czy możemy spodziewać się ponownego dodania Mobile SDK w przyszłych wersjach programu Visual Studio?

text: Firma Microsoft przestała dostarczać Mobile SDK w wersjach programu Visual Studio po wersji 2008. Nie była to wielka niespodzianka, ponieważ nie było chętnych na tę funkcję, a android zrobił dużą dziurę. Ale teraz wszystko się zmieniło, Microsoft nawiązał współpracę z Nokią, HTC wprowadza nowe telefony komórkowe z systemem operacyjnym Windows. Ponadto system Windows 8 jest gotowy do debiutu na tabletach. Czy to wszystko może być postrzegane jako potencjalne powody, dla których firma Microsoft ponownie wprowadza pakiet Mobile SDK w przyszłych wydaniach programu Visual Studio?


title: Jak mogę określić, na jakim poziomie (wstępny, średni, senior) jestem?

text: Mam wywiad z firmą z siedzibą w San Francisco. Są dość popularne, dobrze nagłośnione i niedawno przejęte przez pół-znanego gracza w Dolinie Krzemowej. Zespół liczy chyba 20-30 osób. Chcą przynajmniej kandydata na średnim poziomie i oferują „dodatki” dla starszych/głównych programistów. Dostałem staż (dla rozwoju zaplecza) w małym startupie w połowie programu CS w szkole państwowej i zostałem zatrudniony na pełny etat na tydzień po stażu jako główny (no cóż... tylko) programista iOS. Pracowałem tu przez 5 miesięcy i wydałem aplikację (składnik iOS naszego pakietu do komunikacji w czasie rzeczywistym). Wydałem również aplikację opartą na lokalizacji dla niszowej społeczności. Jestem zaznajomiony z TDD, GitHub, API, AFNetworking i całym ostatnim popularnym jazzem, a także z przestarzałymi koncepcjami, takimi jak zarządzanie pamięcią przed ARC i programowanie xib/xibless. Potrafię wykazać się podstawowym poziomem znajomości algorytmów i programowania formalnego (kompetentny w konkursach kodowych) i jestem dobrym komunikatorem. Ale trochę brakuje mi doświadczenia. Czy można by nazwać siebie deweloperem średniego poziomu?


title: Dodanie poprawnej dokumentacji dla metody

text: Mam taką metodę: methodA(someParams) { wykonaj kilka inicjalizacji itp; wywołaj metodęB(niektóreParams); } methodB(someParams) { wykonaj pracę; if blah to zgłoś wyjątek::FileNotFound if blahblah to zgłoś wyjątek::ResourceNotFound } Kiedy dodaję dokumentację dla `methodB`, dokumentuję również wyjątki, które może zgłosić. Ale co z dokumentacją `methodA` ? JEST zużywa `methodB`, która może wywołać wyjątki, więc czy powinienem nadal dokumentować te wyjątki również dla metody A? Prawidłowy? zło?


title: Jak przekonać szefa do zakupu Visual Studio 2012 Professional

text: Główną zaletą jest korzystanie z ReSharper i innych dodatków, ale za zakupem Visual Studio 2012 Professional musimy przedstawić przekonujący argument. Obecnie używamy programu Visual Studio 2012 Express dla systemu Windows. Jest całkiem dobry, ale w przeszłości trudno jest przełączyć się z pełnej wersji Professional. Do tej pory zespół przygotował następującą listę: > 1. Brak funkcji wyodrębniania interfejsu. Bardzo przydatne dla czystego kodu SOLID. > 2. Brak dodatkowej obsługi. Nie można zainstalować StyleCop ani narzędzi zwiększających produktywność. > AnkhSvn, sprawdzanie pisowni, PowerTools produktywności, GhostDoc, edytor regex, > PowerCommands. > 3. Asystent wyjątków jest ograniczony w wersji Express. To duża > irytacja. Zobacz http://www.lifehacker.com.au/2013/01/ive-given-up-on-visual- > studio-express-2012-for-windows-desktop-heres-why/ > 4. Dostępne różne narzędzia przez MS jak generowanie certyfikatów. > 5. Możliwość stworzenia projektu testowego na podstawie kodu źródłowego. > Tworzymy serwery w C#, więc wszelkie dodatki internetowe lub cokolwiek innego jest bezużyteczne. Powodem, dla którego pytam, jest to, że jestem pewien, że ludzie byli w tej samej sytuacji. Jakie podejście zastosowałeś i czy myślisz o uzupełnieniach lub poprawkach do powyższej listy? Dziękuję,


title: Tworzenie warstwowych konturów produkcyjnych

text: Obecnie pracuję nad oprogramowaniem do produkcji warstwowej (druk 3D) i doszedłem do punktu, w którym nie wiem już, co robić. Jestem na etapie, w którym muszę wziąć kilka kresek i uporządkować je tak, aby tworzyły płynny kontur modelu. Mam kilka podstawowych pomysłów, jak to zrobić, ale ponieważ używam plików .STL, w niektórych warstwach są nadmiarowe linie. ![sample](http://i.stack.imgur.com/S2wSL.png) Na tym obrazku widać prosty kwadrat z linią łączącą dwa rogi, tworząc dwa trójkąty. To jest podstawa sześcianu. W idealnym przypadku linia łącząca dwa rogi nie byłaby tam, ale ponieważ została ona przetworzona z pliku .STL, który używa tylko trójkątów, musi tam być, aby zamienić kwadrat w dwa trójkąty. Moją pierwotną myślą było wydrukowanie również tej linii, ale w bardziej złożonym modelu (jak koło zębate) byłoby ich zbyt wiele i niemożliwe byłoby stworzenie jednego płynnego konturu. Moją następną myślą było po prostu wydrukowanie tego jako dwóch trójkątów, ale nie mogę przekroczyć dwukrotnie tej samej linii, więc nie działa to szczególnie w złożonych modelach. Myślałem o tym problemie od dłuższego czasu, ale nigdy nie potrafię wymyślić rozwiązania, które sprawdziłoby się dla każdego modelu. Muszę skończyć z serią linii, które tworzą kontury nie tylko na zewnątrz, ale być może również wewnątrz, jeśli są dziury. Na przykład koło zębate miałoby jeden zestaw linii, które tworzą zęby dookoła, i inny zestaw linii, które tworzą otwór w środku. Jeśli ktoś zna rozwiązanie tego problemu lub ma z tym doświadczenie, byłbym bardzo wdzięczny za Twój wkład =)


title: W jaki sposób EF 4,1 nakłada się na ADO.NET SQL dla procedur składowanych?

text: To pytanie dotyczy _wyłącznie_ używania tych technologii przeciwko procedurom przechowywanym. Czytałem sporo o zestawieniu tych dwóch ze sobą i znacznie więcej niż cokolwiek, co widziałem, w porównaniu z operacjami CRUD i innymi bardziej złożonymi zapytaniami - bardzo rzadko w przypadku wywoływania procedur składowanych. Czytałem, że trudno jest pokonać ADO.NET pod kątem wydajności podczas wywoływania procedur składowanych. Jednak podczas wywoływania ich za pomocą Entity Framework 4,1 uzyskujesz korzyści z jednostek (a nie tylko czytnika danych), które mogą być przyjemniejsze w pracy i przekazywaniu (imo). Przeprowadziłem dzisiaj kilka testów (nie jestem pewien ich dokładności) i sugerują, że ponad 100 lub 1000 iteracji, wywołując tę samą procedurę, że ADO.NET jest średnio o 5 milisekund szybsze na wywołanie. (Nie byłem w stanie przetestować, ile czasu zajmuje konwersja ze standardowego obiektu czytnika danych na podobny rodzaj jednostki, ale wątpię, czy nadrabia to 5 milisekund) Czy warto poświęcić wydajność na korzyści w projektowaniu i pisaniu? A może te 5 ms na zapytanie to po prostu za dużo? Czy odpowiedź zmienia się między małymi projektami a środowiskami takimi jak e-commerce?


title: Użyć systemu plików lub jakiejś bazy danych noSql dla pamięci współdzielonej między procesami?

text: Wdrażam system, który jest w zasadzie potoku dokumentów XML: dokumenty XML są pobierane przez Internet, sprawdzane, dalej przetwarzane itp., dopóki nie zostaną przetworzone w relacyjnej (nie XML) bazie danych. Po przetworzeniu w bazie danych można je odrzucić. Ponieważ różne składniki potoku są w pewnym stopniu niezależne od siebie, chcę użyć kilku oddzielnych aplikacji, z których każda wykonuje „krok” w potoku. Jakie powinno być uzasadnienie wyboru systemu plików do wymiany danych między powyższymi aplikacjami w porównaniu z jakąś bazą danych noSQL? Udostępniane dane to głównie pliki XML, a całkowita ilość danych przechodzących przez potok może wynosić 10 gigabajtów dziennie.


title: Zrozumienie abstrakcji

text: Staram się lepiej zrozumieć kod obiektowy i postanowiłem zacząć od abstrakcji. Jeśli się nie mylę, abstrakcja oznacza, że ukrywasz informacje, które nie są istotne dla tego, jakie zadanie chcesz wykonać, tj. jeśli włączyłbym telewizor, nie musiałbym znać tego, co się dzieje. Lub jeśli mam klasę, która obsługuje zamówienia i chciałbym uzyskać całkowity koszt kilku produktów, metoda getTotal() byłaby jedyną rzeczą, o której użytkownik musi wiedzieć, aby uzyskać całkowitą sumę produktów , a nie jak jest faktycznie obliczana. Czyli per se, używając klasy abstrahuję dane?


title: Aplikacja internetowa filtrująca informacje po stronie klienta czy po stronie serwera?

text: Mam aplikację sieciową, która dostarcza dane (aktualizowane co pewien czas) dla użytkowników intranetu, którzy mogą filtrować informacje według lokalizacji. Rozmawiałem ze współpracownikiem na temat tego, czy filtrowanie powinno odbywać się po stronie klienta czy serwera. Ilość informacji nie jest duża, ale użytkowników zazwyczaj interesuje konkretna lokalizacja. Moje pytanie... Czy lepiej jest pozwolić bazie danych na filtrowanie danych i wysyłanie wyników do klienta, czy też zwracanie wszystkich danych do klienta, a następnie sortowanie według lokalizacji? Jeśli nie jest to jednoznaczne, kiedy wybrałbyś metodę, a nie inną?


title: Kiedy monada staje się młotkiem?

text: Zdaję sobie sprawę z tego, że moje początkowe zrozumienie Monad jest bardzo ubogie w szczegóły, biorąc pod uwagę, że moja wiedza pochodzi głównie z Monads and Gonads Talk Douglasa Crockforda i jest skomplikowana z moimi severami ułomnościami z Haskellem (który wygląda jak garść niealfanumerycznych znaków wciśniętych między rozłączne angielskie słowa do mój tragicznie upośledzony mózg). Mając to na uwadze, chciałbym zapytać o praktyki programistyczne dotyczące monad i jak można je zaimplementować w JavaScript. Poprzedziłem to, ponieważ zdaję sobie sprawę, że sama natura języka może drastycznie wpłynąć na to, jak ktoś postrzega pojęcie i że ze względu na moje doświadczenie w JavaScript to pytanie mogłoby być nieodpowiednie, gdyby było oparte na czysto funkcjonalnym języku, takim jak Haskell. Często projektując interfejs lub kodując obiekt, łapię się na tym, że implementuję formę łańcucha, która mutuje enkapsulowane dane. Wolę ten styl od bardziej deklaratywnych form, takich jak przekazywanie w wieloliniowym literale obiektowym. function Declarative(options) { this.options = opcje; } Declarative.prototype.compute = function() { ... } var x = new Declarative({ foo: 'foo', bar: 'bar' }); x.compute(); Wersety: function Chained() { } Chained.prototype.withFoo = function(v) { this.foo = v; zwróć to; }; Chained.prototype.withBar = function(v) { this.bar = v; zwróć to; }; Chained.prototype.compute = function() { ... } var x = new Chained() .withFoo('foo') .withBar('bar') .compute(); Oba te przykłady (pomijając estetykę) podnoszą mi kilka włosów na plecach, ponieważ mały głosik kpiąco piszczy „Zmienność dużo?” Zaczynam myśleć, że to może być dobry moment na zwięzłe przedstawienie wzoru Monady. Mam na myśli to, że każda metoda w skrócie zwróciłaby nowy obiekt tego samego typu. Następnie dodanie do niego funkcji kompozycji, takich jak mapa, powiązanie itp., może zmniejszyć świat potencjału, jaki mam w przypadku Promises i innego typu Monad. (Oczywiście dbanie o przestrzeganie trzech praw monadycznych po wdrożeniu). Wreszcie moja druga połowa mózgu zaczyna dzwonić: „Jeśli masz tylko młotek, wszystko wygląda jak gwóźdź”. Westchnienie. Wtedy moja produktywność i kreatywność spadają na SE, zaciekawiona i zdezorientowana. Kontynuując badania nad zrozumieniem (być może nabierając odwagi, by kontemplować Haskella), pytam: Kiedy idea monad (czyli możliwości komponowania funkcji na obiektach (tj. typach) wraz z niezmiennością) staje się dobrym pomysłem do kultywowania i modelowania ? A kiedy to nic więcej niż przestarzały młotek? (Koncepcje i możliwości uczenia się mile widziane, przykładowy kod pomocny)


title: Dodaj argumenty do mysql w "dbshell" Django

text: Chciałbym dodać kilka argumentów wiersza poleceń do polecenia `./manage.py dbshell` mojego Django i nie wiem jak. W szczególności chciałbym dodać `-A`, aby uniemożliwić MySQL skanowanie każdej tabeli i każdej kolumny, oraz `--prompt=LOCAL:` ponieważ często otwieram wiele powłok. Nie wiem, jak to zrobić! Moim jedynym pomysłem jest stworzenie własnego polecenia "mysql" w /usr/local/bin i zrobienie z niego wrappera dla mysql z własnymi flagami. Ale naprawdę chciałbym tego uniknąć.


title: Zaczynasz wszystko od nowa?

text: Czy kiedykolwiek coś rozwijałeś i właśnie doszedłeś do punktu, w którym myślisz, że to bzdury, projekt jest zły i chociaż stracę czas, lepiej będzie zacząć wszystko od nowa? Co należy wziąć pod uwagę przed wykonaniem tego kroku? Wiem, że w niektórych przypadkach może to być drastyczne, czy najlepiej jest po prostu całkowicie zignorować to, co zrobiłeś wcześniej, lub wziąć z tego najlepsze fragmenty? Kilka przykładów z życia byłoby świetnych.


title: Kontrola uprawnień (dostępu/uprawnień) dla zasobów o strukturze hierarchicznej

text: Pytanie: Czy istnieje standardowa implementacja modelu lub przemysłu do modelowania i implementacji kontroli dostępu w (tj.) systemie zarządzania dokumentami? Uwaga: Studiowałem trochę mechanizm bezpieczeństwa systemu Windows (którego nie chcę używać) i widziałem użytkowników i grupy oraz zasady. Ale nie rozumiem: 1 — W jaki sposób pojedynczy obiekt zasad może zawierać wszystkie informacje o dozwolonych/zabronionych działaniach na dany temat dla wszystkich użytkowników i grup w określonym momencie. 2 - Jak wiele polityk dotyczących określonego tematu łączy się w jedną, aby zapewnić jak najmniejszy dostęp. 3 - Jaki jest mechanizm (struktury danych, baza danych, buforowanie, implementacja) zasobów hierarchicznych, takich jak foldery? Te królowe zapytań są zwykle wolne.


title: Po co zawracać sobie głowę szczegółowymi specyfikacjami?

text: Jaki jest sens pisania formalnej, szczegółowej specyfikacji martwego drzewa podczas pisania oprogramowania? Aby wyjaśnić, nieco nieformalna, wysokopoziomowa specyfikacja dla osób, które nie chcą czytać kodu, ma dla mnie sens. Implementacja referencyjna w dobrze zakomentowanym, czytelnym kodzie źródłowym jest jednak najbardziej jednoznaczną specyfikacją wszystkiego, co otrzymasz, ponieważ komputer musi być w stanie ją wykonać. Formalne specyfikacje są często tak samo trudne do odczytania i prawie tak samo trudne do napisania jak kod. Jakie korzyści oferuje formalna specyfikacja w porównaniu z implementacją referencyjną oraz niewielka dokumentacja na temat tego, jakie zachowanie jest niezdefiniowane/zdefiniowane przez implementację, niezależnie od tego, jak działa w implementacji referencyjnej. Edycja: Ewentualnie, co jest nie tak z testami będącymi formalną specyfikacją?