title: Mając tytuł magistra lub licencjata z doświadczeniem, co jest warte w środowiskach przemysłowych?

text: Jestem świeżo upieczonym absolwentem kierunku Elektronika i Telekomunikacja, a na naszej Uczelni możemy mieć główne i drugorzędne kierunki w odpowiednich przedmiotach. Ukończyłem więc telekomunikację, a mniej więcej Inżynierię Oprogramowania. Ponieważ programowanie uczyłem się już dawno, teraz pasjonuję się SE i programowaniem. I chcę wjechać na pole SE. I wiem, że w branżach większość z nich oczekuje, że kandydaci będą mieli ponad dwuletnie doświadczenie licencjackie + lub magisterskie w pokrewnej dziedzinie. [Mam na myśli moje otoczenie, a nie wszystkie branże]. Moje pytanie brzmi: jak uważają tych magisterskich i licencjackich + doświadczonych facetów w branży? IMO, posiadanie magistra jest świetnym argumentem w porównaniu z doświadczeniem. Ponieważ w branży można jeździć w określonej technologii (Java, .Net lub coś innego), nie we wszystkich, a z tytułem magistra możemy zdobyć wiedzę o domenie, a nie w konkretnej technologii!


title: Każdy zna jakiekolwiek zasoby dla kogoś, kto chce nauczyć się WPF i F#

text: Łatwo jest znaleźć zasoby do nauki WPF, podobnie jest dość łatwe do znalezienia zasobów dla F#. Ale czuję, że mógłbym zaoszczędzić trochę czasu, gdybym mógł nauczyć się ich obu jednocześnie. Czy ktoś może polecić jakieś książki, blogi, artykuły, coś jeszcze? (Jestem zaznajomiony z programowaniem funkcjonalnym, winformami i c#)


title: Teraz, gdy Apple zamierza wycofać Javę w OS X, na jakim języku powinienem się skupić?

text: Po tym, jak zostałem zestrzelony na SO, wypróbuję to tutaj: jestem pewien, że wszyscy wiecie o niedawnym ogłoszeniu Apple o wycofaniu Javy w OS X (tak jak omówiono tutaj). Niedawno wróciłem do programowania w ciągu ostatniego roku, odkąd wiele lat temu nauczyłem się na ye olde BASIC. Mam komputer Mac w domu i komputer PC w pracy i chociaż mam zainstalowany system Windows i Ubuntu na moim Macu jako maszyny wirtualne, postanowiłem skupić się najpierw na VB (ponieważ był najbliżej BASIC), a następnie szybko przeszedłem do Java, ponieważ była wieloplatformowa (przy minimalnym wysiłku), więc najłatwiej było pracować na kodzie z obu systemów operacyjnych. Więc moje pytanie, jeśli wiatry zmian na Macu wieją z Javy i w erze post-Sun, jaki byłby najlepszy język, na którym mógłbym skoncentrować moje nowe wysiłki? Pamiętaj, że nie jest to ogólne „który język jest lepszy?” wątek i/lub okazja do związanej z nią wojny ognia. Tych jest mnóstwo i nie o to chodzi. Zdaję sobie sprawę, że na dłuższą metę nie powinno się być wiernym pojedynczemu językowi, więc biorąc to za wymówkę, pytanie dotyczy konkretnie, który będzie najszybszy do produktywności na danym tle, mając na uwadze minimalną przenośność przepisuje (a raczej aspirację niż wymaganie) i ma długoterminową wartość użytkową. Do tego widzę główne opcje jako: C# - Najbliższe "stylowi" do Javy, ale zależne od M$ (o ile oczywiście nie bierzesz pod uwagę Mono) C++ - Bardzo złożone, ale jeśli nawet nieco podbite, to wygrana? Czy warto wspinać się po krzywej uczenia się? VB.Net - Już mam tło, do którego najłatwiej jest wrócić, ale kto używa VB dla .Net w dzisiejszych czasach? Z pewnością jeśli używam języka CLI, powinienem użyć C#... Python - Cross-platform, ale co z interfejsem użytkownika dla użytkownika końcowego? **EDYTUJ:** Jako priorytet użytkowania wyobrażam sobie programowanie aplikacji desktopowych. Chociaż umiejętność rozgałęziania się w przyszłości jest zawsze pożądana. Myślę, że grafika jest następnym kierunkiem, gdy podstawy są już na miejscu.


title: Usługi domenowe a fabryki a zagregowane korzenie

text: Po kilku miesiącach zajmowania się DDD, nadal nie rozumiem ogólnych celów usług domenowych, fabryk i zagregowanych korzeni w stosunku do siebie, m.in. gdzie pokrywają się ich odpowiedzialność. Przykład: Muszę 1) utworzyć złożoną encję domeny w sadze (menedżer procesów), po której następuje 2) określone zdarzenie domeny, które musi być obsługiwane gdzie indziej, podczas gdy 3) encja jest wyraźnie zagregowanym korzeniem, który oznacza ograniczony kontekst niektórym innym podmiotom. 1. Fabryka JEST odpowiedzialna za utworzenie encji/agregatu root 2. Usługa MOŻE stworzyć encję, ponieważ wyrzuca również zdarzenie domeny 3. Usługa MOŻE pełnić rolę agregującego roota (utworzyć 'subentity' 'entity' z ID 4) 4. Zagregowany korzeń może tworzyć i zarządzać „podencjami” Kiedy wprowadzam do mojej domeny koncepcję zagregowanego katalogu głównego oraz fabryki, usługa wydaje się już nie potrzebna. Jeśli jednak nie jestem, serwis poradzi sobie również ze wszystkim, co jest potrzebne, dzięki posiadanej wiedzy i zależnościom. **Przykład kodu** _oparty na wszechobecnym języku warsztatu samochodowego_ public class Car : AggregateRoot { private readonly IWheelRepository _koła; prywatny tylko do odczytu IMessageBus _messageBus; public void AddWheel(Koło) { _wheels.Add(koło); _messageBus.Raise(nowe zdarzenie WheelAddedEvent()); } } public static class CarFactory { public static Car CreateCar(model string, int numberofWheels); } _..lub..._ public class Samochód { public ICollection<Koło> Koła { get; ustawić; } } interfejs publiczny ICarService { Car CreateCar(args); void UsuńSamochód(argumenty); Car AddWheel (int carId, Wheel wheel); }


title: Pełna niezmienność i programowanie obiektowe

text: W większości języków OOP obiekty są generalnie mutowalne z ograniczonym zestawem wyjątków (jak np. krotki i łańcuchy w Pythonie). W większości języków funkcjonalnych dane są niezmienne. Zarówno zmienne, jak i niezmienne obiekty niosą ze sobą całą listę zalet i wad. Są języki, które próbują połączyć obie koncepcje, jak np. scala, gdzie masz (wyraźnie zadeklarowane) zmienne i niezmienne dane (proszę mnie poprawić, jeśli się mylę, moja wiedza na temat scala jest więcej niż ograniczona). Moje pytanie brzmi: ** Czy _uzupełnia_ (sic!) niezmienność -tj. żaden obiekt nie może ulec mutacji po utworzeniu – ma to jakikolwiek sens w kontekście OOP?** **Czy istnieją projekty lub implementacje takiego modelu?** **Zasadniczo, czy (całkowita) niezmienność i OOP są przeciwieństwami lub są ortogonalne?* * Motywacja: W OOP zwykle operujesz **na** danych, zmieniając (mutując) podstawowe informacje, utrzymując odniesienia między tymi obiektami. Np. obiekt klasy „Osoba” z elementem „ojciec” odwołującym się do innego obiektu „Osoba”. Jeśli zmienisz imię ojca, jest to natychmiast widoczne dla obiektu podrzędnego bez konieczności aktualizacji. Będąc niezmiennym, musiałbyś konstruować nowe przedmioty zarówno dla ojca, jak i dziecka. Ale miałbyś znacznie mniej problemów z obiektami współdzielonymi, wielowątkowością, GIL itp.


title: Symuluj aplikację komputerową za pomocą skrótu do aplikacji Chrome

text: Technicznie buduję intranetową aplikację internetową, z serwerem WWW działającym 24/7 i centralną bazą danych, do której użytkownicy mają dostęp za pomocą dowolnej przeglądarki. Jednak dla użytkownika aplikacja powinna wyglądać i działać jak aplikacja komputerowa, a skrót do aplikacji Chrome najlepiej do niej pasuje. Ale nie chcę, aby użytkownik końcowy wykonywał zadania (1) instalowania Chrome (2) uzyskiwania dostępu do sieci za pomocą adresu URL (3) tworzenia skrótu. Czy można stworzyć pakiet instalacyjny z Chrome w środku i automatycznie utworzyć skrót do aplikacji (na pulpicie iw menu Start)?


title: Jak pisać freelancing w CV dla pracy programisty

text: Miałem 3 lata pełnoetatowego doświadczenia zawodowego w tworzeniu stron internetowych. Musiałem odejść z pracy i przyjechać za granicę (mój dom) na 1,5 roku z powodu osobistych problemów, ale wykonałem trochę wolnej pracy przy tworzeniu stron internetowych i utrzymywaniu serwera Linux VPS. W tym czasie zrobiłem kilka certyfikatów, takich jak CCNA, CCNP, RHCE. Wracam i przygotowuję się do ubiegania się o pracę. Teraz jestem zdezorientowany, jak mogę wypełnić tę 1,5 roczną lukę. Czy mogę tam pisać freelancer? Jak mam to napisać? Czy moja wartość spadła, ponieważ musiałem odejść z pracy na pełny etat na 1,5 roku? Czy naprawdę muszę napisać, że mnie nie było? Czy mogę napisać, że robiłem freelancer, a teraz chcę mieć stałą pracę?


title: Identyfikowanie języków programowania za pomocą kawałka kodu

text: Powiedzmy, że masz kawałek kodu i nie masz pojęcia, w jakim języku został napisany. Jakie są unikalne konstrukcje składni „sygnatury” dla każdego języka programowania, których możesz użyć do szybkiego określenia pochodzenia kodu? _(PS. Wymienienie tylko jednego języka w odpowiedzi prawdopodobnie byłoby dobrym pomysłem. Posiadanie więcej niż jednej odpowiedzi dla tego samego języka jest w porządku, zagłosujmy na najlepszą)_


title: Czy kiedykolwiek piszesz kod długopisem i papierem i czy powinniśmy to robić częściej?

text: Jak mówi tytuł, czy kiedykolwiek piszesz kod piórem i papierem? Jeśli tak, dlaczego? Czy ci, którzy tego nie robią, mogą coś zyskać, robiąc to częściej?


title: Jak dokumentować i recenzować projekt w scrumie?

text: Jestem stosunkowo młodym programistą w małej firmie (zespół 3 programistów i równie mały oddział QA) pracującym na średniej wielkości systemie. Obecna iteracja wciąż ma mniej niż 100 000 wierszy kodu (łącznie serwer i klient), ale mogę sobie wyobrazić, że w dłuższej perspektywie całkowity rozmiar może wynosić 200 kLOC lub więcej. Próbujemy używać Scrum do rozwoju i pracujemy nad oceną CMMI na poziomie 2. Przyjmujemy metody recenzowania, aby zweryfikować projekt naszego oprogramowania i kod źródłowy. Pozyskujemy wymagania dotyczące oprogramowania podczas spotkania dotyczącego planowania sprintu i dokumentujemy wymagania dotyczące oprogramowania w głównym SRS. Daje nam to również początek projektowania oprogramowania, ale nie mamy formalnej metody przeglądu koncepcji projektowych, takich jak projektowanie OO, projektowanie interfejsu użytkownika, wzorce projektowe wielokrotnego użytku i inne. W przypadku naszego kodu źródłowego próbujemy nowych technik, takich jak używanie arkuszy kalkulacyjnych do dokumentowania recenzji z ręki i recenzji przekazywanych za pośrednictwem poczty e-mail, ale recenzentowi może być trudno zrozumieć koncepcje projektowe na podstawie samego patrzenia na kod źródłowy. _(Proszę wybaczyć, jeśli błędnie przedstawiam koncepcje; wiele z tego próbujemy od zera.)_ Nie mamy nic przeciwko używaniu UML do wyrażania klas, obiektów, interfejsów oprogramowania, wzorców zdarzeń lub innych koncepcji projektowych, ale jesteśmy nie jestem pewien, kiedy i jak recenzować nasze wysiłki projektowe. Często programista może ukończyć w 70+% historyjkę użytkownika i zdać sobie sprawę, że fundamentalny element projektu wymaga zmiany (a następnie recenzowania). Próbując uniknąć otwartej dyskusji na ten temat i promować zwięzłe odpowiedzi, postaram się zadać dwa konkretne pytania: 1. Czy ktoś zna jakieś dobre źródła (np. książki, artykuły, artykuły) na temat najlepszych praktyk recenzowania projektowania koncepcje? 2. Przeczytałem, że sam kod jest (realizacją) projektu. Czy recenzowanie kodu źródłowego może być wykorzystane jako recenzowanie projektu? Dziękuję Ci.


title: problem dotyczący zakresu podczas zajmowania się sprzężeniem

text: Uczę się ruby (i OOP w procesie) i uważam, że muszę pisać te same wzorce podczas rejestrowania postępu, więc chcę to zamknąć w bibliotece rejestrowania, do której mój inny kod może po prostu przekazywać dane - powiedz ciąg , nazwę pliku i poziom dziennika. To oczywiście łączy bibliotekę rejestrowania z innym kodem — inny kod nadal musi być świadomy tego, jak działa biblioteka rejestrowania (że potrzebuje ciągu, nazwy i poziomu). Nie lubię takiego łączenia, ale wydaje mi się, że nie mogę temu zapobiec, ale muszę sobie z tym poradzić, świadomie decydując się na zakres wykorzystania biblioteki do obszaru zainteresowania „np. osobiste projekty technologiczne snoweagle” Czy to jest dobry projekt, czy jest lepszy sposób na podejście do sprzężenia?


title: Pobieranie listy obiektów tej samej klasy

text: Mam klasę „Zadanie”, która reprezentuje każde zadanie wykonane przez pojedynczego pracownika. Dla tej klasy napisałem właściwości typu EmpID, Priority itp. oraz metody typu `AddNewTask(),` `ArchiveTask(),` `MoveTaskToUser(int userid),` itd. Następnie napisałem metodę public List<Task> GetAllTasks( ) Wydawało mi się to niepoprawne w odniesieniu do OOP. Myślałem, że każdy pojedynczy obiekt zadania powinien reprezentować jedno zadanie i nie wydaje się właściwe wywoływanie `taskObj.GetAllTasks()`, ponieważ obiekt taskObj powinien wykonywać metody na pojedynczym zadaniu, które reprezentuje. Zmieniłem więc metodę na statyczną: public static List<Task> GetAllTasks() Teraz wywołuję `Task.GetAllTasks()`. Czy jest to właściwy sposób na podążanie za podejściem zorientowanym obiektowo. Czy wcześniejszy pomysł na wywołanie metody z pojedynczego obiektu był poprawny?


title: Wiele schematów a dodatkowa kolumna na klienta

text: Jeśli masz różne bazy danych na klienta, ponieważ nie ma potrzeby udostępniania między nimi żadnych danych, czy to samo dotyczy sytuacji, gdy klient ma wiele sklepów? Uważam, że łatwiej jest wykonywać zapytania o statystyki (niektóre wymagają sprzężenia tabeli 4-6), jeśli są one w jednym schemacie, a nie w wielu schematach. Ale wszyscy (jeszcze nic nie zrobili) w zespole uważają, że zapytania krzyżowe są dobrym rozwiązaniem. Twierdzą, że postgres dobrze je obsługuje. Jaka jest droga?


title: Rozwiązanie umowy z freelancerem przed jej zakończeniem

text: Buduję dużą aplikację internetową dla firmy. Początkowo właściciel projektu wyznaczył grafika/projektanta stron internetowych do wykonania wszystkich prac projektowych/frontendowych. Ja i kogo kiedykolwiek wprowadzę do kompletnego zaplecza i całego widoku wiążącego z przodu. Początkowo facet od frontendu/grafików odpadł i został zastąpiony (lepszym) grafikiem, który NIE produkuje wymaganego html/css. Ten deficyt spowodował wiele miesięcy przepracowania, a ja musiałem próbować wprowadzić deweloperów frontendu, aby uzupełnić brakujące elementy. Ponadto zmieniono wiele artykułów początkowej specyfikacji i dodano kilka elementów. Mniej więcej miesiąc temu po otrzymaniu niezwykle agresywnego telefonu od właściciela projektu zdecydowałem, że nie jestem już zainteresowany udziałem w projekcie. Oczywiście cały kod źródłowy, cała dokumentacja itp. należą do klienta, aby mógł on sprowadzić inną stronę. W tym momencie zapłacono mi 2/3 uzgodnionej sumy. Również koszt hostingu na barkach sam. W odpowiedzi klienci natychmiast zagrozili mi podjęciem kroków prawnych, twierdząc, że naruszyłem naszą umowę, nie wypełniając jej i że już naruszyłem umowę, przekraczając terminy dostaw. Stwierdził również, że uważa, iż nie będzie możliwe zastąpienie mnie w projekcie z powodu niejasnej technologii, którą wybrałem do jej zbudowania (ASP.Net MVC). Zasugerował, że zamierza spróbować odzyskać wszystkie wypłacone do tej pory pieniądze i odszkodowania, które „obliczył” (patrz: wyrównane) na około 70 tysięcy funtów. Dużo pracuję dla firmy, której MD jest prawnikiem korporacyjnym. Kto potwierdził, że technicznie obie strony naruszają warunki umowy, ale jest to uzasadnione nieprzewidzianymi zmianami w zastępowaniu projektantów itp. Kontynuuję pracę do tej pory. Moje (trochę rozwlekłe) pytanie brzmi moralnie i praktycznie, co byś zrobił? Należy mi się 1/3 pozostałej kwoty umowy i opłat za hosting. (łącznie około 3500 funtów) Ustawili innego dewelopera .Net, aby budować na elementach poza specyfikacją, ponieważ stwierdziłem, że nie jest to moja odpowiedzialność. Strona przechodzi właśnie testy/naprawianie błędów/akceptacji, w które klient uważa, że nie powinien być w to zaangażowany. Czy powinienem zostać dla gotówki, co również wiąże mnie z konserwacją naprawczą przez 2 miesiące. A może odpiszę to jako lekcję „pamiętaj, aby ponownie uzgodnić warunki, gdy zmienią się wielkie rzeczy”?


title: Na jakim poziomie abstrakcji wykonałbyś TDD?

text: **Problem** Odnajduję się w rozbijaniu struktury klas przez zbyt wiele testów jednostkowych, co utrudnia wprowadzanie zmian. **Przykład** Załóżmy, że mamy klasę A, która korzysta z klas B1 i B2. Klasa B1 wykorzystuje klasy C1 i C2. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/XtOXG.png) Zaczynam od pisania testów najpierw dla klasy A. Podczas tego procesu tworzone są klasy B1 i B2. Aby upewnić się, że klasy B1 i B2 działają, zaczynam pisać testy na B1 i B2. To samo dla C1 i C2. Teraz kończę na testach jednostkowych dla wszystkich różnych poziomów abstrakcji. Zakładając, że klasa A była na przykład systemem płacowym, a klasy B1, B2, C1 i C2 powstały podczas budowania A. **Pytanie** Gdzie popełniłem błąd w moim procesie? Czy nie powinienem mieć testów pisemnych na poziomy B i C? Czy moje testy jednostkowe na poziomie A powinny obejmować wszystkie funkcjonalności na poziomach B i C? Jaki jest proces, który doprowadzi do „poprawnych” testów jednostkowych i elastycznego projektu? Być może możesz zrobić przykład z dwoma lub więcej poziomami abstrakcji i pokazać mi swój proces i kod (w tym testy jednostkowe oraz kod produkcyjny i projekt), który wychodzi z twojego procesu.


title: Metody testowania jednostkowego, które uzyskują dostęp do internetowego interfejsu API

text: Cześć Zajmuję się tworzeniem wtyczki Wordpress, która ma dostęp do kilku API (Amazon Product API, Flickr, Freebase, Ebay). Zacząłem już pisać dla niego testy jednostkowe, ale wciąż zastanawiam się, czy to naprawdę droga, ponieważ pobieranie danych z API zajmuje dużo czasu, głównie dlatego, że moja prędkość pobierania nie jest tak duża (około 2 Mb/ s max). Obecnie uruchomienie całego zestawu testów zajmuje 2 godziny lub więcej, a czasami nawet osiągam limit API i test nie przejdzie. Czy istnieje lepszy sposób na zrobienie tego? Być może zautomatyzuje test lub nawet pozwoli mi przesłać testy w miejsce, które ma większą prędkość pobierania. Czy na początek muszę być metodami testowymi, które mają dostęp do API? Czy mogę po prostu wykorzystać dane próbne zamiast bezpośrednio wysyłać zapytania do interfejsu API? Z góry dziękuję!


title: Implementacja danych klasy PHP

text: Studiuję OOP PHP i obejrzałem dwa tutoriale implementujące system logowania\rejestracji użytkownika jako przykład. Ale realizacja jest różna. Który sposób będzie bardziej poprawny do pracy z takimi danymi? 1. Załaduj wszystkie dane pobrane z bazy danych jako tablicę do właściwości o nazwie _data podczas tworzenia klasy, a dalsze metody działają z tą właściwością 2. Utwórz oddzielne właściwości dla każdego pola pobranego z bazy danych, podczas tworzenia klasy załaduj wszystkie pola danych do odpowiednich właściwości i działają z tymi właściwościami oddzielnie? Następnie powiedzmy, że chcę utworzyć metodę, która zwraca listę wszystkich użytkowników wraz z ich danymi. Który sposób jest lepszy? 1. Metoda, która zwraca tylko tablicę danych użytkownika w następujący sposób: Array([0]=>array([id] => 1, [nazwa użytkownika] => 'John', ...), [1]=>array( [id] => 2, [nazwa użytkownika] => 'Jack', ...), ...) 2. Metoda, która tworzy nową instancję swojej klasy dla każdego użytkownika i zwraca tablicę obiektów


title: Jaki jest rozsądny przepływ pracy przy projektowaniu aplikacji internetowych?

text: Minęło trochę czasu, odkąd wykonałem jakiekolwiek znaczące tworzenie stron internetowych i chciałbym skorzystać z najnowszych praktyk, ale mam problemy z wizualizacją przepływu pracy, aby uwzględnić wszystko. Oto czego chcę użyć: * Framework CakePHP * jsmin (JavaScript Minify) * SASS (Synctactically Awesome StyleSheets) * Git **CakePHP:** Całkiem oczywiste, wprowadzaj modyfikacje i aktualizuj źródło. **jsmin:** Kiedy modyfikujesz skrypt, czy ręcznie uruchamiasz jsmin, aby wygenerować nowy, zminimalizowany kod, czy lepiej uruchomić przechwycenie pre-commit, które automatycznie generuje dane wyjściowe jsmin dla zmienionych plików javascript. Załóżmy, że nie mam wiedzy na temat implementacji podpięć do commitów. **SASS:** Bardzo podoba mi się to, co SASS ma do zaoferowania, ale jestem również świadomy, że kod SASS nie jest domyślnie obsługiwany przez przeglądarki, więc w pewnym momencie kod SASS musi zostać przekształcony do normalnego CSS. W którym momencie przepływu pracy jest to zrobione. **Git** Z przerażeniem przyznaję, ale ostatnim razem, kiedy tworzyłem strony internetowe, nie korzystałem z kontroli źródeł SCM (np. korzystałem z kontroli źródeł, ale zawierał bardzo szczegółowy dziennik zmian z kopie zapasowe). Od tego czasu mam duże doświadczenie w używaniu Gita (a także mercurial i SVN) do tworzenia desktopów, ale zastanawiam się, jak najlepiej go zaimplementować do tworzenia stron internetowych). Czy powszechną praktyką jest zaimplementowanie zdalnego repozytorium na hoście internetowym, abym mógł przesłać zmiany bezpośrednio na serwer produkcyjny, czy jest jakieś narzędzie międzyplatformowe (Windows/Linux), które ułatwia przesyłanie tylko zmienionych plików na serwer produkcyjny . Czy istnieją firmy hostingowe, które ułatwiają wdrożenie zdalnego repozytorium, czy potrzebuję dostępu SSH itp. Wiem, jak to zrobić na moim własnym serwerze testowym ze zdalnym repozytorium z osobną gałęzią zdalnego śledzenia, ale ja' nigdy wcześniej nie robiłem tego na zdalnym serwerze produkcyjnym, więc nie znam jeszcze opcji. **Dodatkowe:** Rozważałem wdrożenie frameworka javascript, w którym oddzielne pliki javascript używane na stronie są kompilowane w jeden plik dla każdej strony na serwerze produkcyjnym, aby ograniczyć liczbę pobrań plików potrzebnych na stronę. Czy coś takiego już istnieje? Czy istnieje już projekt open source, który implementuje coś podobnego, co mógłbym wykorzystać i do którego mógłbym się przyczynić? Biorąc pod uwagę, jak paranoiczni twórcy stron internetowych podchodzą do wydajności (i fakt, że liczba żądań plików na stronie internetowej jest dużym uderzeniem w wydajność), domyślam się, że w sieci jest jakiś haker-czarodziej, który już rozwiązał ten problem.


title: Implementacja działań semantycznych w analizowaniu predykcyjnym opartym na tabeli

text: Podczas przeprowadzania analizowania predykcyjnego opartego na tabeli na gramatyce LL(1) (jak wyjaśniono szczegółowo tutaj na przykład), w jaki sposób możemy ulepszyć algorytm, aby umożliwić przetwarzanie działań semantycznych podczas wykonywania analizowania. Jedna technika mogłaby ewentualnie użyć tego samego stosu w algorytmie, definiując reguły produkcji ze znacznikami dla działań semantycznych i umieszczając te znaczniki na stosie w taki sam sposób, jak to robi się z terminalami/nieterminalami w pozostałej części reguły produkcji, oraz następnie przetwarzanie kodu wyznaczonego przez znacznik, gdy zostanie on usunięty ze stosu. Dajmy więc coś takiego (z księgi Smoka - działania w nawiasach klamrowych): rest -> + term { print('+') } rest | - term { print('-') } reszta | Termin Epsilon -> 0 { print('0') } | 1 { print('1') } ... | 9 { print('9') } Możemy dodać znacznik dla każdego typu akcji i włożyć go na stos z resztą terminów produkcyjnych, a następnie wykonać odpowiedni kod, gdy znacznik zostanie wyjęty przez algorytm . Czy tak to się robi, czy są lepsze podejścia?


title: Jaki jest przykład kontynuacji nie zaimplementowanej jako procedura?

text: Ciekawa dyskusja na temat rozróżnienia między _callbackami_ i _kontynuacjami_ w SO wywołała to pytanie. Z definicji kontynuacja jest abstrakcyjną reprezentacją logiki potrzebnej do zakończenia obliczenia. W większości języków objawia się to jako procedura jednoargumentowa, do której przekazujesz dowolną wartość wymagającą dalszego przetwarzania. W języku czysto funkcjonalnym (gdzie wszystkie funkcje są czystymi i pierwszorzędnymi obywatelami), myślę, że kontynuację można w całości modelować jako funkcję. W końcu tak właśnie rozumiałem kontynuacje do tego momentu. Jednak świat jest pełen stanów (westchnienie), więc ogólna definicja nie wymaga, aby stan programu kontynuacji przechwytywania obejmował tylko intencję. Aby pomóc mi zrozumieć, czy można podać przykład w języku funkcjonalnym, w którym kontynuacja jest wyrażona w sposób bardziej abstrakcyjny niż funkcja? Wiem, że Scheme pozwala na pobranie bieżącej kontynuacji w sposób pierwszorzędny (call/cc), ale mimo to wydaje się, że procedura jednoargumentowa przekazywana do call/cc po prostu otrzymuje bieżącą kontynuację w postaci innej procedura argumentu, do której funkcja call/cc'd może zastosować swój wynik.


title: Bariery uczenia się dla początkujących wobec umysłu programisty (studium)?

text: Natknąłem się na to Studium (Rozwoju Umiejętności Programowania i Umiejętności Myślenia U Uczniów Liceum)( **link otwiera się tylko po kliknięciu prawym przyciskiem myszy, nie w nowej karcie?! Nie wiem dlaczego** ) twierdząc, że uczniowie wydają się mieć poważne problemy z nauką programowania, abstrakcji do algorytmów,... faktycznie działa. Co o tym sądzisz i czy ktoś ma linki do nowszych, bezpłatnych badań dotyczących procesu nauki programowania nowicjuszy? Zastanawiam się, czy jest to spowodowane głównie gorszym nauczaniem, czy bardziej abstrakcyjnymi i trudnymi do nauczenia językami, takimi jak C w przeszłości. Oczywiście umiejętności matematyczne również odgrywają prawdopodobnie większą rolę, ale nie powinno to być podstawową przeszkodą? Czy istnieje związek z tym, jak trudna jest struktura języka ojczystego (gramatyka, składnia, słownictwo). Wiadomo, że początkujący programiści różnych języków ojczystych szybciej dostosowują się do różnych języków programowania? Czy istnieją języki programowania specjalnie zorientowane na np. język chiński/niemiecki? Czy powstanie coraz to nowych języków programowania jest oznaką indywidualnego dostosowania się do składni podobnej do jednego programisty? Przypuszczam, że z teoretycznego punktu widzenia informatyka powinna istnieć granica użycia i różne typy problemów, ile różnych języków programowania jest naprawdę potrzebnych. Ale wydają się rosnąć i rosnąć.


title: Jak uzyskać dostęp do Datasource JNDI do niezawodnej pracy z WebLogic (bez NameNotFoundException)?

text: w aplikacji internetowej WebLogic (w pakiecie i wdrożonej jako Jar) czasami otrzymuję wyjątek NameNotFoundException, gdy próbuję pobrać źródło danych za pomocą wyszukiwania JNDI. Źródło danych nie jest wtedy wyświetlane w drzewie JNDI, ale można je zobaczyć w sekcji Usługi -> Źródła danych. Działało zgodnie z oczekiwaniami i nie sądzę, żebym od tego czasu cokolwiek zmieniła. Wygląda na to, że pewną rolę może odegrać stan wyścigu lub coś podobnego. Nie wydaje się to być powszechnym problemem, co każe mi myśleć, że może mi brakować czegoś bardzo podstawowego. Przeszedłem przez kreatora, aby utworzyć źródło danych (źródło danych i nazwa JNDI są identyczne) i przetestowałem je. Ponownie, dostęp programistyczny również działał poprawnie. spróbuj { Kontekst kontekstu; kontekst = nowy InitialContext(); DataSource dataSource = (ŹródłoDanych) context.lookup(nazwaźródładanych); połączenie = dataSource.getConnection(); } catch (NamingException e) { wrzucić nowy ConnectionException(e); } catch (SQLException e) { throw new ConnectionException(e); } Czy istnieją jakieś najlepsze praktyki lub zupełnie inne sposoby pracy ze źródłami danych? Cokolwiek, o czym możesz pomyśleć, może coś zmienić?


title: Jakie jest pochodzenie/znaczenie nazwy „NHibernate”?

text: Szturchałem się po sieci, ponieważ byłem ciekawy, dlaczego tak to nazwali, ale jeszcze niczego nie znaleźli. Ktoś wie? _(Sprawdziłem FAQ i nie było jasne, czy pytania dotyczące historii/pochodzenia można tu umieścić, czy nie, ale pomyślałem, że nie byłoby to dobre na StackOverflow, możesz zacząć je zamykać, jeśli jest poza zakresem i usunę.)_


title: Zatrzymanie niekończących się dyskusji technicznych i podjęcie decyzji

text: Zawsze spotykam ludzi, którzy lubią walić od wieków o najdrobniejsze „techniczne rzeczy”. Nie zrozum mnie źle, jestem programistą maniakiem, który uwielbia to, co robię, ale znasz rodzaj rozmowy. * Mac jest o wiele lepszy niż Windows * Nie używaj pętli For Each, użyj pętli While * Nie kupuj komputera z procesorem Intel, kup komputer z procesorem AMD. * Powinniśmy używać jednego kontenera IoC zamiast drugiego. Wszystkie te „rzeczy” mają ważne za i przeciw dla obu stron i nigdy nie dostaniesz „poprawnej” odpowiedzi, a dana osoba nigdy się nie zgodzi. (oczywiście będą takie, na które będzie odpowiedź, może :). Moje pytanie (dążę do tego!!) brzmi: W zespole programistycznym, jak przebrnąć przez te długie dyskusje bez hamowania innowacji, aby można było podjąć decyzję i zająć się rozwiązywaniem prawdziwych problemów biznesowych.


title: Czy istnieje filozofia programowania Windows?

text: Programowałem zarówno w środowisku Unix, jak i Windows. Przeważnie pracowałem w Unixie, gdzie nauczyłem się filozofii Unix, którą można podsumować jako * Pisanie programów, które robią jedną rzecz i robią to dobrze. * Napisz programy do współpracy. * Napisz programy do obsługi strumieni tekstowych, ponieważ jest to uniwersalny interfejs. Wydaje się, że istnieje wyraźna różnica w kulturach programowania między światami Unix i Windows, na przykład: * GUI vs CLI * Rejestr vs pliki konfiguracyjne * Mnóstwo narzędzi specjalizujących się w dowolnych potrzebach vs grupa ogólnych narzędzi ortogonalnych, które można łączyć ** Czy istnieje odpowiednik "filozofii uniksowej" w świecie Windows?** Czego programista uniksowy może nauczyć się od Windows lub czego powinien być świadomy przechodząc do programowania w Windows? Chciałbym, aby odpowiedzi skupiały się na najlepszych praktykach programowania Windows (a nie na walce między Windowsem a Uniksem).


title: Tworzysz strony internetowe? Więc musiałeś słyszeć o Web 2.0, prawda?

text: Któregoś dnia ktoś zapytał mnie, jaki rodzaj pracy wykonuję. Odpowiedziałem, że pomagam budować strony internetowe (głównie Asp.net, c#). Więc powiedział "więc musisz robić dużo rzeczy Web 2.0, prawda?". Zacząłem odpowiadać, próbując zdefiniować Web 2.0 jako zmianę w sposobie, w jaki strony były projektowane 5 lat temu, włączając więcej skryptów po stronie klienta, ajax i podejście oparte na standardach do tworzenia stron internetowych. Powiedziałem wtedy, że prawie każdy zajmujący się projektowaniem/rozwojem stron internetowych, który był na bieżąco z nowymi standardami i technikami w ciągu ostatnich kilku lat, powinien używać technik „podobnych do Web 2.0” i nie jest to naprawdę dokładne stwierdzenie do opisania stronę internetową jako „Web 2.0”. (Osoba, z którą rozmawiałem, była programistą, ale w zupełnie innej domenie - C++/VOIP). Jak odpowiadasz ludziom (z dobrymi intencjami), którzy próbują rozmawiać z tobą o programowaniu przy użyciu chwytliwych wyrażeń z przeszłości? ("Web 2.0" może się ubiegać o tworzenie stron internetowych, jestem pewien, że są podobne terminy również w innych obszarach.) Po prostu kiwnij głową i powiedz tak? Spróbuj się wytłumaczyć?


title: Lista kontrolna do kodowania aplikacji internetowej MVVM

text: Jesteśmy małym zespołem pracującym nad aplikacją webową wykorzystującą wzorzec projektowy MVVM z wykorzystaniem technologii takich jak .NET, Knockout i HTML. Próbuję wymyślić w tym celu listę kontrolną przeglądu kodu, aby mój zespół mógł z niej korzystać zarówno podczas kodowania, jak i podczas przeglądania. Próbowałem znaleźć w google, ale nie ma tam pomocy. Czy możecie mi zasugerować, co muszę sprawdzić na liście kontrolnej przeglądu kodu?


title: alternatywne podejście do serializacji/deserializacji binarnej

text: Czy można przekonwertować listę obiektów bezpośrednio na byte[] (i odwrotnie), aby uzyskać wydajność (poprzez unikanie serializacji/deserializacji)? Mam na myśli to, że lista jest gdzieś w pamięci (stercie). Gdybym mógł odczytać bajty ze sterty dla mojej listy, mógłbym po prostu przypisać jej zmienną (z byte[]) w moim programie. Czy to możliwe? a jeśli tak, w jaki sposób mogę odzyskać oryginalną listę z byte[] bez deserializacji za pomocą BinaryFormatter?


title: Jakie są wady MVC?

text: Używam MVC/MV* odkąd zacząłem organizować swój kod lata temu. Używam go tak długo, że nie mogę nawet wymyślić żadnego innego sposobu na uporządkowanie mojego kodu i każda praca, którą miałem po stażu, była oparta na MVC. Moje pytanie brzmi, jakie są wady MVC? W jakich przypadkach MVC byłby złym wyborem dla projektu, a jaki byłby (bardziej) właściwym wyborem? Kiedy szukam alternatyw MVC, prawie każdy wynik to tylko różne typy MVC. Aby zawęzić zakres, aby to się nie zamknęło, powiedzmy dla aplikacji internetowych. Pracuję nad backendem i front-endem dla różnych projektów, więc nie mogę powiedzieć tylko front-end lub backend.


title: Nigdy nie używaj ciągów w Javie?

text: Natknąłem się na wpis na blogu, który zniechęca do używania ciągów w Javie w celu pozbycia się semantyki w kodzie, sugerując, że należy zamiast tego używać klas cienkiego opakowania. Oto przykłady przed i po wspomnianym wpisie, które ilustrują sprawę: public void bookTicket( String name, String firstName, String film, int count, String cinema); public void bookTicket (imię i nazwisko, imię imię, film filmowy, liczba liczników, kino kinowe); Z mojego doświadczenia w czytaniu blogów programistycznych doszedłem do wniosku, że 90% to bzdura, ale zastanawiam się, czy to słuszny punkt. Jakoś nie wydaje mi się to w porządku, ale nie mogłem dokładnie wskazać, co jest nie tak ze stylem programowania.


title: Zajęcia i przedmioty nauczania

text: Próbuję nauczyć, jak obiekt jest tylko instancją klasy do mojego kumpla. Jednak wydaje się, że nie rozumie tego tak dobrze. Słyszałem mnóstwo przykładów (projekt domu itp.) Ale czy ktoś ma naprawdę konkretny sposób na nauczenie tego?


title: Umieszczanie elementów na wykresie za pomocą algorytmu przesyłania strumieniowego/online

text: Mamy strumień punktów z około 1000 punktów na sekundę. Dla każdego punktu mamy złożony wektor (setki wymiarów). Naszym celem dla każdego punktu jest połączenie go z 5 najbliższymi punktami, które już widzieliśmy. Określamy "najbliższą" obliczając odległość (euklidesową lub inną) między 2 punktami. Oczywiście w idealnym świecie mielibyśmy wystarczająco dużo pieniędzy i czasu, aby obliczyć odległość między nowym punktem a każdym z punktów, które już widzieliśmy, a to utrzymałoby 5 najbliżej. Świat nie jest idealny i szukamy rozwiązania. Czy ktoś pracował z tym wcześniej?


title: Jak programista może przyczynić się do planetologii?

text: Właśnie wracam z WWDC13 i miałem okazję zobaczyć Billa Nye przemawiającego na sesji lunchowej ostatniego dnia. Oczywiście dorastałem, obserwując go i wyszedłem niesamowicie podekscytowany tym, co czeka ludzkość ... ale jednocześnie zastanawiam się, jak mogę, jako „podrzędny” inżynier oprogramowania, przyczynić się do postępu w przemysł kosmiczny. Oczywiście jest kilka oczywistych wyborów: mógłbym przekazać pieniądze Towarzystwu Planetarnemu. Albo mógłbym pójść na studia i zacząć prowadzić badania fizyki (nigdy nie poszedłem, chociaż jestem bardzo zadowolony z mojej kariery w ciągu ostatnich 14 lat). Więc myślę, że to trochę otwarte pytanie, ale jakie obszary możliwości mogą być dostępne dla kogoś, kto ma więcej czasu i umiejętności niż pieniądze, który wciąż chce znaleźć sposób, aby wnieść swój wkład?


title: Czy podczas internacjonalizacji tekstów podkreślenia (dla skrótów klawiaturowych) powinny być częścią tłumaczonych tekstów?

text: Mam projekt, w którym muszę przetłumaczyć wiele słów i fragmentów tekstu w różnych językach. W tych tekstach podkreślenia są obecnie dodawane w tych tekstach (fragmentach), które mają być używane jako skróty klawiaturowe (używane w programie Visual Studio). Zastanawiałem się jednak, czy to jest ta droga, czy też lepiej byłoby usunąć podkreślenia i dodać je PO tłumaczeniu. Czy istnieją jakieś wytyczne, których należy przestrzegać?


title: Algorytm Kargera do pakowania w bin?

text: Po raz pierwszy spotkałem się z tym algorytmem jako algorytmem „Losowego minimalnego cięcia”. A ostatnio kolega próbował zapakować dużą ilość małych tekstur do jednego pliku graficznego. Potem kliknęło - dlaczego nie wykorzystać Kargera do tego problemu z pakowaniem? Nie znam dobrego sposobu na odwzorowanie tego problemu na grafie zdefiniowanym w celu zminimalizowania marnowanej przestrzeni między obrazami. Tutaj określam minimalne cięcie jako „atlas z mniejszą liczbą pustych pikseli wypełniających”. Więc muszę wygenerować wykres, który przedstawia „odległość” między obrazami jako krawędź. Jakieś sugestie, jaki rodzaj odległości użyć? Oto pierwszy pomysł, jaki miałem: Biorąc pod uwagę obraz A(w, h), gdzie w to szerokość, a hi wysokość, jeśli B(w', h') istnieje dla w = w' lub h = h' stwórz krawędź między A i B. (Można zastosować tę samą regułę z pewną tolerancją, np. + lub - 1%). Byłbym bardzo zdziwiony, gdybym jako pierwszy o tym pomyślał. Więc jeśli ktoś wie o czymś podobnym, co zostało zrobione, proszę to powiedzieć.


title: Zalecana długość sprintu podczas adaptacji Agile?

text: Jestem nowy w małej firmie programistycznej (pół tuzina programistów i ostatecznie powinienem urosnąć do kilkunastu). Współpracuje z nami również kilku zewnętrznych wykonawców (tylko żeby dodać trochę komplikacji). Chciałbym powoli zacząć adaptować Agile, a co ważniejsze krótkie sprinty. Byłem ciekaw, z poprzednich doświadczeń, jaka powinna być nasza początkowa długość sprintu (w tygodniach)? Może uda mi się nawet zapytać, jaka jest długość sprintu bardzo dojrzałego i doświadczonego zespołu Agile (krótsze [2 tygodnie] czy dłuższe sprinty [4 tygodnie])? Moim pierwszym pomysłem było użycie krótszego sprintu, powiedzmy 2 tygodnie, a potem, kiedy już wszystko opanujemy i wszystko się wygładzi, moglibyśmy po prostu podwoić go do 4 tygodni.


title: Dlaczego formaty pakietów rpm i deb nie są zunifikowane w jeden standardowy system?

text: Miałem to pytanie zadane na stackoverflow, ale zostało zamknięte _"jako nie prawdziwe pytanie"_. Postanowiłem więc usunąć wszelkie pomruki i umieścić to pytanie tutaj, zakładając, że ta wymiana stosów dotyczy _"pytań koncepcyjnych dotyczących rozwoju oprogramowania"_ Główne pytanie znajduje się w tytule: **Dlaczego formaty pakietów rpm i deb nie są zunifikowane w jeden standard system?** Myślę, że jest to bardzo ważny krok, który musimy zrobić, ponieważ taka fragmentacja formatu jest zła, i to nie tylko dla niezależnych programistów, ale dla innych narzędzi i języków, którzy wymyślają na nowo własne opakowania, takie jak vim, python , ruby, nodejs, php, eclipse i wiele wiele innych


title: Co powinienem zrobić, gdy już zbyt długo czekałem między zatwierdzeniami?

text: Byłem niegrzeczny... Za dużo "kodowania kowbojskiego", za mało zaangażowania. Teraz jestem z ogromnym zobowiązaniem. Tak, powinienem był się angażować przez cały czas, ale teraz jest już za późno. Co jest lepsze? 1. Wykonaj jeden bardzo duży zatwierdzenie wypisujący wszystkie zmiany, które zmieniłem 2. Spróbuj podzielić go na mniejsze zatwierdzenie, które prawdopodobnie się nie skompiluje, ponieważ pliki mają wiele poprawek, zmian, dodatkowych nazw metod itp. 3. Spróbuj wykonać częściowe odwrócenie plików tylko dla odpowiednich zatwierdzeń, a następnie wstaw nowe zmiany z powrotem. Uwaga: w tej chwili jestem jedynym programistą pracującym nad tym projektem; jedyną osobą, która będzie patrzeć na którykolwiek z tych komentarzy, jestem ja, przynajmniej dopóki nie zatrudnimy większej liczby programistów. **Przy okazji:** używam SVN i Subclipse. Utworzyłem nową gałąź przed wprowadzeniem którejkolwiek z tych zmian. **Więcej informacji** : W pierwszej kolejności zadałem osobne pytanie związane z tym, jak wpadłam w tę sytuację: Jak przygotować się do przepisania kleju aplikacji


title: Jaka jest szybsza alternatywa dla CRC?

text: Przeprowadzam transmisję danych z dsPIC do komputera PC i wykonuję 8-bitowe CRC dla każdego bloku 512 bajtów, aby upewnić się, że nie ma błędów. Z włączonym kodem CRC dostaję około 33KB/s, bez niego 67KB/s. Jakie są alternatywne algorytmy wykrywania błędów do sprawdzenia, które byłyby szybsze?


title: Znajdź następne wystąpienie w drzewie

text: Mieć drzewo o zmiennej głębokości i szerokości. Jaki jest najlepszy algorytm do znalezienia następnego wystąpienia węzła w tym drzewie. Next = Wyszukiwanie po prawej stronie drzewa (jak w wyszukiwaniu wszerz) Kryteria wyboru następnego wystąpienia drzewa można zmieniać w różnych sytuacjach. Na przykład w jednym miejscu chcę znaleźć następne wystąpienie węzła, który zawiera wartość równą bieżącemu węzłowi. W innym chcę wybrać następną wartość, która jest mniejsza od bieżącej wartości. Po znalezieniu następnego wystąpienia program może zakończyć działanie i zwrócić wartość lub węzeł. 5 6 9 10 7 0 5 6 8 5 6 9 5 Załóżmy, że mam wskaźnik do węzła (głębokość = 4, wartość = 5, rodzic = 10)... podczas wyszukiwania chcę uzyskać wskaźnik do węzeł (głębokość = 4, wartość =5, rodzic=0). Powiedzmy, że tego nie ma, a następnie chcę uzyskać węzeł (głębokość = 1, wartość = 5, rootNode).


title: Po co definiować obiekt Java za pomocą interfejsu (np. Map) zamiast implementacji (HashMap)

text: W większości kodu Javy widzę, że ludzie deklarują takie obiekty Javy: Map<String, String> hashMap = new HashMap<>(); List<String> list = new ArrayList<>(); zamiast: HashMap<String, String> hashMap = new HashMap<>(); ArrayList<String> list = new ArrayList<>(); Dlaczego preferowane jest definiowanie obiektu Java za pomocą interfejsu, a nie implementacji, która będzie faktycznie używana?


title: Jak tworzyć zmienne w czasie wykonywania?

text: Czy można dynamicznie definiować zmienne? Wczoraj wieczorem pisałem trochę kodu (C i VB2010) i natknąłem się na problem związany z definiowaniem zmiennych w moim programie. Potrzebne zmienne zależą od liczby wpisów dodanych przez użytkownika i liczby użytkowników. Nawet przy użyciu dynamicznej alokacji pamięci mamy limit rozmiaru, ale czasami zastanawiam się nad tego typu rzeczami. Możemy zdefiniować tyle zmiennych, ile potrzebujemy (oczywiście do pewnego limitu) podczas pisania kodu, ale czy nie możemy zdefiniować więcej w czasie wykonywania? Na przykład: powiedzmy, że cały program jest skończony, a kiedy użytkownik powie „x”, nie można tego utworzyć jako zmiennej; raczej potrzebujemy zmiennej do przechowywania tego x. Dlaczego nie możemy uczynić x zmienną w czasie wykonywania? Czy nie możemy zbudować pomostu między czasem kompilacji a czasem wykonywania z pewnymi regułami?


title: Implementacja interfejsu z frameworka vs prosty interfejs java

text: Ta koncepcja jest dla mnie niejasna. Pracowałem nad kilkoma frameworkami dla instancji Spring. Aby zaimplementować funkcję, zawsze implementujemy niektóre interfejsy dostarczone przez framework. Na przykład, jeśli muszę utworzyć niestandardowy zakres w Springu, moja klasa implementuje interfejs org.springframework.beans.factory.config.Scope. Który ma pewną predefiniowaną funkcjonalność niskiego poziomu, która pomaga w zdefiniowaniu niestandardowego zakresu fasoli. Podczas gdy w Javie czytam, że interfejs jest po prostu deklaracją, którą klasy mogą implementować i definiować własną funkcjonalność. Metody interfejsu nie mają predefiniowanej funkcjonalności. interfejs Samochód { topSpeed(); przyspieszać(); zwolnij(); } Metody tutaj nie mają żadnej funkcjonalności. Są po prostu zadeklarowane. Czy ktoś może wyjaśnić tę rozbieżność w koncepcji? W jaki sposób framework umieszcza pewne predefiniowane funkcjonalności z metodami interfejsu?


title: Co się stanie, jeśli opracuję program czerpiący inspirację z innej aplikacji GNU GPL?

text: Mój przyjaciel i ja planujemy stworzyć mały i prosty CMS, czerpiąc inspiracje z już istniejącego CMS GNU GPL. Bierzemy pomysły i staramy się je rozwijać jak najprościej, czy to możliwe ? Planujemy założyć taką samą licencję, GNU GPL. Czy to dobry wybór? Jakie są do tego warunki?


title: Czuję, że jestem dobrym młodszym programistą, ale jak zostać dobrym programistą, który pisze piękny kod?

text: Jako początkujący mogę powiedzieć, że w ciągu około sześciu miesięcy bardzo dobrze opanowałem wiele podstawowych pojęć programistycznych. Zacząłem od php, potem przeszedłem do c, potem do javy i znam dość dobrze koncepcje proceduralne i obiektowe. Co najważniejsze, bardzo lubię programować, jest to dla mnie dużo mentalne wyzwanie niż obowiązek. Rzeczywistość jest taka, że w 100% (i więcej) poprawiłem swoje umiejętności spędzając dużo czasu na stronie projektu Euler (i wstyd mi powiedzieć, że właśnie rozwiązałem pierwsze 30 problemów, ale wszystko sam, bez żadnej pomocy z zewnątrz, a jestem dumny z tego). Więc mógłbym pomyśleć, że jestem na dobrej drodze. Ale w tej chwili czuję, że jestem w fazie, w której nie wiem jak i przede wszystkim co mam wtedy zrobić. W tych miesiącach również przeszłam dwa kursy, jeden z webdesignu (wiem jak programować znaczniki css i html, a także znam podstawy obróbki grafiki), łatwo ustawiłbym podstawową stronę, a drugi kurs (który się skończę) w maju) idzie dobrze, co oznacza, że nie mam problemu z nauką tego, co mówią mi nauczyciele, a czasami znajduję lepsze rozwiązanie niż mój nauczyciel php (prawdopodobnie php jest językiem, do którego jestem najbardziej przyzwyczajony, jest mi łatwiej). Ale poza wszystkimi podstawowymi „śmieciami”, wszystkimi prostymi ćwiczeniami, które ludzie wykonują podczas nauki i na początku, nie wiem, jak mam iść dalej. To prawda, że wielu świetnych programistów mówi, że po prostu muszę zacząć kodować, kodować i kodować, i wiem, że tak jest, ale jaki kod? Jeśli miałbym pomyśleć o prawdziwym programie, z którego mógłbyś być dumny, nie wierzę, że wiem od czego powinienem zacząć. Próbowałem też przeczytać kilka kodów źródłowych, a ich zrozumienie jest jednym z najtrudniejszych procesów, jakie znalazłem i zdecydowanie przygnębiające, jak myślisz: „ojej, jak bardzo jestem ignorantem?”; co więcej, moje pomysły nie są jasne; Chciałbym coś ustawić, ale nie wiem, jak poskładać wszystkie rzeczy, o których mógłbym pomyśleć, i zawsze myślę, że o czymś zapominam. Próbowałem przeczytać kilka dokumentów i książek o dobrych praktykach obiektowych, uml, wzorcach projektowych, ale wydaje mi się, że chociaż wszystkie te lektury mają dla mnie sens, wtedy się kończy, nie mogę nic użyć, bo mam takie wrażenie wciąż nie jestem wystarczająco dobry, aby to wykorzystać, a najgorsze jestem zdesperowany, aby znaleźć właściwą ścieżkę, aby to zrobić, w momencie, gdy myślę, że być może nie jestem wystarczająco inteligentny, a programowanie jest dla mnie zbyt trudnym zadaniem. Może powinienem mieć prawdziwą pracę w jakiejś firmie, w której "uczę się" od innych bardziej doświadczonych programistów, ale firmy zatrudniają tylko doświadczonych programistów i co z tego? Proszę, czy możesz zwrócić się do mnie w jakiejś aktywności na średnim poziomie, którą mogę podjąć i cieszyć się, aby przezwyciężyć ten stan? Dziękuję.


title: Włączenie kodu GPL do mojego projektu Open Source

text: Pobrałem obecnie nieaktywny projekt GPL z zamiarem jego aktualizacji i udostępnienia kompletnej bazy kodu jako open source. Nie jestem jednak fanem GPL i wolałbym licencjonować swój projekt pod BSD. Jakie mam opcje? Czy to tylko kwestia utrzymywania istniejącego, nietkniętego kodu na GPL, a wszelkie zaktualizowane rzeczy mogą być BSD (niechlujne)? Źródłem będzie zasadniczo ta sama baza kodu, tj. nie ma logicznego oddzielenia między tymi dwoma i na pewno nie można ich podzielić na coś przypominającego różne biblioteki. Czy moja jedyna realistyczna opcja, aby albo na GPL całość, albo poprosić oryginalnego autora o zgodę na wydanie wszystkiego pod BSD?


title: Czy powinienem spróbować samodzielnie napisać prosty magazyn klucz-wartość?

text: Potrzebuję magazynu klucz-wartość w najprostszej formie, jaką możemy sobie wyobrazić. Klucze powinny być ciągami o stałej długości, wartościami powinny być jakieś teksty. Ta pamięć klucz-wartość powinna mieć interfejs API oparty na protokole HTTP. To w zasadzie to. Jak widać, nie ma dużej różnicy między taką pamięcią, a niektórymi aplikacjami internetowymi z pewną funkcją przesyłania. Chodzi o to, że napisanie czegoś takiego zajmie kilka godzin (w tym testy i picie kawy). „Coś takiego” będzie w pełni pod moją kontrolą i będzie można je dostroić na żądanie. Czy w tym konkretnym przypadku nie próbować wymyślać rowerów na nowo? Czy lepiej korzystać z niektórych istniejących rozwiązań NoSQL. Jeśli tak, to który dokładnie? Gdybym, powiedzmy, potrzebował czegoś w stylu SQL, nie zapytam i nie będę próbował sam czegoś napisać. Ale z NoSQL po prostu nie wiem, co jest odpowiednie, a co nie.


title: Model i ViewModel dla widoku

text: Jestem nowy we wzorcu MVVM. Mam okno, które ma 3 pola tekstowe (`Nazwa`, `Adres`, `Opis`), przycisk zapisu i widok listy, który wyświetla powyższe pola. Po kliknięciu przycisku Zapisz chcę zapisać pola w bazie danych, a także wyświetlić rekord w widoku listy. Jak zaprojektować mój Model, ViewModel dla tego interfejsu?


title: Kalistenika obiektowa - redukcja do dwóch atrybutów

text: Refaktoryzuję system śledzenia wydatków za pomocą Object Calisthenics. Mogę obniżyć moją klasę do pięciu atrybutów. Jak mam iść dalej? To jest teraz moja klasa. public class Wydatek { private Identyfikatory id; prywatna Kwota W Walucie Kwota W Walucie; prywatne Uwagi uwagi; prywatna lista użytkowników lista użytkowników; prywatne Data Wydatku Data Wydatku; } Identyfikatory mają atrybuty costId i reportId AmountInCurrency mają kwotę i walutę Uwagi mają ciąg z uwagami. UserList ma listę, która jest Listą, ponieważ użytkownik ma tylko nazwę użytkownika (String). ExpenseDate jest obiektem Date. Mam również bazę danych sql, w której przechowuję zawartość obiektu Expense. Czy powinienem bezpośrednio przekazać obiekt wydatków i pobrać prymitywy, czy też powinienem utworzyć obiekt encji, który przyjmuje ten obiekt wydatków jako argument konstruktora? UWAGA: To nie jest kod produkcyjny, robię to tylko jako ćwiczenie.


title: Bezpieczeństwo kryptografii klucza publicznego dzięki zasobom NSA

text: Zastanawiałem się, jak bezpieczne są metody szyfrowania publicznego klucza prywatnego. Gdyby dwie osoby wysyłały wiadomości e-mail w tę iz powrotem w nieskończoność, gdzie każda osoba zaszyfrowałaby treść wysyłanej wiadomości e-mail za pomocą klucza publicznego drugiej osoby, czy ktoś byłby w stanie odszyfrować treść tych wiadomości e-mail po pewnym czasie? Zakładam, że każda osoba tworzy własną parę kluczy prywatny-publiczny, a następnie, jeśli chcesz wysłać komuś e-mail, chwycisz jego klucz publiczny i zaszyfrujesz wiadomość przed wysłaniem jej do niej. Następnie odszyfrowaliby go własnym kluczem prywatnym. Wikipedia (http://en.wikipedia.org/wiki/Public-key_cryptography) twierdzi, że odszyfrowanie wiadomości e-mail jest praktycznie niemożliwe, jeśli wszystko, co wiesz, to klucz publiczny. Ale czy to naprawdę prawda? Co by było, gdybyś miał zasoby NSA, czy nie są one w stanie brutalnie wymusić odszyfrowania?


title: Od czego zacząć i jak robić postępy w nauce Java EE

text: Znam podstawowe rzeczy, takie jak fasola, jsp, serwlet, jsf i jak te rzeczy powinny ze sobą współpracować. Wiem, jak na przykład zrobić podstawową stronę jsp z zapytaniem do bazy danych. Teraz muszę wiedzieć, jaka jest najlepsza droga do nauczenia się tego wszystkiego. Planuję nauczyć się w tej kolejności: 1. jsp (w tym persistance i JSTL) 2. servlety + beans 3. jsf 4. Skok do frameworków (hibernate, struts, spring, itp.) Również nie jestem do końca pewien co do JSF , czy tworzenie świetnych stron jest koniecznością, czy jest to tylko wygoda?


title: python vs php (dla kierowników projektów)

text: Do tej pory jako programista preferowałem Pythona do programowania i pisania skryptów internetowych. Teraz będę zarządzał niektórymi projektami. Wiem, że znalezienie programistów znających php jest łatwiejsze niż znalezienie programistów, którzy znają Pythona. Mam doświadczenie w Pythonie, więc jeśli programiści używają Pythona; będę mógł łatwiej kontrolować i prowadzić. To jest kompromis. Co sugerujesz?


title: Reprezentowanie i egzekwowanie prostych reguł - framework czy custom?

text: Tworzę system, w którym użytkownicy będą mogli subskrybować wydarzenia i otrzymywać powiadomienia o ich wystąpieniu. Przykładami zdarzeń mogą być czas trwania i koszty połączeń telefonicznych, notacje o ruchu danych telefonicznych, a nawet zmiany kursów akcji. Przykładowe zdarzenia: * klient 13532 wykonał połączenie o czasie trwania 11:45 min i kosztował 0,4 USD * kurs akcji Google spadł o 0,01% * Gdy kurs akcji Google spadnie o więcej niż 0,5% * Gdy koszt połączenia w ramach mojej subskrypcji przekracza 1 USD Teraz, ponieważ zestaw różnych reguł jest obecnie wstępnie zdefiniowany, mogę łatwo utworzyć niestandardową implementację, która stosuje reguły do zdarzenia. Ale jeśli zestaw reguł może być znacznie większy i jeśli dopuścimy również reguły niestandardowe (np. gdy kurs Google spadnie o więcej niż 0,5% ORAZ kurs Apple wzrośnie o 0,5%), system powinien być w stanie się dostosować. Zastanawiam się zatem nad systemem, który potrafi interpretować reguły za pomocą prostego gramatyka, a następnie je stosować. Po kilku badaniach odkryłem, że istnieją silniki oparte na regułach, których można użyć, ale nie jestem pewien, czy pasują do naszych potrzeb, ponieważ wydają się bardziej odpowiednie dla logiki biznesowej, jak wspomniano w Czy twój projekt potrzebuje silnika reguł i guildelinie Jess. Czy istnieje platforma Java typu open source odpowiednia dla tego obszaru? Jeśli ktoś może wskazać mi właściwy kierunek lub polecić jakiś system, to byłoby świetnie! **Edytuj:** myśli o niestandardowym rozwiązaniu: myślę o użyciu mapowania zdarzeń do reguły, w którym każda reguła jest powiązana z zestawem zdarzeń. Wtedy, gdy nastąpi zdarzenie, wiem, jakie zasady można zastosować. Jeśli każda reguła jest reprezentowana przez własną klasę, wywołanie reguły jest po prostu wykonaniem klasy. Plusy: Prosta i łatwa implementacja. Nie ma potrzeby interpretacji zdarzeń, aby znaleźć reguły Wady: Każda nowa reguła wymaga kodowania. Nie można przeprowadzić analizy dedukcji. Jeśli widzisz jakieś poważne wady w tym podejściu, powiedz mi!


title: Jak mogę przekonać kolegę do testów jednostkowych swojego kodu?

text: > **Możliwy duplikat:** > Kolega niechętny testom jednostkowym „bo bardziej chodzi o kodowanie” W ciągu ostatnich kilku miesięcy próbowałem przekonać jednego z moich kolegów do rozpoczęcia testów jednostkowych swojego kodu i porzucić stary „ „drukuj, uruchamiaj, debuguj” sposób robienia rzeczy. Potrzebuję jasnych i rozbudowanych dowodów na to, że testowanie jednostkowe zwiększa twoją produktywność - ten facet ma przyzwoite doświadczenie i może dać kontrargument na wszystkie argumenty, które mu podałem do tej pory. Testowanie jednostkowe nie jest polityką, która jest egzekwowana w zespole, ale jest czymś, co robi większość z nas i zdecydowanie zadziałało, i możemy zobaczyć, jak drukowanie, uruchamianie i debugowanie nie działa w jego przypadku - trwa to zbyt długo zaimplementować coś, a ręczne testowanie kodu trwa jeszcze dłużej.


title: MVC: Gdzie powinienem przechowywać wymienne algorytmy używane przez model (którego nazwy również muszą być dostępne dla widoku)?

text: Rozważmy program, w którym użytkownik wybiera algorytm z listy, a wzorzec Strategia służy do ustawienia tego algorytmu jako działania modelu. Na przykład aplikacja do przetwarzania obrazów. Istnieje wiele algorytmów, których można użyć do manipulowania obrazem (przyciemnianie, rozjaśnianie, kontrast itp.). Wszystkie są zamknięte w obiektach, a kontroler ustawia model tak, aby używał algorytmu z tej listy. Algorytmy muszą być również przedstawione po nazwie w interfejsie użytkownika. Działa to w następujący sposób: Użytkownik może wybrać algorytm z listy w GUI. Gdy to zrobi, kontroler zostaje powiadomiony i ustawia odpowiedni algorytm w modelu. Później, gdy model zostanie nazwany `model.operate()`, przekaże operację do bieżącego algorytmu. Klasyczny wzór strategii. Ponadto _widok potrzebuje dostępu do nazw algorytmów_ , aby użytkownik mógł wybrać jeden z listy. Moje pytanie brzmi: **Czy powinienem przechowywać algorytmy gdzieś, skąd sterownik będzie je pobierał, gdy musi ustawić algorytm w modelu? A może kontroler powinien po prostu tworzyć instancję nowego algorytmu za każdym razem, gdy musi ustawić algorytm w modelu?** Jeśli odpowiedź brzmi, że dobrze jest gdzieś przechowywać algorytmy - to gdzie? W modelu? - ma sens, ponieważ model zawiera logikę biznesową i dane aplikacji. Ale w jaki sposób widok pobierze nazwy algorytmów? W kontrolerze? - ma sens, ponieważ sterownik jest tym, który ustawia algorytmy w modelu. A także może oferować widokowi metodę `getAlgorithmNames()`. Ale technicznie rzecz biorąc, nie powinien zawierać obiektów logiki biznesowej, a tym właśnie są algorytmy. W innej klasie, z której każdy zainteresowany może pobrać algorytmy lub ich nazwy? Jestem pewien, że było wiele aplikacji, w których użytkownik wybiera operację, a odpowiedni algorytm jest ustawiony w modelu. Jak robią to inne aplikacje?


title: Algorytmy lub wzorce dla połączonego kalkulatora kosztów pytań i odpowiedzi

text: Zostałem poproszony o zbudowanie kalkulatora online w PHP (i frameworku Laravel). Aby oszacować koszt rozszerzenia domu, potrzebne będą odpowiedzi na szereg pytań. Na przykład, kilka pytań może brzmieć: * Jakie jest kłamstwo twojej własności? Płaski, lekko nachylony, mocno nachylony. (te sugestywne wartości mogą mieć określone wartości w podstawowym kalkulatorze, takie jak 0 stopni, 5 stopni, 10 stopni). * Jaki jest Twój obecny system podłogowy? Drewniany czy betonowy? Miałyby one następnie wpływ na wyniki innych pytań. Po wprowadzeniu rozmiaru rozszerzenia ukształtowanie terenu będzie miało wpływ na koszt prac na budowie i wywóz śmieci. Drugie pytanie będzie miało wpływ na koszt podłóg do rozbudowy, ponieważ wybijanie i układanie desek podłogowych to inny koszt niż układanie fundamentów i płyty betonowej. Wpłynie to również na to, jakie systemy ogrzewania i chłodzenia są dostępne w kalkulatorze. Więc to jest BARDZO powiązane. Odpowiedź na dowolne pytanie może wpłynąć na opcje innych pytań i wynik końcowy. Mam problem ze znalezieniem podejścia do tego, które pozwoliłoby na podłączenie nowych opcji i pytań na późniejszym etapie bez zbytniego łączenia. Wzorzec Observer lub zdarzenia Laravela mogą się przydać, ale obecnie sama szerokość kalkulatora sprawia, że mam problemy z zebraniem myśli i zobaczeniem sensownej implementacji. Czy istnieją jakieś wzorce lub podejścia OO, które mogą pomóc?


title: Czy obecny JIT optymalizuje wygenerowane kody maszynowe pod kątem przewidywania rozgałęzień na podstawie statystyk środowiska wykonawczego?

text: Niektóre maszyny JVM skompilowałyby kod bajtowy Javy do natywnego kodu maszynowego. Wiemy, że istnieje wiele optymalizacji, które moglibyśmy w tym celu zastosować. Ostatnio dowiedziałem się również, że operacja brancha może zablokować procesor i znacząco wpłynąć na wydajność, jeśli procesor dokona błędnej prognozy. Czy ktoś wie, czy jakakolwiek JVM generowałaby kody maszynowe łatwiej dla procesora, dokonując właściwych przewidywań na podstawie zebranych statystyk środowiska wykonawczego?


title: Uwzględnianie najpierw lokalnych nagłówków

text: Przeczytałem więc kolejność twoich dołączeń, a ten gość zasugerował, abyś najpierw dołączył lokalny nagłówek, aby upewnić się, że nie ma wymagań wstępnych. Ok, rozumiem. Jestem na pokładzie. Cała ta sprawa z podziałem na przedziały jest dobra. Ale mam ten plik, file.c, który zawiera `file.h`, który deklaruje funkcje do zapisywania plików. Który przekazuje typ `FILE*` używany przez `fopen` i znajomych. Jeśli dołączę `file.h` przed dołączeniem `stdio.h`, to pojawi się oczywisty błąd parsowania podczas budowania `file.h`, ponieważ nie wie on o typie `FILE*`. Wiem, że muszę przeoczyć coś prostego, ale mogę to sformułować w coś, czego może użyć Google. Czy powinienem robić coś innego w `file.h`? Czy to po prostu coś, co trzeba uwzględnić w określonej kolejności? Myśli?


title: Czy struktury danych powinny być zintegrowane z językiem (jak w Pythonie) czy być dostarczane w standardowej bibliotece (jak w Javie)?

text: W Pythonie i najprawdopodobniej wielu innych językach programowania wspólne struktury danych można znaleźć jako zintegrowaną część _core language_ z własną dedykowaną składnią. Jeśli odłożymy na bok zintegrowaną składnię list LISP, nie przychodzi mi do głowy żaden inny znany mi język, który zapewnia jakąś strukturę danych nad tablicą jako zintegrowaną część ich składni, chociaż wszystkie (chyba C) wydaje się, że udostępnia je w standardowej bibliotece. Z perspektywy projektowania języka, jakie są Twoje opinie na temat posiadania określonej składni struktur danych w języku podstawowym? Czy to dobry pomysł i czy cel języka (itp.) zmienia, jak dobry może być wybór? **Edytuj:** przepraszam za (podobno) zamieszanie co do struktur danych, które mam na myśli. Mówię o tych podstawowych i powszechnie używanych, ale wciąż nie tych najbardziej podstawowych. Wyklucza to drzewa (zbyt złożone, rzadkie), stosy (zbyt rzadko używane), tablice (zbyt proste), ale obejmuje m.in. zestawy, listy i hashmapy.


title: Jaka jest różnica między prototypem a rozwiązaniem na poziomie produkcyjnym?

text: To pytanie służy wyłącznie nauce i pogłębieniu mojego zrozumienia technicznego. Wiem, że nie ma idealnego rozwiązania i to pytanie może mieć niekończącą się listę rozwiązań, ale myślę, że bardzo ważne jest, aby każdy architekt zrozumiał różnicę między projektem demonstracyjnym a projektem na żywo. W przeszłości stworzyłem wiele rozwiązań demo w .Net. Zostałem teraz przydzielony do architekta i zaimplementowałem rozwiązanie internetowe na poziomie produkcyjnym, więc chciałem zapytać - na bardzo wysokim poziomie, co jest wymagane do przekształcenia wersji demonstracyjnej w rozwiązanie na poziomie produkcyjnym. Z mojego punktu widzenia będzie to wymagało (innych niż funkcjonalne wdrożenie wymagań klientów): 1. Testowanie jednostkowe każdej metody 2. Zapewnienie ~100% pokrycia kodu jest osiągnięte 3. Rejestrowanie wszystkich wyjątków i możliwych punktów - możliwe z AOP 4. Korzystanie z projektowania interfejsu wzorzec, wstrzykiwanie zależności, ewentualnie za pomocą frameworka np. spring.net 5. Wykorzystanie liczników wydajności i profilerów do instrumentacji 6. Stosowanie odpowiednich zabezpieczeń - np. uwierzytelnianie systemu Windows (jeśli tego wymaga klient). 7. Zarządzanie transakcjami na każdej metodzie 8. Backup plików aplikacji webowych przed wdrożeniem nowego rozwiązania **Co jeszcze?** Moje pytanie dotyczy bardziej strony technicznej niż funkcjonalnej/dokumentacyjnej, bo inaczej pójdziemy inną ścieżką :-) Dziękuję Ci.


title: Czy POST dla elementu na ogół nie jest widoczny lub jest nieprawidłowy w interfejsach API REST?

text: Przeglądałem wikipedię na temat REST, czytając konkretnie sekcję dotyczącą interfejsów API REST Czytając różne sposoby traktowania elementów z kolekcji, przeczytałem, że POST _nie jest powszechnie używany_. Jak to działa w praktyce? Czy po opracowaniu udanych interfejsów API REST, jeśli chodzi o elementy, POST po prostu nie istnieje lub zwraca błąd? Czy kryje się za tym rozumowanie, którego nie pojąłem?


title: Czy praktyczne jest pisanie kodów zakończenia w skrypcie, w którym wynik jest bardziej złożony niż sukces/porażka?

text: Tam, gdzie pracuję, jesteśmy w trakcie automatyzacji wielu zadań, które obecnie muszą być wykonywane ręcznie przez informatyka, aby określić, czy można wykonać następne zadanie (drugie zadanie zależy od pewnych wyników pierwszego zadania). Kończymy pierwszą fazę procesu automatyzacji skryptów, po przerobieniu pierwszego zadania, aby mieć lepszą obsługę rejestrowania, obsługi błędów, a nawet wysyłania raportu pocztą elektroniczną, ale nie będziemy w stanie od razu przerobić drugiego zadania, więc pozostanie w obecnym stanie ręcznego użytkowania. W międzyczasie zasugerowano, abyśmy zaimplementowali kody zakończenia w pierwszym zadaniu, aby po prostu połączyć drugie zadanie, w jego obecnym stanie, z pomyślnym pierwszym zadaniem. Jedynym problemem jest to, że pierwsze zadanie jest trochę bardziej skomplikowane niż tylko sukces/porażka. Istnieje wiele różnych części, które mogą przejść, które pozwolą na wykonanie drugiego zadania w określony sposób. Teraz wiem, że nic z tego nie jest niemożliwe z kodami wyjścia. Moglibyśmy poświęcić trochę czasu na wdrożenie pierwszego zadania, aby zwrócić wszystkie te różne kody wyjścia, tak aby drugie zadanie mogło być uruchamiane w sposób półautomatyczny w oparciu o te kody wyjścia jako tymczasowe rozwiązanie, aby cały proces był zautomatyzowany, dopóki nie uzyskamy czas wejść i przerobić drugie zadanie we właściwy sposób. Moje pytanie brzmi, czy warto poświęcić czas na zaimplementowanie kodów wyjścia do skryptu jako tymczasowe rozwiązanie większego problemu, w którym skrypt jest bardziej złożony niż sukces/porażka? Uwaga: Implementacja kodów zakończenia zajmie trochę czasu, ponieważ nasza przeróbka pierwszego zadania nie została zaprojektowana do zwracania kodów zakończenia (jest to samodzielny skrypt, który obsługuje własne logowanie i raportowanie błędów). Edycja: Oczywistym jest, że **musimy** cofnąć się i przerobić drugie zadanie w taki sposób, aby oba zadania mogły być uruchamiane niezależnie od siebie (ich wyniki/stan będą udostępniane za pośrednictwem bazy danych). Edycja: Ogólnie wiem, że przydatne jest posiadanie kodów wyjścia, ale moja obecna sytuacja wymaga poświęcenia znacznej ilości czasu na rozwój, aby wrócić i poprawnie zaimplementować kody wyjścia (ponownie, ponieważ wynik skryptu jest dość złożony z wieloma różnymi poziomy sukcesu/porażki), gdy nie są one częścią ogólnego rozwiązania, ale tymczasowym włamaniem do naszego nowego systemu w celu „podrobienia” go jako całkowicie zautomatyzowanego systemu, dopóki nie będziemy mogli faktycznie ukończyć przeróbki. Myślę, że jest to bardziej pytanie „Czy czas poświęcony na wdrożenie tego hacka, choć nie jest to kompletne rozwiązanie, jest tego wart, jeśli musimy wrócić i cofnąć hack później?” pytanie.


title: Jak sprawnie radzić sobie z nieobsługiwanymi przeglądarkami?

text: Ostatnio zacząłem eksperymentować z niektórymi nowszymi specyfikacjami W3C, takimi jak WebGL i Web Audio API, które nie są jeszcze powszechnie obsługiwane w przeglądarkach. Ponieważ chcę, aby moja strona wyglądała profesjonalnie, potrzebuję sposobu na wdzięczne traktowanie nieobsługiwanych przeglądarek. Teraz zastanawiałem się: * Czy istnieje norma lub wytyczna, która szczegółowo określa, co powinna zobaczyć osoba, gdy jej przeglądarka nie obsługuje określonej strony? * Czy są jakieś pułapki, na które powinienem zwrócić uwagę podczas wdrażania nieobsługiwanej wiadomości? * Biorąc pod uwagę niezwykle szybkie tempo, w jakim przeglądarki wypuszczają nowe, zaktualizowane wersje, w jaki sposób mogę zapewnić, że mój skrypt będzie nadal działał w przyszłych wersjach przeglądarek, które faktycznie mają wcześniej nieobsługiwaną funkcję, bez ich blokowania?


title: Czy wykonywanie SQL przez WebService to naprawdę zły pomysł?

text: Zazwyczaj podczas tworzenia prostego narzędzia lub czegoś, co musi korzystać z bazy danych, przechodzę przez dość długi proces najpierw tworzenia usługi internetowej, która łączy się z bazą danych, a następnie tworzenia metod w tej usłudze internetowej, które wykonują wszystkie rodzaje zapytań, których potrzebuję. like List<Users> GetUsers() { ... } User GetUserByID(int id) { ... } //Więcej metod Get/Update/Add/Delete Czy to okropny projekt, aby po prostu uczynić usługę internetową tak bezpieczną, jak to tylko możliwe ( nie do końca pewien, jak zrobić coś takiego jeszcze) i po prostu utwórz kilka metod, takich jak ta SqlDataReader RunQuery(string sql) { ... } void RunNonQuery(string sql) { ... } do internetu, jak sądzę, co brzmi źle, ale nie jestem pewien. Po prostu czuję, że marnuję tyle czasu na uruchamianie wszystkiego za pośrednictwem tej usługi internetowej, musi istnieć szybszy, ale bezpieczny sposób, który nie wymaga bezpośredniego łączenia się aplikacji z bazą danych (aplikacja nie może połączyć się bezpośrednio z bazą danych, ponieważ baza danych jest nie jest otwarty na żadne połączenia, ale localhost i gdzie znajduje się aplikacja, standardowe porty sql są i tak blokowane) Zwłaszcza, gdy wystarczy uruchomić kilka prostych zapytań


title: Najlepsze praktyki w pisaniu komentarzy i dokumentacji

text: Komentowanie w dzisiejszych czasach jest łatwiejsze niż kiedykolwiek. W Javie istnieje kilka fajnych technik łączenia komentarzy z klasami, a środowiska IDE Javy są dobre w tworzeniu powłok komentarzy. Języki takie jak Clojure pozwalają nawet dodać opis funkcji w samym kodzie funkcji jako argument. Jednak nadal żyjemy w czasach, w których często pojawiają się przestarzałe lub słabe komentarze pisane przez dobrych programistów - jestem zainteresowany zwiększeniem solidności i użyteczności moich komentarzy. W szczególności interesuje mnie Java/Clojure/Python, ale odpowiedzi nie muszą być specyficzne dla języka. Czy pojawiają się jakieś nowe techniki, które sprawdzają poprawność komentarzy i automatycznie wykrywają „niepełne” komentarze (na przykład komentarze z magicznymi liczbami, niekompletne zdania itp.) lub niepoprawne komentarze (na przykład wykrywanie błędnie napisanych zmiennych itp.). I co ważniejsze: czy istnieją akceptowane „polityki komentowania” lub strategie? Istnieje wiele porad dotyczących kodowania – ale co z „jak komentować”?


title: Operacje Atomic Memcache w PHP

text: Ten post jest kontynuacją tego pytania: PHP Atomic Memcache na StackOverflow. Biorąc pod uwagę, że używam Memcache (bez d na końcu) w PHP 5.3.10, zaimplementowałem niestandardowy system blokowania, w którym klient będzie czekał, aż klucz blokady zostanie zniszczony, zanim zacznie modyfikować klucz w memcache. Tak więc: Klient 1 łączy się, sprawdza aktywną blokadę na kluczu 1, nie znajduje żadnej i pobiera dane Klient 2 łączy się kilka mikrosekund po Kliencie 1, żąda tych samych danych z klucza 1, ale znajduje blokadę Klient 2 wchodzi w pętlę ponawiania dopóki Klient 1 nie zwolni blokady Klient 1 zapisuje nowe dane do klucza 1, zwalnia blokadę Klient 2 pobiera świeże dane, ustawia blokadę na kluczu 1 i kontynuuje. Działa to w 90% przypadków. Działałoby to w 100% przypadków, gdyby dwa żądania były wysyłane daleko od siebie (powiedzmy 500 ms). Ale powiedzmy, że dwa żądania są wykonywane prawie w tym samym czasie (od 10 do 100 mikrosekund), powyższe rozwiązanie kończy się niepowodzeniem i obaj klienci zapisują do tego samego klucza, co skutkuje nieprawidłowymi danymi. Próbowałem wielu rzeczy, w tym pętli, która zmienia się w czasie oczekiwania w każdej iteracji: while(/* klucz blokady istnieje*/) { usleep(mt_rand(1000,100000);} To pomaga tylko trochę.Jakie byłoby rozwiązanie ten konkretny problem?Te procesy mecache muszą być atomowe.Jestem skłonny tolerować wskaźnik niepowodzeń 1% (ponieważ oznacza to, że muszę trochę ciężej pracować, aby uzyskać 0), ale wszystko więcej jest po prostu zbyt ryzykowne.Mam złamałem głowę próbując to rozgryźć.Nie ma możliwości uaktualnienia do Memcached, a zmiany wartości nie są proste (nie są przyrostami)


title: Jak ożywić mój pomysł należący do mojej firmy?

text: Zastanawiam się, jakie mam opcje w poniższej sytuacji. W trakcie kilku projektów zdałem sobie sprawę z potrzeby dodatkowego oprogramowania (związanego z testowaniem głównych produktów). Postawiłem na kreatywne podejście do sprawy i wdrożyłem system, który moim zdaniem ma potencjał i wygląda obiecująco (może nie na rynku, ale przynajmniej wśród zainteresowanych zwolenników). Mam jeszcze więcej pomysłów związanych z tym systemem i rozwijam się w czasie wolnym i pracy. Stała się jednocześnie pracą i hobby. Niestety praca ta w zasadzie nie ma nic wspólnego z działalnością firmy i nie ma możliwości, aby została zorganizowana w formie standardowego procesu rozwoju i zaprezentowana klientom jako produkt. Co możesz zasugerować w tej sytuacji? Jak uniknąć naruszenia umowy? Czy miałeś coś podobnego w swojej karierze? Co jeśli moim zamiarem jest rozwijanie go jako projektu open source?


title: Obliczanie ceny za kod źródłowy i oprogramowanie

text: Mam zamiar podjąć się projektu. To wymaga ode mnie pisania kodu i tony tego. Wymaganiem klienta jest dostarczenie całego kodu źródłowego na końcu projektu. Moje pytanie brzmi: Jak określić cenę za kod źródłowy i oprogramowanie? Czy jest jakiś wskaźnik, którym się kierujesz, aby określić cenę? Jak określiłbym oprogramowanie? _Dodatkowe informacje:_ Aplikacja musi działać w dowolnym miejscu, w dowolnym systemie operacyjnym, w tym na tabletach (iPad, karty Galaxy itp.), smartfonach (iPhone, telefony z systemem Android itp.), a także w Internecie. _(Teraz wyobraź sobie, ile to będzie kodu)_.


title: System typu C# i typ dynamiczny

text: Piszę artykuł o systemie typu C# (i Go) z naciskiem na aspekt dynamiczny. Czy ktoś ma sugestie dotyczące artykułów/literatury? Rzeczy, które znalazłem, nie wnikają zbytnio w szczegóły. Chciałbym dodać kilka akapitów o tym, jak to jest zaimplementowane, porównania z innymi językami, szybkość, alokacja pamięci itp.


title: Refleksyjna praktyka programowania z wykorzystaniem odtwarzania naciśnięć klawiszy

text: Zastanawiam się nad zastosowaniem Praktyki Refleksyjnej do doskonalenia swoich umiejętności programistycznych. W tym celu chcę móc przyglądać się, jak piszę kod. Ogólnie rzecz biorąc, jaka jest dobra metoda zastosowania praktyki refleksyjnej w rzemiośle programowania? W szczególności, jeśli to dobry pomysł, czy istnieje edytor, który rejestruje naciśnięcia klawiszy, a następnie odtwarza je w późniejszym czasie – prawdopodobnie uruchamiając klawisze bez opóźnień lub odtwarzając z przyspieszeniem 2x/4x/8x? Screencasting za pomocą RecordMyDesktop jest opcją, ale ma wady polegające na czekaniu na kodowanie i kończeniu z dużym plikiem wideo zamiast listy naciśnięć klawiszy. * * * _Aktualizacja_ : Od „oglądania własnego kodu” oczekuję, że dowiem się, jakie błędy popełniam najczęściej lub gdzie marnuję czas podczas kodowania. Wtedy będę mógł pracować nad poprawą tych aspektów. Mogą to być pewne błędy formatowania, składni lub czasu wykonywania, a może długie przerwy, które wskazują, że nie rozważałem jakiegoś problemu przed rozpoczęciem kodowania, a może przepisałem całe funkcje, ponieważ mój początkowy projekt był błędny. Rozumiem, że programowanie to o wiele więcej niż samo pisanie kodu i to nie uchwyci tego wszystkiego. Zgodnie z zaleceniami powinienem zrobić więcej notatek projektowych i zastanowić się nad nimi. Nagrywanie naciśnięć klawiszy może być bardziej pomocne w doskonaleniu mojej techniki w ograniczonych czasowo konkursach programistycznych, a mniej przydatne w ulepszaniu codziennego programowania w biurze.


title: Czy jesteś programistą funkcjonalnym?

text: Czy jesteś programistą funkcjonalnym? Mam tu na myśli * zatrudniony w pełnym wymiarze czasu * opłacany przez kogoś innego * używający uznanego języka funkcjonalnego (Haskell, Scala, Erlang, F# itp., a nie tylko technik FP w imperatywnym języku, takim jak JavaScript) Jeśli tak, to co robisz i jak się tam dostałeś?


title: Studiowanie programowania równoległego

text: Obecnie kończę studia licencjackie z informatyki i dużo zastanawiam się, którą specjalizację wybrać na studiach magisterskich. Jednym z tematów, który szczególnie mnie interesuje, jest programowanie równoległe. Jednak ten temat nie wydaje się być standardowym tematem na studiach z informatyki, choć jest to coś, co jest coraz częściej używane – nowe procesory w dzisiejszych czasach to zazwyczaj dwu- lub czterordzeniowe. Zastanawiałem się więc: czy ktoś zna dobry program studiów na tym kierunku? Szukałem go głównie na uniwersytetach w Niemczech, ale zazwyczaj łączą one stronę aplikacji z jakimś rodzajem inżynierii lub nauk przyrodniczych. Tak więc programy są bardziej typu „inżynieria obliczeniowa” lub „nauka obliczeniowa”, ale bardziej interesuje mnie część informatyczna, czyli programowanie równoległe, języki i kompilatory, algorytmy i sprzęt.


title: Czy program powiązany z biblioteką LGPL w systemie Linux jest nadal na licencji GPL?

text: Gdybym miał napisać, powiedzmy, wbudowany linuxowy serwer wideo, ile kodu mam do zaoferowania komuś, kto poprosi o źródło? Czy muszę oferować kod, który bezpośrednio łączy się z kodem objętym GPL, czy muszę oferować cały kod? Na przykład, jeśli używam gstreamera lub innego kodu LGPL na platformie linux w moim programie, czy cały mój kod staje się na licencji GPL tylko dlatego, że gdzieś w łańcuchu program LGPL musiał łączyć się z kodem GPL? Myślę, że to rozszerzenie pytania. Czy możesz napisać bibliotekę C, która kompiluje się w Linuksie, która nie podlega GPL?


title: Czy refaktoryzacja powinna być wyjątkiem czy regułą?

text: Wczoraj rozmawiałem ze współpracownikiem na temat filozofii projektowania. Drugi koder jest bardziej doświadczony ode mnie iw pełni przyznaję, że prawdopodobnie znacznie lepiej radzi sobie z automatyzacją testów, które właśnie próbuję przełamać niechlujne nawyki. Wydaje się jednak, że część naszego sporu to kwestie filozoficzne, w których nie chcę po prostu poddać się jego większemu doświadczeniu. Generalnie jest programistą reżyserskim, który przestrzega wszystkich formalnych podejść. Ma interfejsy dla prawie każdej klasy i zautomatyzowane testy dla wszystkiego, aż do getterów i seterów na podstawowych obiektach POJO. Postrzega refaktoryzację jako brudne słowo, które jest znakiem, że rzeczy nie zostały napisane/zaprojektowane właściwie od samego początku, jest nieuniknione i zrobione w razie potrzeby, ale należy zrobić wszystko, aby uniknąć konieczności robienia tego i powinieneś czuć się źle, gdy musisz . Czuję, że jestem bardziej elastyczny/umożliwiający programistę. Uważam, że interfejsy powinny być używane w razie potrzeby, ale nie wrzucane, dopóki nie będą potrzebne (KISS), i że dość łatwo jest wyciągnąć interfejs z istniejącego obiektu przez refaktoryzację, jeśli zdecydujesz, że interfejs/polimorfizm ma później większy sens. Czułem również, że chociaż przyznaję, że muszę być lepszy w testowaniu niż obecnie, poziom testów automatycznych, który sugerował, wydawał się zbyt rygorystyczny, ponieważ wdrożenie zajęłoby tak dużo czasu i, co ważniejsze, sprawiło, że refaktoryzacja byłaby koszmarem, ponieważ ja bym nie mieć swobody w modyfikowaniu zachowania jakiejkolwiek metody nieprywatnej. Ponieważ moje wymagania rosną i zmieniają się, często refaktoryzuję się, a ten poziom testowania wydaje się, że zabiłby moją elastyczność. Jego zdaniem nie powinienem _poddawać się_ refaktoryzacji, więc nie ma znaczenia, czy testy utrudniają to. Ostatecznie wszystkie inne dyskusje filozoficzne wydawały się sprowadzać do słowa „refaktor”. Uwielbiam refaktoryzację, uważam, że powinno się go swobodnie używać za każdym razem, gdy czujesz, że coś nie jest tak czyste i piękne, jak powinno być, i że naturalny przebieg rozwoju programu lub dodawania nowych wymagań będzie wymagał refaktoryzacji, aby lepiej umożliwić kod ponowne wykorzystanie, przenoszenie logiki do nowych klas/pakietów, gdy stają się one coraz bardziej złożone, i tak, naprawianie nieuniknionych błędów projektowych, które pojawią się przy elastycznym podejściu do programowania zwinnego (i to nie zawsze jest złe, jeśli Twój kod jest napisany, aby umożliwić modyfikację!). On się z tym nie zgadza. Zastanawiam się, co myślą inni o refaktoryzacji. Jak powszechne powinno być? Czy pisanie kodu z filozofią „teraz robię to prosto, mogę to zmienić później, jeśli bardziej skomplikowana logika okaże się konieczna” jest z natury wadliwa/niebezpieczna? Czy akceptowalność refaktoryzacji zależy od podejścia i stylu programu? Generalnie jestem na szybkim prototypowaniu lub „posprzątaj ten brzydki, ale działający prototyp, który napisali niektórzy nie-inżynierowie”, podczas gdy wygląda na to, że faktycznie robi formalne programowanie z oficjalnymi wymaganiami, które się nie zmieniają; Sama nigdy nie miałam takiej pracy!


title: Kibibtye lub Kilobajt reprezentujący 1024 bajty

text: Pracuję nad projektem z kilkoma starszymi programistami i robiliśmy dokumentację programu, kiedy odbyłem gorącą debatę z jednym ze starszych programistów na temat terminu: `kilobajt`. Chciał pozostać przy starym sposobie używania `kilobajtów` do reprezentowania 1024 bajtów, ponieważ powiedział, że większość programistów rozumie termin: kilobajt do reprezentowania 1024 bajtów. Chciałem, aby nowy sposób używania `Kibibyte` do reprezentowania 1024 bajtów, ponieważ nie możemy wiecznie tkwić w naszych starych sposobach i został on zaktualizowany przez społeczność. Jak mam rozwiązać ten konflikt z nim, aby uspokoić nas oboje?


title: Czy istnieje nazwany antywzorzec dla niejasnego interfejsu API, który nie ujawnia wymagań?

text: W kodzie źródłowym, który oceniam (jarjar), istnieje kod java, którego można użyć w następujący sposób: JarJarTask osprzęt = new JarJarTask(); Fixture.addConfiguredRule(nowa Reguła()); urządzenie.wykonaj(); Który zgłosi wyjątek taki jak: java.lang.IllegalArgumentException: Element <rule> wymaga atrybutów „pattern” i „result”. Teraz jest dla mnie jasne, że API jest tutaj mniej niż optymalne - jeśli element rule wymaga tych atrybutów, powinien poprosić o nie w konstruktorze (lub dostarczyć Konstruktora lub podobnego, który by ich wymagał). Ale nie mogłem znaleźć konwencji kodowania ani zaleceń dotyczących programowania w javie, które by się ze mną zgadzały. Czy jest na to jakaś konkretna nazwa, której mogę użyć, aby znaleźć to w badaniach, literaturze programistycznej, przewodnikach stylistycznych? Jakich terminów mogę użyć, aby znaleźć dyskusję na ten temat? Z pewnością zostało to gdzieś omówione przy użyciu pewnych terminów, ale wydaje mi się, że nic nie mogę znaleźć. * * * Znalazłem dyskusję na temat wstrzykiwania konstruktora przedstawionego przez Kenta Becka w Smalltalk Best Practice Patterns i wspieranego przez Martina Fowlera, co zgodnie z tym czyni „od razu jasnym, czego wymaga klasa, gdy jest ona tworzona, a ponadto jest niemożliwe do utworzenia instancji klasy bez przekazywania obiektów pola”. Więc to jest przynajmniej punkt wyjścia do dyskusji.


title: Budowanie projektu biblioteki statycznej w języku C++ ze strukturą folderów

text: Pracuję nad kilkoma bibliotekami statycznymi używając Visual Studio 2012, a po zbudowaniu kopiuję pliki .lib i .h do odpowiednich katalogów, aby dopasować żądaną hierarchię, taką jak: dysk:/libraries/libname/includes/libname/framework drive:/ library/libname/includes/libname/utitlies drive:/libraries/libname/lib/... itd. Myślę o czymś podobnym do układu folderu boost. Do tej pory robiłem to ręcznie. Moje rozwiązanie biblioteczne zawiera projekty, a kiedy aktualizuję i rekompiluję, po prostu kopiuję pliki tam, gdzie powinny. Czy jest na to prostszy sposób? Być może sposób na skompilowanie projektu z pewnymi regułami dla projektu, co do miejsca, w którym powinny znajdować się pliki .hi .lib projektów?


title: Czy muszę powiadamiać użytkownika, jeśli korzystam z oprogramowania statystycznego w aplikacji na iPhone'a?

text: Obecnie tworzę (bardzo prostego) klienta Objective-C do wysyłania podstawowych danych statystycznych na mój serwer dla aplikacji na iPhone'a - tylko takie rzeczy jak stan aplikacji (pierwsze uruchomienie lub uruchomienie, błąd itp.) wraz z marką /model/wersja (np.: „iPod touch 4.2”). Nie są wysyłane żadne informacje umożliwiające identyfikację osoby ani dane o lokalizacji. Czy jest coś w umowie Apple Developer lub innej, która stanowi, że muszę powiadomić użytkownika, jeśli to robię? Nie jestem zainteresowany sprzedażą danych ani niczym, chcę po prostu wykorzystać te dane, aby ulepszyć moje aplikacje. Nie mam nic przeciwko informowaniu użytkownika, że robię to, jeśli jest to wymagane, po prostu nie chcę przestraszyć użytkowników (paranoiczne „oooch, śledzą mnie, wiedzą dokładnie, gdzie jestem”), jeśli nie muszę. Dzięki za jakąkolwiek radę.


title: Zacznij od aplikacji komputerowej typu open source i przejdź do aplikacji na iPhone/Android

text: Uczęszczam do liceum i biorę udział w konkursie na oprogramowanie open source. Musi to być aplikacja komputerowa działająca w systemie Windows lub Linux. Mam świetny pomysł na aplikację komputerową typu open source i chciałem się dowiedzieć, czy mogę go przenieść dalej i przenieść na platformę iPhone lub Android i zarabiać (najlepiej przez koszt 0,99 USD, a nie reklamy) Czytałem gdzieś, że niektóre licencje open source pozwalają mi to zrobić... czy mam rację?


title: Najlepszy sposób na wydajne wyświetlanie informacji podsumowujących obiekt domeny w sposób OO z dużego drzewa dziedziczenia?

text:
**Podałem tylko uproszczony kod, ponieważ jest to bardziej abstrakcyjne pytanie projektowe.** Mam więc wiele, wiele zagnieżdżonych obiektów zdarzeń biznesowych/domenowych, np. public class Event { //pęczek właściwości i standardowych akcesorów } public class ExplosionEvent extends Event { //właściwości i standardowych akcesorów } I wiele innych na różnych poziomach. Jeśli potrzebuję informacji o wybranym obiekcie, wyświetlam go w HTML, tak jak private String generateHTML(Event event) { StringBuilder sb = new StringBuilder(); sb.append("
");//simplified sb.append("Czas	"); sb.append("" + event.getEventTime() + "	"); if (event instanceof ExplosionEvent) { //append HTML i dane specyficzne dla ExplosionEvent } // ...wiele, wiele innych wywołań, jak to powyżej sb.append("
"); } Ponieważ mam wiele typów zdarzeń, oznacza to mnóstwo zduplikowanych znaczników tabeli HTML i użycie `instanceof`, więc `generateHTML` ma setki wierszy, oczywiście podzielonych na metody, ale mimo to jest dużo kodu, który utrudnia zrozumieć, nawigować, a zatem utrzymywać. To jest brzydkie i potrzebuję do tego lepszego projektu. Wpadłem na pomysł stworzenia metody na `Event`, która jest nadpisywana przez wszystkie podmetody //Użycie LinkedHashMap w celu zachowania porządku, ponieważ Properties nie robią tego public LinkedHashMap<String, String> getAttributes() { LinkedHashMap<String, String> list = nowy LinkedHashMap<String, String>(); list.put("Czas", czas zdarzenia); } podklasy następnie zastępują to, wywołując ich rodzica i dodając specyficzną dla nich datę do listy, co oznacza, że bez względu na liczbę klas `Event` istniejąca metoda `generateHTML` (zewnętrzna względem obiektów `Event`) po prostu być jedną małą pętlą private String generateHTML(Event event) { StringBuilder sb = new StringBuilder(); b.append("<tabela>"); for (Entry<String,String> entry : event.getAttributes().entrySet()) { sb.append("" + entry.getKey() + "	"); sb.append("" + entry.getValue() + "	"); } sb.append("
"); } Czy to umieszczanie zbyt dużej logiki w obiektach biznesowych/domenowych? **Czy jest lepszy sposób**?


title: Jak ważne jest stworzenie warstwy usług?

text: Zacząłem budować aplikację w 3 warstwach (DAL, BL, UI) [obsługuje głównie CRM, niektóre raporty sprzedaży i inwentaryzację]. Kolega powiedział mi, że muszę przejść do wzorca warstwy usług, że programiści przyszli do wzorca usług z własnego doświadczenia i jest to lepsze podejście do projektowania większości aplikacji. Powiedział, że w ten sposób będzie znacznie łatwiej utrzymać aplikację w przyszłości. Osobiście mam wrażenie, że to tylko komplikuje sprawy i nie widziałem w tym wiele korzyści, które by to usprawiedliwiały. Ta aplikacja ma dodatkowy mały częściowy interfejs użytkownika, który wykorzystuje niektóre (ale tylko kilka) funkcji aplikacji komputerowych, więc zduplikowałem trochę kodu (ale niewiele). Tylko z powodu duplikacji kodu nie przekonwertowałbym go na zorientowany na usługi, ale powiedział, że powinienem go używać, ponieważ ogólnie jest to bardzo dobra architektura, dlaczego programiści są tak pasjonatami usług? Próbowałem go wygooglować, ale nadal jestem zdezorientowany i nie mogę zdecydować, co zrobić.


title: Jak zmusić współtwórców do przypisania praw autorskich właścicielowi praw autorskich?

text: Załóżmy, że mamy firmę i wydajemy nasz projekt na licencji LGPL i GPLv3, ponieważ wiecie jedyną rzeczą tutaj jest wkład. Ludzie wprowadzają poprawki błędów/funkcje do projektu, wszystko jest w porządku, a my jesteśmy fanami GPL. W zasadzie firma zarabia na tym projekcie. A co z współtwórcami? Wiem, że popełniają kod, a oprogramowanie staje się lepsze i jest to dla nich spłata. Ale jak możemy sprawić, by współtwórcy przypisali prawa autorskie właścicielowi praw autorskich?


title: Zastępowanie GetHashCode w strukturze mutowalnej — czego NIE robić?

text: Korzystam z XNA Framework do tworzenia projektu edukacyjnego. Ma strukturę Point, która ujawnia wartości X i Y; w celu optymalizacji łamie zasady prawidłowego projektowania struktur, ponieważ jest to **struktura zmienna**. Jak zauważają Marc Gravell, John Skeet i Eric Lippert w swoich postach na temat `GetHashCode()` (którego Point zastępuje), jest to raczej zła rzecz, ponieważ jeśli wartości obiektu zmieniają się, gdy jest on zawarty w hashmapie (tj. zapytań LINQ), może zostać „zgubiony”. Jednak tworzę własną strukturę `Point3D`, kierując się projektem `Point` jako wytycznymi. W związku z tym jest również strukturą zmienną, która zastępuje `GetHashCode()`. Jedyną różnicą jest to, że moje ujawnia i int dla wartości X, Y i Z, ale jest zasadniczo takie samo. Podpisy są poniżej: public struct Point3D : IEquatable<Point3D> { public int X; public int Y; publiczny int Z; publiczny statyczny operator bool !=(Punkt3D a, Punkt3D b) { } publiczny statyczny operator bool ==(Punkt3D a, Punkt3D b) { } public Punkt3D Zero { get; } public override int GetHashCode() { } public override bool Equals(object obj) { } public bool Equals(Point3D other) { } public override string ToString() { } } Próbowałem złamać moją strukturę w sposób, w jaki opisują, mianowicie przechowując go w `List<Point3D>`, a także zmieniając wartość za pomocą metody używającej `ref`, ale nie spotkałem się z ich zachowaniem, przed którym ostrzegają (może wskaźnik mógłby pozwolić mi to złamać?). Czy jestem zbyt ostrożny w swoim podejściu, czy powinienem być w porządku, aby użyć go tak, jak jest?


title: Projektowanie modeli dla ogólnej warstwy usług

text: Tworzymy interfejs sieciowy do wielopoziomowego systemu członkostwa, który będzie łączył się z usługą internetową CRM innej firmy w celu tworzenia kont i zarządzania nimi. Usługa sieciowa niestety nie została jeszcze zbudowana; jednak musimy rozpocząć pracę. Stworzyłem interfejs `IMembershipService`, w którym zaczynam definiować prototypy „najlepszego zgadywania”, abyśmy mogli rozpocząć tworzenie naszych Kontroli Użytkownika. Większość z tych metod zwróci pewne dane zawarte w obiekcie Model, np.: ContactModel GetContact (string userId); Gdy metody usługi sieciowej staną się dostępne, stworzę konkretną implementację „IMembershipService”, która połączy kontrolki z usługą sieciową. Mam problem z tym, że nie wiem jeszcze, czy serwis będzie składał się z: * wywołań zwracających obiekty złożone; np. obiekt `User` z zagnieżdżonym obiektem `Membership`, który z kolei ma zagnieżdżony obiekt `PaymentMethod` * proste wywołania dla określonych informacji; np. `String GetUserMembershipType (string userId);` To powoduje, że mam problemy z określeniem struktury modeli i interfejsu, co powoduje problemy dla deweloperów rozpoczynających pracę nad Kontrolkami użytkownika: * Jeśli usługa zwraca złożone obiekty, nie robię tego. t chcę, aby moje metody `IMembershipService` były zbyt proste, zmuszając mnie do korzystania z wielu wywołań usług internetowych tam, gdzie nie jest to konieczne. * Jeśli usługa składa się z prostych wywołań, nie chcę mieć zdefiniowanego obciążenia złożonymi modelami, których nie mogę zaimplementować, a tym samym muszę wykonać obciążenie refaktoryzacji. Teoretycznie, tworzenie `IMembershipService` powinno pozwolić mi oderwać się od rzeczywistej natury usługi sieciowej, ale fakt, że każde wywołanie metody w `IMembershipService` będzie ostatecznie skutkować wywołaniem usługi sieciowej, zwiększając w ten sposób narzut, utrudnia to określenie. Jak mogę zaprojektować moje modele i `IMembershipService`, aby zminimalizować ilość refaktoryzacji, którą muszę wykonać, gdy charakter usługi sieciowej staje się mniej nieuchwytny?


title: Przekazywanie wartości przez odniesienie

text: Jaki jest klucz deference między przekazywaniem przez referencję i przekazywaniem przez wartość w PHP? function ( &$zmienna1 ,$zmienna2) { zmienna1[$x]... } Funkcja przekazująca tablicę przez referencję i wartość, jaki byłby wpływ.


title: Co jest teraz lepsze: IronRuby czy IronPython?

text: Mam duże doświadczenie zarówno z Ruby, jak i Pythonem i chcę osadzić jeden z nich w aplikacji C#, którą tworzę. Naprawdę nie obchodzi mnie który, ale chciałbym wiedzieć, który z nich ma obecnie lepsze wsparcie i ogólnie mniej zawiera błędy i jest najłatwiejszy do zaimplementowania i wdrożenia. Przyjrzałem się też dobrze Boo, z którym też się bawię. C# jest zbyt skomplikowany i gadatliwy, więc zostawiam to jako ostatnią opcję. Jeśli chodzi o to, co robię, to muszę w przyjazny i dynamiczny sposób rozbudować niektóre klasy, bez konieczności ponownej kompilacji. Będą również musieli mieć dostęp do struktury danych utworzonej po stronie C# kodu. Czy są więc jakieś zalecenia, których powinienem użyć?


title: jQuery - styl programowania - wiele wiązań vs. pojedyncze warunkowe

text:
Często widzę taki kod: $("#foo").live("mouseover mouseout", function(e) { if (e.type == "mouseover") { $("#foo").append("
"); } else { $("#bar").remove(); } }); zamiast bardziej oczywistego moim zdaniem: $("#foo").live("mouseover", function(e) { $("#foo").append("
") ; }) .live("mouseout", function(e) { $("#bar").remove(); }); to samo dotyczy $('#contentPageID, #itemURL').change ( function () { if ( $(this).is('#contentPageID') ) ... else ... }); czy ma to jakiś cel, czy jest to po prostu inny styl kodowania (z mojego punktu widzenia sprzeczny z intuicją)?


title: Czy Java będzie nadal aktualna za 5 lat?

text: Czy Java będzie miała takie samo znaczenie, jakie miała w przeszłości, czy też będzie mniej istotna niż obecnie?


title: Integracja bazy danych Oracle z serwerem Team Foundation Server?

text: Moja firma używa TFS i SQL do zarządzania bazą danych (MS SQL Server). Integruje się z nocnymi serwerami kompilacji, aby tworzyć kompilacje i tworzyć skrypty do budowy całej bazy danych. Również narzędzie Compare Schema, które oferuje Visual Studio, jest naprawdę przydatne. Chcemy zrobić to samo z Oracle, najlepiej z TFS, jeśli to w ogóle możliwe. Można to zrobić bez, ale czy jest to możliwe? Czy są też jakieś narzędzia pomagające w automatycznym tworzeniu bazy danych w nocnej kompilacji? A co z zarządzaniem aktualizacjami? Naszym wielkim zmartwieniem jest przeniesienie wyzwalaczy i brokera usług MS SQL do Oracle... ale być może będziemy musieli to zrobić ręcznie.


title: Jak długo i z jakim rodzajem złożoności Chris Sawyer napisałby większość potentata rollercoastera w asemblerze?

text: Z tego pytania mam kolejne pytanie o... Jak długo i jaki rodzaj złożoności byłby zaangażowany w pisanie przez Chrisa Sawyera większości potentata rollercoastera w asemblerze? W celu sprecyzowania i rozbicia tego pytania jestem zainteresowany; 1. W przybliżeniu, ile roboczogodzin (zgadnij), ile zajęłoby Chrisowi samodzielne napisanie gry? Albo alternatywnie podaj przybliżony procent stosunku godzin kodowania asemblera do powiedzenia, pisząc całość w C/C++. 2. Czy programiści, którzy znają asembler, uważają to za zbyt złożone zadanie dla abstrakcji języka niskiego poziomu? Czy oprócz korzyści związanych z wydajnością jest to tylko dziwaczna naturalna zdolność Chrisa, czy też zestaw umiejętności warty poznania do tego stopnia? Interesuje mnie, czy ludzie uważają, że złożoność/wydajność jest warta uczenia się asemblera tak dobrze (aby pisać), czy jest to tylko "warte tego", jeśli masz dużo naturalnie rozwiniętych umiejętności w asemblerze (przypuszczalnie z pracy ze sprzętem /sterowniki sprzętowe/elektronika/itp.).


title: Identyfikacja obiektów w Pythonie

text: Ucząc się Pythona, odkryłem, że kiedy dwie „nazwy” (lub „zmienne”) są przypisane do tej samej wartości, obie wskazują na ten sam adres pamięci. Na przykład >>> a = 10 >>> b = 10 >>> a is b True Moje pytanie brzmi, kiedy przypisując `b` Python dowiaduje się, że obiekt `10` już istnieje? Jednym ze sposobów może być utworzenie nowego obiektu dla `b`, przeskanowanie wcześniej istniejących obiektów w pamięci, aby znaleźć duplikat i, jeśli zostanie znaleziony, wskaż go `b`. Brzmi to drogo i jest trudne w przypadku bardziej złożonych obiektów.


title: Czy błąd tłumi złe praktyki?

text:
Na pytanie SO, które zapytałem tutaj o jakiś kod, którego nie byłem pewien, ktoś odpowiedział „BTW, straszny kod tam: często używa symbolu tłumienia błędu (@)”. Czy istnieje powód, dla którego jest to zła praktyka? Z takimi rzeczami jak: $db=@new mysqli($db_info) or die('Błąd bazy danych'); , pozwala mi wyświetlić tylko niestandardowy komunikat o błędzie. Bez tłumienia błędów nadal wyświetlałby typowy komunikat PHP: **Ostrzeżenie** : mysqli::mysqli(): php_network_getaddresses: getaddrinfo failed: Taki host nie jest znany. w **jakiś\plik\ścieżce** w **linii 6** oraz 'Błąd bazy danych'. Czy pomijanie błędów _zawsze_ jest złe, a jeśli tak, to co konkretnie w powyższym jest złe? Aktualizacja: rzeczywisty kod, którego używam, to: or error('Datatabase error', 'Wystąpił błąd w bazie danych' . (($debug_mode) ? '
MySQL zgłosił: ' . $db ->błąd . '
 Wystąpił błąd w wierszu ' . __LINE__ . ' z ' . __FILE__ . '' : '')) który usuwa wszystkie poprzednie dane wyjściowe i wyświetla komunikat o błędzie. Tak więc fakt, że komunikat o błędzie nie zawiera szczegółów dotyczących tego, co konkretnie się wydarzyło (co ludzie wydają się sugerować jako powód, dla którego tłumienie błędów jest złe) jest nieistotne.


title: Najlepsza praktyka Java — stała tablica ciągów i jej indeksowanie

text: Dla stałych łańcuchowych zwykle używa się klasy z wartościami `final String`. Ale jaka jest najlepsza praktyka przechowywania tablicy ciągów. Chcę przechowywać różne kategorie w stałej tablicy i za każdym razem, gdy kategoria została wybrana, chcę wiedzieć, do której kategorii należy i przetwarzać na tej podstawie. Dodatek : Aby było bardziej jasne, mam kategorię `A,B,C,D,E`, która jest stałą tablicą. Za każdym razem, gdy użytkownik kliknie jeden z elementów (przycisk będzie miał te teksty), powinienem wiedzieć, który element został kliknięty i przetworzyć go. Mogę zdefiniować „enum” (powiedz „cat”) i za każdym razem robić if clickedItem == cat.A .... else if clickedItem = cat.B .... else if .... lub nawet zarejestrować słuchaczy dla każdego przedmiot osobno. Ale chciałem poznać najlepsze praktyki w radzeniu sobie z tego rodzaju problemami.


title: Ranking pytań do wywiadu FizzBuzz (1), implementacja malloc (10)

text: Chciałbym poznać Twoją opinię na temat trudności następującego pytania wywiadu: **Znajdź ciągłą podtablicę z maksymalną sumą w tablicy liczb całkowitych w czasie O(n).** Ten banalny problem brzmieniowy rozsławił Jon Bentley w swoich Perłach Programowania, gdzie używa go do demonstrowania technik projektowania algorytmów. W skali 1-10, gdzie 1 to test FizzBuzz (lub HoppityHop), a 10 to implementacja funkcji C stdlib malloc(), jak oceniłbyś powyższy problem? Myślę, że najlepiej odpowiedzieć na to pytanie są ci, którzy przeczytali Perły Programowania i sami próbowali rozwiązać ten problem. Aby zmotywować tych, którzy tego nie zrobili, „Perły programowania” wielokrotnie pojawiały się na liście „Top 10 książek o programowaniu”. Kilka komentarzy może pomóc w uzyskaniu lepszej oceny: * Implementacja malloc() nie jest tak straszna, jak się wydaje. Zobacz na przykład język programowania C firmy K&R. Czasami jest pytany w Microsoft. * Obserwacja CLRS dotycząca rozwiązywania problemów: **_często trudniej jest rozwiązać problem od podstaw niż zweryfikować jasno przedstawione rozwiązanie, zwłaszcza gdy pracuje się pod presją czasu**._