title: Jak zachować informacje związane z widokiem w MVVM i czy mogę je przechowywać w modelu?

text: Prowadzę stałą dyskusję z kilkoma kolegami na temat zarządzania poglądami na nasz model. Mamy model, który może być reprezentowany przez wiele widoków. Załóżmy, że mamy pewne dane przechowywane w tablicy i chcemy je wyświetlić w tabeli i na wykresach. Określony wykres jest unikalny, ale możesz go zduplikować. Ten duplikat powinien wyświetlać dane w taki sam sposób, jak oryginał, ale nie wyświetla tej samej części (np. jeśli dane są zbyt duże, aby wyświetlić je od razu i można je przewijać, więc oryginał pokazuje pierwszych 10 elementów podczas duplikat pokazuje ostatnie 10). W dowolnym momencie możesz usunąć widok. Widok i model widoku są następnie usuwane z pamięci. Model jest zachowywany, nawet jeśli nie ma widoku reprezentującego dane. Na widoku znajduje się garść informacji, które mówią jak i jaka część danych jest wyświetlana. Jednym z nich jest przewijanie, więc pozostańmy przy tym przykładzie. Wyświetlane informacje nie są ani trwałe, ani przechowywane w modelu. Jeśli zamkniesz aplikację i zrestartujesz, nie dbamy o to, jak wyglądał wcześniej widok i zawsze ustawiamy domyślny. Jeśli jednak usuniesz widok, a następnie cofniesz działanie, będziemy chcieli wyświetlić dane dokładnie tak, jak przed usunięciem. Nowo utworzony widok nie jest technicznie taki sam jak wcześniej. Aby dostosować widok, muszę zachować pozycję przewijania. Po prostu umieściłbym wyświetlane informacje w modelu, ponieważ istniały one przez cały czas. Jednak niektórzy koledzy nie zgadzają się z tym i twierdzą, że model powinien zawierać tylko trwałe dane (takie jak rzeczywiste dane, które reprezentujemy). Dlatego nie powinniśmy śledzić wyświetlania informacji o widoku w modelu. P1: Czy to poprawne z punktu widzenia projektu, że model zawiera tylko trwałe dane? Jeśli tak, w jaki sposób zachowałbyś informacje związane z wyświetlaniem? Jak wspomniano powyżej, model może być reprezentowany przez wiele widoków, z których niektóre mogą być duplikatami siebie nawzajem. Powiedzmy, że znalazłem sposób na zachowanie danych. Miałbym zbiór X wyświetlających informacje. P2: Podczas tworzenia nowych widoków, które faktycznie zastępują stare widoki (słowo kluczowe cofnij), w jaki sposób mogę określić, które informacje dotyczące wyświetlania kolekcji powinny być powiązane z którym widokiem. Mam na myśli to, że nawet jeśli mój widok miał unikalny identyfikator, skoro stworzyliśmy nowy, nie możemy polegać na tych danych. Nie do końca rozumiem, w jaki sposób mogę poprawnie skojarzyć te informacje. Jedynym pomysłem, który się pojawia, jest posiadanie oddzielnego modelu widoku dla każdego widoku i utrzymywanie modeli widoku również przy życiu. Z drugiej strony myślę, że to nie tak powinno być, prawda?


title: Jak przetłumaczyć zapytanie SQL na żądania REST API?

text: Załóżmy, że mam opis do odczytu maszynowego (np. w WADL, Swagger lub RAML) interfejsu API REST, który zapewnia interfejs do bazy danych. Moi użytkownicy przesyłają zapytania dotyczące baz danych w formie SQL lub podobnego języka zapytań. Jednak nie mogę uzyskać dostępu do bazy danych bezpośrednio, tylko przez REST API. **Jakie podejście byś wybrał, aby zbudować (najlepiej półautomatycznie z opisu) system, który tłumaczy takie zapytania SQL na sekwencję żądań do danego REST API?** **Jak reprezentowałbyś taki problem? Czy są jakieś algorytmy, ramy teoretyczne lub narzędzia, które mogą pomóc?** REST API obsługuje: * operacje tylko do odczytu, tj. tylko zapytania SQL `SELECT` * Projekcje XPartial (np. `/osoby?pola=imię,nazwisko`) * Ograniczenia RSQL (`/persons?query=imię==Jan;departament.kod==42`, zobacz inne przykłady). Niektóre referencje między tabelami (klucze obce) są reprezentowane jako atrybuty w REST API (takie jak `Person.department` w powyższym przykładzie ograniczeń), ale niektóre referencje są reprezentowane jako subresource (np. `/persons/{userName}/projects`) . Oznacza to, że niektóre zapytania wymagają opracowania „planu”, na który należy odpowiedzieć w zakresie żądań REST. Np.: Zapytanie o "nazwy aktywnych projektów Chucka Norrisa" tłumaczyłoby się jako: 1. `/persons?query=firstname==Chuck;lastname==Norris` 2. Pobierz `userName` z wyniku 3. `/projects/{ userName}?fields=name&query=state==ACTIVE`


title: Kiedy interfejs API jest uważany za wbudowany DSL?

text: Jaka jest różnica między interfejsem API a wbudowanym językiem specyficznym dla domeny (DSL)? Czy to tylko składnia? Rozważ API takie jak OpenGL. Czym to się różni od graficznego DSL? Innymi słowy, jeśli interfejs API jest wystarczająco złożony, czy można go uznać za wbudowany DSL?


title: Jak zdefiniować tor ruchu jednego obiektu na powierzchni drugiego?

text: Mam nietypowy problem. Istnieją 2 obiekty 3D, które są reprezentowane przez tablice wierzchołków i trójkątów (pliki .stl). Każdy z nich zawiera odpowiednio dużą ilość wierzchołków: 1-10 mln. Powierzchnie tych modeli są szorstkie i mogą zawierać różne kolce lub wgłębienia. Celem jest wyznaczenie drogi jednego z tych obiektów, kiedy porusza się on w kontakcie z powierzchnią drugiego. Ponadto algorytm powinien uwzględniać liczbę dostępnych stopni swobody. W każdym przypadku są tylko 2 obiekty i jeden z nich jest stały. Przykład, obiekt `M1` porusza się po powierzchni obiektu `M2`, który jest nieruchomy. Konieczne jest przeniesienie M1 z punktu `A` do `B`. Dla M1 dostępny jest jeszcze jeden stopień swobody - wzdłuż osi (nazwijmy ją `AC`) prostopadłej do `AB`. Tak więc ścieżka może być tylko krzywą w płaszczyźnie „(AC, AB)”. Ale dzięki tej ścieżce podczas ruchu `M1` powinien zawsze mieć przynajmniej jeden punkt styku. Próbowałem to wykonać algorytmem wykrywania kolizji, ale wygląda na to, że będą to bardzo skomplikowane obliczenia dla zwykłych komputerów. Czy ktoś może doradzić jakieś algorytmy, biblioteki lub koncepcje, jak zrealizować ten pomysł? PS Używam C, C++ i Javy.


title: Różnica między planowaniem projektu a planowaniem produktu

text: Czytałem w wielu miejscach, że podczas tworzenia produktu trzeba inaczej podejść do tworzenia projektu (pomyśl o pracy na zlecenie). Niektóre różnice to: 1) Nie ma ostatecznego użytkownika, ale „bazę użytkowników”. 2) Musisz opracować minimalny zestaw funkcji rynkowych. 3) Należy pilnować harmonogramu, ponieważ często nie ma ustalonego terminu, w którym produkt może działać w godzinach nadliczbowych (lub rozszerzać zakres). Zastanawiałem się, czy są ludzie z doświadczeniem w obu i czy mogliby wnieść jakiś wkład w jakiekolwiek znane im różnice. Również jeśli ktoś mógłby udzielić wskazówek / dobrych referencji, jak radzić sobie z różnicami, byłbym bardzo wdzięczny.


title: Kto stworzył pomysł(y) konstrukcji pierwszej pętli?

text: while (1) { if (1+1==2) { print "Tak, zwracałeś uwagę w przedszkolu!"; } else { print "Czekaj... myślałem, że 1+1=2"; } } Jako programista **wszyscy** musimy używać pętli _bardzo_ często. Wiemy to. Zastanawiałem się, kto wpadł na pomysł, aby mieć pętle? W jakim języku wprowadzono pętle? Jaka była pierwsza konstrukcja pętli? Czy była to pętla „while”? Pętla „for”? itp?


title: Jak radzić sobie z brakiem kontaktu „Menedżer projektu”

text: Ten „menedżer” ma ponad 70 lat i jest geniuszem matematycznym. Otrzymaliśmy zadanie stworzenia aplikacji internetowej. Uwielbia SQL i procedury składowane. Po raz pierwszy stworzył to w dostępie MS. W przypadku aplikacji internetowej musiałem przenieść swoją bazę danych na serwer SQL. Jego pierwszą myślą było stworzenie głównej procedury składowanej z funkcją WAITFOR Obsługa żądań od użytkowników. W końcu go wyperswadowałem i użyłem asp.net mvc. Następnie w końcu użyj członkostwa asp.net. Teraz aplikacja internetowa obsługuje głównie żądania ze stron, które są przekazywane do procedur składowanych. To wszystko jest sterowane procedurą składowaną. Logika biznesowa również. Jakie są najlepsze argumenty za brakiem logiki biznesowej nie tylko w procedurach składowanych? Jak mam sobie z tym poradzić? Oczywiście podaję skróconą historię. Jest genialnym współwłaścicielem firmy, wszyscy pozostali właściciele mu ufają, ponieważ jest geniuszem. i cytując - "Załatwia sprawy. stara szkoła".


title: Aplikacja internetowa bez bibliotek | Związek z ofertami pracy

text: Mam aplikację zbudowaną bez żadnych bibliotek przy użyciu PHP, JavaScript, HTML5, CSS i mySQL, która będzie obsługiwać większość współczesnych przeglądarek - IE, Safari, FF, Opera i Chrome. Jedną z rzeczy, które zauważyłem, jest to, że większość prac internetowych 90%+ wymaga pewnego rodzaju doświadczenia bibliotecznego. Około 10% nie... skupia się bardziej na języku niż na bibliotekach językowych. Dlaczego to skłania się ku bibliotekom? Rozumiem, że nie chcesz przepisywać algorytmów szyfrowania AES i matematyki na poziomie PHd, ale tak wiele tworzenia stron internetowych nie ma w ogóle żadnej matematyki wysokiego poziomu. Jaka jest różnica między miejscami pracy, które koncentrują się na korzystaniu z biblioteki a stanowiskami, które koncentrują się na języku?


title: Czy dużo myśli o testowaniu diagnostyki wewnętrznej w aplikacji korporacyjnej?

text: Wyobraź sobie dyskusję między czterema osobami — jednym deweloperem, jednym menedżerem, jednym testerem i jednym typem wdrożenia/operacji. Menedżer jest bardzo zły, ponieważ system przewrócił się po wdrożeniu nowej wersji kodu do produkcji. Chce wskazać palcami. Pracownik operacyjny powołuje się na ignorancję - dokładnie postępowali zgodnie z etapami wdrażania. Tester powołuje się na ignorancję - mają przetestowany funkcjonalnie kod i działał dobrze w środowisku testowym. Osoba programistyczna powołuje się na ignorancję - dostarczyła dobry kod i twierdzi, że system jest źle skonfigurowany. Ta sytuacja może wydawać się niektórym znajoma. Zawsze istnieje wymówka, jakiś błąd popełniony w całym łańcuchu — od projektu do wdrożenia — który pozwala na aktualizację systemu, ale nie działa zgodnie z przeznaczeniem. Jakie są zalety i wady testów diagnostycznych - testy uruchamiane w aplikacji (być może przez API wiersza poleceń lub coś takiego), które pozwolą systemowi sprawdzić jego wewnętrzne połączenia (baza danych, oprogramowanie pośredniczące, system plików itp.) i potwierdzić, że wszystko, czego oczekuje do pracy jest prawidłowe? Czy to raczej nie polega na zewnętrznym systemie monitorowania, który może nie być skonfigurowany w taki sam sposób jak aplikacja? (nowe wydanie, inne właściwości, patrzenie na niewłaściwą bazę danych itp.) Przykład: Piszę klasę, która współdziała z bazą danych. W ramach tej klasy tworzę metodę, która współdziała z bazą danych bez wpływu na nią, powiedzmy proste zapytanie wybierające. W konstruktorze tej klasy przekazuję obserwatorowi test oparty na argumentach przekazanych do konstruktora. Ten obserwator może zostać wezwany do uruchomienia wszystkich testów, które ma w dowolnym momencie, aby przetestować poprawność połączenia - nawet podczas rzeczywistego działania systemu.


title: Czy instrukcje if powinny być w metodzie wewnętrznej czy zewnętrznej?

text: Który z tych projektów jest lepszy? Jakie są zalety i wady każdego z nich? Którego byś użył? Wszelkie inne sugestie, jak postępować z takimi metodami, są mile widziane. Rozsądnie jest założyć, że Draw() jest jedynym miejscem, z którego wywoływane są inne metody rysowania. Należy to rozszerzyć na wiele innych metod Draw* i właściwości Show*, a nie tylko na trzy pokazane tutaj. public void Draw() { if (ShowAxis) { DrawAxis(); } if (ShowLegend) { DrawLegend(); } if (ShowPoints && Points.Count > 0) { DrawPoints(); } } private void DrawAxis() { // Rysowanie rzeczy. } private void DrawLegend() { // Rysowanie rzeczy. } private void DrawPoints() { // Rysowanie rzeczy. } Lub public void Draw() { DrawAxis(); DrawLegenda(); NarysujPunkty(); } private void DrawAxis() { if (!ShowAxis) { return; } // Rysuj rzeczy. } private void DrawLegend() { if (!ShowLegend) { return; } // Rysuj rzeczy. } private void DrawPoints() { if (!ShowPoints || Points.Count <= 0)) { return; } // Rysuj rzeczy. }


title: Jaki jest związek między OpenGL, GLX, DRI i Mesa3D?

text: Zaczynam od niskopoziomowego programowania 3D w Linuksie. Mam duże doświadczenie w korzystaniu z wyższego poziomu graficznego API OpenInventor. Wiem, że nie jest konieczne zdawać sobie sprawę z tego, jak te wszystkie rzeczy do siebie pasują, ale jestem po prostu ciekawa. Wiem, że OpenGL to tylko standard dla aplikacji graficznych. Mesa3D wydaje się być implementacją tego standardu typu open source. Więc gdzie pasują GLX i DRI? Przekopując się w Wikipedii i wszystkich tych witrynach, nie znalazłem jeszcze wyjaśnienia, jak to wszystko idzie w parze. Gdzie dzieje się przyspieszenie sprzętowe? Co mają z tym wspólnego sterowniki własnościowe?


title: Jak możemy ujednolicić cele biznesowe i cele techniczne?

text: ## Trochę doświadczenia Pracuję w małym startupie: 4 programistów, 1 projektant i 2 nietechnicznych współzałożycieli, jeden zapewnia finansowanie, a drugi zajmuje się codziennym zarządzaniem i sprzedażą. Nasza firma produkuje aplikacje mobilne dla branż docelowych, a ostatnio mieliśmy wiele szczęśliwych trafów. Perspektywy są dobre i jesteśmy pewni, że to zadziała. Jednym z powodów jest nasz zespół ds. rozwoju produktu. Wszyscy w zespole są pełni pasji, motywacji i mają świetne wyczucie tego, co sprawia, że produkt jest niesamowity. W rezultacie stworzyliśmy kilka pięknych aplikacji, z których wszyscy jesteśmy dumni. Drugi powód to współzałożyciele. Obaj mają świetny zmysł biznesowy (jedna z nich faktycznie założyła już firmę wartą wiele milionów dolarów) i mają bliskie powiązania w wielu branżach, które próbujemy spenetrować. W związku z tym wprowadzili świetny biznes i nadal utrzymują pracę w kolejce. ## Problem Problemem, którego nie możemy się pozbyć, jest to, jak połączyć te dwie niesamowite zalety. Po stronie biznesowej istnieje ogromna presja, aby dostarczać tak szybko, jak to możliwe, _dużo_, podczas gdy po stronie rozwoju jest presja, aby poświęcić swój czas, znaleźć właściwe rozwiązanie i zwrócić uwagę na wszystkie szczegóły. Ostatnio te dwie strony często się ścierają. Deweloperzy wymagają jakości, podczas gdy menedżerowie wymagają ilości. Jak sobie z tym poradzić? Obie strony mają rację. Nie przetrwamy jako firma, jeśli stworzymy okropne aplikacje, ale też nie przetrwamy, jeśli nie będziemy wystarczająco sprzedawać. Jak więc powinniśmy iść na kompromisy? **Rzeczy, które zrobiliśmy z małym sukcesem lub bez niego:** * Więcej pracuj (cóż, _dało_ się_ to zapewnić lepszą jakość i szybszą dostawę, ale zespół programistów nigdy wcześniej nie był bardziej zestresowany) * Ładuj więcej (jako startup , nie mamy jeszcze wiarygodności, aby uzasadnić wyższe ceny, więc nikt nie chce płacić) * Przedłuż terminy (jeśli naliczamy takie same, ale potrwa to dłużej, stracimy pieniądze) **Rzeczy, które mamy zrobione z pewnym sukcesem:** * Poświęć pensję, aby obniżyć koszty (wszyscy, od programistów po zarząd, zarabiają mniej, niż mogliby zarabiać gdzie indziej. W zamian jednak wszyscy mamy kreatywny wkład i większą elastyczność i swobodę, typowy startup kompromis) * Standaryzacja zarządzania projektami (niedawno zaczęliśmy przestrzegać zasad agile/scrum, dzięki czemu możemy opierać terminy na rzeczywistej prędkości, a nie tylko arbitralnych przypuszczeniach) * Zatrudnij więcej osób (kiedyś mieliśmy 2 programistów i żadnych projektantów, co naprawdę ograniczało nasze Jednak jako startup możemy sobie pozwolić tylko na zatrudnienie kilku dodatkowych osób.) * *Czy jest coś, czego brakuje lub robimy źle?** Jak to się dzieje w firmach odnoszących sukcesy? Z góry dziękujemy za wszelkie opinie :)


title: Dobra nazwa rozszerzenia dla pliku wojennego ze źródłem

text: Czy istnieje nazwa wojny aplikacji internetowej Java, która zawiera kod źródłowy? Będziemy używać serwera WWW, który akceptuje Java Web Projects z kodem źródłowym) przesłanego do folderu docroot, więc `docroot/admin.webapp.zip` będzie miejscem do załadowania aplikacji internetowej obsługującej `http://example.com/ admin`. W ten sposób skompilowane pliki binarne i kod źródłowy są razem (i po drodze nawet skompilowany kod może w ogóle nie być, ale skompilowany w pierwszym czasie wykonywania). Jakie są najpopularniejsze typy plików dla aplikacji internetowej ze źródłem? Jeśli oznacza to dostosowanie się do standardu, chętnie użyję podobnej nazwy rozszerzenia i struktury katalogów zip. Jeśli nie, prawdopodobnie użyję czegoś takiego jak `.web.zip`. Po prostu użyłbym `.zip`, ale wtedy serwer WWW nie wiedziałby, czy powinien udostępnić plik zip, czy tylko używać go jako aplikacji internetowej.


title: Kod pachnie w Androidzie?

text: To pytanie wynika z widząc kod, w którym czuję, że coś jest nie tak, ale nie mogę tego dotknąć podczas tworzenia Androida. Jakie są niektóre czerwone flagi w programowaniu Androida, które mówią, że Twoja aplikacja może nie być zorganizowana/zaprogramowana w najlepszy sposób? Jakie są sposoby naprawienia tych przypadków zapachu kodu?


title: Jaka jest zależność ASP.NET MVC od .NET Framework i jak jej używać z .NET 2.0?

text: Czy po pobraniu i zainstalowaniu asp.net MVC po prostu dodaje się kod do biblioteki klas .net Framework? A może modyfikuje również zainstalowane wersje programu Visual Studio? Kolejne pytanie: jeśli tylko dodaje kod do biblioteki klas .net framework, dlaczego nie można go zainstalować na .net 2.0?


title: Powstrzymaj się od nadmiernie komplikujących aplikacji

text: Ostatnio pracowałem nad dość dużym projektem z wykorzystaniem C# i MVVM. Ta aplikacja miała około 160 projektów w rozwiązaniach, z których każdy był rozdzielony na własne warstwy. Ponieważ pracuję nad tą aplikacją od prawie roku, budując ją od podstaw jako część zespołu, teraz odchodzę od tego projektu do mniejszych, bardziej trywialnych projektów. Gdy zaczynałem opracowywać małe narzędzie wewnętrzne, próbowałem naśladować strukturę i warstwowanie większych aplikacji, ale w końcu miałem prostą aplikację z kilkoma bibliotekami DLL, o których wiem, że nie zrobiłbym tego, gdybym tego nie zrobił pracowałem wcześniej nad tą większą aplikacją. Zastanawiam się tylko, czy są jakieś techniki, które mogę wykorzystać, aby powstrzymać się przed przekształceniem trywialnej aplikacji w stylu „za kodem” w pełną aplikację MVVM? A może powinienem dalej rozwijać się tak, jak jestem i starać się nie dopuszczać do projektu niepotrzebnego puchu?


title: Rozwój Ruby/RoR: desktop lub serwer

text: Nasza firma rozpoczęła rozwój własnych systemów "in-house". Mamy już kilku programistów, którzy będą odpowiedzialni za pisanie kodu w Ruby/RoR. W tej chwili dyskutujemy o infrastrukturze i chciałbym zapytać: czy powinniśmy wszystko rozwijać na lokalnych maszynach, to umieszczać na serwerze testowym, a później na produkcji, czy też rozwijać wszystko na serwerze deweloperskim/testowym, a następnie publikować do testów, a później do produkcja? Tylko aktualizacja powyższego opisu: pod "maszyny lokalne" miałem na myśli pulpity programistów, a ten serwer testowo-rozwojowy to maszyna w naszym biurze.


title: Jak zmodyfikować klasę MapEditor cyklu życia otwórz-zapisz-zamknij w uDig Eclipse RCP

text: Pracuję nad aplikacją uDig. Próbowałem dowiedzieć się, jak zmodyfikować cykl życia otwórz-zapisz-zamknij klasy MapEditor utworzonej przez uDig. Powodem jest to, że chcę się upewnić, że gwiazdka nie wyświetla się jako „brudny” edytor, unikaj wyskakującego okienka, które pyta użytkownika, czy chce zapisać bieżącą mapę, i unikaj ponownego otwierania starej mapy, gdy użytkownik ponownie uruchamia aplikację. Wszelkie przemyślenia, jak to osiągnąć. Czy ktoś ma jakieś doświadczenie w modyfikowaniu cyklu życia edytoraCzęść w Eclipse, w szczególności uDig MapEditor? Dziękuję!


title: Jeśli zanurzę się w Dvoraka, czy zapomnę QWERTY?

text: Z kilku innych pytań tutaj, wydaje się, że sugerowana droga do nauki Dvoraka to po prostu to zrobić, i chociaż mam kilka tygodni wakacji, z których korzystam, może to być dobry moment, aby się temu zakręcić, więc ja Nie jestem całkowicie bezużyteczny przy 4 WPM, kiedy wracam do pracy. To powiedziawszy, czy za kilka tygodni poważnie uszkodziłbym swoją wiedzę QWERTY, czy nadal będzie się kręciła? Czy powinienem od czasu do czasu przełączać się z powrotem na QWERTY podczas nauki Dvoraka?


title: Czy istnieje nazwa pojęcia „skumulowanej sumy kontrolnej”?

text: O ile rozumiem, narzędzia takie jak Git i Mercurial czerpią sumy kontrolne ze swoich danych, a te sumy kontrolne są używane do wyprowadzania innych sum kontrolnych używanych łącznie, co prowadzi do pewnego rodzaju kumulacyjnej sumy kontrolnej (sumy kontrolne są danymi wejściowymi do innych sum kontrolnych), co zapewnia wysoki poziom uczciwości. Czy jest na to nazwa, a jeśli tak, to jaka? (Oprócz „zsumowanej sumy kontrolnej” (która według Google nie jest dobrze używana lub po prostu wymyśliłem). Mój Google foo mnie tutaj zawodzi… Innym sposobem na określenie tego, czy istnieje nazwa dla sposobu Repozytorium Git zapewnia jego integralność?Przepraszam za niejasność - chwytanie terminologii, która moim zdaniem powinna istnieć, ale nie mogę znaleźć.


title: Czy praca w „Classic Asp” jest dla mnie dobra na przyszłość?

text: Ukończyłem studia podyplomowe na kierunku Msc(comp sci)-2010. Czy praca w „Classic ASP” jest dla mnie dobra w przyszłości? Ponieważ jestem świeższy i nauczyłem się wersji ASP.NET 3.5. Daj mi znać, co myślisz o tym, czy dla mojej kariery naprawdę ma znaczenie, że jest to stara technologia.


title: Czy Python jest interpretowany czy kompilowany?

text: To tylko zastanawiałem się, kiedy czytałem o językach interpretowanych i kompilowanych. **Ruby** jest bez wątpienia językiem interpretowanym, ponieważ kod źródłowy jest kompilowany przez interpreter w momencie wykonania. Wręcz przeciwnie, **C** jest językiem skompilowanym, ponieważ najpierw należy skompilować kod źródłowy zgodnie z maszyną, a następnie wykonać. Wynikiem tego jest znacznie szybsza realizacja. Teraz w **Python** : * Kod Pythona ( **somefile.py** ) podczas importowania tworzy plik ( **somefile.pyc** ) w tym samym katalogu. Powiedzmy, że import odbywa się w powłoce Pythona lub module django. Po imporcie zmieniam nieco kod i ponownie uruchamiam zaimportowane funkcje, aby stwierdzić, że nadal działa stary kod. Sugeruje to, że pliki *.pyc są skompilowanymi plikami Pythona podobnymi do plików wykonywalnych utworzonych po kompilacji pliku C, chociaż nie mogę bezpośrednio wykonać pliku *.pyc. * Gdy plik Pythona (somefile.py) jest wykonywany bezpośrednio ( ./somefile.py lub python somefile.py ) żaden plik .pyc nie jest tworzony, a kod jest wykonywany, co wskazuje na zinterpretowane zachowanie. Sugerują one, że kod Pythona jest kompilowany za każdym razem, gdy jest importowany w nowym procesie, aby utworzyć plik .pyc, podczas gdy jest interpretowany podczas bezpośredniego wykonywania. Więc za jaki rodzaj języka powinienem to uznać? Zinterpretowane czy skompilowane? A jak jego wydajność wypada w porównaniu z językami interpretowanymi i kompilowanymi? Według strony Interpreted Languages wiki jest on wymieniony jako język skompilowany do kodu maszyny wirtualnej, co to oznacza? ## Aktualizacja Patrząc na odpowiedzi, wydaje się, że nie ma idealnej odpowiedzi na moje pytania. Języki nie są **tylko interpretowane** lub **tylko kompilowane** , ale istnieje spektrum możliwości między interpretacją a kompilacją. Ponadto nie są to języki, które są interpretowane lub kompilowane, ale raczej ich implementacje interpretują lub kompilują kod. Dowiedziałem się również o kompilacji Just in time Z odpowiedzi aufather, mipadi, Lenny222, ykombinator, komentarzy i wiki dowiedziałem się, że w głównych implementacjach Pythona jest on kompilowany do kodu bajtowego, który jest wysoce skompresowaną i zoptymalizowaną reprezentacją i jest kodem maszynowym dla maszyny wirtualnej, która jest zaimplementowana nie sprzętowo, ale w interpreterze kodu bajtowego. Jeśli chodzi o szybkość wykonania, różne testy porównawcze nie mogą być doskonałe i zależą od kontekstu oraz wykonywanego zadania. Proszę dać mi znać, jeśli się mylę w moich interpretacjach.


title: Po co używać skórek, jeśli możemy obsługiwać kontrolki serwera za pomocą CSS w ASP.Net?

text: Główna różnica między motywami/skórkami a CSS to tylko HTML i kontrolki po stronie serwera (SSC). Używamy plików skórek do formatowania i poprawiania SSC, które nie są w HTML, takie jak `<asp:Label>`, `<asp:TextBox>` & `</asp:RadioButtonList>` itp. Ale co, jeśli użyjemy renderowanego HTML SSC w CSS zamiast plików skórek do obsługi `<asp:Label>` i `<asp:TextBox>` itd... tj.: gdy SSC `<asp:TextBox>` renderowane w przeglądarkach pokazuje `<input type= text">` więc jeśli napiszemy następujący styl w moim pliku CSS zamiast Skin, to również zadziała... input[type=text], textarea, select { outline: none; padding: 3px 0px 3px 3px; margines: 5px 1px 3px 0px; obramowanie: stałe 1px #cccccc; tło: #ffffff; szerokość: 150px; kolor: #484848; rozmiar czcionki: 12px; } Więc moje pytanie brzmi: jeśli nadal możemy obsługiwać SSC za pomocą CSS, czy naprawdę potrzebujemy skórek? Lub jeśli czegoś mi brakuje, popraw mnie, dzięki.


title: SQL Server DBA - Jak zdobyć dobry!

text: Jestem samotnym programistą. Obecnie pracuję nad aplikacją, która sprawia, że wychodzę z głębi, jeśli chodzi o SQL DBA, i zdałem sobie sprawę, że powinienem zatrudnić administratora DBA, aby mi pomógł (który ma pełne wsparcie ze strony firmy) . Problem w tym - kto? W tym wątku SO ktoś zatrudnia DBA tylko po to, aby zdać sobie sprawę, że prawdopodobnie wyrządzi więcej szkody niż pożytku! Ponadto właśnie miałem złe doświadczenia z wykonawcą ASP.NET/C#, który nas zawiódł. Więc, czy ktokolwiek tam na SO albo... a) Zaoferuj swoje usługi. b) Prześlij mnie do kogoś, kto mógłby pomóc. c) Podaj kilka wskazówek dotyczących weryfikacji DBA. Wiem, że to nie jest strona rekrutacyjna, więc może kilka dobrych odpowiedzi na c) przydałoby się innym czytelnikom!! BTW: Baza danych to SQL Server 2008. Mam problemy z wydajnością (głównie limity czasu), które moim zdaniem zostałyby rozwiązane przez odpowiednie indeksowanie. Potrzebowałbym również administratora baz danych, aby przedstawić jakiś plan konserwacji i sprawdzić, w jaki sposób nasza baza danych poradzi sobie z tym, co zamierzamy wprowadzić w przyszłości!


title: Jedna usługa lub dwie usługi do analizowania i wysyłania wiadomości e-mail

text: Posiadam w systemie usługę masowego wysyłania e-maili, która pozwala na użycie szablonu. Po wysłaniu wiadomości szablon jest analizowany lub uruchamiany przez parser w celu zastąpienia znaczników rzeczywistymi informacjami. np. „[Foo] has in” jest parsowane do „Bar haszalogował się” , a inny, który wysyła tylko e-maile, które zostały już przeanalizowane?


title: Jak często poszerzasz swój zestaw umiejętności?

text: W ciągle zmieniającym się świecie programowania, jak często nadrabiasz zaległości w nowym języku lub technologii? Słyszałem, że mówiono, że należy uczyć się nowego języka co roku. Czy to zawsze prawda?


title: Jak mogę wykorzystać moje umiejętności kodowania na dobre?

text: Tej jesieni moje dwie małe strony internetowe powinny generować w sumie około 1200 dolarów miesięcznie przy minimalnym lub zerowym wejściu, co wystarczy, abym mógł żyć wystarczająco wygodnie. Zamiast podejmować kolejne przedsięwzięcia biznesowe, chciałbym spędzić kilka następnych lat robiąc coś naprawdę dobrego lub pomagającego innym ludziom, którzy tego potrzebują. Chcę spędzić 4 lub 5 lat poświęcając swój czas na szlachetną sprawę i zrobić wszystko, co w mojej mocy, aby pomóc w rozwijaniu i programowaniu stron internetowych, które już posiadam. Problem w tym, że nie wiem od czego zacząć. Nie mam własnego pomysłu i jestem bardzo sceptyczny wobec wielu dużych organizacji charytatywnych. Idealnie chciałbym znaleźć mały projekt, w którym każdy jest bezpłatny i skupiony na pomaganiu. Czy istnieją takie małe organizacje? Czy ktoś ma pomysł na projekt/stronę internetową/aplikację, która może pomóc potrzebującym, nad którym chciałby, żebym z nimi pracował? Wiem, że to nie jest typowy StackOverflow 2+2=? wpisz pytanie, a niektórzy z was będą chcieli je usunąć, ale biorąc pod uwagę filantropijny charakter branży IT (wystarczy spojrzeć na samo S.O.), jest to bardzo istotne pytanie dla wielu programistów teraz lub w pewnym momencie ich kariery. Biorąc pod uwagę niedawne wydarzenia w Japonii, pytanie to jest szczególnie istotne dla wielu osób, które szukają sposobów, w jakie mogą pomóc innym w zakresie umiejętności/czasu, które mają do dyspozycji. Naprawdę nie mogę się doczekać przeczytania twoich przemyśleń/odpowiedzi na ten temat, dzięki chłopaki


title: Obsługa usuniętych użytkowników – osobna czy ta sama tabela?

text: Scenariusz jest taki, że mam powiększający się zestaw użytkowników i z biegiem czasu użytkownicy anulują swoje konta, które obecnie oznaczamy jako „usunięte” (z flagą) w tej samej tabeli. Jeśli użytkownicy z tym samym adresem e-mail (tak się logują) chcą utworzyć nowe konto, mogą zarejestrować się ponownie, ale tworzone jest NOWE konto. (Mamy unikalne identyfikatory dla każdego konta, więc adresy e-mail mogą być duplikowane wśród aktywnych i usuniętych). Zauważyłem, że w całym naszym systemie, w normalnym toku rzeczy **stale** wysyłamy zapytania do tabeli użytkowników, sprawdzając, czy użytkownik nie został usunięty, podczas gdy myślę, że nie musimy tego robić w wszystko...! [Wyjaśnienie1: 'ciągłe odpytywanie' miałem na myśli, że mamy zapytania typu: '...FROM users WHERE isdeleted="0" AND ...'. Na przykład może być konieczne pobranie wszystkich użytkowników zarejestrowanych na wszystkie spotkania w określonym dniu, więc w TYM zapytaniu **również** mamy FROM users WHERE isdeleted="0" - czy to wyjaśnia mój punkt widzenia?] (1 ) nadal przechowuj usuniętych użytkowników w tabeli „głównych” użytkowników (2) trzymaj usuniętych użytkowników w osobnej tabeli (wymagane głównie w przypadku prowadzenia księgowości historycznej) Jakie są zalety i wady obu tych podejść?


title: Czy wygenerowana dokumentacja powinna przejść do historii kontroli wersji?

text: Jestem przeciwny przechodzeniu skompilowanych rzeczy do kontroli wersji, szczególnie jeśli chodzi o skompilowane pliki binarne, jednak moje zasady są teraz kwestionowane po dodaniu obsługi doxygen dla projektu. Czy setki plików generowanych przez doxygen powinny przejść do kontroli wersji?, jaka jest tutaj zalecana praktyka? Myślę, że ideałem byłaby automatyzacja procesu na serwerze, który jednocześnie publikuje tę dokumentację, jednak takiego serwera nie ma teraz ani nie będzie przez jakiś czas.


title: Open Source Ecommerce - OpenCart to dobry wybór?

text: Rozważam nauczenie się podstaw pakietu e-commerce o otwartym kodzie źródłowym. Grałem z opencartem w przeszłości i zasadniczo chcę uzyskać opinie na temat tego, jak faktycznie używać go dla klientów. Zgłaszaj dowolne sugestie, moje priorytety to: 1\. nie martwiąc się integracją kasy 2\. pisanie wtyczki 3\. tworzenie motywów i gotowych motywów, które rozwijam za pomocą php (oo), Javascript (z Jquery) i mySQL. Krótko mówiąc, chcę wiedzieć, czy Opencart ułatwia kasę, czy interfejsy API są aktualizowane i jak aktywna jest społeczność. Lub alternatywnie inny koszyk open source, który sprawia, że kasa jest łatwiejsza niż opencart (opakowanie kasy to w zasadzie wszystko, czego chcę - inne funkcje to bonusy). Dziękuję.


title: Jak obecnie radzisz sobie z bezpieczeństwem/uprawnieniami w aplikacji korporacyjnej (połowa 2011)?

text: czego używacie do rozwiązywania problemów bezpieczeństwa, różnych reguł bezpieczeństwa, uprawnień itp. Możliwe odpowiedzi: 1) Struktura bezpieczeństwa, taka jak bezpieczeństwo Rhino lub jakakolwiek inna. (Za/przeciw?) 2) Niestandardowe rozwiązanie specyficzne dla problemu. (za/przeciw?) 3) Inne. (co? | plusy/minusy?) Zapraszam do rozwinięcia tego tematu. Z poważaniem! PS: Zaznaczę odpowiedź z największą liczbą głosów jako odpowiedź tylko na zasady...


title: Jak ważne jest posiadanie mentora lub starszego programisty na początku swojej kariery?

text: Właśnie przeczytałem to pytanie, pytając, jak ustalić, czy porady starszego programisty są złe i zdałem sobie sprawę, że tak naprawdę nie mogę odnieść się do jego sytuacji, ponieważ nie mam mentora. Zdałem sobie również sprawę, że jestem prawdopodobnie najstarszym deweloperem w biurze, przynajmniej w mojej dziedzinie. Co wydaje mi się niezwykłe, biorąc pod uwagę, że mam dopiero 22 lata i rok temu ukończyłem studia. Zdałem sobie sprawę, że to ja podejmuję większość decyzji projektowych i piszę swój kod tak, jak mam na to ochotę. Chociaż jestem z tego zadowolony, czuję, że dobrze byłoby być otoczonym przez najlepszych programistów, od których mógłbym się uczyć. W tej chwili głównie stosuję wiedzę, którą już nabyłam. Czy posiadanie mentora na tym etapie mojej kariery nie będzie miało negatywnego wpływu na późniejszą karierę?


title: Korzystanie z internetowego interfejsu API lub bibliotek

text: Obecnie mamy 1 domenę i 4 subdomeny korzystające z 5 różnych aplikacji. Programujemy w asp.net i mamy 6 różnych projektów rozwiązań. 5 aplikacji i 1 rozwiązanie dla współdzielonego zaplecza. Każda aplikacja jest wdrażana z własną biblioteką dll + udostępnioną biblioteką dll. Ponieważ chcemy zacząć korzystać z asp.net MVC, jesteśmy teraz zainteresowani dodaniem interfejsu API Rest WEB. W planach jest zastąpienie jednej aplikacji subdomeny (formularze internetowe asp.net) MVC i zamiast korzystania z bibliotek, chcemy pobierać dane z WEB API. Moje pytania to 1) Czy warto zmienić koncepcję i używać wep api zamiast bibliotek do wymiany danych między naszymi aplikacjami? 2) Jeśli tak, czy powinniśmy stworzyć ją jako nową aplikację (na nowej subdomenie), czy tylko warstwę środkową w aplikacji MVC, eksponującą tylko metody, których potrzebujemy do aplikacji MVC?


title: Silnik fizyczny z pozycjami stałopunktowymi

text: Lokalizacje obiektów o stałym punkcie pozwalają na tworzenie światów, które są znacznie bardziej skalowalne. Używając 64-bitowej liczby całkowitej (na wymiar) i dokładności 0,1 milimetra, można stworzyć świat, który jest w 100% stabilny liczbowo i ma _12000_ jednostek astronomicznych w przekroju. Szukałem w Internecie i nie mogę znaleźć silnika fizyki, który by to wspierał. Czy istnieje silnik fizyki 3D, który używa wartości _fixed-point_ (tj. Integer, miejmy nadzieję, że int-64) dla pozycji jednostek? To do naprawdę ambitnej gry science fiction, nad którą pracuję.


title: Najlepsza praktyka tworzenia „globalnej” klasy konfiguracyjnej używanej przez wiele komponentów

text: Mam duży projekt z częścią sterownika i około 5 bibliotek wykonujących różne powiązane zadania. Wiele bibliotek wymaga dostępu do „globalnych” danych konfiguracyjnych, które są odczytywane z bazy danych podczas uruchamiania przez kod sterownika. Przez sterownik rozumiem tylko część, która zawiera główną funkcję. Mój pomysł na to, jak sobie z tym poradzić, polegał na stworzeniu klasy konfiguracyjnej ze statyczną metodą do pobierania elementów konfiguracyjnych. Czy to najlepsze podejście? Jak inaczej można to osiągnąć? np: class config { public: static get_item(key); prywatne: wartości statyczne; }; Czy projekt singletona jest tutaj odpowiedni?


title: Jak zaimplementować motyw dla kontrolerów widoku w aplikacji na iOS?

text: Mam aplikację, w której rozmiar czcionki, typ czcionki, kolor, kolor tła, obraz i wiele rzeczy zmienia się w zależności od motywu. Już na samym początku zdałem sobie sprawę, że używanie wyliczeń do oznaczania motywów, a następnie sprawdzanie motywu wszędzie było strasznym błędem. Mam więc teraz dwa podejścia i nie wiem, które wybrać. Zachowaj kontroler widoku podstawowego dla mojej aplikacji z domyślnym wyglądem i działaniem aplikacji, a następnie utwórz podklasę dla motywu. Lub Utwórz klasę Theme, która będzie dostarczać informacje o kompozycji, a następnie podklasę dla każdej kompozycji i ustaw obiekt tematu w kontrolerze widoku i zapytaj obiekt tematu przed zastosowaniem motywu. Albo może być inne podejście, o którym nie pomyślałem :)


title: Wyszukaj i zamień w MVC

text: Jaka byłaby dobra struktura MVC/OOP/GRASP/SOLID dla funkcji wyszukiwania/zamieniania. Metody: szukaj/szukajDalej/zamień/zamieńWszystko. Interesuje mnie tylko architektura PHP i to, jak profesjonalny programista zaimplementowałby to w **WŁASNYCH RAMACH**. Jakich nazw użyłbyś na zajęciach? Jakich podfolderów użyłbyś w swoim folderze MODEL? Jak podłączyć MODELE/KONTROLER? To tylko pytanie architektoniczne, aby lepiej zrozumieć zasady dobrego OOP w praktyce. Moja obecna implementacja jest bardzo uproszczona przy użyciu modelu usługi: /controller/SearchReplaceController.php /models/services/SearchReplaceService.php Problem polega na tym, że wiem, że łamię SRP w usłudze, ale uznałem to za akceptowalne. Również tworzenie usługi nie wydaje się najlepszym rozwiązaniem.


title: Sprawiasz, że dwa obrazy poruszają się z różnymi prędkościami w Javie?

text: Tworzę podstawową grę Space Invaders. Używam wątku do animowania gry i zastanawiałem się, jak zwiększyć prędkość kosmitów poruszających się w lewo iw prawo bez zmiany prędkości kontrolowanego przez ciebie statku? Jaka jest najłatwiejsza metoda? Jestem całkiem nowy w Javie 2d i stworzyłem tylko dwie inne, bardziej podstawowe gry.


title: Używanie dźwięków w aplikacji do rozpowszechniania – problem z prawami autorskimi

text: Stworzyłem aplikację, która zawiera plik dźwiękowy pobrany z Macloops. Użytkownik może tylko słuchać tych plików dźwiękowych (nie może tworzyć z nich żadnych nowych plików dźwiękowych) za pomocą aplikacji. Teraz chcę rozpowszechniać aplikację przez Internet i chciałbym wiedzieć, czy mogę to zrobić legalnie. Znalazłem tylko następującą witrynę Macloops dotyczącą praw autorskich: > Oświadczenie o członkostwie Macloops/warunki. >> Dołączając do serwisu Macloops, akceptujesz niniejszy Regulamin i > Warunki. >> Akceptujesz, że Macloops.com jest częścią Siliconbeats.com i dajesz nam > prawo do wysyłania Ci okazjonalnych wiadomości e-mail dotyczących naszych najnowszych > wydarzeń. Twój adres e-mail nie zostanie sprzedany żadnej liście mailingowej > organizacjom, a treść naszych e-maili będzie powiązana z próbkami, > pętlami i zasobami muzycznymi, które mamy do zaoferowania. >> Chociaż dokładamy wszelkich starań, aby wszystkie materiały do pobrania były > wolne od wirusów, zdecydowanie zalecamy korzystanie z profesjonalnego > oprogramowania antywirusowego. Odtwarzanie dźwięków o zbyt dużej głośności może spowodować uszkodzenie > słuchu. Kieruj się zdrowym rozsądkiem podczas odtwarzania dźwięków i upewnij się, że poziomy głośności > są rozsądne. >> Macloops nie ponosi odpowiedzialności za obrażenia lub uszkodzenia spowodowane > używaniem plików i dźwięków. Wszyscy członkowie i osoby niebędące członkami ponoszą całkowitą odpowiedzialność za WSZYSTKIE > opłaty za dostęp do Internetu. Nie ma wyjątków. Okres członkostwa > dla wszystkich członków jest w gestii administratorów strony. Macloops > zastrzega sobie prawo do dezaktywacji lub usunięcia konta w dowolnym momencie. > Macloops nie ponosi odpowiedzialności za jakiekolwiek uszkodzenia sprzętu, oprogramowania lub > sprzętu wynikające z użycia jakichkolwiek plików lub dźwięków uzyskanych bezpośrednio lub > pośrednio ze strony internetowej Macloops. > > Dołączając do witryny Macloops, akceptujesz przestrzeganie niniejszego > Regulaminu. Nie ma nic o korzystaniu z plików dźwiękowych. Czy mogę więc rozpowszechniać swoją aplikację?


title: Jak połączyć „Polecenie” i „Złożony”, aby zasymulować opóźnienie czasowe?

text: Jako ćwiczenie do nauki (nie jestem w szkole - tylko stary facet próbujący nauczyć się czegoś nowego) próbuję napisać symulację bramki logicznej, która zawiera opóźnienie propagacji. Użytkownik powinien również mieć możliwość grupowania bramek w celu tworzenia obiektów wyższego poziomu. Chcę zastosować wzorce projektowe do mojego problemu, ale jest mi ciężko. Czytam _Head First Design Patterns_ i widzę, że wzorzec Command to dobry sposób na symulację impulsów elektrycznych w obwodzie z opóźnieniem. Widzę też, że wzorzec Composite to dobry sposób na symulację jednostek zagnieżdżonych. Po prostu nie wiem, jak to zmieszać. Innymi słowy, gdy przechodzę przez moje bramy, widzę, że bramka „x” powinna się uruchomić. Ma opóźnienie 15 nanosekund, więc tworzę polecenie ze znacznikiem czasu 15 ns od aktualnego czasu gry. Gdzie jest dyspozytor? W przykładzie restauracji, w której poleceniem jest „Zamówienie”, kelnerka i kucharz wysyłają polecenie i mają możliwość wprowadzenia opóźnienia. Jeśli mam bramę 'kompozytową', to czy ma ona również własnego dyspozytora? Czy muszę używać Singletona do zarządzania kolejką? Przeczytałem, co udało mi się znaleźć, ale nadal potrzebuję popchnięcia we właściwym kierunku: * http://stackoverflow.com/questions/2015549/using-command-design-pattern * http://stackoverflow.com/questions/12016314 /client-server-command-design-pattern-with-variable-delays * http://stackoverflow.com/questions/10560892/composite-of-commands-design-pattern * http://stackoverflow.com/questions/8874705 /jak-mogę-obliczyć-opóźnienie-propagacji-przez-serię-kombinowanych-układów-u


title: Testy jednostkowe jako narzędzie do nauki – dobry pomysł?

text: Interesują mnie sposoby i środki efektywnej nauki języków programowania. Uważam, że korzystanie z koncepcji i infrastruktury testów jednostkowych na początku tego procesu jest dobrą rzeczą, nawet lepszą niż rozpoczęcie od „Hello world”. Powód: Aby napisać przyzwoity program nawet dla zabawkowego/ograniczonego problemu w nowym języku, będziesz musiał opanować wiele niejednorodnych pojęć (sterowanie przepływem i zmiennymi oraz IO...). Twój program „do pracy”. Umieszczenie (zrozumienie) faktów dotyczących nowego języka w twierdzeniach z dobrymi opisami (=komunikaty sukcesu) wymusza myślenie przez/jasność/precyzję. Grupowanie tematów i dodawanie asercji do takich grup jest znacznie łatwiejsze niż włączanie funkcji z 2. rozdziału książki „Nauka X” do programu z rozdziału 1. Dlaczego nie: 'Prawdziwe' testy jednostkowe mają na wyjściu "1234 testy ok; 1 błąd: saveWorld() dławi się przy ujemnym wejściu"; 'dydaktyczne' testy jednostkowe powinny wypisywać istotne fakty dotyczące nowego języka, takie jak perl6 10-string.t # ### p5chop ... ok 13 - p5chop( "cbä" ) zwraca "ä" ok 14 - po tym następuje zmiana ofiary do "cb" # ### (p6) chop ... ok 27 - (p6) chop( "cbä" ) zwraca pociętą kopię: "cb" ok 18 - po tym ofiara pozostaje bez zmian: "cbä" # ## # chomp ... Więc (niewłaściwe?) używanie testów jednostkowych może przynieść efekt przeciwny do zamierzonego - ćwiczenie działań podczas nauki, których nie używałbyś zawodowo. Jak: Pisanie „dydaktycznych” testów jednostkowych w językach z lekkimi systemami testowania (Perl 5/6) jest łatwe; (Błędne?) używanie bardziej rozbudowanych systemów (JUnit, CppUnit) może nie być warte wysiłku lub nieodpowiednie dla osoby dopiero rozpoczynającej naukę nowego języka. Więc 1. Czy używanie testów jednostkowych jako narzędzia do nauki to zły pomysł? 2. Czy narzędzie(a) testu jednostkowego twojego ulubionego języka(ów) może być używane dydaktycznie? 3. Czy szczegóły implementacji (ewentualnie) powinny zostać omówione tutaj czy na stackoverflow.com?


title: Dlaczego Java nie jest szerzej wykorzystywana do tworzenia gier?

text: Nie jestem twórcą gier ani nic takiego, ale wiem, że Java nie jest zbyt szeroko wykorzystywana do tworzenia gier. Java powinna być wystarczająco szybka dla większości gier, więc gdzie jest haczyk? Przychodzi mi do głowy kilka powodów: * Brak twórców gier z doświadczeniem w Javie * Brak dobrych frameworków do tworzenia gier * Programiści nie chcą akceptować Javy jako języka programowania gier. Większość akceptuje tylko C++ jako taki? * Brak wsparcia dla konsol do gier (chociaż rynek PC nadal istnieje) Może to być oczywiście coś innego. Czy ktoś, kto zna się na tym biznesie lepiej ode mnie, może wyjaśnić, dlaczego Java nie nabiera rozpędu, jeśli chodzi o tworzenie gier?


title: Czy redefinicja idiomatyczna w clojure?

text: Prosty przykład: (def tiki 0) (defn run-iteration [] (def tiki (inc tiki))) Chociaż zwykły przypadek dotyczy rzeczy, które nie zmieniają się częściej niż raz na kilkaset ms. Jak to zrobić idiomatycznie? Edycja: i dlaczego idiomatyczny sposób jest idiomatyczny i dlaczego jest dobry?


title: Wywiad z kimś w celu uzyskania ogólnych umiejętności unixowych

text: Jak przetestowałbyś programistę, który twierdzi, że ma doświadczenie w powłoce *nix (dla jasności, nie chcemy testować, czy ktoś może programować na *nix, tylko że zna się na linii poleceń). Zastanawiałem się nad tym, aby rozwiązały problem uzyskiwania informacji z plików dziennika, co wymagałoby pewnych podstaw, takich jak cat, grep, cut, ... w połączeniu z orurowaniem. O jaką inną podstawową wiedzę chciałbyś poprosić? Po raz kolejny nie jest to rozmowa z kimś, kto będzie programował dla systemów *nix, ani też dla administratorów systemu *nix, ale tylko dla zwykłych programistów, którzy czasami muszą popracować nad systemem *nix.


title: Licencje „Open Source”, które nie pozwalają na redystrybucję źródeł

text: Rozpoczynam pracę nad nowym projektem oprogramowania komercyjnego, które może wykorzystywać elementy kodu „open source”. Zostałem poinstruowany, aby upewnić się, że używam tylko kodu, który jest licencjonowany do użytku komercyjnego i chociaż _możemy_ zdecydować się na udostępnienie go w przyszłości jako open source, powinno być _wymagane_, aby był open source. Więc to wyraźnie zabrania używania jakiegokolwiek prawdziwego kodu na licencji typu copyleft. Ale to mnie zastanowiło; czy istnieją jakieś standardowe licencje na oprogramowanie typu „open source”, które _pozwalają_ na komercyjne wykorzystanie, ale _nie_ zezwalają na redystrybucję źródeł? Celowo użyłem cytatów dotyczących open source, ponieważ zdaję sobie sprawę, że wszelkie licencje, które spełniają te kryteria, nie mogą być zgodne z przyjętą definicją open source OSI.


title: Skąd mam wiedzieć, że moja aplikacja jest zbyt złożona?

text: Obecnie pracuję nad własnym projektem dla aplikacji na Androida, ale z biegiem czasu wydaje mi się, że moja aplikacja koncentruje się bardziej na innej funkcji niż to, co miałem na myśli, kiedy po raz pierwszy projektowałem aplikację. Więc chcę zapytać, skąd mamy wiedzieć, kiedy nasza aplikacja jest zbyt skomplikowana (dla użytkownika)? Co powinniśmy z tym zrobić? Zwłaszcza, gdy mocno uważamy, że ta nowa funkcja jest ważna.


title: Jak skutecznie (ale minimalnie) *symulować* rozproszone środowisko obliczeniowe?

text: Przeprowadzam osobiste badania na temat błędów bizantyjskich. Testuję algorytmy z różnych prac naukowych, które prezentują algorytmy konsensusu w systemach rozproszonych, takich jak ten. W tym celu potrzebuję środowiska symulacyjnego na małą skalę systemu rozproszonego. Jak podejść do tego problemu?


title: Proces wdrażania zwinnego rozwoju. Gdzie testują QA i Business Owners?

text: Ostatnio dużo czytałem o różnych procesach wdrażania aplikacji internetowych za pomocą SVN lub GIT, z myślą o przeprojektowaniu sposobu, w jaki obecnie wdrażamy tam, gdzie pracuję. Podobnie jak w przypadku wielu smaków Agile, zakłada się, że wszystko, co jest przeznaczone do masteringu lub bagażnika, jest gotowe do produkcji. Zarówno GitHub, jak i Etsy, http://codeascraft.etsy.com/2010/05/20/quantum-of-deployment/ twierdzą, że działają na tej podstawie (chociaż Etsy faktycznie ma środowisko tymczasowe). Ten proces zakłada, że wszystkie testy jednostkowe i testy CI zostały uruchomione. Testy uruchamiasz lokalnie i na CI, a następnie wprowadzasz do trunka. WIĘC, w tym momencie twój kod jest **technicznie** poprawny. Twój kod może być technicznie poprawny, ale testowanie użytkownika/funkcjonalne może ujawnić więcej błędów, szczególnie jeśli chodzi o testowanie frontonu. Moje pytanie jest takie. Gdzie właściciele kontroli jakości i firmy testują wprowadzone przez Ciebie zmiany funkcji? Na lokalnym komputerze deweloperskim przed przejściem do łącza trunkingowego lub na maszynie QA/staging? Jeśli masz maszynę pomostową, która uruchamia się z trunkiem, i zakładasz, że cały kod wprowadzony do trunku jest gotowy do produkcji... eh.. to w którym momencie kod jest podpisany i dobrze jest przejść do produkcji zarówno od strony technicznej, jak i biznesowej perspektywiczny? Jeśli masz tylko jedną maszynę pomostową, wielu programistów i tam kod ma być poddany kontroli jakości, to jak możesz wdrożyć z magistrali, ponieważ wiele zmian programistów może czekać na zatwierdzenie. Chciałbym usłyszeć, jak podeszli do tego inni?


title: Naciskać dalej czy nie?

text: W zeszłym tygodniu spotykałem się i rozmawiałem z kimś, kto jest zainteresowany znalezieniem pomocy przy tworzeniu gry (zbudowanej przy użyciu php i mysql, z odrobiną javascriptu). Zgodziłem się jednak pomóc, jednak teraz, gdy zapoznałem się z organizacją kodu i plików, nie wiem, czy jest to wykonalne dla kogokolwiek (nie tylko dla mnie), ale dla oryginalnego autora, aby nawet rozszyfrować, co się dzieje. Zasadniczo nie ma żadnej struktury ani w plikach, ani w ich kodzie, jest po prostu porozrzucany tak, jak jest. Każdy plik php, który nie pochodzi z zewnętrznego źródła, znajduje się w katalogu głównym i istnieje trochę organizacji dla innych typów plików, ale niewiele. Większość kodu nie jest wcięta ani czytelna. Nie próbuję powiedzieć, że to nie działa, widziałem, jak działa, po prostu nie sądzę, żeby ktokolwiek inny mógł spróbować zrozumieć, co to robi (i nie chcę brzmieć jak Wściekam się na faceta, który to napisał, powiedział mi, że tak naprawdę nie koduje zbyt wiele). Zasadniczo moje pytanie brzmi, czy powinienem się wycofać, czy powinienem spróbować iść dalej? Czy ktoś ma doświadczenie w pracy na dużym, starym systemie, który wymaga całkowitej aktualizacji? jakieś pomysły? **Dodatkowe informacje:** Nie, nie mam jeszcze umowy, tylko przeglądałem ją do tej pory. Moje własne odczucia są takie, że jeśli zdecyduję się iść dalej, skończę przepisać cały system (czyli 113 plików php w katalogu głównym plus kilka innych zlokalizowanych w innym miejscu w systemie) i nie wiem, czy naprawdę chcę aby kontynuować, po prostu czuję, że powiedziałem, że spróbuję pomóc.


title: Plusy i minusy przestrzeni nazw vs include/require w PHP?

text: Niedawno zacząłem używać przestrzeni nazw w PHP. Kiedy pierwszy raz je zobaczyłem, pomyślałem, że ich składnia jest brzydka i nigdy ich nie użyję. Stworzyłem jednak autoloader (spl_autoload_register), który sprawia, że nigdy więcej nie muszę pisać instrukcji include/require. Lubię przestrzenie nazw, ale czy istnieje jakaś obiektywna korzyść w stosunku do instrukcji include/require, czy też są one dokładnie tą samą metodą osiągnięcia tego samego celu?


title: Testowanie jednostkowe i potwierdzanie

text: Załóżmy, że mamy metodę, która sprawdza poprawność obiektu przed zapisaniem go w bazie danych. Zwraca KVP coś w stylu: public KeyValuePair<bool, List<FooErrorReason>> ValidateABar(Bar b) { var Reasons = new List<FooErrorReason>(); if (string.IsNullOrEmpty(bar.Name)) { Reasons.Add(new FooErrorReason { PropName = "Name", Message = "Brakowało nazwy" }; } if (string.IsNullOrEmpty(bar.OtherName)) { Reasons. Add(new FooErrorReason { PropName = "OtherName", Message = "Brakowało drugiej nazwy" }; } return new KeyValuePair<bool, List<FooErrorReason>(reasons.Count == 0, Reasons); } Więc teraz chcę przetestuj, że dla brakującego paska.Nazwa, zwracany jest błąd.Moje pytanie dotyczy składu testu, co do `Assert`.public void ValidateABar_Fails_For_Missing_Name() { //ułóż var b = new Bar { OtherName = "Inne" }; //act var result = ValidateABar(b); //assert Assert.IsFalse(result.Key); Assert.AreEqual(1, result.Value.Count); Assert.IsTrue(result.Value.Any (x => x.PropName.Equals("Name"))); } Mam 3 wywołania `Assert` i to pachnie kodem, ale i tak nie mogę się do końca przekonać. Zadaję sobie pytanie „Co chcesz przetestować?” i czuję, że powinienem sprawdzić, czy to się nie powiodło, ale nie powiodło się specjalnie ze względu na właściwość testu. Czy wystarczy po prostu użyć Assert.IsTrue(result.Value.Any(x => x.PropName.Equals("Name"))); A może powinienem również sprawdzić, czy nie ma innych błędów, które wykryłem po drodze? Powiedzmy na przykład, że ktoś dodał kolejną regułę walidacji bez mojej wiedzy o tym, myślę, że chciałbym, aby moje testy powiedziały mi o tym następnym razem, gdy je uruchomię. Jako przykład powiedzmy, że ktoś zmienił metodę jak poniżej: public KeyValuePair<bool, List<FooErrorReason>> ValidateABar(Bar b) { var Reasons = new List<FooErrorReason>(); if (string.IsNullOrEmpty(bar.Name)) { Reasons.Add(new FooErrorReason { PropName = "Name", Message = "Brakowało nazwy" }; } if (string.IsNullOrEmpty(bar.OtherName)) { Reasons. Add(new FooErrorReason { PropName = "OtherName", Message = "Brakowało drugiej nazwy" }; } //dodano to! if (string.IsNullOrEmpty(bar.ThirdName)) { Reasons.Add(new FooErrorReason { PropName = " ThirdName", Message = "Brakowało trzeciego imienia" }; } Zwróć nową KeyValuePair<bool, List<FooErrorReason>(reasons.Count == 0, Reasons); } Test teraz się nie powiedzie i zobaczę, że ta reguła został dodany i odpowiednio zmodyfikuj mój test (i prawdopodobnie napisz kolejny test, aby objąć nową regułę).Czy traktuję „jeden asert na regułę testu” zbyt dosłownie?


title: Który wzorzec nadaje się do wysyłania wielu typów odpowiedzi za pośrednictwem usługi sieciowej REST?

text: Mam kilka usług sieci Web w stylu REST, które obsługują odpowiedzi typu XML i JSON. Teraz muszę zmodyfikować istniejące usługi sieciowe tak, aby zapewniały odpowiedzi typu Protobuf. Deweloper, który opracował te usługi, stworzył trzy warstwy. Warstwa „Usługa”, warstwa „DAO” i warstwa „Przetwarzanie”. Warstwa usługi wywołuje jedną z metod warstwy przetwarzania, a warstwa przetwarzania wywołuje metody DAO i zwraca do usługi odpowiedź typu JSON lub XML (POJO). Następnie warstwa usług odsyła to POJO do klienta. Na przykład, jeśli wywoływana jest usługa dodawania `listy elementów`, to ten kod wygląda mniej więcej tak, jak pokazano poniżej: @Path("/item") class ShoppingItemService { // adnotacje public ItemAddResponse addList(/* parametry wymagane dla tej metody */ ) { Procesor ItemProcessor = nowy ItemProcessor(); ItemAddResponse response = processor.process(/* przekazywanie niektórych danych do warstwy przetwarzania */); return Response.ok().format("XML").build(odpowiedź); } } Tutaj `ItemAddResponse` jest już opatrzony adnotacjami typu `JAXB` dla odpowiedzi `XML` i innymi adnotacjami dla odpowiedzi `JSON`. Nie mogę ponownie użyć tego samego `ItemAddResponse`, ponieważ Protobuf generuje własne klasy przy użyciu plików schematu. Klasa procesora ma całą logikę biznesową i jeśli chcę dodać obsługę Protobuf to muszę utworzyć nową metodę w procesorze i skopiować-wkleić prawie całą logikę biznesową, ale tylko zwrócić obiekt klasy wygenerowanej przez protobuf. Takie podejście jest czasochłonne i istnieje co najmniej 50+ podobnych metod, w których muszę wykonać pracę kopiuj-wklej. Chcę tego uniknąć i chciałbym zaprojektować jakieś eleganckie rozwiązanie. Chciałbym wiedzieć, jak mogę dodać obsługę Protobuf przy minimalnej ilości zmian? Czytam książkę `Head First Design Patterns`, ale ta książka jest naprawdę ogromna i znalezienie odpowiedniego wzorca projektowego zajmie dużo czasu. Czy istnieje jakiś wzorzec projektowy, który może się przydać w tego typu sytuacjach? Dzięki, Chandrashekhar


title: Qt (C++) vs. JavaFX: Jaki jest względny rozmiar każdej społeczności programistów?

text: Decyduję między Qt (w C++) a JavaFX do tworzenia GUI dla aplikacji ze złożonym back-endem (back-end będzie napisany w C++). Jeśli używam JavaFX do GUI, będę używał JNI do wymiany danych między GUI a back-endem C++. Z wyjątkiem jednego poważnego problemu, wolałbym używać Qt (C++) do GUI niż JavaFX. Problem polega na tym, że możliwe jest, że JavaFX ma znacznie większą społeczność programistów. W związku z tym, prawdopodobnie łatwiej będzie przenieść rozwój aplikacji do innych programistów w przyszłości, jeśli GUI będzie wbudowane w JavaFX. (Jakość obu tych frameworków GUI wydaje się, ogólnie rzecz biorąc, porównywalna; zobacz na przykład JavaFX 2.0 i Qt dla aplikacji wieloplatformowych, Cross-platform Desktop development oraz Czy używanie Java jest właściwym językiem/platformą do tworzenia Aplikacja księgowa oparta na GUI?.Jeśli się mylę i faktycznie, jeśli jakość jednego z tych frameworków jest wyraźnie wyższa od drugiego, to stałoby się to głównym czynnikiem.) Moje wrażenia z "blogosfery", a także z faktu, że Qt jest aktywnie utrzymywane, jest to, że Qt ma wielu zwolenników - chociaż prawdopodobnie społeczność Java Swing jest większa (co prawdopodobnie będzie również dotyczyć społeczności JavaFX po pewnym czasie, ponieważ JavaFX zastępuje Swing) . Moje pytanie brzmi: Jak dużą bazę użytkowników (społeczność programistów) ma Qt w porównaniu z JavaFX?


title: Czy nadal powinniśmy dbać o _escaped_fragment_ i alternatywne generowanie kodu HTML dla aplikacji jednostronicowych?

text: Kilka miesięcy temu rozpocząłem projekt, który będzie składał się z dwóch części – panelu podglądu klienta biznesowego (AngularJS SPA) oraz front-endu publicznego (dynamiczny HTML z progresywnymi ulepszeniami poprzez XHR). Naprawdę chciałbym zatrzymać i wyrzucić dynamiczny HTML i przełączyć się na kombinację AngularJS + API + statyczny HTML (jak w "panelu"), aby uniknąć duplikowania pracy w zasobach API i szablonach HTML. Ponieważ ta treść będzie publiczna i powinna zostać zindeksowana, gubię się w bieżącym stanie wyszukiwarki Google. Nie jestem pewien, czy chcę zaimplementować stos pamięci podręcznej PhantomJS + nginx (aby uniknąć możliwości DoS przez PhantomJS): ![Schemat blokowy SPA](http://i.imgur.com/jU1fYNm.png) (przepraszam za prawdopodobnie nieczytelną czcionkę size.) Czy ktoś z Was wdrożył teraz witrynę tylko dla SPA i może udzielić informacji na temat tego, jak (jeśli) Google indeksuje Twoją witrynę?


title: Wzorzec projektowy: pojedyncza klasa o wielu celach lub wiele klas rozszerzonych, z których każda ma swój własny cel w PHP

text: Pracuję na frameworku PHP o nazwie Carbon CMS. Ten framework będzie używany jako podstawa do budowania na nim większych aplikacji internetowych. Ta struktura powinna zapewniać wszelkiego rodzaju interfejsy, takie jak dostęp do bazy danych, buforowanie i tak dalej. Obecnie pracuję nad częścią IO i obsługi plików we frameworku. To pytanie będzie dotyczyło wzorca projektowego, którego powinienem użyć, czy powinienem używać jednej, czy wielu klas, które wzajemnie się rozszerzają. W takim przypadku pytanie zostanie zadane z myślą o systemach plików, ponieważ dotyczy to mojego problemu i powinno ułatwić zrozumienie samego pytania, ponieważ podano przykład. Pamiętaj więc, że to pytanie dotyczące wzorca projektowego dotyczy również innych przypadków. Moim pomysłem jest zbudowanie klasy lub wielu klas, które odwołują się do pliku, katalogu lub dowiązania symbolicznego w systemie plików według jego ścieżki. Następnie te klasy powinny również zapewniać interfejs do odczytu/zapisu plików, listy katalogów i tak dalej. Pomyśl o klasie `File` w Javie lub klasach `File`, `Dir` w Qt. Mam pytanie, jakiego rodzaju struktury lub wzorca projektowego powinienem użyć w tym przypadku. Mógłbym stworzyć pojedynczą klasę `File`, która zawiera wszystkie funkcje, nie tylko dla plików, ale także dla katalogów i dowiązania symbolicznego. Ale mogłem też stworzyć wiele klas, takich jak `Path`, `File`, `Directory` i `SymbolicLink`. Są więc dwa możliwe sposoby, które przychodzą mi do głowy: 1. Używając **pojedynczego** `Plik` **klasy**. Ta klasa zawiera odwołanie (ścieżkę) do wpisu systemu plików, takiego jak plik lub katalog. Ta klasa obejmuje funkcje zarówno dla plików, katalogów, jak i dowiązań symbolicznych, takie jak odczytywanie/zapisywanie plików lub wyświetlanie zawartości katalogów. 2. Korzystanie z **wielu klas**, które wzajemnie się rozszerzają. Klasa `Path` (lub coś podobnego) przechowuje odniesienie (ścieżkę) do wpisu systemu plików, takiego jak plik lub katalog. Zawiera tylko podstawową funkcjonalność, której można użyć we wszystkich trzech różnych typach wpisów systemu plików (pliki, katalogi i dowiązania symboliczne). Pomyśl o funkcjach takich jak `Path::isFile()`, `Path::getPath()` czy `Path::exists()`. Następnie trzy inne klasy są używane dla różnych typów wpisów systemu plików o nazwie `File`, `Directory` i `SymbolicLink`. Wszystkie te klasy rozszerzają klasę `Path`, aby zaimplementować jej podstawową funkcjonalność i odniesienie do ścieżki. Te trzy klasy zawierają funkcje dla tego konkretnego typu wpisu. Tak więc metody odczytu i zapisu plików można znaleźć w klasie `File`; `File::getContents();`, a metoda wylistowania zawartości katalogu zostałaby umieszczona w klasie `Directory`; `Katalog::list();`. Tak więc, aby wyjaśnić moje pytanie. Czy powinienem wybrać pierwszą opcję i stworzyć pojedynczą klasę `File`, która obsłuży wszystko, co dotyczy IO i obsługi plików. A może powinienem wybrać drugą opcję i utworzyć wiele klas. Gdzie każda klasa jest dla określonego typu wpisu systemu plików (z wyjątkiem klasy `Path`, która będzie używana dla wszystkich trzech typów). Teraz, jeśli wybierasz pierwszą opcję. Funkcje takie jak `listContents()` (aby wyświetlić zawartość katalogu) można łatwo wywołać na ścieżce, która odwołuje się do pliku. Niemożliwe byłoby wypisanie zawartości katalogu pliku, dlatego wywołania takie jak to zwróciłyby `null` lub coś podobnego, wskazując, że katalog nie może zostać wyświetlony. W przypadku korzystania z drugiej opcji byłoby to nieco inne. Metoda `listContents()` byłaby dostępna tylko dla instancji `Directory`, a te instancje i tak powinny odwoływać się do katalogu. Oczywiście byłoby możliwe, że ścieżka, do której się odwołuje, nie istnieje, ale może tak być w przypadku obu opcji. Istnieje kilka zalet i wad dla obu opcji. Oto kilka, które przychodzą mi do głowy: * Wybieram pierwszą opcję, z pojedynczą klasą: 1. Rzutowanie instancji nie jest wymagane do używania operacji specyficznych dla wpisów podczas używania `Plik`'. 2. Tworzy jeden ogromny interfejs do wszystkiego, co czyni go bardziej bałaganiarskim i umożliwia wykonywanie pewnych operacji na niekompatybilnych typach wpisów systemu plików, takich jak wyświetlanie zawartości katalogu w pliku. * Przechodząc do drugiej opcji, z wieloma klasami: 1. Rzutowanie instancji i sprawdzanie typu instancji jest wymagane, aby użyć operacji specyficznych dla wpisów podczas używania `Path`'. 2. Tworzy osobny interfejs dla każdego typu wpisu systemu plików, dzięki czemu jest mniej nieuporządkowany, a także uniemożliwia użycie większości operacji na niezgodnych typach wpisów systemu plików. Framework będzie otwarty dla publiczności i będzie używany przez wiele osób, dlatego szukam opcji, która jest najłatwiejsza w użyciu, nie ma wpływu na wydajność, jeśli to możliwe, i opcji, która najlepiej pasuje do tego podłoża. Oto przykładowy kod, aby pokazać podstawową strukturę obu opcji. Używając pojedynczej klasy, z opcją pierwszą: class File { private $path; public function __construct($path) { $this->path = $path; } public function getPath() { return $this->path; } public function getContents() { // Zwraca zawartość pliku } public function listContents() { // Zwraca zawartość katalogu } } W przypadku używania wielu klas, z opcją drugą: class Path { private $path; public function __construct($path) { $this->path = $path; } public function getPath() { return $this->path; } } class File extends Path { public function getContents() { // Zwróć zawartość pliku } } class Katalog extends Path { public function listContents() { // Zwróć zawartość katalogu } } metody opisane w tym pytaniu, takie jak `Path::getPath();` lub `Directory::listContents();` są niestatyczne i muszą być wywoływane na instancji klasy. Java używa pojedynczej klasy `File`, która byłaby podobna do pierwszej opcji, którą podałem z pojedynczą klasą. Dostępnych jest kilka klas, takich jak `DirectoryIterator`, ale klasy takie jak ta i tak zostałyby utworzone i nie zależą od pierwszej lub drugiej opcji. Z drugiej strony, Qt używa czegoś podobnego do drugiej opcji, którą podałem, o ile wiem. Więc w końcu; Jaka byłaby najlepsza opcja i dlaczego?


title: Czy naprawdę musisz najpierw przetestować BDD/TDD?

text: Chociaż nie byłem w projekcie TDD ani BDD, lub byłem w niektórych, którzy twierdzą, że robią TDD, ale są od tego dość daleko, to są rzeczy, o których myślę i naprawdę staram się czytać tak dużo, jak tylko mogę o. Wracając do pytania. Kiedy robisz BDD, powinieneś najpierw napisać swój "test" i sprawić, by się nie powiódł, prawda? A potem zaimplementuj tę funkcję lub jak ją nazywasz. Ale jeśli doprowadzisz to do skrajności, czy nie może to być jakiś rodzaj odgórnego rozwoju? Patrzysz na swój interfejs użytkownika i mówisz: „Chciałbym mieć tę funkcję/zachowanie tutaj”. Następnie naprawiasz interfejs użytkownika, aby zaimplementować tę funkcję i kod obsługujący interfejs użytkownika. W tym momencie nie zaimplementowałeś żadnej logiki biznesowej ani logiki dostępu do danych, właśnie zaimplementowałeś swoje zachowanie. To, do czego zmierzam, zamiast najpierw pisać test, najpierw piszesz swój kod interfejsu użytkownika. W niektórych przypadkach powinno to skutkować tym samym kodem dla dostępu do danych i warstwy biznesowej, ponieważ używasz kodu interfejsu użytkownika, aby określić, co Twoja firma musi obsługiwać. Oczywiście należy uzupełnić to testami, które służą do upewnienia się, że funkcja działa tak, jak powinna. jakieś pomysły? **AKTUALIZACJA:** Dobre odpowiedzi i przemyślenia od wszystkich, o których myślę. Niektórzy z was stwierdzili, w taki czy inny sposób, że najpierw trzeba napisać test, w przeciwnym razie jest on oparty na programowaniu. Zdecydowanie zgadzam się z tym, gdy mówię o TDD, ponieważ twój test powinien napędzać twój rozwój. Ale kiedy mówię o BDD, nie jestem pewien, czy najpierw musisz napisać test, czy w BDD nie chodzi tylko o zdefiniowanie swojego zachowania? Myślę, że patrząc na interfejs użytkownika i mówiąc: „hej, chcę to zachowanie/funkcjonalność tutaj”, brzmi to dla mnie zmotywowane zachowaniem. Nie mówię, że powinieneś pominąć cały test, ale możesz użyć podejścia odgórnego jako pierwszego kroku do zdefiniowania swojego zachowania. Myślę, że kiedy wykonałeś ten pierwszy krok i być może zaimplementowałeś funkcję w interfejsie użytkownika z pewnymi danymi makiety, powinieneś zacząć definiować swój test, który weryfikuje to zachowanie.


title: Jak działa algorytm Jump Point Search i dlaczego jest tak wydajny?

text: Podczas testowania poniższego apletu zauważyłem, że ten algorytm wyszukiwania ścieżki zwany Jump Point Search daje znacznie szybszy wynik niż A* i Dijkstra. http://qiao.github.io/PathFinding.js/visual/ **A*: 46 sekund** ![tu wpisz opis obrazu](http://i.stack.imgur.com/aWWxp.jpg) * *Dijkstra: 1 minuta 39 sekund** ![tu wpisz opis obrazu](http://i.stack.imgur.com/X9dV4.jpg) **Wyszukiwanie punktu skoku: mniej niż 3 sekundy** ![wprowadź opis obrazu tutaj](http://i.stack.imgur.com/InNV0.jpg) Nie trzeba dodawać, że jestem zdumiony wynikiem. Z reprezentacji wizualnej wydaje się, że Jump Point Search dokonuje wielu losowych domysłów (prawdopodobnie bardzo inteligentnych) przy znajdowaniu ścieżki (przynajmniej z wyboru bloku), ale nie znalazłem jeszcze przypadku testowego, w którym ten algorytm działał gorzej wyniki niż A* i Dijkstra. Jak działa ten algorytm? Jak jest tak wydajny w porównaniu z A* i Dijkstrą?


title: Pokazać wszystkie definicje w schemacie?

text: Chcę zobaczyć wszystkie definicje utworzone przez użytkownika w schemacie REPL, zarówno załadowane z plików, jak i wprowadzone w REPL. Czy istnieje sposób na „zrzucenie wszystkich definicji”? Np. jeśli istnieje: (define (plusone x) (+ 1 x)) (define (plustwo x) (+ 2 x)) (define (plusthree x) (+ 3 x)) to chcę zobaczyć wszystkie te definicje, ale tylko te zdefiniowane przez "użytkownika" - coś w rodzaju ",showmealldefs" lub podobne. Czy można to zrobić, a jeśli nie ma ogólnego sposobu, czy można to zrobić w Gambicie-C? (Próbowałem (a propos "") i nie o to mi chodzi.)


title: Dlaczego konstruktory nie są dziedziczone?

text: Jestem zdezorientowany, jakie mogłyby być problemy, gdyby konstruktor został odziedziczony z klasy bazowej. Cpp Primer Plus mówi: > Konstruktory różnią się od innych metod klasowych tym, że tworzą nowe > obiekty, _podczas gdy inne metody są wywoływane przez istniejące obiekty_. **To > jeden z powodów, dla których konstruktory nie są dziedziczone**. Dziedziczenie oznacza, że obiekt > pochodny może używać metody klasy bazowej, ale w przypadku konstruktorów obiekt > nie istnieje, dopóki konstruktor nie wykona swojej pracy. Rozumiem, że konstruktor jest wywoływany przed zakończeniem budowy obiektu. Jak może to prowadzić do problemów, jeśli klasa podrzędna dziedziczy ( _przez dziedziczenie mam na myśli, że klasa podrzędna jest w stanie przesłonić metodę klasy nadrzędnej itp. Nie tylko uzyskując dostęp do metody klasy nadrzędnej_ ) konstruktora nadrzędnego? Rozumiem, że nie ma konieczności jawnego wywoływania konstruktora z poziomu kodu [nie jest to jeszcze znane.] z wyjątkiem tworzenia obiektów. Nawet wtedy możesz to zrobić, używając jakiegoś mechanizmu do wywołania konstruktora nadrzędnego [ W cpp, używając `::` lub używając `listy inicjującej członków`, W javie używając `super`]. W Javie istnieje wymuszanie wywołania go w pierwszej linii, rozumiem, że ma to na celu upewnienie się, że obiekt nadrzędny jest tworzony jako pierwszy, a następnie postępuje konstrukcja obiektu podrzędnego. Może **zastąpić** to. Ale nie potrafię wymyślić sytuacji, w których może to stanowić problem. Jeśli dziecko odziedziczy konstruktor nadrzędny, co może się nie udać? Czyli to tylko po to, aby uniknąć dziedziczenia zbędnych funkcji. Czy jest w tym coś więcej?


title: Definicje REPL schematu „końcowego”: jak je zapisać?

text: Czy istnieje sposób na pokazanie i zapisanie wszystkich „ostatecznych” definicji wprowadzonych do schematu REPL w pliku tekstowym? Powiedzmy, jeśli zdefiniowałem w REPL: (define (increase x) (+1 x)) (define (multbytwo x) (* 3 x)) ; powiedzmy, że to był błąd (zdefiniuj (multbytwo x) (* 2 x)) Chcę to zapisać w pliku .scm o treści: (define (zwiększenie x) (+1 x)) (define (multbytwo x) (* 2 x)) * czyli funkcja multbytwo, która została błędnie zdefiniowana, zostanie „zapomniana” z powodu redefinicji. czy to możliwe?


title: Najlepszy sposób na przechowywanie zmian ruchu w celu zmniejszenia pamięci

text: Porównuję jpeg do jpeg w stałym 'strumieniu wideo'. używam EMGU/OpenCV do porównania każdego piksela na poziomie bajtów. Każdy obraz ma 3 kanały (RGB). Słyszałem, że powszechną praktyką jest przechowywanie tylko tych pikseli, które zmieniły się między klatkami, jako sposób oszczędzania pamięci. Ale jeśli na przykład/przykład powiem, że KAŻDY piksel się zmienił (proszę zauważyć, że używam przesadzonego przykładu, aby przedstawić mój punkt widzenia i normalnie odrzuciłbym tak duże zmiany), to zapisane bajty wynikowe są 3 razy większe niż oryginalny jpeg. Jak mogę efektywnie przechowywać takie zmiany ruchu?


title: Najlepsze praktyki dotyczące obliczania danych w aplikacji internetowej typu GIS

text: Załóżmy, że mamy prostą aplikację w stylu GIS, która prezentuje (przy użyciu Google Maps lub czegoś podobnego) nagrane trasy. Każda trasa składa się z punktów (części danych) z danymi geograficznymi i dodatkowymi informacjami, takimi jak prędkość, wysokość i podobne atrybuty. Na podstawie tych dodatkowych parametrów chcę obliczyć dodatkowe informacje, takie jak średnia prędkość. Jakie dane powinien otrzymać klient WWW i po której stronie najlepiej wykonać niezbędne obliczenia: * _strona klienta_ : klient otrzymuje (poprzez AJAX) czystą tablicę danych (punkty z dodatkowymi parametrami) a wszystkie obliczenia wykonuje w Javascript w przeglądarka, * _strona serwera_ : klient otrzymuje treści gotowe do umieszczenia w odpowiednich miejscach, np. wartość średniej prędkości, a wszystkie obliczenia wykonywane są na serwerze. Osobiście zawsze wybierałem (jakoś automatycznie) pierwszą opcję, tak jak myślałem (popraw mnie, jeśli się mylę) daje mi to większą elastyczność. Ale teraz, po przeczytaniu kilku dokumentów i stron, widzę wyraźnie, że mogę się mylić. Jaka jest więc najlepsza praktyka w takiej sytuacji?


title: Czy GUI są kiedykolwiek zaprogramowane w DirectX w celu zwiększenia wydajności?

text: Trochę badałem GDI i na niektórych stronach internetowych wydaje mi się, że z trudem może narysować kilka prostokątów, podczas gdy na innych można go łatwo wykorzystać w interaktywnej aplikacji do tworzenia wykresów. Zastanawiam się więc, co jest używane w aplikacjach takich jak Excel, gdzie może być dużo ruchu, jak szybkie przewijanie dużej ilości danych? Czy można użyć DirectX i czy zwiększy to wydajność? Czy jest używany?


title: Jak napisać program, który różni się zmianami hierarchii?

text: Dlaczego programy diff działają na zasadzie linia po linii zamiast hierarchii? Cały kod można wyrazić w hierarchii, nawet jeśli nie jest to od razu widoczne. Większość danych, z którymi pracujemy, jest również hierarchiczna. Jakie są potencjalne problemy z budowaniem oprogramowania, które może się różnić w oparciu o hierarchię?


title: Czy tworzenie wątków, które często się zapętlają, aby sprawdzić, czy jest to hitem wydajności?

text: To ogólne pytanie, nad którym zawsze się zastanawiałem. **Ogólnie rzecz biorąc, czy tworzenie wątków wykonujących pętle „podczas gdy nie jest prawdziwe…” lub podobne jest intensywne dla procesora?** Załóżmy na przykład, że robię: // pseudokodowanie new Thread(function() { while (!useHasDoneSomething) { // nic nie rób... } alert("coś zrobiłeś!");} Więc to tylko kawałek kodu, który działa w wątku, który czeka, aż coś się wydarzy. Z jakiegoś powodu wyobrażam sobie, że to naciska na procesor.W końcu, mimo że jest to tylko jedna mała pętla, ponownie uruchamia pętlę w chwili, gdy cykl jest wykonywany.Czy nie oznaczałoby to, że przechodzi przez cykl wiele razy na milisekundę?... Per nanosekunda!? System operacyjny „obsłuży” program i wątki, prawda? Ale to wciąż strasznie dużo uwagi przy uruchamianiu pętli. Jeśli procesor nie ma nic innego do roboty, czy nie skupiałby się po prostu na tę pętlę, tym samym _zużywając cały czas bezczynności_? ** Co jeśli utworzę 1000 wątków, które wykonują tę samą pętlę? co wpływa na wydajność/cykle procesora?** Co więcej, czy **zdarzenia** działają wewnętrznie? Kiedy „nasłuchujesz” zdarzenia w Javie, .NET, Javascript itp. (takiego jak naciśnięcie przycisku lub zmiana rozmiaru okna), czy został utworzony wątek, który zapętlił się?


title: Która książka o systemach operacyjnych jest dobra jako szybkie przypomnienie?

text: Przygotowuję się do rozmowy technicznej i muszę przejrzeć podstawy głównych koncepcji systemów operacyjnych. Korzystaliśmy z nowoczesnych systemów operacyjnych Tanenbauma w szkole na naszym kursie dotyczącym systemów operacyjnych, co jest dobrą książką, ale zbyt długą, by można ją było zrecenzować w ciągu kilku dni. Na przykład szukam tego, co Programming Interviews Exposed jest dla struktury danych i analizy algorytmów Weissa. Jakieś sugestie?


title: Pytanie dotyczące tworzenia aplikacji internetowych

text: Sprawdziłem wszystkie istotne pytania mojego zapytania i odpowiedzi na nie, ale moje pytania nie są nigdzie dokładnie wymienione. Zasadniczo mam tylko jeden rok doświadczenia w tworzeniu stron internetowych przy użyciu joomla, HTML, PHP itp. Miałem szkolenie .NET podczas moich pracowników akademickich, a teraz mam wymagania dotyczące profesjonalnej aplikacji sieci Web typu .NET dla klienta. Ponieważ nie mam mam doświadczenie w produkcji .NET, chcę zadać i przedyskutować kilka pytań oraz zasięgnąć porady eksperta. **Scenariusz i zakres projektu** : Jestem zobowiązany do stworzenia aplikacji internetowej do zarządzania hotelem w .NET z modułami takimi jak 1. Zarządzanie użytkownikami (właściwie role takie jak , administrator , użytkownik licznika rezerwacji , użytkownik restauracji itp.) z ograniczonymi funkcjonalnościami dla każdego użytkownika z wyjątkiem administratora. 2. Moduł rezerwacji (obejmuje rezerwację, przydzielanie pokoju itp.) 3. Moduł rozliczeniowy (obejmuje oczekujące rachunki ze wszystkich działów w momencie wymeldowania gościa) 4. Moduł raportowania (jestem zdezorientowany z tym modułem. Właściwie chcę włączyć graficzny typ widoku do pokazania użytkownikowi końcowemu, ale nie sądzę, że mogę to zrobić za pomocą raportu kryształowego **Twoje sugestie dotyczące tego modułu na pewno pomogą** ) 5. Konfiguracja stawek. Więc teraz chcę, aby Twoja sugestia co do tego, co powinienem zacząć najpierw i ich najlepsze praktyki? * Projektowanie baz danych. * Projektowanie GUI. * Kodowanie. Moim zdaniem kodowanie powinno być ostatnim. prawda? Proszę również o poradę w kwestiach bezpieczeństwa, ponieważ jest to aplikacja internetowa, więc musi to być bezpieczne. Nie będę używał certyfikatu SSL, więc aplikacja będzie musiała działać tylko na http. PS jesteśmy dwoma programistami, obaj mamy takie samo doświadczenie, jeśli mógłbyś również podzielić się tym, jak możemy dystrybuować moduły między sobą i jak możemy pracować nad tą samą aplikacją, uzyskując dostęp do niej tylko przez dwa laptopy lokalnie? Wielkie dzięki i proszę, nie zamykaj mojego pytania, nie usuwaj go, ponieważ nie mogłem znaleźć odpowiedniej odpowiedzi, więc nie może to być duplikat lub jego kontekst jest zbyt duży. Pytanie zostało wyraźnie wymienione. Jeszcze raz dziękuję.


title: Czy amator może zostać dobrym programistą?

text: Profesjonalny programista w pełnym wymiarze godzin może wykonać świetną robotę, stale ucząc się na podstawie swojej pracy. Jak programista-amator może wyszkolić się na dobrego programistę? ** Jeśli lubisz grać muzykę lub śpiewać, możesz to zrobić, ponieważ jest to twoje hobby i jesteś zainteresowany i możesz zostać dobrym piosenkarzem lub muzykiem. Ale nie musisz zostać profesjonalnym piosenkarzem ani zarabiać na życie. Czy dotyczy to również programistów? Jakiś sławny programista-amator?


title: wyszukiwanie podanego przez użytkownika słowa na stronie za pomocą c# i selen

text: Próbuję opracować aplikację selenu (za pomocą formularzy c# win). Tak więc podczas uruchamiania aplikacji użytkownicy wprowadzą nazwę aplikacji w polu tekstowym. Mam wiele pól, takich jak koszt, ważność itp., odpowiadających każdej aplikacji. Przykładowa strona internetowa: opis nazwa aplikacji koszt ważność xyzattribute ------------------------------------------ -------- some desc app1 10 30 someattribute Chcę, aby funkcja selen przeszukała całą stronę pod kątem podanej nazwy aplikacji i jeśli ją znajdzie, chcę, aby selen pobrał wszystkie atrybuty (koszt, ważność) i przechował je w zmienna. Jak mogę to osiągnąć? Pamiętaj, że żadne z tych pól nie ma unikalnego atrybutu (takiego jak nazwa/identyfikator/inne).


title: Uwierzytelnianie użytkownika i zarządzanie sesją

text: Jednym z podstawowych sposobów obsługi uwierzytelniania logowania użytkownika i zarządzania sesją jest przechowywanie zmiennych w przestrzeni sesji oraz ustawianie niektórych danych w plikach cookie na komputerze klienta, a czasami również w bazie danych. Używam tej prostszej techniki w wielu moich akademickich, a także w kilku projektach internetowych. Ale nie jestem tego pewien. Czy strony internetowe o krytycznym znaczeniu dla bezpieczeństwa, takie jak Amazon, Gmail lub Facebook, wykorzystują tę samą technikę logowania użytkowników i zarządzania sesjami, czy może jest w tym coś więcej, niż wiedziałem? To może okazać się bardzo ogólne pytanie, ale naprawdę chciałbym wiedzieć, czy istnieją inne lub różne sposoby (na przykład w gmail, stackexchange lub myspace) do obsługi uwierzytelniania logowania użytkownika i zarządzania sesją w szczególności.


title: Mocowanie złożonych operacji na danych w testach integracyjnych

text: Mamy pewne problemy ze znalezieniem sposobu na mockowanie złożonych danych i operacji na nich. Najpierw problemy z generowaniem złożonych danych: W jednym z naszych komponentów mamy naprawdę złożone struktury danych, w których realizowana jest logika naszych klas. Niestety istnieją pewne błędy, w których konieczne jest użycie modelu big data w celu odtworzenia przypadku w teście jednostkowym lub integracyjnym. Pierwszym pomysłem było napisanie skryptu, który konwertuje model na kod wykonywalny, za pomocą którego można generować dane. Aby pokazać złożoność modeli, te przekonwertowane modele miały 20000++ linii kodu na model. Problem z pierwszym podejściem polegał na tym, że mieliśmy kilka małych błędów w naszym skrypcie i za każdym razem, gdy je zidentyfikowaliśmy, musieliśmy przepisać wszystkie modele. To nie był dobry pomysł. Drugim pomysłem jest wykorzystanie plików xml, w których są zapisane. Przed rozpoczęciem testu używamy klasy do konwersji pliku xml na model. Wynik jest lepszy niż pierwszy pomysł, ale dzięki temu nigdy nie będziemy mieli zwykłych testów jednostkowych, ponieważ zawsze polegamy na klasie użytej do konwersji. Czy ktoś ma lepszy pomysł, jak sobie z tym poradzić? Drugi problem jest jeszcze trudniejszy do rozwiązania: Manipulacja tymi złożonymi danymi. Mamy test integracyjny innego komponentu i chcemy zakpić wszystkie jego zależności. W jakiś sposób tworzymy początkowe dane używane przez komponent (jakiś rodzaj AST). Teraz mamy składnik sprawdzania składni jako zależność. Ten składnik pobiera dane i ozdabia dane. W końcu w teście mamy inny zmanipulowany AST. Tutaj nie mamy pojęcia, jak zakpić to zachowanie sprawdzania składni. Z pozdrowieniami, Yggdrasil


title: Czy są jakieś badania empiryczne dotyczące wpływu różnych języków na jakość oprogramowania?

text: Zwolennicy języków programowania funkcjonalnego twierdzą, że programowanie funkcjonalne ułatwia wnioskowanie o kodzie. Zwolennicy języków z typami statycznymi twierdzą, że ich kompilatory wychwytują wystarczającą liczbę błędów, aby nadrobić dodatkową złożoność systemów typów. Ale wszystko, co czytam na te tematy, opiera się na racjonalnych argumentach, a nie na danych empirycznych. Czy są jakieś badania empiryczne dotyczące wpływu różnych kategorii języków programowania na wskaźniki defektów lub inne wskaźniki jakości? (Odpowiedzi na to pytanie zdają się wskazywać, że nie ma takich badań, przynajmniej nie dla debaty dynamicznej i statycznej)


title: Czy powinienem dołączyć do CV projekty OS na licencji GPL?

text: Niedawno rozmawiałem z kimś o tym, jak włączyć projekty open source do mojego CV. Chciałem dołączyć mój projekt, w który zainwestowałem znaczną ilość kodu i czasu: ~40 000 linii kodu i 8 miesięcy. Odradzał to jednak, ponieważ jest to GPL, mówiąc, że może to wyłączyć rekruterów, ponieważ mogę włączyć mój projekt (w części lub całości) podczas pracy tam i zmusić cały projekt do systemu operacyjnego. Po prostu nie sądzę, że to realistyczny problem, ale nie jestem pewien. Tak więc moje pytanie: czy mogę bezpiecznie umieszczać projekty systemu operacyjnego na licencji GPL w moim CV, czy po prostu wyłączy to rekrutację?


title: Dlaczego w niektórych językach programowania nadal występuje rozróżnianie wielkości liter?

text: Nie widzę żadnego zastosowania rozróżniania wielkości liter w języku programowania, poza zaciemnianiem kodu. Po co implementować to w języku programowania? **Aktualizacja:** wygląda na to, że ktoś, kogo znasz, złożył oświadczenie w tej sprawie.


title: Co powiedzieć, gdy nie znasz odpowiedzi na pytanie z rozmowy kwalifikacyjnej?

text: Kiedy nie masz pojęcia o pytaniu, jak odpowiadasz/działasz, gdy w ogóle nie znasz odpowiedzi? Mówienie prawdy jest dość oczywiste. Ale jak mógłbyś spróbować przekształcić tę słabość w siłę?


title: Jak sprawić, by wiele projektów open-source używało standardowego sposobu robienia czegoś?

text: **\- Problem** W ciągu ostatnich kilku tygodni używałem 3 różnych narzędzi „repozytorium” (wymienionych w kolejności alfabetycznej): * gradle * ivy * maven Nazywam je narzędziami „repozytorium”, ponieważ również używany sbt \-- który na szczęście używa bluszczu do zarządzania swoją pamięcią podręczną lub lokalnym repozytorium. Każde z tych narzędzi stworzy swoje własne repozytorium. Domyślne ustawienia to: * ~/.m2/repository for maven * ~/.gradle/cache * ~/.ivy2/cache Dlaczego nie wszystkie mogą używać tej samej pamięci podręcznej? **\- Cel** Chciałbym zmienić świat tak, aby wszystkie trzy narzędzia do budowania mogły korzystać z tej samej pamięci podręcznej. Szukam porady na temat problemów, które prawdopodobnie napotkam, i sprytnych sposobów ich obejścia. Przez „użyj tej samej pamięci podręcznej” **_nie_** mam na myśli „pobieranie z pamięci podręcznej innego narzędzia do budowania”. Mam na myśli "**pobierz i _przechowuj w_** pamięć podręczną innego narzędzia do budowania". Chociaż mogłem iść dalej i zgłaszać problemy do trzech projektów, wiem z doświadczenia (jako programista w projekcie open source), że jeśli chcesz coś zrobić, najlepiej zrobić to sam. Poza tym wydaje mi się, że do pewnego stopnia muszę zaangażować wszystkie 3 społeczności. **\- Pytanie** **Jakie jest zalecane podejście do tego rodzaju zadań?** Jak mam podejść do różnych społeczności? Czy pracuję nad łatami dla 3 różnych projektów, czy też lepiej byłoby stworzyć własny projekt „interfejsu”, który zajmuje się tymi problemami i ma z tym interfejsem 3 narzędzia? Czy jest to pytanie dotyczące standardów, którym muszę się zająć na tym froncie? Na koniec, jeśli czegoś mi brakuje, a _jest_ to możliwe (w sposób globalnie konfigurowalny), proszę daj mi znać.


title: Czy zmiana wielkości liter na wyliczenie jest złą praktyką?

text: Mam wyliczenie z poleceniami `Play`, `Stop` i `Pause` dla odtwarzacza multimedialnego. Na dwóch zajęciach wykonuję switch-case nad otrzymanymi poleceniami. Odtwarzacz działa w innym wątku i dostarczam polecenia w kolejce poleceń do wątku. Jeśli generuję diagramy klas, wyliczenie ma zależności w każdym miejscu. Czy istnieje lepszy sposób radzenia sobie z poleceniami? Gdybym miał zmienić/rozszerzyć wyliczenie, musiałbym zmienić kilka klas. (Nie jest bardzo ważne, aby odtwarzacz był rozszerzalny, ale staram się pisać ładne oprogramowanie.)


title: Szkielet i JavaScript

text: Programuję w JavaScript od nieco ponad dwóch lat, nadal jestem w pośredniej części spektrum know-how. Niedawno odkryłem Backbone i uwielbiam jego minimalistyczny sposób, a sposób, w jaki daje mi swobodę decydowania o tym, jak zaprojektować moją aplikację, problem polega na tym, że to jest problem, znalezienie najlepszego lub przynajmniej optymalnego rozwiązania, które działa dla różnorodność problemów na całej planszy jest trudna. Szczególnie w przypadku aplikacji ze złożonymi interakcjami interfejsu użytkownika (w zasadzie rzeczy, które mają wiele dzwonków i gwizdów, na przykład Stack Exchange). Mój problem dotyczy nie tyle samej architektury, co sposobu organizowania moich komponentów i widoków w taki sposób, aby mogły się ze sobą komunikować, pozostając „całkowicie” nieświadome szczegółów ich istnienia. W tym celu postanowiłem połączyć Wzorzec modułu (najlepiej jego reprezentacja) i trzy inne wzorce oparte na zdarzeniach, tj. Emiter zdarzeń, Pub-Sub i Promises (również reprezentacje nie idealne). Opracowałem klasę aplikacji o nazwie Itajs na szczycie Backbone, aby pomóc mi zrozumieć lub przynajmniej kontrolować wykonywanie moich aplikacji. Klasa aplikacji zapewnia sposoby definiowania modułów zwanych mediatorami, trasami i używa pojedynczego routera szkieletowego, zapewnia również sposób subskrybowania poleceń i uruchamiania/publikowania tych poleceń, a także dodałem trzy opcjonalne komponenty (Entities, Controllers i PageMakers) . Jedną rzeczą, której chciałem dla moich aplikacji, było to, aby ich widoki pozostały jak najmniejsze i powinny zależeć tylko od interakcji użytkownika, więc nie wysyłają żadnych żądań danych, po prostu uruchamiają zdarzenia (emitery zdarzeń), a kontrolery dbają obsługi zdarzeń, czyli jeśli używasz kontrolerów. Kontrolerzy powinni dbać o tworzenie i kontrolowanie widoków oraz obsługę emitowanych przez nich zdarzeń, a także pobierać dane i implementować logikę aplikacji, ta logika może z kolei być przekazywana do modeli (jeśli jesteś wobec niej religijny), więc że kontrolerzy stają się po prostu gloryfikowanymi akcesorami do danych, The PageMakers są po to, aby tworzyć strony tak, jak sugeruje ich nazwa, używam ich do odpowiadania na żądania routingu, które są odpowiedzialne za nowe strony. Jednostki odpowiedzialne są za ładowanie kolekcji i modeli oraz odpowiadanie na żądania danych, obsługują komunikację klient-serwer. Po zrobieniu tego wszystkiego zdałem sobie sprawę, że będę potrzebował sposobu na zsynchronizowanie komponentów aplikacji w sposób zserializowany, więc wymyśliłem coś, co nazywam ścisłą obietnicą, co oznacza, że najpierw ustaliliśmy, co się stanie, gdy obietnica zostanie rozwiązana lub odrzucona, a następnie odpal obietnicę, która dla mojej architektury jest tylko rozkazem. Dla Clarity gdybym nie miał sensu tutaj jest podział na wykonanie typowej aplikacji, która używa wszystkich komponentów * Utwórz instancję aplikacji * Załaduj konfigurację, * Załaduj wszystkie encje, * Załaduj wszystkie mediatory przy każdym obciążeniu mediatora Kontrolery, PageMakers i co nie subskrybuj poleceń i nie rejestruj Tras End Podczas wykonywania aplikacji: OnRoute: Wywołanie obsługi strony PageMaker Fire Tworzenie i ładowanie różnych widoków za pomocą pojedynczych poleceń lub Tworzenie i uruchamianie łańcucha obietnicy Kontrolery Tworzenie widoków, rejestracja do obsługi zdarzeń i polecenie odpowiedzi na ogień dla akcja po zakończeniu, przekazywanie widoku lub innych programów obsługi args może wymagać OnCommand: Zrób wszystko, co może być wykonywane przez obsługę, po prostu upewnij się, że nie zostaniesz złapany w niekończącą się rekursję lub cykl. Oto link do pojemnika na wklejanie do przypadku Itajs i Simple Use z mediatorem. Przykład Itajsa PS Itajs używa zdarzeń szkieletowych i coś, co naprawdę mnie rozbawiło, to fakt, że szkielet nie rejestruje zduplikowanych programów obsługi zdarzeń, więc nie ma obaw o zduplikowane moduły obsługi zdarzeń kontrolera w widokach. Również widoki szkieletowe rozszerzają zdarzenia szkieletowe, a zatem same emitują zdarzenia. Pytanie brzmi, czy jest to rozwiązanie, które może działać i czy wdrażam szczegóły we właściwy sposób, szczególnie obietnice, czy też zamykam się w trybie synchronicznym, w którym próbuję się wyrwać?


title: Gramatyka: początek: (a b)? c; Wejście: re. Który błąd jest poprawny w pozycji 2? 1. oczekiwane „b”, „c”. LUB oczekiwano „c”

text: Piszę parser (generator parserów dla PEG) i próbuję dowiedzieć się, jak zgłaszać błędy. Gramatyka: reguła: (a b)? c ; Wejście: a d Pytanie: Który komunikat o błędzie jest prawidłowy w pozycji 2 dla danego wejścia? 1. oczekiwane „b”, „c”. 2. oczekiwane „c”. Czy należy więc wziąć pod uwagę, że na pozycji oczekiwano również „b”? Pierwszy błąd (oczekiwane „b”, „c”) mówi, że wejście „a b” było oczekiwane, ale ponieważ jest opcjonalne, jest to tylko możliwość, a nie wymaganie. Nie wiem, czy możliwe jest takie samo, jak oczekiwano, czy nie? Który komunikat o błędzie jest lepszy i poprawny: pierwsza czy druga wersja? Dzięki za odpowiedzi. ## Część druga W pierwszym przypadku definiuję znacznik `testowania` jako granicę pozycji. if(_inputPos > testowanie) { _failure(_inputPos, _code[cp + {{OFFSET_RESULT}}]); } Limit przeniesiony w wyrażeniach opcjonalnych: WYRAŻENIE_OPCJONALNE: testing = _inputPos; Wyrażenie „b” przenosi `_inputPos` nad pozycję `testing` i dodaje błąd w `_inputPos`. W drugim przypadku mogę zdefiniować znacznik `testing` jako flagę logiczną. if(!testing) { _failure(_inputPos, _code[cp + {{OFFSET_RESULT}}]); } Wyrażenie "b" w tym przypadku nie dodaje niepowodzenia, ponieważ zostało przetestowane (wewnętrzne dla wyrażenia opcjonalnego). Co myślisz, co jest lepsze i poprawne? 1. Testowanie definiowane jako konkretna pozycja i jeśli wyrażenie powyżej tej pozycji (_inputPos > testowanie) dodaje niepowodzenie (nawet wewnątrz wyrażenia opcjonalnego). 2. Testowanie zdefiniowane jako flaga i jeśli ta flaga jest ustawiona, awarie nie są uwzględniane. Po wykonaniu wyrażenia opcjonalnego przywraca (nie resetuje!) poprzednią wartość testu (prawda lub fałsz). Również niepowodzenia nie są brane pod uwagę, jeśli reguła nie zawodzi. Zgłaszali tylko wtedy, gdy parsowanie się nie powiedzie. ## Część trzecia To pytanie postawione, ponieważ dotyczyło dwóch różnych problemów. Pierwszy problem: Gramatyka wyrażeń parsowania (PEG) opisuje dane wejściowe tylko w trzech elementach atomowych: * symbol terminala * symbol nieterminalny * pusty ciąg Gramatyka nie używa leksykacza, stąd pojęcie „tokenu” nie ma tu zastosowania. Drugi problem: co to jest gramatyka? Czy dwie gramatyki można uznać za równe, jeśli akceptują te same dane wejściowe, ale dają różne wyniki? Załóżmy, że mamy dwie gramatyki: Grammar 1 rule <- type? Identyfikator Reguła gramatyki 2 <- typ identyfikator / identyfikator Obie akceptują te same dane wejściowe, ale dają (w PEG) inny wynik. Wyniki gramatyki 1: * `{typ: typ, identyfikator: identyfikator}` * `{typ: null, identyfikator: identyfikator}` Wyniki gramatyki 2: * `{typ: typ, identyfikator: identyfikator}` * `{identyfikator: identyfikator }` Pytania: * Czy obie gramatyki są równe? * Czy optymalizacja gramatyk jest bezbolesna? Moja odpowiedź na oba pytania jest negatywna. Nie równy, nie bezbolesny. Ale możesz zapytać. "Ale dlaczego tak się dzieje?". Mogę ci odpowiedzieć. „Bo to nie jest problem. To jest funkcja”. W gramatyce PEG każda reguła _zawsze_ składa się z następujących części: * wybór uporządkowany * sekwencja * wyrażenie A to wyjaśnienie jest moją odpowiedzią na pytanie "Ale dlaczego tak się dzieje?". Kolejny problem. Ponieważ PEG nie ma tokenów, białe znaki nie mogą być po cichu ignorowane w lekserze między tokenami. Dlatego w gramatyce należy uwzględnić odstępy. Teraz spójrz na tę gramatykę (w skrócie): program <- WHITESPACE expr EOF expr <- ruleX ruleX <- 'X' WHITESPACE WHITESPACE <- ' '? EOF <- ! . Pierwsza „WHITESPACE” znajduje się na początku, druga „WHITESPACE” (często) występuje na końcu reguły. W tym przypadku w PEG zgodnie z oczekiwaniami należy przyjąć opcjonalny `WHITESPACE`. Ale `WHITESPACE` oznacza nie tylko spację (`\x20`), ale także inne znaki, takie jak `[\t\n\r]`, a nawet komentarze. Ale główna zasada komunikatów o błędach jest następująca. > Jeśli nie jest możliwe wyświetlenie wszystkich oczekiwanych elementów (lub nie można > wyświetlić przynajmniej jednego z wszystkich oczekiwanych elementów) to bardziej poprawne jest > nie wyświetlać niczego. Dokładniej wymagane do wyświetlenia komunikatu o „nieoczekiwanym” błędzie. Jak więc wyświetlić w komunikacie o błędzie PEG, że oczekiwano „WHITESPACE”? * `Błąd parsera: oczekiwano WHITESPACE` * `Błąd parsera: oczekiwano ' ', '\t', '\n' , 'r'` A co ze znakami początkowymi komentarzy? Mogą również być częścią `WHITESPACE` w niektórych gramatykach. W takim przypadku opcjonalny WHITESPACE odrzuci wszystkie inne potencjalne oczekiwane elementy, ponieważ nie jest możliwe poprawne wyświetlenie WHITESPACE w komunikacie o błędzie, ponieważ WHITESPACE jest zbyt złożona do wyświetlenia. Czy to dobrze, czy źle? Myślę, że to nie jest złe i wymagało kilku sztuczek, aby ukryć tę naturę parserów PEG. A w moim parserze PEG nie zakładam, że wyrażenie wewnętrzne na pierwszej pozycji wyrażenia opcjonalnego (opcjonalnego i zero_lub_więcej) musi być traktowane zgodnie z oczekiwaniami. Ale wszystkie inne wewnętrzne (z wyjątkiem pierwszej pozycji) muszą być traktowane zgodnie z oczekiwaniami. Przykład 1: Lista<int lista; // rodzaj? ident Tutaj "Lista" nie znajduje się na pierwszej pozycji w opcjonalnym "type?". To niepowodzenie jest brane pod uwagę i zgłaszane jako „oczekiwane '>'”. Dzieje się tak dlatego, że nie pomijamy `type` ale wchodzimy do `type` i po naprawdę opcjonalnej "List" przenosimy pozycję z pierwszego do następnego rzeczywistego "oczekiwanego" elementu (który jest już poza pozycją testową). „Lista” znajdowała się w pozycji „testowanie”. Jeśli wyrażenie wewnętrzne (wewnątrz wyrażenia opcjonalnego) „pasuje do ograniczenia” nie jest kontynuowane w następnej pozycji, to nie jest przyjmowane jako oczekiwane dane wejściowe. Z tego założenia zadano główne pytanie. Musisz tylko wziąć pod uwagę, że mówimy o parserach PEG i ich komunikatach o błędach.


title: Czy oszacowanie czasu równa się obietnicy w Scrumie?

text: Jeśli kosztorys nie jest obietnicą, to jako właściciel produktu, jak mogę dostarczyć moje projekty, nie wiedząc, jak długo to potrwa? Czy zespół Scrumowy pracuje wydajniej, jeśli traktujemy szacowanie czasu jako obietnicę? Ile badań (przygotowania, wysiłku, aby zrozumieć problem) w opowiadaniu wystarczy, aby uzyskać prawidłowe oszacowanie? A co z nieoczekiwanymi problemami technicznymi (problemami, które naprawdę mogą zepsuć początkowe szacunki), które pojawiają się po oszacowaniu swojej pracy?


title: Usługa WCF do pobierania kanału atomowego

text: Jestem bardzo nowy w programowaniu, a moim pierwszym zadaniem jest stworzenie usługi WCF, która pobierze kanał ATOM i udostępni go mojej aplikacji. Teraz przeczytałem na temat serializacji i syndykacji XML, ale wydaje się, że nie jest to, czego potrzebuję w moim (braku) doświadczeniu. Oto fragment kanału. Jest generowany przez spi <atom:generator version="1.2" lconn:version="4.5.0.0"> System zaplecza usługi listy nasion</atom:generator> <wplc:timestamp isPartial="false">AAABQtdnfpE=</wplc :timestamp> <atom:category term="ContentSourceType/Wikis" schema="com.ibm.wplc.taxonomy://feature_taxonomy" label="Wikis"/> <atom:title>Wikis : 0 wpisów listy nasion WIKIS</ atom:title> <atom:updated>2013-12-09T13:49:13+01:00</atom:updated> Czy muszę tworzyć obiekty dla wszystkich tych elementów? A co z tymi elementami wplc? <wplc:action do="update"/> <wplc:fieldInfo id="FIELD_ENTRY_TYPE" name="typ elementu" description="typ elementu — strona, plik lub wiki" type="string" contentSearchable="false" fieldSearchable= "true" parametric="false" returnable="true" sortable="false" obsługujeExactMatch="false"/> <wplc:fieldInfo id="FIELD_TAG" name="Tag" description="tag dokumentu" type="string" contentSearchable="true" fieldSearchable="true" parametric="false" returnable="true" sortable="false" supportExactMatch="true"/> Wszystkie przykłady, samouczki i wyjaśnienia, które znajdę, pochodzą z prostych plików xml. użyć czytnika XML, aby to osiągnąć? A jeśli tak, to potrzebuję pomocy. Oto przykładowy WCF, który znalazłem: public class Service1 : IService1 { public string GetData(string value) { WebRequest request = WebRequest.Create("http://wheremyxmlis/file.xml"); Odpowiedź WebResponse = request.GetResponse(); Strumień dataStream = odpowiedź.GetResponseStream(); Czytnik XmlReader = XmlReader.Create("http://wheremyxmlis/file.xml"); czytnik = new XmlTextReader("http://wheremyxmlis.xml"); spróbuj { reader = new XmlTextReader("http://wheremyxmlis/file.xml"); while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: Console.Write("<{0}>", reader.Name); przerwanie; case XmlNodeType.Text: Console.Write(reader.Value); przerwanie; case XmlNodeType.CDATA: Console.Write("<![CDATA[{0}]]>", reader.Value); przerwanie; case XmlNodeType.ProcessingInstruction: Console.Write("<?{0} {1}?>", reader.Name, reader.Value); przerwanie; case XmlNodeType.Comment: Console.Write("<!--{0}-->", reader.Value); przerwanie; case XmlNodeType.XmlDeclaration: Console.Write("<?xml version='1.0'?>"); przerwanie; case XmlNodeType.Document: przerwa; case XmlNodeType.DocumentType: Console.Write("<!DOCTYPE {0} [{1}]", reader.Name, reader.Value); przerwanie; case XmlNodeType.EntityReference: Console.Write(reader.Name); przerwanie; case XmlNodeType.EndElement: Console.Write("</{0}>", reader.Name); przerwanie; } } } wreszcie { if (reader != null) reader.Close(); odpowiedź.Zamknij();