title: 10-minutowy wywiad techniczny

text: Muszę bardzo szybko dokonać szybkiej oceny dziesiątek nowych uczniów. Z każdym z nich mam 30 minut spotkania (za dwa lub trzy dni). Większość czasu chcę wykorzystać na omówienie aspektów nietechnicznych. Dlatego planuję poświęcić 10 minut na pytania techniczne. Te same pytania dla nich wszystkich. Wszyscy są już zatrudnieni (są studentami), to co muszę wiedzieć to średni poziom, aby przygotować szkolenie. Idealnie, trudność „musi być progresywna”, aby ustalić poziom dla każdego z nich. Uśrednię poziom i zrobię też średnią z każdego pytania. **Gdybyś miał tylko 10 minut i 10 pytań do zadania kandydatowi, jaka byłaby Twoja pierwsza dziesiątka?**


title: Modyfikujesz licencję MIT dla zmodyfikowanego kodu źródłowego?

text: Dokonałem dużej liczby modyfikacji w pewnym kodzie źródłowym na licencji MIT, aby dostosować go do wymagań mojego projektu. Ponieważ jest to JavaScript (dla strony internetowej), zminimalizowany kod źródłowy jest naturalnie dostępny dla każdego, kto przegląda witrynę. Chociaż cieszę się, że ludzie używają kodu źródłowego zgodnie z warunkami licencji MIT, czuję, że treść licencji może wprowadzać w błąd, ponieważ jest to mocno zmodyfikowana wersja. Czy można zmienić tekst licencji? Jaka jest prawidłowa etykieta? **Oryginalny tekst:** Licencja MIT (MIT) Prawa autorskie (c) 2009 - 2014 Adriana Palazova http://www.adipalaz.com ... Pełna licencja w pytaniu (dla sterowania akordeonem jQuery): http:// www.adipalaz.com/docs/mit-license.txt **Proponowana zmiana:** Dodaj moje imię i nazwisko do informacji o prawach autorskich w licencji MIT: Licencja MIT (MIT) Copyright (c) 2009 - 2014 Adriana Palazova, 2014 { {My Name Here}} http://www.adipalaz.com ... A następnie zmień nagłówek w zminifikowanym pliku JavaScript na następujący: /*! * Nested Accordion (zmodyfikowane przez {{My Name Here}}) * Copyright (c) 2009, 2010, 2011, 2012, 2013 Adriana Palazova * Copyright (c) 2014 {{My Name Here}} * Na licencji MIT (http ://{{Mój URL tutaj}}/mit-license.txt). */


title: Testy jednostkowe, pisz je przed czy po frameworku?

text: To jest moje pierwsze pytanie, więc streszczę je krótko i na temat. Czy pisząc testy jednostkowe, należy je pisać przed, czy po utworzeniu dla nich frameworka? Pojawiło się to w dyskusji między moim dyrektorem generalnym a prezesem i chciałem poznać twoją opinię na ten temat. Osobiście zawsze najpierw pisałem kod, potem testy jednostkowe, ale co z tobą?


title: Czy umieściłbyś link do profilu stackoverflow w swoim CV / CV?

text: Jeśli aplikujesz o nową pracę, czy umieściłbyś link do profilu stackoverflow w swoim CV? To pokaże pracodawcy, że jesteś aktywnym członkiem społeczności programistów, a także zapewni wgląd w swoją wiedzę + jak dobrze przekazujesz swoje pomysły. Jakkolwiek byłoby to dla mnie trochę efekciarskie?


title: Jak skutecznie zarządzać kontrolą źródła dla projektu z otwartym i zamkniętym źródłem?

text: Obecnie pracuję nad projektem, który ma zarówno „edycję społecznościową” o otwartym kodzie źródłowym, jak i zestaw funkcji o zamkniętym kodzie źródłowym dla płacących klientów. Jednym z problemów w tej chwili jest zastanowienie się, jak radzić sobie z utrzymywaniem współdzielonego źródła w synchronizacji między projektami. Używamy Mercurial do kontroli źródła, a fragment o otwartym kodzie źródłowym jest wypychany zarówno do CodePlex, jak i Kiln, podczas gdy fragment o zamkniętym kodzie źródłowym jest wypychany tylko do Kiln. Obecnie przechowujemy je w osobnych repozytoriach z odniesieniami do projektów w repozytorium typu open source, jeśli ma to zastosowanie. Czy to naprawdę najlepszy sposób na radzenie sobie z tego rodzaju sytuacją, czy jest coś, czego mi brakuje (np. używanie podrepozytorium w repozytorium o zamkniętym kodzie źródłowym, aby pomieścić część o otwartym kodzie źródłowym), co może być łatwiejsze i czystsze w pracy?


title: Czy dobrze jest używać arytmetyki binarnej w kodzie C++, takim jak „styl C”?

text: Podoba mi się fakt, że język C pozwala używać arytmetyki binarnej w wyraźny sposób w kodzie, czasami użycie arytmetyki binarnej może również dać ci niewielką przewagę pod względem wydajności; ale odkąd zacząłem studiować C++, nie mogę powiedzieć, ile widziałem wyraźnego użycia czegoś takiego w kodzie C++, czegoś takiego jak wskaźnik do struktury wskaźnika lub instrukcja przeskakiwania do określonej wartości indeksu za pomocą arytmetyki binarnej . Czy arytmetyka binarna jest nadal ważna i aktualna w świecie C++? Jak mogę zoptymalizować arytmetykę i/lub dostęp do określonego indeksu? A co z C++ i sposobem rozmieszczenia bitów zgodnie ze standardem? ... czy przyjrzałem się złym konwencjom kodowania ... ?


title: Równoważenie teorii uczenia się czasu i ćwiczeń w czasie

text: Obecnie uczę się C++ od Stroustrup. W tym samym czasie ćwiczę C++, wykonując kilka małych projektów (Project Euler, trochę SDL z Tetrisem, itp.). Ale trudno mi zbalansować czas. Jaka powinna być dobra równowaga, pięćdziesiąt pięćdziesiąt? Trochę więcej teorii, trochę mniej praktyki?


title: Czy mogę używać bibliotek open source w wersji próbnej?

text: Napisałem mały program w języku Java, który chciałbym rozpowszechniać na mojej stronie internetowej. Wykorzystałem kilka zewnętrznych bibliotek, które deklarują następujące licencje: Apache License (2.0), LGPL i jedno API nie deklaruje żadnej licencji.. Jest jednak open source. Poświęciłem dużo czasu i wysiłku na rozwój mojego programu. Dlatego pomyślałem o dystrybucji oprogramowania tak, aby tylko darczyńcy (bez względu na to, ile lub mało wpłacili) mogli z niego korzystać w jak największym stopniu. Osoby niebędące darczyńcami od czasu do czasu widzą ekran nękający z sugestią darowizny i mogą pobierać tylko jeden plik na raz, zamiast pobierać jednocześnie. (Tak, mój program pobiera trochę plików) Czy mogę to zrobić bez problemów prawnych? Z jednej strony chciałbym dystrybuować kompletne źródło mojego projektu, ale z drugiej strony byłoby to bezużyteczne dla osób nie będących darczyńcami, ponieważ mogliby po prostu usunąć część ze sprawdzeniem numeru seryjnego i redystrybuować moje oprogramowanie. Na jakiej licencji powinienem rozpowszechniać mój program?


title: Testowanie jednostkowe i integracyjne: jak może stać się refleksem?

text: Wszyscy programiści w moim zespole są zaznajomieni z testowaniem jednostkowym i testowaniem integracyjnym. Wszyscy z tym pracowaliśmy. Mamy z nim wszystkie pisemne testy. Niektórzy z nas odczuli nawet lepsze poczucie zaufania do własnego kodu. Jednak z jakiegoś powodu pisanie testów jednostkowych/integracyjnych nie stało się odruchem dla żadnego z członków zespołu. Nikt z nas tak naprawdę nie czuje się źle, gdy nie pisze testów jednostkowych w tym samym czasie, co sam kod. W rezultacie nasza baza kodu jest w większości odkrywana przez testy jednostkowe, a projekty trafiają do produkcji nieprzetestowane. Problem polega oczywiście na tym, że gdy projekty są już w fazie produkcyjnej i działają już dobrze, praktycznie niemożliwe jest uzyskanie czasu i/lub budżetu na dodanie testów jednostkowych/integracyjnych. Członkowie mojego zespołu i ja znamy już wartość testów jednostkowych (1, 2), ale wydaje się, że nie pomaga to we wprowadzaniu testów jednostkowych do naszego naturalnego przepływu pracy. Z mojego doświadczenia wynika, że obowiązkowe testy jednostkowe i/lub pokrycie celu po prostu skutkują słabą jakością testów i spowalniają członków zespołu po prostu dlatego, że nie ma motywacji do tworzenia tych testów. Również, gdy tylko ciśnienie osłabnie, testy jednostkowe nie są już pisane. Moje pytanie brzmi: Czy istnieją metody, z którymi eksperymentowałeś, które pomagają zbudować dynamikę/rozpęd wewnątrz zespołu, prowadząc do tego, że ludzie naturalnie chcą tworzyć i utrzymywać te testy?


title: Jak zasadniczo podejść do tworzenia aplikacji „financial planner”?

text: Chcę stworzyć aplikację do planowania finansowego (do użytku osobistego), której ogólna funkcjonalność będzie następująca: * Użytkownik (ja...) może tworzyć różne 'scenariusze'. * Każdy scenariusz jest skonfigurowany z różnymi przychodzącymi/wychodzącymi. * Scenariusze można „eksplorować” w formacie kalendarza z prognozami uwzględniającymi podatek, odsetki (zarówno od zadłużenia, jak i oszczędności) itd. Mój problem polega na tym, jak fundamentalnie podejść do projektu. Rozważałem: * Przy tworzeniu przychodzących/wychodzących dla skryptu, aby zastosować je do każdego dnia w tabeli 'dni' bazy danych, działając jako metoda buforowania. Oznacza to, że gdybym chciał przyjrzeć się 14 stycznia 2074 roku, nie ma tysięcy cykli obliczeń do wykonania, a wynik można po prostu wyciągnąć. * Wykonuj każdą kalkulację dynamicznie, ale znowu trudno mi sobie wyobrazić, jak radziłbym sobie z różnymi ulgami podatkowymi (przy okazji, mam siedzibę w Wielkiej Brytanii), podwyżkami i „zmianami” moich wpływów/wychodów. Siedziałem nad tym przez kilka dni i staram się wymyślić eleganckie podejście do mojego problemu. Równie dobrze może istnieć oprogramowanie, które robi to, co chcę robić (w rzeczywistości jestem pewien, że tak), ale chciałbym to samodzielnie opracować w celach edukacyjnych, aby móc dodać je do zestawu narzędzi mojego życia osobistego ” i abym mógł ją rozwinąć w przyszłości. Wielkie dzięki wszystkim, którzy mają jakiś wkład w mój dylemat.


title: Być ankieterem - Java

text: Internet jest pełen odniesień, jak przygotować się do rozmowy kwalifikacyjnej. Wiele stron internetowych jest przeładowanych pytaniami i odpowiedziami. Ale nie mogę znaleźć żadnych przydatnych informacji o tym, co dokładnie powinien zrobić ankieter, aby ocenić kandydata. Mam na myśli nie tylko zbieranie dobrych pytań, które należy zadać. Pytam o strategię oceny kandydata i dowiedz się, czy jest naprawdę dobry, czy po prostu dobrze nauczył się pytań i odpowiedzi. Zastanawiam się, czy ktoś może podzielić się swoim doświadczeniem w przeprowadzaniu wywiadów z SWES i co sądzisz o następujących * Czego można oczekiwać od junior java developera? co powinien wiedzieć? * Czego można oczekiwać od starszego programisty Java? co powinien wiedzieć?


title: jak to zaprojektować, aby było możliwe do przetestowania jednostkowego?

text: Obecnie pracuję nad projektem, w którym otrzymuję obiekt za pośrednictwem usługi sieciowej (WSDL). Cały proces wygląda następująco: Odbierz obiekt -> dodaj/usuń/zaktualizuj jego części (lub całość) -> i zwróć obiekt z wprowadzonymi zmianami. Chodzi o to, że czasami te zmiany są skomplikowane i wiąże się to z pewną logiką, innymi bazami danych, innymi usługami sieciowymi itp. Aby to ułatwić, tworzę niestandardowy obiekt, który naśladuje oryginalny, ale ma ulepszoną funkcjonalność, aby zrobić pewne rzeczy łatwiej. Więc próbuję mieć ten proces: Odbierz oryginalny obiekt -> przekonwertuj/skopiuj go do obiektu niestandardowego -> dodaj/usuń/aktualizuj -> przekonwertuj/skopiuj go z powrotem do oryginalnego obiektu -> zwróć oryginalny obiekt. Przykład: public class Row { public List<Field> Fields { get; ustawić; } ciąg publiczny RowId { get; ustawić; } public Row() { this.Fields = new List<Field>(); } } public class Pole { public string Number { get; ustawić; } ciąg publiczny Wartość { get; ustawić; } } Tak więc na przykład jedną z "akcji" do wykonania w tym przypadku byłoby znalezienie wszystkich `Field` w `Row`, które pasują do `Value` równej czegoś, i zaktualizowanie ich o inną wartość. Mam klasę `CustomRow`, która reprezentuje klasę `Row`, jak mogę sprawić, by ta jednostka klasy była testowalna? Czy muszę utworzyć interfejs `ICustomRow`, aby zakpić go w teście jednostkowym? Jeśli jedną z akcji jest zsumowanie wszystkich „Wartości” w „Polach”, które mają „Liczbę” równą „10”, jak ta funkcja, w jaki sposób można zaprojektować niestandardową klasę, aby ułatwić testy jednostkowe. Przykładowa funkcja: public int Sum(FieldNumber number) { return row.Fields.Where(x => x.FieldNumber.Equals(number)).Sum(x => x.FieldValue); } Czy podchodzę do tego w niewłaściwy sposób?


title: Generowanie różnych kombinacji z listy mięśni

text: Załóżmy, że mamy model ludzkiego układu mięśniowego zawierającego następujące mięśnie w ramach określonej grupy mięśni: * **Ramiona** * Biceps * Triceps * Przedramiona * **Tułowia Przód** * Brzuch * Klatka piersiowa * Ramiona * **Tułowia Plecy** * Trapez * Najszersze grzbiety * Tylne ramiona * Dolna część pleców * **Dolna część ciała** * Ćwiartki * Szynki * Biodra i Pośladki * Łydki Teraz, mając listę wybranych mięśni, muszę znaleźć kombinacje według podanych zasad: * *Jeżeli wszystkie mięśnie są wybrane z grupy:** Całe ciało (Wszystkie mięśnie) Ramiona Tułów Tułów Przód Tułów Tył Dolna część ciała **Jeżeli są całe grupy razem:** Ramiona i tułów Ramiona i tułów przednie Ramiona i tułów z tyłu Ramiona i tułów dolna część tułowia i dolna część tułowia Przód i dolna część tułowia Tył tułowia i dolna część tułowia Jeśli wybrano zarówno przód jak i tył tułowia, można to traktować jako „tułów”. **Jeżeli z grupy wybrane są więcej niż 2 mięśnie, ale nie wszystkie:** Części tułowia (Ma to miejsce, gdy wybrane są mięśnie zarówno z przodu, jak i z tyłu tułowia) Części tułowia z tyłu Części dolnych partii ciała” Części przedniej części tułowia” i „Części ramion” nigdy nie występują samodzielnie, ponieważ mają w sumie tylko 3 mięśnie, **dlatego te przypadki można przedstawić za pomocą ich nazw: np. "bicepsy i triceps" itp.** **Kombinacje wyżej wymienionych "części"** Części ramion i tułowia Części ramion i dolna część ciała Części tułowia i dolna część ciała Części ramion, tułowia i dolna część ciała. Części = grupy nie są pełne i wybrano więcej niż 2 mięśnie. Ta „zasada 2” jest najważniejsza. * * * **Przykłady wyjścia** **bicepsy, triceps i klatka piersiowa:** części ramion i tułowia **bicepsy, triceps, łydki, biceps, triceps, quady, szynki, biodra i pośladki:** ramiona i dolna część ciała **bicepsy, brzuch, łydki:** części ramion, tułów i dolna część ciała **bicepsy, triceps:** bicepsy i triceps **bicepsy, triceps, przedramiona:** ramiona **klatka piersiowa, barki, brzuch, czworobok, najszersze grzbiety, tylne barki, dolna część pleców:** Tułów i tak dalej, istnieje wiele możliwych odmian. * * * Teraz mój problem polega na tym, że nie mam pojęcia, jak napisać to tak czysto i modułowo, jak to tylko możliwe, aby w razie potrzeby można było dodawać lub usuwać reguły. Mógłbym po prostu napisać ogromny stos „jeżeli inaczej”, który uwzględniałby wszystkie przypadki, ale wiesz, dlaczego tego nie zrobię. Jak **ty** poradziłbyś sobie z takim zadaniem?


title: Najlepszy sposób na naukę języka Java, jeśli masz już tło OOP, takie jak ActionScript 3?

text: Chcę nauczyć się Java, ale nie chcę dostać książki, która powie mi, czym jest obiekt, jak działa OOP itp. Znam to z mojej istniejącej pracy w ActionScript 3. Jednym z pomysłów jest przyjrzenie się wszystkim obszarom, które obejmuje Java, wybranie jednego, który mnie interesuje i zagłębienie się w to. Czy to dobry pomysł? Jakieś inne sugestie?


title: Wymagania funkcjonalne/niefunkcjonalne VS pomysły projektowe

text: ### Dziedzina problemu * Wymagania funkcjonalne definiują **co** robi system. * Wymagania niefunkcjonalne definiują atrybuty jakościowe tego, czym zajmuje się system jako całość (wydajność, bezpieczeństwo, niezawodność, objętość, użyteczność itp.) * Ograniczenia ograniczają przestrzeń projektową, ograniczają projektantów do pewnych typów rozwiązań. ### Domena rozwiązania * Pomysły projektowe , określa **jak** to robi system. Na przykład **potrzeba interesariuszy** może oznaczać, że chcemy zwiększyć naszą sprzedaż, dlatego musimy poprawić użyteczność naszego sklepu internetowego, aby więcej klientów kupowało, można napisać wymaganie w tym celu. (domena problemowa) Design przenosi to dalej w domenę rozwiązań, mówiąc „dlatego chcemy oferować płatności kartą kredytową oprócz obecnej opcji przedpłaty”. Mój problem polega na tym, że faza przejścia od wymagań do projektu wydaje się naprawdę niejasna, dlatego pisząc **specyfikację wymagań dotyczących oprogramowania** często jestem zdezorientowany, czy uwzględniłem pomysły projektowe w moich wymaganiach, co spowodowałoby, że moje wymagania byłyby błędne. Innym problemem jest to, że często piszę wymagania funkcjonalne jako to, co robi system, a następnie określam, w jakich ramach czasowych ma to być zrobione. Ale czy to prawda? Czy jest to zatem nadal wymóg funkcjonalny, czy niefunkcjonalny? Czy lepiej rozdzielić to na dwa odrębne wymagania? Oto kilka wymagań, które napisałem: > ### FR1 Rejestracja Organizatora > > _FR1_ opisuje rejestrację Organizatora na _CrowdFundum_ > > * **FR1.1** System **powinien** wyświetlić formularz rejestracyjny na stronie > strona internetowa. > * **FR1.2** System **musi** wymagać podania imienia i nazwiska, nazwy użytkownika, numeru dokumentu > paszportu/dowodu osobistego, adresu, kodu pocztowego, miasta, adresu e-mail, numeru telefonu, > konta bankowego, kodu Captcha na formularz rejestracyjny _kiedy_ rejestruje się użytkownik. > * **FR1.4** System powinien wyświetlić subskrybentowi komunikat o błędzie zawierający: > „Rejestracja nie mogła zostać zakończona” w ciągu 1 sekundy > po niepowodzeniu sprawdzenia systemu w formularzu rejestracyjnym. > * **FR1.5** System wyśle e-mail weryfikacyjny zawierający > link weryfikacyjny do subskrybenta w ciągu 30 sekund po pomyślnym sprawdzeniu systemu > formularza rejestracyjnego. > * **FR1.6** System doda nowo zarejestrowanego Organizatora do > bazy użytkowników w ciągu 5 sekund po uzyskaniu dostępu do linku weryfikacyjnego. > > > ### FR2 Organizator zgłasza Projekt > > > > > **FR2 opisuje złożenie Projektu przez Organizatora na CrowdFundum** > > - **FR2** System wyświetli formularz zgłoszenia Projektu do Organizator > konta na stronie.< - **FR2.3** System sprawdzi > kompletność Nazwy Projektu, 1-3 Zdjęcia, Słowa kluczowe projektu, > Punch line, Minimalną i maksymalną ilość osób, Próg finansowania, Jeden lub > więcej poziomów nagród, Harmonogram organizacji, Plan budżetu, > 300-800 słów dodatkowych informacji o Projekcie, Dane kontaktowe > w ciągu 1 sekundy po przesłaniu przez Organizatora formularza zgłoszeniowego Projektu. - > **FR2.8** System doda do strony głównej w nowej kategorii Projekty > link Projekt w ciągu 30 sekund od utworzenia przez system strony Projektu > - **FR2.9** System będzie zawierał w Link projektu do strony głównej : > Nazwa projektu, 1 zdjęcie, linia wykrojnika w ciągu 30 sekund po systemie > utworzyłem stronę projektu. Pytania: **FR 1.1** : Czy zamieściłem tutaj pomysł na projekt, czy „system powinien mieć formularz rejestracyjny” byłby lepszym wymogiem funkcjonalnym? **F1.2 ,2.3** : Czy to nie jest liczba pojedyncza? Czy warunki byłyby lepiej napisane dla każdego osobnego wymagania **FR 1.4**: Czy to pomysł na projekt? Czy jest to poprawne wymaganie funkcjonalne, czy też włączyłem do niego niefunkcjonalność (wydajność)? Czy byłoby lepiej, gdybym napisał to tak: FR1 System wyświetli komunikat o błędzie, gdy sprawdzenie się nie powiedzie. **NFR:** System odpowie na nieudaną kontrolę formularza rejestracyjnego w ciągu 1 sekundy. To samo pytanie z FR 2.8 i 2.9. **FR2.3:** System powinien sprawdzić „kompletność”, czy kompletność jest tutaj używana niejednoznacznie? Czy powinienem to przeformułować? **FR1.2:** Dodałem, że system będzie wymagał „kodu Captcha”, czy jest to wymaganie funkcjonalne, czy należy do „aspektu bezpieczeństwa” wymagania niefunkcjonalnego. Z niecierpliwością czekam na Twoją odpowiedź. Dziękuję!


title: Narzędzia wdrożeniowe integrujące się z TFS?

text: Więc mam ten problem. Zespół operacyjny, w którym pracuję, przejął TFS, ponieważ używa MS Build do budowania i wdrażania kodu na serwerach produkcyjnych. W rezultacie programiści stracili DUŻO funkcji z TFS (patrz wcześniejsze pytanie). Zasadniczo zespół operacyjny przejął własność Trunk w celu zarządzania swoimi wdrożeniami. Cykl rozwojowy wygląda więc mniej więcej tak: 1. Poproś zespół operacyjny o utworzenie oddziału z Main do prac rozwojowych. 2. Wykonywanie prac rozwojowych w branży deweloperskiej. 3. Scal z Trunk do gałęzi deweloperskiej przed wydaniem (w zasadzie upewnij się, że gałąź deweloperska ma wszystkie najnowsze zmiany) 4. Poproś zespół operacyjny o połączenie z gałęzią deweloperską do gałęzi deweloperskiej (programiści nie mają do tego uprawnień) -> to żądanie spowoduje, że Operations nie tylko połączy się z Trunk, ale także wdroży w środowisku programistycznym. 5. Wykonać testy integracyjne, naprawić defekty znalezione w gałęzi deweloperskiej. 6. W razie potrzeby powtórz kroki 3–6. 7. Żądanie scalenia zespołu operacyjnego z Trunk do gałęzi QA (jest tylko JEDNA gałąź QA w toku na projekt) -> to żądanie spowoduje wdrożenie do środowiska QA (szablon MS Build służy do kompilacji kodu z QA gałęzi a następnie wdrożenie na serwery QA) 8. Testy QA, naprawa defektów znalezionych w gałęzi developerskiej. 9. W razie potrzeby powtórz kroki 3–8. 10. Żądanie połączenia zespołu operacyjnego z gałęzi QA do gałęzi PROD (jest tylko JEDNA działająca gałąź PROD na projekt) -> to żądanie spowoduje wdrożenie do środowiska PROD (Ponownie używany jest szablon MS Build do **ponownego skompilować** kod z gałęzi PROD, a następnie wdrożyć na serwerach PROD) W wyniku tego, że zespół Ops używa szablonu MS Build do wdrażania na serwerach produkcyjnych, zespół programistów utracił teraz rolę „Builders”. Nie możemy tworzyć własnych szablonów MS Build, nie możemy tworzyć ani edytować definicji kompilacji i nie możemy kolejkować kompilacji — nawet w środowisku programistycznym — ponieważ proces kompilacji działa na koncie usługi, które ma dostęp do serwerów produkcyjnych (ponieważ służy do wdrażania na serwerach produkcyjnych). Oprócz usunięcia uprawnień TFS, mam pewne problemy z tym procesem: 1. Zestawy, które zostały skompilowane i przetestowane w środowisku QA, nie są zestawami wdrażanymi w środowisku produkcyjnym. Ponieważ proces kompilacji MS jest używany do wdrażania w środowisku produkcyjnym, kod jest ponownie kompilowany i wdrażany z gałęzi produkcyjnej. Teoretycznie powstałe zespoły powinny być takie same, jednak zależy to od a) zespołu operacyjnego (niebędącego programistami) prawidłowego scalenia kodu z gałęzi QA do gałęzi PROD (potencjał błędu ludzkiego) b) środowiska kompilacji nie zmiany w taki sposób, aby wpłynąć na sposób kompilowania zestawów (ponieważ jest to głównie .Net nieprawdopodobne, ale nie niemożliwe) 2. Ponieważ istnieje tylko JEDNA gałąź QA, jeśli mam problem produkcyjny, który wymaga „naprawy” po innych praca została scalona do QA, muszę poczekać, aż Ops wycofa zmiany w gałęzi QA, scali moje zmiany i wykona kompilację, a następnie NADZIEJĘ, że operacje poprawnie wykonały operacje wycofania i scalenia w gałęzi QA, aby uzyskać moje „hot fix” do środowiska QA. 3. Wiele z moich projektów ma wiele wyników (np. aplikacja internetowa i usługa Windows). Często mogę chcieć wdrożyć tylko jeden lub drugi. Ale jeśli zaktualizuję jedną do nowej wersji, nie mam już gałęzi PROD, która reprezentuje tę, której nie uaktualniłem. 4. Zespół operacyjny już wykazał, że operacje scalania nie są wykonywane poprawnie: Po niedawnym scaleniu z programu Development do Trunk przeprowadziłem porównanie na dwóch gałęziach i były one różne. 5. Ponieważ kod jest ponownie kompilowany dla każdego środowiska, nie możemy używać automatycznego wersjonowania ani korzystać z funkcji "jakości kompilacji" TFS. Zasadniczo sprowadza się to do tego, że zespół operacyjny przywiązał się do korzystania z MS Build do wdrożeń i jako taki przyjął śmieszną strategię rozgałęziania i łączenia kontroli źródła, aby wspierać korzystanie z MS Build do zarządzania wdrożeniami. (Nie widzę żadnych korzyści z posiadania oddziału QA i PROD poza obsługą wdrożeń opartych na MS Build). To, co próbuję zrobić, to przekonać władze i zespół operacyjny, że to, co robimy, jest złą praktyką, a także dać im alternatywną strategię wdrażania. Potrzebuję do tego narzędzia do wdrażania, które integruje się z TFS (np. pokaże listę kompilacji, które mają określony poziom „jakości kompilacji” (w zależności od środowiska, w którym jest wdrażane) jako „źródło wdrożenia” i umożliwi utrzymywać listę „celów wdrożenia", tak aby w czasie wdrażania po prostu wybierali kompilację (źródło) i cel, a następnie klikali przycisk „GO!". Właściwe narzędzie do wdrażania, miejmy nadzieję, wyeliminuje ich zależność od kompilacji MS, pozwoli im usuń dostęp do serwerów QA i produkcyjnych z procesu MS Build, zastosuj bardziej rozsądne podejście do rozgałęziania i łączenia (np. zastosuj strategię najlepszych praktyk „oddział na wydanie”) i przywróć programistom uprawnienia TFS, które zostały cofnięte w celu obsługi tego absurdalnego proces.


title: Dlaczego Google opracował kompilator skrośny z Javy do JavaScriptu?

text: Google opracował kompilator skrośny z Javy do JavaScript. Dlaczego oni to zrobili? Czy to oznacza, że JavaScript nie jest wystarczający do tworzenia zaawansowanych aplikacji internetowych?


title: Mikrofinanse w branży programistycznej

text: Czytałem sporo o pozytywnych skutkach mikrofinansowania w krajach rozwijających się. Istnieją organizacje, które pozyskują kapitał z darowizn, a następnie udzielają ludziom mikropożyczek w celu założenia firmy. Pożyczki są zazwyczaj dość małe, z niewielkim odsetkiem lub zerowym odsetkiem i wynoszą znacznie poniżej dziesięciu tysięcy dolarów amerykańskich, zwykle sięgając tylko setek dolarów. Stopa zwrotu jest również doskonała. Istniejące programy wydają się skupiać na przedsięwzięciach związanych z handlem detalicznym i rolnictwem, nie widziałem jeszcze organizacji skupiającej się na sektorach technologicznych, takich jak tworzenie oprogramowania. Czy znasz jakieś uznane/wiarygodne organizacje mikrofinansowe, które udzielają mikropożyczek osobom fizycznym w celu założenia firm związanych z oprogramowaniem? Czy pożyczki zostały spłacone, podobnie jak inne sektory, takie jak rolnictwo i handel detaliczny? Patrzę globalnie, więc organizacje w każdym kraju będą mile widziane.


title: Dlaczego firmy chcą, abyś zarejestrował się w ich programie?

text: Zawsze zastanawiałem się, dlaczego niektóre firmy chcą, abyś się rejestrował podczas instalowania ich programów. Osobiście uważam to za irytujące i odmawiam, ale co firmy mogą zyskać, rejestrując swoich użytkowników? Twierdzą, że otrzymujesz „najnowsze aktualizacje” i inne rzeczy, ale często i tak dostajesz je bez konieczności rejestracji. Więc o co chodzi z tą rejestracją? Po prostu nie widzę tego punktu.


title: Jak kolejkować zlecenia pracy według daty i priorytetu?

text: W mojej organizacji pracuję nad zamówieniami na podstawie daty, więc najpierw zlecenia pracy. Istnieje również możliwość oznaczenia zamówienia jako „priorytetowe”, w którym to przypadku zamówienia te są realizowane w pierwszej kolejności, ale nie zawsze. Zadałem szefowi kilka pytań i nie udało mi się uzyskać sensownej odpowiedzi... 1. Jeśli jedno zamówienie ma datę dzisiejszą, a inne ma datę jutrzejszą, ale jest oznaczone jako priorytetowe, nad którym zamówieniem powinienem najpierw pracować? Powiedział, że kolejność oznaczona jako „priorytet”. 2. Jeśli jedno zamówienie ma dzisiejszą datę, a drugie jest datowane na 14 dni od dzisiaj i jest oznaczone jako priorytetowe, nad którym zamówieniem powinienem najpierw popracować? Powiedział ten, który ma dzisiejszą datę. Problem polega więc na prawidłowym umieszczeniu zamówienia w kolejce, ale nie jest to coś, na co mają dokładną formułę. Gdybym miał zrobić klasę, która ma tylko dwie właściwości... public class WorkOrder { public DateTime dueDate; public bool isPriority; } Jaki byłby najprostszy sposób umieszczenia ich w kolejce?


title: Czy dopuszczalne jest używanie ogólnych makr C11 w Objective-C do numerowania pól?

text: Byłem zmęczony powtarzaniem typów podczas pisania takich rzeczy: NSDictionary* d = @{@"so": [Number numberWithInt:index]), @"much": [NSNumber numberWithBool:accepted]), @"repeat": [NnumerNumerZPodwójnym:wysokość]}; Zdefiniowałem więc ogólne makro (nowa funkcja w C11): #define box(X) _Generic((X), \ char: boxChar, \ unsigned char: boxUnsignedChar, \ short: boxShort, \ unsigned short: boxUnsignedShort, \ int : boxInt, \ unsigned int: boxUnsignedInt, \ long: boxLong, \ unsigned long: boxUnsignedLong, \ long long: boxLongLong, \ unsigned long long: boxUnsignedLongLong, \ float: boxFloat, \ double: boxDouble, \ BOOL: boxBool \ )( X) ... zaimplementuj również metody pola specyficzne dla typu ... Abym mógł napisać takie rzeczy: NSDictionary* d = @{@"so": box(index), @"much": box(accepted) , @"krótszy": pudełko(wysokość)}; Czy to dobry pomysł? Czy mogę oczekiwać, że inni będą w stanie zbudować kod? Czy znienawidzą go za to, że nie jest standardowy?


title: Wprowadziłem ulepszenia do darmowego kodu, który znalazłem w Internecie i powiadomiłem autora. Czy to była właściwa rzecz?

text: Niedawno korzystałem z biblioteki dostępnej pod adresem http://www.braemoor.co.uk/software/index.shtml (biblioteka walidacji VAT nr UE pod adresem http://www.braemoor.co.uk/software/vat.shtml) w projekt w pracy. Wskazuje jako licencję (lub coś, co wygląda jak jedna): Całe oprogramowanie jest dostarczane jako freeware do użytku osobistego lub komercyjnego bez zobowiązań przez którąkolwiek ze stron. Autor nie ponosi odpowiedzialności za > jakiekolwiek problemy, które mogą wystąpić w związku z użytkowaniem tego oprogramowania, chociaż wszelkie zgłoszone > błędy zostaną naprawione tak szybko, jak to możliwe. Redystrybucja > tego oprogramowania NIE jest dozwolona bez wyraźnej zgody. Sprawdziłem kod i znalazłem (i zastosowałem) kilka sposobów na ulepszenie kodu, aby był łatwiejszy w utrzymaniu i bardziej czytelny (możesz znaleźć jeden z nich na CodeReview.SE). Po zastosowaniu tych zmian uznałem, że inni również mogą z nich skorzystać i wysłałem je jako informację zwrotną do autora na jego adres kontaktowy. Kilka godzin później autor wysłał odpowiedź, dziękując mi za moje sugestie, oraz że będzie przejrzeć moje zmiany i informować mnie na bieżąco. Moją główną obawą jest to, że chociaż strona wspomniała, że jest to oprogramowanie freeware, nie jestem pewien, jak daleko mogę posunąć się w modyfikowaniu jego oprogramowania bez znajomości licencji. Zakładam, że jest wolny od licencji, ale nie jest wyraźnie wymieniony jako open source i trochę się martwię, że mogłem przekroczyć moje granice i wziąć zbyt dużo swobody z całą sprawą. Czy postąpiłem właściwie?


title: Czy powinienem bezpośrednio zwrócić komunikat ciągu, czy raczej klucz i18n, gdy mam do czynienia z JSON api?

text: Załóżmy, że reszta interfejsu API zwraca ten json: { "status" : "fail", "data" : { "title" : "Tytuł jest wymagany" } } Ponieważ aplikacja kliencka zawsze dostosuje komunikat o błędzie, czy lepiej byłoby zwrócić jawny klucz i18n, który klient zmapowałby zamiast "Wymagany jest tytuł"? : { "status" : "fail", "data" : { "title" : "error.creation.title.required" } } Rzeczywiście, chodzi o to, aby odbiorca żądania (na przykład aplikacja internetowa) mógł łatwo przetłumaczyć komunikat dotyczący jego lokalizacji.


title: Podejście do opracowania wbudowanego edytora dla wyliczanych list

text: # Tło Poszukujemy edytora WYSIWYG dla uporządkowanych list, aby ludzie mogli bezpośrednio edytować listy instrukcji na stronie internetowej. # Problem Atrybut `contentEditable` jest żałośnie niedojrzały do edycji uporządkowanych list (np. `<ol contentEditable="true">...</ol>`). W ciągu kilku sekund po edycji odkryłem cztery błędy w Firefoksie 25.0.1; Chrom był do zaakceptowania; IE8+ prawdopodobnie będzie graniczyć z koszmarem. Istnieje wiele wbudowanych edytorów i przejrzałem prawie wszystkie z nich. Nawet najlżejsze edytory są zbyt ciężkie lub mają zbyt wiele błędów, aby wykonać tak pozornie proste zadanie. # Pytanie Jakie podejście byś podjął, aby opracować oparty na przeglądarce wbudowany edytor WYSIWYG dla wyliczanych list? Niektóre z moich pomysłów obejmowały: * Weź najbardziej rozbudowany edytor wbudowany i skróć wszystkie niepotrzebne funkcje. * Zbuduj wbudowany edytor, który spełnia moje potrzeby. Oba podejścia będą czasochłonne. Jakie inne podejścia warto rozważyć?


title: Jak przejść z obsługi oprogramowania do tworzenia oprogramowania?

text: Jestem na rozdrożu - od 4 lat pracuję jako osoba wspierająca, naprawiając niezliczone błędy, opracowując (minimalne) zmiany i ulepszenia naszego oprogramowania, współpracując z naszymi klientami i użytkownikami. Zaczynałem jako kompletny noob, bez dobrego zrozumienia .NET, C#, SQL Server itp. Musiałem pracować do późnych godzin nocnych i w weekendy, aby dogonić moich współpracowników i udowodnić sobie, że jestem w stanie to zrobić pracę i rób to dobrze. Nie uważam się za eksperta w tych dziedzinach, ale czuję się całkiem komfortowo pracując z nimi. Myślę, że mam już tego dosyć i chcę zmian - chcę odejść od wsparcia i zacząć pracować jako programista. Czy jest ktoś, kto już wcześniej szedł tą drogą? Czy mógłbyś podzielić się radą lub dwiema?


title: Czy C# daje "mniej sznura do powieszenia się" niż C++?

text: Joel Spolsky scharakteryzował C++ jako „wystarczającą ilość liny, by się powiesić”. Właściwie podsumował „Skuteczny C++” Scotta Meyersa: > Jest to książka, która w zasadzie mówi, że C++ wystarczy, żeby się powiesić, a potem kilka dodatkowych mil, a potem kilka tabletek samobójczych, które są przebrani za M&Ms... Nie mam kopii tej książki, ale są wskazówki, że duża część książki dotyczy pułapek związanych z zarządzaniem pamięcią, które wydają się być dyskusyjne w C#, ponieważ środowisko wykonawcze zarządza tymi problemami za Ciebie. Oto moje pytania: 1. Czy C# unika pułapek, których unika się w C++ tylko dzięki starannemu programowaniu? Jeśli tak, to w jakim stopniu i jak można ich uniknąć? 2. Czy istnieją nowe, różne pułapki w C#, o których powinien wiedzieć nowy programista C#? Jeśli tak, to dlaczego nie można ich uniknąć przy projektowaniu C#?


title: Narzędzie do tworzenia aplikacji PHP/MySQL Database

text: Jestem amatorskim koderem PHP i zbudowałem kilkadziesiąt projektów od podstaw (w tym dość proste systemy e-commerce z uwierzytelnianiem użytkowników, integracją PayPal itp. - wszystko kodowane ręcznie z czystej strony. Zrobiłem również porównywarkę cen, która pobiera dane z wielu witryn itp.). Ale nie jestem ekspertem od OO i innych tak zaawansowanych technik - po prostu dość dobrze znam podstawy przetwarzania danych, logiki, funkcji i staram się jak najbardziej zoptymalizować kod. Chcę to wyjaśnić, żebyście mieli pojęcie, skąd pochodzę. Mam na głowie kilka całkiem dużych nowych projektów dla klientów korporacyjnych – oba wymagają szytych na miarę aplikacji opartych na bazach danych ze złożonymi relacjami, wielu tabel i wielu różnych funkcji front-end, aby manipulować tymi danymi dla wewnętrznego personelu w tych firmach. Pomyślałem, że budowanie tych systemów od podstaw byłoby prawdopodobnie ogromną stratą czasu. Zamiast tego muszą istnieć narzędzia, które pozwolą mi konstruować bazy danych MySQL i budować strony z takimi rzeczami, jak paginacja, przyciski akcji, konstrukcja tabel itp. Jakiś rodzaj warstwy abstrakcji bazy danych lub generator systemu, jeśli wolisz. Jakie narzędzie polecasz do takiego celu dla kogoś na moim poziomie? Open source byłby świetny, ale nie mam nic przeciwko płaceniu za coś przyzwoitego. Dzięki za jakąkolwiek radę.


title: Czy istnieje zasada interfejsu „zapytaj tylko o to, czego potrzebujesz”?

text: Wyrósłem na stosowanie zasady projektowania i używania interfejsów, która mówi w zasadzie „poproś tylko o to, czego potrzebujesz”. Na przykład, jeśli mam kilka typów, które można usunąć, stworzę interfejs `Usuwalny`: interface Usuwalny { void delete(); } Następnie mogę napisać klasę generyczną: class Deleter<T extends Deletable> { void delete(T t) { t.delete(); } } W innym miejscu kodu zawsze będę prosić o jak najmniejszą odpowiedzialność za zaspokojenie potrzeb kodu klienta. Więc jeśli potrzebuję tylko usunąć `Plik`, nadal poproszę o `Deletable`, a nie `File`. Czy ta zasada jest powszechnie znana i ma już przyjętą nazwę? Czy to kontrowersyjne? Czy jest to omawiane w podręcznikach?


title: Jestem studentem CS i szczerze nie rozumiem książek Knutha

text: Natknąłem się na cytat Billa Gatesa: „Zdecydowanie powinieneś wysłać mi CV, jeśli możesz przeczytać całość”. Mówił o książkach „Sztuka programowania”. Byłem więc dość ciekawy i chciałem to wszystko przeczytać. Ale szczerze, nie rozumiem tego. Naprawdę nie jestem aż tak intelektualistą. Więc to powinien być powód, dla którego nie mogę tego zrozumieć, ale jestem chętny do nauki. Obecnie czytam tom 1 o podstawowych algorytmach. Czy są jakieś książki, które są przyjazne dla nowicjuszy/powolnych ludzi takich jak ja, które pomogłyby pogłębić moją wiedzę, abym mógł z łatwością czytać książki Knutha w przyszłości?


title: Przechowywanie słownika C# typu <datetime,enum>

text: Jak mówi tytuł, szukam sposobu na przechowywanie wielu słowników (jeden na użytkownika) typu `Dictionary<DateTime,enum>` w bazie danych (sql server 2012). Każdy słownik zawiera 366 pozycji i reprezentuje kalendarz, w którym każdy dzień ma określony "status" i najlepiej nie chcę przechowywać każdego elementu jako osobnego rekordu w DB. Pomysły? **aktualizacja** : Z sugestii @AndyBursh & @Konrad Morawski wymyśliłem też kolejną optymalizację. Zamiast domyślnie tworzyć nowy kalendarz (reprezentowany jako „Słownik”) dla każdego dodanego przez użytkownika elementu, pozwól mu wybrać predefiniowany z listy rozwijanej, a jeśli to nie zadziała, utwórz osobny kalendarz. Mając możliwość ponownego wykorzystania kalendarza i **nie** przechowywania wartości domyślnych, w dłuższej perspektywie musiałbym radzić sobie z dużo mniejszą ilością danych.


title: Czy są jakieś rzeczywiste wady tworzenia łańcuchów metod autoreferencyjnych?

text: Niedawno zasugerowałem zaimplementowanie metody tworzenia łańcuchów dla określonej klasy w pewnym projekcie, aby poprawić czytelność kodu. Otrzymałem odpowiedź "płynne interfejsy nie powinny być zaimplementowane tylko dla wygody, ale dla semantyki" i moja sugestia została odrzucona. Odpowiedziałem, że nie proponuję płynnego interfejsu, ale samo łączenie metod (obie **można pomylić** ze sobą, przeczytaj na dole) w celu poprawy czytelności i komfortu kodowania, sugestia została ponownie odrzucona. Tak czy inaczej, skłoniło mnie to do myślenia, że może mógłbym popełniać złą praktykę, zawsze zwracając „to” w metodach, które nie powinny niczego zwracać (np. ustawiacze). Moje pytanie brzmi: czy stosowanie poprzedniej konwencji można uznać za złą praktykę lub nadużycie?, dlaczego?. Myślę, że nie ma żadnych wad wydajności, czy są?.


title: Czy akredytacja ABET jest ważna dla uzyskania tytułu licencjata z inżynierii oprogramowania?

text: Czy akredytacja ABET jest ważna dla uzyskania tytułu licencjata z inżynierii oprogramowania w USA? Czy osoba z nieakredytowanym dyplomem z inżynierii oprogramowania znajduje się w niekorzystnej sytuacji przy ubieganiu się o studia podyplomowe?


title: Co to jest delegowanie i dlaczego jest ważne w programowaniu iOS?

text: W tej chwili uczę się programowania na iOS, a jedną z koncepcji, którą naprawdę trudno mi ogarnąć, jest delegowanie. Co to jest? Dlaczego i jak jest używany? Jaka jest zaleta? Techniczne pismo z książki, którą czytam, sprawia, że trudno ją zrozumieć.


title: Czy istnieje odpowiednik gnu Parallel dla Windows?

text: gnu parallel to małe narzędzie, które pozwala na równoległe wykonywanie poleceń bash. Zastanawiałem się, czy jest coś podobnego do okien.


title: Jakie problemy napotkam, jeśli wszystkie klasy, których używam, będą luźno powiązane?

text: Luźno połączone klasy dają elastyczność. Jeśli dobrze rozumiem, przepływ zdarzeń, wzorzec obserwatora i wzorce projektowe, takie jak MVC, koncentrują się na luźnym sprzężeniu. Więc w tym kontekście dążę do stworzenia projektu, w którym wszystkie klasy są luźno powiązane. Na przykład mam klasę A, która używa B: wtedy zamiast `a.b.doThis() ;` będę szedł tak : b.addEventListener( B.OnEventHappens, doThisInA ); Więc moje pytanie brzmi. Czy tego rodzaju luźno powiązana relacja w całym projekcie jest dobrą rzeczą do zrobienia? Czy byłby to solidny projekt? A może nie zaleca się używania go po stronie „ekstremalnej”?


title: Przenoszenie projektu open source do zamkniętego źródła

text: Jak legalnie można przenieść projekt pierwotnie wydany jako open source z powrotem do zamkniętego źródła? Zwłaszcza jeden na licencji GPL w dowolnej wersji.


title: Jak automatycznie sprawić, by svn Tortoise kopiował ostatni dziennik do schowka podczas zatwierdzania?

text: Po każdym zatwierdzeniu otwieram okno dialogowe Komunikaty dziennika i kopiuję wpis dziennika do schowka, abym mógł go włączyć do systemu śledzenia problemów. W końcu mam nadzieję, że SVN zostanie zintegrowany z systemem, więc nie jest to konieczne, ale na razie jest to świetny sposób na utrzymanie tych dwóch elementów. Czy istnieje sposób na automatyczne skopiowanie ostatniego wpisu dziennika do schowka lub nawet pliku tekstowego podczas zatwierdzania bez konieczności ręcznego otwierania okna dialogowego komunikatów dziennika?


title: Czy da się dobrze szybko odczytać kod?

text: Czasami mamy do czynienia z _ogromnymi_ listami kodu i jestem ciekaw, jak zaawansowani, wysoko wykwalifikowani programiści czytają kod. I powiem z naciskiem na debugowanie i znajdowanie problemów.


title: Wartość MVVM w aplikacji biznesowej (i zestawienie aktualnych praktyk programistycznych)

text: Po 2 latach nadal zmagam się z MVVM jako praktyczną metodą wytwarzania działającego oprogramowania. W niektórych przypadkach jest świetnie. Zrobiłem aplikację wielowątkową, która sterowała małą linią montażową, która byłaby koszmarem bez koncepcji MVVM. Odejście od fizycznej linii montażowej było prawie nie do pomyślenia. Jednak moja kariera kręci się głównie wokół wewnętrznych aplikacji biznesowych - formalizowania i optymalizacji działania firmy. W takich aplikacjach istnieje na ogół biznes obracający się wokół CRUD i operacji złożonych. W obiektach LOB, moje modele widoków stają się bardzo prostymi zbiorami jednowierszowych funkcji opakowujących metody klasy biznesowej, a na końcu komplikują tylko najprostsze zadania, takie jak wyświetlanie okna wiadomości lub otwieranie okna. Czy nikt inny nie uważa za dziwne, gdy ludzie wchodzą w długie opisy „wstrzykiwania zależności” i „dostawców wiadomości” dla wywołania Window.ShowDialog, które istnieje od dziesięcioleci? Ile innych pytań pojawia się na temat przepełnienia stosu, prosząc o porady dotyczące zadań, które były niezwykle proste w winformach? Nie zrozum mnie źle — otrzymuję MVVM i jak może to być nieocenione dla dużych zespołów zajmujących się horyzontalnym rozwojem opakowanego i sprzedawanego pakietu oprogramowania. Testowanie jednostkowe modeli widoku może zaoszczędzić miliony, unikając złego błędu RTM, a dedykowani programiści interfejsu użytkownika mogą zapewnić bogate wrażenia. Ale kiedy koszt ponownego wdrożenia jest minimalny, a wszystko, za co firma musi zapłacić, to proste działające oprogramowanie, po co miałbym poświęcać czas na testowanie jednostkowe prostej „opakującej” maszyny wirtualnej, skoro moja logika biznesowa jest już testowana jednostkowo? Ile czasu firma naprawdę pozwoli mi poświęcić na urocze animacje i schematy kolorów? Czy zostało jeszcze coś do zrobienia dla młodszego programisty (wyśledzenie błędu w funkcji zapisywania, kiedyś szukanie opcji „Zapisz_kliknięcie”, ale teraz musisz zrozumieć wzorce i projekt jako całość, zwłaszcza jeśli polegasz na szablonach połączyć maszynę wirtualną z widokiem). Trzeba przyznać, że bardzo podoba mi się wiązanie danych WPF. Aby z tego skorzystać, ustawiam kontekst danych na samo okno, w którym ma dostęp do klasy biznesowej oraz wszelkich innych obserwowalnych właściwości. Tak, w ten sposób łamię prawie każdą „regułę” MVVM. Ale przynajmniej mam prosty kod sterowany zdarzeniami, który jest łatwy do odczytania ORAZ mogę skorzystać z nowego powiązania danych i walidacji. Problem tkwi w projektantach — których nie używam zbyt często, ale mam nadzieję, że teraz jest lepiej zintegrowany w 2012 — projektant pokazuje setki właściwości, które ma okno i jego klasy bazowe. Dla tych, którzy mogą się odnieść, możesz wskazać mi źródła, książki, a nawet zmiany w perspektywie, które ułatwiły to przełknięcie. Dam MVVM jeszcze jeden strzał, ale ostatnim razem czułem się dość głupi, martwiąc się o wstrzykiwanie zależności tylko po to, aby wyświetlić okno komunikatu z maszyny wirtualnej, której nie miałem zamiaru testować jednostkowo. Nawet gdybym wykonał test jednostkowy, czy naprawdę uzyskujemy lepszą jakość, zamieniając testy w czasie wykonywania na błędy czasu kompilacji tych przerażających „ściśle powiązanych” aplikacji? Zdaję sobie sprawę, że jedną z odpowiedzi jest pozostanie w winformach. Ale jako jeden z ostatnich zwolenników WebForms (mam podobną krytykę trendu tworzenia stron internetowych), czułem się trochę jak dinozaur, gdy odkryłem, że nie ma już WebForms na ścieżkach certyfikacji Microsoft. Jedyna opcja to iść naprzód, nawet jeśli mi się to nie podoba.


title: Zależne od tagowania CVS dla zautomatyzowanych kompilacji

text: Moja obecna praca polega na używaniu tagów w CVS do zautomatyzowanego procesu budowania (obecnie ANT) do budowania dla odpowiednich środowisk (developerskich, QA, produkcyjnych). Z naszych badań wynika, że ani Git, ani Subversion nie obsługują tagowania w ten sam sposób. Jeśli używamy Subversion lub Git, nie obsługują tagów (w ten sam sposób - proszę mnie poprawić?). Skąd więc ANT lub Maven wiedzieliby, co wybrać w odpowiedniej konfiguracji? ## Przykład: Dla aplikacji internetowej, podczas przeglądania naszego repozytorium powiedz o pliku web.xml -- historia wyglądałaby tak: web.xml v1 ... web.xml v1.2.3 Tag: Prod web.xml v1.2.4 web .xml v1.2.5 Tag: QA web.xml v1.2.6 web.xml v1.2.7 Head Skrypty budowania ANT są uruchamiane jako zadania CRON, w różnym czasie iw różnych odstępach czasu dla różnych środowisk. Budowa środowiska opiera się na pobieraniu z repozytorium, na podstawie tagu. Rozwój jest kontynuowany i ostatecznie odpowiednie tagi są przenoszone: web.xml v1 ... web.xml v1.2.3 web.xml v1.2.4 web.xml v1.2.5 web.xml v1.2.6 Tag: Prod web.xml v1. 2.7 Tag: Kontrola jakości web.xml v1.2.8 Głowa


title: Przechowywanie i dostęp do ustawień z zapytania bazy danych

text: Próbuję znaleźć najlepszy sposób, aby to osiągnąć, więc nie krępuj się krytykować mojego procesu myślowego. Moje narzędzie ma różne ustawienia regionalne i każda lokalizacja może mieć inne ustawienia narzędzia. Na przykład Arizona może mieć włączonych 5 najlepszych statystyk, w przeciwieństwie do Kalifornii. Wyciągam wszystkie ustawienia w oparciu o ustawienia regionalne i mam tablicę danych: SimpleXMLElement Object ( [settings] => Array ( [0] => SimpleXMLElement Object ( [settingName] => Statystyki strony głównej [settingDescription] => Pokaż 5 najlepszych statystyk członków zespołu / lidera zespołu [requireValue] => 0 [localeID] => 14 [status] => 1 [wartość] => SimpleXMLElement Object ( ) [settingID] => 3 ) [1] => SimpleXMLElement Object ( [settingName] => Test [settingDescription] => Testowanie [requireValue] => 1 [localeID] => 14 [status] => 1 [value] => 66 [settingID] => 5 ) ) ) Muszę jednak móc uzyskać informacje na podstawie bieżących ustawień. Nigdy nie będą w tej samej kolejności, więc nie mogę tego zrobić według lokalizacji w tablicy. Muszę mieć dostęp do danych na podstawie nazwy ustawienia. Próbowałem kilku rzeczy z iteracją po tablicy i uzyskaniem potrzebnej wartości w tym czasie, ale wydaje się, że nie jest to świetny sposób na zrobienie tego. Czy istnieje lepszy sposób przechowywania/dostępu do tych danych? Muszę tylko móc powiedzieć: „Jeśli nazwa ustawienia „Statystyki strony głównej” ma status „1”, to podaj mi jego wartość. Czuję, że może to bardziej skomplikować niż powinno.


title: Czy kierunek Business Majors jest brany pod uwagę na stanowiska programistyczne?

text: Czy kierunki biznesowe, takie jak marketing, są odpowiednie do pracy w programowaniu. Czy pracodawcy w ogóle uważają posiadaczy dyplomów biznesowych za potencjalnych kandydatów? Powiedzmy, że gdybym miał tylko wykształcenie biznesowe, czy powinienem poświęcać czas na ubieganie się o pracę w programowaniu, czy powinienem robić coś innego? [Aktualizacja] Powinienem wyjaśnić, że mam już stopień biznesowy i ponad połowę studiów CS.


title: Algorytm do znajdowania masy zbiorczej struktur typu "Granola Bar"?

text: Jestem badaczem planetarnym i jednym z projektów, nad którymi pracuję, są symulacje _N_ ciał pierścieni Saturna. Celem tego konkretnego badania jest obserwowanie, jak cząstki zbijają się pod wpływem własnej grawitacji i pomiar łącznej masy grudek w porównaniu ze średnią prędkością wszystkich cząstek w komórce. Próbujemy dowiedzieć się, czy to może wyjaśnić niektóre obserwacje poczynione przez sondę kosmiczną _Cassini_ podczas letniego przesilenia Saturna, kiedy widziano duże struktury rzucające cienie na pierścienie prawie ustawione krawędziami. Poniżej znajduje się zrzut ekranu przedstawiający każdy krok czasowy. (Każda cząstka ma średnicę 2 m, a sama komórka symulacyjna ma około 700 m średnicy.) ![_N_-komórka ciała symulacji pierścieni Saturna z cząstkami przedstawionymi jako maleńkie zacienione kule na czarnym tle.](http:// i.stack.imgur.com/XUsR7.png) Kod, którego używam, już wyrzuca średnią prędkość w każdym kroku czasowym. To, co muszę zrobić, to znaleźć sposób na określenie masy cząstek w kępkach, a NIE zabłąkanych cząstek między nimi. Znam położenie każdej cząstki, jej masę, rozmiar itd., ale nie wiem łatwo, że, powiedzmy, cząstki 30 000-40 000 wraz ze 102 000-105000 tworzą jedną nić, która dla ludzkiego oka jest oczywista. Tak więc algorytm, który muszę napisać, musiałby być kodem z jak najmniejszą liczbą parametrów wprowadzonych przez użytkownika (dla powtarzalności i obiektywności), który przeszedłby przez wszystkie pozycje cząstek, określił, jakie cząstki należą do grup, a następnie obliczył masa. Byłoby wspaniale, gdyby można było to zrobić dla „każdej” kępki / nici, w przeciwieństwie do wszystkiego, co znajduje się w komórce, ale nie sądzę, że faktycznie _potrzebuję_ tego, aby je oddzielić. Jedyną rzeczą, o której myślałem, było wykonanie jakiegoś rodzaju obliczenia odległości _N_ 2, w którym obliczałbym odległość między każdą cząsteczką i gdyby, powiedzmy, najbliższe 100 cząstek znajdowało się w pewnej odległości, wtedy ta cząstka byłaby uważana za część grupa. Ale wydaje się to dość niechlujne i miałem nadzieję, że wy, ludzie i programiści CS, znacie bardziej eleganckie rozwiązanie? * * * **Edytowane za pomocą Mojego rozwiązania:** To, co zrobiłem, to podejście typu najbliższego sąsiada/klastera i wykonanie najpierw szybkiej i brudnej implementacji _N_ 2. Tak więc weź każdą cząstkę, oblicz odległość do wszystkich innych cząstek, a progiem dla klastra, czy nie, było to, czy w odległości _d_ jest _N_ cząstek (dwa parametry, które muszą być ustawione _a priori_, niestety, ale jak mówili niektórzy odpowiedzi/komentarze, nie ujdzie mi na sucho, jeśli nie będę mieć niektórych z nich). Następnie przyspieszyłem to, nie sortując odległości, ale po prostu wykonując rozkaz _N_ przeszukaj i zwiększ licznik dla cząstek w _d_ , co przyspieszyło działanie o współczynnik 6. Następnie dodałem „głupi drzewo programisty” (ponieważ wiem prawie nic o kodach drzew). Dzielę komórkę symulacji na określoną liczbę siatek (najlepsze wyniki, gdy rozmiar siatki ≈7 _d_ ), gdzie główna siatka jest wyrównana z komórką, jedna siatka jest przesunięta o połowę w _x_ i _y_ , a pozostałe dwie są przesunięte o 1/4 cala ± _x_ i ± _y_. Następnie kod dzieli cząstki na siatki, a każda cząstka _N_ musi mieć tylko obliczone odległości od innych cząstek w tej komórce. Teoretycznie, gdyby to było prawdziwe drzewo, powinienem otrzymać kolejność _N_ *log( _N_ ) w przeciwieństwie do _N_ 2 prędkości. Znalazłem się gdzieś pomiędzy tymi dwoma, gdzie dla podzbioru 50 000 cząstek uzyskałem 17-krotny wzrost prędkości, a dla komórki 150 000 cząstek uzyskałem 38-krotny wzrost prędkości. 12 sekund na pierwsze, 53 sekundy na drugie, 460 sekund na ogniwo z 500 000 cząstek. Są to prędkości porównywalne do tego, ile czasu zajmuje kodowi uruchomienie symulacji o 1 krok do przodu, więc w tym momencie jest to rozsądne. Och -- i jest w pełni wątkowy, więc zajmie tyle procesorów, ile mogę na to rzucić.


title: Kiedy napisać wyraźne oświadczenie zwrotne w Groovy?

text: Obecnie pracuję nad projektem Groovy/Grails (w którym jestem całkiem nowy) i zastanawiam się, czy pomijanie słowa kluczowego `return` w metodach Groovy jest dobrą praktyką. O ile wiem, musisz jawnie wstawić słowo kluczowe, tj. dla klauzul ochronnych, więc czy należy używać go również wszędzie indziej? Moim zdaniem dodatkowe słowo kluczowe `return` zwiększa czytelność. Czy jest to coś, do czego po prostu musisz się przyzwyczaić? Jakie masz doświadczenia z tym tematem? Kilka przykładów: def foo(boolean bar) { // Niespójny if (bar) { return dodatniBar() } ujemnyBar() } def foo2() { // Przykład Graali Specjalnych def entitiy = new Entity(foo: 'Foo', bar: 'Bar') entity.save flush: true // W ten sposób wygląda dziwnie encja }


title: Dlaczego znaki specjalne w adresach URL i zapytaniach są uważane za ryzykowne?

text: Z punktu widzenia bezpieczeństwa, znaki specjalne, takie jak „&” lub „<b>” są bardzo zabronione w adresach URL i zapytaniach. Mogłem znaleźć artykuły wyjaśniające sposoby na ominięcie tego ograniczenia, ale mogłem znaleźć coś, co wyjaśniło na przykładzie, w jaki sposób może to stanowić zagrożenie bezpieczeństwa. Proszę wyjaśnić ryzyko związane z tymi znakami specjalnymi. Pytanie jest prostsze i mógłbym trochę więcej googlować, aby znaleźć odpowiedź. Ale powodem, dla którego o to tutaj pytam, jest to, że pomoże komuś w przyszłości. Poza poziomem szczegółowości i specyfikacji, który tu dostajemy, nie można się tego nauczyć nigdzie indziej.


title: Jak mogę umożliwić wdrożenie mojej aplikacji na serwerach?

text: Jestem programistą aplikacji internetowych Java. Mam pomysł na projekt aplikacji internetowej, nad którym pracuję. Osobiście uważam, że aplikacja ma potencjał, aby stać się popularną stroną internetową. Obecnie pracuję nad tym jako programista z dwoma innymi osobami w projekcie. Koszty rozwoju były do tej pory prawie zerowe, ponieważ rozwijamy je we własnym zakresie przy użyciu technologii open source. Ale teraz pojawią się koszty, ponieważ będziemy musieli hostować naszą aplikację online na serwerach. W tej chwili postrzegam to jako główny wydatek, kiedy zaczynamy na żywo. Czy są jakieś sposoby, dzięki którym możemy mądrze poradzić sobie z tą przeszkodą? Chcemy zminimalizować koszty tak bardzo, jak to możliwe, a nawet lepiej, jeśli uda nam się to unieważnić, być może dzięki umowie partnerskiej z dostawcą rozwiązań hostingowych!? Twoje opinie są bardzo pożądane!! Proszę oświecić się swoimi doświadczeniami i wiedzą. Dziękuję bardzo za poświęcony czas!


title: Jaki jest najskuteczniejszy/wydajny sposób tworzenia aplikacji z wieloma osobami bez kontroli źródła?

text: ## Wprowadzenie do mojej sytuacji Pracuję dla małej firmy zajmującej się tworzeniem stron internetowych. Mamy zespół czterech programistów ASP.NET, w tym ja. Prawie wszystkie nasze projekty (> 98%) to projekty jednoosobowe, których realizacja zajmuje około 1-4 tygodni. Nie używamy kontroli źródeł ani wersji. Jedyne, co mamy, to udostępniony folder na lokalnym serwerze, który zawiera najnowsze źródło (== źródło działającej aplikacji) wszystkich projektów. W rzadkich przypadkach, gdy musimy pracować nad tym samym projektem z więcej niż jedną osobą, używamy... Beyond Compare. Raz lub dwa razy dziennie programiści pytają się nawzajem, czy mają wersję, która się kompiluje, a następnie synchronizują swój kod za pomocą Beyond Compare. Kiedy nad projektem pracują tylko dwie osoby, działa to „raczej dobrze”, ale gdy tylko trzeci programista włącza się w proces, staje się to śmieciem, którym nie da się zarządzać. Zwłaszcza, gdy wszyscy zaczynają wprowadzać zmiany w bazie danych. Ja (i jeden lub dwóch moich kolegów programistów) już kilka razy mówiliśmy mojemu szefowi, że powinniśmy zacząć używać jakiejś formy kontroli źródeł i wersji, takiej jak Git, Mercurial lub TFS (nasz szef jest bardzo zorientowany na Microsoft). Niestety mój szef nie widzi korzyści z przejścia na system kontroli źródeł i wersji, ponieważ w jego oczach wszystko działa teraz dobrze i nie chce inwestować czasu i pieniędzy w konfigurowanie nowego systemu i upewnianie się, że wszyscy wie, jak z niego korzystać. Nawet po tym, jak wyjaśniłem mu zalety (takie jak uproszczona współpraca, różne wersje aplikacji, bezpieczniejszy sposób zmiany kodu, ...), nadal nie sądzi, że jest to coś, czego potrzebujemy. Z czterech programistów tylko dwóch (w tym ja) ma doświadczenie z kontrolą źródeł (Git). A to doświadczenie jest bardzo ograniczone. Wiem, jak sklonować repozytorium Github na swój komputer, wprowadzić pewne zmiany, zatwierdzić je i przesłać z powrotem do Github. Otóż to. ## Wyjaśnienie mojego problemu/obaw Za kilka tygodni zaczniemy pracę nad dość dużym projektem dla naszych standardów. Jego ukończenie zajmie prawdopodobnie 2-3 deweloperom kilka miesięcy. Będę kierował projektem (kierownik projektu i główny developer) i będę odpowiedzialny za wszystko. Miałem wiele problemów z naszym podejściem Beyond Compare i nie chcę iść tą drogą z tym dużym projektem, za który będę odpowiedzialny. Ponieważ wątpię, czy będziemy w stanie * skonfigurować nasz własny serwer Git, * nauczyć wszystkich pracy z Git i * skutecznie wykorzystać Git w tym dużym projekcie, jestem zainteresowany, jeśli ktoś z was zna dobre sposoby na umożliwienie wielu osobom współpracować nad tym samym projektem bez korzystania z kontroli źródła lub wersji. ## Aktualizacja Chciałbym wszystkim podziękować za odpowiedzi i komentarze. Oto plan: 1. Spotkaj się z programistami, aby upewnić się, że wszyscy technicy mają takie samo podejście do wdrażania kontroli źródła. Zrobimy mocniejszy punkt, gdy wszyscy za tym stoją. 2. Przedstaw pomysł szefowi i powiedz mu, że naprawdę _potrzebujemy_ kontroli źródeł. 3. Wdróż go tak szybko, jak to możliwe.


title: Właściwe korzystanie z zajęć

text: Piszę klasę, która rysuje bardzo złożony obraz z wieloma częściami. Planuję również dodać do klasy, aby dodać więcej funkcjonalności. Czy byłoby słuszne utworzenie funkcji dla każdej części, nawet jeśli ta funkcja będzie KIEDYKOLWIEK wywoływana w funkcji render? Widzę zalety, ponieważ łatwiej będzie czytać kod i łatwiej dodawać części. Minusem byłoby jednak to, że zwiększyłoby to złożoność i prawdopodobnie utrudniłoby utrzymanie. Czy powinienem zachować cały kod w funkcji render, czy rozdzielić poszczególne kroki?


title: Jak „Czwarty wymiar” działa z tablicami?

text: **_Streszczenie:_** Tak więc, jak rozumiem (chociaż mam bardzo ograniczone zrozumienie), istnieją trzy wymiary, z którymi (zazwyczaj) pracujemy fizycznie: Pierwszy byłby reprezentowany przez linię. Druga byłaby reprezentowana przez kwadrat. Trzeci będzie reprezentowany przez sześcian. Wystarczająco proste, dopóki nie dojdziemy do czwartego -- Ciężko jest rysować w przestrzeni 3D, jeśli wiesz, co mam na myśli... Niektórzy mówią, że ma to coś wspólnego z czasem. **_Pytanie:_** Teraz, chociaż to nie ma większego sensu, to wszystko jest dla mnie świetne. Moje pytanie nie dotyczy tego, albo zadałbym je na MathSO lub PhysicsSO. Moje pytanie brzmi: **Jak komputer radzi sobie z tym za pomocą tablic?** Wiem, że można tworzyć tablice 4D, 5D, 6D, itd... w wielu różnych językach programowania, ale chcę wiedzieć, jak to działa.


title: Jaki jest najlepszy sposób zarządzania rejestrowaniem błędów w przypadku wyjątków?

text: **Wprowadzenie** Jeśli w witrynie lub systemie wystąpi błąd, warto go oczywiście zarejestrować i pokazać użytkownikowi uprzejmą wiadomość z kodem referencyjnym błędu. A jeśli masz wiele systemów, nie chcesz, aby te informacje były rozrzucone - dobrze jest mieć dla nich jedno, scentralizowane miejsce. Na najprostszym poziomie wszystko, co jest potrzebne, to rosnący identyfikator i serializowany zrzut szczegółów błędu. (I prawdopodobnie „scentralizowane miejsce” to skrzynka odbiorcza e-mail.) Na drugim końcu spektrum znajduje się być może w pełni znormalizowana baza danych, która pozwala również nacisnąć przycisk i zobaczyć wykres błędów na dzień lub określić, co jest najczęstsze typem błędu w systemie X jest to, czy serwer A ma więcej błędów połączenia z bazą danych niż serwer B i tak dalej. Mam tu na myśli rejestrowanie błędów/wyjątków na poziomie kodu przez zdalny system – _nie_ „ludzkie” śledzenie problemów, na przykład w Jira, Trac itp. **Pytania** Szukam opinii od programistów, którzy korzystali z tego typu systemu, w szczególności w odniesieniu do: * Jakie są podstawowe funkcje, bez których nie możesz się obejść? * Co warto mieć w funkcjach, które naprawdę oszczędzają czas? * Jakie funkcje mogą wydawać się dobrym pomysłem, ale w rzeczywistości nie są aż tak przydatne? Na przykład powiedziałbym, że funkcja „pokaż duplikaty”, która identyfikuje wielokrotne wystąpienie błędu (bez martwienia się o „nieistotne” szczegóły, które mogą się różnić) jest dość istotna. Przycisk „utwórz problem w [Jira/etc] dla tego błędu” brzmi jak dobra oszczędność czasu. Powtórzę, to, czego szukam, to praktyczne doświadczenia ludzi, którzy korzystali z takich systemów, najlepiej wsparte pytaniem _dlaczego_ funkcja jest niesamowita/straszna. (Jeśli i tak zamierzasz teoretyzować, przynajmniej oznacz swoją odpowiedź jako taką.)


title: Szukam porady dotyczącej projektowania schematów Mongoose

text: Mam problem z podjęciem decyzji o prawidłowym rozmieszczeniu niektórych moich schematów w Mongoose. Mam obecnie schemat użytkownika jako: { name: { type: String, default: "" }, phoneNumber: {type: String, required: true, unique: true}, kontakty: { type: [ObjectID], ref: ' User', index: true }, ... } Ale jestem ciekaw, czy usuwanie kontaktów ze schematu użytkownika i posiadanie innej kolekcji (Contacts) jak poniżej nie jest lepszym pomysłem: { user: { type: ObjectID, ref: 'Użytkownik', index: true }, contact: { type: ObjectID, ref: 'User', index: true } } Gdzie każdy wpis tworzyłby klucz złożony. Przychodzą mi na myśl dwa pytania, kiedy musiałbym przeszukać dane. 1. Kim są kontakty użytkownika `x`? 2. Którzy użytkownicy mają użytkownika `x` jako kontakt? (Mój powód dla tego posta) Przetestowałem moją obecną konfigurację, opcję 1, z około 1 milionem użytkowników z 100 kontaktami każdy, a indeks utworzony w polu kontaktów ma około 3 GB z szybkimi wynikami wyszukiwania dla pytania 2 (<80ms). Nie jestem jednak pewien, czy jest to właściwe podejście, czy też wielkość indeksu jest akceptowalna. Chcę skłonić się do drugiej opcji i znormalizować dane, ale czy mam rację w tym przypadku?


title: W odniesieniu do oprogramowania, co stanowi plan kontroli jakości pod kątem zgodności z normą ISO 9001?

text: Licytuję kontrakt rządowy (mój pierwszy) i jest sekcja z prośbą o przedstawienie ogólnego zarysu planu kontroli jakości, który zapewniłby, że produkt końcowy jest zgodny z ISO-9001. Nie wiem zbyt wiele na temat ISO 9001, więc z pewnością odrabiam swoją pracę domową i badam to, ale pomyślałem, że zadam to pytanie tutaj, na wypadek, gdyby był ktoś bardzo kompetentny w tej dziedzinie, który mógłby dostarczyć 5-10 szeroki punktor punkty, na których powinienem się skupić.


title: Alternatywy dla Drupala w PHP

text: Na podstawie odpowiedzi na to pytanie: Czy wybiorę złe nawyki kodowania z książek PHP? i wielu innych panuje ogólna zgoda, że PHP nie jest już najbardziej odpowiednim językiem do tworzenia stron internetowych (jeśli nie masz pełnej wiedzy na temat języka). Używam Drupala i piszę niestandardowe moduły w PHP, czy ten punkt widzenia, że PHP jest źle dopasowanym językiem kodowania stron internetowych, dotyczy również stron PHP opartych na Drupalu? Generalnie tworzę witryny społecznościowe i witryny wewnątrzfirmowe, czy są lepsze sposoby ich tworzenia niż za pomocą frameworków PHP i drupal?


title: Jak podpisanie CLA zapobiega problemom prawnym w projektach open source?

text: Na przykład: yeoman. Jest licencjonowany na licencji BSD. Formularz CLA (umowa licencyjna współautora) nie jest specyficzny dla projektu i można go podpisać elektronicznie. * Jak i jakim problemom może zapobiec podpisanie tej umowy? * Czy ma znaczenie, jak duży lub niewielki wkład wniosłem? * Dlaczego niektóre projekty wymagają podpisanego CLA, aby zaakceptować poprawki, a inne nie? (np. node.js vs rails)


title: Osiągnięcie decouplingu w klasach modelu

text: Próbuję przetestować (lub przynajmniej napisać testy jednostkowe) moje klasy Model, ale zauważyłem, że moje klasy są zbyt połączone. Ponieważ nie mogę zerwać tego sprzężenia, pisanie testów jednostkowych staje się coraz trudniejsze. Mówiąc dokładniej: **Klasy modeli:** Są to klasy, które przechowują dane w mojej aplikacji. Przypominają one bardzo POJO (zwykłe stare obiekty Javy), ale mają też pewne metody. Aplikacja nie jest zbyt duża, więc mam około 15 klas modeli. **Coupling** : Aby podać przykład, pomyśl o prostym przypadku Nagłówek zamówienia -> Pozycja zamówienia. Nagłówek zna element, a element zna nagłówek (potrzebuje pewnych informacji z nagłówka do wykonania pewnych operacji). Następnie załóżmy, że istnieje związek między Pozycją zamówienia -> Raportem pozycji. Raport dotyczący przedmiotu również potrzebuje przedmiotu. W tym momencie wyobraź sobie pisanie testów dla Raportu o Pozycji; do przeprowadzenia testów potrzebny jest nagłówek zamówienia. To jest prosty przypadek z 3 klasami; sprawy stają się bardziej skomplikowane przy większej liczbie klas. Potrafię wymyślić oddzielone klasy, kiedy projektuję algorytmy, warstwy trwałości, interakcje interfejsu użytkownika itp., ale w przypadku klas modeli nie mogę wymyślić sposobu ich rozdzielenia. Obecnie siedzą jako jedna duża część klas, które są od siebie zależne. Oto kilka obejść, które mogę wymyślić: 1. **Generatory danych** : Mam pakiet, który generuje przykładowe dane dla moich klas modeli. Na przykład klasa OrderHeaderGenerator tworzy OrderHeaders z pewnymi podstawowymi danymi. Używam OrderHeaderGenerator z moich testów jednostkowych ItemReport, aby uzyskać instancję do klasy OrderHeader. Problem polega na tym, że te generatory dość szybko się komplikują, a następnie muszę je przetestować; trochę pokonując cel. 2. **Interfejsy zamiast zależności** : Potrafię wymyślić interfejsy, aby pozbyć się twardych zależności. Na przykład klasa OrderItem będzie zależeć od interfejsu IOrderHeader. Tak więc w moich testach jednostkowych mogę łatwo zakpić zachowanie OrderHeader za pomocą klasy FakeOrderHeader, która implementuje interfejs IOrderHeader. Problem z tym podejściem polega na złożoności, jaką miałyby klasy Model. Czy mielibyście inne pomysły, jak przełamać to sprzężenie w klasach modeli? Albo jak ułatwić testowanie jednostkowe klas modeli? * * * **Aktualizuj po przejrzeniu odpowiedzi:** * Myślałem trochę więcej o tym problemie i zauważyłem, że niektóre z tych zależności nie były naprawdę potrzebne (jak wskazała większość odpowiedzi). Powodem, dla którego istniały, jest to, że moja warstwa interfejsu użytkownika tego potrzebowała. Zasadniczo wstawiłem te zależności, aby warstwa interfejsu użytkownika mogła łatwo nawigować od dziecka do nagłówka i wyświetlać niektóre pola nagłówka w widokach na poziomie dziecka. Patrząc na to teraz, wygląda to tak prosto; jednak zajęło mi trochę czasu, aby dowiedzieć się, dlaczego te zależności istniały w pierwszej kolejności. Teraz interfejs użytkownika w zasadzie zachowa nagłówek w swoim kontekście podczas przechodzenia do widoków poziomu podrzędnego. * Z drugiej strony usunąłem część zależności poprzez interfejsy. Te zależności były w większości jeden do jednego; na przykład między Header i HeaderReport. Wcześniej HeaderReport polegał na Header do pobierania informacji (elementy, data, itp.), co bardzo utrudniało testowanie HeaderReport. Teraz HeaderReport zależy od interfejsu HeaderDataProvider i jestem w stanie osiągnąć całkowitą izolację. HeaderReport jest bardzo łatwy do przetestowania za pomocą klas pośredniczących dla interfejsu HeaderDataProvider. * Wygląda na to, że tworzenie tych abstrakcji jest łatwe (Warstwa UI - Warstwa modelu - Warstwa zaplecza), jednak w rzeczywistości wymaga to naprawdę dużo praktyki!


title: Co oznacza strzałka na diagramie klas?

text: Potrzebuję pomocy, próbując zrozumieć znaczenie strzałki w diagramie klas UML, a dokładniej w tym diagramie złożonym. Jaka jest różnica między prostą linią (od klasy do drugiej) a strzałką (nie strzałką dziedziczenia, odnoszę się do czarnej)? ![Diagram klas UML](http://i.stack.imgur.com/nip2w.jpg)


title: Jak ustrukturyzować zestaw adresów URL zgodnych z REST

text: Rodzaj REST lekki tutaj... Zastanawiam się, który schemat URL jest bardziej odpowiedni dla aplikacji z danymi giełdowymi (przy okazji, wszystkie zapytania będą GET, ponieważ klient nie modyfikuje danych): Przykłady schematu 1: /stocks/ABC/news /indexes/XYZ/news /stocks/ABC/time_series/daily /stocks/ABC/time_series/weekly /groups/ABC/time_series/daily /groups/ABC/time_series/weekly Schemat 2 przyklady: /news/stock/ABC /news /index/XYZ /time_series/stock/ABC/daily /time_series/stock/ABC/weekly /time_series/index/XYZ/daily /time_series/index/XYZ/weekly Schemat 3: /news/stock/ABC /news/index /XYZ /time_series/daily/stock/ABC /time_series/weekly/stock/ABC /time_series/daily/index/XYZ /time_series/weekly/index/XYZ Schemat 4: Coś jeszcze??? Chodzi o to, że dla wszelkich żądanych danych adres URL musi zawierać informację, czy pozycja jest akcjami, czy indeksami. A po całej rozmowie o **zasobach** na temat REST nie wiem, czy moim głównym **zasobem** są **akcje i indeks**, czy **seria_czasowa i wiadomości**. Przepraszam, jeśli to głupie pytanie :/ Dzięki!


title: Jak przetestować wygenerowany plik bez zakodowania logiki generowania nazw?

text: Mam jednostkę, którą testuję, która generuje nazwę pliku i coś tam zapisuje. Będę musiał wyciągnąć plik z tej lokalizacji, aby przetestować, czy został prawidłowo zapisany. Wiem, jak generowana jest nazwa pliku, jednak zakodowanie logiki generowania nazw plików podczas moich testów wydaje mi się „magiczną liczbą”. Czy istnieje lepsze podejście? Pomyślałem o przeciągnięciu logiki, która generuje nazwę ścieżki, do własnej metody pomocniczej w testowanej jednostce i przetestowaniu tej metody raz, a następnie użyciu tej metody, gdy potrzebuję nazwy ścieżki. Potem tylko "hardcode" logikę generowania ścieżki w jednym teście, gdzie wydaje się to rozsądne. Jednakże, gdybym wyciągnął tę metodę, zwykle byłaby to metoda prywatna, co powoduje całe pytanie, jak ją przetestować, raczej uczciwie jest upublicznić ją tylko do testowania i czy jest to zapach kodu, który ma być testowanie funkcji pomocniczych w ogóle. Jaki jest najbardziej elegancki sposób testowania czegoś takiego? po prostu zakoduj to?


title: Dlaczego GCC przeszło z Bison na rekurencyjny parser zstępujący dla C++ i C?

text: Czy nastąpiła zmiana języka, która tego wymagała, czy jakiś praktyczny powód, dla którego Bison nie był już odpowiedni lub optymalny? Widziałem na wikipedii, że się zmienili, odnosząc się do informacji o wydaniu GCC 3.4 i GCC 4.1. Te informacje o wydaniu mówią: > Odręcznie napisany rekurencyjny parser C++ zastąpił wywodzący się z YACC > C++ parser z poprzednich wydań GCC. Nowy parser zawiera znacznie ulepszoną > infrastrukturę potrzebną do lepszego parsowania kodów źródłowych C++, obsługi > rozszerzeń i czystego rozdziału (tam, gdzie to możliwe) między właściwą semantyką > analizą i parsowaniem. Nowy parser naprawia wiele błędów, które zostały znalezione w > starym parserze. Oraz: > Stary parser C i Objective-C oparty na Bisonach został zastąpiony przez nowy, > szybszy pisany ręcznie parser rekurencyjny rozwiązać za pomocą Bison


title: Czy istnieje język programowania bez drzewa, ale z ideą tagów za OOP?

text: Myślę o strukturach drzewnych i czuję, że ich nie lubię. To tak, jak masz sklep, to starasz się umieścić wszystkie produkty w katalogu przypominającym drzewo, a potem musisz umieścić jeden produkt w wielu kategoriach, teraz masz wiele trasowania, bla-bla. Nie wydaje mi się, żeby wszystko na świecie można było umieścić na drzewie. Zamiast tego lubię pomysł tagów. Chciałbym przechowywać wszystko z metkami. Dzięki tagom mógłbym zrobić znacznie więcej. Mogę nawet symulować drzewa, jeśli chcę. Chcę mieć system plików oparty na tagach! Ale hej - nowoczesny paradygmat OOP z dziedziczeniem oparty jest na drzewie. Chcę zobaczyć, jak to jest, gdy nie masz takiej piwnicy. Najbliższą rzeczą, jaką znalazłem, są domieszki w niektórych językach. Czy wiesz, co jeszcze dotyczy tych pomysłów?


title: Czy z technicznego punktu widzenia JavaScript można by kompilować zamiast interpretować?

text: Tytuł pytania mówi sam za siebie. Mam na myśli konkretnie serwer Node.js. Dodatkowo to pytanie zakłada, że nie potrzebujesz `eval()`. A jeśli nie jest to możliwe, dlaczego nie?


title: Czy znasz jakieś zasoby do nauki projektowania dla programisty?

text: Tymczasem czekam na Design for Hackers, czy znasz jakieś dobre zasoby projektowe, jako że wielu uwielbiam projekty 37signals i chciałbym zacząć tworzyć moje strony internetowe w ten sposób.


title: Jak mogę wydrukować wiele raportów jaspisowych na jednej stronie pliku PDF?

text: Mogę wydrukować wiele raportów w jednym pliku PDF. using : JasperReport jreport1 = JasperCompileManager.compileReport("D:\\FTP\\JRXML\\PatientConsultantReport\\"+checkedReport+".jrxml"); JasperPrint jprint1 = JasperFillManager.fillReport(jreport1, new HashMap(), new JRResultSetDataSource(rs)); jprintlist.add(jprint1); . Wkrótce               . . jprintlist.add(jprint5); Eksporter JRExporter = nowy JRPdfExporter(); exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT_LIST, jprintlist); OutputStream output = new FileOutputStream(new File("D:\\FTP\\PDF\\VisitsSummaryReport.pdf")); exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, dane wyjściowe); eksporter.eksportRaport(); Więc pytanie brzmi: (tutaj dla każdego raportu doda nową stronę w moim pdfie.) Jak mogę wydrukować wszystkie dane tego raportu na jednej stronie PDF .


title: Jak uniknąć powielania funkcji narzędziowych w modułach?

text: Widziałem to pytanie, ale to mi nie pomaga, ponieważ piszę kod funkcjonalny (Standard ML), a odpowiedzi są mocno skoncentrowane na OOP (zaleca się, aby OP używał wzorca Facade, używał dziedziczenia itp. - - odpowiedzi, które nie są istotne dla programisty SML). W dwóch oddzielnych, w dużej mierze niepowiązanych ze sobą modułach, `Foo` i `Bar`, muszę wykonać to samo zadanie: dane funkcje `equal` i `equals` z sygnaturami: val equal: t * t -> bool val equals: t list * t list -> bool tworzy dwie nowe funkcje z następującymi sygnaturami: val equals': t * t -> t opcja val equals': t lista * t list -> t lista opcja Tutaj `t` oznacza albo ` Stopa lub Bar. Naturalnym rozwiązaniem jest użycie funkcji wyższego rzędu: local fun boolToOpt (porównanie: ('a * 'a) -> bool) (left, right) = jeśli porównanie (left, right) to NIEKTÓRE left else BRAK w val równe' = boolToOpt równa się val równa się' = boolToOpt równa się koniec Muszę powtórzyć dokładnie ten fragment kodu w obu modułach. Jest to drobny, drobny szczegół implementacji i złym pomysłem byłoby publiczne udostępnienie go z poziomu `Foo` lub `Bar`. Jednocześnie wydaje się, że jest zbyt mały – i zbyt ściśle powiązany z dwiema funkcjami „równości” – aby można go było uwzględnić w oddzielnym module. Być może w innym języku, funkcjonalność `equals`` zasługuje na własną klasę, powiedzmy `ComparisonDecorator`, która zastępuje `equal(s)`, aby dać mi funkcje ze zwracanym typem `t option`, ale to nie jest tutaj opcja . Wpadam w takie sytuacje przynajmniej raz dziennie. Czy istnieje rozsądny sposób na uniknięcie po prostu kopiowania i wklejania tutaj?


title: Dlaczego oprogramowanie nie jest tak niezawodne jak samochód?

text: Użytkownik zadał mi to pytanie. Wiemy, że samochody się psują, ale **to z powodu czegoś fizycznego** (chyba że w grę wchodzi oprogramowanie!). Próbowałem odpowiedzieć, że oprogramowanie jest znacznie młodszą branżą, ale użytkownik odpowiedział: „czy przemysł samochodowy nie stał się znacznie bardziej stabilny i niezawodny przy mniejszej liczbie ludzi?”. Próbowałem też odpowiedzieć, że oprogramowanie jest bardziej złożone, ale użytkownik odpowiedział, że na samochód składa się wiele tysięcy części. Ludzie, którzy projektują i budują samochody, generalnie po prostu bardzo dobrze znają swoje komponenty, ale w efekcie końcowym wszyscy współpracują ze sobą. Więc **dlaczego oprogramowanie nie jest tak niezawodne jak samochód?**


title: Różnica szybkości przesyłania plików między środowiskiem Eclipse a wdrażaniem do folderu webapps tomcat

text: Witam Użyłem `File Upload` w `struts2` z `commons-fileuplod` . Edycja : Kiedy uruchamiam moje demo z `eclipse prawym przyciskiem myszy i uruchamiam na serwerze`, więc czas potrzebny do załadowania Plik jest bardzo mały **Uruchom z ECLIPSE :** Rozmiar pliku: 247 MB Czas potrzebny na przesłanie przy użyciu serwera Uruchom z eclipse :--> 2989 MS Z drugiej strony, kiedy `wdrażam ten sam plik demo war do Tomcata w folderze webapps` i uruchamiam . Więc przesłanie pliku zajmuje więcej czasu w porównaniu do poprzedniego przypadku. (Skąd ta duża różnica czasu ?) **Uruchom używając Deploy Demo w Tomcat :** Rozmiar pliku : 247 MB Czas zabrany przez upload Przez wdrożony plik wojenny do folderu aplikacji webowych tomcat :--> 14162 MS Zmieniłem `java.io .tmpdir` w `MonitoredMultiPartRequest.java`: System.setProperty("java.io.tmpdir", "D:\\ankit"); System.out.println("java.io.tmpdir :-->" + System.getProperty("java.io.tmpdir")); Listener UploadListener = nowy UploadListener(servletRequest); // Utwórz fabrykę dla elementów plików na dysku FileItemFactory factory = new MonitoredDiskFileItemFactory(listener); // Utwórz nowy program obsługi przesyłania plików ServletFileUpload upload = new ServletFileUpload(factory); try{ długi start = System.currentTimeMillis(); Elementy listy = upload.parseRequest(servletRequest); długi koniec = System.currentTimeMillis(); System.out.println("Czas zabrany przez przesłanie 3.2.1 :--> " + (koniec - początek)); getsystemDetail(); } catch (Wyjątek e){ error.add(e.getMessage()); } Tutaj wspominam My Log: **Run From ECLIPSE :** ==== System Property ========= java.io.tmpdir :--> D:\ankit ======= ========================== Czas poświęcony przez przesłanie pliku :--> 2989 =============== =================== ##### Statystyki wykorzystania sterty [MB] ##### Wykorzystana pamięć:46 Wolna pamięć:85 Całkowita pamięć:132 Maksymalna pamięć: 675 Katalog główny systemu plików: C:\ Całkowita przestrzeń (mb): 79899 Wolne miejsce (mb): 31833 Wolne miejsce (mb): 31833 Katalog główny systemu plików: D:\ Całkowita przestrzeń (mb): 158472 Wolne miejsce (mb): 117366 Miejsce do wykorzystania (mb): 117366 To jest ścieżka RealPath ServletContext ::--> D:\eclipseWorkSpace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\FILEUPLOAD_DEMO_OldLIB\ Plik przesłany Succ. TO ::-> D:\ankit\eclipse.zip **Uruchom przy użyciu Deploy Demo w Tomcat :** ==== Właściwość systemu ========= java.io.tmpdir :--> D: \ankit ================================ Czas zabrany przez przesłanie pliku :--> 14162 ====== ============================ ##### Statystyki wykorzystania sterty [MB] ##### Wykorzystana pamięć:100 Wolnej pamięci :31 Całkowita pamięć:132 Maksymalna pamięć:1820 Katalog główny systemu plików: C:\ Całkowita przestrzeń (mb): 79899 Wolne miejsce (mb): 31830 Wolne miejsce (mb): 31830 Katalog główny systemu plików: D:\ Całkowita przestrzeń (mb) : 158472 Wolne miejsce (mb): 117358 Miejsce do wykorzystania (mb): 117358 To jest ścieżka RealPath ServletContext ::--> D:\tools\tomcat7-6\webapps\FILEUPLOAD_DEMO_OldLIB\ Plik przesłany Succ. DO ::-> D:\kit\eclipse.zip


title: Liczba zmiennoprzecinkowa na binarną

text: Którego algorytmu używa java do konwersji liczby zmiennoprzecinkowej (np.:0.15625) na binarną(0.00101). Czy java używa znormalizowanego czy zdenormalizowanego formatu? Jeśli wpiszę "float ab=0.15625" w pliku źródłowym java, który program przekonwertuje tę liczbę zmiennoprzecinkową na format, który może być przechowywany w pamięci?


title: Najlepsza praktyka buforowania XNA

text: Obecnie konwertuję grę 2D na 3D, nigdy wcześniej nie pracowałem z 3D, zanim próbuję się uczyć na bieżąco. Zastanawiam się, jaki jest najlepszy sposób korzystania z buforów wierzchołków/indeksów. Obecnie zapętlam siatkę i tworzę zestaw buforów dla każdego typu kafelków, które są następnie wykorzystywane w metodzie rysowania. Przypuszczam, że nie powinienem używać wielu zestawów buforów wierzchołków, ale nie znam innego sposobu, aby to zrobić, ponieważ każdy kafelek ma inną teksturę. Pętla siatki for (int i = Convert.ToInt32(xPos / 2) - 30; i < Convert.ToInt32(xPos / 2) + 30; i++) { for (int a = Convert.ToInt32(yPos / 2); a < Convert.ToInt32(yPos / 2) + 50; a++) { if (mapXtile > 0 && mapYtile > 0 && mapXtile < Globals.mapsizex && mapYtile < Globals.mapsizey) { int currentTile = Globals.levelArray[poziom, mapXtile, mapYtile] .TyleType; if (currentTile == tyleType.grass) { createCubeVertices(i * 2, a * 2, 1, 0f, count, grassVertices); SetUpBufferIndices(count, grassIndices); liczyć++; } if (currentTile == tyleType.water) { createCubeVertices(i * 2, a * 2, 1, 0f, count, waterVertices); SetUpBufferIndices(count, waterIndices); liczba wody++; } } mapYtile = mapYtile + 1; //mapaYkafel++; } mapXtile = mapXtile + 1; mapYtile = Convert.ToInt32(yPos / 2); } CopyToBuffers(grassVertices, grassIndices); CopyToWaterBuffers(waterVertices, waterIndices); Narysuj kod foreach (EffectPass pass w grassEffect.CurrentTechnique.Passes) { pass.Apply(); device.Indices = myIndexBuffer; urządzenie.SetVertexBuffer(myVertexBuffer); device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, grassVertices.Length, 0, grassIndices.Length/3); } foreach (EffectPass pass in mouseEffect.CurrentTechnique.Passes) { pass.Apply(); device.Indices = myWaterIndexBuffer; device.SetVertexBuffer(myWaterVertexBuffer); device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 10000, 0, 10000); } Każda rada jest bardzo mile widziana.


title: Prosta aplikacja Unicode?

text: Chcę tworzyć proste aplikacje do nauki języków, aby pomóc znajomym w nauce języków. Prosta aplikacja konsoli Java załatwiłaby sprawę, ale konsola Windows wydaje się nie obsługiwać Unicode (a potrzebuję mojego oprogramowania do pracy ze wszystkimi rodzajami specjalnych liter na raz). Googlując, dochodzę do wniosku, że mogą istnieć sposoby na to, aby Unicode działał w konsoli Windows, ale wydaje się to nieco zbyt skomplikowane, a ponadto wymaga trochę wysiłku od każdego, kto uruchamia ten program. Chcę pisać programy, które każdy bez doświadczenia komputerowego może łatwo uruchomić. Zamiast tego chciałem spróbować zrobić to w Pythonie, ponieważ konsola IDLE przynajmniej wydawała się działać z Unicode. Ale ma swój własny zestaw problemów (nie mogę wprowadzić pewnych liter, takich jak é, bez wpisania ich w innym miejscu i wklejenia) Teraz rozważam zbudowanie tego jako aplikacji internetowej lub aplikacji Swing, aby faktycznie móc spraw, aby mój program działał z Unicode. Ale czuję, że może coś przeoczam. Czy nie ma łatwego sposobu na stworzenie aplikacji konsoli Unicode, która działałaby w systemie Windows?


title: Jak programista może nadążyć za światem sprzętu?

text: Myślę, że mogę bezpiecznie założyć, że wielu, jeśli nie większość, programistów jest dość entuzjastycznie nastawionych do komputerów, a nawet elektroniki w ogóle. Teraz zdaję sobie sprawę, że programista powinien przede wszystkim nadążać za światem **programowania**, co samo w sobie jest trudnym zadaniem: z nowymi językami i metodologiami pojawiającymi się co roku w boju, nigdy nie ma brak ciekawych rzeczy do poznania i wypróbowania. Jednak świat sprzętu rozwija się bardzo szybko i jest również bardzo interesujący, argumentuję. Przypominam sobie dni, kiedy studiowałem najnowsze chipsety, procesory, porównywałem popularnych (i nie tak popularnych) producentów i czytałem specyfikacje moich ulubionych kart graficznych. Jednak od tego czasu przestałem nadążać za sprzętem, który jest rozwijany, a zamiast tego skoncentrowałem swoje studia i uwagę na, cóż, programowaniu. Nadal zamierzam koncentrować się na programowaniu. Ale moje pytanie brzmi, czy istnieją wydajne/skuteczne metody lub zasoby do nauki, które choćby w minimalnym stopniu ułatwiłyby programiście nadążanie za najnowszym sprzętem?


title: Wzorzec Factory Design w językach z typami klas

text: Czytałem w prezentacji Wzorce projektowe Petera Norviga. Od slajdu 13: > Wersja dynamiczna wymaga tylko klas Window. > > Same klasy służą jako fabryki > > Działa to ponieważ klasy są wartościami pierwszej klasy Możemy powiedzieć `make(c)` Czy to znaczy że Java i C# nie potrzebują wzorca projektowania fabryki ponieważ mogą przekazywać typ klasy jako zmienna.


title: Czy powinienem używać akronimów, gdy zamieszczam w swoim CV żargon techniczny?

text: Zastanawiam się, czy powinienem używać akronimów lub inicjałów, gdy wymieniam kwalifikacje techniczne lub wymieniam konkretne technologie w moim CV lub CV. Na przykład: * _Entity Framework_ vs. _EF_ vs. _EF (Entity Framework)_ * _Graphical User Interface_ vs. _GUI_ vs. _GUI (Graphical User Interface)_ Czy istnieje powód, aby preferować jedną wersję od innej? Czy lepiej być jak najbardziej klarownym, firmy postrzegają nieużywanie poprawnego akronimu jako oznakę braku wiedzy na ten temat?


title: Jakie rodzaje treści wizualnych, tabel lub diagramów mogę chcieć uwzględnić w dokumencie architektury projektu?

text: Oprócz diagramów architektury logicznej i fizycznej, kompozycji/makiet i tabel dla oczekiwanego obciążenia sieci między komponentami i różnymi schematami danych, jakie rodzaje treści wizualnych, tabel lub diagramów mogę chcieć uwzględnić w dokumencie architektury projektu? Specyficzny projekt to integracja funkcji portali społecznościowych innych firm z witryną modową. Proszę zamieścić przykładowe grafiki. Dziękuję.


title: Tworzenie aplikacji mobilnych dla programistów internetowych

text: W asp.net pracuję od 5 lat. Do tej pory mi się to podobało. Ale widzę nowy boom na rynku. I nie chodzi tylko o pieniądze. Ludzie idą w kierunku rozwoju iPhone'a i Androida. ponieważ nie dokonałem zmian w obu. więc zastanawiałem się, czy lepiej zostać gdzie i co robię, czy zaryzykować i spróbować nauczyć się tych technologii i skakać z nową pracą. Czy moje doświadczenie w programowaniu stron internetowych w jakikolwiek sposób wesprze tę nową naukę?


title: Konfiguracja produktu z opcjami warunkowymi

text: Załóżmy, że musisz utworzyć witrynę internetową, w której możesz wybrać widżet, a następnie skonfigurować wszystkie różne opcje, aby pasowały do tego widżetu. Opcje mają wiele interakcji. Na przykład, jeśli zdecydujesz się dodać koła do widżetu, powinno to umożliwić wybór felg, które chcesz. Jeśli jednak użytkownik wybierze widżet w kolorze pomarańczowym, felgi aluminiowe nie będą dostępne. Zmagam się z najlepszym sposobem zaprojektowania moich tabel i kodu, aby wymusić te ograniczenia i warunki rządzące tymi opcjami, zachowując jednocześnie elastyczność dla przyszłych widżetów. Nowe widżety będą pojawiać się co roku, w których te opcje i ich ograniczenia / warunki muszą zostać dodane do nowych produktów, więc staram się unikać sztywnego kodowania tego typu rzeczy. Jednocześnie trudno jest zobrazować model danych w bazie danych do zarządzania tymi warunkami/interakcjami. Niektóre z nich mogą być proste (Opcja A włącza Opcję D i E), a niektóre mogą być bardzo złożone (Opcja A plus Opcja B plus ilość 10 widżetów wyłącza Opcję Z, ale włącza Opcję X). Mam wrażenie, że tego rodzaju logika interakcji opcji należy do warstwy typu „Reguły biznesowe”. Czy jest to scenariusz, z którym którykolwiek z was miał do czynienia wcześniej, a jeśli tak, czy znalazłeś jakościową/elastyczną metodę radzenia sobie z tego typu rzeczami?


title: Jak radzić sobie z lukami w doświadczeniu w nauce programistów lub jakiejkolwiek dziedziny technologii?

text: Ten problem powraca w moich doświadczeniach. To umiejętność uczenia się na doświadczeniach innych ludzi i możliwość dzielenia się tym, czego się nauczyłem. Częścią problemu tego procesu uczenia się jest zależność od doświadczenia. Jeśli na przykład nigdy nie miałeś wielu prac związanych z czyszczeniem kodu innych osób w celu ułatwienia czytelności, lepszego pisania zapytań, lepszej logiki i praktyk walidacji, być może nie wypracowałeś tych samych praktyk i zachowań, które ja napisz mój kod. To właśnie nazywam „luką doświadczalną”. Bardzo trudno jest ludziom, którzy nie mieli dokładnie takich samych doświadczeń, jak ja, aby zrozumieć, dlaczego zaadoptowałem techniki i metody, które miałem. Weźmy na przykład kontrolę źródła, która znajduje się na słynnym „Testie Joela” jako tylko jeden z 12 elementów. Załóżmy, że pracowałeś z szeroką gamą oprogramowania/aplikacji do kontroli źródła, nie poślubiając żadnego z nich, po prostu chcesz użyć takiego, które działa. I doświadczyłeś wielu bolesnych błędów i problemów, które wynikają z braku kontroli źródła. W takim razie jak możesz wyjaśnić komuś, kto nigdy nie doświadczył tych samych problemów, dlaczego kontrola źródła jest ważna i dlaczego musi ją natychmiast dostosować. To pytanie nie dotyczy kontroli źródła, to tylko przykład, którego używam, aby zilustrować problem komunikowania najlepszych praktyk lub wszelkiego rodzaju metod, gdy powodem ich przyjęcia są głównie nasze osobiste doświadczenia zawodowe. Następnie, kiedy spotykamy kogoś, kogo widzimy, że musi przyjąć część tego, co uważamy za podstawowe, musi mieć praktyki, a nie miał naszych doświadczeń, przekonanie lub edukowanie tych ludzi staje się prawie niemożliwe. Nie dlatego, że są głupi, niewykształceni czy głupi. Dzieje się tak z powodu „luki doświadczenia”. Więc teraz sprowadzam się do tego pytania, ponieważ chcę móc dyskutować i uczyć się od innych ludzi, w jaki sposób pokonali tę lukę? Jak uczysz lub uczysz się, kiedy możesz nie rozumieć, dlaczego musisz się czegoś uczyć lub uczyć. Inny przykład, ja od lat jestem anty-oo, anty-cfc (używane w ColdFusion). A potem wdałem się w wiele wojen płomieni, ponieważ ci ludzie, którzy przeżyli bolesne doświadczenia, nie mogli mnie przekonać, że to jest ważne. A ponieważ nie byłem w sytuacji, w której mógłbym doświadczyć tego, co oni mieli, było to bardzo frustrujące doświadczenie dla nas obojga. Nie rozumiałem potrzeby najlepszych praktyk. I nie mogli zrozumieć, dlaczego tego nie dostałem. Jak więc możemy pokonać tę lukę, która jest kluczową częścią naszego procesu uczenia się. Większość z nas lub duża część z nas uczy się samoucząc, czytając, ćwicząc. To może być dobre i złe, ale nie pomaga nam nauczyć się, jak się uczyć ani czego się uczyć. Ponieważ wtedy każdy z nas miał inną pracę z różnymi umiejętnościami i różnymi doświadczeniami, każdy z nas uczy się na tych doświadczeniach i nie potrafimy zbyt dobrze odnosić się do ludzi, którzy nie przeszli przez to, przez co przeszliśmy. Jest to bardzo duży, ale subtelny problem, myślę, że powinien się nim zająć, jeśli nie ja, ktoś bardziej wykształcony lub doświadczony niż ja. Chcę tylko pomóc, wszyscy uczymy się więcej i łatwiej uczymy się od siebie nawzajem.. Dzięki...Mam nadzieję, że to przepisanie jest lepsze. Dziękuję.


title: Czy istnieją teoretyczne powody, dla których macierze w C zajmują mniej pamięci RAM niż Java?

text: Z mojego doświadczenia wynika, że Java wymaga około dwa razy więcej pamięci RAM w porównaniu do C (porównywanie tablic znaków lub innych porównań). Czytałem też w książce o sprzęcie, że Java zajmuje około dwa razy RAM niż C. Czy opiera się wyłącznie na dowodach empirycznych, czy też ma wyjaśnienie teoretyczne? Czy istnieje teoretyczny limit, który ogranicza Javę do minimalizowania zużycia pamięci?


title: Innowacje w CS

text: już od jakiegoś czasu myślałem o stworzeniu czegoś, co mogłoby pomóc społeczności internetowej i pozostawić jakiś ślad, ale problem polega na tym, że nie ma pomysłów, które wychodzą mi z głowy. Tak więc przychodzą mi do głowy 2 pytania: Po pierwsze, jak powstały projekty takie jak Twitter, Google lub jakikolwiek inny duży projekt, który zmienił nasz sposób życia w Internecie? Po drugie, czy musimy to wymusić, czy po prostu dalej robić to, co robimy najlepiej i czekać na ten pomysł, który może coś zmienić? Pisząc to pytanie, przychodzi mi do głowy jeden cytat: > Wyobraźnia jest ważniejsza niż wiedza > > **Albert Einstein**


title: Jak korzystasz z Managed Extensibility Framework?

text: Współpracuję z MEF od około 2 tygodni. Zacząłem myśleć o tym, do czego służy MEF, badając, jak używać MEF, i wreszcie wdrażając hosta z 3 modułami. Kontrakty okazują się łatwe do zrozumienia, a moduły są łatwe w zarządzaniu. Chociaż MEF ma bardzo praktyczne zastosowanie, zastanawiam się w jakim stopniu? Mam na myśli, _czy wszyscy będą przepisywać istniejące aplikacje pod kątem rozszerzalności?_ Tak, to brzmi i jest szalenie niepraktyczne. Mówiąc retorycznie: * jak MEF wpływa na obecne trendy w programowaniu? * czy zacząłeś szukać możliwości wykorzystania MEF? * czy zacząłeś planować poważny przerób istniejącej aplikacji, która może skorzystać na rozszerzalności? To powiedziawszy, moje pytania to: **_Skąd mam wiedzieć, kiedy powinienem zaplanować nowy projekt z rozszerzalnością?_** **_Skąd będę wiedzieć, czy istniejący projekt wymaga przepisania w celu rozszerzenia?_** _* *Czy ktoś używa MEF?_**


title: Prawidłowy proces tworzenia kompilacji opartych na pakietach innych firm

text: Pracuję na bazie kodu Symfony 2. Używamy wielu pakietów firm trzecich (większość znajduje się w Symfony Standard Edition). Używamy kompozytora do zależności. Obecnie mamy cały nasz kod stron trzecich popełniony w naszym repozytorium (po zmianie plików .gitignore), aby zapewnić stabilność. Zgodnie z Proper Programming Practices™ nie powinniśmy mieć w naszym repozytorium żadnych pakietów stron trzecich. Powinniśmy je ściągnąć i uwzględnić w czasie budowy. Jak mamy przeprowadzić odpowiednią kontrolę jakości i debugowanie, gdy w dowolnym momencie nasze zależności mogą wypchnąć aktualizację, która psuje funkcjonalność?