title: Jak zagwarantować niezmienniki / Logika wewnętrzna w metodach ustawiających

text: Zgodnie z zasadami DDD używam metod fabrycznych do tworzenia spójnych obiektów i zapewnienia, że obiekty są we właściwym stanie. Teraz mam wątpliwości co do wewnętrznej logiki metod setera. Jestem związany z obiektem, który jest podobny do poniższego fragmentu kodu, więc weźmy go jako przykład: public class UserCredentials { private String nazwa użytkownika; prywatne Poświadczenia Użytkownika () { super(); } public statyczne UserCredentials create (końcowa nazwa użytkownika String) { Nazwa użytkownika String = nazwa użytkownika.toUpperCase(); UserCredentials newInstance = nowe UserCredentials(nazwa użytkownika); return nowaInstancja; } private UserCredentials(final String nazwa użytkownika) { this.username = nazwa użytkownika; } public String getUsername() { return this.username; } public void setUsername(final String nazwa użytkownika) { this.username = nazwa użytkownika; } public void checkConsitency() { ... isUppercase(); ... } } Mamy niezmiennik: Nazwa użytkownika poświadczeń musi być zawsze pisana wielkimi literami. Teraz chcę się upewnić, że zmiana nazwy użytkownika nie narusza niezmiennika. Ale jak mam zagwarantować regułę? 1. Przepisuję metodę ustawiającą i dodaję logikę konwersji do ustawiacza. Wada: Seter zawiera logikę. 2. Opieram się na klientach, że zawsze podają nazwę użytkownika pisaną wielką literą i w przypadku naruszenia wyrzucę wyjątki spójności. Wada: Pochodzenie niewłaściwego użycia jest trudne do odkrycia, co więcej, w ogóle jest to zła praktyka. 3. Usuwam metodę ustawiającą i zastępuję ją metodą domeny, taką jak `changeUsername(String username)`, która zawiera logikę konwersji. Wada: zewnętrzni programiści mogą przegapić metodę ustawiającą. Ze względu na stwierdzenie „nazwa użytkownika w poświadczeniu zawsze musi być pisana wielkimi literami” wolę alternatywę 3. Ale czy istnieje mądrzejsze rozwiązanie?


title: Entity Framework chętne do ładowania/odwołania danych

text: Walczę o to, jak najlepiej ładować encje i jak przypisywać relacje podczas tworzenia nowych encji. Nawiasem mówiąc, używam EF5 POCO. Pobieram z bazy danych dużą hierarchię jednostek reprezentujących wyniki analizy chemicznej. Jako prosty przykład mam encję "AnalysisResult" z dwiema wygenerowanymi właściwościami, które odnoszą się do encji "ChemicalElement" - `ChemicalElement` i `ChemicalElementId`. Jak dotąd standardowe rzeczy. Zacząłem od pobrania moich wyników AnalysisResults z bazy danych _i_ niecierpliwego ładowania powiązanych elementów ChemicalElement za pomocą instrukcji `.Include` LINQ, co oznacza, że mogłem uzyskać dostęp do pierwiastka chemicznego wyniku po prostu za pomocą `AnalysisResult.ChemicalElement`. Było to w porządku w przypadku wyników załadowanych z bazy danych, ale co, gdybym chciał utworzyć nowy AnalysisResult — jak otrzymam encję ChemicalElement, którą chcę do niej przypisać? Ponieważ pierwiastki chemiczne nigdy się nie zmieniają, zdecydowałem się traktować je jako „dane referencyjne/wyszukiwania”, więc porzuciłem szybkie ładowanie i teraz pobieram _all_ ChemicalElements do oddzielnej kolekcji, do której mogę się odwoływać, kiedy tylko potrzebuję. Wadą porzucania gorliwego ładowania jest to, że AnalysisResult załadowany z bazy danych ma wartość null .ChemicalElement, więc muszę użyć jej właściwości .ChemicalElementId, aby wyszukać encję ChemicalElement w mojej „kolekcji referencyjnej”. Czy zbytnio skomplikowałem rozwiązanie? Czy powinienem zachować ideę „zbioru referencji” ChemicalElement _ale także_ chętnie je ładować podczas pobierania istniejących wyników AnalysisResults? Pobieranie ich dwukrotnie (potencjalnie) wydaje się marnotrawstwem — raz, gdy pobieram je wszystkie, i ponownie, gdy niecierpliwie ładuję podczas pobierania AnalysisResults.


title: Najlepsze praktyki dotyczące wycofywania funkcji z łącza kontroli jakości

text: Mam pytanie dotyczące kontroli źródła w sensie ogólnym i specyficzne dla TFS. Załóżmy, że masz system trójpoziomowy (gałęzie rozwoju, główny pień kontroli jakości i gałąź produkcji). W pewnym momencie zmiany z gałęzi dev są scalane z gałęzią QA i testowana jest gałąź QA. Po wstępnym teście „funkcja A” jest uszkodzona i musi zostać naprawiona lub usunięta, jak należy zaktualizować lub usunąć funkcję z gałęzi QA? Czy powinien być edytowany bezpośrednio? czy też programista powinien sprawdzić zmiany w dev i pozwolić im ponownie rozprzestrzenić się do kontroli jakości? Jakieś przemyślenia na ten temat (ogólnie)? Również jeśli jest to zrobione w TFS, czy są jakieś narzędzia, które mogą pomóc w tej sytuacji? Dziękuję!!


title: Jaki jest najlepszy sposób na przyspieszenie pracy nowego programisty w projekcie?

text: Kiedy dodajesz programistę do projektu z dużą bazą kodu, jaki jest najlepszy sposób, aby od razu go zaangażować? Czy zapewniasz im formalne szkolenie w zakresie bazy kodu, czy pozwalasz im samemu to rozgryźć? Jakie zadania najlepiej je przyspieszyć? Jakie zadania są „bezpieczne”, dopóki nie zapoznają się z projektem na tyle, aby wnieść do niego wkład z pełnym zrozumieniem tego, co robią? Jak ustalić, czy osiągnęli poziom pełnego zrozumienia? **Edytuj** : Projekt nie jest opóźniony. Pracuję sam i chcę wkrótce dodać pracowników. Chciałbym wiedzieć, jak najlepiej zapoznać ich z bazą kodu.


title: Czy programiści są dobrzy w nauce języków „mówionych”?

text: To może być trochę nie na temat, ale zaryzykuję, ponieważ strona dotyczy _Programistów_ ! Programiści są dobrzy w ciągłym uczeniu się nowych języków programowania, ale jak dobrzy są w nauce nowego języka mówionego? Czy nauczyłeś się języka obcego (francuskiego/hiszpańskiego/itp.) **jako dorosły** i opanowałeś go? Czy to było łatwe? Pytam, ponieważ od dłuższego czasu próbuję nauczyć się francuskiego, a wciąż jestem na irytującym etapie „Je parle un peu de Française”. Uczestniczyłem w dwóch kursach francuskiego, w jednym, gdzie większość klasy stanowili programiści, a w drugim ich nie było, a różnica w umiejętnościach była dość widoczna. Czy skłonność matematyczna/logiczna utrudnia naukę języka mówionego, w którym gramatyka nie zawiera zer i jedynek? A może po prostu przerzucam winę, zamiast po prostu zaakceptować, że nie jestem dobry w językach. _[Ważne jest, aby nie uczono Cię języka w szkole, ponieważ wczesna ekspozycja naprawdę daje Ci przewagę. Nauczyłem się i całkiem dobrze opanowałem języki, z którymi miałem do czynienia w wieku poniżej 10 lat]_


title: Czy kolejność operandów porównania wpływa na szybkość?

text: Zauważyłem, że ktoś w mojej organizacji programuje porównania typu: if (100 == myVariable) zamiast: if (myVariable == 100). Twierdzi, że to pierwsze jest szybsze w językach takich jak C++. Nie mogę znaleźć żadnych dowodów. Programujemy w C#. Czy to prawda dla każdego języka programowania?


title: Jak architekci mogą współpracować z samoorganizującymi się zespołami Scrumowymi?

text: Organizacja z kilkoma zwinnymi zespołami Scrum ma również niewielką grupę osób wyznaczonych jako „architekci przedsiębiorstwa”. Grupa EA pełni funkcję kontroli i strażnika jakości i przestrzegania decyzji. Prowadzi to do nakładania się decyzji zespołu i decyzji EA. Na przykład zespół może chcieć użyć biblioteki X lub chcieć użyć REST zamiast SOAP, ale EA tego nie akceptuje. Teraz może to prowadzić do frustracji, gdy decyzje zespołu są uchylone. Wystarczająco daleko, może to potencjalnie doprowadzić do sytuacji, w której ludzie z EA „chwytają” całą władzę, a zespół kończy się poczuciem demotywacji i wcale nie jest zbyt zwinny. Przewodniki po Scrumie mają to do powiedzenia na ten temat: > Samoorganizacja: Nikt (nawet Scrum Master) nie mówi Zespołowi > Programistów, jak przekształcić Backlog Produktu w Przyrosty potencjalnie możliwej do uwolnienia > funkcjonalności. Czy to rozsądne? Czy zespół EA powinien zostać rozwiązany? Czy zespoły powinny odmówić, czy po prostu się podporządkować?


title: Efektywne wykorzystanie czasu pracy: Jak szybko stworzyć kod?

text: > **Możliwe duplikaty:** > Jak mogę być bardziej produktywny w pracy? (dodatkowy kontekst w środku) > Jak kodować według bardzo napiętego harmonogramu? Czasami szybko tworzymy nowy kod. A czasami nie możemy się skoncentrować. Proces rozwoju ma różne _etapy myślenia_. Jest _szybki_ etap, kiedy tworzymy kod w wyniku naszych pomysłów. I jest _powolny_ etap, kiedy myślimy. I ważne jest, aby nie przeszkadzać, gdy _powolny_ etap lub czas na myślenie może się wydłużyć. Znasz inne zalecenia, aby efektywnie wykorzystać czas pracy? Może być dobrym przewodnikiem?


title: Jak kodować w bardzo napiętym harmonogramie?

text: Pracuję nad projektem, który ma bardzo napięty harmonogram. Nie mam zbyt wiele czasu na kodowanie i testowanie (chociaż codziennie pracuję ponad 12 godzin, to wciąż jest to opóźnione), a wynik jest bardzo delikatny. Jego kod jest również bardzo dylematem. Z tego programu korzystają wszystkie biura w firmie naszego klienta, która znajduje się w wielu krajach. Regularnie o północy otrzymuję telefony z informacją o błędach naszego użytkownika/testera lub o tym, że nie wiedzą, jak korzystać z niektórych funkcji. Po trzech latach pracy nad tym projektem czuję się bardzo zestresowany i nie mogę spać spokojnie, bo bardzo martwię się o błędy i telefony. Mam kilka pytań: 1. Przez trzy lata cały kod, który napisałem, jest po prostu idealnym kodem scenariusza użycia (więc łatwo się psuje). Jest źle zaprojektowany i nie ma żadnych testów jednostkowych. Z tego powodu mam wiele problemów. Dlatego chcę wiedzieć, czy możliwe jest napisanie kodu, który działa, gdy projekt ma bardzo napięty harmonogram? 2. Jak mogę napisać lepszy kod w tym samym czasie? 3. Jak mogę oczyścić umysł i nie martwić się pracą, kiedy idę spać? Z zadowoleniem przyjmuję również wszelkie sugestie.


title: śledzenie ruchu w sieci za pomocą Pythona

text: Dowiedziałem się o Compete.com i interesuje mnie, jak śledzą ruch z innych stron. Najbardziej interesuje mnie robienie tego w Pythonie, ale kiedy jadę Google, nie mogę znaleźć przystawki. Prawdopodobnie mój angielski. Czy ktoś mógłby mi powiedzieć o istniejących modułach, którym mogę się przyjrzeć, i ogólnie o tym, jak śledzić ruch internetowy z innych witryn (na co zwracają uwagę podczas śledzenia)?


title: Czy należy przechowywać oddzielne bazy kodów klienta i bazy danych dla aplikacji typu oprogramowanie jako usługa?

text: Moje pytanie dotyczy architektury mojej aplikacji. Mam aplikację Railsową, w której firmy mogą administrować wszystkimi rzeczami związanymi z ich klientami. Firmy kupowałyby abonament, a ich użytkownicy mieliby dostęp do aplikacji online. Mam nadzieję, że wiele firm zasubskrybuje moją aplikację/usługę. Co mam zrobić z moim kodem i bazą danych? 1. Oddzielna baza kodów aplikacji i baza danych na firmę 2. Jedna baza kodów aplikacji, ale osobna baza danych na firmę 3. Jedna baza kodów aplikacji i jedna baza danych Decyzja dotyczy bezpieczeństwa (np. użytkownik z firmy X nie powinien widzieć żadnych danych z firmy Y) wydajność (załóżmy, że odniesie sukces, powinna mieć dobrą wydajność) i skalowalność (ponownie, jeśli się powiedzie, powinna mieć dobrą wydajność, ale także łatwo obsługiwać wszystkie firmy, zmiany kodu itp.). Ze względu na łatwość utrzymania, zwykle wybieram jedną bazę kodu, ale w przypadku bazy danych, której tak naprawdę nie znam. Jak myślisz, jaka jest najlepsza opcja?


title: Czy nie jest konieczne używanie Github (kodowanie społecznościowe), nawet jeśli jesteś jedyną osobą pracującą nad projektem?

text: Zacząłem używać Github teraz, kiedy pracuję nad projektem z kilkoma facetami. I zacząłem się zastanawiać, czy powinienem go używać również w moich osobistych projektach. Nie jestem pewien, czy mi to w jakiś sposób pomoże, czy nie jest to konieczne?


title: Obsługa pojedynczego kliknięcia dla wszystkich przycisków w JavaScript? Czy to wzór? Jakie są korzyści?

text: Powiedziano mi, że gdy na stronie znajduje się wiele przycisków w tym samym celu, ale skierowanych na inny element, np. usuń element na siatce elementów, mówią, że zaleca się po prostu zarejestrować się do obsługi kliknięcia tylko na najwyższym elemencie, takim jak „body” i sprawdzić, co zostało kliknięte, zamiast podłączać kliknięcie za każdym przyciskiem usuwania. Jakie są korzyści z tego? Tworzenie większej liczby handlerów powoduje problemy? Czy to jakaś optymalizacja? Czy to wzór? Czy ma to coś wspólnego z wydajnością? Gdzie mogę przeczytać więcej na ten temat?


title: GPL: czy jeden wiersz kodu na GPL sprawia, że program staje się "pracą pochodną"

text: Niedawno wdałem się w kłótnię z osobą, która twierdzi, że jest prawnikiem (choć podejrzewam, że nie jest to do końca prawdą). O ile mi wiadomo, skopiowanie choćby jednej linii kodu z programu na GPL do prawnie zastrzeżonego kodu wymaga wydania całości na GPL, jeśli kiedykolwiek zdecydujesz się opublikować oprogramowanie i udostępnić je publicznie. Osoba, o której mowa, twierdzi, że jest to „absurdalne” (wiem, że tak, ale AFAIK tak działa GPL), „redefiniuje prawa autorskie”, „GPL nie ma do tego uprawnień” i twierdzi, że „jedna linijka Kod na GPL sprawia, że wypuszczasz całość na GPL” to absurd. To jest sprzeczne z FAQ GPL. Czy ktoś może wyjaśnić sytuację? Czy mam rację zakładając, że skopiowanie nawet najmniejszego podprogramu z programu na licencji GPL do twojego kodu automatycznie czyni twój program „dziełem pochodnym”, co oznacza, że jesteś zobowiązany do wydania go na licencji GPL, jeśli go publikujesz?


title: Czy deweloper powinien być zaangażowany w konfigurację danych testowych w środowisku QA i UAT?

text: Kiedy nadejdzie kontrola jakości lub UAT, czy programista powinien nadal być zaangażowany w konfigurowanie danych lub znajdowanie danych testowych dla testera kontroli jakości lub użytkownika biznesowego? A może wprowadzi to stronniczość programisty, który zakodował zmiany systemowe testowane w tych środowiskach?


title: Jaki kierunek studiów wybrać dla dojrzałego programisty wracającego na studia

text: Zajmuję się tworzeniem aplikacji (głównie internetowych) od prawie 10 lat i nauczyłem się prawie wszystkiego, co wiem poprzez doświadczenie (i Internet!). Nie nazwałbym siebie zaawansowanym programistą, ale jestem dość biegły w kilku językach (C#, Javascript, Ruby, HTML/CSS itp.) i spędzam sporo czasu pracując nad osobistymi projektami i czytając niezliczone książki i artykuły. Szukam emigracji do Kanady, mam nadzieję, że do Vancouver (jestem z Wielkiej Brytanii) i jedną drogą byłaby wiza studencka, gdybym miała studiować przez minimum 2 lata. Ponieważ nigdy nie byłem na uniwersytecie ani nie osiągnąłem niczego wyższego niż A-Levels, kusi mnie ta ścieżka. Myśl o nauce jest dla mnie bardziej ekscytująca niż 10 lat temu! Co poleciliby ludzie jako dobry kurs licencjacki, który uzupełniłby tę ścieżkę kariery? Czy matematyka byłaby korzystna, jeśli tak, który obszar matematyki? TL; DR Jaki kierunek/obszar studiów uzupełniłby 10 lat (głównie internetowych) doświadczeń w programowaniu?


title: WĄTKI: Wątki jądra a wątki obsługiwane przez jądro a wątki na poziomie użytkownika?

text: Czy ktoś wie, jaka jest między nimi różnica? Wydaje mi się, że wątki jądra odpowiadają kodowi, który uruchamia jądro (intuicyjnie), ale nie jestem pewien co do pozostałych dwóch... Ponadto, czy standard pthreads byłby uważany za poziom użytkownika i obsługiwany przez jądro, skoro uzyskujesz dostęp do biblioteki, podczas gdy jądro wykonuje planowanie/przełączanie wszystkich wątków?


title: Jakie umiejętności powinienem pielęgnować, aby zostać kierownikiem ds. rozwoju/technicznym?

text: Obecnie jestem zawodowym programistą. Chcę poszerzyć swój zestaw umiejętności, ale chcę też, aby kariera skoczyła do roli lidera deweloperów w ramach zespołu. Wiem, że trzeba się wiele nauczyć (i nie będzie to natychmiastowe), ale myślę, że jestem wystarczająco mądry, by to zrobić i podołać wyzwaniu. Jestem pewien, że wielu z obecnych tu członków prawdopodobnie przeszło przez to samo i teraz są odnoszącymi sukcesy dev leadami. Niestety, mimo że znam pewne obszary osobiste, które chciałbym poprawić (głębokość wiedzy, zakres wiedzy, umiejętności itp.), nie jestem do końca pewien, jak miałbym zacząć coś takiego. Jako programista, jakie kroki powinienem podjąć, aby osiągnąć ten cel? Co powinienem traktować priorytetowo?


title: Od programisty do lidera zespołu

text: Ile doświadczenia uważa się za wystarczające, aby programista został liderem zespołu? Dla kadry zarządzającej IT, co jest miarą sprawdzania, czy obecny członek zespołu jest wystarczająco dobry, aby zostać liderem zespołu (poziom techniczny, poziom interpersonalny) * * * zaktualizowano: usunięto drugą część pytania za duplikat (patrz komentarze)


title: Jakie rodzaje praw autorskich lub prywatności dotyczą tweetów?

text: Jeśli chcę wykorzystać dane z Twittera w mojej aplikacji, jakie są ograniczenia? Jakich danych użytkownika powinienem unikać? Na przykład, jeśli chcę zbierać informacje z określonego typu tweetów o użytkownikach i wykorzystywać te informacje w mojej witrynie jako profile dla tych użytkowników w mojej witrynie, czy wymaga to najpierw zgody użytkowników, czy też mogę bezpośrednio przejść i uzyskać informacje? Technicznie rzecz biorąc, od każdego, kto ma konto publiczne na Twitterze, możemy uzyskać dane jego/jej tweetów i stworzyć dla niego informacje profilowe, ale czy polityka prywatności Twittera na to pozwala? Jeśli opublikowałeś jakiś tweet na Twitterze, czy mogę wziąć ten tweet i umieścić go na mojej stronie (stwierdzając, że jest napisany przez Ciebie), ale bez pytania o pozwolenie? Znalazłem to w Warunkach korzystania z usługi Twitter: > Wskazówka Zachęcamy i zezwalamy na szerokie ponowne wykorzystanie treści. Twitter API istnieje >, aby to umożliwić. Ale znalazłem to również w Warunkach API Twittera: > Nie możesz używać Treści Twittera ani innych danych zebranych od użytkowników końcowych > Twojego Klienta do tworzenia lub utrzymywania oddzielnej aktualizacji statusu lub sieci społecznościowej > bazy danych lub usługi.


title: Czy konwertery wartości są bardziej kłopotliwe niż są warte?

text: Pracuję nad aplikacją WPF z widokami, które wymagają wielu konwersji wartości. Początkowo moja filozofia (zainspirowana częściowo tą ożywioną debatą na temat uczniów XAML) polegała na tym, że powinienem stworzyć model widoku ściśle dotyczący obsługi wymagań _data_ widoku. Oznaczało to, że wszelkie konwersje wartości wymagane do przekształcenia danych w takie rzeczy, jak widoczność, pędzle, rozmiary itp. będą obsługiwane za pomocą konwerterów wartości i konwerterów wielowartościowych. Koncepcyjnie wydawało się to dość eleganckie. Model widoku i widok miałyby odrębny cel i byłyby ładnie oddzielone. Pomiędzy „dane” a „wyglądem” zostałaby nakreślona wyraźna granica. Cóż, po poddaniu tej strategii „starej uczelnianej próby” mam wątpliwości, czy chcę dalej rozwijać się w ten sposób. Właściwie mocno rozważam zrzucenie konwerterów wartości i umieszczenie odpowiedzialności za (prawie) wszystkie konwersje wartości bezpośrednio w rękach modelu widoku. Rzeczywistość używania konwerterów wartości po prostu nie wydaje się mierzyć do pozornej wartości wyraźnie oddzielonych problemów. Moim największym problemem z konwerterami wartości jest to, że są żmudne w użyciu. Musisz stworzyć nową klasę, zaimplementować `IValueConverter` lub `IMultiValueConverter`, rzutować wartość lub wartości z `object` na właściwy typ, przetestować pod kątem `DependencyProperty.Unset` (przynajmniej dla konwerterów wielowartościowych), napisać logika konwersji, ~~zarejestruj konwerter w słowniku zasobów~~ [patrz aktualizacja poniżej], a na koniec podłącz konwerter za pomocą dość szczegółowego XAML (co wymaga użycia magicznych ciągów zarówno dla powiązań ~~, jak i nazwy konwertera~~ [patrz aktualizacja poniżej]). Proces debugowania też nie jest piknikiem, ponieważ komunikaty o błędach są często zagadkowe, zwłaszcza w trybie projektowania/mieszaniu ekspresji programu Visual Studio. Nie oznacza to, że alternatywą – uczynienie modelu widoku odpowiedzialnym za wszystkie konwersje wartości – jest ulepszenie. Równie dobrze może to być kwestia bardziej zielonej trawy po drugiej stronie. Oprócz utraty eleganckiego oddzielenia obaw, musisz napisać kilka właściwości pochodnych i upewnić się, że podczas ustawiania właściwości podstawowych sumiennie wywołasz `RaisePropertyChanged(() => DerivedProperty)`, co może okazać się nieprzyjemnym problemem związanym z konserwacją. Poniżej znajduje się początkowa lista zalet i wad umożliwienia modelom widoku obsługi logiki konwersji i rezygnacji z konwerterów wartości: * Zalety: * Mniejsza całkowita liczba powiązań, ponieważ wyeliminowano multi-konwertery * Mniej magicznych ciągów (ścieżek powiązań ~ ~\+ nazwy zasobów konwertera~~ _) * ~~Nie musisz już rejestrować każdego konwertera (plus utrzymywanie tej listy)~~_ * Mniej pracy przy pisaniu każdego konwertera (bez implementacji interfejsów lub rzutowania) * Może łatwo wstrzykiwać zależności, aby pomóc konwersje (np. tabele kolorów) * Znaczniki XAML są mniej szczegółowe i łatwiejsze do odczytania * Ponowne użycie konwertera nadal możliwe (chociaż wymagane jest pewne planowanie) * Brak tajemniczych problemów z DependencyProperty.Unset (problem, który zauważyłem w przypadku konwerterów wielowartościowych) * Przekreślenia wskaż korzyści, które znikną, jeśli użyjesz rozszerzeń znaczników (patrz aktualizacja poniżej) * Wady: * Silniejsze sprzężenie między modelem widoku a widokiem (np. właściwości muszą radzić sobie z pojęciami takimi jak vi sibility i pędzle) * Więcej właściwości całkowitych, aby umożliwić bezpośrednie mapowanie dla każdego powiązania w widoku * ~~`RaisePropertyChanged` musi być wywoływane dla każdej właściwości pochodnej~~ (patrz Aktualizacja 2 poniżej) * Musi nadal polegać na konwerterach, jeśli konwersja jest oparta na właściwość elementu UI Tak więc, jak zapewne wiesz, mam pewną zgagę w związku z tym problemem. Bardzo waham się, czy iść drogą refaktoryzacji tylko po to, by zdać sobie sprawę, że proces kodowania jest tak samo nieefektywny i żmudny, niezależnie od tego, czy używam konwerterów wartości, czy eksponuję wiele właściwości konwersji wartości w moim modelu widoku. Czy brakuje mi jakichś plusów/minusów? Dla tych, którzy wypróbowali oba sposoby konwersji wartości, który uważasz za lepszy i dlaczego? Czy są jakieś inne alternatywy? (Uczniowie wspomnieli coś o dostawcach deskryptorów typu, ale nie mogłem zrozumieć, o czym mówili. Każdy wgląd w to będzie mile widziany.) * * * **Aktualizacja** Dziś dowiedziałem się, że jest to możliwe użyj czegoś, co nazywa się „rozszerzeniem znaczników”, aby wyeliminować potrzebę rejestrowania konwerterów wartości. W rzeczywistości nie tylko eliminuje potrzebę ich rejestrowania, ale w rzeczywistości zapewnia intellisense przy wyborze konwertera po wpisaniu `Converter=`. Oto artykuł, od którego zacząłem: http://www.wpftutorial.net/ValueConverters.html. Możliwość korzystania z rozszerzenia znaczników zmienia nieco równowagę w mojej liście zalet i wad oraz dyskusji powyżej (patrz przekreślenia). W wyniku tego odkrycia eksperymentuję z systemem hybrydowym, w którym używam konwerterów dla `BoolToVisibility` i tego, co nazywam `MatchToVisibility` oraz modelu widoku dla wszystkich innych konwersji. MatchToVisibility to w zasadzie konwerter, który pozwala mi sprawdzić, czy powiązana wartość (zwykle wyliczenie) pasuje do jednej lub więcej wartości określonych w XAML. Przykład: Visibility="{Stan powiązania, Converter={vc:MatchToVisibility IfTrue=Visible, IfFalse=Ukryty, Wartość1=Zakończony, Wartość2=Anulowany}}" Zasadniczo polega to na sprawdzeniu, czy stan jest Zakończony lub Anulowany. Jeśli tak, to widoczność zostaje ustawiona na „Widoczny”. W przeciwnym razie otrzymuje ustawienie „Ukryte”. Okazało się to bardzo powszechnym scenariuszem, a posiadanie tego konwertera pozwoliło mi zaoszczędzić około 15 właściwości w moim modelu widoku (plus powiązane instrukcje RaisePropertyChanged). Zauważ, że po wpisaniu `Converter={vc:`, w menu Intellisense pojawi się napis „MatchToVisibility”. To znacznie zmniejsza prawdopodobieństwo wystąpienia błędów i sprawia, że korzystanie z konwerterów wartości jest mniej żmudne (nie musisz pamiętać ani wyszukiwać nazwy konwertera wartości, który chcesz). Jeśli jesteś ciekawy, wkleję poniższy kod. Jedną z ważnych cech tej implementacji `MatchToVisibility` jest to, że sprawdza, czy powiązana wartość to `enum`, a jeśli tak, to sprawdza, czy `Value1`, `Value2` itd. są również wyliczeniami tego samego typu. Zapewnia to sprawdzenie w czasie projektowania i w czasie wykonywania, czy którakolwiek z wartości wyliczenia jest błędnie wpisana. Aby poprawić to do sprawdzenia w czasie kompilacji, możesz zamiast tego użyć następującego (wpisałem to ręcznie, więc wybacz mi, jeśli popełniłem jakieś błędy): Visibility="{Stan wiązania, Converter={vc:MatchToVisibility IfTrue={x :Type {win:Visibility.Visible}}, IfFalse={x:Type {win:Visibility.Hidden}}, Value1={x:Type {enum:Status.Finished}}, Value2={x:Type {enum: Status.Canceled}}" Chociaż jest to bezpieczniejsze, jest po prostu zbyt szczegółowe, aby było tego warte dla mnie. Równie dobrze mogę po prostu użyć właściwości w modelu widoku, jeśli mam zamiar to zrobić. W każdym razie stwierdzam, że kontrola czasu projektowania jest całkowicie adekwatna do scenariuszy, które wypróbowałem do tej pory. **Oto kod `MatchToVisibility`** [ValueConversion(typeof(object), typeof(Visibility))] public class MatchToVisibility : BaseValueConverter { [ConstructorArgument("ifTrue")] obiekt publiczny IfTrue { get; ustawić; } [ConstructorArgument("ifFalse")] obiekt publiczny IfFalse { get; ustawić; } [ConstructorArgument("value1")] obiekt publiczny Value1 { get; ustawić; } [ConstructorArgument("value2")] obiekt publiczny Value2 { get; ustawić; } [ConstructorArgument("value3")] obiekt publiczny Value3 { get; ustawić; } [ConstructorArgument("value4")] obiekt publiczny Value4 { get; ustawić; } [ConstructorArgument("value5")] obiekt publiczny Value5 { get; ustawić; } public MatchToVisibility() { } public MatchToVisibility( obiekt ifTrue, obiekt ifFalse, obiekt wartość1, obiekt wartość2 = null, obiekt wartość3 = null, obiekt wartość4 = null, obiekt wartość5 = null) { IfTrue = ifTrue; JeśliFalse = jeśliFalse; Wartość1 = wartość1; wartość2 = wartość2; wartość3 = wartość3; wartość4 = wartość4; wartość5 = wartość5; } obiekt nadpisania publicznego Convert(wartość obiektu, Typ targetType, parametr obiektu, kultura CultureInfo) { var ifTrue = IfTrue.ToString().ToEnum<Visibility>(); var ifFalse = IfFalse.ToString().ToEnum<Widoczność>(); var wartości = new[] { Wartość1, Wartość2, Wartość3, Wartość4, Wartość5 }; var valueStrings = wartości.Cast<string>(); bool isMatch; if (Enum.IsDefined(value.GetType(), value)) { var valueEnums = valueStrings.Select(vs => vs == null? null : Enum.Parse(value.GetType(), vs)); isMatch = valueEnums.ToList().Contains(value); } else isMatch = valueStrings.Contains(value.ToString()); powrót isMatch ? jeśliTrue : jeśliFalse; } } **Oto kod`BaseValueConverter`** // w ten sposób włącza się możliwość rozszerzenia znaczników public abstract class BaseValueConverter : MarkupExtension, IValueConverter { public override object ProvideValue(IServiceProvider serviceProvider) { return this; } publiczny obiekt abstrakcyjny Convert(wartość obiektu, Typ targetType, parametr obiektu, kultura CultureInfo); publiczny obiekt wirtualny ConvertBack(wartość obiektu, typ targetType, parametr obiektu, kultura CultureInfo) { throw new NotImplementedException(); } } **Oto metoda rozszerzenia ToEnum** public static TEnum ToEnum<TEnum>(ten ciąg tekstowy) { return (TEnum)Enum.Parse(typeof(TEnum), text); } * * * **Aktualizacja 2** Odkąd wysłałem to pytanie, natknąłem się na projekt open-source, który używa "tkania IL" do wstrzykiwania kodu NotifyPropertyChanged dla właściwości i właściwości zależnych. To sprawia, że realizowanie wizji modelu widoku Josha Smitha jako „konwertera wartości na sterydach” jest absolutną błahostką. Możesz po prostu użyć „Właściwości zaimplementowanych automatycznie”, a tkacz zajmie się resztą. **Przykład:** Jeśli wpiszę ten kod: public string GivenName { get; ustawić; } public string FamilyName { get; ustawić; } public string FullName { get { return string.Format("{0} {1}", GivenName, FamilyName); } } ...to, co jest kompilowane: string givenNames; ciąg publiczny GivenNames { get { return givenName; } set { if (wartość != podaneNazwisko) { podaneNazwy = wartość; OnPropertyChanged("Nazwa"); OnPropertyChanged("Pełna nazwa"); } } } string nazwa_rodziny; public string FamilyName { get { return familyName; } set { if (wartość != nazwa_rodziny) { nazwa_rodziny = wartość; OnPropertyChanged("NazwaRodziny"); OnPropertyChanged("Pełna nazwa"); } } } public string FullName { get { return string.Format("{0} {1}", GivenName, FamilyName); } } To ogromna oszczędność w ilości kodu, który musisz wpisać, przeczytać, przewinąć itd. Co ważniejsze, oszczędza ci to od zastanawiania się, jakie są twoje zależności. Możesz dodać nową „właściwość pobieraną”, taką jak `FullName`, bez konieczności żmudnego przechodzenia w górę łańcucha zależności w celu dodania wywołań `RaisePropertyChanged()`. Jak nazywa się ten projekt open source? Oryginalna wersja nazywa się „NotifyPropertyWeaver”, ale właściciel (Simon Potter) stworzył platformę o nazwie „Fody” do hostowania całej serii tkaczy IL. Odpowiednik NotifyPropertyWeaver na tej nowej platformie nazywa się PropertyChanged.Fody. * **Instrukcje konfiguracji Fody:** http://code.google.com/p/fody/wiki/SampleUsage (zamień „Virtuosity” na „PropertyChanged”) * **Witryna projektu PropertyChanged.Fody:** http:/ /code.google.com/p/propertychanged/ Jeśli wolisz korzystać z NotifyPropertyWeaver (który jest nieco prostszy w instalacji, ale niekoniecznie będzie aktualizowany w przyszłości poza poprawkami błędów), oto strona projektu: http ://code.google.com/p/notifypropertyweaver/ Tak czy inaczej, te rozwiązania IL weaver całkowicie zmieniają rachunek w debacie między widokiem modelu na sterydach a konwerterami wartości.


title: Porównanie Visual Foxpro z .NET

text: Używałem Foxpro 2.6 dekadę temu. W mojej obecnej firmie niewiele nowych projektów jest rozwijanych w Visual Foxpro 9.0 i kilka projektów jest na platformie .NET. Od czasu do czasu zauważam, że Visual Foxpro jest potężniejszy w porównaniu z .NET przy porównywaniu problemów z zależnościami. Oto niektóre z zalet VFP, które zauważyłem: 1. Nie ma sztywnej i szybkiej zasady korzystania z innego pełnoprawnego RDBMS. Mimo, że najnowsza wersja Visual Foxpro może być podłączona do SQL Server, to jednak widziałem bardzo duże projekty wciąż, szczęśliwie, używające starego DBF. Z .NET musisz połączyć się z innym RDBMS, a to po prostu zwiększa twoją zależność od Instalatora. 2. Foxpro ma wbudowane bogate możliwości raportowania od czasów DOS, podczas gdy programiści .NET muszą polegać na Crystal Reports, SSRS lub innych wariantach innych firm. 3. Visual Foxpro 9.0 ma również możliwości .NET. Jednak nie jest zależny od platformy .NET i dlatego ostateczny plik wykonywalny nie wymaga zainstalowanej platformy .NET, co jest ponownie zależnością. 4. Widziałem bardzo duże bazy danych Foxpro w kilku głównych organizacjach rządowych, które z powodzeniem działały od dłuższego czasu. Organizacje te nie czują potrzeby przechodzenia na SQL Server, nie z powodu ryzyka migracji, ale dlatego, że są zadowolone z VFP. Chcę wkroczyć w świat VFP, ale przeczytałem gdzieś, że Microsoft wstrzymuje dalszy rozwój VFP, a także przestaje wspierać VFP 9.0 od 2015 roku. Co sugerujecie?


title: Ponowne oszacowanie historii przez Scrum

text: Każdego dnia po wystąpieniu mój zespół i ja aktualizujemy nasze szacunki dla każdej historii. Mam wrażenie, że coś jest nie tak ze sposobem, w jaki to robimy, dlatego potrzebuję Twojej pomocy. Oto jak to robimy: Story A Szacunek: 24 godziny (8 godzin dziennie - używamy "dni idealnych" jako miary) * Dzień N: programista zaczyna pracę nad Story A rano (8 godzin pracy ukończone do końca) dnia) * Dzień N+1: Ponowne oszacowanie Kondygnacji A = 16 godzin (jeden dzień roboczy wyjęty z Kondygnacji A, z dnia N) * Dzień N+2: Ponowne oszacowanie Kondygnacji A = 8 godzin (jeden dzień roboczy wyjęty z kondygnacji Kondygnacji A, od dnia N+1) * Dzień N+3: Kondygnacja A powinna być już ukończona. Ale nie jest. Deweloper przewiduje, że ukończenie zajmie jeszcze 3 godziny. Aktualizujemy historię na tablicy i odpowiednio dopalamy. * Dzień N+4: Historia A trwała cały dzień, a nie tylko 3 godziny! Teraz gotowe. Różnica 5 godzin jest całkowicie nieuwzględniona w naszym planowaniu. Jak powinniśmy codziennie oceniać nasze historie?


title: Javascript – czy to szara strefa dla kogokolwiek innego?

text: Dobrze rozumiem HTML, CSS, PHP, MySQL (i do pewnego stopnia Apache/linux) i uważam, że jedną z rzeczy, których brakuje w mojej "bazie wiedzy o programowaniu stron internetowych", jest javascript - tworzenie bogatszych interfejsów użytkownika. Chciałbym nauczyć się języka JavaScript, zanim spojrzę na jakiekolwiek frameworki (wcześniej używałem light javascript/jquery, ale to nie o to chodzi). Czy ktoś może polecić firmową książkę lub dokumentację online od „absolutnie początkującego” do „eksperta” w zakresie javascript? Wydaje mi się, że znajduję zbyt wiele samouczków „wyświetlaj czas” i „witaj świecie”…


title: Mówiąc koncepcyjnie, jak mam wyciągnąć posty na Facebooku od 100 tys. użytkowników?

text: Nie szukam tutaj żadnych fragmentów kodu, więc oto idzie: Załóżmy, że 100 000 użytkowników mojej aplikacji internetowej autoryzowało moją aplikację do łączenia się z Facebookiem (z lub bez `offline_access`). Chcę zbudować coś w rodzaju mechanizmu „pull”, dzięki któremu gdy użytkownik publikuje posty na swojej ścianie na Facebooku, mogę pobrać go z Graph API i przechowywać lokalnie na moim serwerze. Zakładałbym, że wymagałoby to wywołania Graph API co _n_ minut, aby pobrać ich najnowsze posty na ścianie. Idealnie byłoby to zrobić również dla Twittera. Wiem, że LinkedIn to robi, ale nie jestem pewien dokładnych szczegółów. Pytanie 1: muszę wykonać indywidualne wywołanie Graph API dla każdego użytkownika, prawda? Pytanie 2: Jeśli nagle zbombarduję Graph API 100 000 wywołań Graph API, czy nie uruchomiłbym najpierw ogranicznika szybkości? Pytanie 2b: Jeśli nie, to co jeśli miałbym milion użytkowników? Pewno...


title: Jak narysować (specjalny) predykat, który jest używany do arytmetyki, w drzewie wyszukiwania Prologu?

text: Zwykle buduję moje drzewo wyszukiwania zgodnie z powszechną konwencją: * Umieść zapytania lub cele wymagające ujednolicenia wewnątrz pól węzłów. * Zapisz punkty decyzyjne na krawędziach, w których Prolog przypisał element do zmiennej. * Węzły liści, które są w pełni zadowolone, będą pustym polem, stanowią rozwiązanie. * Węzły liścia, które nie mogą być zaspokojone i reprezentują nieudane próby, będą miały w swoim polu niespełniony cel, aby było jeszcze bardziej czytelne, również kieruję się konwencją oznaczania ich poprzez umieszczenie pod nimi symbolu krzyżyka. Powyższy sposób ma miły efekt uboczny, ponieważ łatwo jest zobaczyć punkty decyzyjne. Ale co z tworzeniem drzewa wyszukiwania dla czegoś takiego jak: accLen([_|T],A,L) :- Anew to A+1, accLen(T,Anew,L). accLen([],A,A). Jak powinno być reprezentowane przypisanie Od nowa w drzewie wyszukiwania? To nie jest punkt decyzyjny, kod nie ma innej opcji niż przypisanie mu 1 plus bieżąca wartość A. Czy nadal umieszczasz go na krawędzi, ale podkreślasz, czy coś?


title: Jak obliczyć złożoność Big-O w programowaniu funkcjonalnym i reaktywnym?

text: Zacząłem uczyć się programowania funkcyjnego, próbuję porównać różne algorytmy, które są napisane w trybie imperatywnym, funkcjonalnym, programowania równoległego oraz przy użyciu wyrażeń Collections i Lambda. Aby moje pytanie było jasne i aby uniknąć dzielenia się długimi algorytmami, nad którymi pracuję. Jako przykład wezmę znany zmodyfikowany algorytm Fibonacciego (Problem Eulera 2): Oto problem : http://projecteuler.net/problem=2 //Iteracyjny sposób: int wynik=2; int pierwszy=1; int sekunda=2; int i=2; while (i < 4000000) { i = pierwszy + drugi; if (i % 2 == 0) { wynik += i; } pierwszy = drugi; drugi = ja; } Konsola.WriteLine(wynik); // Rekurencyjny sposób funkcjonalny: FibonacciTerms(1, 2).TakeWhile(x => (x <= 4000000) ) private static int SumEvenFibonarciTerms() { return FibonacciTerms(1, 2) .TakeWhile(x => (x <= 4000000 )).Where(x => x % 2 == 0) .Suma(); } //Asynchroniczny sposób let rec fib x = if x <= 2 then 1 else fib(x-1) + fib(x-2) let fibs = Async.Parallel [ for i in 0..40 -> async { return fib(i) } ] |> Async.RunSynchronously Jak obliczyć Big-O w algorytmach pisanych przy użyciu wyrażenia Lamda (Złożoność funkcji typu: filter, where, reductionleft, reducright, .. ) W algorytmie funkcjonalnym i Asynchrounous , oba są napisane w ten sam sposób ? Czy powinniśmy traktować ich złożoność tak samo, wiedząc, że istnieje różnica w czasie wykonania?


title: Jak uzyskać wymagania od klienta nietechnicznego?

text: Pracuję jako inżynier oprogramowania od 4 lat. Przez całe moje małe doświadczenie pracowałem dla organizacji IT, gdzie mieliśmy osobną rolę kierownika projektu, analityka, inżyniera jakości, inżyniera oprogramowania i wielu innych. Zastosowaliśmy również złożony zwinny proces pracy w dużym/małym zespole. Osobiście uczestniczyłem na każdym etapie cyklu życia programisty. Kilka miesięcy wcześniej dostałem dobrą okazję do współpracy w firmie i teraz służę. Przydzielono mi kilka projektów wewnętrznych, które są celami firmy. Problem polega na tym, że większość czasu spędzam na zdobywaniu wymagań, a mój szef nie chce mi dać wkładu. Całkowicie obwinia mnie, że nie wykonałem zadań. Nie potrafię wytłumaczyć, że bez wymagań nie mogę pracować, a nawet nie mogę dotrzymać terminu. Często mówi mi, że proszę, aby moje marzenia się spełniły. Jak mogę uzyskać ten boski wymóg? Zajęło mi około 1 miesiąca samo przyznanie mi praw na moim komputerze do zainstalowania IDE i połączenia internetowego. Krótko mówiąc, nie dali mi żadnych wymagań ani dokumentów, cele są nadal niejasne, a zespół nie wnosi wkładu. Nie próbuję odchodzić z tej firmy, uważam to za wyzwanie, aby wszystko było dobrze. Jako programista, jak mam sobie poradzić z tym problemem?


title: Od imperatywu do programowania funkcjonalnego

text: Jako inżynier elektronik moje doświadczenie w programowaniu zaczęło się od Assemblera i kontynuuję między innymi z PL/M, C, C++, Delphi, Java, C# (programowanie imperatywne mam we krwi). Interesuje mnie dodawanie do mojej dotychczasowej wiedzy umiejętności programowania funkcjonalnego, ale wszystko, co do tej pory widziałem, wydaje się bardzo zaciemnione i ezoteryczne. Czy możesz mi odpowiedzieć na te pytania? 1) Jaki jest dziś główny język programowania funkcjonalnego (nie chcę się zgubić, ucząc się mnóstwa języków FP, tylko dlatego, że język X ma funkcję Y)? 2) Jaki był pierwszy język FP (Fortran programowania funkcjonalnego, jeśli chcesz)? 3) Na koniec, kiedy mówimy o czystym i nieczystym FP, jakie są główne języki w każdej kategorii? Z góry dziękuję


title: harmonogramowanie zgodności i utrzymywanie wsparcia technicznego i rozwiązywanie problemów

text: Jestem przedsiębiorcą małej firmy programistycznej. Flagowy produkt został opracowany przeze mnie, a moja firma rozrosła się do 14 osób. Jedną z rzeczy do dumy jest to, że nigdy nie musieliśmy inwestować ani pożyczać. Podstawowy zespół programistów to 5 osób. 3 to seniorzy, a 2 to juniorzy. Po pierwszym wydaniu otrzymaliśmy wiele problemów od naszych klientów. Większość z nich to problemy z błędami, potrzeby dostosowywania, pytania dotyczące użytkowania i prośby o aktualizację. Sprawy od klientów przychodzą codziennie wiele razy, więc zajmuje to niewiele czasu lub dużo czasu naszym programistom. Ponieważ nasz produkt jest zestawem programistycznym (SDK), na większość pytań można odpowiedzieć tylko od naszych programistów. A do rozwiązania problemów z błędami muszą być zaangażowani programiści. Oszacowanie czasu na rozwiązanie błędu jest trudne. W pełni to rozumiem. Jednak nasi programiści upierają się, że nie mogą ustawić żadnego terminu każdego projektu, ponieważ są zajęci codziennym wsparciem technicznym i poprawą błędów przez problemy klientów. Oczywiście nigdy nie przepracowują się. Zasugerowałem im pomysł, aby podzielić zespół na dwie części: jedną za skupienie się na rozwoju według kamieni milowych, drugą za wsparcie techniczne i naprawę błędów bez wyznaczania terminów. Wtedy mogliśmy oficjalnie ogłosić plan wydania. Po zakończeniu premiery dwie części zamieniają się rolami na kolejny kamień milowy. Mówią jednak, że „NIE, bo nie da się w pełni podzielić wiedzy i zaprojektować dokument”. Nadal mówią, że nie mogą ustalić daty wydania i proszą mnie o elastyczną zmianę terminu. Nie ustalają terminu wykonania każdego kamienia milowego. Na szczęście nasza firma nie jest pożyczona i zainwestowana, więc nie dajemy się skusić. Ale myślę, że to zły pomysł, aby utrzymać tę sytuację. Znam historię mrówki i konika polnego. Nasi klienci są zmęczeni czekaniem w nieskończoność na naszą datę premiery. Firmy zużywają ograniczony czas i pieniądze. Jeśli elastyczny termin płatności bez limitu byłby do zaakceptowania, czy mogliby zaakceptować elastyczny dzień wynagrodzenia? Jaka jest główna przyczyna naszego problemu? Wszystko, czego chcę, to naprawić i osiągnąć dokładnie termin wykonania każdego kamienia milowego, nie tracąc częstych wsparcia technicznego. Myślę, że musi być rozwiązanie tej sytuacji. Proszę odpowiedz mi. Z góry dziękuję. PS. Nasze narzędzia i sposoby zarządzania projektami to Trello, podobne do Mantis narzędzie do śledzenia problemów, oprogramowanie współdzielonego kalendarza i scrum (zebrane karty w serie "małych i wysokiej kompletności" projektów).


title: Czy powinienem używać WCF do mojego celu?

text: Napisałem dwa programy, które serwer i klient mogą łączyć się ze sobą (jeden program dla serwera, a drugi dla klienta) za pomocą swoich adresów IP (programowanie w gniazdach). Teraz chcę to zmodyfikować tak, aby jeśli klient lub serwer na przykład napisał coś w `textbox` inny użytkownik był o tym powiadamiany. Moje programy to Windows Form Application. Czy w tym celu powinienem używać WCF?


title: czy Java jest bezpłatna do tworzenia aplikacji mobilnych?

text: Q1. Chciałbym wiedzieć, czy programista (to znaczy, jeśli nie muszę płacić tantiem dla Sun/Oracle) może bezpłatnie tworzyć aplikacje mobilne (Android) w Javie? Po przeczytaniu tego fragmentu o wykorzystaniu pola Java, odnoszę wrażenie, że Java **nie** jest darmowa do programowania mobilnego, prawda? > .. „Komputery i serwery ogólnego przeznaczenia” oznaczają komputery, w tym > komputery stacjonarne i laptopy lub serwery, używane do ogólnych funkcji obliczeniowych > pod kontrolą użytkownika końcowego (takich jak, ale nie wyłącznie, > poczta e-mail, przeglądanie Internetu ogólnego przeznaczenia, i produktywność pakietu biurowego > narzędzia). Korzystanie z Oprogramowania w systemach i rozwiązaniach, które zapewniają > dedykowaną funkcjonalność (inną niż wymienione powyżej) lub przeznaczone do użytku w > aplikacjach wbudowanych lub specyficznych dla funkcji, na przykład, ale nie tylko: Oprogramowanie wbudowane lub dołączone do sterowania przemysłowego systemy, > **bezprzewodowe telefony komórkowe, bezprzewodowe urządzenia przenośne,** netbooki, kioski, > TV/STB, urządzenia Blu-ray Disc, telematyka i przełączanie sterowania siecią > sprzęt, drukarki i systemy zarządzania pamięcią masową oraz inne powiązane > systemy są wyłączone z tej definicji i nieobjęte licencją na mocy niniejszej > Umowy... oraz z http://www.excelsiorjet.com/embedded/ > Uwaga: Licencja na technologię Java SE Embedded obecnie zabrania > używania Java SE w telefonach komórkowych. Q2. jak to się dzieje, że ci mnóstwo programistów Android Java nie płaci Sun/Oracle ani grosza?


title: Masz doświadczenie z haxe i innymi językami, które kompilują się do PHP?

text: Chciałbym usłyszeć opinie od osób, które używały języka kompilującego do php. Jednym z takich języków, jaki znam, jest Haxe. Inni, o których czytałem, to Kira i Pharen. Jak dobrze te języki integrują się z PHP? Czy stosunkowo łatwo jest w nich napisać wtyczkę do PHP CMS? Jak dojrzałe są ich wdrożenia i narzędzia? Czy poleciłbyś je komuś, kto musi używać php cms, ale nienawidzi php?


title: Jak przechowywać zakresy walut w tabeli Postgres?

text: Używam Postgresa 9.3. Muszę przechowywać dane dotyczące zakresu, takie jak „<250 tys. USD, 250 tys. teraz tworzę tabelę dla wszystkich możliwych opcji, które można skonfigurować z interfejsu administratora. Czy powinienem wziąć osobną kolumnę dla min,max,currency_type(dollar,euro) i kolumnę do przechowywania K,M itp., czy jest na to lepszy sposób?


title: Czy zapisywanie instrukcji SQL w tabeli do późniejszego wykonania to zły pomysł?

text: Czy zapisywanie instrukcji SQL w tabeli MySQL do późniejszego wykonania to zły pomysł? Instrukcje SQL będą gotowe do wykonania, tzn. nie będzie żadnych parametrów do zamiany ani niczego, na przykład `DELETE FROM users WHERE id=1`. Myślę, że jestem leniwy, ale pomyślałem o tym pomyśle, ponieważ pracuję nad projektem, który będzie wymagał wielu zadań crona, które będą okresowo wykonywać instrukcje SQL.


title: Jak duże witryny skalują się i optymalizują pod kątem ogromnego ruchu?

text: W jaki sposób witryny takie jak Facebook i Twitter optymalizują swoje witryny pod kątem ogromnego ruchu. Oprócz wydawania dużych pieniędzy na uzyskanie najlepszych serwerów, co można zoptymalizować w swoim kodzie, aby obsłużyć ogromny ruch? Czytałem o buforowaniu stron w statycznym HTML, ale jest to niepraktyczne w przypadku serwisów społecznościowych, w których strony są stale aktualizowane.


title: Dlaczego Python został napisany w GIL?

text: Globalna blokada interpretera (GIL) wydaje się być często przytaczana jako główny powód, dla którego wątki i tym podobne są trudne w Pythonie - co rodzi pytanie "Dlaczego to zostało zrobione w pierwszej kolejności?" Nie będąc programistą, nie mam pojęcia, dlaczego tak się dzieje – jaka była logika wprowadzenia GIL?


title: Refleksyjne odkrycie klasy wewnętrznej w API

text: Pozwolę sobie zapytać, bo to mnie od dłuższego czasu niepokoi, ale wydaje się subiektywnie najlepszym rozwiązaniem mojego problemu, **czy refleksyjne odkrycie klasy wewnętrznej na potrzeby API to zły pomysł**? Najpierw wyjaśnię, co mam na myśli, mówiąc „odkrycie refleksyjne” i tak dalej. Szkicuję API dla systemu bazodanowego Java, który będzie skoncentrowany wokół encji blokowych (nie pytaj mnie, co to znaczy - to długa historia), a te _jednostki_ można odczytać i zwrócić do kodu Java jako obiekty z podklasy z klasy `Entity`. Mam klasę `Entity.Factory`, która za pomocą płynnych interfejsów przyjmuje `Class<? rozszerza argument Entity>`, a następnie wykorzystuje instancję `Section.Builder`, `Property.Builder` lub dowolnego innego buildera, który posiada encja, aby umieścić go w pamięci zaplecza. Pomysł rejestrowania wszystkich typów encji i ich konstruktorów po prostu nie przemawia do mnie, więc pomyślałem, że najbliższym rozwiązaniem problemu, który wystarczyłby do moich potrzeb projektowych, byłoby odkrycie, za pomocą refleksji, wszystkich wewnętrznych klas `Entity` klas i znajdź taki, który nazywa się „Builder”. Szukasz wglądu eksperta :) A jeśli przegapiłem kilka ważnych szczegółów projektowych (co mogło się zdarzyć, gdy starałem się, aby to pytanie było jak najbardziej zwięzłe), po prostu powiedz mi, a dodam je.


title: Czy umieszczanie numeru błędu w nazwie metody jako tymczasowego obejścia jest uważane za złą praktykę?

text: Mój współpracownik, który jest starszym facetem, blokuje mnie podczas przeglądu kodu, ponieważ chce, abym nazwał metodę „PerformSqlClient216147Obejście”, ponieważ jest to obejście jakiegoś defektu ###. Teraz moja propozycja nazwy metody jest podobna do PerformRightExpressionCast, która ma tendencję do opisywania, co faktycznie robi metoda. Jego argumenty są następujące: „Cóż, ta metoda jest używana tylko jako obejście tego przypadku i nigdzie indziej”. Czy umieszczenie numeru błędu w nazwie metody w celu tymczasowego obejścia jest uważane za złą praktykę?


title: Statyczne buforowanie serwisów społecznościowych

text: W witrynach takich jak facebook, orkut lub friendster, co jest wyświetlane na dole zamiast głównego adresu internetowego, takiego jak static.ak.fbcdn.net lub profile.ak.fbcdn.net? Czy są to różne serwery, czy tylko służą do zmylenia hakerów?


title: Przydzielanie pamięci wewnątrz funkcji i zwracanie jej z powrotem

text: Chcę przekazać wskaźnik do mojej funkcji i przydzielić pamięć, na którą wskazuje ten wskaźnik. Czytałem w innych postach, że powinienem przekazać podwójny wskaźnik do tej funkcji i tak zrobiłem, ale ciągle otrzymuję błąd segmentacji: #include <iostream> #include <stdlib.h> using namespace std; void allocate(unsigned char** t) { *t=(unsigned char*)malloc(3*sizeof(unsigned char)); if(*t == NULL) cout<<"Wszystko nie powiodło się"<<endl; inaczej for(int m=0;m<3;m++) *(t[m])=0; } int main() { unsigned char* t; przydziel(&t); cout<<t[0]<<" "<<t[1]<<endl; zwróć 0; } wynik jest zawsze taki: Błąd segmentacji (zrzucenie rdzenia) Nie sądzę, by czegoś brakowało w tym kodzie. Co może być nie tak?


title: Kto powinien uczestniczyć w szacowaniu czasu?

text: W projekcie IT: 1. Kto powinien **uczestniczyć** w szacowaniu czasu? Programista, lider zespołu, mistrz scrum itp.? 2. Na czyje **głosy** należy liczyć najwięcej?


title: Czy działająca technologia (Java, DotNet itp.) determinuje długoterminowy wzrost?

text: Nauczyłem się Javy, .NET, itp., a teraz w rozwoju iPhone'a w moich studiach i pracy i mogłem być elastyczny w każdej dziedzinie, z którą pracuję. Ale ponieważ jestem świeższy jako programista iPhone'a, nie mogę przewidzieć swojej przyszłości, jeśli chodzi o mój długoterminowy rozwój w branży oprogramowania. Czy technologia pracy determinuje długoterminowy wzrost?


title: Odpowiadanie lub utrzymywanie wiadomości e-mail — najlepsze praktyki

text: Chciałbym usłyszeć, jak zarządzasz swoimi e-mailami, gdy codziennie otrzymujesz dużo e-maili. Oto kilka rzeczy, które śledzę: 1. Przeczytaj e-maile i odpowiedz na 2 godziny raz. Nie będę przeszkadzał w pracy nad e-mailami średniozaawansowanymi, chyba że otrzymam e-mail o wysokim priorytecie. 2. Nawet gdy odpowiadałem na e-maile, niekompletne zadania przechowuję w osobnym folderze z tagiem follow-up i ustawionym przypomnieniem. Mogę zrobić odpowiedni follow up. 3. Zazwyczaj archiwizuje wiadomości e-mail co miesiąc i tworzy ich kopię zapasową na DVD. Można uniknąć problemu z limitem rozmiaru wiadomości e-mail. Poza tym konfiguracja nie zajmie dużo czasu, jeśli masz mniejszą liczbę e-maili na swoim serwerze, jeśli musisz przenieść się na inny komputer/laptop. 4. Utworzono regułę kategoryzowania wiadomości e-mail na podstawie adresu Do i zwracania większej uwagi na wiadomości e-mail, które są adresowane wyłącznie bezpośrednio do mnie. Niektóre z nich nie są istotne lub nie są potrzebne dla wszystkich. jednak uważam, że jest to ważna rzecz w zarządzaniu, aby mieć płynną komunikację z wyższym/podwładnym w każdej organizacji.


title: kto powinien przenieść status sprintu do ukończenia w zwinnym modelu scrum?

text: prosimy samych programistów o zamknięcie sprintu po jego zakończeniu. Chcę tylko potwierdzić, czy TL ma go zamknąć po sprawdzeniu realizacji zadań.


title: Żądania POST i PUT – czy to tylko konwencja?

text: Przeczytałem sporo artykułów na temat różnicy między POST i PUT oraz kiedy należy ich użyć. Ale wciąż jest kilka rzeczy, które mnie mylą (mam nadzieję, że pytania będą miały jakiś sens): **1)** Powinniśmy używać PUT do _tworzenia zasobów_, gdy chcemy, aby klienci określali URI _nowo utworzonych zasobów_ i powinniśmy używać POST do tworzenia zasobów, gdy pozwolimy usłudze wygenerować identyfikator URI _nowo utworzonych zasobów_. **a)** Czy to tylko konwencja, że _żądanie utworzenia POST_ nie zawiera identyfikatora URI _nowo utworzonego zasobu_, czy _żądanie utworzenia POST_ faktycznie nie może zawierać identyfikatora URI _nowo utworzonego zasobu_? **b)** PUT ma idempotentną semantykę i dlatego może być bezpiecznie używany do **aktualizacji bezwzględnych** (tzn. wysyłamy _cały stan zasobu_ na serwer ), ale nie również do **aktualizacji względnych** (tzn. wyślij tylko _zmiany do stanu zasobu_ ), ponieważ naruszyłoby to jego semantykę. Ale zakładam, że PUT nadal może wysyłać **aktualizacje względne** na serwer, po prostu w takim przypadku _aktualizacja PUT_ nie będzie idempotentna? **2)** Czytałem gdzieś, że powinniśmy " _użyć POST, aby dołączyć zasób do kolekcji zidentyfikowanej przez identyfikator URI_ wygenerowany przez usługę". **a)** Co to dokładnie oznacza? Że jeśli URI dla zasobów zostały wygenerowane przez serwer (a więc zasoby zostały utworzone przez POST ), to WSZYSTKIE _kolejne zasoby_ również powinny być tworzone przez POST? Czy zatem w takiej sytuacji nie należy tworzyć zasobu przez PUT? **b)** Jeśli moje założenie w **a)** jest poprawne, czy mógłbyś wyjaśnić, dlaczego nie powinniśmy tworzyć niektórych zasobów przez POST, a niektórych przez PUT (zakładając, że serwer zawiera już zbiór zasobów utworzonych przez POST)? **ODPOWIEDŹ:** **1)** Proszę mnie poprawić, jeśli się mylę, ale z Twojego posta i opublikowanego przez Ciebie linku wynika, że: **a)** Żądanie-URI w POST to interpretowany przez serwer jako _URI usługi_. W związku z tym można go równie łatwo zinterpretować jako _identyfikator URI nowo utworzonego zasobu_ , jeśli kod serwera został napisany, aby rozpoznać URI żądania jako takiego **b)** Podobnie, PUT jest w stanie wysyłać **aktualizacje względne** , po prostu kod usługi jest zwykle pisany tak, że będzie narzekał, jeśli _aktualizacje PUT są względne_. **2)** > Zwykle tworzenie przypada na obóz POST z powodu idei > „dołączania do kolekcji”. Jest to sposób na dołączenie zasobu do > listy zasobów. Nie do końca rozumiem rozumowanie stojące za ideą " _dołączania do kolekcji_ " i dlaczego ten pomysł preferuje POST do tworzenia. Mianowicie, jeśli _utworzymy 10 zasobów przez PUT_ , to serwer będzie zawierał _kolekcję 10 zasobów_ a jeśli następnie utworzymy kolejny zasób, to serwer dołączy ten zasób do tej kolekcji (która będzie teraz zawierała _11 zasobów_ )?! Uh, to trochę mylące, dziękuję


title: Zwykłe obiekty metadanych lub: Jak przenieść typową aplikację ExtJS do jQuery i: Czego brakuje w środku?

text: Wszedłem w istniejący projekt, który polega na utrzymaniu zagnieżdżonych struktur danych. Masz firmy, które są przypisane do kont, kontaktów i notatek i... w zasadzie zwykła wiązka relacji 1:1, 1..n, n:m, przechowywana w mysql lub postgres, opakowana w Doctrine. Oczywiście każdy węzeł jest dostarczany ze zwykłym zestawem metadanych, które wymagają walidacji pod względem typu (liczba, tekst, ...) i semantycznie (e-mail, adres URL, „wyliczenia”, takie jak status, typ, waluta). Dokładniej to, w co wkroczyłem, określiłbym (także z poprzednich doświadczeń) jako typowe piekło ExtJS. **Czy to brzmi znajomo dla nikogo?** * Typowa aplikacja z pojedynczym adresem URL: brak historii, żadnych znaczących zakładek, och i śmiesz naciskać przycisk wstecz... * przeglądanie w kartach jest niemożliwe (niezbyt rzadki przypadek użycia patrzenia na Klienta A, podczas wprowadzania czegoś znaczącego na Konto lub Klienta B obok siebie) * masz to typowe drzewo nawigacyjne po lewej stronie, rzeczy po prawej są wywoływane przez Ajax. Dane, ale także dużo wykonywalnego kodu java. * silne "czucie MS Office": sprite'y CSS są daleko, proste pullDowny i przyciski wielokrotnego wyboru wymagają wysiłku, aby być "ubranym", aby były użyteczne. * Nie wspominając już o wszystkich przesadzonych div-ach, które przeciwstawiały się kilku czystym, semantycznie znaczącym znacznikom * piekielny javascript (niektóre z nich całkiem niezręcznie stworzone w PHP), aby pasowały do trudnych do debugowania kontrolerów i sklepów oraz mnóstwa zbędnego kodu, aby zapewnić ciągle to samo dla różnych pól danych. Oczywiście, istnieje hierarchia klas OOP dla tych siatek Ext.[ux.] i okien, ale o ograniczonej pomocy. Z poprzednich doświadczeń chciałbym zmienić to na prosty interfejs API REST, rzeczy są faktycznie robione między żądaniami strony, adres URL daje ci to tak, jak powinien wyglądać: foo.com/accounts/16324/contact/create foo. com/customer/search/state=California I spraw, aby całość była oparta na jQuery, gdzie zyskam większą kontrolę. To prowadzi mnie do mojego ogólnego pytania: **Czy brakuje mi warstwy środkowej?** Kłopot: Zastanawiam się, jak wypełnić pewne luki (na które inni 'Konwerty' też mogą się natknąć, dlatego ośmielam się zadać tak szerokie pytanie ): 1. _jakie wtyczki byłyby dobre dla (edytowalnych) tabel? W tym komentarze o zmiennej wielkości, które można sortować? Wiem o jQueryUI i jQueryTools, ale nie sądzę, żeby to samo w sobie pasowało. Potrzebuję naprawdę dobrego myślenia o tabeli/siatce, prawdopodobnie z odpowiednimi procedurami backendowymi._ 2. *Ogólnie rzecz biorąc, czuję, że brakuje mi środkowej warstwy między ORM a interfejsem użytkownika, jeśli majstruję przy strukturach danych, czy mogę wnieść trochę automatyzmu, takiego jak „Oto moja struktura danych, w tym typy i reguły walidacji (och, i istniejące/domyślne dane) teraz zbuduj z tego formularz” Ponieważ może się to różnić w zależności od klienta, jest to kolejny powód, dla którego nie należy za bardzo wypełniać tego sztywnego kodu. Warto również zwrócić uwagę na funkcjonalność sklepu w stylu Ext-JS, polegającą na odsyłaniu tylko pól, które naprawdę się zmieniły. Podobnie jak rozpoznanie nieczystości (czyli konieczności potwierdzenia „zapisz/anuluj” przy zamykaniu okna dialogowego).* 1. **Bardzo** cenne byłyby ogólne mechanizmy „tenativene sub-Dialogs”, np. Wygaszacz ekranu Windows robi: Więc przejście do menu, stamtąd do podmenu, powiedzenie OK w podrzędnym oknie dialogowym, a następnie anulowanie na głównym ==> anuluje całość, nic nie jest zapisane. Innymi słowy: Elastyczne przechowywanie kilku hierarchicznych zbiorów danych w Sesji byłoby dobre. I wpycham je do DB (poprzez powtarzające się, ogólne środki), gdy otrzymam rzeczywiste „OK”. Jakieś dobre wskazówki dla mnie na temat edycji tabeli w interfejsie użytkownika i/lub środkowej części struktury danych? Dziękuję, Danke, Merci, Mille grazie, Xie xie! Fronker


title: certyfikowany scrum master

text: cześć Uczę się o Scrumie i zauważyłem, że istnieje certyfikowany kurs scrum master, czy warto? czy mogę się tego wszystkiego nauczyć z książek i online, aby wdrożyć w swojej pracy? Dziękuję!!


title: Nieskończona pętla z singletonem – czy tego typu sprawa ma nazwę?

text: Podczas pracy nad projektem napotkałem nietypowy błąd. Aby lepiej się z tego uczyć i zapamiętać, chciałbym wiedzieć, czy ten typ błędu ma nazwę lub jakąś definicję. (Sam błąd `OutOfMemoryError` nie jest niczym niezwykłym, mówię o tym, co doprowadziło do tego błędu). Moja (uproszczona) sytuacja była taka: miałem klasę `Singleton`: class Singleton extends ClassA{ private static instancja Singleton; private Singleton(){ // niejawnie wywołuje super() } public static Singleton getInstance(){ if (instance==null) instance = new Singleton(); zwracać instancję; } } I to jest superklasa `ClassA`: abstrakcyjna klasa ClassA{ public ClassA(){ ClassB objectB = new ClassB(); // .. trochę logiki .. } } I klasa `ClassB`, która używa `Singleton` w swoim konstruktorze: class ClassB{ public ClassB(){ Singleton singleton = Singleton.getInstance(); // .. jakaś logika .. } } Dzieje się tak: 1- Istnieje gdzieś instancja `ClassB`. Jego konstruktor jest wywoływany i wywołuje `Singleton.getInstance()`. 2- `Singleton.getInstance()` widzi to `instance == null` i wykonuje `instance = new Singleton()`. 3- Uruchomiony jest konstruktor `Singleton`. Jest pusty, ale niejawnie wywołuje konstruktor nadklasy (`ClassA`). 4- Nadklasa `Singleton` tworzy instancję obiektu `ClassB` `new ClassB()`. 5- Konstruktor `ClassB` jest wywoływany i wywołuje `Singleton.getInstance()`... Ponieważ tworzenie instancji `instance` w `Singleton` nigdy nie zostało ukończone, `instance == null` nadal zwraca `true`, a cykl nigdy się nie kończy. Skutkowało to nieskończoną pętlą, która w końcu zaowocowała `OutOfMemoryError`. Moje pytanie brzmi: **czy ten rodzaj błędu nieskończonej pętli z singletami jest częstym problemem?** **Masz pomysły, jak mogę tego uniknąć w przyszłości?**


title: Koduję rzadko. Czy to zły znak?

text: Jestem studentem informatyki i uczę się Java teraz kilka dni. Chcę być dobrym programistą/programistą. Lubię czytać książki. Wyszukuję w Internecie powiązane tematy i studiuję je. Codziennie odnoszę się do StackOverflow i innych dobrych stron programistycznych, ale rzadko koduję. Czy to zły znak? Jeśli tak, to co powinienem zrobić, aby rozwiązać ten problem?


title: Czy nie mogę po prostu użyć wszystkich metod statycznych?

text: Jaka jest różnica między dwiema poniższymi metodami UpdateSubject? Czułem, że stosowanie metod statycznych jest lepsze, jeśli chcesz po prostu operować na podmiotach. W jakich sytuacjach powinienem stosować metody niestatyczne? public class Subject { public int Id {get; set;} ciąg publiczny Nazwa { get; ustawić; } public static bool UpdateSubject(Temat tematu) { //Zrób coś i zwróć wynik return true; } public bool UpdateSubject() { //Zrób coś na 'tym' i zwróć wynik return true; } } Wiem, że społeczność dostanie wiele kopniaków za to naprawdę irytujące pytanie, ale nie mogłem się powstrzymać od zadawania go. Czy staje się to niepraktyczne w przypadku dziedziczenia? Aktualizacja: To się dzieje teraz w naszym miejscu pracy. Pracujemy nad 6 miesięczną aplikacją webową asp.net z 5 programistami. Nasz architekt zdecydował, że używamy wszystkich metod statycznych dla wszystkich interfejsów API. Jego rozumowanie jako metody statyczne jest lekkie i przynosi korzyści aplikacjom internetowym, zmniejszając obciążenie serwera.


title: Jakie są zalety/wady używania obiektów jako parametrów w stosunku do innych metod obiektowych?

text: Myślę tutaj głównie o PHP, ale jeśli chcesz odwołać się do innych języków, to w porządku. Obiekt posiada metodę, która wymaga danych zawartych w innej klasie obiektu. Czy powinienem wyodrębnić te dane z innego obiektu do zmiennej, a następnie wysłać tylko te dane do żądającego obiektu? Czy też powinienem przekazać cały obiekt zawierający dane do obiektu wymagającego danych, a następnie obiekt żądający wykonać operacje wyodrębniania danych? Pytam, ponieważ pracuję nad dużym projektem, dla którego napisałem 100% kodu, a część mojego wczesnego kodu przyjmuje argumenty łańcuchowe lub numeryczne, ale mój późniejszy kod wydaje się skłaniać do przekazywania obiektów. Gdy wpadam na jakiś stary kod, zastanawiam się, czy powinienem przekonwertować go na parametry obiektu.


title: Języki z wyraźnym rozróżnieniem między podprogramami, które są czysto funkcjonalne, mutujące, zmieniające stan itp.?

text: Ostatnio jestem coraz bardziej sfrustrowany tym, że w większości nowoczesnych języków programowania, z którymi pracowałem (C/C++, C#, F#, Ruby, Python, JS i inne) jest bardzo mało, jeśli w ogóle, obsługi języków do określania, co podprogram faktycznie zadziała. Rozważmy następujący prosty pseudokod: var x = DoSomethingWith(y); Jak określić, co faktycznie zrobi wywołanie _DoSomethingWith(y)_? Czy zmutuje _y_ , czy zwróci kopię _y_? Czy zależy to od stanu globalnego czy lokalnego, czy tylko od _y_? Czy zmieni stan globalny czy lokalny? Jak zamknięcie wpływa na wynik rozmowy? We wszystkich językach, z którymi się zetknąłem, prawie na żadne z tych pytań nie można odpowiedzieć, po prostu patrząc na podpis podprogramu, i prawie nigdy nie ma wsparcia w czasie kompilacji ani w czasie wykonywania. Zwykle jedynym sposobem jest zaufanie autorowi API i nadzieja, że dokumentacja i/lub konwencje nazewnictwa ujawnią, co faktycznie zrobi podprogram. **Moje pytanie brzmi:** Czy istnieją dzisiaj jakieś języki, które dokonują symbolicznego rozróżnienia między tego typu scenariuszami i nakładają ograniczenia czasu kompilacji na to, jaki kod można napisać? (Oczywiście jest _niektóre_ wsparcie dla tego w większości nowoczesnych języków, takie jak różne poziomy zakresu i zamknięcia, oddzielenie kodu statycznego od kodu instancji, funkcje lambda itp. Ale zbyt często wydaje się, że są one ze sobą w konflikcie. Na przykład funkcja lambda będzie zwykle albo czysto funkcjonalna, i po prostu zwraca wartość opartą na parametrach wejściowych, albo mutuje parametry wejściowe w jakiś sposób.Ale zwykle jest możliwy dostęp do zmiennych statycznych z funkcji lambda, która z kolei może daje dostęp do zmiennych instancji, a następnie wszystko się rozpada.)


title: Co robisz z oszacowaniami dla zwinnych historii, w których programiści programują w parach?

text: Gdyby była to 2-punktowa historia dla jednej osoby, czy podwoiłabyś ją, gdyby ludzie się łączyli? Parowanie nie zawsze jest wykonywane w 100% zadania deweloperskiego, więc wydaje się, że podwojenie punktów fabularnych wydaje się niewłaściwe. I może nie być oczywiste, ile zadania będzie wymagało parowania do końca, więc nie będziesz wiedział, jakie powinny być punkty tej historii, dopóki nie skończysz – i wydaje się dziwne, że zmieniasz oszacowanie w połowie sprintu. Jeśli jednak prędkość ma być dokładną reprezentacją tego, ile pracy możemy wykonać podczas sprintu, wydaje się słuszna zmiana szacunków, jeśli nad zadaniem pracuje więcej niż jedna osoba. Ale także wydaje się, że dodaje to dużo kosztów administracyjnych. Myśli?


title: Jeśli ktoś zaoferuje Ci niezweryfikowane oświadczenie dotyczące praktyk tworzenia oprogramowania, czy odpowiadasz „potrzebne cytowanie”?

text: Ostatnio uczestniczyłem w wykładzie Grega Wilsona (Głównego Naukowca Software Carpentry). Z streszczenia: > Pomysł, że twierdzenia dotyczące praktyk tworzenia oprogramowania powinny opierać się na > dowodach jest nadal dla twórców oprogramowania obce, ale w końcu > zaczyna się to zmieniać: każdy naukowiec, który twierdzi, że określone narzędzie lub praktyka > przyspiesza tworzenie oprogramowania , tańsze lub bardziej wiarygodne, > oczekuje się teraz poparcia tego twierdzenia jakimś rodzajem badania empirycznego. Ogólnie wykład był bardzo pouczający i pozwolił mi dosyć głęboko zastanowić się nad swoim podejściem do rozwoju. W szczególności teraz szukam cytatów, aby poprzeć wiele stwierdzeń. Wcześniej przyzwyczaiłem się po prostu powtarzać oferowane prawdy, być może z notatką w pamięci, żeby sprawdzić ją później. Mówiąc wprost, **byłem łatwowierny**. Oto przykład zaczerpnięty z wykładu: > "Jeżeli więcej niż 25% kodu wymaga refaktoryzacji, to szybciej przepisać > to". Brzmi wiarygodnie, ale czy to prawda? Gdzie jest badanie, które to potwierdza? Czy to prawda dla wszystkich języków? I tak dalej. OK, jest całkiem możliwe, aby dojść do skrajności i nie wierzyć w nic nikomu, chyba że sam wyprowadziłeś to z pierwszych zasad. W ten sposób leży szaleństwo (a może matematyka ;-) ). Ale jeśli ktoś podejdzie do Ciebie z oświadczeniem w stylu „Hej, robiąc to w [wybierz język chwili], będziemy w stanie zwiększyć produktywność o [wybierz wielokrotność 10]%”, czy jesteś skłonny po prostu zaakceptować to, czy zamierzasz poprosić o udowodnione dowody? Jeśli to drugie (i mam nadzieję, że tak), to 1. gdzie byś się udał, aby znaleźć te dowody? 2. jak rygorystyczny byłbyś? Krótko mówiąc, jeśli ktoś zaoferuje Ci niezweryfikowane oświadczenie, czy odpowiesz „potrzebne cytowanie”?


title: Jak zaimplementować kolejkę wiadomości przez Redis?

text: ### Dlaczego Redis ma stać w kolejce? Mam wrażenie, że Redis może być dobrym kandydatem do wdrożenia systemu kolejkowego. Do tego momentu używaliśmy naszej bazy danych MySQL z odpytywaniem, czyli RabbitMQ. Z RabbitMQ mieliśmy wiele problemów - biblioteki klienckie są bardzo słabe i pełne błędów, a my nie chcielibyśmy poświęcać zbyt wiele godzin programisty na ich naprawę, kilka problemów z konsolą zarządzania serwerem itp. I na razie a przynajmniej nie chwytamy się milisekund ani poważnie nie zwiększamy wydajności, więc dopóki system ma architekturę, która inteligentnie obsługuje kolejkę, prawdopodobnie jesteśmy w dobrej formie. Ok, więc to jest tło. Zasadniczo mam bardzo klasyczny, prosty model kolejki - kilku producentów produkujących pracę i kilku konsumentów zużywających pracę, a zarówno producenci, jak i konsumenci muszą być w stanie inteligentnie skalować. Okazuje się, że naiwny `PUBSUB` nie działa, ponieważ nie chcę, aby _wszyscy_ subskrybenci konsumowali pracę, chcę tylko, aby _jeden_ subskrybent otrzymywał pracę. Na pierwszy rzut oka wygląda na to, że `BRPOPLPUSH` to inteligentny projekt. ### Czy możemy używać BRPOPLPUSH? Podstawowy projekt z `BRPOPLPUSH` to jedna kolejka robocza i kolejka postępu. Gdy konsument otrzymuje pracę, automatycznie umieszcza element w kolejce postępu, a kiedy kończy pracę, jest to `LREM`. Zapobiega to blackholingowi pracy w przypadku śmierci klienta i sprawia, że monitorowanie jest bardzo łatwe – na przykład możemy stwierdzić, czy istnieje problem powodujący, że konsumenci potrzebują dużo czasu na wykonanie zadań, a także stwierdzić, czy jest duża liczba zadań. Gwarantuje to, że * praca jest dostarczana dokładnie jednemu konsumentowi * praca kończy się w kolejce postępu, więc nie może się zaciemnić, jeśli konsument ### Wady * Wydaje mi się raczej dziwne, że najlepszy projekt, jaki znalazłem, nie t faktycznie używa `PUBSUB`, ponieważ wydaje się, że na tym skupia się większość postów na blogu o kolejkach w Redis. Więc czuję, że brakuje mi czegoś oczywistego. Jedynym sposobem, jaki widzę, aby użyć `PUBSUB` bez dwukrotnego zużywania zadań, jest po prostu wysłanie powiadomienia o nadejściu pracy, które konsumenci mogą następnie bez blokowania `RPOPLPUSH`. * Nie można żądać więcej niż jednego elementu pracy na raz, co wydaje się mieć problem z wydajnością. Niezbyt duża jak na naszą sytuację, ale raczej wyraźnie mówi, że ta operacja nie była zaprojektowana z myślą o dużej przepustowości lub tej sytuacji * W skrócie: _Czy brakuje mi czegoś głupiego?_ Dodałem też tag node.js, bo to jest język, w którym głównie jestem radzenie sobie z. Node może oferować pewne uproszczenia we wdrażaniu, biorąc pod uwagę jego jednowątkowy i nieblokujący charakter, ale ponadto używam biblioteki node-redis, a rozwiązania powinny lub mogą być również wrażliwe na jej mocne i słabe strony.


title: Ramy na wszystko – od czego zacząć? [Dłuższy post]

text: Wracając do historii tego pytania, nie wahaj się przejść do konkretnego pytania * * * Witam, bardzo interesowałem się ideą programowania abstrakcyjnego w ciągu ostatnich kilku lat. Zrobiłem około 30 prób stworzenia oprogramowania, które jest w stanie zrobić prawie wszystko, co w niego rzucisz. Podjąłem kilka prób, które zajęły ponad rok, zbliżając się, nigdy nie wypuszczając go poza mój kompilator. To było coś, co zawsze próbowałem owijać wokół głowy i zawsze czegoś brakuje. Z tytułem jestem pewien, że zakładasz: „Tak, oczywiście, ty noob! Nie możesz się ze wszystkiego wyjaśnić!” Na co muszę odpowiedzieć: „Dlaczego nie?” Aby dać ci pewne tło do tego, o czym mówię, wszystko zaczęło się od zrobienia oprogramowania SEO w odcieniu szarego kapelusza. Ciągle musiałem tworzyć podobne, ale nieco inne zestawy kodu. Przeszedłem przez tyle iteracji sposobów komunikacji w http, ile wszechświat ma cząstki. „Ile razy będę musiał napisać tę wielowątkową klasę?” to coś, o co często pytałem. Jasne, mógłbym stworzyć bibliotekę klas i po prostu z nią pracować, ale zawsze czułem, że mogę zoptymalizować to, co mam, co często było dużym przedsięwzięciem i zwykle wiązało się z częstym używaniem skrótu klawiszowego CRTL+A zmieszanego z przyciskiem usuwania . Uświadomiłem sobie, że nadszedł czas, aby zainwestować w system wtyczek. To pozwoliłoby mi po prostu dodawać fragmenty kodu. w miarę upływu czasu mogłem przewracać różne rzeczy i rozpowszechniać małe fragmenty kodu, a nie coś, co obejmuje tylko określoną funkcję lub projekt. Oczywiście ma to swoją własną złożoność i zanim skończyłem zakres oprogramowania dla tego dodatku, dotarło do mnie, że chciałbym dodać do wszystkiego w oprogramowaniu, a nie tylko nową metodę http lub kod automatyzacji dla konkretna strona internetowa. Świetnie, stajemy się bardziej abstrakcyjni. Jednak oprogramowanie, które mam na myśli, sprowadza się do kilku pytań dotyczących jego wykonania. Muszę mieć jakieś parametry do tego, co zamierzam zrobić. Po napisaniu, co idealne oprogramowanie zrobiłoby w moim umyśle, wymyśliłem to jako listę wymagań: * Powinien być w stanie korzystać z sieci * "Makro" lub "System wyrażeń", który pozwalałby ludziom robić coś takiego: = First(=ParseToList(=GetUrl("http://www.google.com?q=helloworld!"), Template.Google)) * Wielowątkowy * Możliwość dodawania elementów interfejsu użytkownika za pomocą pewnego typu XML -- ludzie mogą tworzyć własne własne dodatki itp. * Może korzystać z API innych firm za pośrednictwem wtyczek, takich jak Microsoft CRM, Exchange itp. Dzięki temu oprogramowanie może być zasadniczo używane do wszystkiego. Tak naprawdę każde zadanie, które chcesz zautomatyzować w prosty sposób. Tworzenie interfejsu użytkownika było również niezwykle trudne. Jak to wszystko robisz? To jest bardzo trudne. * * * Więc moje pytanie: Przy tak wielu próbach nie mam pomysłów, jak to pomyślnie zakończyć. Mam w głowie bardzo konkretny pomysł, ale nie udaje mi się go zrealizować. Jestem programistą samoukiem. Robię to od lat i pracuję w tym zawodowo, ale nigdy nie spotkałem się z czymś tak złożonym i dogłębnym jak system, który w zasadzie robi wszystko. Od czego byś zaczął? Jakie są najlepsze praktyki projektowania? Jak mogę uniknąć ciągłego powracania i optymalizacji oprogramowania. Co mogę zrobić, aby to uogólnić i doprowadzić wszystko do końca. To są rzeczy, z którymi się zmagam. PS, używam C# jako mojego głównego języka. Czuję, że w tym przykładzie mogę przekroczyć granicę języka, chociaż nie wiem, czy tak jest, czy po prostu jestem złym programistą. Dziękuję za Twój czas.


title: Czy inni programiści uważają, że im coraz lepiej, tym trudniej jest znaleźć pracę?

text: Kiedy zaczynałem, wydawało mi się, że o wiele lepiej jest mi robić wywiady i je przekazywać. Ale teraz, kiedy mam większe doświadczenie, coraz trudniej mi znaleźć pracę. Czy inni programiści czują to samo? Dam ci przykład. Udzieliłem wywiadu w ubiegłą środę. To był mały start-up z tylko jednym inżynierem i dyrektorem generalnym. Przywieźli mnie z Ohio (są z SF). Kiedy tam dotarłem, kazali mi napisać im skracacz linków, co zajęło mi około 10 minut. Miałem tam być cały dzień, pracując nad tym. Kiedy skończyłem to wcześniej, osoba przeprowadzająca wywiad wydawała się zszokowana. Potem rozmawialiśmy i zapytałem go, czego używają do przechowywania danych. Powiedział mi Mongo. Pytam, dlaczego zdecydował się użyć mongo. Następnie jąkał się i wymamrotał swoją odpowiedź, która w zasadzie sprowadzała się do „Korzystamy z tego, ponieważ Mongo to modna technologia baz danych i nie chcemy zostać pominięci”, co, jak się okazało, jest najczęstszym powodem ludzie używają obecnie NoSQL. Prowadzący wywiad szybko zakończył wywiad i prawie wypchnął mnie za drzwi. Miałem zjeść lunch z prezesem, ale wyrzucił mnie, zanim miałem szansę. Intervier nie był wredny ani niegrzeczny (a ja też nie). Po powrocie do Ohio dostałem od nich e-mail z informacją: „Nie pasowałem”. Takie rzeczy zdarzają mi się cały czas. Zaczynam myśleć, że „nie pasuje” może czasami oznaczać „mamy zbyt wysoki poziom umiejętności niż my”. Czy to wszystko w mojej głowie, czy inni doświadczeni programiści zauważają, że dzieje się to samo? Kiedy miałem problemy z kodowaniem, pracowałem z ankieterem i byłaby to pozytywna rzecz i zostałbym zatrudniony. Ale teraz zwykle przepuszczam część dotyczącą kodowania, a rozmówca, który zaniemówił, działa przeciwko mnie. Czy powinienem udawać, że zmagam się z problemami z kodowaniem?


title: Czy wiersz polecenia (konsola) jest ważny dla programisty ASP.NET?

text: Widziałem, jak wielu programistów RoR używa wiersza poleceń do interakcji z interfejsami i wdrażania aplikacji internetowych. Czy to niezbędny krok, aby zarobić dla programisty asp.net?


title: Czy funkcje pierwszej klasy zastępują wzorzec Strategia?

text: Wzorzec projektowy Strategia jest często uważany za substytut funkcji pierwszej klasy w językach, w których ich brakuje. Powiedzmy na przykład, że chcesz przekazać funkcjonalność do obiektu. W Javie musiałbyś przekazać do obiektu inny obiekt, który hermetyzuje pożądane zachowanie. W języku takim jak Ruby wystarczy przekazać samą funkcjonalność w formie funkcji anonimowej. Zastanawiałem się jednak nad tym i zdecydowałem, że być może Strategy oferuje więcej niż zwykła anonimowa funkcja. Dzieje się tak, ponieważ obiekt może utrzymywać stan, który istnieje niezależnie od okresu, w którym działa jego metoda. Jednak sama funkcja anonimowa może utrzymywać tylko stan, który przestaje istnieć w momencie zakończenia wykonywania funkcji. Czy w języku zorientowanym obiektowo, który obsługuje funkcje pierwszej klasy, wzorzec strategii ma jakąś przewagę nad używaniem funkcji?


title: Miary wydajności silnika Javascript w czasie?

text: Od początku wyścigu Javascript – który usytuowałbym w okolicach uruchomienia Google Chrome w 2008 roku – poprawa wydajności silnika Javascript była imponująca. Sieć jest przepełniona porównaniami, takimi jak „Firefox V3.42.7 vs. Safari 3.0-prealpha2”, a zwycięzca tych porównań zmienia się co kilka miesięcy i różni się w każdym teście. Ale ogólny obraz, niezależnie od tego, kto ostatnio wypuścił swoją nową wersję, jest taki, że średnia prędkość aktualnych przeglądarek znacznie się poprawiła w ciągu ostatnich lat. Jednak ta długoterminowa poprawa jest trudna do oszacowania: * ludzie zwykle porównują ostatnią wersję każdej przeglądarki, a nie różne wersje jednej przeglądarki * zapowiedziane ulepszenia wydajności zazwyczaj nie kumulują się: gdy ktoś ogłasza V3 dwa razy szybciej niż V2 i później V4 dwa razy szybciej niż V3, nie oznacza to, że V3 jest cztery razy szybciej niż V1, ponieważ zwykle oznaczają „w korzystnym przypadku”, a korzystny przypadek w przejściu V3-4 niekoniecznie jest taki sam jak w przejście na V2-3 * same benchmarki ewoluują w czasie; to, co dziś określa się mianem „testu Sunspider”, nie jest tym samym, co w 2008 roku, więc nie możemy porównywać surowych wyników w czasie. Czy ktoś wie o wartościowym pomiarze poprawy wydajności silników javascript w ciągu ostatnich kilku lat?


title: Wieloplatformowe programowanie pulpitu: C++ vs. Python

text: W porządku, na początek mam doświadczenie jako amatorski programista Obj-C/Cocoa i Ruby w/Rails. Są świetne, ale nie są tak naprawdę przydatne do pisania aplikacji międzyplatformowych (miejmy nadzieję, że pewnego dnia GNUSTep będzie wystarczająco kompletny, aby pierwsza była wieloplatformowa, ale ten dzień nie jest dzisiaj). C++, z tego, co wiem, jest niezwykle potężny, ale także ogromny, brzydki behemot, którego opanowanie może zająć pół dekady lub dłużej. Czytałem również, że bardzo łatwo można nie tylko strzelić sobie w stopę, ale także wysadzić nią całą nogę, ponieważ zarządzanie pamięcią jest w całości ręczne. Oczywiście to wszystko jest dość onieśmielające. Czy to jest poprawne? Wydaje się, że Python zapewnia większość możliwości C++ i jest znacznie łatwiejszy do opanowania kosztem szybkości. Jak duże jest to poświęcenie? Czy ma to znaczenie, czy można je zignorować? Co sprawi, że będę pisać szybkie, stabilne i wysoce niezawodne aplikacje w rozsądnym czasie? Ponadto, czy lepiej jest używać Qt w interfejsie użytkownika, czy zamiast tego utrzymywać oddzielne, natywne interfejsy dla każdej platformy? EDYCJA: Dla większej przejrzystości chcę napisać dwa rodzaje aplikacji: jedna jest niezwykle przyjazną i wygodną nakładką na bazę danych, a druga, która bez wątpienia pojawi się znacznie później, jest edytorem świata 3D.


title: Jakie są plusy i minusy używania tymczasowych „odniesień”?

text: W C i C++ (i chyba w innych językach, które pozwalają na „odwołanie” do elementu tablicy lub czegoś podobnego), gdy masz typ typu tablica, dostęp do poszczególnych elementów takiej tablicy można uzyskać „bezpośrednio” lub poprzez tymczasowe odniesienie lub wskaźnik. Przykład: // Tak: for(int i=0; i<n; ++i) { theArray[i].frobnicate(); tablica[i].shrub(); if(i % 2) { tablica[i].modulize(); } } // Lub tak: for(int i=0; i<n; ++i) { Typ& elem = tablica[i]; elem.frobnicate(); el.krzew(); if(i % 2) { elem.modulize(); } } Oczywiście _jeśli_ ciało pętli staje się zbyt skomplikowane, należy zastosować refaktoryzację i cały dostęp przenieść do oddzielnej funkcji/metody, która naturalnie działałaby na pojedynczym elemencie tablicy, ale w przypadkach, gdy jest niewiele cesów, które są używane tylko w jednej pętli, wygodniejsze może być trzymanie ich bezpośrednio w pętli. Dyskutowaliśmy, jaką formę preferować w naszym zespole i opinie są mieszane, dlatego interesuje mnie, czy istnieją jakieś wytyczne, zwłaszcza wrt. C++. Edycja: jeśli chcesz, to dotyczy wyłącznie stylu. Wydajność nie ma znaczenia, ponieważ nasz kompilator C++ powinien generować dokładnie ten sam kod w obu wersjach.


title: Skąd masz szanse na naukę wielu języków?

text: Czytałem Programista powinien skoncentrować się przynajmniej na ilu językach?, a dowiedziałem się, że nie znam języków w punktach 2, 3 pierwszej odpowiedzi. Chcę nauczyć się więcej języków, aby zwiększyć swoją wiedzę i umiejętności programowania. Jednak zwykle w firmach używają stałych frameworków i języków i rzadko się zmieniają. Więc nie jestem pewien, czy mam szansę nauczyć się tych języków i myślę, że tak samo byłoby z innymi programistami. Jednak widziałem tutaj wielu programistów, którzy znają wiele języków. Jak masz szanse nauczyć się wielu języków? **Aktualizuj** Myślę, że jest wiele osób, które czują się nieswojo, ponieważ wydaje mi się, że w ogóle nie chcę się uczyć w wolnym czasie. Właściwie to nieprawda :) Jestem zapalonym programistą i dlatego zamieściłem tutaj takie pytanie. Uczę się w wolnym czasie, ale pomyślałem, że nie wystarczy biegle posługiwać się językami. W każdym razie dzięki za wszystkie odpowiedzi!


title: Czy istnieje jakiś wzorzec projektowy do usuwania elementów z mapy mieszania?

text: W mojej aplikacji śledzę uruchomione wątki za pomocą mapy skrótów, w ten sposób mogę pobrać właściwy wątek i wykonać dowolne akcje. Aplikacja ewoluowała w taki sposób, że tworzone są nowe wątki, a stare muszą zostać zniszczone. Obawiam się, czy poprawnie usuwam elementy hasha, czy też istnieje jakiś skuteczny wzorzec. Projektuję w Javie, ale podzielę się pseudokodem: # HashMap mainHashmap już zainicjalizowany List toDelete = new List(); # Pierwszy krok, zatrzymaj wątki For (każdy element w HashMap) { if (element.value to ThreadA) { element.value.stopThread(); toDelete.add(element.klucz); } } # Następnie usuń element z tablicy For (każdy klucz w toDelete) { mainHashmap.remove(key); }      Dziękuję


title: Jak mam ocenić odpowiedzi na zadanie programistyczne, którego używam do zatrudniania?

text: Po naszym ekranie telefonu, ale przed rozmową twarzą w twarz, proszę naszych kandydatów o wykonanie krótkiego zadania programistycznego. Polega na napisaniu małego programu wiersza poleceń w C, który powinien działać do około 100-200 LoC i zająć 3-4 godziny. Dajemy kandydatowi 72 godziny na wykonanie zadania i odesłanie go do nas. Wymaga to trochę prostej obsługi plików i łańcuchów oraz prostej struktury danych (którą kandydat musi odpowiednio wybrać). Prosimy o rozwiązanie, które jest „rozsądnie wydajne, zwięzłe i łatwe do zrozumienia”, aby zasugerować, że nie oczekujemy, że będzie super sprytne lub zoptymalizowane w skali mikro kosztem czytelności. Zadanie nie jest do końca sprecyzowane, więc wyjaśniamy, że chcielibyśmy zobaczyć dokument dotyczący założeń. **Więc moje pytanie brzmi: jak powinienem ocenić rozwiązanie?** Do tej pory widziałem kilka rozwiązań (to wczesne dni). Ale jestem trochę rozczarowany, że pojawiły się błędy, które znalazłem w ciągu kilku minut ręcznego testowania lub przeglądania kodu. Ale jakiego standardu powinienem się spodziewać? Jeśli ktoś ma jakieś linki do dobrych ogólnych porad na ten temat, byłoby to bardzo mile widziane.


title: Co to jest obiekt modułu i obiekt funkcji?

text: Obecnie uczę się Pythona, korzystając z książki na licencji GNU „Wprowadzenie do informatyki przy użyciu Pythona”. W rozdziale 3 omówiono funkcje. Chociaż rozumiem pojęcie funkcji i tego, jak upraszczają one kod, wykonując zdefiniowaną sekwencję instrukcji, gdy tylko są wywoływane, oraz że moduły są zbiorami powiązanych funkcji i zmiennych przechowywanych w pliku, nie rozumiem koncepcji obiektów modułów i obiekty funkcyjne. Na przykład, gdy wykonywane jest polecenie „import math”, mówi się, że tworzony jest obiekt modułu. Ponadto, gdy funkcja jest zdefiniowana i wykonywana, tworzony jest obiekt funkcji. Czy ktoś mógłby mi wyjaśnić czym są te "obiekty"?


title: Jak myślicie o frameworkach specyficznych dla organizacji?

text: Wiem, że powinien istnieć rodzaj standardu tworzenia oprogramowania, ale w organizacji, w której pracuję (ponad 30 000 pracowników), mamy bardzo rygorystyczny framework do tworzenia oprogramowania Java. Moim zdaniem taki framework jest prehistoryczny, ponieważ mamy co najmniej 10 lat za sobą (Standard to Java 1.5, ale ze wsparciem 'til java 1.2). Dalej framework spowalnia wydajność, spada satysfakcja użytkowników i piszę więcej standardowych kodów, niż jest to korzystne dla mojego zdrowia :-). Jakieś sugestie dotyczące zalet takiego frameworka? Jakie są dobre praktyki dla takich ram, aby nie zalegać z faktami?


title: Jaka jest najważniejsza zmiana w obecnym projekcie, jaką wywoła „Narodowa strategia na rzecz zaufanych tożsamości w cyberprzestrzeni”?

text: Aktualny projekt „Narodowej strategii na rzecz zaufanych tożsamości w cyberprzestrzeni” został opublikowany przez Departament Bezpieczeństwa Wewnętrznego. To pytanie nie dotyczy prywatności czy konstytucyjności, ale tego, jak ustawa ta wpłynie na modele biznesowe i strategie rozwoju deweloperów. Kiedy pojawił się post, przypomniałem sobie listopadowy post Jeffa dotyczący internetowego prawa jazdy. Niezależnie od tego, czy jest to idealny model, czy nie, oba podejścia próbują poradzić sobie ze wspólnym problemem (zarówno deweloperów, jak i użytkowników końcowych): Jak ustalić tożsamość online? Pytanie, które tutaj zadaję, dotyczy różnych obciążeń, które zostaną nałożone na deweloperów i użytkowników, jakie są niektóre z głównych, przewidywalnych problemów związanych z wdrażaniem, które wynikną z rozwiązania proponowanego przez obecny rząd USA? Aby szybko zapoznać się z konfiguracją, przejdź do strony 12, gdzie znajdują się komponenty infrastruktury, oto dwa wyróżniki: * Dostawca tożsamości (IDP) jest odpowiedzialny za procesy związane z rejestracją podmiotu oraz ustanowieniem i utrzymaniem tożsamości cyfrowej związanej z osoba fizyczna lub NPE. Procesy te obejmują weryfikację i sprawdzanie tożsamości, a także unieważnianie, zawieszanie i odzyskiwanie tożsamości cyfrowej. IDP jest odpowiedzialny za wydanie poświadczenia, obiektu informacyjnego lub urządzenia używanego podczas transakcji w celu dostarczenia dowodu tożsamości podmiotu; może również zapewniać powiązanie z władzą, rolami, prawami, przywilejami i innymi atrybutami. * Poświadczenia mogą być przechowywane na nośniku tożsamości, który jest urządzeniem lub obiektem (fizycznym lub wirtualnym) używanym do przechowywania jednego lub więcej poświadczeń, oświadczeń lub atrybutów związanych z podmiotem. Nośniki tożsamości są powszechnie dostępne w wielu formatach, takich jak karty inteligentne, układy zabezpieczające wbudowane w komputery PC, telefony komórkowe, certyfikaty oparte na oprogramowaniu i urządzenia USB. Wybór odpowiedniego poświadczenia jest specyficzny dla wdrożenia i zależny od tolerancji ryzyka uczestniczących podmiotów. Oto pierwsze uważane za wykonalne elementy projektu: * Działanie 1: Wyznaczenie Federalnej Agencji do kierowania działaniami sektora publicznego/prywatnego związanymi z osiągnięciem celów strategii * Działanie 2: Opracowanie wspólnego, kompleksowego planu wdrażania dla sektora publicznego/prywatnego * Działanie 3: Przyspieszenie ekspansji służb federalnych, programów pilotażowych i polityk, które są zgodne z ekosystemem tożsamości * Działanie 4: Praca w sektorze publicznym/prywatnym w celu wdrożenia wzmocnionej ochrony prywatności * Działanie 5: Koordynacja rozwoju i doskonalenia modeli ryzyka i Standardy interoperacyjności * Działanie 6: Odniesienie się do obaw dostawców usług i osób fizycznych * Działanie 7: Dotarcie do wszystkich interesariuszy i zwiększenie świadomości * Działanie 8: Kontynuacja współpracy w działaniach międzynarodowych * Działanie 9: Zidentyfikowanie innych sposobów zachęcania do przyjęcia ekosystemu tożsamości w całym naród


title: Kiedy pisać testy jednostkowe: czy istnieje lista terminów do podjęcia właściwej decyzji?

text: Aby pisać testy jednostkowe, musimy napisać dodatkowe bity kodu. Dla kilku projektów wykonujemy testy jednostkowe, a dla kilku nie. Jako Team Leader mam kłopoty z podjęciem właściwej decyzji. Czy istnieje lista warunków, na podstawie których mogę podjąć właściwą decyzję, czy będziemy przeprowadzać testy jednostkowe, czy nie? **EDYTUJ:** Dodaj komentarz podczas głosowania nad pytaniem. Pomoże mi ulepszyć moje pytanie.


title: Dlaczego niektóre języki (np. Visual Basic) są uważane za bardziej przystosowane do przedsiębiorstw niż inne (Python)

text: Czytając o różnych witrynach technicznych, często można odnieść wrażenie, że języki Microsoft / Oracle itp. są uważane za „przygotowane na przedsiębiorstwa”, podczas gdy wydaje się, że więcej wątpliwości budzi języki takie jak Python czy Ruby. Dlaczego to? Czy języki Microsoft rzeczywiście mają mniej luk w zabezpieczeniach, czy nie?


title: Czy programista powinien zawsze być w stanie zrobić wszystko, co może zrobić użytkownik?

text: Czy programista powinien być w stanie wykonać wszystkie operacje na obiekcie programowo, które mógłby wykonać użytkownik? Na przykład pracuję z obiektem wyboru listy. Aby wypełnić listę, List.AddItem(itemData) jest wielokrotnie wywoływana, dopóki nie zostanie zbudowana. Użytkownik może wtedy: * Wyświetlić całą listę * Wybrać pojedynczą pozycję z listy Jednak nie ma programowego sposobu na wyświetlenie wszystkich pozycji. Nie ma też łatwego sposobu na ustawienie elementu jako wybranego. Możesz, jeśli śledzisz, co zostało dodane do listy, i wywołujesz List.SelectItem(itemData). Oznacza to, że musiałbyś utrzymywać niezależną listę przedmiotów oddzielnie od obiektu, co mogłoby spowodować jego własny problem (ta odrobina brzydoty nie jest konieczna w pytaniu, ale stanowi część motywacji). Ogólnie, jeśli użytkownik może uzyskać informacje o obiekcie lub wykonać akcję na obiekcie, czy ta sama funkcjonalność powinna być dostępna dla programisty, a nie ukryta? Podejrzewam, że odpowiedź brzmi „tak”, ale zdałem sobie sprawę, że mogę przesadzać z tym jednym przypadkiem, z którego jestem niezadowolony.


title: Dlaczego flask używa Jinja2 a nie xpath?

text: Dopiero zaczynam pracę z pythonem, a ponieważ wychodzę ze środowiska PHP (więc muszę dostosować swój umysł, aby zawijać w nowe koncepcje), jedno główne pytanie wciąż pozostaje bez odpowiedzi - dlaczego Flask potrzebuje **silnika szablonów** ? Sposób, w jaki byłem przyzwyczajony, polegał na posiadaniu `template.html`, który zawierał poprawny html bez żadnej logiki, a następnie, w razie potrzeby, po prostu ładował plik do obiektu `DOMDocument` i poruszał się po nim za pomocą `DOMXpath`. To miało dla mnie sens - zostaw część UI oddzielnie od części LOGIC. Ale teraz, odkąd zaczynam się uczyć nowego języka, zmusza mnie to do powrotu do mieszania logiki z interfejsem użytkownika. Więc sprowadza się to do tego - czy to ja, czy DOM i trasa xpath to tylko coś, co robię, aby utrudnić sobie życie, czy też Flask źle używa silnika szablonów?


title: Korzystanie z TSQL po raz pierwszy kilka podstawowych instrukcji

text: Piszę aplikację, która będzie korzystała z wielu tabel i powiedziano mi, że nie wolno mi używać procedur składowanych w tym projekcie, ponieważ będzie to zbyt wolne. Zasugerowano, że używam TSQL. Do tej pory używałem tylko procedur składowanych. Czy używanie TSQL jest inne? Czy to jest droga do szybszego dostępu do danych, czy są inne metody?


title: Jak wykonać pragmatyczne wysokopoziomowe/meta-programowanie?

text: Wyobraź sobie, że zaimplementowałeś tworzenie ładnego kształtu gwiazdy opartej na ścieżce w Lisp. Następnie odkrywasz Processing i ponownie wdrażasz cały kod, ponieważ Processing/Java/Java2D jest inny. Następnie chcesz majstrować przy libcinder, więc przenosisz swój kod do C++/Kairu. Dużo (prze)piszesz kodu płyty kotłowej, podczas gdy rzeczywisty wymóg „utwórz kształt gwiazdy” (lub „utwórz ścieżkę, przesuńdo x y, liniado x y”) nie uległ zmianie. Jakie są opcje hermetyzacji tych szczegółów implementacji? Jakieś pragmatyczne meta-programowanie? Może system ekspercki? Jak zdefiniowałbyś swoją podstawową logikę biznesową tak niezależną od języka, jak to tylko możliwe? **EDYTUJ:** To był prawdziwy problem biznesowy dla niektórych osób, jeśli spojrzysz na Schlepa lub Stellę. Pomysł polega na tym, że napisałeś swoją podstawową bibliotekę, m.in. w Javie, a teraz trzeba napisać aplikację na iOS. Na jaki język stawiasz przyszłość? Jak możesz zaoszczędzić swoją inwestycję w obecnej bazie kodu?


title: Najlepsze projekty e-commerce ASP.NET MVC typu open source

text: Muszę uruchomić i uruchomić witrynę e-commerce, ale naprawdę nie chcę programować jej od podstaw, jeśli nie jest to konieczne. Chcę go zaprogramować za pomocą ASP.NET MVC. Szukam dobrej alternatywy open source (lub takiej, którą można kupić, jeśli jest wystarczająco modułowa), którą mogę wykorzystać jako podstawę i wzbogacić o potrzebne funkcje? Musi mieć wszystkie "normalne" funkcje e-commerce, a także możliwość integracji z wybranym przeze mnie API karty kredytowej. Jeśli ktoś ma tu dla mnie jakieś rekomendacje, będę wdzięczny :)


title: outsourcing przeglądu/refaktoryzacji kodu

text: Mam mały projekt (3000 linii w Pythonie), który sam napisałem; nie ma żadnych znanych błędów i ma kilka przyzwoitych części, ale jest w dużej mierze bałaganem z powodu mojego braku czasu. Niestety muszę być tym, który kontynuuje pisanie i utrzymanie kodu. Czy to dobry pomysł, aby zatrudnić bardzo doświadczonego programistę, wyjaśnić mu wymagania (słownie, ponieważ nie mam ich udokumentowanych) i pozwolić mu przejrzeć kod i dokonać jego refaktoryzacji (w ścisłej dyskusji ze mną)? Obawiam się, że: (a) ta praca jest tak irytująca, że bardzo doświadczeni programiści nie chcieliby tego robić. (b) Spędziłbym tak dużo czasu na wyjaśnianiu wymagań i tego, co robi mój obecny kod, że szybciej byłoby mi wykonać rzeczywistą pracę samodzielnie.


title: Integracja z nowym zespołem

text: Właśnie dołączyłem do nowej firmy, w której wielu programistów pracuje od ponad dziesięciu lat. Jak zintegrować się z zespołem bez nadepnięcia na zbyt wiele palców?


title: Etyka programisty: Czy mogę podzielić projekt z jednego hosta kodu na drugi?

text: Powiedzmy, że znalazłem ten świetny fragment kodu w Bitbucket. Bardzo mi się to podoba, ale jest mały błąd, który chcę naprawić. Z drugiej strony cały mój kod mam na GitHub. Czy można rozpocząć nowe repozytorium na Github i odnieść się do oryginału w komentarzu lub na wiki?


title: Dlaczego powstały koncepcje (programowanie ogólne), skoro mieliśmy już klasy i interfejsy?

text: _Również na stackoverflow.com:_ Rozumiem, że koncepcje STL musiały istnieć i że głupio byłoby nazywać je „klasami” lub „interfejsami”, gdy w rzeczywistości są tylko udokumentowanymi (ludzkimi) koncepcjami i nie można ich przetłumaczyć do kodu C++ w tamtym czasie, ale mając możliwość rozszerzenia języka o koncepcje, dlaczego po prostu nie zmodyfikowali możliwości klas i/lub wprowadzonych interfejsów? Czy koncepcja nie jest bardzo podobna do interfejsu (klasa abstrakcyjna w 100% bez danych)? Patrząc na to, wydaje mi się, że interfejsy nie obsługują tylko aksjomatów, ale może aksjomaty mogłyby zostać wprowadzone do interfejsów C++ (biorąc pod uwagę hipotetyczne przyjęcie interfejsów w C++ w celu przejęcia koncepcji), czyż nie? Myślę, że nawet automatyczne koncepcje można łatwo dodać do takiego interfejsu C++ (auto interfejs LessThanComparable, ktoś?). Czy concept_map nie jest bardzo podobny do wzorca Adapter? Jeśli wszystkie metody są wbudowane, adapter zasadniczo nie istnieje poza czasem kompilacji; kompilator po prostu zastępuje wywołania interfejsu wersjami wbudowanymi, wywołując obiekt docelowy bezpośrednio w czasie wykonywania. Słyszałem o czymś, co nazywa się statycznym programowaniem obiektowym, co zasadniczo oznacza efektywne ponowne wykorzystanie koncepcji zorientowania obiektowego w programowaniu generycznym, co pozwala na wykorzystanie większości mocy OOP bez ponoszenia kosztów wykonywania. Dlaczego ten pomysł nie był dalej rozważany? Mam nadzieję, że to jest wystarczająco jasne. Mogę to przepisać, jeśli myślisz, że nie byłem; po prostu daj mi znać.


title: Dlaczego, jeśli instrukcje nie wprowadzają zakresu w ruby 1.9?

text: jeśli oświadczenia nie wprowadzają zakresu w Ruby 1.9, jakie jest uzasadnienie tej zmiany z Ruby 1.8?


title: Ruby freelancer: realistyczne oczekiwania?

text: Jestem w sytuacji, w której potrzebuję tylko 100 dolarów na mieszkanie. Jak to się ma do programowania? Cóż, chciałbym usłyszeć opinie osób na tej stronie, jeśli w ogóle realistyczne jest oczekiwanie, że Ruby noobie będzie w stanie zarobić 100 $ jako freelancer za miesiąc od teraz, przy założeniu dużego wysiłku i entuzjazmu. noob, uczący się Ruby przed Railsami.


title: Jaka jest różnica między rozproszoną a niedystrybuowaną kontrolą wersji?

text: Jakie są wewnętrzne różnice strukturalne między kontrolą wersji w wersji rozproszonej (np. Git & Mercurial) i nierozproszonej (Subversion)? Pytanie pochodziło z grupy dyskusyjnej, w której narzędzie wchodziło w interakcję z CVS i spierano się, czy można je łatwo przenieść do innych systemów, czy nie.