title: Czy Agile (scrum) wymaga jednego środowiska serwerowego?

text: Czy konieczne jest/zalecane/najlepsze praktyki/jakiekolwiek inne pozytywne cechy, aby używać tylko jednego środowiska serwerowego do wykonywania wszystkich prac programistycznych, testów jednostkowych i kontroli jakości? Jeśli tak, to czy mądre/część Agile jest posiadanie tylko jednego środowiska inscenizacyjnego przed Live? Biorąc pod uwagę, że może to oznaczać międzynarodowe zespoły programistów i testerów w różnych strefach czasowych, czy jest to mądre? * * * To jest coś, co wdraża nasz kierownik ds. kontroli jakości. Wysuwana opinia jest taka, że tworzenie i testowanie na jednym serwerze jest „zwinne”. Środowisko inscenizacyjne byłoby drugim środowiskiem, a potem życiem.


title: Poznasz wiedzę specyficzną dla domeny lub zagłębisz się w podstawy?

text: ## **Kontekst** Kilka miesięcy temu skończyłem studia, a teraz pracuję jako inżynier oprogramowania w firmie zajmującej się tworzeniem oprogramowania. Uważam się za szczęściarza, że nie muszę pracować nad jedną z tych aplikacji biznesowych. Produkt, nad którym pracujemy, jest rozwiązaniem uwierzytelniającym dla – powiedziałbym – rynku masowego. Rozumiem, że nie można zbudować żadnego produktu bez głębokiego zrozumienia jego domeny. Albo była to branża, której dotyczy, albo określony zestaw protokołów/przypadków użycia/scenariuszy. W przypadku rozwiązania takiego jak nasze, wiedza domenowa to dogłębne zrozumienie protokołów uwierzytelniania używanych przez naszych potencjalnych klientów, skali, w jakiej jest ono używane, scenariuszy użytkowania i innych rozwiązań, z którymi będzie wchodzić w interakcje. ## **Pytanie** Teraz, jako stosunkowo nowy w branży, jaka byłaby twoja sugestia odnośnie mojego wykształcenia? Czy uważasz, że ważniejsze jest zagłębienie się w domenę, nad którą aktualnie pracuję i poświęcenie czasu na czytanie książek, blogów, więcej eksperymentowania w wolnym czasie z zestawem protokołów, standardów i narzędzi do budowania rozwiązań uwierzytelniania? A może lepszym pomysłem byłoby poświęcenie czasu na lepsze zrozumienie podstaw informatyki, których nie uczono mnie szczegółowo na uniwersytecie, jak na przykład: * Model obiektowy języka (C#/C++/Java/anything's) , rozumiejąc, jak naprawdę mój kod źródłowy jest tłumaczony na asembler, co jest rozszerzane przez kompilator, jak mogę oczekiwać, że rzeczy będą naprawdę rozłożone w pamięci (biorąc pod uwagę wszystkie optymalizacje, triki itp. wykonane przez kompilator i/lub uruchomienie -czas). * Zaawansowane techniki wielowątkowości, wiedza wykraczająca poza podstawy, takie jak współdzielone blokady r/w, dekompozycja zadań/danych lub podstawowa atomowość/bezblokad. * Układy pamięci, modele pamięci, dokładne implementacje TEB. * Zaawansowane algorytmy dla ogromnych zbiorów danych, jak radzić sobie z ogromnymi ilościami danych, odporność na awarie itp. Wierzę, że druga kategoria uczyni mnie lepszym inżynierem i pomoże mi w projektowaniu dowolnego produktu w przyszłości, wyposażając mnie ze świadomością ich istnienia - ale znowu - wiedza domenowa w zakresie mojego produktu jest również bardzo cenna i ważna. Byłbym wdzięczny za podzielenie się swoimi przemyśleniami na ten temat


title: Czy programowanie strukturalne i programowanie obiektowe nie są komplementarne?

text: Wygląda na to, że w sieci toczy się wiele dyskusji na temat różnic między tymi dwoma paradygmatami i tego, jak OOP jest nieco lepszy niż programowanie strukturalne. Ale czy nie są one komplementarne? Z mojego punktu widzenia można by zorganizować swoją aplikację zgodnie z zasadami OOP i zaimplementować jej logikę za pomocą programowania strukturalnego, prawda?


title: Droga naprzód do tworzenia aplikacji internetowych w Pythonie

text: Obecnie znam praktyczną wiedzę na temat Pythona i niektórych powiązanych bibliotek (w tym zawartego w Pythonie SQLite) w celu tworzenia aplikacji **desktop**. Chciałbym teraz zacząć tworzyć **"aplikacje internetowe"**. Rozumiem przez to, że wszystko, co znajduje się w aplikacji komputerowej, zostanie zrobione przez odwiedzenie witryny internetowej ... więc strona internetowa będzie zawierała wszystkie rodzaje widżetów, które można znaleźć w aplikacjach komputerowych (przyciski, rozwijane menu, pola tekstowe itp.). **Nie** jestem zainteresowany tworzeniem statycznych witryn internetowych, magazynów online lub podobnych rzeczy. Wszystko, co wiem o czymkolwiek związanym z Internetem, to podstawy HTML i CSS. Mam też wrażenie, że będę musiał nauczyć się JavaScript i znaleźć zestaw narzędzi do widżetów JavaScript. **Nie wiem, czego jeszcze będę potrzebować.** Słyszałem wiele dobrych rzeczy o frameworku webowym Django, ale nie jestem pewien, jaka jest tutaj rola „frameworka webowego” (i odniosłem wrażenie, że Django było używane głównie do tworzenia takich rzeczy jak magazyny online, a nie aplikacje internetowe), chociaż mam wrażenie, że będę potrzebować go do obsługi podstaw routingu informacji w sieci. Jestem również otwarty na pomysł użycia innego języka programowania niż Python, chociaż mi się podoba i wolałbym go dalej używać. _Chciałbym zacząć od prostych i tworzyć małe aplikacje-zabawki tylko po to, aby uzyskać podstawowe pomysły, a następnie budować stamtąd._ **EDYTUJ W CELU KONKRETNEGO PYTANIA: Jakie są minimalne narzędzia/usługi, których będę potrzebować, aby uzyskać/nauczyć się do tworzenia sieci aplikacje (zgodnie z definicją powyżej) używające Pythona?** **EDIT 2:** Usuwam odniesienia do SaaS. Nazwijmy to po prostu aplikacją internetową korzystającą z widżetów.


title: Czy są przypadki, w których dobrym pomysłem jest uniemożliwienie zdalnego dostępu do bazy danych?

text: Mój współpracownik pracuje nad projektem i zdecydował, że baza danych zostanie całkowicie usadowiona na serwerze glassfish, a glassfish jest jedyną rzeczą, która ma bezpośredni dostęp do bazy danych. Następnie utworzy usługi sieciowe i bibliotekę w Javie, aby uzyskać dostęp do tych danych. Dla mnie brzmi to jak okropny sposób na uporządkowanie architektury jednej z najważniejszych baz danych w firmie (zawiera wszystkie dane pracowników). Wspomniałem mu, że to zły pomysł, ponieważ obecnie nie ma możliwości łatwego wydobycia danych, na co powiedział, że napisze bibliotekę java do pakowania usługi sieciowej REST. Problem w tym, że zajmuję się .NET i mu to powiedziałem. Usługa sieciowa nie działa i nie ma dokumentacji, a obecnie muszę wyeksportować dane z bazy danych do Excela za pomocą PhpMyAdmin, a następnie odczytać je stamtąd, ponieważ prawidłowe sformatowanie SQL do pracy z MS zajęłoby mi dużo czasu Serwer SQL. Moje pytanie brzmi: czy mój współpracownik ma przyzwoity projekt i po prostu cierpię, bo jest w powijakach, czy mam rację i ten projekt jest okropny. Jeśli to okropny projekt, jakie kwestie mogę poruszyć, aby pomóc mu dostrzec, że może lepiej mieć bardziej otwartą bazę danych?


title: Jaka jest różnica między magistrem informatyki a magistrem inżynierii oprogramowania?

text: Jestem studentem na kierunku Informatyka i Matematyka Stosowana. W miarę zbliżania się do ostatniego roku zauważyłem, że kontynuowanie studiów jest teraz najlepszym wyborem dla mnie. Widzę, że kilka uniwersytetów oferuje tytuł magistra informatyki i tytuł magistra inżynierii oprogramowania. Jakie są ich plusy i minusy?


title: Bazy kodu dla wersji stacjonarnej i mobilnej tej samej aplikacji

text: Napisałem małą aplikację desktopową Java Swing. Wydaje się, że naturalnym krokiem jest przeniesienie go na Androida, ponieważ jestem zainteresowany nauką programowania dla tej platformy. Wierzę, że mogę ponownie wykorzystać część mojej istniejącej bazy kodu. (Oczywiście, ile mogę z tego ponownie wykorzystać, zostanie określone dopiero, gdy zacznę kodować aplikację na Androida.) Obecnie hostuję swoją aplikację Java Swing na Sourceforge.net i używam Git do kontroli wersji. Rozpoczynając tworzenie aplikacji na Androida, rozważam dwie opcje: 1. Dodaj kod Androida do mojego istniejącego repozytorium, tworząc osobne katalogi i pakiety Java dla kodu i zasobów specyficznych dla Androida. 2. Utwórz nowy projekt na Sourceforge (lub nawet utwórz nowy) i utwórz nowe repozytorium Git. a. Dzięki nowemu repozytorium mogę po prostu dodać pliki z mojego oryginalnego projektu, które wykorzystam ponownie. (Nie podoba mi się ta opcja, ponieważ trudno będzie zmodyfikować obie kopie tego samego pliku w obu repozytoriach). Lub mogę rozgałęzić oryginalne repozytorium. Zwiększa to trudność scalania zmian udostępnionych plików źródłowych. Przeważnie staram się wybierać między opcjami 1. i 2b. Jeśli zamierzam rozgałęzić istniejące repozytorium, jakie są zalety hostowania go jako oddzielnego projektu SF (lub nawet korzystania z innej usługi hostingowej OSS) w przeciwieństwie do trzymania całego kodu źródłowego w bieżącym projekcie SF?


title: Rozwidlenie projektu open source za pomocą Git

text: Istnieje projekt open source, który chcę rozwidlić z własnych powodów. Obecnie posiada mirror Git jego głównego repozytorium SVN, z którego mogę korzystać. Jakie są najlepsze techniki forkingu projektu przy jednoczesnym zachowaniu możliwości scalania przyszłych zmian z oryginalnego projektu do własnego repozytorium rozwidlonego za pomocą Git? Pamiętaj, że w ogóle nie będę używał Github do rozwoju, więc korzystanie z jakichkolwiek funkcji z tego nie wchodzi w rachubę. Projekt będzie hostowany na prywatnym serwerze VPS.


title: Czy adopcja Unix/Linux jest miarą umiejętności programistów?

text: Czy przyjęcie systemu operacyjnego opartego na Linuksie/Unixie do rozwoju (lub rekreacji) jest przybliżoną miarą świadomości, zdolności adaptacyjnych i/lub umiejętności programisty, po rozważeniu takich czynników, jak krzywa uczenia się efektywnego testowania kodu za pomocą CLI, podstawowe skrypty, ulepszanie itp.


title: Jak ustrukturyzować aplikację, która łączy WCF i WPF

text: Jestem w trakcie uczenia się, jak używać programu WCF (Windows Communication Foundation), aby umożliwić komunikację aplikacji klasycznej klient/serwer. Interfejs użytkownika aplikacji zostanie zaimplementowany przy użyciu WPF, a dla naszej bazy danych prawdopodobnie użyjemy SQL Server. To, z czym zmagam się, to zrozumienie, jak skonstruować taką aplikację. Z tego, co przeczytałem, istnieją trzy składniki aplikacji WCF (które w przykładach, które widziałem, istniały jako osobne projekty): * Usługa WCF * Host usługi WCF * Klient usługi WCF Moje pytanie brzmi: - czy projekty te powinny implementować wyłącznie funkcjonalność wysyłania/odbierania danych od klienta/serwera? Czy to miałoby lepszy sens? Czy sensowne byłoby utworzenie osobnego projektu WPF (Windows Presentation Foundation) w celu zaimplementowania interfejsu użytkownika dla aplikacji? I tak, gdy potrzebuję wysłać/odbierać dane od klienta/serwera, mogę po prostu wywołać operacje dostarczone w utworzonych przeze mnie projektach WCF? Dla każdego, kto wcześniej budował podobne aplikacje, być może mógłbyś wyjaśnić, co działa najlepiej pod względem struktury aplikacji? Na przykład, jeśli stworzę stronę rejestracji użytkownika. Gdy użytkownik kliknie przycisk „Zarejestruj”, aplikacja kliencka będzie musiała przesłać dane na serwer. Czy w takim przypadku mogę po prostu wywołać metody podane w projektach WCF w celu wysłania danych? Ponadto, jakie struktury danych sprawdziły się najlepiej podczas wysyłania/odbierania danych? Moją pierwszą myślą jest wysyłanie/odbieranie XML zawierającego dane. Czy jest to opcja łatwa do wdrożenia? Zdaję sobie sprawę, że odpowiedzi na to pytanie mogą być kwestią opinii – chyba że istnieją konkretne najlepsze praktyki, o których nie wiem. Dziękuję Ci


title: Czy powinienem sam to kodować?

text: Ponieważ zawsze lubiłem robić rzeczy sam, na studiach wybrałem kodowanie w C++, a nie w Visual Basic, ponieważ mogłem zobaczyć, co się dzieje i jak to działa. Jednak czasami czuję, że marnuję swój czas, ponieważ jest tam tak wiele zewnętrznych bibliotek. Oto przykład tego, co mam na myśli. Jakiś czas temu stworzyłem własną funkcję wykrywania kolizji na podstawie współrzędnych x,y myszy oraz wymiarów duszka przechodzącego przez każdą linię, sprawdzając widoczność pikseli. Jakieś dwa tygodnie później dowiedziałem się, że identyczna funkcja jest już wbudowana w DirectX. Robienie tego samemu pomaga zrozumieć, jak to się robi, ale prawdopodobnie nie możesz zrozumieć wszystkiego o programowaniu, jest za dużo i ciągle się zmienia. Będąc młodym i stosunkowo nowym w komercyjnym świecie, zastanawiałem się, jaka jest opinia doświadczonych profesjonalistów, kiedy samemu coś kodować, a kiedy po prostu używać tego, co jest tam?


title: Jakie języki znaczników są dobre w artykułach/poradnikach dotyczących programowania?

text: Bardzo chciałbym napisać samouczek programowania w moim ojczystym języku (łotewskim). Jest ich zdecydowanie za mało. Nie jestem jednak pewien, jakiego języka znaczników użyć do napisania tego. Oto kilka rzeczy, które chciałbym osiągnąć: * To samo źródło może być skompilowane zarówno do formatu HTML do przeglądania online, jak i do postaci drukowanej (PDF?). W formie HTML pozwoliłoby to na lepszą interakcję i wygląd (patrz poniżej), podczas gdy forma drukowana będzie dobrze wyglądać na papierze (układ itp.). * Wyobrażam sobie, że samouczek mógłby być wielojęzyczny. Różni uczniowie mają różne wymagania w swoich szkołach. Na przykład niektóre szkoły uczą Javy, inne C#. Możesz wybrać język u góry strony HTML, a odpowiednie fragmenty kodu (i czasami fragmenty tekstu) zostaną zamienione. Większość tekstu i tak jest taka sama, tylko składnia języka jest nieco inna. * Tekst czasami zawierałby oczywiście również obrazy, które musiałyby być zawarte zarówno w wersji HTML, jak i drukowanej * W wersji HTML fragmenty kodu powinny otrzymać automatyczne kolorowanie składni, które powinno być idealnie takie samo jak w zalecanym IDE dla samouczek. W przypadku niejasności, podpowiedzi do kolorowania składni powinny być możliwe, ale nie chcę robić całego kolorowania ręcznie. * "Wyjściowe" kolorowanie składni, które emuluje standardową konsolę tekstową 80x25 (ponieważ wiele początkowych programów było aplikacjami konsolowymi) * Zwijalne sekcje odpowiedzi na pytania (aka "znaczniki spoilera") * Automatycznie generowany indeks/spis treści * Linki do innych części samouczka (wyrenderowane jako linki w HTML i jako odnośniki w wersji drukowanej) * Sekcje "Uwagi bocznej", renderowane jako oddzielne bloki z boku. * Inne funkcje przydatne w publikacjach, o których nie wiem :) Wiem, że to trochę za dużo, ale czy jest coś na tyle bliskiego, że mógłbym wziąć to za punkt wyjścia i sam dodać potrzebne funkcje? A może jest coś na całej liście (takie jak chęć posiadania zarówno wersji HTML **, jak i ** drukowanej z tego samego źródła), co sprawia, że wszystko to jest zasadniczo niewykonalne?


title: Powiadamianie o osobnym zgłoszeniu zdarzenia

text: Mam aplikację, która wykonuje różne zadania w sposób zautomatyzowany. Mój klient chciałby, abym utworzył plik w danym folderze dla każdego zadania jako sposób na oznaczenie po zakończeniu każdego zadania. Wolą to od flagi bazy danych, ponieważ mogą być powiadamiane przez system plików, zamiast ciągłego odpytywania tabeli bazy danych. Mogę to zrobić, ale tworzenie i usuwanie plików jako flag wydaje się niezgrabne. Czy istnieje bardziej eleganckie podejście do powiadamiania osoby trzeciej o zdarzeniu?


title: jak zarządzasz kluczami API?

text: Mam kilka projektów wykorzystujących różne webserwisy m.in. DropBox, AWS. Do zarządzania prywatnymi informacjami używam `bash_profile`, który świetnie współpracuje z heroku, które używa zmiennych env do zarządzania tajnymi informacjami. Problem w tym, że mój profil bash_profile znacznie się rozrasta (HEROKU_ADD_ON_1 HEROKU_ADD_ON_2 itd.) i dzisiaj mnie ugryzł. Jaki jest lepszy sposób?


title: Czy programista powinien mieć możliwość korzystania z VSS, jeśli woli?

text: Wprowadziłem Mercurial do mojego działu. Uwielbiam to, ale to moje pierwsze doświadczenie w kontroli wersji. Używam go z NetBeans PHP do tworzenia stron internetowych. Inny programista, który pracuje nad wewnętrznymi aplikacjami firmowymi, lubi korzystać z Visual Source Safe i nie chce się przełączać. Pracuje w środowisku Visual Studio. Wszyscy inni deweloperzy kupili Mercurial z wyjątkiem tego. Jednak w większości pracujemy niezależnie. Próbuję przenieść ten dział we właściwym kierunku, założyłem wszystkim konto na Kiln, miałem nadzieję, że wszyscy będą również korzystać z Fogbugz (ponieważ obecnie nie jest utrzymywana baza danych błędów). nigdy nie używałem VSS, ale słyszę o nim bardzo złe rzeczy. Czy lepiej byłoby po prostu pozwolić mu dalej korzystać z VSS, jeśli tak woli, czy też byłoby w najlepszym interesie, aby zatrudnić go w Mercurial?


title: Dekorator nie wywołuje udekorowanej instancji - potrzebny jest alternatywny projekt

text: Załóżmy, że mam prosty interfejs do tłumaczenia tekstu (przykładowy kod w C#): interfejs publiczny ITranslationService { string GetTranslation(string key, CultureInfo targetLanguage); // kilka innych metod... } Pierwsza prosta implementacja tego interfejsu już istnieje i po prostu trafia do bazy danych po każdym wywołaniu metody. Zakładając, że interfejs użytkownika jest tłumaczony podczas uruchamiania, powoduje to jedno wywołanie bazy danych na kontrolkę. Aby to poprawić, chcę dodać następujące zachowanie: > Gdy tylko pojawi się prośba o jeden język, pobierz _wszystkie_ tłumaczenia > z tego języka i umieść je w pamięci podręcznej. Wszystkie żądania tłumaczenia są obsługiwane > z pamięci podręcznej. Pomyślałem o zaimplementowaniu tego nowego zachowania jako dekoratora, ponieważ wszystkie inne metody tego interfejsu zaimplementowane przez dekoratora byłyby po prostu delegowane do udekorowanej instancji. Jednak implementacja `GetTranslation` nie użyłaby `GetTranslation` udekorowanej instancji _w ogóle_ do pobrania wszystkich tłumaczeń określonego języka. Uruchomiłby własne zapytanie w bazie danych. Przerywa to wzorzec dekoratora, ponieważ każda funkcjonalność zapewniana przez udekorowaną instancję jest po prostu pomijana. Staje się to prawdziwym problemem, jeśli w grę wchodzą inni dekoratorzy. Rozumiem, że Dekorator powinien być addytywny. Jednak w tym przypadku dekorator _zastępuje_ zachowanie zdobionej instancji. Naprawdę nie mogę wymyślić fajnego rozwiązania tego problemu - jak byś to rozwiązał? Wszystko jest dozwolone, nawet całkowite przeprojektowanie samego `ITranslationService`.


title: Jak serializować i deserializować wyrażenie lambda w F#?

text: Wcześniej serializowałem wyrażenia lambda w języku C#. Teraz chcę użyć F# zamiast C# do serializacji i deserializacji. Słyszałem, że F# jest lepszy w tej dziedzinie. Czy to prawda? Jak mogę to zrobić za pomocą F#? Byłbym wdzięczny, nawet gdybyś właśnie zasugerował skorelowany link.


title: Big-O tego algorytmu?

text: 1. Jak opisać funkcję wzrostu w kategoriach n dla poniższego algorytmu? 2. Co to jest funkcja ograniczająca (Big-O)? Czy to W(n^3)? * * * for(i = 0 do n - 1) { c = i + 1 for(j = c do n) { przyp[j] += przyp[i]; for(k = c to 0 step -1) // co oznacza słowo kluczowe "step"? { przyp[k] *= przyp[j]; } } }


title: Czy są jakieś zasoby dotyczące identyfikowania problemów, które najlepiej można rozwiązać za pomocą szablonów?

text: Postanowiłem poszerzyć swoją wiedzę w zakresie metaprogramowania szablonów. Znam składnię i zasady oraz bawię się niezliczonymi przykładami z zasobów internetowych. Rozumiem, jak potężne mogą być szablony i jak dużą optymalizację czasu kompilacji mogą zapewnić, ale nadal nie mogę "myśleć o szablonach", nie mogę sam wiedzieć, czy dany problem można najlepiej rozwiązać za pomocą szablonów i czy to możliwe, jak dostosować ten problem do szablonów. Czy istnieje jakiś zasób online lub książka, która uczy, jak identyfikować problemy, które najlepiej można rozwiązać za pomocą szablonów i jak dostosować ten problem?


title: Czy powinniśmy skompilować naszą stronę internetową do jednej biblioteki dll, czy dll na stronę?

text: Pracujemy nad nowym projektem, który ma zostać wdrożony w dużej liczbie witryn klienckich. Projekt zawiera internetowy GUI jako jeden z jego "punktów dostępu". Szybkość interfejsu WWW jest priorytetem dla tego projektu, ustępując jedynie bezpieczeństwu. W przeszłości zawsze tworzyliśmy „witryny internetowe” w Visual Studio, które po opublikowaniu dają jeden plik dll i jeden plik aspx dla każdej strony w systemie. Zdaję sobie jednak sprawę, że można stworzyć „aplikację internetową” i skompilować wszystko do jednej biblioteki dll. Dla mnie (bazując na braku prawdziwych danych, tylko intuicji), kompilacja strony jako pojedynczej biblioteki dll brzmi, jakby była lepsza zarówno dla bezpieczeństwa, jak i szybkości (choćby tylko marginalnie). Jakim rozważaniom powinniśmy się przyjrzeć i czy są jakieś oczywiste pułapki, o których powinniśmy pamiętać wybierając odpowiednią dla nas metodę?


title: Raportowanie w Visual Studio 2010 Express

text: Chcę pobrać program Visual Studio 2010 Express Edition, aby dowiedzieć się wszystkiego, co jest w nim nowe. Uważam to za niewystarczające, ponieważ nie ma w nim integracji Crystal Reports. Oprócz tego chcę poznać inne funkcje dla przedsiębiorstw, które są dołączone do wersji Professional Edition. Jeśli pobiorę wersję VS 2010 Professional Edition, jest ona ograniczona do 90 dni. Czy jest jakaś inna alternatywa dla uczniów? Ponadto, czy istnieje BEZPŁATNA alternatywa dla raportowania w wersji Express Edition.


title: Czy świnka żyje?

text: W moim pierwszym miejscu pracy używaliśmy Digital Standard MUMPS na klonie PDP 11 (TPA 440), następnie przeszliśmy na Micronetics Standard MUMPS na maszynie Hewlett-Packard, HP-UX 9, około wczesnych lat 90-tych. Czy świnka wciąż żyje? Czy ktoś go używa? Jeśli tak, napisz o tym kilka słów: czy używasz go w trybie postaci, czy działa jako serwer WWW? itp. (Mam na myśli także Cache.) Jeśli byłeś z tego używany, jakie były twoje odczucia? Czy lubiłeś to?


title: Jak działa strona internetowa taka jak Mathway?

text: Niedawno znalazłem stronę internetową o nazwie Mathway Zasadniczo działa ona, umożliwiając wybór „poziomu matematyki” (którego używa, aby określić, jakie narzędzia powinien ci zapewnić), a następnie pozwala na wprowadzenie problemu matematycznego, który następnie rozwiązuje Ciebie i daje Ci szczegółowe rozwiązania (musisz spróbować, to naprawdę fajne). Zastanawiałem się, jak to działa na dwóch poziomach. Po pierwsze, jak przeanalizowaliby problem matematyczny (i wszystkie czasami obce operatory matematyczne)? Jak przechodzą z tekstu do liczb, zmiennych i operatorów? Po drugie, jak generują wyjaśnienia? Chociaż musisz zapłacić za szczegółowe rozwiązania (które są wyjaśnieniem, w jaki sposób rozwiązali problem), widziałem ich podglądowe zrzuty ekranu i wygląda to bardzo szczegółowo. Wyjaśnienia podane są w pełnych, dokładnych zdaniach. Jak mogliby wygenerować coś takiego?


title: Cechy Profesjonalnego Programisty PHP

text: Jestem 19-letnim studentem, który NAPRAWDĘ lubi programować i mam nadzieję, że skorzystam z twoich lat doświadczeń tutaj. Obecnie uczę się PHP przy każdej okazji, od około 3 lat, chociaż nigdy nie uczęszczałem na żadne formalne zajęcia. Chciałbym pewnego dnia zostać programistą na pełny etat i zrobić z tego dobrą karierę. Moje pytanie do Ciebie brzmi: Co uważasz za cechy lub cechy profesjonalnego programisty? Głównie w dziedzinie PHP, ale inne, bardziej ogólne kwalifikacje są również mile widziane, ponieważ uważam, że PHP jest bardziej językiem hobbystycznym i może nie być językiem z wyboru w oczach potencjalnych pracodawców. Proszę popraw mnie jeżeli się mylę. Przede wszystkim nie chcę tracić czasu na coś, co nie jest warte zachodu. Obecnie czuję się całkiem pewny swojej znajomości PHP jako języka i wiem, że mógłbym zbudować prawie wszystko, czego potrzebuję i sprawić, by to "działało", ale czuję, że bardzo brakuje mi koncepcji projektowych i struktury kodu. Potrafię nawet pisać kod obiektowy, ale moim zdaniem nie jest to warte kupy fasoli, jeśli nie jest dobrze zorganizowane. Z tego powodu kupiłem książkę Matta Zandstry „Obiekty PHP, wzorce i praktyka” i codziennie ją trochę czytam. W każdym razie zaczynam tu trochę dygresję, więc wróćmy do pierwotnego pytania. Jaką radę dałbyś początkującemu programiście, który chce wywrzeć wpływ w tej dziedzinie? Poza tym, na marginesie, pracowałem nad projektem z moim przyjacielem, który dawałby całkiem dobre pojęcie o tym, gdzie jestem w zakresie kodowania. Podam link, nie chcę, żeby ktokolwiek czuł się tak, jakbym tutaj naciskał lub spamował, więc nie klikaj go, jeśli nie chcesz. Ale jeśli jesteś zainteresowany przekazaniem tam również opinii, możesz zobaczyć kod na github. Jestem tam znany jako The Craw. https://github.com/PureChat/PureChat--Beta-/tree/


title: Wrapper REST API - projektowanie klas dla odpowiedzi obiektów „lite”

text: Piszę bibliotekę klas, która ma służyć jako otoki zarządzanej platformy .NET nad interfejsem API REST. Jestem bardzo nowy w OOP, a to zadanie jest dla mnie idealną okazją do nauczenia się pewnych koncepcji OOP w rzeczywistej sytuacji, która ma dla mnie sens. Niektóre kluczowe zasoby/obiekty zwracane przez interfejs API są zwracane z różnymi poziomami szczegółowości w zależności od tego, czy żądanie dotyczy pojedynczego wystąpienia, listy, czy części odpowiedzi „przeszukaj wszystkie zasoby”. Jest to oczywiście dobry projekt dla samego interfejsu API REST, dzięki czemu pełne obiekty nie są zwracane (co zwiększa rozmiar odpowiedzi, a tym samym czas potrzebny na odpowiedź), chyba że są potrzebne. A więc, żeby było jasne: * **.../car/1234.json** zwraca pełny obiekt Car dla 1234, wszystkie jego właściwości, takie jak kolor, marka, model, rok, rozmiar_silnika itp. Nazwijmy to _full_. * **.../cars.json** zwraca listę obiektów Car, ale tylko z podzbiorem właściwości zwróconych przez .../car/1234.json. Nazwijmy to _lite_. * **...search.json** zwraca między innymi listę obiektów samochodów, ale z minimalnymi właściwościami (tylko ID, marka i model). Nazwijmy to _lite-lite_. Chcę wiedzieć, jakie są zalety i wady każdego z poniższych możliwych projektów i czy istnieje lepszy projekt, którego nie omówiłem: bardziej szczegółowych odpowiedzi dziedziczy i rozszerza tę klasę. 2. Utwórz oddzielne klasy CarFull, CarLite i CarLiteLite odpowiadające każdej z odpowiedzi. 3. Utwórz pojedynczą klasę Car, która zawiera (nullable?) właściwości dla odpowiedzi _full_ i stwórz konstruktory dla każdej odpowiedzi, które wypełnią ją w możliwym zakresie (i być może zawierają właściwość, która zwraca typ odpowiedzi, z którego pochodzi instancja). Utworzony). Spodziewam się między innymi, że konsumenci opakowania będą chcieli przejść przez listy samochodów, niezależnie od tego, z jakiego typu odpowiedzi zostały utworzone, tak aby trzy typy odpowiedzi mogły przyczynić się do powstania tej samej listy. Cieszę się, że wskazano mi dobre zasoby dotyczące tego rodzaju rzeczy, a nawet powiedziano mi nazwę koncepcji, którą opisuję, abym mógł lepiej ukierunkować moje badania.


title: Zgodność PCI z rozwojem offshore

text: Prowadzę zespół ds. rozwoju offshore, który wytwarza szereg produktów finansowych. Obecnie planujemy prace potrzebne do uzyskania zgodności z PCI. Zespół offshore jest prowadzony przez firmę outsourcingową, która zatrudnia pracowników bezpośrednio. Innymi słowy, programiści nie są przez nas bezpośrednio zatrudniani, lecz stanowią wyłącznie zasoby do projektów dla naszej firmy. Cała nasza infrastruktura jest zlokalizowana w Wielkiej Brytanii (kontrola źródeł, maszyny programistyczne itp.). Deweloperzy/Testerzy offshore zdalnego pulpitu do środowisk programistycznych, których potrzebują. Czy w tej konfiguracji jest coś, czym powinniśmy się martwić z punktu widzenia PCI? Właśnie rozpoczęliśmy badania, ale nie mogę znaleźć niczego związanego z tymi punktami, więc wszelkie porady byłyby doceniane. Dziękuję!


title: Opcja OPTION STRICT wyłączona

text: Pracuję nad aplikacją z ponad milionem linii kodu. Opcja OPTION STRICT jest wyłączona!. Chcę ustawić go na ON podczas następnej iteracji pracy. Uważam, że jedynym powodem, dla którego OPTION STRICT powinna być WYŁĄCZONA, jest konwersja starszego systemu, np. VB6 na platformę .NET. Następnie należy ustawić OPTION STRICT na ON ASAP. Czy mam rację w tej myśli, czy programiści pozostawiają OPTION STRICT na stałe WYŁĄCZONE? Czy są jakieś wskazówki. Zajrzałem tutaj: http://msdn.microsoft.com/en-us/library/zcd4xwzs.aspx, ale nie mogę znaleźć odpowiedzi na moje konkretne pytanie.


title: Jakim czasownikiem HTTP powinna być trasa do wylogowania z aplikacji internetowej?

text: Pomijając problemy z obsługą przeglądarek, jeśli jesteś pedantem Http/hateoas, jakie czasowniki powinny dotyczyć prośby o zalogowanie się/wylogowanie ze strony? DELETE wydaje się oczywistym wyborem, ale nie jestem pewien, jaki byłby usuwany zasób.


title: Jak odpowiedzieć, gdy zostaniesz poproszony o wycenę?

text: Nas, jako programistów, ciągle pyta się „Ile to zajmie”? I wiesz, sytuacja wygląda prawie zawsze tak: * Wymagania są niejasne. Nikt nie dokonał dogłębnej analizy wszystkich implikacji. * Nowa funkcja prawdopodobnie złamie niektóre założenia przyjęte w kodzie i natychmiast zaczniesz myśleć o wszystkich rzeczach, które być może będziesz musiał zrefaktoryzować. * Masz inne rzeczy do zrobienia z poprzednich zadań i będziesz musiał wymyślić oszacowanie, które uwzględnia tę inną pracę. * Definicja „zrobione” jest prawdopodobnie niejasna: kiedy to zostanie zrobione? „Gotowe”, jak w przypadku właśnie skończonego kodowania, czy „Gotowe”, jak w przypadku „użytkownicy go używają”? * Bez względu na to, jak bardzo jesteś świadomy tych wszystkich rzeczy, czasami twoja „duma programisty” sprawia, że dajesz/akceptujesz krótsze czasy, niż początkowo przypuszczałeś. Szczególnie, gdy czujesz presję terminów i oczekiwań kierownictwa. Wiele z nich to kwestie organizacyjne lub kulturowe, które nie są proste i łatwe do rozwiązania, ale w końcu w rzeczywistości jesteś proszony o wycenę i oczekują, że udzielisz rozsądnej odpowiedzi. To część twojej pracy. Nie możesz po prostu powiedzieć: nie wiem. W rezultacie zawsze podaję szacunki, których później zdaję sobie sprawę, że nie mogę ich spełnić. Zdarzyło się to niezliczoną ilość razy i zawsze obiecuję, że to się nie powtórzy. Ale tak się dzieje. Jaki jest Twój osobisty proces podejmowania decyzji i dostarczania wyceny? Jakie techniki uważasz za przydatne?


title: Jak radzisz sobie z szacowaniem czasu?

text: Jeśli poświęci się zbyt mało czasu, ucierpi jakość. Jeśli poświęci się zbyt dużo czasu, programiści znajdą sposób na wykorzystanie całego przydzielonego czasu, bez względu na wszystko. Jaki byłby dobry sposób na radzenie sobie z szacunkami? Czy są złem koniecznym?


title: Kiedy zakończy się Twój projekt? Ile czasu zajmuje jej ukończenie? Masz pomysł jak na miejscu oszacować taki termin?

text: > **Możliwy duplikat:** > Jak odpowiedzieć, gdy zostaniesz poproszony o wycenę? W mojej firmie mam dziwnych menedżerów, zawsze pytają mnie przed rozpoczęciem, jak leci? A jak długo zajmie ukończenie? Od dnia 1 do końca życia projektu. Za ekranem nie mają pojęcia, jakiego języka będę potrzebować. Sam byłem zmuszony do korzystania z PHP, C, Java, Vala, D, Bash, wielu innych platform itp., gdzie byłem tylko programistą Visual Basic 6.0. Ale ukończenie projektu zajmuje mi dużo czasu, ponieważ zależy mi na nim przed wydaniem, wymaga dużo testów itp. Problem w tym, że nadal nie mam żadnej najlepszej odpowiedzi, gdy ktoś pyta mnie „jak długo to myślisz zajmie ukończenie tego projektu?”, chociaż wykonałem wiele projektów. Ale nie mogę odpowiedzieć na takie pytania, ponieważ myślę, że nigdy się nie skończyło, zawsze chciałem robić coraz bardziej zoptymalizowany kod, nawet po wydaniu. Chciałbym wiedzieć, jak plączecie się z tym pytaniem? (jako sposób pro-programisty)


title: Czy SOA jest odpowiednia dla programistów, czy tylko dla osób zarządzających biznesem/IT?

text: Załóżmy, że kierujesz zespołem programistów, który musi zbudować duży system informatyczny, taki jak oprogramowanie ERP lub Human Resources, lub jakikolwiek inny system złożony z wielu modułów biznesowych. System musi być dostarczany szybko, być skalowalny i mieć dobre możliwości rozwoju i konserwacji. Twój zespół ma doświadczenie w technologiach SOA, a także w tworzeniu standardowych aplikacji MVC/AJAX w ASP.NET, Spring, ExtJS, Smartclient lub dowolnej kombinacji frameworków. W swoim zespole masz też dobrego kierownika projektu. Twój interesariusz jest zdumiony tak wieloma technologiami i zmianami w branży, że nie dba o to, z której rzeczy korzystasz, o ile spełnione są wymagania funkcjonalne i niefunkcjonalne. Czy skorzystałbyś z praktyk SOA (takich jak zarządzanie, repozytorium usług, identyfikacja/odkrywanie usług) i elementów infrastruktury SOA (takich jak ESB, silnik BPEL, usługi sieciowe oparte na WSDL)? A może po prostu skorzystałbyś ze zwinnego i zdyscyplinowanego procesu rozwoju z ulubionymi/godnymi zaufania frameworkami i udostępnił niektóre usługi RESTful i inne proste punkty integracji z systemami zewnętrznymi? Albo coś innego?


title: Co i jak testować jednostkowo aplikację webową django?

text: Piszę testy jednostkowe dla frontendu webowego zaimplementowanego w Django. Napisałem testy jednostkowe, które sprawdzają, czy wszystkie widoki zwracają poprawny kod statusu (200, 302 itd.), aby znaleźć błędy szablonu (które dają 500). Wykonuję również walidację HTML za pomocą `tidylib`. Co jeszcze powinienem (lub _mogę_) zrobić? Modele są testowane jednostkowo gdzie indziej, formularze mają zależności (a mianowicie od modeli), więc czy jest sposób na testowanie ich jednostkowe - w ogólnym przypadku jest coś, co można zrobić, ale co mogę zrobić (bez dużego wysiłku) wykorzystując jednostkę Django/python ramy testowe?


title: Separacja obaw w ramach RMR

text: Pracuję nad nowym frameworkiem dla PHP, który wykorzystuje wzorzec architektoniczny o nazwie RMR, zamiast bardziej powszechnego (pseudo)-MVC, który obecnie implementuje większość frameworków PHP. Jak dotąd wydaje się, że lepiej pasuje do aplikacji internetowych niż MVC. Obecnie rozdzielam różne problemy związane z zarządzaniem cyklem żądania/odpowiedzi strony i do tej pory zaimplementowałem obiekty do walidacji formularza, reprezentujące żądanie, reprezentujące odpowiedź, kontroler frontowy do zawijania kompletnego żądania/odpowiedzi HTTP, przelicznik do przekieruj żądanie do odpowiedniego zasobu i tak dalej. Doprowadziło to jednak do interesującego pytania dotyczącego oddzielenia obaw. W ramach MVC normalnie miałbym obiekt walidacji formularza i obiekt biznesowy (model) opakowany w akcję kontrolera. Działanie to sprawdzi poprawność danych wejściowych i przekaże je do obiektu biznesowego, jeśli przejdzie walidację, lub z powrotem do widoku w celu wyświetlenia błędu. Jednak w RMR nie ma kontrolera. Architektura, którą rozważam, ma klasę walidacji formularzy, taką jak frameworki MVC, takie jak zend, ale bez kontrolera nie ma oczywistego miejsca do jej wywołania. Mógłbym wywołać obiekt walidacji formularza z poziomu zasobu (odpowiednik modelu RMR), ale wydaje się to niewłaściwe, ponieważ zasób musi wiedzieć więcej o tym, jak będzie używany w tym przypadku. Wiem z opisu RMR, że nie da się tego całkowicie uniknąć, zasób musi być w stanie zrozumieć żądanie HTTP, ale wolałbym ograniczyć to do minimum, jeśli to w ogóle możliwe, aby zasoby mogły być nadal używane poza kontekst ram RMR bez większych modyfikacji. Mógłbym wykonać walidację formularza w obiekcie, który hermetyzuje żądanie HTTP, ale oznacza to, że obiekt żądania musi wiedzieć, w jaki sposób zasób zamierza wykorzystać podane dane wejściowe. Na przykład zasób reprezentujący wpis na blogu może umożliwiać dodawanie komentarzy, zbieranie głosów lub edytowanie go przez oryginalnego autora. Jeśli wszystkie trzy rodzaje operacji zostaną przesłane przez POST, obiekt żądania będzie musiał być w stanie określić, czy dany POST służy do edycji bloga, dodania komentarza lub oddania głosu. Jeśli do zasobu artykułu na blogu zostanie dodana więcej funkcji lub jeśli jakaś funkcja zostanie usunięta, prośba musi o tym wiedzieć. To wydaje się łamać hermetyzację. Rozważałem również przeniesienie walidacji formularza do kontrolera frontowego, ale wiązałoby się to z podobnymi problemami, jak posiadanie go w obiekcie żądania. Kontroler frontowy musiałby wiedzieć coś o wewnętrznym działaniu zasobu, zanim mógłby zweryfikować dane wejściowe. Jeśli ktoś ma jakieś alternatywne podejście lub komentarz dotyczący tego problemu, byłbym wdzięczny za wszelkie uwagi. Może ten problem tylko podkreśla, że podejście, które stosowałem w przeszłości z MVC, było złe, a posiadanie walidacji formularzy w kontrolerze nie było właściwym sposobem robienia rzeczy?


title: Jak powinno działać "git add /**"?

text: Jak wspomniano w tym pytaniu, napotkałem problem z `git add /**...`. Właściwie nie mogę znaleźć żadnej dokumentacji na temat specyfikacji ścieżki "/**" - prawdopodobnie dlatego, że trudno jest google. Jak dokładnie ma działać? Jestem szczególnie ciekawy, że `git add /\*\*.py` może działać, ale `git add /path/foo.py` nie — dlaczego ukośnik jest dozwolony na początku ciągu z notacją ** ? EDYTUJ więcej informacji: $ echo /**.py /**.py (Ta wersja Bash nie obsługuje `shopt -s globstar`) Jeszcze: $ git add /**.py dodaje (po cichu) plik do trzech katalogów pod bieżącym katalogiem. Git najwyraźniej w ogóle nie robi globbingu, więc jestem naprawdę ciekawa, co się tutaj dzieje. Działają one również: `git add '/**.py'` `git add /*******.py` To nie działa: `git add **.py` To wydaje się dodawać wszystkie pliki w dowolnym miejscu bieżący katalog roboczy. (Bash 3.2.48 na OSX)


title: Zasada pojedynczej odpowiedzialności i wyższe poziomy abstrakcji

text: Dwa popularne sformułowania dla zasady pojedynczej odpowiedzialności (SRP) to „każdy moduł powinien odpowiadać za pojedynczą cechę lub funkcjonalność w systemie” i „każdy moduł powinien mieć tylko jeden powód do zmiany”. Moje pytanie brzmi: czy jest to coś, do czego powinniśmy bezwzględnie dążyć w każdej klasie systemu, czy też powinno być to rozluźnione, gdy łączymy moduły niższego poziomu, tworząc bardziej abstrakcyjne moduły? W skrajnym przypadku moduł najwyższego poziomu w systemie będzie odpowiedzialny za całą gamę funkcji systemu, więc wygląda na to, że przestrzeganie SRP w tego rodzaju module może nie być możliwe.


title: Kerberos do zarządzania kluczami?

text: W naszym sklepie deweloperskim wdrożyliśmy do połowy właściwe zarządzanie kluczami. Mamy usługę sieciową SOAP (**usługę sieciową zarządzania kluczami** ), która może być używana do pobierania haseł do innych systemów. Na przykład mógłbym poprosić tę usługę o hasło do, powiedzmy, produkcyjnej bazy danych PostgreSQL. Uderzam w usługę sieciową z moimi poświadczeniami AD i określa, czy mam uprawnienia do otrzymania hasła bazy danych, czy nie. Jeśli tak, to jest to wysyłane w odpowiedzi. Mogę wtedy korzystać z tej usługi we wszystkich innych komponentach oprogramowania, zamiast przechowywać hasło do bazy danych w statycznym pliku konfiguracyjnym (takim jak `context.xml` itd.). Problem polega oczywiście na tym, że w przypadku zautomatyzowanego procesu poświadczenia AD przekazywane do usługi sieciowej muszą być gdzieś przechowywane. Tak więc, aby uzyskać hasło do bazy danych (lub innego zabezpieczonego zasobu), wystarczy uzyskać dostęp do tego, co jest używane do przechowywania poświadczeń AD, a następnie przesłać je do tej usługi sieciowej, która następnie je uwierzytelnia/autoryzuje i zwróć hasło do żądanego zasobu. Klasyczny problem zarządzania kluczami. Dlatego próbuję znaleźć sposób na ochronę poświadczeń AD używanych do uzyskania dostępu do usługi. Ktoś wspomniał mi o Kerberos i zacząłem trochę kopać. Moje _rozumienie_ polega na tym, że w przypadku Kerberos byłyby 3 komponenty: * **Klient** usługi sieciowej zarządzania kluczami * Usługa sieciowa zarządzania kluczami * Serwer Kerberos (bilet przyznawania biletów, **TGT** ) Moje _zrozumienie_ jest to, że: 1. Klient (w jakiś sposób) uzyskuje bilet TGT z Kerberos 2. Następnie klient wysyła żądanie dotyczące jakiegoś zasobu, powiedzmy, bazy danych, do usługi sieciowej zarządzania kluczami, ale _nie_ dostarcza żadnych poświadczeń AD, ale zamiast tego dostarcza bilet TGT 3. Usługa sieciowa zarządzania kluczami jest następnie ponownie konfigurowana w celu przyjęcia tego biletu TGT i pingowania serwera Kerberos z żądaniem typu „ _czy ten bilet TGT jest ważny?_ ”. 4. Serwer Kerberos odpowiada i mówi „ _tak_ ” (lub „nie ") i honoruje prośbę o hasło do bazy danych, odsyłając je do klienta w odpowiedzi. Więc najpierw, jeśli coś w moim zrozumieniu jest niepoprawne, zacznij od poprawienia mnie! Zakładając, że mam mniej więcej rację, mam kilka pytań dotyczących tej konfiguracji: 1. W jaki sposób klient po raz pierwszy uzyskałby TGT od Kerberos? 2. Czy TGT Kerberos mają daty ważności? W jaki sposób wówczas klient „ponownie zażądał” nowego biletu TGT? 3. Czy usługa sieciowa zarządzania kluczami musi zaimplementować jakiś konkretny protokół TCP, aby komunikować się z Kerberos, czy wystarczy HTTP? Jeśli Kerberos ma własny protokół, czy istnieją biblioteki Java, które go implementują? (Wiem, że łatwo jest go wygooglować „java kerberos”, ale nie jestem pewien, czego konkretnie szukać, ponieważ znowu nie jestem pewien, czy rozumiem tutaj architekturę).


title: Jak bezpiecznie skopiować obiekt?

text: To pytanie będzie trochę długie. Proszę o wyrozumiałość. Coś, co wydarzyło się w moim projekcie, skłoniło mnie do zastanowienia się, jak bezpiecznie kopiować przedmioty. Przedstawię sytuację, którą miałem, a następnie zadam pytanie. Była klasa `SomeClass`: class SomeClass{ Thing[] things; public SomeClass(Thing[] things){ this.things = things; } // pominięto nieistotne rzeczy public SomeClass copy(){ return new SomeClass(things); } } Istniała inna klasa `Processor`, która pobiera obiekty `SomeClass`, kopiuje je (poprzez `someClassInstance.copy()`), manipuluje stanem kopii i zwraca kopię. Oto on: class Processor{ public SomeClass processObject(SomeClass object){ SomeClass copy = object.copy(); manipulujKopią(kopia); kopię zwrotną; } // pominięto nieistotne rzeczy } Uruchomiłem to i zawierało błędy. Przyjrzałem się tym błędom i okazało się, że manipulacje wykonywane przez `Processor` na `copy` w rzeczywistości wpływają nie tylko na kopię, ale także na oryginalny obiekt `SomeClass`, który został przekazany do `processObject`. Dowiedziałem się, że to dlatego, że oryginał i kopia są współdzielone - ponieważ oryginał przekazał swoje pole `things` do kopii podczas jej tworzenia. **To uświadomiło mi, że kopiowanie obiektów jest trudniejsze niż proste tworzenie ich za pomocą tych samych pól, co oryginał.** Aby te dwa obiekty były całkowicie rozłączone, bez żadnego współdzielonego stanu, każde z pól przekazanych do kopii również musi być kopiowane. **A jeśli ten obiekt zawiera inne obiekty - one również muszą zostać skopiowane. I tak dalej.** Więc zasadniczo, aby móc faktycznie skopiować obiekt, **każda klasa w systemie musi mieć metodę`copy()`, która również wywołuje `copy()` na wszystkich swoich polach , i tak dalej**. Na przykład, aby funkcja `copy()` w SomeClass działała, musi wyglądać tak: public SomeClass copy(){ Rzecz[] copyThings = new Rzecz[things.length]; for(int i=0; i<rzeczy.długość; i++) copyRzeczy[i] = rzeczy[i].copy(); zwróć nową klasę SomeClass(copyThings); } A jeśli `Rzecz` ma własne pola obiektów, to jej własna metoda `copy()` musi być odpowiednia: class Rzecz{ Apple apple; Ołówek ołówkowy; numer wewnętrzny; public Thing(Apple jabłko, Ołówek ołówek, numer int){ this.apple = jabłko; this.pencil = ołówek; this.liczba = liczba; } public Rzecz copy(){ // 'liczba' jest prymitywem. return new Thing(apple.getCopy(), pencil.getCopy(), number); }     }      I tak dalej. Oczywiście, zamiast wszystkich klas posiadających metodę `copy()` mechanizm kopiowania może zachodzić we wszystkich getterach i konstruktorach klas (chyba że w miejscach, w których nie jest to odpowiednie, np. gdy pole wskazuje na zewnętrzny obiekt, a nie obiekt, który „jest częścią” tego obiektu). Oznacza to jednak, że aby móc bezpiecznie kopiować obiekt - większość klas musiałaby mieć mechanizmy kopiujące w swoich getterach. **Moje pytanie jest podzielone na dwie części:** 1. Jak często trzeba otrzymać kopię przedmiotu? Czy to regularny problem? 2. Czy opisana technika jest powszechna i/lub rozsądna? A może jest lepszy sposób na wykonanie bezpiecznych kopii przedmiotów?


title: Jaka powinna być struktura i organizacja aplikacji GUI napisanej w WinAPI?

text: Zrobiłem obszerną ilość programowania GUI w WinForm i WPF przy użyciu C# i trochę w C++ przy użyciu MFC. Buduję osobisty projekt używając WinAPI, głównie po to, aby zdobyć głębszą wiedzę z zakresu programowania Windows. Szybko utknąłem w sposobie organizacji projektu, ponieważ stworzenie nawet prostej aplikacji Windows w WinAPI wymaga tylko dużo szablonowego kodowania przy tworzeniu elementów interfejsu użytkownika. Nie był to duży problem w WinForm lub WPF, ponieważ sama platforma nieco zmusza do oddzielenia widoku i logiki, co ułatwia organizowanie kodu. Czy są jakieś zalecane wzorce/metody dotyczące sposobu organizowania projektów WinAPI? Dokładniej, jak mam oddzielić logikę między elementami interfejsu użytkownika a logiką w programowaniu Windows? Chętnie zapoznałbym się również z materiałami i przykładami na ten temat.


title: C++ ofstream dodawania losowych danych do pliku!

text: Oto mój kod: std::ifstream file2(imageToAdd.c_str(), std::ios::in | std::ios::binary); if(plik2){ plik2.seekg(0,std::ios::end); długość = plik2.tellg(); file2.seekg(0,std::ios::beg); wektor<znak> tempImageVec(długość); file2.read(&tempImageVec[0],długość); int totalFileUpload=0; std::ofstream f("dane.testowe"); f << (znak)1; totalFileUpload+=1; vector<char> AddImagesize=print4Bytes(długość); for(int i=0; i<AddImagesize.size();i+=1){ f << (char)AddImagesize[i]; } totalFileUpload+=AddImagesize.size(); for(int i=0; i<tempImageVec.size();i++) f << tempImageVec[i]; totalFileUpload+=tempImageVec.size(); cout << totalFileUpload << endl; } Jak widać do totalFileUpload należy zliczyć ilość danych, które zostaną umieszczone w pliku, jednak w tym przypadku dodaję plik (około 1,33mb), instrukcja cout wyjdzie: 1 405 202 bajtów Jednak otwieranie mandatu w programie takie jak notepad++, lub po prostu przeglądanie właściwości pliku, pokazuje, że plik ma teraz 1 409 439. Skąd więc wzięło się te dodatkowe 4 237 bajtów? Jedyną oczywistą rzeczą, jaką mogłem zauważyć, była możliwość, że długość odczytanego pliku jest nieprawidłowa, ale jest poprawna, ponieważ była taka sama, jak podczas przeglądania właściwości.


title: Czy podczas tworzenia aplikacji społecznościowych mogę używać poświadczeń mojej firmy do wszystkich prac z klientami?

text: Jako programista aplikacji internetowych moja praca nad tworzeniem aplikacji społecznościowych nabrała ostatnio dużego tempa (w szczególności przycisków logowania społecznościowego). Czy mogę w tym celu użyć poświadczeń autora sieci społecznościowej mojej firmy? Nie chcę, aby każdy klient korzystał z od 1 do 20 różnych usług w zależności od jego potrzeb. O wiele łatwiej jest po prostu otworzyć konsolę Google i kliknąć „nowy”.


title: Czy istnieje wspólny termin programowania dla problemów z dodawaniem funkcji do już funkcjonalnego programu?

text: Poszukuję powszechnie używanego terminu programistycznego do opisania fenomenu inżynierii oprogramowania, który (z braku lepszego sposobu na jego opisanie) zilustruję najpierw kilkoma przykładami przez analogię: Scenariusz 1: Chcemy zbudować/rozbudować system metra na obrzeżach małego miasteczka w Wyoming. Istnieją oczywiście zwykłe problemy związane z metrem (wynajęcie odpowiedniej firmy budowlanej, wybór najlepszej trasy, zakup wagonów metra), ale poza tym wdrożenie systemu jest całkiem proste, ponieważ nie ma zbyt wielu ograniczenia do spełnienia. Scenariusz 2: To samo co powyżej, z tą różnicą, że teraz musimy zbudować/rozszerzyć system metra w centrum Los Angeles. Tutaj mamy do czynienia ze wszystkimi problemami, które zrobiliśmy w przypadku (1), ale także z dodatkowymi problemami – większość stosownej przestrzeni jest już zajęta i ma elektorat, który będzie głośno protestował, jeśli sprawimy im niedogodności poprzez zmianę przeznaczenia, przeprojektowanie lub w inny sposób modyfikować infrastrukturę, na której opierają się. Z tego powodu rozszerzenia systemu są albo bardzo powolne i kosztowne, albo w ogóle się nie zdarzają. Czasami widzę podobny wzorzec w przypadku tworzenia oprogramowania – dodanie nowej funkcji do małego/prostego programu jest proste, ale w miarę rozwoju programu dodawanie kolejnych nowych funkcji staje się coraz trudniejsze, choćby dlatego, że trudno jest zintegrować nowe funkcji bez negatywnego wpływu na którykolwiek z wielu istniejących przypadków użycia lub grup użytkowników. (nawet przy solidnym, adaptowalnym projekcie programu, napotykasz problem polegający na tym, że interfejs użytkownika staje się tak skomplikowany, że program staje się trudny do nauczenia lub używania) Czy istnieje termin na to zjawisko?


title: Najlepszy sposób na pobranie opłaty za umowę na przebudowę?

text: Podjąłem się nowego projektu, a zadaniem jest przebudowa istniejącej aplikacji. Już od 6 tygodni pracuję nad przebudową. Początkowo zaoferowałem stałą cenę za pierwszą fazę rozwoju, mimo że specyfikacje, które mi dostarczyli, były dość niejasne. Okazuje się, że to, co miało mi zająć tylko 4 tygodnie (na czym oparłem ofertę) skończyło się na 6 tygodniach. Ponadto w pierwszym etapie jest jeszcze trochę pracy do wykonania, ale klient powiedział, że i tak zapłaci mi za pierwszy etap, ponieważ zajęło to więcej czasu niż przewidywałem, a także dlatego, że wykonałem mnóstwo dodatkowej, nieudokumentowanej pracy. Jak widać, w tym projekcie uważam, że stała cena jest wyzwaniem. Moje pytanie brzmi, jaki jest najlepszy sposób rozliczania dużych projektów programistycznych, które będziesz wykonywać zdalnie? Rozważałem godziny, dni, tygodnie i miesiące. Z pewnością trudno jest mi dokładnie przewidzieć, ile czasu to zajmie.


title: Jakie są szanse na zdobycie dobrej pracy deweloperskiej bez szkolenia z rozwiązywania zagadek programistycznych?

text: Przez „dobrą pracę” rozumiem przede wszystkim dobrze płatną pracę, która wiąże się z rozwojem wiodących na rynku produktów/usług (oczywiście w obszarze moich zainteresowań). Mam tytuł magistra ekonomii i nie posiadam formalnego wykształcenia w zakresie informatyki. Jestem programistą samoukiem. Mam kilka małych projektów, które rozwiązują prawdziwy problem w moim portfolio, a także roczną "karierę" w jakiejś firmie jako młodszy programista. Spodziewam się więc, że podczas rozmowy kwalifikacyjnej do innej pracy dostanę jakiś test kwalifikacyjny. **Jakie są szanse, że dostanę programowanie łamigłówek do rozwiązania?** (Interesuje mnie głównie Europa, jeśli są jakieś duże różnice geograficzne.) Widziałem kilka z nich i jestem przekonany, że 90% z nich nie byłby w stanie rozwiązać na miejscu, z czystą kartką papieru i bez odniesień do internetu czy książek. Dodaj do tego stres związany z wywiadem. Prawdę mówiąc uważam, że tylko bardzo mały procent populacji jest w stanie rozwiązać te bez przygotowania - reszta przechodzi je, ponieważ praktykuje. Na studiach miałem kursy, które wymagały rozwiązania kilku analiz przypadków optymalizacji ekonomicznej, które były oparte na algorytmach (choć innych niż te typowo związane z programowaniem), więc wiem, że najlepszą metodą nauczenia się rozwiązywania takich zagadek jest rozwiązywanie dużych liczba z nich. Problem polega na tym, że ćwiczenie niektórych najczęściej spotykanych łamigłówek może zająć przynajmniej 6 miesięcy nauki w pełnym wymiarze godzin, dzięki czemu mam dość dobrą szansę na zaliczenie większości rozmów kwalifikacyjnych. A ja jestem bardzo praktycznym facetem, który bardzo ceni swój czas. Moja intuicja ekonomiczna podpowiada mi, że wolałbym spędzić 6 miesięcy swojego czasu na dopracowywaniu komercyjnego projektu, nad którym pracowałem, niż rozwijaniu swoich „umiejętności przeprowadzania rozmów kwalifikacyjnych”. Nie zrozum mnie źle. Mam świadomość, jak trudne jest programowanie. Mam zbiór książek, z których korzystam bardzo często, jak tylko napotykam problem matematyczno-algorytmiczny, wiem gdzie i jak zadawać pytania, czasami nawet przeglądam prace naukowe na poziomie doktoratu (jeśli mam ważne, ale konkretny problem). Ale czytanie całej książki Cormena lub Knutha i rozwiązywanie zagadek w tych książkach? Nie jestem takim facetem, a nawet gdybym był, nie mam na to czasu. Dość dobrze radzę sobie w testach, których celem jest przede wszystkim język lub API, zwłaszcza C++. To dlatego, że pracuję z nimi na co dzień, a C++ jest dość niebezpieczny, więc nie miałem innego wyboru, jak tylko go opanować. To było potrzebne do rozwiązania problemu z prawdziwego życia. Z drugiej strony 3 lata zajęło mi natrafienie na sytuację, w której musiałem wybrać najbardziej odpowiedni algorytm sortujący i dostosować go do swoich potrzeb. Co skłania mnie do myślenia, że jeśli nie nauczę się wyraźnie rozwiązywać zakamuflowanych konkretnych zagadek algorytmów sortowania, to nie będę w stanie rozwiązać ich podczas wywiadów. Zauważ, że nie mogę po prostu iść na każdą rozmowę kwalifikacyjną i spróbować swoich szans, ponieważ mieszkam w szczerym polu i zwykle rozmowa kwalifikacyjna jest dużym wyzwaniem logistycznym i obciążeniem dla mojego czasu (przeważnie cała podróż zajmuje 3 dni) i pieniędzy.


title: Jak przygotować się do selektywnego pchania z Mercurialem?

text: Mam sytuację, kiedy pracuję nad projektem, ale jednocześnie pojawiają się drobne problemy, które wymagają szybkiego rozwiązania. Chciałbym przenieść tylko poprawki tych problemów do głównego repozytorium, pozostawiając resztę lokalnie. Problem polega na tym, że, jak już się dowiedziałem, nie jest możliwe wybranie wisienek podczas pchania z mojego repozytorium w górę. Więc pytanie brzmi, jak skonfigurować moje środowisko Hg, aby mieć taką możliwość. Chcę zachować wszystkie metadane Hg, więc wysyłanie łatek nie wchodzi w grę. BTW, jeśli całość może być zarządzana bezpośrednio z MercurialEclipse, byłby to duży plus.


title: Stan systemów budowania w Javie

text: Czy ktoś jeszcze ma dość stanu obecnych systemów kompilacji w przestrzeni Java? Dlaczego nie miałbym po prostu napisać skryptów budujących mój następny projekt w Pythonie, Ruby lub innym w pełni funkcjonalnym języku skryptowym i odzyskać część tej kontroli? Czy ktoś ma jakieś doświadczenie w składaniu czegoś takiego? Jeśli tak, to dobrze się udało, czy była to katastrofa?


title: Kiedy usunąć gałąź w Git

text: Mam projekt skryptowy, którym zarządzałem za pomocą Git. Oprócz dwóch głównych gałęzi, z czasem wprowadzono kilka mniejszych gałęzi, aby uwzględnić drobne funkcje, poprawki lub tymczasowe zmiany. Niektóre z tych gałęzi zbliżają się do końca i nie będę ich więcej aktualizować. Jakie są różne filozofie postępowania z takimi gałęziami? Czy należy je usunąć, czy pozostawić w repozytorium bez opieki? Jeśli to zrobię, czy nie skończę z zagraconym repozytorium?


title: Czy TCP/IP jest zamiennikiem OSI, czy też oba są współzależne i mają współpracować?

text: Jestem zdezorientowany w rozróżnianiu modelu OSI i pakietu TCP/IP. Zgodnie z moją wiedzą. OSI to struktura, na której zbudowane są sieci, a TCP/IP to zestaw protokołów, które działają na tych 7 warstwach OSI. Popraw mnie, jeśli się mylę. Ponadto, czy TCP/IP zastępuje OSI i jest używany **W MIEJSCU** OSI? czy oba te elementy działają **ZBIORCZE**, tworząc Sieć? każde dobre źródło wyjaśniające moje zamieszanie zostanie docenione. Dziękuję.


title: Czy tradycyjna aplikacja kliencka, która łączy się bezpośrednio z bazą danych, to dobry pomysł?

text: Po użyciu doskonałego interfejsu administracyjnego Django, zastanawiałem się nad stworzeniem podobnego systemu, który nie byłby tak powiązany z ORM-em. Teraz, rozważając to, pomyślałem, że pokonanie ograniczeń aplikacji internetowych (podstawowe widżety, sesje, formularze oparte na tekście/HTTP, różne języki po stronie klienta/serwera, w większości przypadków z ograniczonym mechanizmem komunikacji, itp.) były dużym stratą czasu , i że być może tradycyjne tworzenie GUI byłoby lepszą opcją. To doprowadziło mnie do korzystania z aplikacji komputerowej, a następnie części serwerowej, która łączy się z bazą danych i udostępnia ją przez RPC (usługi internetowe, cokolwiek) w aplikacji komputerowej, obsługując zabezpieczenia w tradycyjny sposób aplikacji internetowych. Jednak w dzisiejszych czasach można bezpiecznie łączyć się z bazami danych za pomocą protokołu SSL, a podobno bazy danych zapewniają wystarczającą autoryzację opartą na rolach (GRANT/REVOKE), więc dlaczego nie połączyć się bezpośrednio z bazą danych i uniknąć konieczności kodowania serwera? Czy to dobry pomysł? Czy z takim podejściem wiążą się nierozwiązywalne problemy? [Myślę, że w połączeniu z dobrą introspekcją baz danych można by napisać stosunkowo prosty framework, który umożliwiłby bardzo fajne RAD aplikacji opartych na bazach danych)? Jakie są problemy teoretyczne, a jakie problemy z konkretnymi wdrożeniami? dodatkowe pytanie: czy bazy danych zapewniają wystarczającą autoryzację? Podczas moich badań natknąłem się na następujący wątek dyskusji: http://archives.postgresql.org/message-id/4AE02DF0.40101@enterprisedb.com, który robi pewne dziury w tradycyjnej kontroli dostępu do wierszy opartej na widokach w implementacji PostgreSQL .


title: Tak naprawdę nie mogę nic stworzyć, co mogę z tym zrobić?

text: Jestem programistą C# i naprawdę nie sądzę, że potrafię stworzyć oprogramowanie, na przykład: jeśli mam zadanie wziąć plik WAV i go odtworzyć, po prostu użyję klasy .NET SoundPlayer. jeśli muszę zaprezentować zdjęcie, użyję po prostu skrzynki na zdjęcia. Nie jestem nawet pewien, jak .NET radzi sobie z zadaniami, czy przesadza i zajmuje dużo pamięci? co mam zrobić w przypadkach, gdy platforma .NET nie obsługuje? na przykład, jeśli chcę grać w WAV, jak wspomniano, to świetnie. ale jeśli chcę odtworzyć plik mp3, jedyne, co przychodzi mi do głowy, to poszukać innej biblioteki w Internecie, która to obsługuje. Widzę wiele programów i po prostu nie rozumiem, jak to robią. nawet jeśli jest to proste zadanie, takie jak posiadanie miniatury folderu, takiej jak pokazano w Eksploratorze Windows (jak pokazano tutaj: http://public.bay.livefilestore.com/y1p_RvwMDp6PkWP- X_nOZbscmJTL1y32Vzd8pG0QCJbo3Wn-38GlzzclueXwne1HPWlB psid=1) Nie mam pojęcia jak to zrobić. Ponadto, gdy otrzymuje się skomplikowane zadanie, powiedzmy zrób algorytm wyszukiwania ścieżek lub cokolwiek, co nie jest podstawowym zadaniem, jestem pusty i nie mam pojęcia, co robić. Czuję, że czegoś mi brakuje i jestem pewien, że wiele osób czuje dokładnie tak, jak ja, jaką radę mógłbyś im udzielić?


title: Przekazywanie danych między konkretnymi stanami?

text: Mam implementację wzorca stanu ~~machine~~, która jest dość prosta, ale mam problem z projektem, którego nie znam eleganckiego rozwiązania. Oto trochę pseudokodu do zilustrowania. class MainRoomState:State public override void HandleJoinSuccess(string gameName, List<LobbyPlayer> gracze) { Context.CurrentState = new LobbyState(Context); //lista graczy musi być w LobbyState //że dane są specyficzne dla LobbyState } Zasadniczo zdarzeniem wyzwalającym zmianę stanu jest również dostarczenie danych, które należą do nowego stanu i nie wiem, czy jest ładna sposób na zrobienie tego poza współdzieloną klasą w nadrzędnym obiekcie Context, lub przez zniekształcenie konstruktora dla tego szczególnego przypadku. **Edytuj** \- bardziej szczegółowo Ustawiłem moje stany, aby enkapsulować dane specyficzne dla stanu, a także logikę, która obejmuje, w tym przypadku, ekran GUI należący do bieżącego stanu. Wydaje się, że jest to bardziej elegancki sposób obsługi nie tylko separacji logiki, ale także konkretnych danych stanowych. Oto jak wygląda mój stan abstrakcyjny, public abstract class GameState { public GameState(Game context) { Context = context; Sieć = kontekst.Sieć; } //Zdarzenia przychodzące public abstract void HandleConnected(); public abstract void HandleDisconnected(string powód); public abstract void HandleNetworkNotification(string msg); public abstract void HandleGameStarting(); //jest około 20 innych metod, które nie są tutaj pokazane. Oto moja klasa Game, która działa głównie jako przechowywanie danych, ale kontroluje również licznik czasu pętli gry, uruchamianie głównych zdarzeń itp. public class Game { public Game() { //.. .pęczek kodu startowego tutaj CurrentState = new DisconnectedState(this); } public GameState CurrentState { get; ustawić; } //więcej metod itp. } Zobaczysz, że wybrałem złożone zawieranie CurrentState zamiast implementować metody przekazujące. Było tak głównie dlatego, że nie lubiłem bałaganu w przechodzeniu przez telefony, kiedy naprawdę nie musiałem. Ponadto cały stan przechowuje odwołanie do kontekstu, zamiast przekazywać je przez metodę. Mam dwa pytania/problemy ze wzorem. 1. Każdy konkretny stan MUSI zaimplementować w jakiś sposób KAŻDĄ metodę w stanie abstrakcyjnym. To śmieszna przesada, a obecnie większość moich stanów używa tylko 20-40% metod, pozostawiając mi kilka stron z tym: > public override void HandleGameStarting() { //nie obsługiwane w tym stanie } 1. Mój drugi Problem polega na tym, że każdy stan ma swoje własne dane, które muszą istnieć tylko w tym stanie. Nie chcę przechowywać ogromnej konglomeracji danych w obiekcie Context, gdy o wiele bardziej hermetyzowanym sposobem obsługi byłoby umieszczenie go w stanie. Patrząc na twój przykład, przypuszczam, że jedną z odpowiedzi na moje pierwotne pytanie jest to, że mógłbym poprawnie przejść przez metody do stanu bieżącego i po prostu zrobić coś w rodzaju hacka z danymi, class Game public override void HandleJoinSuccess(string gameName, List< LobbyPlayer> graczy) { CurrentState = new LobbyState(this); CurrentState.HandleData(nazwagry,gracze); //lista graczy musi znajdować się w LobbyState //dane są specyficzne dla LobbyState }


title: Wstępne przetwarzanie danych wejściowych sieci neuronowej

text: Oczywiste jest, że skuteczność sieci neuronowej zależy w dużej mierze od formatu, z którym ma ona pracować. Chcesz wstępnie przetworzyć go do najwygodniejszej formy, do jakiej możesz uzyskać algorytmicznie, tak aby sieć neuronowa nie musiała sama tego rozliczać. Pracuję nad małym projektem, który (niespodzianka!) będzie wykorzystywał sieci neuronowe. Moim przyszłym celem jest ostateczne użycie NEAT, którym jestem bardzo podekscytowany. W każdym razie, jeden z moich pomysłów polega na przenoszeniu obiektów w ciągłej przestrzeni 2D, z perspektywy odgórnej (to byłaby naprawdę fajna sztuczna inteligencja w grze). Oczywiście, o ile ci faceci nie są ślepi, będą mogli zobaczyć otaczający ich świat. Istnieje wiele różnych sposobów wprowadzania tych informacji do sieci. Ciekawym, ale kosztownym sposobem jest po prostu renderowanie odgórnego „widoku” rzeczy, z jednostkami jako kropkami na obrazie, i karmienie tego. Miałem nadzieję na coś znacznie prostszego w użyciu (przynajmniej na początku), takiego jako listę x (może 7 lub więcej) najbliższych bytów i ich pozycji we względnych współrzędnych biegunowych, orientacji, zdrowia itp., ale staram się wymyślić najlepszy sposób na zrobienie tego. Moim pierwszym odruchem było uporządkowanie ich według odległości, co nieodłącznie ćwiczyłoby również sieć neuronową w uznawaniu tych ważniejszych. Zastanawiałem się jednak, co jeśli są dwa byty, które są prawie w tej samej odległości? Mogliby z łatwością zmieniać indeksy na tej liście, dezorientując sieć. Moje pytanie brzmi: **czy istnieje lepszy sposób na przedstawienie tego?** Zasadniczo problem polega na tym, że sieć potrzebuje dobrego sposobu śledzenia kto jest kim, jednocześnie znając (poprzez wprowadzenie) odpowiednie informacje o liście podmiotów, które widać. Dziękuję!


title: Jak często zmieniasz tryb?

text: Próbowałem VIM i podobało mi się, ale coś przestało go używać: musiałem często, bardzo często wpisywać ESC, coś takiego jak co 5 sekund i było to bardzo niewygodne, więc przestałem używać go jako głównego edytora tekstu (teraz używam emacs, fajny programista jak ja). Po moich smutnych doświadczeniach z VIM mogłem zrozumieć, dlaczego niektórzy intensywni użytkownicy uwielbiają vim. Ale teraz przypuszczam, że być może po większym treningu częstotliwość przełączania trybów mogłaby się drastycznie zmniejszyć. Tak więc, aby zweryfikować tę hipotezę, pytam was, starzy użytkownicy vima, jak często przełączacie tryb?


title: Początkujący potrzebują pomocy w nauce programowania Qt

text: Myśl o nauce Qt. Potrzebujesz pomocy od doświadczonych tutaj. Jak mam zacząć. Kilka dobrych książek do odniesienia. Kilka dobrych samouczków do nauki... Edytuj: Również, które jest dobrym IDE dostępnym do programowania w Qt. Taki, który zapewnia pomoc w trybie online, automatyczne uzupełnianie, wcięcia... Używam Debiana Lenny


title: Przekaż deklarację vs include

text: `Zmniejsz liczbę #include plików w plikach nagłówkowych. Skróci to czas budowy. Zamiast tego umieść pliki dołączane w plikach kodu źródłowego i użyj deklaracji forward w plikach nagłówkowych.” Przeczytałem to tutaj. http://www.yolinux.com/TUTORIALS/LinuxTutorialC++CodingStyle.html. Mówi więc, że klasa (klasa A) w pliku nagłówkowym nie musi używać aktualnej definicji jakiejś klasy (klasa B). W tym czasie możemy użyć deklaracji forward zamiast dołączać konkretny (klasy B) plik nagłówkowy. Pytanie: Jeśli klasa (klasa A) w nagłówku nie używa aktualnej definicji konkretnej klasy (klasa B), to w jaki sposób deklaracja forward pomaga skrócić czas kompilacji?


title: Jakie są kreatywne sposoby na odblokowanie zespołu programistów?

text: Ustawienie: Wiele zespołów programistycznych, wiele zależności i ograniczeń. Jeśli jeden zespół jest zablokowany w opracowywaniu kodu, otrzymywaniu wywołań usług lub przejściu do środowiska kontroli jakości, jakie są sposoby, aby zespoły mogły kreatywnie szukać obejścia swoich problemów?


title: Open Source, prawa autorskie i trywialne poprawki błędów

text: Załóżmy, że programista opracował bibliotekę dla swojej komercyjnej aplikacji o zamkniętym kodzie źródłowym. Ponieważ chcą się odwdzięczyć społeczności open source, publikują tę bibliotekę na, powiedzmy, GPL, ale nadal używają jej we własnej aplikacji. Ponieważ posiadają prawa autorskie, to w porządku. Teraz użytkownik wersji GPL znajduje błąd, naprawia go i przesyła łatkę do oryginalnego programisty. Jak rozumiem, aby użyć tej poprawki błędu w swojej aplikacji o zamkniętym kodzie źródłowym, programista musi mieć pozwolenie od zgłaszającego. Jeśli zgłaszający odmówi, deweloper musi znaleźć inny sposób na naprawienie błędu w wersji o zamkniętym kodzie źródłowym. Ale co, jeśli sama naprawa błędu jest naprawdę trywialna? Na przykład prawidłowe inicjowanie zmiennej lub sprawdzanie wskaźnika zerowego? Coś, co każdy półkompetentny programista może znaleźć i naprawić w ciągu kilku minut, biorąc pod uwagę opis błędu? Czy łatka do tego jest nadal chroniona prawami autorskimi? A może pierwotny programista może zaimplementować identyczną poprawkę w swojej aplikacji o zamkniętym kodzie źródłowym bez zgody zgłaszającego? _Uwaga: to naprawdę jest hipotetyczny scenariusz, a nie jedno z pytań typu „mój przyjaciel ma ten problem”_


title: Frontend napisany w językach używanych do backendu!

text: Z mojego doświadczenia w tworzeniu stron internetowych wiem, że języki takie jak PHP, Java, Python..etc są używane do tworzenia backendu (oprogramowania działającego na serwerze), a do frontendu używane są języki takie jak JS/HTML/CSS. Ale widzę, że wiele firm mówi, że używa na przykład PHP do tworzenia front-endu i mówi python do backendu. Czy to oznacza, że PHP jest front-endem do wywoływania innych usług napisanych w innych językach za pośrednictwem REST, RPC ..etc?


title: Dlaczego języki z zarządzaniem pamięcią, takie jak Java, JavaScript i C#, zachowały słowo kluczowe `new`?

text: Słowo kluczowe `new` w językach takich jak Java, JavaScript i C# tworzy nową instancję klasy. Wydaje się, że ta składnia została odziedziczona z C++, gdzie `new` jest używane specjalnie do alokowania nowej instancji klasy na stercie i zwracania wskaźnika do nowej instancji. W C++ nie jest to jedyny sposób konstruowania obiektu. Możesz także skonstruować obiekt na stosie, bez użycia `nowego` \- iw rzeczywistości ten sposób konstruowania obiektów jest znacznie bardziej powszechny w C++. Tak więc, wywodząc się z C++, słowo kluczowe `new` w językach takich jak Java, Javascript i C# wydawało mi się naturalne i oczywiste. Potem zacząłem uczyć się Pythona, który nie ma słowa kluczowego `new`. W Pythonie instancję tworzy się po prostu przez wywołanie konstruktora, na przykład: f = Foo() Na początku wydawało mi się to trochę dziwne, dopóki nie przyszło mi do głowy, że nie ma powodu, aby Python miał `nowy`, ponieważ wszystko jest obiektem, więc nie ma potrzeby rozróżniania między różnymi składniami konstruktorów. Ale potem pomyślałem - jaki jest sens „nowości” w Javie? Dlaczego powinniśmy powiedzieć „Object o = new Object();”? Dlaczego nie po prostu `Obiekt o = Obiekt();`? W C++ na pewno istnieje potrzeba `new`, ponieważ musimy rozróżnić alokację na stercie i alokację na stosie, ale w Javie wszystkie obiekty są konstruowane na stercie, więc po co w ogóle używać słowa kluczowego `new`? To samo pytanie można zadać w przypadku Javascript. W C#, z którym jestem znacznie mniej zaznajomiony, myślę, że „nowy” może mieć jakiś cel w zakresie rozróżniania typów obiektów i typów wartości, ale nie jestem pewien. Niezależnie od tego, wydaje mi się, że wiele języków, które pojawiły się po C++, po prostu "odziedziczyło" słowo kluczowe `new` - tak naprawdę nie potrzebując go. To prawie jak _szczątkowe słowo kluczowe_. Wydaje się, że nie potrzebujemy go z jakiegokolwiek powodu, a jednak jest. **Pytanie:** Czy mam rację? A może istnieje jakiś przekonujący powód, dla którego „nowe” musi być w inspirowanych C++ językach z zarządzaniem pamięcią, takich jak Java, Javascript i C#, ale nie w Pythonie?


title: Proste pytania sprawdzające zrozumienie zasady odwrócenia zależności

text: Przygotowuję krótką (1-2 godzinną) prezentację o DIP dla kilku (~5) młodszych programistów (1-3 yr xp) w biurze. Na koniec prezentacji chcę wiedzieć, czy zrozumieli to, co przedstawiałem, jakie są możliwe pytania, które zadaję, aby dowiedzieć się ich zrozumienia? Może coś, na co mogą odpowiedzieć i wyjaśnić w 3 minuty lub mniej?


title: Czy uważasz, że przechowywanie kodowania o zmiennej długości w std::string lub std::wstring jest w porządku i czy to robisz?

text: Jestem trochę przerażony, że ludzie faktycznie sugerują używanie UTF-8 wewnątrz `std::string` i są w porządku z UTF-16 `std::wstring`. Czy naprawdę to robisz? Czy uważasz, że to jest w porządku?


title: Open Grid Engine czy Akka/Coś bardziej odpornego na błędy?

text: Moim przypadkiem użycia jest to, że mam potok niezależnych, samodzielnych programów, które chcę wykonać w określonej kolejności na określonych fragmentach danych, które są wyprowadzane z poprzednich etapów potoku. Rurociąg jest całkowicie liniowy i nie robi nic w zakresie alternatywnych ścieżek przez rurę. Obecnie używam do tego SGE i działa OK, jednak czasami zadanie przekroczy ograniczenia pamięci, zakończy się niepowodzeniem i wszystkie zadania wymagające danych wyjściowych zakończą się niepowodzeniem. W takim przypadku rura musi zostać zrestartowana i wydaje się, że cokolwiek zapewnia odporność na błędy w akka, może rozwiązać ten problem?


title: Relacje z klientami w zwinnym rozwoju

text: Mój zarząd właśnie zadał bezprecedensowe pytanie w mojej (co prawda krótkiej) historii z organizacją: „Co możemy zrobić, aby ci pomóc?” Równocześnie pracujemy nad kilkoma dużymi projektami dla całkiem nowego klienta, którego umiejętność przesuwania wymagań w połowie projektu jest legendą. Rozwijanie się dla tych facetów jest jak stepowanie na ruchomych piaskach. Wydaje się, że to doskonała okazja, aby zaproponować zmianę na bardziej zwinne podejście. Wiem, że zostanę zapytany, ao czym nie mam pojęcia, to jak zacytować/licytować/wystawić rachunek za tego rodzaju projekt. Czy chodzisz co godzinę? Czy licytujesz różne ceny? Czy szarżujesz sprintem? Mówiąc bardziej ogólnie, aspekt Manifestu Agile, który brzmi: „Cenimy współpracę z klientem nad negocjowanie kontraktu”, BĘDZIE przestraszyć moje kierownictwo. Jak oceniasz to w realnym świecie klientów, którzy chcą dużo za mało?


title: Pierwsze kroki w dużych projektach

text: Właśnie ukończyłem studia z licencjatem. w komp. Nauki ścisłe. Chociaż była to dobra szkoła, jesteśmy jedynym akredytowanym wydziałem CS w naszym stanie. Czuję się przyzwoitym programistą, nie niesamowitym, ale nie strasznym. Dostałem swoją pierwszą pracę około 2 tygodnie temu, jest to dość podstawowa praca: tworzenie/tester oprogramowania. W tej chwili nie ma dużo kodowania (głównie proste rzeczy), ale wkrótce będę miał możliwość pomocy w rozwoju (co chcę zrobić). Rzecz w tym, że nigdy nie pracowałem nad dużym projektem. W szkole mieliśmy projekty „grupowe”, ale nic wielkiego. Nie znam więc dużych klas i tym podobnych (głównym językiem był C++). Czy to jest coś, do czego po prostu przywyknę z czasem? Niektórzy koledzy byli do tego przyzwyczajeni ze stażami itp., ale nigdy nie miałem takiej szansy. Moja praca polegała głównie na "pracy jednego człowieka". Głównie małe rzeczy. Plus w klasie i tak nigdy nie robiliśmy wielkich projektów. Jak „planujecie” te rzeczy? Korzystasz z tablicy i planujesz zajęcia i takie czy co? Innym moim zmartwieniem jest to, że muszę często używać google do przykładów kodu, ponieważ czasami po prostu nie rozumiem, jak coś działa. Czy to normalne? Mam na myśli „technicznie” mam 4-5 lat doświadczenia w kodowaniu, ale tak naprawdę wydaje mi się, że mam 2 lata rzeczywistego doświadczenia.


title: Czy Adobe Flash nadal nadaje się do tworzenia oprogramowania CBT (Computer Based Training)?

text: Ze wszystkiego, co przeczytałem o Adobe Flash w ciągu ostatnich kilku lat, wygląda na to, że platforma została mocno napiętnowana w przestrzeni internetowej. Niezależnie od tego, czy nadal sprawdza się jako platforma do budowania lokalnych aplikacji, takich jak kursy CBT (Computer Based Training)?


title: Jaka jest historia używania „foo” i „bar” w przykładach kodu źródłowego?

text: Dlaczego wiele przykładów kodu, zwłaszcza samouczki, tak często używa nazw „Foo” i „Bar”? To prawie standard. Na przykład: void foo(char* bar) { printf("%s", bar); }


title: Jakie jest pochodzenie foo i bar?

text: > **Możliwe duplikowanie:** > Używanie „Foo” i „Bar” w przykładach Wiem, że laboratoria AT&T używały ich w swoich uniksowych czasach, ale czy mają one jeszcze głębszą historię?


title: Wybieranie obrazu z zestawu obrazów, który najprawdopodobniej będzie atrakcyjny dla typowego widza

text: Mając zestaw obrazów na stronie internetowej, jaki jest dobry sposób na wybranie atrakcyjnego obrazu, który jest również reprezentatywny dla strony internetowej? Przypadek użycia polega na wyświetlaniu obrazu wraz z opisem adresu URL strony, po umieszczeniu go przez użytkownika w aktualizacji statusu. Znalazłem kilka technik, aby znaleźć najciekawszą część pojedynczego obrazu. Przykład: http://berk.es/smartcropper/ Więc może mogę użyć tego pojęcia entropii do porównania obrazów w zestawie? Programuję w ruby, więc preferowane jest czyste rozwiązanie ruby, ale jestem otwarty na innych.


title: Jak Lua obsługuje zarówno liczby całkowite, jak i zmiennoprzecinkowe?

text: Odkąd pamiętam programowanie, uczono mnie, aby nie porównywać liczb zmiennoprzecinkowych pod kątem równości. Teraz, czytając Programowanie w Lua o typie `number` w Lua, znalazłem co następuje: > Typ number reprezentuje liczby rzeczywiste (zmiennoprzecinkowe podwójnej precyzji). > Lua nie ma typu całkowitego, ponieważ go nie potrzebuje. Istnieje powszechne > błędne przekonanie o błędach arytmetyki zmiennoprzecinkowej, a niektórzy ludzie > obawiają się, że nawet prosty przyrost może być dziwny w przypadku liczb zmiennoprzecinkowych. Faktem jest, że gdy używasz podwójnej do reprezentowania liczby całkowitej, nie ma żadnego błędu zaokrąglania (chyba że liczba jest większa niż > 100 000 000 000 000). W szczególności liczba Lua może reprezentować dowolną długą > liczbę całkowitą bez problemów z zaokrąglaniem. Co więcej, większość nowoczesnych procesorów wykonuje arytmetykę zmiennoprzecinkową > tak szybko, jak (lub nawet szybciej niż) arytmetykę liczb całkowitych. Czy to prawda dla wszystkich języków? Zasadniczo, jeśli nie wyjdziemy poza liczbę zmiennoprzecinkową w podwójnych, jesteśmy bezpieczni w arytmetyce liczb całkowitych? Lub, aby być bardziej zgodnym z tytułem pytania, czy jest coś specjalnego, co Lua robi ze swoim typem `number`, więc działa dobrze zarówno jako typ całkowity, jak i zmiennoprzecinkowy?


title: Względna opłacalność rozwoju opartego na testach (akceptacyjnych)

text: Chciałbym wiedzieć, jaki jest ogólny wpływ planowania zasobów na projekt oprogramowania, gdzie wymagania i projekt projektu są napędzane przez automatyczne testy akceptacyjne i testy jednostkowe, w przeciwieństwie do bardziej „tradycyjnego” podejścia do tworzenia oprogramowania. ![tutaj podaj opis obrazu](http://i.stack.imgur.com/3vNIF.jpg) Jaki, według Twojego doświadczenia, ma ogólny wpływ na wymagania dotyczące zasobów do ukończenia projektu oprogramowania w ramach TDD, w przeciwieństwie do większej liczby „ tradycyjne” metodologie rozwoju? Wydaje mi się oczywiste, że jakość wzrośnie, a ilość niepewności zmniejszy się, ponieważ testowanie odbywa się wcześniej, ale wymaganie testów z góry wydaje się wymagać więcej godzin pracy programistów. Jak bardzo zwiększa się wysiłek programistyczny, czy faktycznie zmniejsza się z powodu wstępnej eliminacji błędów? O ile więcej wysiłku wymaga klient? Czy muszą zmienić sposób, w jaki odnoszą się do projektu, zwłaszcza jeśli są przyzwyczajeni do dużego projektu z góry? Czy liczba godzin wymaganych od klienta ogólnie wzrasta, czy faktycznie maleje? Wyobrażam sobie, że szacowanie czasu byłoby bardzo niejasne w iteracyjnym procesie TDD na początku projektu TDD (ponieważ nie ma planu rozwoju oprogramowania). Czy jest jakiś punkt, powiedzmy, 20% w projekcie, w którym zaufanie wzrasta na tyle, że klient może ostatecznie otrzymać mniej lub bardziej stabilny szacunek czasu i pieniędzy? Uwaga: nie szukam tutaj subiektywnych opinii ani teorii, więc proszę nie spekulować. Bardziej szukam doświadczenia w świecie rzeczywistym w TDD.


title: Czy jest jakaś teoria lub nauka do budowania złożonych GUI wizualizacji?

text: Większość widżetów "Canvas" w popularnych zestawach narzędzi GUI oferuje operacje niskiego poziomu, takie jak rysowanie podstawowych kształtów o różnych kolorach/szerokości linii/itd. lub wyświetlanie sprite'ów i obrazów. Niektóre wydają się mieć nieco bardziej zaawansowane funkcje, takie jak możliwość traktowania prymitywów narysowanych na płótnie jako „aktorów”, dzięki czemu można nimi niezależnie przemieszczać i manipulować po narysowaniu. Jak przejść od tak niskopoziomowych operacji do wysoce złożonych i interaktywnych wizualizacji, na przykład Integrative Genomics Viewer (zrzut ekranu 1, zrzut ekranu 2, zrzut ekranu 3)? To narzędzie umożliwia nawigację po różnych adnotacjach i cechach znajdujących się w genomie na różne sposoby, od poziomu pojedynczych nukleotydów (tj. bardzo mało szczegółów) do poziomu całego genomu (przeglądy na bardzo wysokim poziomie), obsługuje bardzo duże zbiory danych (100 gb) i zawiera wiele różnych typów działek, z których wiele jest unikalnych dla aplikacji lub przynajmniej bioinformatyki. Czy poza MVC istnieje teoria lub model określający strukturę takiej aplikacji?


title: Po co pisać testy dla kodu, który zrefaktoryzuję?

text: Dokonuję refaktoryzacji ogromnej starszej klasy kodu. Refaktoryzacja (przypuszczam) popiera to: 1. pisanie testów dla starszej klasy 2. refaktoryzacja poza klasą Problem: kiedy dokonam refaktoryzacji klasy, moje testy w kroku 1 będą musiały zostać zmienione. Na przykład to, co kiedyś było w starszej metodzie, teraz może być osobną klasą. To, co było jedną metodą, może być teraz kilkoma metodami. Cały krajobraz starszej klasy może zostać wymazany w coś nowego, więc testy, które piszę w kroku 1, będą prawie nieważne. W istocie dodam _Krok 3. Obficie przepisuj moje testy_ Jaki jest zatem cel pisania testów przed refaktoryzacją? Brzmi to bardziej jak akademickie ćwiczenie tworzenia większej ilości pracy dla siebie. Piszę teraz testy dla metody i dowiaduję się więcej o tym, jak testować rzeczy i jak działa starsza metoda. Można się tego nauczyć po prostu czytając sam stary kod, ale pisanie testów jest prawie jak wcieranie w to nosa, a także dokumentowanie tej tymczasowej wiedzy w osobnych testach. W ten sposób prawie nie mam innego wyjścia, jak tylko dowiedzieć się, co robi kod. Powiedziałem tutaj tymczasowy, ponieważ dokonam refaktoryzacji z kodu, a cała moja dokumentacja i testy będą w znacznej części nieważne, z wyjątkiem tego, że moja wiedza zostanie i pozwoli mi być świeższym na temat refaktoryzacji. Czy to jest prawdziwy powód, aby pisać testy przed refaktoryzacją - aby pomóc mi lepiej zrozumieć kod? Musi być inny powód! Proszę wytłumacz! **Uwaga:** Jest taki post: Czy ma sens pisanie testów dla starszego kodu, gdy nie ma czasu na pełną refaktoryzację? ale mówi „pisz testy przed refaktoryzacją”, ale nie mówi „dlaczego” ani co zrobić, jeśli „pisanie testów” wydaje się „zajętą pracą, która wkrótce zostanie zniszczona”


title: Zwiększ wydajność aplikacji

text: Piszę program dla firmy, który będzie generował dla nich dzienny raport. Wszystkie dane, których używają do tego raportu, są przechowywane w lokalnej bazie danych SQLite. W tym raporcie wykorzystują praktycznie każdą część informacji z bazy danych. Tak więc obecnie, kiedy wysyłam zapytanie do bazy danych, pobieram wszystko i przechowuję informacje na listach. Oto, co mam: using (var dataReader = _connection.Select(query)) { if (dataReader.HasRows) { while (dataReader.Read()) { _date.Add(Convert.ToDateTime(dataReader["data"]) )); _measured.Add(Convert.ToDouble(dataReader["zmierzona_odległość"])); _bit.Add(Convert.ToDouble(dataReader["bit_loc"])); _psi.Add(Convert.ToDouble(dataReader["pomp_press"])); _time.Add(Convert.ToDateTime(dataReader["znacznik czasu"])); _fob.Add(Convert.ToDouble(dataReader["force_on_bit"])); _torque.Add(Convert.ToDouble(dataReader["moment obrotowy"])); _rpm.Add(Convert.ToDouble(dataReader["rpm"])); _pumpOneSpm.Add(Convert.ToDouble(dataReader["pump_1_strokes_pm"])); _pumpTwoSpm.Add(Convert.ToDouble(dataReader["pump_2_strokes_pm"])); _pullForce.Add(Convert.ToDouble(dataReader["pull_force"])); _gpm.Add(Convert.ToDouble(dataReader["przepływ"])); } } } Następnie wykorzystuję te listy do obliczeń. Oczywiście im więcej informacji znajduje się w tej bazie danych, tym dłużej zajmie początkowe zapytanie. Jestem ciekaw, czy w ogóle istnieje sposób na zwiększenie wydajności zapytania? Dzięki za wszelką pomoc. **EDYTUJ** Jeden z wierszy raportu nazywa się Dzienne godziny wiercenia. Do tego obliczenia używam tej metody: // Pobiera sygnatury czasowe, w których zmierzona głębokość == głębia bitowa i PSI >= 50 publicznych double CalculateDailyProjectDrillingHours(DateTime date) { var dailyTimeStamps = _time.Where((t, i) => _date[ i].Equals(data) && _measured[i].Equals(_bit[i]) && _psi[i] >= 50).ToList(); return _dailyDrillingHours = Convert.ToDouble(Math.Round(TimeCalculations(codzienneZnacznikiCzasu).TotalHours, 2, MidpointRounding.AwayFromZero)); } // Sprawdza, czy interwał jest mniejszy niż 10, a następnie dodaje interwał do całkowitego czasu private static TimeSpan TimeCalculations(IList<DateTime> timeStamps) { var interval = new TimeSpan(0, 0, 10); var totalTime = new TimeSpan(); TimeSpan timeRóżnica; for (var j = 0; j <ZnacznikiCzasu.Liczba - 1; j++) { if (ZnacznikiCzasu[j + 1]).Odejmowanie(ZnacznikiCzasu[j]) <= interwał) {RóżnicaCzasu =ZnacznikiCzasu[j + 1].Odejmowanie( znaczniki czasu[j]); totalTime = totalTime.Add(timeDifference); } } return totalTime; }


title: algorytm drukujący cyfry we właściwej kolejności

text: Próbowałem napisać algorytm, który wypisze cyfry oddzielnie od liczby całkowitej. Muszę to napisać w pseudokodzie. Wiem, jak napisać algorytm odwracający cyfry. digi(n): while n != 0: x = n % 10 n = n // 10 print (x) Ale nie wiem, jak napisać algorytm, który wypisze cyfry we właściwej kolejności. Na przykład dane wejściowe to liczba całkowita `123467`, a dane wyjściowe to: `1 2 3 4 6 7`. Liczby zostaną wprowadzone przez użytkownika i nie możemy ich przekonwertować na ciąg. Potrzebuję pomocy w rozpoczęciu pisania algorytmów.


title: Jak napisać opisowe warunkowe dla ifs?

text: Przyzwyczaiłem się do używania nadmiernie opisowych nazw. Ponadto przyzwyczaiłem się również do tworzenia warunków dla typu if: bool user_is_female = user.get_gender() == GENDER_FEMALE; bool user_is_warrior = user.get_unit_class() == CLASS_WARRIOR; bool user_can_wear_battle_skirt = user_is_female && user_is_warrior; if (user_can_wear_battle_skirt) { user.equip(EQUIPMENT_BATTLE_SKIRT); } Więc tak, porzuciłem "== prawda" lub "prawda ==", które mnie uczono, to dobra praktyka. Wydaje się, że potrzebuje też mniej komentarzy. Jest jednak dość rozwlekły/długi. Chciałem uczynić kod bardziej czytelnym. Czy powinienem więc nadal używać tej metody? Jakieś alternatywy? if (user.can_wear(battle_skirt)) { user.equip(battle_skirt); } Była sugestią, że muszę usunąć, ponieważ zamieściłem w złym miejscu.


title: LINQ a warstwa dostępu do danych

text: Nauczyłem się zawsze obsługiwać dowolny kod dostępu do danych w całkowicie oddzielnej „warstwie” od mojej logiki biznesowej i kodu interfejsu użytkownika. To zawsze była dla mnie bardzo dobra architektura i wszelkie „reguły” lub najlepsze praktyki, które widzę, nadal pasują do tego stylu kodowania, zwłaszcza zasady pojedynczej odpowiedzialności. W przypadku większości moich domowych projektów korzystałem z własnego ORM-a, który stworzyłem, który zawsze chciałem tworzyć jako open-source. Jednak od tego czasu LINQ stał się dostępny, co było bardzo podobne do sposobu działania mojego ORM (ale ... lepiej). Nie ma nic, co mógłbym wcześniej zrobić z własnym ORM, czego nie mogę teraz zrobić z LINQ (z wyjątkiem bitów integracji REST). Więc moje pytanie brzmi; **Czy LINQ jest moją nową warstwą dostępu do danych?** Czy w ogóle potrzebuję tej warstwy? Czy moja BLL powinna po prostu rozmawiać bezpośrednio z LINQ? A może to nadal zła praktyka? **Edytuj:** Pierwotne pytanie odnosiło się do LINQ to Entities, ale istnieje wiele interesujących odpowiedzi dotyczących LINQ to SQL. Co ludzie myślą o nich obu? Zbieram, że LINQ to SQL tak naprawdę nie może zastąpić DAL, ale czy Entity Framework?


title: Czy istnieje sposób ustalenia, czy baza danych została zmieniona, a następnie przesłania nowych danych do Aplikacji?

text: Wszystkie nasze (moja firma) obecnie aplikacje pobierają informacje z tej bazy danych, są sposobem na uzyskanie następujących typów baz danych w celu wypychania danych lub wypychania zdarzenia, aby umożliwić aplikacji pobieranie danych. * Dostęp * SQL * Oracle * Systemy plików (pliki i foldery) Dzisiejszym problemem jest to, że większość naszych aplikacji spędza dużo czasu na ciągłym przeglądaniu baz danych i sprawdzaniu systemu plików, aby sprawdzić, czy dane się zmieniły. Byłoby lepiej, gdyby baza danych informowała aplikację o zmianie danych. Czy w programie Visual studio istnieją narzędzia, które to umożliwiają, czy też istnieją narzędzia w bazie danych/systemie plików, które to umożliwiają? Wszyscy gotowi pytali o to przy przepełnieniu stosu, ale nie ma odpowiedzi. Robię więcej badań, ale wydaje się, że nie mogę iść dalej. Mój przełożony poprosił o zbadanie tego, ponieważ oznaczałoby to, że nasze aplikacje działają znacznie szybciej i wydajniej.


title: Sprawdzanie limitów czasu stało się bardziej czytelne

text: Mam kilka sytuacji, w których muszę kontrolować limity czasu w aplikacji technicznej. Albo w pętli, albo jako prosty test. Oczywiście – obsługa tego jest _naprawdę łatwa_ , ale żadna z nich nie wygląda uroczo. Dla wyjaśnienia, oto kod C# (Pseudo): private DateTime girlWentIntoBathroom; girlWentIntoBathroom = DateTime.Now; do { // zrób coś } while (girlWentIntoBathroom.AddSeconds(10) > DateTime.Now); lub if (girlWentIntoBathroom.AddSeconds(10) > DateTime.Now) MessageBox.Show("Poczekaj trochę dłużej"); else MessageBox.Show("Pukaj głośniej"); Teraz zainspirowało mnie coś, co zobaczyłem w Ruby na StackOverflow: Teraz zastanawiam się, czy ta konstrukcja może być bardziej czytelna za pomocą metod rozszerzających. Moim celem jest coś, co można przeczytać w stylu > „Jeśli girlWentIntoBathroom jest ponad 10 sekund temu” **Pierwsza próba** if (girlWentIntoBathroom > (10).Seconds().Ago()) MessageBox.Show("Poczekaj chwilę dłużej"); else MessageBox.Show("Pukaj głośniej"); Więc napisałem rozszerzenie dla integer, które konwertuje liczbę całkowitą na TimeSpan public static TimeSpan Seconds(this int amount) { return new TimeSpan(0, 0, amount); } Następnie napisałem rozszerzenie dla TimeSpan w następujący sposób: public static DateTime Ago(this TimeSpan diff) { return DateTime.Now.Add(-diff); } Jak dotąd działa to dobrze, ale ma wielką wadę. **Logika jest odwrócona!** Ponieważ girlWentIntoBathroom jest znacznikiem czasu w przeszłości, prawa strona równania musi liczyć wstecz: niemożliwe. Samo odwrócenie równania nie jest rozwiązaniem, ponieważ odwróci również przeczytane zdanie. **Druga próba** Więc spróbowałem czegoś nowego: if (girlWentIntoBathroom.IsMoreThan(10).SecondsAgo()) MessageBox.Show("Pukaj głośniej"); else MessageBox.Show("Poczekaj trochę dłużej"); IsMoreThan() musi przetransportować przeszły znacznik czasu, a także zakres rozszerzenia SecondsAgo(). Może to być: public static DateWithIntegerSpan IsMoreThan(this DateTime baseTime, int span) { return new DateWithIntegerSpan() { Date = baseTime, Span = span }; } Gdzie DateWithIntegerSpan to po prostu: public class DateWithIntegerSpan { public DateTime Date {get; set;} public int Rozpiętość { get; ustawić; } } A SecondsAgo() jest publiczną statyczną wartością bool SecondsAgo(this DateWithIntegerSpan dateAndSpan) { return dateAndSpan.Date.Add(new TimeSpan(0, 0, dateAndSpan.Span)) < DateTime.Now; } Przy takim podejściu zdanie angielskie pasuje do oczekiwanego zachowania. Ale wadą jest to, że potrzebuję klasy pomagającej (DateWithIntegerSpan). Czy ktoś ma pomysł, aby sprawdzanie limitów czasu wyglądało ładniej i bliżej czytelnego zdania? Czy jestem trochę zbyt szalony, myśląc o czymś tak drobnym jak to?


title: Czy strategię można zaimplementować jako zagnieżdżoną klasę składową?

text: Czy to w porządku, aby strategia została zaimplementowana jako niestatyczna klasa wewnętrzna, czy jest to uważane za złą praktykę? public class SomeClass{ private final Strategia strategii; public void jakasMetoda(){ this.strategy = new Strategy(); //wywołaj jakąś metodę strategii, aby uruchomić algorytm strategy.doSomeWork(); } klasa prywatna Strategia(){ prywatna doWork(){}; } } **P.S** : `Strategy` wymaga dostępu do stanu `SomeClass`. Więc nie mogę uczynić go statycznym. Inną opcją jest posiadanie `Strategy` jako _interface_, a następnie wstrzyknięcie konkretnej `Strategy` wewnątrz konstruktora `SomeClass`, ale w tej chwili nie widzę, aby ten konkretny interfejs `Strategy` był używany przez inna klasa. Więc pomyślałem o pierwszym podejściu. Jeśli jednak zastosuję pierwsze podejście, w jaki sposób moja klasa będzie działać bezproblemowo z wieloma strategiami?


title: Czy metody powinny być zawsze zamknięte przed modyfikacją?

text: Załóżmy, że mam metodę o nazwie „functionA”, która jest wywoływana przez usługę i wykonuje pojedynczą część funkcji, łatwo jest ją przetestować, ponieważ robi tylko jedną rzecz. Jeśli kilka miesięcy później pojawi się nowe wymaganie, które wymaga wywołania innej metody 'functionB' bezpośrednio po wykonaniu 'functionA'. Jakie jest lepsze podejście do dodania functionB do mojego kodu. wywołać 'functionB' na końcu metody 'functionA': functionA() { //zrób coś.. functionB(); } functionB() { //zrób coś... } Problem polega na tym, że kiedy testuję jednostkę functionA, wywoła ona funkcjęB, która również będzie częścią testu (więc teraz jest to bardziej test integracyjny). Lub zrefaktoryzować kod za pomocą nowej metody „functionX”, która wywołuje „functionA”, a następnie „functionB”? funkcjaX() { funkcjaA(); funkcjaB(); } functionA() { //zrób coś.. } functionB() { //zrób coś... } Mogę indywidualnie testować obie metody, ale teraz zmieniłem API. Tak często widzę pierwsze podejście w starszym kodzie, czy najlepszą praktyką jest zawsze zamykać metody na modyfikację, czy są przykłady, kiedy można użyć pierwszego podejścia?


title: Śledzenie błędów naukowych podczas pracy z liczbami zmiennoprzecinkowymi

text: **Tło** Nienawidzę sposobu, w jaki .Net/IEEE-754 obsługuje równość liczb zmiennoprzecinkowych (FPN) (tj. double, float). Wymaga to od programisty przewidywalności w odniesieniu do jeszcze nieustalonej historii liczby, ponieważ programista musi wybrać „rozsądną” wartość epsilon, gdzie często nie można określić takiej wartości (ponieważ programista nie może określić z góry ile operacji, a więc zaokrągleń, będzie podlegać liczba). Chciałbym stworzyć „lepszy” FPN w .Net. Podczas tworzenia można ustalić początkowy błąd naukowy (lub przyjąć wartość domyślną; wartość domyślna to minimum). W przypadku wykonywania operacji na FPN operacje te aktualizowałyby błąd naukowy (w celu uwzględnienia efektu zaokrągleń). Podczas testowania równości dwóch FPN można określić, czy ich zakresy się pokrywają (a nawet prawdopodobieństwo, że są to ta sama liczba). **Pytanie** Sam kod jest prosty, moje pytania to: * Jak operacje (+ - * / na początek) wpływają na błąd naukowy FPN? Czy istnieją wzory na określenie tego naukowego błędu? * Rozumiem, że dodatkową komplikacją jest nierównomierny rozkład FPN. Można to oczywiście wyjaśnić, skalując błąd proporcjonalnie do nieodłącznego błędu naukowego wyniku; ale czy istnieje wzór na określenie nieodłącznego błędu naukowego obecnego w danym FPN?


title: Jaka jest różnica między symulacją a emulacją?

text: Często widzę _Symulację_ i _Emulację_ w informatyce. Te dwa terminy wydają się równoznaczne. Czy jest jakaś różnica między _Symulacją_ a _Emulacją_?


title: Jak naprawić projekt praktycznie bez struktury?

text: Od ponad 5 lat pracuję nad projektem oprogramowania głównie solo. Na początku był bałagan (jestem trzecim lub czwartym deweloperem, który nad tym pracuje) i chociaż teraz jest mniej bałaganu, nadal jest niesamowicie zdezorganizowany. Tempo postępu w opanowywaniu tego jest lodowate i zaczynam czuć się przygnębiony stanem, w jakim się znajduje. Jak naprawdę zacząć to naprawiać? Specyfika projektu: Jest to program sprzedażowy napisany prawie w całości w Visual Basic Classic (VB6) z zapleczem MySQL i silnikiem raportowania napisanym w C#. Praca nad modułem raportowania C# to przyjemność, został napisany dopiero w ciągu ostatnich kilku lat, a wcześniej wszystkie raporty były tworzone w Crystal Reports 9 (tak, nadal mamy kilka raportów, które na nim bazują). Sam program to jednak kompletna katastrofa. Nie ma w sumie 90k LOC i około 10k linii komentarzy (w większości nie dokumentacja, ale stary kod, który został wykomentowany). 158 plików formularzy i 80 plików modułów. Nie mam pojęcia, ile z nich jest faktycznie używanych, ponieważ niektóre funkcje programu są po prostu przestarzałe i (uhm, czasami) odnotowywane jako takie bez usuwania powiązanego kodu z programu. Domyślam się, że tylko 50% kodu jest w użyciu produktywnym. Boję się dotykać dużo kodu tylko dlatego, że nie jestem pewien, czy złamię coś, na czym polega jeden niejasny klient, zdarzało się to więcej razy, niż mogę zliczyć. To tak, jakby w całym kodzie były rozrzucone miny. Projekt nie ma tak naprawdę żadnej struktury. Nie jest zorientowany obiektowo, z wyjątkiem kilku miejsc, w których do tej pory miałem cierpliwość, by się zreformować. Jeśli potrzebujesz uzyskać dane z formularza, tworzysz instancję obiektu bazy danych, deklarujesz zapytanie bezpośrednio w funkcji, wykonujesz je i robisz to, co chcesz z zestawem danych. Kiedy zaczynałem pracę nad projektem, nie było używanej kontroli źródeł. Próbowałem zachęcić innych ludzi, nad którymi pracowałem, aby z niego korzystali, ale byłem nowym facetem i moje próby nakłonienia ludzi do korzystania z subwersji prawie nie powiodły się. Główny programista firmy w końcu wykrył błąd mercurial w ciągu ostatnich kilku lat i upewnił się, że wszyscy programiści używają teraz kontroli źródeł we wszystkich projektach, więc przynajmniej to pewien postęp. Myślę, że gdybym mógł pracować nad reformowaniem projektu w pełnym wymiarze godzin, byłbym w stanie poczynić przyzwoite postępy i może nawet oszacowałbym, ile czasu zajmie mi pełna przeróbka projektu, ale jest w aktywnym użyciu i jestem ciągle jestem proszony o gaszenie pożarów, naprawianie błędów, dodawanie funkcji itp. Więc jak mam zacząć naprawdę naprawiać ten projekt? Spróbować użyć narzędzia VB6 w innym języku? Spróbuj przepisać program w wolnym czasie? A może jest to całkowicie beznadziejne? **Aktualizacja** Po tym poście wróciłem do projektu z odnowionym zapałem, ale po kilku miesiącach popadłem w beznadziejność po tym, jak zobaczyłem tak powolne tempo postępów. Następnie powtórzyłem ten cykl jeszcze 2 lub 3 razy w ciągu następnego roku. Od tego czasu przeszedłem do innej pracy. Chociaż po tylu latach vb6 i jedynie peryferyjnym doświadczeniu z innymi technologiami poszukiwania były trudne i spotkałem się po drodze z wieloma odmowami (kilkanaście wywiadów w ciągu roku). Moja rada dla innych w tej sytuacji to rozważenie pozostawienia tego czynnika w spokoju. Zastanów się, jakie szkody możesz wyrządzić swojej karierze, pozostając w ślepej uliczce, takiej jak ta.


title: Czy to zła etykieta, aby zapytać potencjalnego pracodawcę, jak uzyskali wynik w teście Joela?

text: Rozmowy kwalifikacyjne z programistami różnią się od większości innych miejsc, ponieważ nie tylko martwisz się o ludzi, z którymi pracujesz, korzyści, opis stanowiska itp., ale masz również DODATKOWE zmartwienia po otrzymaniu pracy. Napisanie dwóch aplikacji z dokładnymi wymaganiami może się znacznie różnić, jeśli pracujesz w głośnym lub cichym środowisku, używając VS2003/.NET 2.0 vs VS210/.NET 4.0., używając SVN vs VSS. Czy można dać potencjalnemu pracodawcy prosty test Joela? Staram się zadać jak najwięcej pytań, aby poznać rodzaj środowiska, w którym będę pracował, co z mojej perspektywy jest niezwykle ważne, ale jaki jest najlepszy sposób, aby przejść do sedna i po prostu zadać trudne pytania (tak jak zadają ci podczas ten sam wywiad). UWAGA: Przez „Test Joela” rozumiem konkretną listę rzeczy, które są dla Ciebie ważne (niekoniecznie dla Joela), ale możesz nie mieć czasu, aby wyjść, używając tradycyjnego, swobodnego „konwersacyjnego” sposobu zadawania im pytań , więc decydujesz się wysłać wiadomość e-mail, zaplanować kolejne spotkanie, poprosić inne osoby itp.