title: prawidłowo obsłużyć błąd GET

text: Mam witrynę, która przyjmuje dwa podstawowe ciągi pobierania: ?type=GAME&id=SomeGameID ?type=SCENARIO&id=SomeScenarioID z nieznanych powodów, ostatnio zacząłem otrzymywać żądania błędnych ciągów pobierania zarówno z Yandex, jak i Baidu. Mają one zawsze postać: ?type=GAME&id=SomeScenarioID Żaden z moich użytkowników nie powoduje tych błędów, więc jestem (w pewnym sensie) pewien, że nie jest to spowodowane błędem szablonu HTML z mojej strony. W tablicy $_SERVER nie pojawia się również HTTP_REFER, więc domyślam się, że są to bezpośrednie żądania od złych danych dbase z ich strony. Widzę dwie opcje radzenia sobie z tymi złymi żądaniami i chciałbym wiedzieć, która jest zalecana... lub jeśli istnieją inne, lepsze opcje, o których nie pomyślałem: 1. po prostu 404 żądanie, ponieważ jest niepoprawne 2. przekierowanie żądanie do `?type=SCENARIO&id=SomeScenarioID` ponieważ identyfikatory scenariuszy są zawsze prawidłowe, przerwa jest spowodowana pytaniem o niewłaściwy typ.


title: Dlaczego XCode konwertuje pliki PNG do formatu CgBI?

text: Według badań przeprowadzonych tutaj http://imageoptim.com/tweetbot.html, konwersja PNG przez Xcode do zastrzeżonego formatu Apple CgBI nie powoduje zauważalnej poprawy wydajności. Twierdzą, że konwersja zmniejsza prędkość ładowania PNG tylko o 1 nanosekundę. Jeśli to prawda, dlaczego Apple w ogóle zawraca sobie głowę formatem CgBI? Czy ktoś inny przetestował ładowanie obrazów CgBI w porównaniu ze zwykłymi obrazami PNG na urządzeniach z systemem iOS, aby sprawdzić, czy działają one inaczej?


title: Starsi inżynierowie: Wrócić do kodowania?

text: To pytanie dotyczy inżynierów z ponad 20-letnim doświadczeniem, ale jest to pytanie dla każdego, ponieważ dotyczy rozwoju kariery. Zaskakująco długo szukam pracy, a problemem wydaje się być to, że pracodawcy nie zaakceptują mnie jako kodera. Tak, zrobiłem wiele rzeczy, miałem własną firmę, sprzedałem ją za wcześnie itp. Ale świat zawsze potrzebuje produktywnych pracowników, a moje umiejętności są aktualne i ostre. Rynek, na którym jestem, ma mniej ofert dla seniorów i nie mam nic przeciwko cofnięciu się o krok lub dwa, jeśli znajdę miejsce, w którym mógłbym wnieść swój wkład. Co myślisz o zarządzaniu karierą, które przygotowuje 40, 50-latka na nagłe przerwanie kariery?


title: Zależności między usługami w potoku

text: Pracuję nad stworzeniem nowego systemu przetwarzania danych, w którym każdy z etapów jest realizowany przez różne usługi. Na przykład istnieje usługa planowania, która coś uruchamia, usługa analizy, która wykonuje przetwarzanie, oraz usługa powiadomień, która podsumowuje i wysyła wyniki pocztą elektroniczną. Dane przepływają w tej kolejności Moje główne pytanie, który projekt byłby lepszy, czy usługa analityczna powinna wiedzieć o usłudze powiadomień? A może serwis powiadomień powinien wiedzieć o analizie? Moja pierwsza myśl jest taka, że korzystając z magistrali usług, usługa powiadomień może po prostu zostać zasubskrybowana do dowolnych wyników analizy, które są emitowane. W ten sposób, jeśli usługa powiadomień zostanie zastąpiona lub zmieniona, nie będzie potrzeby wprowadzania żadnych zmian w usłudze analizy. Oznacza to również, że klient, który chce rozpocząć analizę i otrzymać powiadomienie, musiałby najpierw zadzwonić do usługi powiadamiania, aby poinformować ją, jak obsłużyć wynik, jaki ostatecznie uzyska, przed rozpoczęciem właściwej analizy. Przeciwny pomysł polega na tym, że usługa analityczna powinna po prostu wywołać bezpośrednio usługę powiadamiania, więc usługa analityczna musi wiedzieć, co zrobić, aby utworzyć wywołanie do powiadomienia. Oznacza to, że klient musiałby zapakować konkretne instrukcje dotyczące powiadomień, które zostaną przekazane do usługi analizy, aby mógł później sprawdzić, co przekazać do wywołania powiadomienia. Wygląda na to, że podejście usługi powiadamiania do pobierania i przetwarzania wyników analizy byłoby lepsze, ponieważ w przyszłości moglibyśmy również dodać inne usługi, które następnie zrobią coś z wynikiem bez konieczności zmiany usługi analizy, aby wywołać ją jawnie. Czy ktoś może dać jakiś wgląd w to, które podejście działałoby lepiej, aby było łatwiej je rozwijać, utrzymywać i wspierać?


title: Czy JavaScript jest interpretowany zgodnie z projektem?

text: Ostrożnie zadaję to pytanie, ponieważ może wydawać się to zbyt wybredne. Właśnie otworzyłem JavaScript: The Definitive Guide i stwierdza on na pierwszej stronie rozdziału 1 > „JavaScript jest wysokopoziomowym, dynamicznym, nieopisanym interpretowanym programowaniem > język” Więc mam przyjąć, że interpretowana część jest wymagana w specyfikacji języka, czy może mylące jest stwierdzenie, że język jest interpretowanym językiem programowania, jeśli szanuje się różnicę między językiem a jego wieloma implementacjami?Najwyraźniej nie ma statycznych kompilatorów dla JavaScript - Czy istnieje natywny kompilator kodu maszynowego dla JavaScript? więc może to tylko odzwierciedlenie tego.


title: Jakie są ograniczenia dotyczące dzieł pochodnych oprogramowania na licencji EPL?

text: Rozważam opłacenie firmy zajmującej się doradztwem w zakresie oprogramowania za dostarczenie mojej firmie pewnych ulepszeń do oprogramowania objętego licencją Eclipse Public License (EPL). Zastanawiam się, jakie będziemy mieli prawa do tego, co produkują i czy mogą nas związać z płaceniem im tantiem na zawsze. * Jakie prawa będziemy mieli do modyfikowania i redystrybucji tego, co nam zapewniają? * Czy mogą nalegać na opłatę licencyjną, gdy przekazujemy ją stronom trzecim? Zanim zacznę negocjować, muszę zrozumieć, co otrzymujemy – i najlepiej, aby tego rodzaju rzeczy zostały wyraźnie uzgodnione w kontrakcie. Wiem, że powinienem skonsultować się z prawnikiem.


title: Jaka jest różnica między aplikacją internetową safari HTML5 „Dodaj do ekranu głównego” a aplikacją internetową HTML5 opakowaną w UIWebView?

text: Ktoś mnie o to zapytał. Odpowiedź, której udzielił, była taka, że HTML5 w `UIWebView` może buforować dane aplikacji, dzięki czemu może działać w trybie offline. Myślałem, że to samo można osiągnąć za pomocą safari add do ekranu głównego, nie?


title: Używanie kodu GPL z kodem MPL

text: Zrobiłem miejsce w Googlingu i wszystko, co mogę znaleźć, to informacje o używaniu kodu w ramach MPL w większym projekcie na licencji GPL. Naprawdę chcę wiedzieć: czy mogę dołączyć kod (/binaries) na licencji GPL(v3) do większego projektu na licencji MPL(2.0)? Jak dotąd rozumiem, że nie mogę i że każdy projekt, który używa oprogramowania na licencji GPL, musi być również wydany na GPL. Czy to jest poprawne? Jeśli to prawda, czy mogę napisać oprogramowanie i wydać je na licencji MPL, nawet jeśli zależy to od biblioteki GPL, o ile nie rozprowadzam części na licencji GPL z moimi częściami na licencji MPL? A jeśli następnie chcę rozpowszechniać obie części jako „większe dzieło”, w jaki sposób nadrzędna GPL wpłynie na mój kod MPL?


title: Pisanie dużych porcji kodu, a następnie debugowanie?

text: Ostatnio pisałem silnik gry i pisałem wiele „podstawowych rzeczy” (standardowe interfejsy, moduły, system wiadomości itp.), ale zauważyłem pewien wzorzec, wiele rzeczy jest współzależnych i ja nie mogę debugować, dopóki wszystko nie zostanie zrobione, dlatego nie debuguję przez około 3 do 5 godzin na raz. Zastanawiam się, czy jest to dopuszczalna praktyka dla tej części projektu, a jeśli nie, to czy ktoś może mi coś doradzić? \-----Aktualizacja-----: Pobrałem kilka narzędzi do metryki kodu, a złożoność cyklomatyczna moich programów wynosi 1,52, co jak rozumiem jest dobre i powinno korelować z wysoką spójnością, jeśli się mylę, popraw mnie/


title: Rozliczenia kontraktowe — jak poradziłbyś sobie z „czasem nauki”?

text: Więc bierzesz umowę, w której masz solidne doświadczenie z 75% niezbędnej technologii. Jak radzisz sobie z czasem, aby nauczyć się pozostałych 25%? Włożyć to w czas rozliczeniowy? Ujawnić 25% w kontrakcie jako „badania”? Czy nauka odbywa się we własnym czasie (nie jest rozliczana)? Nie brać umowy (zbyt duża lub niewiadoma dla mnie _i_ klienta)? Na samym końcu słyszę historię o Marku Cubanie (miliarderze z Dallas, który założył broadcast.com i sprzedał go Yahoo!), kiedy był na Uniwersytecie Indiana. Ktoś zapytał go, czy mógłby zbudować dla nich aplikację biznesową, a on od razu odpowiedział „Tak”… nie miał pojęcia jak. Więc kupił książkę, nie spał, uczył się i kodował... Skończył ją (jestem pewien, że była brzydka), działała i szedł dalej. Nie sugeruję robienia kontraktów w ten sposób (stres!), ale jest złoty środek. Co to jest i jak rozliczałbyś się (lub chciałbyś?) za nieznane?


title: Wdrażasz synchronizację między localStorage a bazą danych SQL?

text: Zrobiłem prostą aplikację webową, która działa całkowicie offline - wszystkie dane są zapisywane w localStorage HTML5. Teraz chcę, aby dane zostały zsynchronizowane z serwerem, aby użytkownik mógł korzystać z aplikacji na wielu urządzeniach jednocześnie. To, co zrobiłem do tej pory, to: 1. Do każdej operacji wykonywanej przez użytkownika dodawany jest wpis w dzienniku. 2. Gdy użytkownik jest online, wszystkie logi są przesyłane z localStorage do PHP przez AJAX. 3. Odpowiednie zmiany dokonywane są w Bazie Danych SQL. 4. Wszystkie logi są usuwane z localStorage. Tak więc wszystkie dane localStorage są prawidłowo "kopie zapasowe" na serwerze. W każdym razie zmiany wprowadzone z jednego urządzenia nie są odzwierciedlane na drugim urządzeniu i odwrotnie, aby to zrobić, musielibyśmy pobrać dane z SQL do localStorage. Teraz moje pytanie brzmi, jaki będzie odpowiedni i najlepszy sposób, aby to zrobić? Po wykonaniu powyższych czterech kroków wykonaj I 1. Wyczyść wszystkie dane localStorage i zapisz dane SQL w localStorage. 2. Prowadź dziennik zmian dokonanych w bazie danych i rób je na localStorage. 3. Każde inne podejście. A co z sygnaturami czasowymi? A jeśli są konflikty?


title: Jak mogę się przygotować do dołączenia do firmy?

text: Jest w tym coś więcej, ale ten tytuł był najlepszym sposobem, jaki przyszło mi do głowy, aby to podsumować. Ukończyłem dobry program informatyczny i wcześnie kończę szkołę. Zaraz zaczynam rozmowy kwalifikacyjne i tak dalej. Nie jestem super doświadczonym programistą, nie jestem jedną z tych osób, które zaczynały w gimnazjum. Jestem w tym przyzwoity, ale nie należę do najlepszych, nie prawie. Muszę strasznie dużo googlować. Więc dzisiaj spotykam się z facetem na lunch w kampusowej kawiarni, aby omówić pewne szczegóły front-endu, kiedy ten wysoki, przystojny facet błaga o wybaczenie, mówi, że jest nowy w kampusie, mówi, że zastanawia się, czy wiemy, gdzie może się podpisać do rekrutacji programistów. Szybko przeradza się w długą rozmowę: jest dyrektorem generalnym start-upu, który wydaje się, że ma się dobrze. Zatrudnianie pełnych pasji stażystów i etatowych. Brzmi wspaniale! Spoglądam później na jego stronę na własnym komputerze i od razu dostrzegam poważny błąd. Nie mam pojęcia, jak to naprawić, ale to widzę. Przechodzę do kodu strony i dobry Boże. Jest to standardowa ilość kodu, której można oczekiwać od pełnowymiarowej aplikacji internetowej, kilkudziesięciu stron HTML i skryptów. Nawet nie wiem od czego zacząć czytać. Budowałem strony od podstaw, ale oczywiście nigdy na taką skalę, ani też nigdy nie pracowałem na taką skalę. Nie mam pojęcia, który bit może wygenerować błąd. Ale to sprawia, że zastanawiam się: jak ktoś taki jak ja mógłby osiedlić się w takim środowisku? Start-up to środowisko pracy pod bardzo wysokim ciśnieniem. Nie wiem, czy mogę pracować w takim tempie przy tych ograniczeniach. Nie chciałbym zawieść ludzi. A mając tylko 10 pracowników, nikt nie ma zbyt wiele czasu, aby pomóc Ci się zorientować. Gdzieś tam jest pytanie. Możesz to zobaczyć? Proszę o ogólną radę tutaj. Może nawet porady anegdotyczne. Czy dołączenie do start-upu zaraz po studiach to przerażający proces? Czy przeceniam, ile potrzeba, aby obliczyć masę kodu stojącego za tą witryną? Jakie jest prawdopodobieństwo, że porządny, ale tylko średnio doświadczony programista może zarobić w takim miejscu? Na przykład nie wiem nic o programowaniu po stronie serwera/zaplecza. Nigdy go nie dotykałem. To mnie przeraża.


title: Pythonowe użycie funkcji isinstance?

text: Ilekroć chcę użyć funkcji isinstance(), zwykle wiem, że robię coś źle i ostatecznie zmieniam swoje postępowanie. Jednak w tym przypadku myślę, że mam do tego sensowne zastosowanie. Użyję kształtów, aby zilustrować mój punkt widzenia, chociaż w rzeczywistości nie pracuję z kształtami. Analizuję pliki konfiguracyjne XML, które wyglądają następująco: <square> <width>7</width> </square> <rectangle> <width>5</width> <height>7</height> </rectangle> <circle> <radius>4</radius> </circle> Dla każdego elementu tworzę instancję klasy Shape i tworzę listę obiektów Shape w klasie o nazwie ShapeContainer. Różne części reszty mojej aplikacji muszą odwoływać się do ShapeContainer, aby uzyskać określone kształty. W zależności od tego, co robi kod, może potrzebować tylko prostokątów, może działać na wszystkich czworokątach lub na wszystkich kształtach. Stworzyłem następującą funkcję w klasie ShapeContainer (rzeczywista funkcja używa rozumienia listy, ale rozszerzyłem ją tutaj dla czytelności): def locate(self, shapeClass): result = [] dla kształtu w self.__shapes: if isinstance( shape,shapeClass): result.append(shape) zwraca wynik Czy jest to prawidłowe użycie funkcji isinstance? Czy jest inny sposób, w jaki mogę to zrobić, który może być bardziej pytoniczny?


title: Dodawanie krótkoterminowego programisty do przeróbki starego projektu

text: ## Tło Pracuję w Centrum zasobów językowych w moim kampusie. To stosunkowo małe laboratorium, a naszym zadaniem jest pomaganie studentom, a nie kodowanie oprogramowania. Będąc studentem informatyki, podjąłem inicjatywę, aby zacząć kodować przydatne narzędzia, aby ułatwić nam pracę jako asystentów laboratoryjnych. Niedawno Google zadeklarowało zamknięcie naszego mechanizmu przechowywania danych, więc uznałem, że nadszedł czas, aby całkowicie przerobić cały system, który zbudowałem (sam) w ciągu ostatniego roku. Mam teraz większe doświadczenie i chcę to zrobić poprawnie za pomocą ( _better_ ) narzędzi, które są teraz dla nas dostępne. W tym laboratorium pracuje ze mną inny student CS, który będzie ze mną pracował jeszcze przez **jeden semestr** (np. okres 4 miesięcy). Nigdy nie prosiłem go o udział w **oryginalnym** projekcie, ponieważ zacząłem go zeszłego lata, kiedy nie miał zaplanowanej pracy. Celem tego projektu jest zbudowanie zintegrowanej aplikacji „menedżerskiej” dla naszych pracowników i mojego szefa; narzędzie jest usługą sieciową zbudowaną przy użyciu HTML/CSS/JavaScript. Mój współpracownik nie ma żadnego doświadczenia z JavaScript, HTML ani CSS. Ten programista nie ma również doświadczenia z bazą kodu, którą zbudowałem wcześniej (czysto JavaScript), która musiałaby zostać przerobiona (choć nieznacznie), aby działała z nowym systemem. Ponownie, nie jest to obowiązek wymagany na naszych stanowiskach**. Lubię kodować rzeczy, aby zautomatyzować służebne zadania i ułatwić nam pracę. _Nigdy nie było to wymogiem._ ## Terminy W połowie sierpnia mamy sztywny termin, kiedy wydział zacznie ponownie przesyłać do nas wnioski. Stary system musi zostać wcześniej przebudowany (niektóre części zmodernizowane). ## Po co pytać? Mój szef zasugerował, aby mój współpracownik przyczynił się do nowego projektu, aby przyspieszyć rozwój. Obawiam się, że mój współpracownik (i szef, jeśli o to chodzi) może potraktować to jako lekceważenie, jeśli nie pomoże w rozwijaniu tego systemu. Z drugiej strony był okres 9 miesięcy, w którym mógł przyczynić się do poprzedniego projektu i okres 4 miesięcy, w którym mógł przejąć zarządzanie tym projektem (byłem we Francji) - nigdy nie wykazywał zainteresowania w aktywnym współudziale w poprzednim projekcie i nie mam z tym problemu. Martwię się, ponieważ czuję, że pomaganie mu w nauce HTML, CSS i JS, a także API i zestawu narzędzi Google _naprawdę_ spowalnia sprawę. W zasadzie mamy dwa miesiące na odbudowę starego systemu i czuję, że czas, jaki zajęłoby mu zapoznanie się z narzędziami i językami używanymi w tym projekcie, sam mógłbym go zbudować. ## Czy istnieje protokół? Wymyśliłem następujące opcje w tej sytuacji: 1. Po prostu zacznij pracować nad nowym projektem sam, zakładając, że mój współpracownik nie chce i/lub nigdy nie chciał wnosić wkładu. 2. Zapytaj mojego współpracownika, czy chce, abym pomógł mu nauczyć się HTML/CSS/JS i zacznij pokazywać mu poprzednią bazę kodu oraz aktualny plan projektu. 3. Zapytaj mojego współpracownika, czy jest zainteresowany pomocą przy nowym projekcie (nie _nie musi_ mieć zainteresowania, ale czy przyjąłby to jako _**musisz** nad tym pracować!_?) ## Pytanie Czy warto poświęcić czas/wysiłek, biorąc pod uwagę termin, aby współpracownik pracował ze mną nad tym projektem? A może zaszkodziłbym postępom, gdybym się rozwijał?


title: MVVM - okna potomne i konteksty danych

text: Czy okno potomne powinno mieć swój własny kontekst danych (View-Model) czy używać kontekstu danych rodzica? Mówiąc ogólnie, czy każdy widok powinien mieć swój własny model widoku? Czy istnieją jakieś zasady, którymi należy kierować przy podejmowaniu takiej decyzji? Co się stanie, jeśli różne View-Modele będą miały dostęp do tego samego Modelu? Nie udało mi się znaleźć żadnych spójnych wskazówek dotyczących mojego pytania. Definicja MS MVVM wydaje się być cicha w oknach podrzędnych. Na przykład stworzyłem powiadomienie o wiadomościach ostrzegawczych View. Naprawdę nie potrzebował kontekstu danych, ponieważ przekazano komunikat do wyświetlenia. Ale gdybym miał się trochę zainteresować, wybrałbym kontekst danych rodzica. Natknąłem się na inny scenariusz, który wymaga okna potomnego i jest bardziej skomplikowany niż okno powiadomienia. View-Model rodzica jest już zaśmiecony, więc zaplanowałem wygenerowanie dedykowanej maszyny wirtualnej dla okna potomnego. Ale nie mogę znaleźć żadnych wskazówek, czy to dobry pomysł i jakie mogą być potencjalne konsekwencje. FWIW, tak się składa, że pracuję w Silverlight, ale nie wiem, czy to pytanie jest ściśle związane z Silverlight.


title: Wzorce projektowe do tworzenia zadań

text: Tworzę oprogramowanie, w którym każde działanie w moich podmiotach wymaga stworzenia zadań, które będą realizowane w mojej infrastrukturze. Kiedy tworzę zadanie to są tylko rekordy w bazie danych. Następnie uruchomi go usługa Windows. Właściwie korzystam z Serwisu i moje Entities są Anemiczne, wtedy kiedy zmieniam stan mojej encji, tworzę również zadania do infrastruktury. public void CreateMachine(string name){ var machine = new Machine(){ Name = name, Status = Status.Releasing; }; var task = new List<Task>(){ new Task("CreateMachine", machine.Name), //zadanie infrastruktury new Task("ChangeMachineSize", machine.Name, machine.Foo), //zadanie infrastruktury new Task( "ActivateMachine", maszyna.Bar), //zadanie infrastrukturalne nowe zadanie("SetMachineEntityStatusToReleased", maszyna.Nazwa) //zadanie biznesowe (przejdź do mojej bazy danych) _db.Task.Add(zadania); _db.Msachine.Update(maszyna); _db.ZapiszZmiany(); } } Ale chcę używać bogatej domeny, ponieważ moje usługi stają się zbyt skomplikowane. Public Class Machine{ public Machine(string name) { Name = name; Status = Status.Zwolnienie; //Czy mogę tutaj tworzyć zadania do tworzenia maszyny? } public void Stop(){ Status = Status.Releasing //Czy mogę tutaj tworzyć zadania do zatrzymania maszyny? } [Wymagane] [StringLength(50)] ciąg publiczny Nazwa { get; ustawić; } status publiczny Status { get; zestaw chroniony; } } Czy istnieje wzorzec projektowy lub najlepsza praktyka dla tego projektu? Naruszę zasadę pojedynczej odpowiedzialności, jeśli dodam tworzenie zadania wewnątrz mojej jednostki?


title: Celowo niepoprawne użycie funkcji językowych, w szczególności „ref” w C#, jako wskazówka dla kolegów

text: Niedawno natknąłem się na fragment kodu podobny do tego (z grubsza C#): public bool ValidateStuff(ref ArrayList listOfErrors, Stuff thingsToValidate) { if (!thingsToValidate.isValid() ) { error.add("Nowy błąd!"); } } Błędy ArrayList = []; bool valid = ValidateStuff(błędy referencji, stuffToValidate); Kluczową rzeczą jest słowo kluczowe "ref" - nie ma potrzeby używania tego słowa kluczowego biorąc pod uwagę funkcjonalność tutaj, a kiedy zapytałem, dlaczego tam jest, powiedziano mi, że zostało ono dodane tylko jako rodzaj ostrzeżenia, że parametr _errors_ jest manipulowana przez metodę, nie jest używana wyłącznie jako dane wejściowe. Od razu wydało mi się to niewłaściwe ( _ref_ ma cel, a tutaj nie jest używany zgodnie z jego przeznaczeniem), ale pomysł wymuszenia (ponieważ **musisz** użyć _ref_ przy wywoływaniu metody) przypomnienia o nieznacznym użycie sprzeczne z intuicją wydawało mi się rozsądne i nie mogłem od razu wymyślić lepszego sposobu, poza liberalnym wykorzystaniem komentarzy. Co myślisz? Dodatkowy kredyt: jak ta metoda może być lepsza? Może po prostu przez zwrócenie nowej Listy błędów, która jest dodawana do głównej Listy w kodzie wywołującym? Podając dwie metody, jedną na test, a drugą na błędy? A może jest w porządku, jak to jest?


title: IllegalStateException a IllegalArgumentException

text: Napisałem funkcję, która oczekuje, że wywołujący przekaże plik konfiguracyjny, taki jak XML. Następnie parsuję ten plik i wyodrębniam coś, co następnie zwracam. W tej funkcji mogą się zdarzyć (przynajmniej) dwie "złe" rzeczy: 1. Dany plik nie istnieje lub nie jest w żaden sposób dostępny 2. Podczas parsowania/walidacji pliku znaleziono nieoczekiwaną zawartość Pierwszą rzeczą jest oczywiście ` IllegalArgumentException`. Nie jestem jednak pewien, jakiego rodzaju wyjątkiem byłby ten drugi przypadek. Czy jest to również `IllegalArgumentException`, ponieważ spodziewam się (przez umowę dotyczącą dokumentacji), że dane wejściowe są w prawidłowej formie? A może jest to raczej `IllegalStateException`, ponieważ podany parametr jest formalnie poprawny, ale dopiero po przeanalizowaniu nie mogę wykonać żadnych dalszych kroków, ponieważ spowodowałoby to niepożądane zachowanie? A może to jeszcze coś innego?


title: Czy szybsze jest wykonywanie zapytań przy użyciu linq-to-entities lub adaptera danych?

text: Tworzę aplikację MVC w VS2012 i wykonałem inżynierię wsteczną modeli z istniejących tabel Oracle. Tabele są częścią ogromnej bazy danych. Poza głównymi tabelami, z których muszę wstawiać, aktualizować i usuwać, wybrałem również (dla kaprysu) kilka tabel i widoków, z których moja aplikacja musi tylko czytać. Teraz wątpię w swoją decyzję i rozważam usunięcie mniej ważnych modeli. Zdecydowanie przyjemniej jest wykonywać zapytania za pomocą linq-to-entities zamiast tworzyć połączenie Oracle, tworzyć adapter, wypełniać zestaw danych i czytać to, czego potrzebuję, ale co jest szybsze?


title: Przygotowanie do doktoratu

text: Niedługo zacznę doktorat (badania nad bezpieczeństwem oprogramowania). Jak mogę się do tego przygotować. Proszę polecić wszelkie narzędzia lub oprogramowanie, z którymi muszę się zapoznać przed ogłoszeniem doktoratu. Jakieś porady inne niż oprogramowanie?


title: Wskazówki dotyczące korzystania z BOOST

text: Planuję użyć bibliotek boost, ponieważ są one dość bogate i zaoszczędzą mnóstwo czasu. Ale moje pytanie brzmi, jakie są wytyczne, których muszę przestrzegać, aby 1. Mogę zastąpić część boosta standardowym C++, gdy i kiedy są obsługiwane, biorąc pod uwagę, jak wiele nowych funkcji pojawia się w C++11. 2. Również, jak je zahermetyzować w taki sposób, aby zmienić wersję platformy/kompilatora/doładowania jak najmniej. 3. Czy istnieje również kategoria, która sugeruje, której części biblioteki używać, a której unikać, biorąc pod uwagę stabilność i standard.


title: Usługa powiadamiania o aktualizacjach wersji oprogramowania

text: Interesuje mnie wiele projektów (open source) - przynajmniej dziesiątki. Chcę otrzymywać powiadomienia o pojawieniu się nowej wersji. Czy istnieje usługa, która to robi?


title: Jak licencjonować mój projekt systemu operacyjnego, który korzysta z innych (innych licencjonowanych) projektów?

text: Mam bibliotekę na GitHub, a niektóre binaria są również dystrybuowane na NuGet: https://github.com/relentless/Http.fs Do tej pory ignorowałem licencjonowanie, ale ktoś o to pyta, więc pomyślałem Powinienem coś założyć. Chcę, aby była ona pobłażliwa, a po przeprowadzeniu małych badań MIT wydaje się być dobrym do użycia. Jednak moja biblioteka odwołuje się/używa trzech innych bibliotek, wszystkie z różnymi licencjami, więc nie jestem do końca pewien, co muszę zrobić. Zawiera binaria: * FsUnit, który ma własną licencję (podobną do 3 klauzuli BSD): https://github.com/fsharp/FsUnit/blob/master/license.txt * NancyFx, który używa MIT: https://github.com/NancyFx/Nancy/blob/master/license.txt Oraz plik źródłowy z: * FSharpX, który używa Apache 2.0: https://github.com/fsprojects/fsharpx/blob/master/LICENSE .md MIT w Nancy nie wydaje się być problemem. Apache fsharpx i FsUnit mówią, że muszę dołączyć tekst licencji do mojego projektu. Moje pytania są następujące: 1. Co mam zrobić z innymi licencjami, po prostu skopiuj pliki do katalogu głównego mojego źródła? Zakładam, że mogę zmienić ich nazwy i dodać komentarz określający, której części mojego projektu dotyczy ta licencja. 2. Zakładając, że pójdę na MIT, czy mogę rozsądnie opisać mój projekt jako posiadający licencję MIT? A może to prawda, że jest to mieszana licencja MIT/Apache 2.0/Random?


title: Architektura deski rozdzielczej

text: Chciałbym wiedzieć, czy mój pomysł na Architekturę jest najlepszym podejściem według pewnego wzorca. Stworzę Dashboard dla mojej firmy i nigdy nie usunę ani nie zaktualizuję danych w mojej bazie, po prostu odczytam dane z bazy. Obecnie pracujemy tylko z naszą bazą danych SQL Server, ale chcę rozwiązania, które zapewni łatwy sposób na zaimplementowanie nowej funkcji, takiej jak nowa kompatybilność bazy danych. **APLIKACJA** Jest to dashboard dla wszystkich moich klientów, gdzie pobiorę dane z mojego serwera bazy danych tworząc filtr dla jego firmy, a następnie wykreślę kilka wykresów i pokażę informacje o jej wynajmie, informacje finansowe itp. Będzie oparty na przeglądarce internetowej i musi działać na dowolnym rozmiarze ekranu (smartfony, telewizory, komputery stacjonarne itp.). Chcę używać NHibernate jako ORM **IDEA** Mój pomysł był w interfejsie użytkownika, użyj aplikacji internetowej MVC 4, a wszystkie żądania z interfejsu użytkownika do mojej warstwy biznesowej będą przechodzić przez REST. Moja warstwa biznesowa to internetowy interfejs API MVC, który oddziela interfejs użytkownika od mojej warstwy biznesowej. Warstwa biznesowa uzyska dostęp do repozytorium (wzorzec repozytorium) z operacją CRUD (w moim przypadku to po prostu „SELECTS”, ponieważ wystarczy pokazać dane, nigdy nie aktualizować, nigdy nie wstawiać). To podejście DDD, pracujące z NHibernate. Czasami myślę, że to za dużo jak na dashboard, gdzie nie możemy wstawiać ani aktualizować danych. Chciałbym wiedzieć, jakie są wspólne wzorce architektoniczne dla tego problemu. Mówiłem, że jest tu jakiś wzór, ale może ktoś z większym doświadczeniem niż ja widziałby lepsze podejście do tego rodzaju aplikacji.


title: Dopasowywanie wzorców w Clojure vs Scala

text: Jakie są kluczowe różnice między dopasowywaniem wzorców w tych dwóch językach? Nie mam na myśli składni, ale możliwości, szczegóły implementacji, zakres przypadków użycia i konieczność. Aplikacje Scala (np. Lift and Play) z dumą mówią o sprawności dopasowywania wzorców językowych. Z drugiej strony Clojure ma bibliotekę core.match i wbudowaną destrukturyzację, która również wydaje się potężna. *uwaga: Powodem, dla którego zainspirowałem się do zadania tego pytania, był post na blogu, który zobaczyłem, w którym programista, w ramach eksperymentu, zbudował interpreter seplenienia, używając zarówno Scala, jak i Clojure. Powiedział, że mecze Clojure zepsuły się po pewnym czasie, ale nie potrafił wyjaśnić, dlaczego, ale jestem naprawdę ciekawy. Możesz znaleźć ten post tutaj: http://www.janvsmachine.net/2013/09/writing-simple-lisp-interpreter-in-clojure.html


title: Jak oddzielić prostą implementację fabryczną i domyślną?

text: Mam prostą fabrykę ~~klasę~~ (`FileResources`) ze statycznymi metodami fabrycznymi zapewniającymi domyślną implementację (`DefaultFileResource`). public final class FileResources { prywatne FileResources() {} publiczne statyczne FileResource get (ścieżka ścieżki) { return new DefaultFileResource (ścieżka); } } Problem z tą klasą polega na tym, że jest ona ściśle powiązana z domyślną implementacją (`DefaultFileResource`). Biorąc pod uwagę nowe wymaganie, że klasy będące częścią API (`FileResources`) nie mogą bezpośrednio zależeć od klas nie będących częścią API (`DefaultFileResource`) pomyślałem, że jedynym rozwiązaniem jest odwrócenie kontroli, albo wstrzyknięcie zależności lub ~~dostawca usług ~~ lokalizator usług. Czy można oddzielić FileResources od domyślnej implementacji (`DefaultFileResource`)? O ile wiem, jest to możliwe tylko przez wstrzyknięcie zależności do FileResources za pomocą konstruktora, pola lub metody ustawiającej. Główny problem polega na tym, że konstruktor FileResources jest prywatny, a ponadto ma tylko statyczne metody fabryczne. Alternatywą jest wzorzec metody fabrycznej. Istniałaby abstrakcyjna fabryka (klasa API) i konkretne fabryki (klasy inne niż API), które można by nawet wstrzyknąć w celu rozdzielenia klas API i innych niż API. Tak czy inaczej, do obsługi okablowania niezbędny jest kontener zależności. Co myślisz? Czy przemyślam to?


title: Heurystyczne podejście do elastycznej implementacji DIFF

text: Stworzyłem implementację DIFF do porównywania wersji dokumentów w pracy. Opiera się na _Algorytmie różnicowym O(ND) i jego odmianach_. Jedna rzecz, która stała się ważna, to wziąć listę zmian i zinterpretować je na tekst czytelny dla człowieka. Chociaż obecny algorytm jest bardzo wydajny, jest tak bardzo, że trudno go rozwinąć. ## Krótkie pytanie Myślałem o próbie użycia A* i heurystyki, która dodaje kary za "zwroty". Chodzi o to, aby _wygładzić_ niepotrzebne „dodaj, usuń, dodaj, usuń, dodaj, usuń”, aby łatwiej było przetworzyć coś, co człowiek może przeczytać. Zasadniczo zamień mój problem z _najkrótszą ścieżką_ w problem z _najprostszą ścieżką_. I oczywiście nie twórz danych wyjściowych, które zawsze brzmią „Usuń _wszystko_ , Dodaj _wszystko_”. Czy to brzmi rozsądnie? Czy istnieje pierwszeństwo używania heurystyki w implementacji DIFF? Czym jest heurystyka? ## Problem: Jeśli długie zdanie zostanie usunięte, a inne długie, ale współdzielą przynajmniej jedno słowo, powiedz „z”. Pozostawienie w spokoju wspólnego słowa (nie dodawanie go i usuwanie) stworzy najkrótszą ścieżkę. Jednak to naprawdę tylko zaciemnia kontekst zmiany dla człowieka próbującego odczytać wydruk zmian. Przykład z aktualnym DIFF: * **Stary tekst:** Oczyść: Powerwash i wysusz powietrzem warsztatowym. * **Nowy tekst:** Wyczyść: wytrzyj acetonem i niestrzępiącą się ściereczką. * **Zmień listę notatek:** * Zmień „Powerwash i przedmuchaj” na „Wytrzyj acetonem” * Zmień „powietrze sklepowe” na „aceton i niestrzępiącą się szmatkę” _Uwaga: zamiast_ „usuń” jest używane słowo „Zmień” sklep air”, dodaj „aceton””. Jak widać, druga nuta traci CAŁKOWITY kontekst i bez patrzenia na pełne stare i nowe zestawy tekstów nie można zrozumieć, co to znaczy. ## Uwaga dotycząca interpunkcji: rozdzieliłem interpunkcję jako oddzielne „słowa”, aby uzyskać * Dodaj „(” zamiast * Zmień „Napraw” na „(Napraw”, ponieważ było to nieprzyjemne. Oznacza to jednak, że jeśli jest nawet przecinek w obu tekstach (w przeciwieństwie do słowa „z” w poprzednim przykładzie) dzieje się to samo ## Możliwe rozwiązanie: Myślę, że zamiast tego mógłbym użyć innego algorytmu wyszukiwania ścieżki, który może dać mi elastyczność w dodawaniu wagi do różnych "ścieżek" zmiany, które mogą mieć więcej sensu dla osoby.Może mógłbym nawet sprawić, że podróżowanie do węzłów zawierających znaki interpunkcyjne będzie miało niewielką wagę (nie jestem pewien, jak wpłynęłoby to na inne rzeczy).Następnie mógłbym uzyskać poprzedni przykład, aby wymienić następujące: * **Zmień listę notatek:** * Zmień „Powerwash i wysusz powietrzem warsztatowym” na „Wytrzyj acetonem i niestrzępiącą się ściereczką” _Zobacz! być może będę musiał przeprowadzić dość gruntowną przebudowę mojego programu, ale ważniejsze jest, aby mieć ostateczny wynik chcę. ## Konkluzja: Znowu, czy istnieje pierwszeństwo używania heurystyki w implementacji DIFF i co to jest? Inne przemyślenia? Rozsądna inwestycja czasu? Inne pomysły? Inne algorytmy? Z góry dziękuję! **EDYTUJ:** Próbowałem wyjaśnić/umocnić moje pytanie i uogólnić pytanie, dodając heurystykę do mojego algorytmu, zamiast używać A*. Zasadniczo to samo w tym przypadku, ale teraz myślę, że dokładniej. Ten post był wnikliwy.


title: Jak sprawić, by usługa była bezpaństwowa?

text: Podczas projektowania opartego na domenie zaleca się, aby usługi były bezstanowe. Istnieje kilka rodzajów usług podczas wykonywania DDD: * Usługi aplikacji. * Usługi domenowe. * Usługi infrastrukturalne. * Fabryki, repozytoria, specyfikacje itp. Jak dokładnie mogę zmienić stan usługi na bezstanową? Czy to oznacza, że nie powinienem mieć żadnych zmiennych instancji w klasie? Czy istnieją jakieś wytyczne dotyczące bezstanowej usługi/klasy? Naprawdę mógłbym użyć przykładowego kodu, który ilustruje różnicę między usługą stanową a bezstanową. Przykład: (Czy ta klasa jest stanowa, czy nie?) Class DataToCsvFileGenerator{ private String filePath; prywatne dane zestawu wyników; public String createCsv(ResultSet data){ this.data=data; this.createLocalFile(); this.loadDataIntoFile(); zwróć this.filePath; } private void createLocalFile(){ this.filePath=//... logika tworzenia pliku } private void loadDataIntoFile(){ //funkcja używa this.filePath do ładowania danych } } Zwróć uwagę, że kolejne wywołania funkcji `createCsv()` nie będzie miało wpływu żadne wcześniejsze wywołanie.


title: Jak dobrać świetny zespół roboczy?

text: Właśnie skończyłem pracę magisterską i zaczynam zagłębiać się w świat laboratoriów, czyli uczenie się jak pracują zespoły programistyczne i firmy technologiczne w realnym świecie. Zaczynam projektować ideę własnej usługi lub produktu w oparciu o wolne oprogramowanie, a do zbudowania pomysłu będę potrzebować dobrze połączonego, entuzjastycznego i płynnego zespołu. Mój problem polega na tym, że nie jestem pewien, o jakie umiejętności najlepiej poprosić zespół programistów składający się z 4-5 osób. Mam wielu przyjaciół i znajomych, z którymi pracowałem podczas studiów. Niezbędne z tych, o których myślę, to bardzo zdolni i mądrzy ludzie, z dobrą logiką i bazą programistyczną, chociaż niektórzy z nich mają pewne cechy, które moim zdaniem mogą negatywnie wpłynąć na grupę: brak komunikacji, strach przed debatą nad pomysłami, trudno podać podczas debaty, brak ustrukturyzowanego programowania (testowanie, dobre komentowanie, poprzedni projekt i analiza). Niektórzy z nich mają tę negatywną charakterystykę, ale muszą mieć dużo entuzjazmu, ładne umiejętności pracy (z indywidualnego punktu widzenia) i umiejętność widzenia całego obrazu. Pytanie brzmi: jak wybrać najlepszy zespół do projektu na dużą skalę, z dużą ilością programowania? Jak myślisz, które z tych negatywnych umiejętności są zbyt wpływowe? Co można złagodzić dobrym przywództwem? Jakich dobrych umiejętności należy się spodziewać? Oraz wszelkie inne opinie na temat umiejętności społecznych i programistycznych zespołu programistycznego.


Jakie są najlepsze praktyki dotyczące obsługi wyjątków w aplikacjach n-warstwowych? Aplikacja jest grubym klientem opartym na wzorcu MVVM z platformą .NET.


title: Czy witryna LinqPad cytuje „Zmęczony zapytaniami w przestarzałym języku SQL?” dokładny?

text: Uderzył mnie nagłówek > Masz dość zapytań w przestarzałym SQL? na http://www.linqpad.net/. Jestem twórcą aplikacji N-Tier i nauczyłem się zawodu w firmie, która pracowała z dużą ilością danych, więc biegle posługiwałem się SQL, ale głównie DALami. Moja narzeczona jest programistą SQL, więc miałem też dostęp do pakietu SS/SSAS/SSRS/SSIS. Inaczej niż zespół LinqPad sam piszący przestarzały SQL lub używający tylko PROC do DAL aplikacji, a nie zadań wymagających dużej ilości danych, nie mogę się domyślić, dlaczego zespół LinqPad uważa, że SQL jest przestarzały?


title: W jaki sposób strona internetowa może zostać zhakowana?

text: Wiem, że strony internetowe są hackowane z powodu luźnych końców, ale w jaki sposób są hackowane za pośrednictwem formularza? Czy to dlatego, że właściciele witryn nie zweryfikowali formularza i sposobu, w jaki zostały ustrukturyzowane?


title: Czy odciski palców przeglądarki są realną techniką identyfikacji anonimowych użytkowników?

text: Czy odciski palców przeglądarki są wystarczającą metodą do jednoznacznej identyfikacji anonimowych użytkowników? Co się stanie, jeśli uwzględnisz dane biometryczne, takie jak gesty myszy lub wzorce pisania? Któregoś dnia natknąłem się na eksperyment Panopticlick, EFF działa na odciskach palców przeglądarki. Oczywiście od razu pomyślałem o skutkach dla prywatności i o tym, jak można ją wykorzystać do zła. Ale z drugiej strony można to wykorzystać dla wielkiego dobra, a przynajmniej jest to kuszący problem do pracy. Podczas badania tego tematu znalazłem kilka firm wykorzystujących odciski palców przeglądarki do atakowania oszustw. A po wysłaniu kilku e-maili mogę potwierdzić, że co najmniej jedna duża strona randkowa używa odcisków palców przeglądarki jako jedynego mechanizmu wykrywania fałszywych kont. (Uwaga: odkryli, że nie jest wystarczająco wyjątkowy, aby działać jako tożsamość podczas skalowania do milionów użytkowników. Ale mój mózg programisty nie chce im uwierzyć). Oto jedna firma wykorzystująca odciski palców przeglądarki do wykrywania oszustw i zapobiegania im: http://www.bluecava.com/ Oto dość obszerna lista elementów, których można używać jako unikalnych identyfikatorów w przeglądarce: http://browserspy.dk/


title: Jaki jest sens dwukrotnego inicjowania zmiennej o tej samej wartości?

text: Czytałem "JavaScript Module Pattern: In-Depth" Bena Cherry'ego i miał on przykładowy kod, którego nie do końca rozumiałem. Pod nagłówkiem _Cross-File Private State_ znajduje się przykładowy kod o następującej treści: var _private = my._private = my._private || {} Wydaje się, że to nie różni się od napisania czegoś takiego: var _private = my._private || {} Co się tu dzieje i czym różnią się te dwie deklaracje?


title: czy nowe żądanie zmiany w historyjce użytkownika jest inną historyjką użytkownika

text: Zakończyliśmy historyjkę użytkownika do sprintu. Pod koniec sprintu zażądano nowego dodatku funkcjonalnego dla tej samej historyjki użytkownika. Tutaj historia użytkownika pozostanie taka sama. tj. Jak chcę <> tak, aby <> pozostało takie samo. Jedyną różnicą jest to, że należy wprowadzić nową wartość dodaną. Czy należy to traktować jako nową historyjkę użytkownika do następnego sprintu, czy też jako zaległości? Spełniliśmy gotową definicję historyjki użytkownika, a ta nowa funkcja jest nowym wymaganiem, które nie spowoduje żadnych zmian w definicji historyjki użytkownika. Dodaję przykład, aby było bardziej jasne, weź funkcję, powiedzmy, utwórz profil, w którym użytkownik może zaktualizować swoje imię i nazwisko, adres, numer telefonu, zdjęcie itp. I gotowe. teraz, jeśli klient chce mieć link do Facebooka lub dodać kod kraju do numeru telefonu, czy to zmiana, prośba o nową historię użytkownika?


title: Planowanie przeglądarki plików 3d za pomocą qt. Proszę zasugerować silnik 3d

text: Planuję przeglądarkę plików 3d z możliwością przeglądania plików 3d (zarówno geometria jak i przeglądarka siatki). Chciałbym również umieścić opcję konwersji między geometrią a siatką. Jestem dobrze zorientowany w c++/qt. Ale nowicjusz w dziedzinie programowania 3d. Jaki byłby idealny silnik 3d, jakiekolwiek już istniejące projekty open source, pasujące do moich danych? I dlaczego miałby to być dobry przykład tego, co planuję zrobić?


title: Co zrobić, jeśli nie masz próbek kodu, aby dać potencjalnemu pracodawcy?

text: Co robisz, gdy nie masz żadnych dobrych próbek kodu, które zostały poproszone przez potencjalnego pracodawcę? Lubię uważać się za całkiem zdolnego programistę, ale nie mogę dzielić się żadnym oprogramowaniem, które pisałem dla mojej firmy przez ostatnie kilka lat. Niestety nie udało mi się też znaleźć czasu, aby włożyć dużo pracy w moje osobiste projekty. Zasadniczo nie sądzę, abym mógł znaleźć próbki kodu, które byłyby dobrym odzwierciedleniem moich umiejętności, którymi mógłbym się podzielić. Jakieś pomysły? Z góry dziękuję.


title: Czy koncepcja warstw kodu źródłowego byłaby przydatna?

text: Mówię o czymś w rodzaju warstw w Photoshopie, z wyjątkiem tego, że dotyczą one bezpośrednio kodu źródłowego. Na przykład w pseudokodzie... wymyślanie tego, jak może wyglądać jakiś projekt - powiedzmy program do obliczeniowej dynamiki płynów: [warstwa bazowa] cfdTime runTime(0); poleZmienna U; poleZmienna p; U.inicjalizuj(); p.inicjalizuj(); while (runTime.run()) { U.solve(); p.solve() runTime++; } [warstwa turbulencji] turbulenceModel turbulence; scalar nu(readScalar(turbulence.dictionary("nu")); while (runTime.run()) { turbulence.update(); } [warstwa bazowa + warstwa turbulencji] cfdTime runTime(0); fieldVariable U; fieldVariable p; U.initialize(); p.initialize(); turbulenceModel turbulence; scalar nu(readScalar(turbulence.dictionary("nu")); while (runTime.run()) { U.solve(); p.solve() turbulence.update();runTime++;} Masz pomysł.Oczywiście wiele rzeczy musiałoby zostać wypracowanych.Wszystko zajmuję się programowaniem obiektowym (OOP).Ten pomysł wydaje mi się niezręczną alternatywą dla OOP. .. i nie sądzę, że jest wiele warta... ale pomyślałem, że rzucę to społeczności... po prostu może być w tym coś przydatnego, czego nie do końca widzę. Perspektywa tylko GUI - tworzenie warstw w GUI dla złożonego programowania funkcjonalnego... podczas gdy kod bazowy jest zawsze taki sam. może być przydatna do optymalizacji kodu, być może alternatywą dla #ifdef, od której programiści nie będą uciekać z krzykiem. Lub może to być cała alternatywa dla OOP. Twoje myśli?


title: Jakie pytania do rozmowy kwalifikacyjnej należy zadać „starszym” programistom?

text: Ostatnio otrzymywaliśmy wielu kandydatów na nasze otwarte stanowiska programistyczne od ludzi, których lubię nazywać „starszymi” programistami. Nie podoba mi się określenie „stary”, ponieważ wydaje mi się trochę uprzedzone (zwłaszcza do HR!) i nie oddaje dokładnie tego, co mam na myśli. Jesteśmy firmą, która przede wszystkim zajmuje się rozwojem .NET przy użyciu TDD w środowisku Agile, używamy Gita jako systemu kontroli źródeł, intensywnie korzystamy z narzędzi i projektów OSS, a także przyczyniamy się do nich, jesteśmy silnie nastawieni na przestrzeganie do silnych zasad zorientowanych obiektowo, SOLID, itp., itd., itd. Teraz zwykła lista pytań, które zadajemy, nie wydaje się tak naprawdę dotyczyć kandydatów, którzy są świeżo po szkole, ani nie wydaje się dotyczyć ci „starsi” programiści. Oto jak (luźno) definiuję „starszego” programistę. * Spędzili znaczną część swojej kariery pracując prawie wyłącznie z językami asemblerowymi/maszynymi. * Główne osiągnięcia obejmują pracę wykonaną z systemami TANDEM. * Ma duże doświadczenie z technologiami takimi jak FoxPro i ColdFusion Nie chodzi o to, że jakoś uważamy, że to, co robimy, jest „lepsze” niż to, co oni robią, wręcz przeciwnie, szanujemy tego typu kandydatów i boimy się, że może nam brakować dobrego kandydat. Po prostu bardzo trudno jest dobrze przeczytać kogoś, kto zasadniczo mówi innym językiem niż ty. Komuś takiemu wydaje się trochę dziwne zadanie pytania typu: > Jaka jest różnica między klasą abstrakcyjną a interfejsem? Bo myślę, że prawie nigdy nie poznają odpowiedzi ani nawet tego, o czym mówię. Nie chcę jednak eliminować kogoś, kto mógłby być sam w sobie bardzo dobrym kandydatem i mógłby w końcu nauczyć się tego, co robimy. Ale nie chcę też po prostu zadawać kilku pytań behawioralnych, ponieważ chcę poznać również ich zaplecze techniczne. Czy jestem zbyt naiwny? Czy „starsi” programiści, tacy jak ten, powinni już wiedzieć o takich rzeczach jak TDD, strategie kontroli kodu źródłowego i najlepsze praktyki programowania obiektowego? Jeśli nie, jakie pytania powinniśmy zadać, aby uzyskać dobrą reprezentację na temat tego, czy nadal są w stanie się ich nauczyć i czy są w stanie nadążyć w naszym szybko zmieniającym się środowisku? **EDYTUJ** : Nie interesuje mnie, czy kandydaci spełniający te kryteria są ogólnie zdolni, czy nie, ponieważ już stwierdziłem, że wierzę, że mogą być w 100% zdolni. Bardziej interesuje mnie, jak ocenić ich talenty, ponieważ trudno mi ustalić, jak określić, czy są programistami z klasy A+, czy z programistami z klasy D. Pracowałem z obydwoma.


title: Dokumentuj ogólną architekturę biznesową

text: Chcę udokumentować ogólną architekturę systemu mojej firmy. Chcę uchwycić, w jakim systemie wszystko się zaczyna, do jakich systemów wpływa i dlaczego, i gdzie wszystko się kończy. W ramach tego chcę również zidentyfikować procesy, które umożliwiają przepływ danych z jednego systemu do drugiego, w tym dlaczego i jak. Nie będąc zaznajomionym z dokumentacją na tym poziomie, naprawdę nie wiem od czego zacząć. Chcę, żeby była czytelna, ale też szczegółowa. Aby podać trochę więcej informacji, nie przejmuję się tym, co dzieje się z danymi w każdym systemie, tylko wejściami i wyjściami. Jak mogę to udokumentować?


title: Skąd to jest (pierwotnie)?: „80% kosztów eksploatacji oprogramowania przeznacza się na konserwację”

text: W dokumencie dotyczącym konwencji kodowania w języku Sun Java (tutaj: http://www.oracle.com/technetwork/java/codeconv-138413.html) stwierdza się: „80% kosztów życia oprogramowania przeznacza się na konserwację” Czy ktoś wie, skąd pochodzą te statystyki? Nie wątpię w to twierdzenie, ale mogę tworzyć statystyki również bez atrybucji i chciałbym wiedzieć, skąd to się wzięło, zanim zacznę używać ich jako podstawy do innych stwierdzeń.


title: Różnica między różnymi interfejsami generycznymi kolekcji w C#

text: Od jakiegoś czasu bawię się w C# for Windows i ASP.net MVC. Ale w kilku obszarach nadal nie jestem pewien. Próbuję zrozumieć podstawową różnicę i problemy z wydajnością związane z używaniem i zamianą podobnych rodzajów interfejsów kolekcji generycznej. Jaka jest podstawowa różnica między `IEnumerable<T>`, `ICollection<T>`, `List<T>(Class)`? Wydaje mi się, że używam ich i wymieniam bez żadnych problemów w moich aplikacjach. Czy są jeszcze jakieś podobne kolekcje ogólne, takie jak te, które można zamienić z tymi trzema?


title: Jak skuteczne są „programy gier” w wywiadach?

text: Zajmuję się pisaniem aplikacji biznesowych. Często, z jakiegokolwiek powodu, osoba przeprowadzająca wywiad prosi mnie o napisanie programu, który rozwiąże jakiś problem w rodzaju gry. Uważam, że to nieodpowiednie pytanie z dwóch głównych powodów: 1. Gry często zajmują się konstruktami, które są rzadko używane w tworzeniu biznesu. NP. Tablice wielowymiarowe. Na przykład przechowuj lokalizacje graczy na szachownicy. (Może to tylko ja, ale nigdy nie używam tych rzeczy w biznesie) 2. Moje zwykłe narzędzia, takie jak BL/DL, ORM, a nawet projektowanie samych encji, nie tłumaczą się dobrze. Więc często kończę z jakimś głupkowatym kodem na początek. Jest to szczególnie niewygodne, jeśli osoba przeprowadzająca rozmowę kwalifikacyjną przygląda się twoim powinnościom, aby określić, jak „dobrze kodujesz”. Strasznie niewygodne, bo... no cóż, nie koduję w ten sposób... Nie piszę też gier na życie. Czy używacie ich podczas wywiadów i czy są skuteczne w poznawaniu twórców aplikacji biznesowych?


title: C/C++ Najlepsza długość wcięcia?

text: Czytałem samouczek Vima ( http://www.oualline.com/vim-cook.html#drawing ) i natknąłem się na to: > Jest to bardzo przydatne, jeśli używasz wcięć 4 spacji dla swoich programów C lub C++ > . (Badania na Uniwersytecie Rice wykazały, że jest to najlepszy > rozmiar wcięcia.) Czy jest jakaś prawda w tych badaniach? Uwaga — nie chodziło mi o ognistą wojnę we wcięciu — tylko czy ktoś jeszcze spotkał się z tym badaniem wcześniej? **EDYCJA: @MaR zrobiłem ankietę** http://poll.fm/3d5kg


title: Poprawność kodu (?) Adnotacje dla Javy (i innych języków)?

text: Po napisaniu mojego miliardowego sprawdzania wartości null w kodzie Javy, zacząłem się zastanawiać, dlaczego możliwość sprawdzania argumentów metody null nie została jeszcze wbudowana w Javie. Na przykład w przypadku niektórych metod chcę zgłosić IllegalArgumentException, jeśli niektóre (lub wszystkie) argumenty mają wartość NULL. Byłoby wspaniale, gdybym mógł oznaczyć kod i poprosić kompilator o wygenerowanie walidacji, która wygeneruje informacyjny wyjątek, jeśli walidacja się nie powiedzie. Czy jest już coś w Javie, w którym można określić parametry poprawności dla argumentów metody (np. _int_ musi znajdować się w określonym zakresie lub _Object_ nie może mieć wartości null) i czy kompilator automatycznie generuje kod? W Javie wydaje się, że powinno to być obsługiwane za pomocą adnotacji. (Wydaje mi się, że w C/C++ możesz zdefiniować kilka fajnych makr, które zrobią to za Ciebie.) Podczas wyszukiwania w Internecie tego problemu, zauważyłem odniesienie do JSR 305, ale wydaje się, że jest to ukierunkowane na użycie z narzędziami IDE, a nie z Javą kompilator. Domyślam się, że to już istnieje w innych językach programowania. Chciałbym więc usłyszeć o tym, jak to może działać w tych językach, a także o tym, co może istnieć (lub pojawiać się) w Javie.


title: Zbuduj jeden, aby wyrzucić vs efekt drugiego systemu

text: Z jednej strony jest rada, która mówi „Zbuduj jeden do wyrzucenia”. Dopiero po skończeniu oprogramowania i obejrzeniu produktu końcowego zdajemy sobie sprawę, co poszło nie tak w fazie projektowania i rozumiemy, jak naprawdę powinniśmy to zrobić. Z drugiej strony istnieje „efekt drugiego systemu”, który mówi, że drugi system tego samego rodzaju, który został zaprojektowany, jest zwykle gorszy od pierwszego; istnieje wiele funkcji, które nie pasowały do pierwszego projektu i zostały wepchnięte do drugiej wersji, co zwykle prowadzi do nadmiernie skomplikowanych i nadmiernie zaprojektowanych. Czy nie ma tu jakiejś sprzeczności między tymi zasadami? Jaki jest właściwy pogląd na problemy i gdzie przebiega granica między tymi dwoma? Wierzę, że te „dobre praktyki” zostały po raz pierwszy promowane w przełomowej książce _Mitical Man-Month_ autorstwa Freda Brooksa. Wiem, że niektóre z tych problemów są rozwiązywane przez metodologie Agile, ale w głębi duszy problemem jest to, że zasady nadal obowiązują; na przykład nie dokonalibyśmy ważnych zmian w projekcie 3 sprinty przed uruchomieniem.


title: Model współdzielony MVC różne wymagane pola na różnych typach

text: Mam model o nazwie Car iw zależności od tego, jaki typ samochodu użytkownik wybierze, widok prezentuje się różnie. Na przykład użytkownik wybiera z siatki różnych samochodów i w zależności od tego, czy jest to Volvo, Kia czy Ford, widok musi umożliwiać edycję różnych pól. Na przykład w przypadku Volvo kolor można edytować i jest on obowiązkowy, ale w przypadku Kia tak nie jest. Chciałbym użyć jednej klasy Car do powiązania widoku, ale chcę, aby walidacja po stronie klienta pobierała wymagane pola na podstawie typu samochodu. Chcę przejść tylko do jednej metody akcji dla aktualizacji, jaki jest dobry sposób na podejście do tego problemu...? utworzyć klasę bazową i dziedziczyć z niej? czy to da mi problemy z wiązaniem ..?


title: Czy istnieje pojęcie „pseudoimplementacji” w tworzeniu oprogramowania?

text: Szukam etykiety opisującej praktykę korzystania z metod obliczeniowych opartych na ludziach lub innych sposobów „fałszowania” algorytmu w celu szybkiego uruchomienia produktu lub wersji demonstracyjnej bez poświęcania czasu na opracowanie technicznej/skalowalnej /rozwiązanie analityczne? Np. użycie Amazon Turk do policzenia pustych stolików w restauracji. Chcę również dowiedzieć się więcej na ten temat, ale nie wiem, czego szukać. Obliczenia oparte na ludziach to tylko jedna metoda, interesuje mnie ogólna idea pseudoimplementacji. Jakieś pomysły, polecana lektura? Dziękuję


title: Czy przegląd kodu powinien być wykonywany przed czy po testach jednostkowych?

text: Dyskutuję z kolegą o tym, kiedy przeprowadzić przegląd kodu – przed lub po testach jednostkowych. Jaka jest najlepsza praktyka? Niektóre czynniki, które możemy wziąć pod uwagę (może być ich więcej): * Wielkość zmiany kodu - duża zmiana oznacza, że więcej zmian będzie wynikać z przeglądu kodu. Jeśli te zmiany są duże, niż gdyby UT było przed przeglądem kodu, będziesz musiał powtórzyć większość swoich UT ponownie. * Czas potrzebny na wykonanie testu jednostkowego * Czy jest to nowa funkcjonalność czy naprawa błędu?


title: Jak poprawnie połączyć przeciążone funkcje?

text: Zakładając, że masz funkcje, które przyjmują coraz większą liczbę opcjonalnych parametrów (i pseudojęzyk, który nie dopuszcza opcjonalnych parametrów i dowolnej liczby parametrów) w następujący sposób: funkcja doStuff(Param a) funkcja doStuff(Param a, Param b) funkcja doStuff (Param a, Param b, Param c) Jaki jest dobry sposób na zjednoczenie ich w jednym wywołaniu? Mogę sobie wyobrazić dwa projekty: Przejść przez wszystko: funkcja doStuff(Param a) doStuff(a, defaultB) funkcja doStuff(Param a, Param b) doStuff(a, b, defaultC) funkcja doStuff(Param a, Param b, Param c ) // magia idzie tutaj * Plusy: Niewiele powielania kodu, łatwa zmiana pojedynczego parametru domyślnego. * Minusy: Wiele wywołań funkcji może powodować, że Stacktrace będą trudniejsze do odczytania lub bezużyteczne. Lub bezpośrednio wywołaj funkcję „ostatnią”: funkcja doStuff(Param a) doStuff(a, defaultB, defaultC) funkcja doStuff(Param a, Param b) doStuff(a, b, defaultC) funkcja doStuff(Param a, Param b, Param c) // magia idzie tutaj * Plusy: Niewiele wywołań funkcji, nie martw się, jeśli do łańcucha zostanie dodana nowa funkcja. * Minusy: Dużo powielania kodu, zwłaszcza wartości domyślnych. O czym nie pomyślałem?


title: Pomoc w wyborze między dwiema książkami C#

text: > **Possible Duplicate:** > Jakie książki poleciłbyś komuś, kto chce nauczyć się C# > programowania? Zajmuję się rozwojem .Net, jestem prawie początkującym programistą, z wyjątkiem zajęć wprowadzających, które wziąłem na studiach i po prostu bawię się w domu. Zamierzam oglądać filmy online, aby dołączyć do książki. Zdecydowałem się na dwie książki, **Learning C# 3.0** autorstwa O'Reilly'ego lub **Beginning Visual C# 2010** autorstwa Wroxa. Bardziej podoba mi się książka O'Reilly, ma po prostu smaczniejszy i ładniejszy styl pisania, ale obejmuje tylko C# 3.0, a książka Wrox oczywiście obejmuje C# 4.0. Czy to zły pomysł, aby przejść z C# 3.0? Czy będę tracić wiele rzeczy? Wszelkie porady będą bardzo mile widziane.


title: Co Bill Gosper miał na myśli, mówiąc, że struktura danych to tylko głupi język programowania?

text: Jest cytat Ralpha Williama Gospera, Jr, który mówi: > Struktura danych jest po prostu głupim językiem programowania. Co przez to miał na myśli? Niestety wszystko, co mogę znaleźć w Google na ten temat, to nieustanne kopiowanie/wklejanie samego cytatu, bez żadnego kontekstu.


title: Czy istnieje sposób na bardziej elegancką obsługę zagnieżdżonych kolekcji?

text: Moje pytanie jest raczej pytaniem projektowym. W moim programie doszedłem do struktury danych, która wygląda mniej więcej tak: private ConcurrentHashMap<A, ConcurrentHashMap<B, ConcurrentHashMap<Integer, C>>> services = new ConcurrentHashMap<A, ConcurrentHashMap<B, ConcurrentHashMap<Integer, C>> >(); Czy istnieje sposób na bardziej elegancką obsługę takiej struktury danych? Dziękuję! **edytuj** : A, B i C to klasy biznesowe. Instancja A „może mieć” (jako skojarzenie) wiele B, a B „może mieć” wiele odwzorowań Integer-C.


title: Czy możliwe jest posiadanie jednej bazy kodu dla graficznego interfejsu użytkownika i aplikacji internetowej?

text: Wymagany interfejs użytkownika jest dość prosty; w zasadzie dwa stoły, które „oddziałują ze sobą”, np. niektóre wiersze w jednej tabeli są podświetlane po kliknięciu wiersza w drugiej, a także może panel z wykresami. Czy możliwe jest posiadanie (w dużej mierze) jednej bazy kodu dla aplikacji komputerowej i aplikacji internetowej implementującej ten interfejs? Z kilku powodów dobrze byłoby mieć obie wersje, ale nie chciałbym dwukrotnie zaimplementować GUI. Szczegóły mojego konkretnego przypadku są następujące: 1. Jest to problem badawczy naukowy, więc nie mam ścisłych ograniczeń co do narzędzi i stylu kodowania (lub użytkowników!). Z drugiej strony mam sporo ograniczeń czasowych. 2. Musi działać na samej JVM, ale każdy język/framework byłby mile widziany (Java, Groovy, Scala, Clojure itp.). 3. Nie ma trwałego stanu, tj. nie ma ścisłej potrzeby współdzielonej bazy danych lub jakiejkolwiek części serwera. 4. Byłbym gotów przejść przez kilka obręczy projektowych, aby to zadziałało (przez obręcze projektowe mam na myśli niekonwencjonalną architekturę aplikacji). Czy to kompletnie szalone, nawet myśleć o czymś takim? Jeśli nie, jakie byłyby narzędzia, aby to zrobić?


title: Chcesz stworzyć stronę internetową, która może mieć niestandardowy GUI i bazę danych na użytkownika

text: Opracowałem bazę danych MS Access dla firmy do śledzenia danych dotyczących produkcji określonego towaru. Ma wiele tabel, formularzy, raportów itp. Wszystkie zostały wykonane zgodnie z życzeniem użytkownika i przypominają system poprzednio używany przez użytkowników, głównie drukowane arkusze i skoroszyty programu Excel. Stworzyło to centralną lokalizację dla wszystkich informacji i pozwoliło firmie na porównywanie danych w nowy sposób. Teraz chcę to zrobić dla innych firm, ale chciałbym przełączyć to na aplikację internetową. Oto moje pytanie. Jaki jest najlepszy sposób na tworzenie unikalnych rozwiązań dla pojedynczych firm, które mogą mieć około 100 użytkowników każda? Chciałbym stworzyć jedną witrynę, która służyłaby wszystkim stronom, ale to zrujnowałoby konfigurowalny charakter tego, co rozwijam. Uwielbiam możliwość tworzenia raportów, arkuszy Excela, pdf, wykresów itp. z dostępem, ale mam dość polegania na oprogramowaniu moich klientów, serwerach itp. Mam pewne doświadczenie z WAMP, ale jestem znacznie lepszy w VBA. Z PHP nieźle sobie radziłem, a kilka lat temu orientowałem się w JavaScript. Staram się też zdecydować, czy wybrać WAMP, czy LAMP, jeśli sieć jest najlepszym wyborem. Ponadto, czy powinienem spróbować skonfigurować jedną witrynę dla wszystkich użytkowników, która po zalogowaniu przejdzie do stron specyficznych dla firmy, czy też poszczególnych witryn dla każdej firmy? Czy powinienem hostować czy korzystać z usługi?


title: Kiedy działać na przeszkodach?

text: Podczas spotkania każdy członek zespołu odpowiada na trzy pytania: 1. Co robiłeś od wczoraj? 2. Co planujesz dzisiaj zrobić? 3. Jakieś przeszkody/przeszkody? Każda przeszkoda/przeszkoda zidentyfikowana podczas tego spotkania jest dokumentowana przez Scrum Mastera i pracuje nad rozwiązaniem poza tym spotkaniem. Na tym spotkaniu nie będą miały miejsca żadne szczegółowe dyskusje. W ostatnim pytaniu stwierdza się, że „Każda przeszkoda/przeszkoda zidentyfikowana podczas tego spotkania jest udokumentowana i pracuje nad rozwiązaniem poza tym spotkaniem”. Z mojego doświadczenia wynika, że prawie każda „przeszkoda” prowadzi do poślizgu. Jak więc Ty, przeciętny Scrum Master, zareagowałbyś na taki poślizg? Czy zakładasz, że tylko jednodniowy poślizg w dwu-trzytygodniowym sprincie jest normalny i masz nadzieję na najlepsze? Czy zakładasz, że trzydniowy poślizg to powód do przydzielenia pomocy? Jaki byłby normalnie „Twój” poziom tolerancji dla poślizgu? Czy masz formułę, której się trzymasz (np. jeśli poślizg jest spóźniony o 20%, automatycznie przydzielasz kogoś do pomocy)? Chciałbym tylko lepiej zrozumieć tę trzecią zasadę.


title: Jak sformułować historie użytkowników, które zostały oddzielone od większej epopei?

text: Mam epopeję polegającą na stworzeniu aplikacji mobilnej, która pobiera dane użytkownika, które wcześniej stworzyli w aplikacji internetowej i działa na nich lokalnie. Wydaje się logiczne, aby podzielić epos w następujący sposób; 1. Aplikacja mobilna działająca na lokalnych, podrobionych danych 2. Aplikacja mobilna pobierająca dane z api aplikacji webowej, ale bez uwierzytelnienia 3. Aplikacja mobilna pobierająca dane z api aplikacji webowej _z_ uwierzytelnianiem Trudno mi napisać te historie . 1 to scenariusz, który nigdy nie zdarzyłby się użytkownikowi końcowemu, nie miałby żadnych danych lokalnych, gdyby nie zostały wcześniej pobrane. Jak bym to sformułował? Jeśli 2 to „Jako użytkownik chcę, aby moje urządzenie mobilne działało na [podmiotach], które wcześniej utworzyłem za pomocą interfejsu internetowego”, to jakie byłoby 3? 'Jako użytkownik chcę, aby moje urządzenie mobilne działało na [podmiotach], które wcześniej utworzyłem za pomocą interfejsu internetowego _ufając, że zostały one bezpiecznie pobrane_ '??


title: Wzorce integracji wyszukiwania (np. Lucene) z aplikacją komputerową .NET

text: Tworzę aplikację desktopową .NET (WinForms+Local PostgreSQL Server) do zarządzania sprzedażą w małym sklepie. Chcę zintegrować funkcje wyszukiwania Lucene z modułem „Wyszukiwarka produktów” mojego oprogramowania. Czy istnieją dobre wzorce integracji takich bibliotek wyszukiwania informacji z istniejącymi aplikacjami? Uwaga: aplikacja jest wciąż w fazie rozwoju i zawsze mogę zmodyfikować architekturę, aby zintegrować Lucene. Uwaga : Wiem, jak korzystać z Lucene i stworzyłem prostą aplikację demonstracyjną, aby przetestować jej możliwości. Szukam tylko wzorców, które integrują taką funkcjonalność wyszukiwania z aplikacjami desktopowymi. Uwaga : Głównym wymaganiem integracji jest również umożliwienie użytkownikowi szybkiego wyszukiwania produktów/marek/itp. oraz udostępnienie systemu autouzupełniania google w interfejsie użytkownika.


title: Utwórz bazę danych dla tabel bazy danych

text: Pracuję nad projektem, w którym muszę dać użytkownikom możliwość budowania własnych tabel, każdy użytkownik może stworzyć więcej niż jedną tabelę. (typ wszystkich danych to ciąg). Użytkownik może utworzyć tabelę i określić, jakie kolumny chce w niej umieścić. Jak najlepiej to zrobić: 1. dynamicznie tworzyć bazy danych 2. mieć tabelę dla tabel (klucz, wartość ...). 3. coś innego Kolejna kwestia to: czy lepiej podzielić moją bazę danych na dwie, tak aby jedna była do użytku wewnętrznego (użytkownicy, konta,....), a druga do tabel użytkowników (lub do tabeli) tabel)?


title: najdłuższa lista słów z pasującymi literami początkowymi i końcowymi

text: Mój przyjaciel dał mi problem, który, jak mówi, jest łatwy, ale nie mogę znaleźć dobrego algorytmu, który mógłby to zrobić. Dostaniesz 100 losowych angielskich słów. Musisz znaleźć najdłuższy ciąg słów, w którym ostatnia litera w jednym słowie odpowiada pierwszej literze w następnym słowie. Każdego słowa możesz użyć tylko raz. Na przykład, jeśli podano Ci słowa "kot", "pies", "tamto", najdłuższym ciągiem, jaki możesz utworzyć, będzie "kot -> to". Jeśli podano ci słowa „mysz”, „łoś”, „jednorożec”, najdłuższy ciąg, jaki możesz utworzyć, będzie tylko jednym słowem (ponieważ żadne z tych słów nie łączy). Jeśli podano słowa „ptak”, „danie”, „harb”, najdłuższym ciągiem, jaki można utworzyć, byłoby „harb -> ptak -> danie” (lub „danie -> harb -> ptak” lub „ptak - > danie -> harb"). Wpadłem na pomysł zamodelowania tego jako ukierunkowanego grafu cyklicznego. Każdy węzeł byłby po prostu słowem, z wierzchołkami przechodzącymi do każdego słowa/węzła, który zaczynał się na literę, którą to słowo się kończy. +-------+ \ +------+ | kot |-----------| że | +-------+ / +------+ | | \|/ | +-------+ / | | |--------------+ +-------+ \ Problemem wydaje się być wyszukiwanie najdłuższej ścieżki, czyli NP-trudne. Czy jest na to lepszy sposób? A może jakiś algorytm aproksymacyjny, którego można by użyć? A może jakiś sposób na wykorzystanie walorów języka angielskiego w celu zmniejszenia przestrzeni wyszukiwania?


title: Web Framework dla Systemu Zarządzania Oświatą

text: _Pamiętaj, że przenoszę moje oryginalne pytanie ze StackOverflow do tego miejsca, ponieważ myślę, że jest ono bardziej na temat tutaj _ Pracuję nad pomysłem i przejdę do krótkiego przeglądu, ale moje pytanie brzmi: Co jakie są dobre frameworki internetowe w takiej sytuacji? Mam pewne doświadczenie w następujących językach: * C# * Python Mam znacznie większe doświadczenie w C# niż w Pythonie, jednak spodziewam się nowych rzeczy. Mój pomysł jest taki, całkowicie internetowy, zorientowany na społeczność system zarządzania edukacją, który koncentruje się na ułatwianiu codziennego życia uczniom i nauczycielom. Uczniom zapewni scentralizowane miejsce do odrabiania prac domowych, nauki do testów i wzmacniania pojęć nauczonych wcześniej w klasie. Nauczycielom zapewni to scentralizowane miejsce do obsługi zadań, obecności, prac domowych, testów i wszystkich innych głównych elementów zarządzania klasą. Wszystko to w sposób zorientowany na społeczność. Wszystko, co robi nauczyciel, jest udostępniane i otwarte na konstruktywną krytykę, pozwalając innym nauczycielom na wykorzystanie ich zadań/testów, a uczniom lub innym nauczycielom na komentowanie, ocenianie i krytykowanie ich zadań. Sprzyja to środowisku otwartości, które pozwoli nauczycielowi skupić się na nauczaniu, a uczniowi na uczeniu się. I ta społeczność nie byłaby ograniczona do jednej szkoły czy okręgu szkolnego, ten system byłby całkowicie niezależny od szkoły. _Zwróć też uwagę, że nie mam problemu z konstruktywną krytyką tego pomysłu, jednak wolałbym, aby ten post był bardziej skoncentrowany na moim pytaniu._ Trochę zbadałem następujące opcje: 1. Django 2. ASP.NET 3. Ruby on Rails 4. Silverlight (1) Mam zainstalowane Django i bawiłem się nim trochę, naprawdę podoba mi się łatwość konfigurowania baz danych i to, jak całkowicie obsługuje bazę danych. Naprawdę nie wiem, jak z niego korzystać bardzo dobrze i nie do końca rozumiem paradygmat Model-View-Controller (?) jeszcze dla niego, ale nie myślałem o tym zbyt wiele. Podoba mi się również fakt, że używa Pythona. (2) Naprawdę nie lubię programu Visual Studio do tworzenia w ASP.NET, nienawidzę sposobu, w jaki działa projektant stron internetowych, a po prostu wydaje mi się to niezgrabne i stare. Podoba mi się jednak część programistyczna po stronie serwera. Nie podoba mi się, jak drogie jest ASP.NET i ogólnie Visual Studio, nawet jeśli dostanę go teraz za darmo za pomocą DreamSpark (3), nie byłem w stanie wiele z tym eksplorować, nie mogłem dostać Railsów (lub może Ruby) poprawnie zainstalowany. Najpierw zainstalowałem go w RadRails i to nie zadziałało, więc odinstalowałem RadRails, a następnie zainstalowałem najnowszą wersję Ruby z oficjalnego Instalatora Windows, a następnie zainstalowałem Ruby on Rails przez gem, a nawet po tym wszystkim nadal nie działa, więc Zainstalowałem Netbeans i próbowałem go tam użyć, ale nadal nie działało (4) W pewnym stopniu lubię Silverlight, bawiłem się tym najbardziej, jest bardzo podobny do WPF (którego używałem najczęściej) w na wiele sposobów, ale nie podoba mi się, jak działa łączność z bazą danych, przynajmniej w porównaniu z Django. Nie podoba mi się też, jak drogie jest wszystko z Microsoftem, nawet jeśli na razie dostaję to za darmo z DreamSpark. **Chciałbym usłyszeć kilka sugestii od doświadczonych twórców stron internetowych, co powinienem użyć i dlaczego, a przynajmniej jakie są dobre opcje dla mojego scenariusza**


title: Utwórz substytut bazy danych środowiska demonstracyjnego offline

text: Chciałbym wiedzieć, czy istnieje najlepsza praktyka tworzenia środowisk demonstracyjnych, która zastępuje interakcję bazy danych innymi formami zasobu, tj. tworzenie plików .json zawierających dane, które rzekomo zostały zwrócone z wywołania webservice. Chciałem wiedzieć, czy istnieje już standardowy sposób uzyskania tego samego wyniku. Dziękuję


title: Bardziej elegancki sposób na uniknięcie trudnego kodowania formatu pliku CSV?

text: Wiem, że to trywialny problem, ale czuję, że może to być bardziej eleganckie. Więc muszę zapisywać/odczytywać pliki danych dla mojego programu, powiedzmy, że na razie są to pliki CSV. Mogę zaimplementować format według własnego uznania, ale być może będę musiał później zmienić ten format. Najprostszą rzeczą do zrobienia jest coś takiego jak out.write(For.getValue()+","+bar.getMinValue()+","+fi.toString()); Łatwo to napisać, ale oczywiście jest to winne trudnego kodowania i ogólnego problemu z „magiczną liczbą”. Format jest zakodowany na stałe, wymaga przeanalizowania kodu w celu ustalenia formatu pliku, a zmiana formatu wymaga zmiany wielu metod. Zamiast tego mógłbym mieć moje stałe określające lokalizację, w której chcę, aby każda zmienna została zapisana w pliku CSV, aby usunąć niektóre „magiczne liczby”; następnie zapisz/załaduj do tablicy w lokalizacji określonej przez stałe: int FOO_LOCATION=0; int BAR_MIN_VAL_LOCATION=1; int FI_LOCATION=2 int NUM_ARGUMENTS=3; String[] outputArguments=nowy String[NUM_ARGUMENTS]; argumenty wyjściowe[FOO_LOCATION] = foo.getValue(); argumenty wyjściowe[BAR_MIN_VAL_LOCATION] = bar.getMinValue(); outptArguments[FI_LOCATOIN==fi.toString(); writeAsCSV(outputArguments); Ale to jest... bardzo gadatliwe i wciąż trochę brzydkie. Ułatwia przeglądanie formatu istniejącego CSV i łatwą zamianę lokalizacji zmiennych w pliku. Jeśli jednak zdecyduję się dodać dodatkową wartość do csv, muszę nie tylko dodać nową stałą, ale także zmodyfikować metody odczytu i zapisu, aby dodać logikę, która faktycznie zapisuje/odczytuje argument z tablicy; Nadal muszę znaleźć każdą metodę przy użyciu tych zmiennych i zmienić je ręcznie! Jeśli używam wyliczeń Javy, mogę to nieco wyczyścić, ale prawdziwy problem nadal występuje. Poza jakimś rodzajem programowania funkcyjnego (a wewnętrzne klasy javy są zbyt brzydkie, aby można je było uznać za funkcjonalne) nadal nie mam oczywistego sposobu na jasne wyrażenie, jaka zmienna jest powiązana z każdym stałym brakiem pisania (i utrzymywania) jej w metodach odczytu/zapisu . Na przykład nadal muszę gdzieś napisać, że FOO_LOCATION określa lokalizację foo.getValue(). Wydaje się, że powinien istnieć ładniejszy, łatwiejszy w utrzymaniu sposób na podejście do tego? Nawiasem mówiąc, obecnie pracuję w javie, jednak koncepcyjnie interesuje mnie podejście do projektowania niezależnie od języka. Jakaś biblioteka w javie, która wykonuje całą pracę za mnie, jest zdecydowanie mile widziana (chociaż może okazać się bardziej kłopotliwe, aby uzyskać pozwolenie na dodanie jej do bazy kodu, niż po prostu szybko napisać coś ręcznie), ale tak naprawdę proszę o więcej jak napisać elegancki kod, jeśli musiałeś to zrobić ręcznie.


title: Wydajność funkcji anonimowej - setTimeout

text: Według Gregory Baker i Erika Arvidssona (Google), utworzenie nazwanej funkcji, a następnie przekazanie jej do setTimeout jest w rzeczywistości szybsze niż tworzenie funkcji anonimowej (odnośnik: Optymalizacja kodu JavaScript -> Unikanie pułapek z domknięciami): > Tworzenie domknięcia jest znacznie wolniejsze następnie tworzenie funkcji wewnętrznej > bez domknięcia i znacznie wolniej niż ponowne użycie funkcji statycznej. Na przykład > > <snip> function alertMsg() { var msg = 'Wiadomość do alertu'; alert(wiadomość); } > jest wolniejszy niż: function setupAlertTimeout() { window.setTimeout(alertMsg, 100); } W moich testach wydaje się, że nie ma żadnej znaczącej różnicy (tutaj jsPerf), więc dlaczego twierdzą, że tworzenie całej nazwanej funkcji jest szybsze niż po prostu tworzenie funkcji anonimowej? EDYCJA: zauważ, że odnoszę się konkretnie do dwóch ostatnich przykładów, pierwszy został usunięty dla jasności.


title: Jak mogę zainicjować społeczność programistów w mojej szkole?

text: Jestem studentem Uniwersytetu Południowej Florydy, który jest sfrustrowany środowiskiem edukacyjnym w programie informatyki. W tej chwili biorę "Projektowanie programu". Powinienem nauczyć się organizować mój kod źródłowy w funkcje i moduły, aby moje programy były czytelne i łatwe do utrzymania; zamiast tego uczę się o tablicach i rekurencji w C. W następnym semestrze muszę zaliczyć „Projektowanie zorientowane obiektowo”, którego uczy się w C++ ( _drżenie_.) Dwa lata temu zakochałem się w programowaniu i od tamtej pory nauczyłem się tyle, ile mogłem. Perspektywa kolejnych zajęć z C++ nudzi mnie prawie do łez. Z tego powodu pomyślałem, że założę klub programistyczny, aby poznać podobnie ambitnych studentów, uczyć się nowych języków, dyskutować na tematy związane z tworzeniem oprogramowania i pracować z innymi programistami studentów. Jednak zaczynam zdawać sobie sprawę, że może nie być innych studentów, którzy podzielą się moim doświadczeniem w tworzeniu oprogramowania. Nie jest to spowodowane brakiem motywacji, ale brakiem możliwości: znam tylko jedną inną klasę programowania („Języki programowania”) i żadnych zajęć z tworzenia oprogramowania w świecie rzeczywistym. Wszyscy inni mają jedynie doświadczenie w pisaniu trywialnych skryptów w C i C++. Zdałem sobie sprawę, że jeśli chcę pracować z innymi programistami studentów, będę musiał ich sam przeszkolić. Teraz planuję zrobić z klubu bootcamp rozwoju oprogramowania, ucząc członków, jak tworzyć oprogramowanie przy użyciu nowoczesnych narzędzi i języków. Oczywiście rozpoczęcie nieoficjalnego kursu rozwoju oprogramowania jest monumentalnym zadaniem z wieloma możliwymi podejściami. Moje pytanie do Ciebie, drogi czytelniku, brzmi: **Jaki mam plan ataku?** Czy powinienem * sam wykładać klub, próbując zrównoważyć pracę w klubie z pracą domową? * poprosić wydział CS o nauczanie na tematy w zakresie ich wiedzy, które mogą być mniej niż istotne dla członków? * spróbuj znaleźć sympatycznego, doświadczonego programistę w szkole lub poza nią, który może podzielić się moim obciążeniem pracą? * pokaż wykłady wideo (z MIT OpenCourseWare, Google Tech Talks itp.)? * prowadzić praktyczne warsztaty programowania? * zadać pracę domową? * Zrób coś innego?


title: Lokalne wartości funkcji: zmienna używana tylko w jednej funkcji

text: W OOP **zakres statyczny** oznacza, że zakres jest połączony z klasą, a **zakres instancji** jest połączony z określoną instancją klasy. Niektóre języki obsługują **statyczne wartości lokalne** , które umożliwiają zachowanie wartości z jednego wywołania funkcji do drugiego, ale nadal w zakresie statycznym. Jak możesz wywnioskować z innych moich postów tutaj, możesz powiedzieć, że jestem wielkim fanem **enkapsulacji**. Czasami używam pewnej zmiennej **instancji** w ramach klasy, **tylko w ramach jednej metody**. Np. flaga wskazująca, czy dana metoda została już wywołana. Moją konwencją (zgodnie z dobrymi standardami) jest umieszczanie tych zmiennych tuż przed funkcją, blisko ich użycia. Idealnie byłbym w stanie umieścić je **w zakresie funkcji**. Podążając za schematem nazewnictwa statycznych zmiennych lokalnych, nazwijmy ten hipotetyczny zakres **funkcjami lokalnymi**. Darien przeredagował to bardzo wyraźnie w komentarzu: > Ach, więc to, czego naprawdę chcesz, to coś poza prywatną ochroną, > która jest tak ściśle chroniona, że jest widoczna tylko dla jednej metody > w jednej instancji. Teraz wiem, że zgodnie z zasadą pojedynczej odpowiedzialności można powiedzieć, że ta metoda i powiązane z nią zmienne powinny najprawdopodobniej zostać podzielone na oddzielną klasę. Aby to zweryfikować - i wzywam was do zrobienia tego samego - przejrzałem kilka losowych plików kodu i szybko znalazłem pliki źródłowe (nawet <100 wierszy), w których taka 'funkcja lokalna' mogłaby być użyta. W rzeczywistości C# oferuje rozwiązanie tego problemu dla jednego wspólnego scenariusza po wyjęciu z pudełka. Właściwości zaimplementowane automatycznie ukrywają pole zapasowe. Ten pomysł może być naciągany, ale wydaje mi się, że miałby sens. Czy ktoś zna jakiś język, który to wspiera?


title: Nie rozumiem problemu z zatrzymaniem

text: Właśnie natknąłem się na odpowiedź na inne pytanie, które odnosi się do problemu zatrzymania. Zaczyna od tego fragmentu: def halts( code_block ): # Jakiś magiczny kod def whistler(): while halts(whistler): sys.whistle( 1 ), a następnie wyjaśnia, w jaki sposób procedura `halts` nie może być poprawnie zdefiniowana, ponieważ zasadniczo się kończy się logicznie równoważne z „to zdanie jest fałszywe”. Poza składnią w stylu Pythona, jest to w zasadzie standardowe wyjaśnienie problemu zatrzymania i nigdy nie rozumiałem tej koncepcji. Za każdym razem, gdy patrzę na tego typu przykład, myślę „ale dlaczego w ogóle ktokolwiek miałby podchodzić do problemu w ten sposób?” Gdybym chciał określić trudną właściwość fragmentu kodu, taką jak odpowiedź na pytanie, czy się zatrzymuje, nie ma mowy, żebym umieścił analizę _w kodzie, który ma być analizowany!_ Po pierwsze, prowadzi to do sprzeczności, takich jak ten przykład, a po drugie, dodanie kodu analizy zmienia charakter analizowanej rzeczy. Prawie na pewno szukałbym odpowiedzi na to pytanie za pomocą narzędzi zewnętrznych, a nie wewnętrznych. Więc tak, rozumiem, że nie ma sposobu na napisanie poprawnej implementacji `halts` w powyższym przykładzie. Ale ograniczmy się wyłącznie do sfery kodu, który faktycznie da się napisać poprawnie, a nie do hipotetycznych. Jaki jest przykład kodu, który faktycznie można napisać i wykonać, dla którego nie można określić za pomocą zewnętrznej analizy, czy kod zakończy się w nieskończonej pętli, czy też się zakończy?


title: Jak ważne jest dokończenie projektów?

text: Jestem studentem (jeszcze nie chodzę na uniwersytet) i od około 5 lat zajmuję się programowaniem. W tym czasie przemykałem się od języka do języka, od API do API i od projektu do projektu. Próbowałem postawić się na jednej rzeczy, ale tracę zainteresowanie. Cały mój komputer jest pełen w połowie ukończonych projektów (i co najmniej cztery razy więcej zostało sformatowanych z mojego dysku). Zaczynam się zastanawiać, czy moja niższa motywacja do programowania dla zabawy (jest to jedna z czynności, które naprawdę lubię) wynika z tego, że nigdy nie dostaję skończonego projektu na końcu. Nie mogę powiedzieć, czy mam po prostu zbyt otwarte cele, czy po prostu niski okres uwagi. Próbowałem zrobić kilka mniejszych projektów tylko po to, żeby je dokończyć, ale w ogóle mnie nie interesują. Czy to może być przyczyną mojego spadku motywacji? Ponadto, kiedy składam podanie o pójście na studia (i, miejmy nadzieję, w przyszłości, pracę w oprogramowaniu), czy może to stanowić problem? **Podsumowując:** _Jak ważne jest ukończenie projektów pobocznych/hobbystycznych, czy to związanych z karierą, motywacją, czy edukacją?_


title: Nauka MFC: przed 2010 r. w porównaniu z 2010 r. i później

text: Najpierw trochę tła: programuję od około 12 lat. Jestem średniozaawansowany, aby przejść do C# i kilku innych zarządzanych języków, ale nigdy nie zadzierałem z niczym natywnym. Rozumiem koncepcje, po prostu nigdy nie miałem czasu zagłębić się w C/C++ i tym podobne. Obecnie jestem zapisany na kurs Game & Simulation Development w DeVry, który dał mi dostęp do VS2010 (Wreszcie!). Po zabawie z nim zauważyłem, że domyślne szablony dla MFC są… cóż, poza słowami. (W dobry sposób. - Odnosząc się do kreatorów, które generują dla Ciebie interfejs podobny do VS lub Office.) Teraz, gdy zobaczyłem, co jest możliwe dzięki MFC, chciałbym się nauczyć, jak go używać do tworzenia niesamowitych narzędzi, ale nie wiem od czego zacząć. Samouczki MSDN są prawie bezużyteczne i powiedziano mi, że książka Ivora Hortona VC ++ 2010 jest najlepsza, ale wydaje się, że nie bierze pod uwagę (przynajmniej dla mnie w oparciu o bardziej złożony interfejs użytkownika) dodaną złożoność z tym, co generują nowi kreatorzy. Tak więc naprawdę mam 2 pytania: Pierwsze, czy to, czego naucza jego książka, jest ogólnie wystarczające dla MFC? To założyłoby, że „złożoność”, którą postrzegam, to tylko zimne stopy. Po drugie, czy ktoś zna dobry zasób, aby dowiedzieć się, jak pracować z MFC, które używają nowych interfejsów VS i Office? Dzięki z góry. **AKTUALIZACJA** : Wygląda na to, że większość z was zdecydowanie sprzeciwia się używaniu MFC, więc dodam trochę do tego pytania. Powodem, dla którego chcę użyć MFC, jest to, że interfejs podobny do Visual-Studio wydaje się bardzo wydajnym sposobem rozmieszczenia wielu narzędzi, takich jak widok właściwości i tym podobne. Kreator MFC w VS2010 domyślnie daje mi to wszystko. Moim ostatecznym celem jest stworzenie aplikacji podobnej do GameMakera, ale z interfejsem podobnym do VS. (Projekt ulepszeń osobistych; wiem, że zostało to zrobione na śmierć). Czy w takim razie istnieje sposób na utworzenie aplikacji powłoki podobnej do programu Visual Studio bez MFC (może przy użyciu Qt, a nawet powłoki VS2008)?


title: Opcje dla głównego programisty, który woli programować od prowadzenia?

text: Na początku tego roku awansowałem na stanowisko głównego programisty po tym, jak główny programista naszego zespołu przeniósł się do innego działu. Mam około 5 lat doświadczenia zawodowego i ze względu na dyspozycyjność i wcześniejsze wyniki byłem głównym wyborem kierownictwa do prowadzenia projektu. Byłem trochę zaniepokojony, ale uznałem, że to dobra okazja do rozwoju kariery i doświadczenia, więc się zgodziłem. Ale mój wniosek do tej pory jest taki, że nie podoba mi się to aż tak bardzo, jak moja poprzednia pozycja programisty. Chociaż z powodzeniem prowadziłem zespół 5 programistów przez kilka wydań, prawie nigdy nie dotykam żadnego kodu. Zamiast tego zajmuję się planowaniem i projektowaniem oraz zarządzaniem zespołem wraz z przeglądami kodu. Potrzeba śledzenia wielu innych rzeczy i zaplanowania zadań tak, aby można je było przypisać do zespołu, dosłownie przyprawia mnie o ból głowy każdego dnia. Mimo że rzadko pracuję po godzinach, czuję się najbardziej wypalona każdego dnia, kiedy wychodzę z pracy i nie sądzę, żebym w rezultacie tak bardzo cieszyła się wolnym od pracy. Więc moje pytanie: **jak byś sobie poradził lub jak poradziłeś sobie z taką sytuacją?** Czy znalazłeś sposób na lepsze zarządzanie zespołem, zadaniami i czasem dla osób w podobnej sytuacji, które sprawiły, że praca sprawiała Ci przyjemność? A może znalazłeś sposób na powrót do pozycji bardziej zorientowanej na rozwój? Wiem, że stanowiska wiodących programistów prawie zawsze płacą wyższą pensję, ale widzę, że dochodzę do punktu, w którym mniej dbam o pieniądze i awanse niż o radość z mojej obecnej pracy. Nie rozmawiałem o tym z nikim z kierownictwa, ponieważ pomyślałem, że powinienem spróbować się dostosować przez co najmniej rok.


title: Kopiowanie plików wielowątkowych

text: Mamy narzędzie, które służy do przesyłania plików (i wykonywania innych operacji na pliku) do udostępnionej lokalizacji sieciowej. Rozmiar pliku waha się od kilku mb do 500 mb. Pojawiła się sugestia, że powinniśmy być może wspierać wielowątkowość podczas przesyłania plików do udostępnionej lokalizacji - nie jest to wymagane do robienia tego w kawałkach bajtów - każdy wątek powinien wybrać jeden plik i spróbować przesłać. Nie jestem pewien, czy wielowątkowość może przyspieszyć takie operacje IO. Czy moje przeczucie jest słuszne? Jeśli rzeczywiście jesteśmy zobowiązani do zbudowania tej funkcjonalności, zastanawiałem się, jakie byłoby dobre podejście do projektowania silnika kopiowania plików? Czy miałoby sens użycie narzędzia takiego jak robocopy (przeczytałem, że nowsze wersje obsługują wielowątkowość)? Edycja: Przepraszamy za opóźnienie i brak ważnych informacji. To narzędzie jest zbudowane przy użyciu C# (.Net 2.0), a każda przyszła aktualizacja również musi używać .Net (wersja frameworka nie jest ograniczeniem). Narzędzie jest instalowane na komputerach użytkowników (około 20 wszystkich na WinXP). Udział docelowy znajduje się na serwerze Win2k3. Edycja 2: zdecydowaliśmy się przeprowadzić kilka testów za pomocą prostej aplikacji implementującej przesyłanie plików przez TPL. Opublikuj tę analizę, a zdecydujemy, czy kontynuować, czy nie. Dziękuję wszystkim za udzieloną pomoc.


title: W świetle programowania, co jest specjalnego w numerze 1223?

text: Właśnie natknąłem się na ten post na reddicie, gdzie ktoś został obciążony opłatą w wysokości 1,223 USD za „DARMOWĄ SAŁATKĘ ZE STEKEM”. ![tutaj podaj opis obrazu](http://i.stack.imgur.com/yK7sy.jpg) Próbowałem dowiedzieć się „Dlaczego 1223?” myśląc, że może to być gdzieś błąd programistyczny. Ale 1223 wydaje się być całkiem zwyczajną liczbą (= 100110001112). Jakieś pomysły?


title: Czy bazę danych aplikacji internetowej należy uznać za aktora?

text: Właśnie uczę się analizy przypadków użycia i diagramów przypadków użycia i jestem trochę zdezorientowany, czy baza danych MySQL aplikacji internetowej powinna być uważana za aktora. Czy baza danych jest rozważana poza „systemem” lub moją aplikacją, ponieważ jest to jej własny serwer, najprawdopodobniej na innej fizycznej maszynie? Z drugiej strony baza danych w podstawowej aplikacji internetowej nigdy nie zainicjuje przypadku użycia.


title: Czym jest abstrakcja?

text: Czy istnieje ogólnie uzgodniona definicja tego, czym jest **abstrakcja programowania**, używana przez programistów? [Uwaga, abstrakcji programistycznej nie należy mylić ze słownikowymi definicjami słowa „abstrakcja”.] Czy istnieje jednoznaczna lub nawet matematyczna definicja? Jakie są jasne przykłady abstrakcji?


title: Kryteria wyboru MigLayout dla kodu GUI?

text: Wydaje się, że jest łatwiejszy w użyciu i bogatszy w funkcje niż standardowe układy huśtawki. Wygląda na to, że zastępuje wszystkie standardowe układy. Jeśli tworzysz prosty kod, aby po prostu pokazać czas w oknie, MigLayout prawdopodobnie nie będzie przydatny. Ale jeśli tworzysz panel kokpitu lotu, MigLayout może być najlepszy. Jednak nawet jeśli twój projekt jest „złożony” (jak przykład panelu lotu), jak zdecydować, czy możesz zrobić to dobrze ze standardowymi układami zamiast Mig? Skąd wiesz, kiedy powinieneś używać MigLayout, a kiedy nie? Czy to tak dobrze, że należy go używać od razu przy dużych projektach, nawet nie biorąc pod uwagę standardowych układów? To są punkty, których szukam - **(1) (fikcyjne)** \- Mig może być powolny w przypadku "dużych projektów". Jeśli chcesz szybko ładować GUI, użyj standardowego układu. **(2) (fikcja)** \- Mig wciąż nie jest tak dojrzałym projektem jak standardowe układy. Jeśli tworzysz aplikację o znaczeniu krytycznym, radzę nie używać Mig.


title: Szyny: prawo zamieszania Demeter

text: Czytam książkę o nazwie Rails AntiPatterns i mówią o użyciu delegacji, aby uniknąć łamania prawa Demeter. Oto ich najlepszy przykład: Uważają, że wywoływanie czegoś takiego w kontrolerze jest złe (zgadzam się) @street = @invoice.customer.address.street Proponowane przez nich rozwiązanie to: class Customer has_one :address należy_do : faktura def ulica adres.ulica koniec klasy Faktura has_one :customer def customer_street customer.street koniec koniec @street = @invoice.customer_street Stwierdzają, że skoro używasz tylko jednej kropki, nie łamiesz tutaj Prawa Demeter. Myślę, że to nieprawda, ponieważ nadal przechodzisz przez klienta, aby sprawdzić adres, aby uzyskać adres faktury. Wpadłem na ten pomysł przede wszystkim z wpisu na blogu, który przeczytałem: http://www.dan-manges.com/blog/37 W poście na blogu najlepszym przykładem jest class Wallet attr_accessor :cash end class Customer has_one :wallet # atrybut delegacja def cash @wallet.cash end end class Paperboy def collect_money(customer, due_amount) if customer.cash < due_ammount raise InsufficientFundsError else customer.cash -= due_amount @collected_amount += due_amount end end end Post na blogu stwierdza, że chociaż jest tylko jedna kropka `customer.cash` zamiast `customer.wallet.cash`, ten kod nadal narusza prawo Demeter. > Teraz w metodzie Paperboy collect_money nie mamy dwóch kropek, tylko > mamy jedną w "customer.cash". Czy ta delegacja rozwiązała nasz problem? Wcale nie >. Jeśli przyjrzymy się zachowaniu, gazeciarz nadal sięga bezpośrednio do portfela klienta, aby wypłacić pieniądze. EDYTUJ Całkowicie rozumiem i zgadzam się, że to nadal jest naruszenie i muszę utworzyć metodę w `Wallet` o nazwie wycofać, która obsługuje płatność za mnie i że powinienem wywołać tę metodę w klasie `Customer`. Nie rozumiem, że zgodnie z tym procesem mój pierwszy przykład nadal narusza Prawo Demeter, ponieważ „Faktura” nadal sięga bezpośrednio do „Klienta”, aby dostać się na ulicę. Czy ktoś może mi pomóc wyjaśnić zamieszanie. Szukałem przez ostatnie 2 dni, próbując zagłębić się w ten temat, ale nadal jest to mylące.


title: Prawo zamieszania Demeter

text: Czytam książkę o nazwie Rails AntiPatterns i mówią o użyciu delegacji, aby uniknąć łamania prawa Demeter. Oto ich najlepszy przykład: Uważają, że wywoływanie czegoś takiego w kontrolerze jest złe (zgadzam się) @street = @invoice.customer.address.street Proponowane przez nich rozwiązanie to: class Customer has_one :address należy_do : faktura def ulica adres.ulica koniec klasy Faktura has_one :customer def customer_street customer.street koniec koniec @street = @invoice.customer_street Stwierdzają, że skoro używasz tylko jednej kropki, nie łamiesz tutaj Prawa Demeter. Myślę, że to nieprawda, ponieważ nadal przechodzisz przez klienta, aby sprawdzić adres, aby uzyskać adres faktury. Wpadłem na ten pomysł przede wszystkim z wpisu na blogu, który przeczytałem: http://www.dan-manges.com/blog/37 W poście na blogu najlepszym przykładem jest class Wallet attr_accessor :cash end class Customer has_one :wallet # atrybut delegacja def cash @wallet.cash end end class Paperboy def collect_money(customer, due_amount) if customer.cash < due_ammount raise InsufficientFundsError else customer.cash -= due_amount @collected_amount += due_amount end end end Post na blogu stwierdza, że chociaż jest tylko jedna kropka `customer.cash` zamiast `customer.wallet.cash`, ten kod nadal narusza prawo Demeter. > Teraz w metodzie Paperboy collect_money nie mamy dwóch kropek, tylko > mamy jedną w "customer.cash". Czy ta delegacja rozwiązała nasz problem? Wcale nie >. Jeśli przyjrzymy się zachowaniu, gazeciarz nadal sięga bezpośrednio do portfela klienta, aby wypłacić pieniądze. Czy ktoś może mi pomóc wyjaśnić zamieszanie. Szukałem przez ostatnie 2 dni, próbując zagłębić się w ten temat, ale nadal jest to mylące.


title: Jaki system kontroli wersji może zarządzać wszystkimi aspektami?

text: Kilka miesięcy temu zagłębiłem się w Subversion i GIT i byłem rozczarowany. Dobrze radzą sobie z KODEM ŹRÓDŁOWYM, ale nie z innymi aspektami. Na przykład strona internetowa pod kontrolą wersji musi zarządzać własnością pliku/katalogu, dostępem do odczytu i zapisu plików/katalogów, listami kontroli dostępu, znacznikami czasu, zawartością bazy danych. i linki zewnętrzne. Czy istnieje system kontroli wersji, który może wykonać tak perfekcyjne cofnięcie, jak ponowne ładowanie z miesięcznej kopii zapasowej?


Jakie są pytania sprawdzające znajomość języka SQL przez programistów? Jaka jest odpowiedź na pytanie? A co oznaczałby brak prawidłowej odpowiedzi, jeśli chodzi o czas potrzebny na zrozumienie pojęć związanych z pytaniem? **GOOGLED:** wyzwanie sql


title: Jak wdrożyć aplikację ASP.Net MVC3 na serwerze produkcyjnym?

text: Chcę tylko dowiedzieć się, jakie są najlepsze praktyki wdrażania aplikacji MVC3 i jakiego narzędzia używasz do wykonania zadania. Używam programu Visual Studio 2010. Publikuję swoją stronę internetową, następnie ręcznie robię kopię zapasową tego, co jest na serwerze produkcyjnym, a następnie przesyłam tam nową. To żmudne i podatne na błędy. Co powinienem zrobić, aby ta praca była łatwiejsza?


title: Jakie znaczenie mają CV w dobie GitHub, Stack Exchange, Coursera, Udacity, blogów itp.?

text: Moje CV nie jest już aktualne. Nie może już zawierać adekwatnego opisu moich możliwości technicznych. Można znacznie lepiej zrozumieć, do czego jestem zdolny, patrząc na moje repozytoria GitHub, moje profile Stack Exchange i różne kursy, które biorę w Udacity i Coursera. Problem polega na tym, że nie mam pojęcia, jak powiedzieć pracodawcom, że są to miejsca, w których powinni szukać, jeśli chcą mieć dokładny opis tego, co mogę zrobić. Za każdym razem, gdy kontaktuje się ze mną rekruter, delikatnie przekierowuję go do wszystkich wspomnianych wcześniej zasobów, a także udostępniam link do publicznie widocznego dokumentu Google, który zawiera moje CV wraz z linkami do wszystkich tych zasobów. Jednak wciąż wracają, prosząc o bardziej opisowe CV. Jak mogę uczynić jeszcze bardziej oczywistym, że jeśli ktoś chce mnie zatrudnić, to może oszczędzić sobie całej masy kłopotów, po prostu klikając kilka linków i przeglądając?


title: Pogodzenie zasady skauta i refaktoryzacji oportunistycznej z przeglądami kodu

text: Bardzo wierzę w zasadę skautów: > Zawsze sprawdzaj moduł w bardziej przejrzysty sposób niż wtedy, gdy go sprawdzałeś. ulepszyć moduł. Jaki byłby wynik? Myślę, że gdybyśmy > wszyscy postępowali zgodnie z tą prostą zasadą, zobaczylibyśmy koniec nieustannego > pogarszania się naszych systemów oprogramowania. Zamiast tego nasze systemy będą stopniowo > stawać się coraz lepsze w miarę ich ewoluował. Widzielibyśmy również zespoły, które troszczą się o > system jako całość, a nie tylko o jednostki dbające o swoją małą > małą część. Jestem również wielkim zwolennikiem powiązanej idei refaktoryzacji oportunistycznej: > Chociaż są miejsca na niektóre zaplanowane wysiłki refaktoryzacji, wolę > zachęcać do refaktoryzacji jako działania oportunistycznego, wykonywanego zawsze i > wszędzie tam, gdzie kod wymaga oczyszczenia - przez kogokolwiek. Oznacza to, że w dowolnym momencie ktoś widzi kod, który nie jest tak jasny jak tak powinno być, oni > powinni skorzystać z okazji naprawić to od razu, a potem - lub przynajmniej > w ciągu kilku minut W szczególności zwróć uwagę na następujący fragment artykułu o refaktoryzacji: > Wystrzegam się wszelkich praktyk rozwojowych, które powodują tarcia oportunistyczne > refaktoryzacja... Mam wrażenie, że najbardziej zespoły nie dokonują wystarczającej refaktoryzacji, więc > ważne jest, aby zwracać uwagę na wszystko, co zniechęca ludzi do > tego robienia. Aby pomóc w rozwiązaniu tego problemu, bądź świadomy za każdym razem, gdy czujesz się zniechęcony > do przeprowadzenia małej refaktoryzacji, która na pewno zajmie Ci tylko minutę lub dwie. Każda taka bariera to zapach, który powinien skłonić do rozmowy. Więc > zanotuj zniechęcenie i porozmawiaj o tym z zespołem. Przynajmniej powinno to być omówione podczas następnej retrospektywy. Tam, gdzie pracuję, istnieje jedna praktyka programistyczna, która powoduje **ciężkie** tarcia — Code Review (CR). Za każdym razem, gdy zmieniam coś, co nie wchodzi w zakres mojego „zadania”, recenzenci ostrzegają mnie, że utrudniam sprawdzenie zmiany. Jest to szczególnie ważne w przypadku refaktoryzacji, ponieważ utrudnia to porównywanie różnic „linia po linii”. Takie podejście jest tutaj standardem, co oznacza, że refaktoryzacja oportunistyczna jest wykonywana rzadko, a jedynie „planowana” (zazwyczaj za mało, za późno) ma miejsce, jeśli w ogóle. Twierdzę, że korzyści są tego warte, a 3 recenzentów będzie pracowało trochę ciężej (aby właściwie zrozumieć kod przed i po, zamiast patrzeć na wąski zakres zmian, które zmieniły się - sama recenzja byłaby lepsza dzięki temu samemu ), aby skorzystało na tym kolejnych 100 programistów czytających i utrzymujących kod. Kiedy przedstawiam ten argument, moi recenzenci mówią, że nie mają problemu z moją refaktoryzacją, o ile nie znajduje się w tym samym CR. Jednak twierdzę, że jest to mit: (1) W większości przypadków zdajesz sobie sprawę, co i jak chcesz zmienić, gdy jesteś w trakcie zadania. Jak to ujął Martin Fowler: > Dodając funkcjonalność, zdajesz sobie sprawę, że część dodawanego kodu zawiera pewne powielenie z jakimś istniejącym kodem, więc musisz dokonać refaktoryzacji > istniejący kod, aby wszystko uporządkować... coś działa, ale > uświadom sobie, że byłoby lepiej, gdyby interakcja z istniejącymi klasami została > zmieniona. Skorzystaj z okazji, aby to zrobić, zanim uznasz, że jesteś skończony. (2) Nikt nie będzie patrzył przychylnie na to, że wypuszczasz „refaktoryzowane” CR, których nie miałeś robić. CR wiąże się z pewnymi kosztami ogólnymi, a Twój menedżer nie chce, abyś „marnował swój czas” na refaktoryzację. Gdy jest w pakiecie ze zmianą, którą powinieneś zrobić, ten problem jest zminimalizowany. Problem zaostrza Resharper, ponieważ każdy nowy plik, który dodam do zmiany (i nie wiem z góry, które pliki zostaną zmienione) jest zwykle _zaśmiecony_ błędami i sugestiami - z których większość jest na miejscu i całkowicie zasługuje ustalenie. Efektem końcowym jest to, że widzę okropny kod i po prostu go tam zostawiam. Jak na ironię, uważam, że naprawienie takiego kodu nie tylko nie poprawi mojej pozycji, ale wręcz ją obniży i przedstawi mnie jako „nieukierunkowanego” faceta, który marnuje czas na naprawę rzeczy, na których nikt nie dba, zamiast wykonywać swoją pracę. Źle się z tym czuję, ponieważ naprawdę gardzę złym kodem i nie mogę znieść oglądania go, nie mówiąc już o wywołaniu go z moich metod! Masz jakieś przemyślenia, jak mogę zaradzić tej sytuacji?


title: Sugestie dotyczące projektowania demona odpytującego XML w pythonie

text: Mam zamiar zająć się nowym projektem dla klienta projektującego program Pythona po stronie serwera, który będzie odpytywał wiele strumieni XML w regularnych odstępach czasu i zapełniał bazę danych Postgresql wynikami. System będzie zasadniczo działał jako demon buforowania XML i zapełni bazę danych. Dostęp do tej bazy danych uzyska wówczas oddzielny program, który będzie udostępniał te dane w formacie JSON na publicznie dostępnej stronie internetowej. Zastanawiam się, czy ktoś ma sugestie dotyczące projektu wysokiego poziomu programu python caching/polling. Myślę o czymś opartym na klasach, gdzie liczba klas (jedna dla każdego strumienia XML, który ma być odpytywany) pochodzi od wspólnej klasy nadrzędnej, sprawdź nową zawartość, a następnie pobierz dowolną, jeśli zostanie znaleziona. Zastanawiam się, aby mieć tabelę dla każdego strumienia XML w bazie danych, kolumnę dla każdego pola XML i inną tabelę do śledzenia "ostatniego dostępu" dla każdego strumienia. W tym celu planuję używać Pythona 2.7, pyscopg i ElementTree do przetwarzania XML. Czy w tym momencie ktoś ma jakieś uwagi lub krytykę mojego projektu lub zestawu narzędzi? Czy analizowanie moich wartości XML w celu przechowywania w bazie danych Postgres jest bardziej pracochłonne, niż jest to warte zachodu? Nawiasem mówiąc, program frontonu, który będzie serwował te dane, zamieni je na JSON, a nie na XML.