title: Czy BDD jest skalowalny dla średnich i dużych projektów?

text: W każdej witrynie, którą czytasz o BDD (Behaviour Driven Development) znajdziesz bardzo prosty, ładny przykład pokazujący, jak oczywiste i łatwe jest zdefiniowanie Twoich wymagań. Ale próba zaimplementowania tego procesu w dużym produkcie (nie w przykładzie kalkulatora) pokazała mi, że rzeczy mogą stać się (lub staną się) dość złożone i nieczytelne; zwłaszcza zmiana żądań w późniejszym momencie oznacza dużo pracy, aby poprawić testy integracyjne pod tym kątem. Zastanawiam się więc, czy BDD naprawdę jest tego warte? Czy to rozwiązuje problem, którego nie rozwiązują inne techniki?


title: Łączenie KanBan w procesie SCRUM

text: Czy ktoś ma doświadczenie w łączeniu KanBana w SCRUM, czy to zadziała, czy to ma sens, czy będzie to przesadny projekt?


title: Alternatywa dla funkcji simplexml_load_string()

text: Używam `simplexml_load_string` do interpretacji ciągów xml do obiektu z wyników API REST. Działa dobrze na moim lokalnym serwerze, który używa PHP5. Ale mój hosting jest w Yahoo, a dostawca usług daje mi PHP4. W tym celu muszę zmienić sposób interpretacji ciągu XML, aby sprzeciwić się innej metodzie, której nie wiem, jak to zrobić.


title: Dlaczego ~0 jest sekwencją 1s

text: Dlaczego `~0` jest sekwencją bitów `1`, a nie tylko pojedynczym bitem? Skąd pochodzą dodatkowe bity „1”? Czy oznacza to „~1” sekwencję bitów „0”, czy tylko jeden bit „0”? Zrozumiałem, że operator `~` jest stosowany do określonych wymienionych bitów.


title: IntelliJ IDEA vs phpStorm na rozwój projektów PHP?

text: Jestem programistą Java, a teraz używam **IntelliJ IDEA Ultimate Edition**. Czy warto kupować **phpStorm** do tworzenia projektów PHP? Czy są też jakieś inne funkcje dla programistów PHP, których **IDEA** nie ma? Z góry dziękuję!


title: jak zapobiec mieszaniu się programu Visual Studio z wcięciami mojego kodu?

text: Visual Studio 2010 automatycznie zmienia wcięcia mojego kodu z tego :: public void fetchWebserviceCounters() { csv = new StringBuilder(); try { Category = new PerformanceCounterCategory("Usługa sieciowa"); foreach (Instancja String w Category.GetInstanceNames()) { counters = Category.GetCounters(instance); foreach (Licznik wydajności w licznikach) { if (counter.CounterName == "Całkowita liczba wysłanych bajtów" | counter.CounterName == "Całkowita liczba otrzymanych bajtów") { csv.Append(counter.CounterName + ","); csv.Append(licznik.NastępnaWartość().ToString() + ", "); } } } } catch (Wyjątek e) { Console.WriteLine(e.Message); } Konsola.Write(csv.ToString()); } do tego publicznego void fetchWebserviceCounters() { csv = new StringBuilder(); try { Category = new PerformanceCounterCategory("Usługa sieciowa"); foreach (Instancja String w Category.GetInstanceNames()) { counters = Category.GetCounters(instance); foreach (Licznik wydajności w licznikach) { if (counter.CounterName == "Całkowita liczba wysłanych bajtów" | counter.CounterName == "Całkowita liczba otrzymanych bajtów") { csv.Append(counter.CounterName + ","); csv.Append(licznik.NastępnaWartość().ToString() + ", "); } } } } catch (Wyjątek e) { Console.WriteLine(e.Message); } Konsola.Write(csv.ToString()); } **Jak mogę uniemożliwić Visual Studio wykonanie tego w moim kodzie**


title: Odwróć poziome i pionowe dla tabeli HTML

text: Istnieje dwuwymiarowa tablica opisująca tabelę HTML. Każdy element tablicy składa się z: * zawartości komórki * rowspan * colspan Każdy wiersz tej dwuwymiarowej tablicy odpowiada `<td>` komórkom `<tr>` tabeli, którą moje oprogramowanie powinno wygenerować. Muszę "odwrócić" tablicę (zamienić kierunek pionowy i poziomy). Do tej pory rozważałem algorytm oparty na tej idei: zrób prostokątną macierz wielkości tabeli i zapisz w każdym elemencie tej macierzy odpowiedni indeks elementu ww. tablicy. (Zauważ, że dwa elementy macierzy mogą być identyczne ze względu na zakres wierszy/colspan.) Następnie mógłbym użyć tej macierzy do obliczenia zakresu wierszy/colspan dla tabeli odwróconej. Ale ten pomysł wydaje mi się zły. Jakieś inne algorytmy? Zauważ, że programuję w PHP.


title: W jaki sposób kod „Goal Tending” powinien być obsługiwany przez kierownika ds. rozwoju?

text: Najpierw pozwól mi ukuć termin: > _**code goal-tending:** sprawdzanie kodu rano, a następnie po cichu > przeglądanie wszystkich zmian wprowadzonych przez innych programistów poprzedniego dnia > plik po pliku (szczególnie kod pliki, które pierwotnie stworzyłeś) i naprawianie > formatowania, logiki, zmiany nazw zmiennych, refaktoryzacji długich metod itp., a następnie > zatwierdzania zmian w VCS._ Ta praktyka ma kilka zalet i wad, które zidentyfikowałem: * **Pro** : Jakość/czytelność/spójność kodu jest często utrzymywana * **Pro** : Niektóre błędy zostały naprawione, ponieważ inny programista nie był zbyt zaznajomiony z oryginalnym kodem. * **Con** : to często strata czasu twórcy celu. * **Con** : _Okazjonalnie_ wprowadza błędy, które wywołują wściekłość deweloperów, którzy myśleli, że napisali kod wolny od błędów poprzedniego dnia. * **Wada** : inni programiści denerwują się nadmiernym szukaniem szczegółów i zaczynają nie lubić wnosić wkładu w kod przetargu. Zastrzeżenie: Aby być uczciwym, nie jestem w rzeczywistości kierownikiem ds. rozwoju, jestem programistą, który faktycznie zajmuje się „obsługą celów”. Na swoją obronę _myślę_, że robię to z dobrego powodu (aby utrzymać naszą niezwykle dużą bazę kodu w dobrze naoliwionej maszynie), ale jestem bardzo zaniepokojony, że tworzy to również negatywną atmosferę. Jestem też zdecydowanie zaniepokojony tym, że mój menedżer będzie musiał zająć się tą kwestią. **Więc, gdybyś był menedżerem, jak rozwiązałbyś ten problem?** AKTUALIZACJA: Nie chcę, żeby to było zbyt zlokalizowane, ale niektórzy pytali, więc może trochę tła się rozjaśni. Trzy lata temu przydzielono mi gigantyczny projekt (200K LoC), a dopiero niedawno (1 rok temu) do projektu zostali dodani dodatkowi programiści, z których niektórzy nie są zaznajomieni z architekturą, inni wciąż uczą się języka (C#). Generalnie muszę odpowiadać za ogólną stabilność produktu i jestem szczególnie zdenerwowany, gdy zaskakująco wprowadzane są zmiany w podstawowych częściach architektury kodu. Ten nawyk pojawił się, ponieważ na początku byłem optymistą co do wkładu innych programistów, ale popełnili oni zbyt wiele błędów, które spowodowały poważne problemy, które zostały wykryte dopiero kilka tygodni później, gdzie wskazywano by palcem na mnie za pisanie niestabilnego kodu. Często te „niespodzianki” są popełniane przez chętnego menedżera lub współpracownika, który jest jeszcze w fazie uczenia się. I to prawdopodobnie doprowadzi do odpowiedzi: w ogóle nie mamy polityki przeglądu kodu.


title: Scala/SBT — dokumentowanie zmiany konfiguracji dla wydań

text: Próbuję zebrać różne sposoby zarządzania konfiguracją w wielu środowiskach. Mam wymóg udokumentowania zmian w konfiguracji planu wdrożenia. Wartości deweloperskie są wartościami domyślnymi w kodzie, a kontrola jakości zarządza również ich własnymi, więc dokumentowanie i udostępnianie informacji jest punktem krytycznym. Zamiast kopiować/wklejać różnice w biletach, zastanawiam się, czy jest na to ostrzejszy sposób. Przechowywanie wielu kopii konfiguracji dla każdego środowiska wydaje się być rozbieżną zmianą. Ręczne dokumentowanie to po prostu ciężka praca i bardzo podatna na błędy. Powinny być kopiowane/nadające się do wklejania. Myślę, że szablonowanie może być opcją, ale nie jestem pewien, jak podłączyć to do kompilacji. Niestandardowy kod jest w porządku, więc myślę, że w razie potrzeby moglibyśmy stworzyć nowy cel kompilacji. Używanie scala/sbt, ale rozwiązania maven lub jakiegokolwiek innego byłoby w porządku, ponieważ można je przetłumaczyć.


title: Upewnij się, że dane wprowadzane przez użytkowników są dopasowane do tego, co faktycznie jest

text: Powiedziałbym, że jest to raczej problem z użytecznością, patrząc na sugestie. Mam system, który zależy od poprawności wprowadzonych przez użytkowników danych, jak w adresie istnieje, nazwa jest poprawna itd. To wszystko dla miejsc. Teraz pomyślałem, że mogę to zrobić, że każdy wpis jest recenzowany, tak jak w przypadku 5 innych użytkowników, którzy sprawdzają i upewniają się, że dane są poprawne, zanim pozwolą na ich indeksowanie i przeglądanie w witrynie. Problem z tym podejściem polega na tym, że strona nie jest taką, w której użytkownicy będą długo mieszkać, wystarczy zalogować się, poszukać miejsca i to wszystko, więc mogą nie być skłonni do sprawdzania poprawności wpisów innych użytkowników. Co o tym sądzisz, czy ktoś może zaproponować rozwiązanie, które może dopasować się do mojej sytuacji?


title: OOP — jak obsługiwać wiele wystąpień klasy

text: Jaki jest preferowany sposób obsługi wielu instancji (obiektów) jednej klasy w programowaniu OO? Załóżmy, że chcesz napisać program, w którym na ekranie zostanie narysowana losowa liczba okręgów, w którym każdy okrąg jest instancją klasy Circle, a po kliknięciu przycisku każdy okrąg zmienia kolor. Jak byś to zrobił? Widzę dwa sposoby, aby użyć zmiennej statycznej (tablicy) w klasie zawierającej wszystkie instancje, wraz z funkcją statyczną, która przechodzi przez tę tablicę i wywołuje metodę recolor dla każdej instancji. Lub użyć tej samej zmiennej i metody, ale zamiast tego umieścić ją w osobnej klasie, być może o nazwie CircleManager.


title: Czy obszary są dobrą cechą organizacyjną, czy tylko dodatkową pracą?

text: Czy „Obszary” w ASP.NET MVC kończą się pomocą, czy tylko przeciąganiem na końcu (ze względu na konstrukcję adresu URL)? Czy nie byłoby lepiej mieć podkatalogi w głównym folderze Controllers? czy są jakieś inne możliwości zorganizowania projektu? _**EDIT_** Na przykład to jest Twój przeciętny link bez Obszarów: @Html.ActionLink("Dom","Indeks","Dom") i to jest Twój przeciętny link z Obszarami: @Html.ActionLink("Dom ","Indeks", nowy { Obszar = "", Kontroler = "Dom"}) Czy to może działać? (Główny kontroler z podkatalogami) ![Główny kontroler z podkatalogami](http://i.stack.imgur.com/6Y9N2.png) Próbuję tylko dowiedzieć się, czy warto zaimplementować obszary w projekcie, ponieważ ja również przeczytaj, że może to być problematyczne podczas korzystania z Dependency Injection. A czy istnieje alternatywa dla Obszarów?


title: Najskuteczniejszy sposób znajdowania jednostek w siatce?

text: Pracuję nad moją pierwszą grą; obrona wieży. Jak na razie idzie ładnie. Jedynym problemem, jaki mam (jak dotąd), jest to, że nie mogę znaleźć sposobu, aby skutecznie odkryć, czy istota weszła w linię wzroku wież. Do tej pory rozważałem po prostu uruchomienie każdej jednostki przez każdą znaną jednostkę i obliczenie LOS, ale to ugrzęzłoby bardzo szybko. Potem pomyślałem o stworzeniu pola ograniczającego dla każdej wieży i po jednym na każdym kroku gry, aby sprawdzić, czy coś jest w polu ograniczającym. Mam z tym ten sam problem z wydajnością. Czy ktoś może udzielić porady, aby skierować mnie na właściwe tory?


title: Czy istnieją badania dotyczące wad korzystania z systemów śledzenia problemów?

text: Nie lubię systemów śledzenia problemów, ponieważ: * Opisanie w nich problemów zajmuje zbyt dużo czasu. To zniechęca do jego używania. * Tworzysz miejsce do przechowywania swoich błędów. A jeśli jest dla nich miejsce, ludzie zwykle nie przejmują się zbytnio naprawianiem błędu, ponieważ mogą go tam umieścić, aby kiedyś ktoś mógł go naprawić (lub nie). * Z czasem listy błędów stają się tak długie, że nikt już nie może sobie z tym poradzić, co zajmuje dużo czasu. Wolę rozwiązywać problemy za pomocą karteczek samoprzylepnych na białej tablicy, rozmawiać twarzą w twarz i zabijać ważne błędy, gdy tylko się pojawią. Nie przejmuję się zbytnio śledzeniem historii błędów, ponieważ uważam, że nie jest to warte kosztów ogólnych. Czy jestem tu sam? Czy istnieją badania (książka/artykuł/cokolwiek) na temat wad (lub wielkich zalet) korzystania z systemów śledzenia problemów?


title: Czy funkcje „matematyczne” powinny być zgodne z zapisem matematycznym?

text: Przypuszczam, że to pytanie zostanie natychmiast oznaczone jako subiektywne, ale co Twoim zdaniem jest lepsze: podwójna objętość (podwójne ciśnienie, podwójne n_moli, podwójna temperatura) { powrót n_moli * BOLTZMANN_STAŁA * temperatura / ciśnienie; } lub podwójna objętość(podwójne P, podwójne n, podwójne T) { return n*R*T/P; } **Innymi słowy, czy funkcje implementujące jakieś równanie powinny być zgodne z zapisem tego równania, czy też powinny używać bardziej gadatliwych nazw?**


title: Niezależni kontrahenci zamieszczający projekty w swoim portfolio

text: Zamierzam zatrudnić niezależnych wykonawców, którzy zrobią małe fragmenty moich projektów internetowych. Czy to standard, że pozwalają im umieścić projekt w swoim portfolio? Powiedz proste zadanie debugowania, w którym konkretny problem mobilny zostanie rozwiązany w ciągu <5 godzin. Martwię się tylko, ponieważ mogłoby to potencjalnie rozwodnić portfolio mojej firmy przez umieszczenie go na liście przez każdego kontrahenta, podczas gdy w rzeczywistości większość pracy jest wykonywana przeze mnie. Staram się budować tutaj portfolio jako agencja. Myślę, że jest to ryzyko dla mojej firmy, ponieważ ciężko pracuję, aby zdobyć klientów, a chodzi o umieszczanie projektów w _moim_ portfolio. Czy się mylę tutaj? Czy jest na to standardowa polityka? Być może ograniczone zasady, zgodnie z którymi agencja musi przypisywać atrybucję? Zrobił dokładnie X dla agencji Y (link).


title: Jaki jest właściwy sposób tworzenia aplikacji Wininform z wieloma „ekranami”

text: Jaki jest właściwy sposób tworzenia aplikacji Wininform, która ma wiele „ekranów”? Na przykład próbuję napisać mały program do tworzenia kopii zapasowych (głównie dla chichotów) i zrzucam kontrolki i kontenery na formularz. Używam paneli i pól grupowych, aby oddzielić różne ekrany (np. Używam panelu do przechowywania wszystkich elementów sterujących w oknie „Ustawienia” i innego panelu, aby pokazać wszystkie bieżące kopie zapasowe, które zostały skonfigurowane ). Cóż, mój plik form.cs rozrósł się do ogromnej ilości kodu i czuję, że robię coś źle. Prawie nic nie mogę znaleźć w aktach i jestem gotowy, aby zacząć od nowa. Ten projekt był właśnie dla mnie, aby poszerzyć swoją wiedzę na temat C# i .NET, więc rozpoczęcie nowego projektu nie jest wielką sprawą.


title: Jak nauczyć się ASP.NET MVC bez uczenia się formularzy internetowych ASP.NET?

text: Przede wszystkim nie jestem web developerem, ale mogę powiedzieć, że ogólnie rozumiem różnicę między PHP, ASP.NET itp. Bawiłem się też trochę z ASP.NET i C#, jednak nie kontynuuj ścieżkę nauki. Teraz chciałbym się nauczyć ASP.NET MVC, ale nie ma książki dla początkującego w ASP.NET MVC, więc rzuciłem okiem na tutoriale, ale wydaje się, że muszę najpierw nauczyć się C# i SQL Server i HTML, jestem mam rację? Więc proszę powiedz mi, jak mogę bezpośrednio nauczyć się ASP.NET MVC (mam na myśli bez uczenia się formularzy ASP.NET Web). Czego muszę się nauczyć (możesz założyć, że jestem absolutnym początkującym). **Aktualizacja:** Prawdą jest, że mogę znaleźć samouczek ASP.NET MVC wyjaśniający ASP.NET MVC, ale kiedyś znalazłem książki o formularzach internetowych ASP.NET, które wyjaśniają SQL i C# w tym samym czasie i prowadzą Cię krok po kroku krok. W ASP.NET MVC nie wiem jak mam zacząć! Jak mogę nauczyć się języka SQL we własnym i C# we własnym, a następnie połączyć je z ASP.NET MVC!


title: Współpracownik stosuje śmieszną konwencję komentowania, jak sobie radzić?

text: Współpracownik w małym start-upie, przy którym pracuję, pisze (C++) kod w następujący sposób: // some class class SomeClass { // c'tor SomeClass(); // zrób ~JakaKlasa(); // jakaś funkcja void jakaśFunkcja(int x, int y); }; // jakaś funkcja void SomeClass::someFunction(int x, int y) { // init worker m_worker.init(); // log LOG_DEBUG("Zainicjowano pracownika"); // znajdź bieżącą pamięć podręczną auto it = m_currentCache.find(); // flush if (it->flush() == false) { // return return false } // return return true } Tak pisze 100% swojego kodu: linia odstępu, bezużyteczny komentarz, który nie mówi nic innego niż to, co jest wyraźnie powiedziane w poniższym oświadczeniu, i samo oświadczenie. To doprowadza mnie do szaleństwa. Prosta klasa napisana przez niego obejmuje 3 razy więcej niż powinna. Wygląda na dobrze skomentowaną, ale komentarze nie zawierają nowych informacji. W rzeczywistości kod jest całkowicie nieudokumentowany w jakiejkolwiek normalnej definicji „dokumentacji”. Wszystkie komentarze są tylko powtórzeniem tego, co zostało napisane w C++ w poniższym wierszu. Skonfrontowałem się z nim kilka razy na ten temat i za każdym razem wydaje się, że rozumie, co mówię, ale potem nie zmienia swojego kodowania i nie naprawia starego kodu, który jest napisany w ten sposób. Ciągle powtarzam o wyraźnych wadach pisania takiego kodu, ale nic do niego nie dociera. Inni współpracownicy nie przejmują się tym tak bardzo, a kierownictwo nie przejmuje się tym. Co ja robię? (przepraszam za tyradę)


title: Dlaczego nie powinieneś używać JDBC w apletach Java?

text: Słyszałem ludzi mówiących, że używanie JDBC (Java Database Connectivity) nie jest zalecane w apletach Java. Mówią tylko: „ze względów bezpieczeństwa”. Jakie „względy bezpieczeństwa” mają na myśli? Co zrobiłaby potencjalnie „zła osoba”, gdyby dowiedziała się o JDBC użytym w aplecie umieszczonym gdzieś na stronie internetowej? Aby uczynić swój aplet bezpiecznym, dobrze jest umieścić aplet pomiędzy apletem a bazą danych. Uważam, że większość programistów to robi, chciałbym wiedzieć dlaczego.


title: Szablony/wymagania Propozycji Projektu

text: Czy przygotowując propozycję projektu posługujesz się jakimkolwiek standardowym szablonem? Jakie funkcje/informacje należy uwzględnić? Co warto mieć w zestawie? Jakie informacje z tabliczki kotła powinienem wstawić? Czy uważasz, że jakiś wzór lub koncepcja projektowa jest szczególnie pomocna?


title: Czy podczas nauki lepiej korzystać z cudzych wtyczek czy rozwijać własne?

text: Kiedy uczyłem się programować, czy to na stażu, czy w szkole, często spotykałem się z sytuacjami, w których potrzebny jest dodatkowy program (od dość podstawowego do dość złożonego) i prawie zawsze mówiono mi, że powinienem” nie marnować czasu na opracowywanie rozwiązania i wykorzystywać coś, co już zrobił ktoś inny. Czy ma to sens, czy powinienem poświęcić czas na badania i rozwój własnych? W tej chwili robię ostatni projekt, który mam 15 tygodni do ukończenia, ale korepetytor i moi koledzy z klasy mówią mi, żebym się tym nie przejmował. Nic na to nie poradzę, ale myślę, że przepuszczam okazje.


title: Dlaczego małe, ustalone słownictwo jest postrzegane jako zaleta usług RESTful?

text: Tak więc usługa RESTful ma ustalony zestaw czasowników w swoim słowniku. Usługa sieciowa RESTful pobiera je z metod HTTP. Istnieją pewne rzekome zalety definiowania stałego słownictwa, ale tak naprawdę nie rozumiem tego. Może ktoś to wyjaśni. Dlaczego ustalone słownictwo określone przez REST jest lepsze niż dynamiczne definiowanie słownika dla każdego stanu? Na przykład, popularnym paradygmatem jest programowanie obiektowe. RPC jest opisane w celu zdefiniowania stałych interfejsów, ale nie wiem, dlaczego ludzie zakładają, że RPC jest ograniczone przez te ograniczenia. Moglibyśmy dynamicznie określić interfejs, tak jak usługa RESTful dynamicznie opisuje swoją strukturę treści. REST ma mieć tę zaletę, że może rosnąć bez rozszerzania słownictwa. Usługi RESTful rozwijają się dynamicznie, dodając kolejne zasoby. Co jest złego w rozszerzaniu usługi przez dynamiczne określanie słownika na obiekt? Dlaczego po prostu nie użyjemy metod, które są zdefiniowane w naszych obiektach jako słownictwo, a nasze usługi nie opiszą klientowi, czym są te metody i czy mają skutki uboczne? Zasadniczo mam wrażenie, że opis struktury zasobów po stronie serwera jest równoważny definicji słownictwa, ale jesteśmy wtedy zmuszeni do korzystania z ograniczonego słownictwa, w którym mamy do czynienia z tymi zasobami. Czy ustalone słownictwo naprawdę oddziela obawy klienta od obaw serwera? Na pewno muszę się zająć jakąś konfiguracją serwera, zwykle jest to lokalizacja zasobów w usługach RESTful. Narzekanie na użycie dynamicznego słownictwa wydaje się niesprawiedliwe, ponieważ i tak musimy dynamicznie rozumować, jak w jakiś sposób rozumieć tę konfigurację. Usługa RESTful opisuje przejścia, które możesz wykonać, identyfikując strukturę obiektu za pomocą hipermediów. Po prostu nie rozumiem, co sprawia, że stały słownik jest lepszy niż jakikolwiek samoopisujący się słownik dynamiczny, który z łatwością mógłby działać bardzo dobrze w usłudze podobnej do RPC. Czy to tylko słabe uzasadnienie ograniczającego słownictwa protokołu HTTP? # Refleksja Żeby rozjaśnić moje myśli trochę lepiej niż to zrobiłem. Załóżmy, że projektujesz dowolny interfejs API ogólnego przeznaczenia, może nawet nie skierowany do Internetu. Czy byłbyś szczęśliwy, gdyby ktoś powiedział, że możesz używać tylko tych nazw metod na swoich obiektach? REST nie jest ograniczony do HTTP, ale rozważ sytuację, w której każdy napisany przez Ciebie interfejs API, skierowany do Internetu lub w inny sposób składa się z obiektów zawierających metody GET POST PUT i DELETE. Więc ta metoda object.foo, którą chciałeś zdefiniować, nie jest możliwa. Musisz zdefiniować nowy obiekt o nazwie foo i wywołać jego metodę GET. Zasadniczo tak działa REST i sprawia mi to, że myślę o tym trochę nieswojo. Nie masz lepszego ogólnego zrozumienia, co robi foo, po prostu zostałeś zmuszony do stworzenia nowego obiektu dla tego, co jest zasadniczo metodą na obiekcie nadrzędnym. Co więcej, twoje API jest nie mniej złożone, po prostu ukryłeś złożoność interfejsu, tworząc więcej obiektów. Usługi sieciowe RESTful zmuszają nas do przyjęcia interfejsu, który może, ale nie musi być wystarczający w kontekście udostępnianego interfejsu API. Być może istnieje dobry powód, aby robić to w przypadku interfejsów API skierowanych do sieci, ale jest to dobry powód, aby nie przyjmować standardowych interfejsów dla każdego obiektu w każdym interfejsie API ogólnego przeznaczenia. Doceniony byłby praktyczny przykład.


title: Czy separacja poleceń/zapytań dotyczy metody, która tworzy obiekt i zwraca jego identyfikator?

text: Załóżmy, że mamy usługę, która wywołuje proces biznesowy. Ten proces wywoła warstwę danych w celu utworzenia obiektu typu A w bazie danych. Następnie musimy ponownie wywołać inną klasę warstwy danych, aby utworzyć instancję typu B w bazie danych. Musimy przekazać pewne informacje o A dla klucza obcego. W pierwszej metodzie tworzymy obiekt (modify state) i zwracamy jego ID (zapytanie) w jednej metodzie. W drugiej metodzie mamy dwie metody, jedną (createA) do zapisu i drugą (getId) do zapytania. public void PierwszaMetoda(Informacje) { var id = firstRepository.createA(info); secondRepository.createB(id); } public void SecondMethod(Info info) { firstRepository.createA(info); klucz var = firstRepository.getID(info); secondRepository.createB(klucz); } Z mojego zrozumienia wynika, że druga metoda pełniej następuje separacja zapytań poleceń. Ale uważam, że wysyłanie zapytań do bazy danych w celu uzyskania obiektu, który właśnie stworzyliśmy, jest marnotrawstwem i sprzeczne z intuicją. Jak pogodzić CQS z takim scenariuszem? Czy tylko druga metoda jest zgodna z CQS, a jeśli tak, to czy w tym przypadku lepiej ją zastosować?


title: Jak przeprowadzane są testy oprogramowania w startupach technologicznych?

text: Widziałem wiele artykułów naukowych i blogów technicznych, które chwalą się korzyściami płynącymi z testowania oprogramowania. Przekonałem się o tym. Ale ponieważ wszystkie badania nad testowaniem oprogramowania są prowadzone przez duże firmy programistyczne, nie sądzę, aby miały one zastosowanie do startupów. Ponieważ startupy mają inne potrzeby i ograniczenia niż duże firmy programistyczne. To rodziło pytania. Czy startupy technologiczne powinny pisać testy automatyczne? Jeśli tak, to czy robią to w taki sam sposób, jak duże firmy programistyczne? (test dymu, test regresji itp.) Najlepiej, jeśli możesz polecić kilka artykułów naukowych na ten temat, ponieważ sam nie mogłem znaleźć żadnego. (Muszę przyznać, że choć jestem jeszcze na początku kariery, ale nie spotkałem jeszcze startupu poważnie zaangażowanego w pisanie testów automatycznych)


title: Dlaczego Tanenbaum mylił się w debatach Tanenbaum-Torvalds?

text: Niedawno przydzielono mi lekturę z debat Tanenbauma-Torvaldsa na moich zajęciach z OS. Podczas debat Tanenbaum przewiduje: 1. Mikrojądra to przyszłość 2. x86 wyginie, a architektury RISC zdominują rynek 3. (5 lat od tego czasu) wszyscy będą korzystać z wolnego GNU OS Miałem rok kiedy odbywały się debaty, więc brakuje mi intuicji historycznej. Dlaczego te prognozy się nie spełniły? Wydaje mi się, że z perspektywy Tanenbauma są to całkiem rozsądne przewidywania przyszłości. Co się stało, że się nie spełniły?


title: Czy potrzebuję IDE do tworzenia aplikacji na Androida?

text: Po przeczytaniu kilku artykułów w Google postanowiłem rozpocząć pracę nad aplikacjami na Androida, ponieważ jest to platforma open source od Google. Chciałem więc stworzyć kilka aplikacji. Mam system Android 2.2, więc po prostu go googlowałem, aby znaleźć rzeczy i wreszcie znalazłem ten link do tworzenia aplikacji na Androida. Czy to jest link, który umożliwia mi tworzenie aplikacji, czy potrzebujemy innego IDE? Tak jak mamy gcc dla c i VC++ dla C++. Jakie inne rzeczy muszę skonfigurować, aby to zrobić?


title: Chcesz stworzyć prostą aplikację gui przy użyciu C++, ale nie wiem, czego użyć

text: Nauczyłem się C++ do punktu pośredniego i teraz chciałbym stworzyć coś poza programem konsolowym. Chciałbym stworzyć prosty program, który pobiera informacje z określonych plików tekstowych i wyświetla je w GUI. Tylko proste statystyki. Nic tak skomplikowanego jak arkusz kalkulacyjny ani nic innego. Znam również wsad i mógłbym użyć tego do rzeczy bez gui, ponieważ mogę złożyć skrypt z dużo większą szybkością niż pisanie C++. Nie mam żadnego problemu z uruchamianiem skryptów wsadowych w tle, gdy GUI otwiera się lub jest uruchomiony. Mam QT, ale uczenie się tego wydaje się być onieśmielające. To, co chciałbym zrobić, to proste rzeczy, takie jak pobieranie informacji z zewnętrznych plików, ale wydaje się to trudne w Qt. Rozumiem sygnały zdarzeń i sloty, ale biblioteka Qt jest przytłaczająca i wydaje mi się, że muszę nauczyć się wszystkiego, czego się nauczyłem, aby stworzyć aplikację konsoli C, od nowa. I nie chcę tego robić. Mam też program Visual Studio 2012. Czy powinienem zamiast tego użyć? Jakie mam tutaj opcje tworzenia prostego programu GUI w C++? Mam dość tworzenia aplikacji konsolowych. Dziękuję.


title: Zrozumienie parametrów

text: Przeczytałem to stwierdzenie: „Parametr jest używany jako rodzaj tymczasowego komunikatora, przenoszącego dane pochodzące spoza konstruktora lub metody i udostępniającego je w jego wnętrzu”. Czy to oznacza, że wartości parametrów są najpierw przechowywane w konstruktorach, a następnie przekazywane do pól? Nadal nie rozumiałem znaczenia tego. Jakieś dobre wyjaśnienie?


title: Podejście do algorytmu przydziału zasobów

text: Mamy wymóg, aby móc dopasować ludzi do lokalizacji w oparciu o dostępność i określone warunki. Załóżmy, że mam grupę ludzi, z których każda ma 3 rodzaje rzeczy, których mogą potrzebować do zaparkowania. Samochód, ciężarówka i łódź. Każda osoba wskazuje również preferowane miejsce parkingowe (wybór 1, 2 i 3). Mam też listę miejsc parkingowych, które mogą obsłużyć określoną liczbę każdej z tych rzeczy. Celem jest dopasowanie wszystkich do siebie, aby maksymalnie wykorzystać. Głównym wymaganiem jest to, że każda osoba musi mieć możliwość zaparkowania wszystkiego w tym samym miejscu LUB w ogóle nie może zaparkować. Przykład: Zaczynając od lokalizacji parkingów, które posiadam: Partia Samochody Ciężarówki Łodzie A 2 0 2 B 2 1 3 C 0 5 0 Dla osób, których mam: Osoba Samochody Ciężarówki Łodzie Wybór 1 Wybór 2 Wybór 3 Tom 2 1 0 A B C Betty 1 0 1 B C A Sam 0 2 0 C A B Pat 3 2 1 A C B Moją pierwszą myślą jest po prostu sortowanie ludzi według liczby posiadanych przez nich przedmiotów (od największego do najmniejszego). Następnie spróbuj umieścić każdy na podstawie wyboru. IE: Próbowałbym najpierw umieścić Pata (większość przedmiotów), ale nie mogłem, ponieważ żadna część nie spełnia wymagań. Potem spróbowałbym Toma, który wszedłby do Partii B. Itd. Czy znasz jakieś problemy z takim podejściem? Punkty bonusowe: czy istnieje nazwa tego typu problemu?


title: Ewolucja aplikacji: jak zarządzać i ulepszać core engine?

text: Aplikacja webowa, nad którą pracuję, istnieje już od roku, ale nadszedł czas, aby ewoluowała i jednym ze sposobów, w jaki ewoluuje, jest aplikacja wielomarkowa - w tym przypadku kilka różnych firm korzystających z aplikacji, różne szablony/treść i pewne drobne zmiany logiki biznesowej między nimi. Problem, z którym się borykam, to wdrożenie najlepszych praktyk w witrynie, w których istnieją różnice w logice biznesowej dla każdej marki. Będą one w większości bardzo powierzchowne, przy użyciu alternatywnego dostawcy listy mailingowej lub przechwyceniu dodatkowych danych w formularzu. Nie chcę mieć if(brand === x) { ... } else { ... } w całej witrynie, zwłaszcza że większość tego, co należy zmienić, można obsłużyć rozszerzając istniejącą klasę. Myślałem o kilku metodach, których można użyć do utworzenia instancji właściwej klasy, ale po prostu nie jestem pewien, która będzie najlepsza, zwłaszcza że niektóre wydają się prowadzić do powielania większej ilości kodu, niż jest to konieczne. Oto, co rozważyłem: 1) Użyj statycznego modułu ładującego podobnego do Zend_Loader, który może pobrać żądaną klasę i ma wiedzę na temat marki, a następnie może zwrócić właściwy obiekt. $klasa = App_Loader::getObject('Użytkownik', $marka); 2) Zajęcia fabryczne. Używamy ich już w aplikacji dla produktów, ale moglibyśmy wykorzystać je tutaj również w celu zapewnienia przejrzystego interfejsu dla klasy. 3) Kierowanie żądania strony do określonego kontrolera marki. Wygląda jednak na to, że powielałoby to dużo kodu/logiki. Czy jest jakiś wzór lub coś innego, co powinienem rozważyć, aby rozwiązać ten problem? 4) Jak zarządzać rosnącym projektem, który ma wiele niestandardowych instancji w produkcji? _Aktualizacja_ Jest to aplikacja PHP, więc decyzje o tym, którą klasę załadować są podejmowane na żądanie. Może działać ponad 100 różnych „marek”.


title: Najlepsze praktyki tworzenia systemu rejestracji produktów?

text: Jakie praktyki powinienem zastosować w tworzonym przeze mnie systemie rejestracji produktów? Prawdopodobnie nie mogę powstrzymać wszystkich złośliwych ataków hakerskich, ale chciałbym je bardzo spowolnić. (Uwaga, znam tylko PHP.) Mówię o takich rzeczach jak szyfrowanie ruchu, testowanie szyfrowania przed hakowaniem, jak atak typu man-in-the-middle, itp. Innym problemem, który mam, jest to, że to musi działać na większości Środowiska hostingowe oparte na PHP5, które mogą nie mieć zainstalowanego mcrypt.


title: W czym grafowe magazyny danych radzą sobie lepiej niż inne magazyny danych i dlaczego?

text: Tam, gdzie wcześniej istniały tylko relacyjne bazy danych, świat magazynów danych jest teraz pełen opcji takich jak magazyny danych typu klucz-wartość, dokumenty i wykresy. Niestety, każdy datastore lubi pokazywać, jak można go wykorzystać do _wszystkich_ rzeczy_ , ale żaden z nich tak naprawdę nie pomaga ludziom ustalić, kiedy użyć jednego modelu zamiast innego. Pytanie więc brzmi: **W jakich „rzeczach” wykresowe magazyny danych są lepsze niż relacyjne magazyny danych?** (tj. szybsze, prostsze, bardziej elastyczne, wydajniejsze) **Co sprawia, że są one lepsze w robieniu tych rzeczy?**


title: Jakie jest najlepsze podejście do przechowywania wielowymiarowej tablicy z nieznanymi granicami?

text: Próbuję przechowywać treści zeskrobane z kilku witryn z tekstami i akordami w osobnych zmiennych w tablicy wielowymiarowej lub w osobnych tablicach ciągów, ale utknąłem, próbując różnych podejść. Przeszukałem witrynę i znalazłem wiele podobnych pytań, choć niekompatybilnych lub trudnych do dostosowania do mojego projektu. Gdyby treść była przechowywana w wielowymiarowej tablicy, wyglądałaby ona następująco: _Wyszukaj w witrynie > Wykonawca > Link do strony wykonawcy > Utwór > Link do strony utworu > Typy zakładek (Akordy, Teksty, Tabulatory) > Link do typu zakładki (Akordy) , Lyrics, Tabs) > Content_ Dobra wizualna reprezentacja tej tablicy wyglądałaby tak: http://i.stack.imgur.com/GrATD.jpg Pamiętaj, że zawartość jest **dynamiczna** , więc nie jest możliwe dla mnie zakodowanie granic tablicy na sztywno bez wcześniejszego pobrania rozmiaru przechowywanej zawartości (np. ilości utworów na wykonawcę) Poniżej znajdują się podejścia, które wypróbowałem i ich wady lub te, w których nie udało mi się poprawnie zaimplementować: _Multi -wymiarowe (postrzępione) tablice_ wymagane jawne ograniczenia, a rozmiar można zmienić tylko w tablicy znajdującej się najbardziej po prawej stronie. (To podejście może działać, ustawiając wyraźne granice po przechwyceniu całej zawartości, ale tworzenie zmiennych tymczasowych i przekazywanie ich wszystkich do tablicy wielowymiarowej wymaga dużej ilości kodu i wydaje się „brudnym” rozwiązaniem mojego problemu. ) _Krótki_ wydawały się obiecujące, ale z jakiegoś powodu nie byłem w stanie stworzyć krotki zawierającej różne typy zmiennych lub podejście było mylące. _Indywidualne tablice_ nie dawały mi wystarczającej elastyczności i wymagały dynamicznego tworzenia wielu nowych tablic. (np. tablica dla listy utworów dla konkretnego wykonawcy, inna dla linków zakładek w konkretnym utworze itp.) Jestem pewien, że próbowałem innych, ale w tej chwili nie pamiętam, widziałem podobne podejście zrobione z **_Structures_** na próbce dla kontrolki użytkownika tutaj i innych, którzy zaimplementowali lokalną bazę danych zawierającą wszystkie elementy. Potrzebne jest tylko podejście uproszczone, ale funkcjonalne. Każda pomoc jest mile widziana. Kolejna reprezentacja tutaj: ![reprezentacja](http://i.stack.imgur.com/h65Hf.jpg)


title: Czy dobrym pomysłem jest „#define me (*this)”?

text: To makro można zdefiniować w jakimś globalnym nagłówku, lub lepiej, jako parametr wiersza poleceń kompilatora: #define me (*this) Oraz przykład użycia: **some_header.h:** inline void Update() { /* .. */ } **main.cpp:** #include "jakiś_nagłówek.h" class A { public: void SetX(int x) { me.x = x; ja.Aktualizacja(); } void SomeOtherFunction() { ::Aktualizacja(); } /* 100 lub więcej wierszy ... */ void Update() { // ... } int x; }; Tak więc w metodzie klasy, kiedy uzyskuję dostęp do członka klasy, zawsze używam `mnie`, a podczas uzyskiwania dostępu do identyfikatora globalnego zawsze używam `::`. Daje to czytelnikowi, który nie jest zaznajomiony z kodem (prawdopodobnie ja po kilku miesiącach) zlokalizować informacje o tym, co jest dostępne bez konieczności szukania gdzie indziej. Chcę zdefiniować `ja`, ponieważ używanie `this->` wszędzie jest dla mnie zbyt hałaśliwe i brzydkie. Ale czy `#define me (*this)` można uznać za dobrą praktykę C++? Czy istnieją jakieś praktyczne, problematyczne punkty związane z makrem „ja”? A jeśli jako programista C++ będziesz czytał jakiś kod za pomocą makra `me`, czy tego chcesz, czy nie? **Edytuj:** Ponieważ wiele osób kłóci się nie konkretnie używając `mnie`, ale generalnie przeciwnie to wyraźnie. Myślę, że może nie być jasne, jakie są korzyści z „wymawiania tego wszędzie”. **Jakie korzyści daje „wyraźne to wszędzie”?** * Jako czytelnik kodu masz pewność, co jest dostępne i możesz skoncentrować się na innych rzeczach niż weryfikować – w jakimś odległym kodzie – że jest to naprawdę dostępne to, co Twoim zdaniem jest dostępny. * Możesz dokładniej użyć funkcji wyszukiwania. Wyszukiwanie „`this->x`” może dać więcej pożądanych wyników niż tylko wyszukiwanie „`x`” * Kiedy usuwasz lub zmieniasz nazwę jakiegoś członka, kompilator niezawodnie powiadamia cię w miejscach, w których ten członek jest używany. (Niektóre funkcje globalne mogą mieć taką samą nazwę i istnieje szansa, że możesz wprowadzić błąd, jeśli nie używasz tego jawnie). * Kiedy refaktoryzujesz kod i tworzysz funkcję niebędącą członkiem (aby uczynić lepszą enkapsulację) jawną, pokazuje to miejsce, które musisz edytować i możesz łatwo zastąpić to wskaźnikiem do instancji klasy podanej jako parametr funkcji niebędącej członkiem * Ogólnie kiedy zmieniasz kod, istnieje więcej możliwości wystąpienia błędów, gdy nie używasz tego w sposób jawny, niż gdy używasz tego wprost wszędzie. * Wyraźnie jest to mniej hałaśliwe niż wyraźne „m_”, gdy uzyskujesz dostęp do członka z zewnątrz (`object.member` vs `object.m_member`) (dzięki @Kaz, aby zauważyć ten punkt) * Wyraźnie rozwiązuje problem uniwersalnie dla wszystkich członków – atrybuty i metody, natomiast „m_” lub inny prefiks jest praktycznie użyteczny tylko dla atrybutów. Chciałbym dopracować i rozszerzyć tę listę, powiedz mi, czy znasz inne zalety i przypadki użycia dla **wyraźnie to wszędzie**.


title: Algorytmy dla struktur danych w systemie rozproszonym

text: Strukturę danych tabeli mieszającej można łatwo rozłożyć na wiele komputerów za pomocą prostego algorytmu do dystrybucji kluczy: machine_to_query = item_key % machine_count Jeśli chcesz odczytywać i zapisywać pary klucz-wartość, używasz klucza do ustalenia, która maszyna przechowuje dane, potem rozmawiasz z tą maszyną. Jeśli chcesz zliczyć całkowitą liczbę elementów, musisz zażądać obliczenia z każdego serwera i dodać je. Jakie algorytmy istnieją do efektywnego zarządzania strukturami danych, w których dane są podzielone na wiele komputerów? Algorytmy rozproszone, a nie równoległe. Jak coś takiego jak posortowana tablica może działać w sposób rozproszony? Wydajnie.


title: Połączenie przez gniazdo z zewnętrznym adresem IP przez serwer

text: Pracuję nad aplikacją wykorzystującą gniazda. Zasadniczo chcę przesyłać dane między dwoma klientami. Ponieważ nie mogę połączyć dwóch klientów bezpośrednio (nie są w tej samej sieci), będę musiał połączyć ich przez serwer. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/gLpR0.png) Moja strona klienta jest napisana w Javie, ale strona serwera może być napisana w dowolnym języku. Badałem już za pomocą socket.io itp., ale problem, na który natknąłem się, polega na tym, że Java nie ma ładnego rozwiązania websocket. Jakie są inne opcje, aby osiągnąć ten sam efekt? Rozwiązanie, o którym teraz myślę, to w zasadzie „przekazywanie” strumienia od jednego klienta do drugiego przez serwer, ale może być lepsze wyjście…


title: Duże przesiadki z jednej platformy na drugą

text: Jako przykład chcę przełączyć się z C#/.NET do Scala/Jvm. Pracuję jako samozatrudniony i mogę wybrać swój ulubiony język/platformę. Posiadanie ponad 8-letniego doświadczenia w C#/.NET sprawia, że mam wiele kodów, bibliotek i frameworków wielokrotnego użytku. Mogę pracować nad swoimi projektami i pomysłami bez myślenia o języku, więc koncentruję się na tym, co robię. Dlaczego powinienem przeprowadzić taką migrację? Dlatego; * Scala jest open-source i innowacyjna * Scala działa na JVM, który jest wieloplatformowy, co zmniejsza koszty i pewne ryzyko * Scala ma wszystkie funkcje C# (z czymś więcej) * Korzyści z rozproszenia Java * Więcej bibliotek open-source na platformie Java * Robienie open-source w .NET jest trochę trudniejsze i nie przyciąga uwagi, jak to ma miejsce w Javie lub innych platformach. Czy można zarządzać tak dużym ryzykiem i nauczyć się nowego języka/platformy (w tym przypadku Scala, framework Play itp.) i użyć go w przynajmniej małym projekcie komercyjnym, aby sprawdzić, czy jest odpowiedni?


title: Jak Google przechowuje macierz PageRank?

text: Jestem ciekaw, jak Google przechowuje macierz używaną w algorytmie PageRank; i szukam struktury danych do przechowywania bardzo dużej (nie mieszczącej się w pamięci żadnego komputera) rzadkiej macierzy i sprawnego (jeszcze nie wiem, co to znaczy) wykonywania na niej operacji. Jeśli jest dostępna biała księga, opublikuj link lub tytuł (zrobiłem trochę badań i nie mogłem go znaleźć), a jeśli nie, byłoby wspaniale, gdybyś mógł opublikować linki lub po prostu nazwy artykułów lub książek to pomogłoby mi zacząć. W moich początkowych badaniach znalazłem rzadki format rzędowy [1] i zacząłem czytać Sparse Matrix Technology [2]; więc proszę daj mi znać, jeśli jestem tutaj na dobrej drodze. * [1] Chang, 1969 Curtis i Reid, 1971 Gustavson, 1972 * [2] Pissanetzky, 1984


title: Wielowątkowość w C# .NET Usługa Windows

text: Piszę usługę Windows (używając C# .NET 3.5 VS2008) i moje wymaganie to: * Po uruchomieniu usługi Windows - wykonuje operację sprawdzania rekordów (w bazie danych) @ co 30 sekund (użyłem do tego timera) * Jeżeli odpowiedni rekord został znaleziony w bazie danych - wówczas uruchamia wiele wątków i wykonuje wymaganą operację (może to być operacja sieciowa lub operacja bazy danych). Liczba wielu wątków zależy również od ilości znalezionych rekordów (np. jeśli znaleziono 10 rekordów, to uruchamia 5 wątków, a dla 20 rekordów uruchamia 10 wątków itd.). Jak projektować/kodować dla tych wielu wątków? Przykład: znaleziono 10 rekordów w bazie danych, chcę uruchomić 5 wątków dla pierwszych 5 rekordów, które mogą wykonywać operacje sieciowe... z 5 wątków, którykolwiek wątek zakończy swoją pracę - rozpocznie przetwarzanie dla następnego rekordu (np. Rekord numer 6, 7 ... 10) Proszę zaproponować najlepsze możliwe rozwiązanie dla powyższego przypadku.


title: Używać Android NDK do przenoszenia z iOS?

text: Obecnie planuję zaimplementować małą aplikację do malowania przy użyciu OpenGL ES 1.1. Uważam, że to pytanie dotyczy każdego projektu OpenGL ES. Rozpoczynam rozwój na Androidzie i chciałbym wiedzieć, czy polecilibyście napisać logikę rysowania (przy użyciu OpenGL) w C++ z NDK, aby łatwiej było przenieść na iOS lub użyć Java API i być zablokowanym na Androidzie. Powodem, dla którego o to pytam, jest to, że widziałem w sieci mieszane opinie na temat korzystania z NDK (niektórzy twierdzą, że jest to dodatkowy poziom złożoności). Z tego, co już widziałem, uważam, że powinienem wybrać Java API, ponieważ zaczynam na Androidzie, a następnie, jeśli zdecyduję się na iOS, przepisać logikę OpenGL w Objective-C lub C++. Powinno to być całkiem proste, ponieważ połączenia wydają się być takie same w obu językach. Co myślisz? Czy mam rację?


title: CSS i HTML niespójne przy deklarowaniu wielu klas

text:
Po raz pierwszy uczę się CSS "na poważnie", ale odkryłem, że sposób, w jaki radzisz sobie z wieloma klasami CSS w CSS i HTML, jest dość niespójny. Na przykład dowiedziałem się, że jeśli chcę zadeklarować wiele klas CSS z zastosowaniem wspólnego stylu, piszę: .style1, .style2, .style3 { color: red; } Następnie, jeśli chcę zadeklarować tag HTML, do którego zastosowano wiele klas, piszę:

 I pytam dlaczego? Z mojego osobistego punktu widzenia byłoby bardziej spójne, gdyby można było zadeklarować obie klasy, używając przecinka do oddzielenia każdej klasy, lub gdyby obie można było zadeklarować spacją; w końcu IMHO wciąż mówimy o wielu klasach, zarówno w CSS, jak i HTML. Myślę, że bardziej sensowne byłoby napisanie tego, aby zadeklarować `div` z zastosowaniem wielu klas:

 Czy brakuje mi czegoś ważnego? Czy możesz mi wyjaśnić, czy istnieje ważny powód tych dwóch różnych składni?


title: Proszę wyjaśnić wersjonowanie obiektów w systemie modułów nodejs

text: To pytanie dotyczy trwałości zmiennych w różnych modułach w nodejs, gdy nie wymagają one bezpośrednio siebie nawzajem, ale „wymagają” wspólnego przodka. Jest to również uogólniona wersja tego pytania o przepełnienie stosu. Chociaż otrzymałem tam odpowiedź, która pomogła mi rozwiązać moją konkretną sprawę, nadal nie wiem, jaka jest odpowiedź na postawiony przeze mnie problem architektoniczny. Miałem nadzieję, że ogólny problem dobrze pasuje do pytania programers.stackexchange. Załóżmy, że mamy program nodejs o następującej strukturze: * Moduł Alpha - eksportuje zmienną a. * Moduł Beta - wymaga modułu Alpha, odczytuje zmienną a -> wypisuje ją okresowo do konsoli * Moduł Gamma - wymaga modułu Alpha, okresowo zapisuje do zmiennej a Jest instancją modułu Alpha, a więc zmiennej a, wspólnej dla wszystkich trzech modułów. np. Czy moduł Gamma może dokonywać zmian w zmiennej a, które są pomyślnie drukowane na konsoli przez moduł Beta. Jeśli to prawda, dlaczego tak jest **nawet jeśli nie ma bezpośredniego związku „wymaga” między modułami Gamma i Beta?** Jeśli to nieprawda, **czy możesz wyjaśnić najlepszy sposób udostępniania zmiennej, niż jest to konieczne mogą być modyfikowane w czasie wykonywania między wieloma modułami node?** Czy możesz wyjaśnić leżący u podstaw model danych, który powoduje to zachowanie w modułach nodejs?


title: Jak radzić sobie z egocentrycznymi programistami?

text: Pozwól mi to trochę wyjaśnić. W poprzedniej pracy miałem współpracownika, który cieszy się dobrą opinią wśród kierownictwa. Zawsze kończył na czas. A szefowie byli zadowoleni z jego postępów, więc dostał pewne przywileje. Problem polegał na tym, że pozostali programiści znali jego sekret. Zoptymalizował regułę 80/20, więc poświęcił 20 procent czasu na ukończenie 80 procent kodu. Pozostałe (twarde) 20% pozostawiono programistom serwisowym. Którzy (nic dziwnego) zostali ukarani z powodu braku postępów. Ale ponieważ ten programista miał dobrą reputację w zarządzie, prawie niemożliwe było zrzucenie winy na niego. (Na szczęście opuścił firmę). Moje pytanie brzmi, co zrobić jako zespół programistyczny, jeśli masz takiego programistę w swoim zespole. Czy próbujesz ostrzec kierownictwo o ryzyku zrujnowania własnych szans? Czy akceptujesz fakt? Czy są inne opcje.


title: Czy prosta aplikacja na iPhone'a jest bardziej atrakcyjna dla użytkowników niż witryna mobilna?

text: Moja klientka chce zrobić aplikację na iPhone'a, ponieważ odkryła, że użytkownicy znacznie częściej korzystają z aplikacji na iPhone'a niż witryny zoptymalizowanej pod kątem urządzeń mobilnych. Aplikacja na iPhone'a jest bardzo prosta - wyświetla tylko kilka obrazów i trochę tekstu. Jako programista wolałbym zrobić witrynę mobilną ze względu na prosty charakter treści. Z technicznego punktu widzenia uważam, że korzystanie w tej sytuacji z aplikacji na iPhone'a jest przesadą. Czy ma sens tworzenie aplikacji na iPhone'a, gdy wystarczyłaby witryna mobilna, po prostu dlatego, że Twoi użytkownicy woleliby, aby była to aplikacja na iPhone'a? Czy mimo wszystko można łatwo przekonać użytkowników, że witryna mobilna jest równie łatwa w użyciu?


title: Pisanie kodu na podstawie fragmentu kodu z internetu bez licencji

text: Pracuję nad projektem montażu i muszę napisać kod, aby przełączyć się z trybu tekstowego do trybu VGA. Jest to dość skomplikowane i wymaga skonfigurowania dużej ilości danych, więc wolałbym tego nie pisać sam. Na szczęście znalazłem w internecie fragment kodu, który robi dokładnie to, czego chcę. Niestety ma informację o prawach autorskich, ale nigdzie nie można znaleźć żadnej licencji. Obecnie napisałem swój własny kod z fragmentem jako odniesieniem, ale ostatecznie jest to w zasadzie ten sam kod z różnymi nazwami zmiennych i komentarzami. Z drugiej strony, przy asemblerze jest tylko tyle sposobów na wprowadzenie zmienności w kodzie. Czy mogę opublikować swój kod z informacją, że został zainspirowany tym fragmentem kodu? A może w ogóle nie wolno mi tego robić?


title: Czy naprawdę potrzeba wielu wystąpień klasy?

text: Generalnie jestem bardzo sceptyczny wobec każdego, kto krytykuje wzorce projektowe singletona w oprogramowaniu. We wzorcu projektowym MVC (model-view-controller) widoki i kontrolery są zazwyczaj singletonami, a jedynymi przypadkami wielokrotnych wystąpień klasy są klasy modeli (zwykle modelowanie tabeli bazy danych). Z mojego doświadczenia wynika, że jedynym rodzajem oprogramowania, które konsekwentnie w pełni wykorzystuje programowanie zorientowane obiektowo (wiele wystąpień wielu typów klas) jest oprogramowanie symulacyjne, co nie jest zaskoczeniem, biorąc pod uwagę, że oprogramowanie zorientowane obiektowo zostało wynalezione do tego celu. Więc moje pytanie brzmi, poza symulacją: * jakie inne rodzaje oprogramowania wymagają posiadania wielu wystąpień klasy?


title: Lepsza wydajność w sieci dzięki dużym plikom PNG

text: Obecnie pracuję nad stroną internetową, która w całości składa się z obrazów (wersja HTML strony internetowej Flash). Klient dostarczył mi duży plik PSD, który musiałem wyeksportować każdą warstwę jako PNG, aby zachować przezroczystości. Jest kilka warstw, które są ciężkie w szczegółach i oczywiście mają rozmiar, jak 5 MB każda (głównie tło, to jak 6 PNG, 4-6 MB każda). Załadowanie ich za pomocą CSS3 sprawia, że są świetne, ale mam problemy z wydajnością w przeglądarkach (lagi Chrome, Opera przeładowuje obrazy za każdym razem, gdy przewijam w dół/w górę, lagi Firefoksa, oczywiście lagi IE itp.) oraz w przyszłości, kiedy prześlę gotową stronę na serwer, będzie cierpieć z powodu dużego obciążenia obrazu, dużo do pobrania od klienta. Mój klient o tym wie i czekam na możliwe rozwiązanie (np. obniżenie rozdzielczości PSD), ale tymczasem chciałbym rozwiązać ten problem i spróbować czegoś innego, czy macie jakieś wskazówki dotyczące tej sytuacji? Przemyślałem podstawowe rozwiązania, takie jak kompresja i inne rzeczy, ale jeśli masz jakieś inne wskazówki, będzie super. Aha, i jeszcze jeden "szczegół", ta wersja HTML koncentruje się głównie na urządzeniach iPad/iPhone.


title: Graficzna reprezentacja kodu w locie

text: Wiem o wtyczce Omondo do synchronizacji kodu na żywo z UML w Eclipse, ale zastanawiałem się, czy istnieje jakieś inne rozszerzenie narzędzia/IDE/IDE, które ma jakąś formę graficznej reprezentacji kodu na żywo (strukturalne, przepływowe, stosy wywołań, zależności, itp.). Zasadniczo szukam bogatszych wizualnych informacji zwrotnych na temat kodu podczas programowania, nie szukam czysto graficznych edytorów kodu, chociaż podróże w obie strony byłyby miłe (edytuj graficznie, kod zostaje zmodyfikowany; edytuj kod, reprezentacja zostanie zmodyfikowana). Jeśli nie znasz żadnego graficznego narzędzia do tworzenia dokumentacji kodu na żywo, może kogoś, kto może współistnieć z kodem, takiego jak MySQL Workbench lub Enterprise Architect. **EDYTUJ** : Proszę o oryginalne odpowiedzi, czyli inne narzędzia niż te, które cytowałem (nawet jeśli są podobne do Omondo, MySQL Workbench i Enterprise Architect). **EDIT 2** : Znalazłem wykres wywołań C/C++ Netbeans: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/SNk6c.png)


title: Jak korzystać z mojego autorskiego frameworka w nowej pracy bez tworzenia open source?

text: Od lat pracuję nad frameworkiem. Jest solidny, obszerny i sprawdzony. To jest dokładnie to, czego pracodawca potrzebuje do założenia nowego projektu. Nie ma sensu przepisywać całości od zera lub korzystać z konkurencyjnej alternatywy open source. Moim pragnieniem jest udzielenie pracodawcy darmowej, niewyłącznej, niepodlegającej redystrybucji licencji na dostęp do plików binarnych i źródeł, aby pracodawca mógł zmienić kod. Rozumiem, że pracodawca nie może polegać na kodzie z zamkniętym kodem źródłowym, więc jestem gotów przekazać pracodawcy moje źródła za darmo (odpowiednik dwóch lat mojej pracy za darmo). Chcę tylko chronić moje prawa autorskie i uniemożliwić pracodawcy przekazanie kodu komuś innemu. Wierzę, że wielu programistów znajdzie się w takiej sytuacji rozpoczynając nową pracę. Jednak uczynienie go open-source nie wchodzi w rachubę z wielu powodów, które nie mają znaczenia dla celów tego pytania. Chcę zamknąć źródło, ale udostępnić bezpłatną kopię na niewyłącznej licencji niepodlegającej redystrybucji. Więc moje pytania to: * Kiedy mówię, że mam framework, którego chciałbym użyć? Prawdopodobnie zanim podejmę pracę, ponieważ jeśli nie chcą z niej korzystać LUB nie akceptują mojej licencji, nie przyjmę tej pracy. * Jakiego rodzaju licencji powinienem użyć, aby zawrzeć tę umowę z moim pracodawcą? * Jakieś inne uwagi lub komentarze? **AKTUALIZACJE:** 1. Mogę tylko powiedzieć, że istnieją inne firmy korzystające z oprogramowania (z licencjami), więc nie mogę uczynić go open source lub po prostu przenieść praw autorskich na mojego nowego pracodawcę, co faktycznie się dzieje, jeśli używasz go w swojej pracy bez tej dyskusji.


title: Kodowanie i testowanie w tym samym sprincie

text: Jak przebiega testowanie w ramach tego samego sprintu co kodowanie, jeśli całe lub większość kodowania nie jest wykonywana do końca sprintu? (Mam na myśli opracowywanie i testowanie pojedynczego PBI w trakcie sprintu). potrzebujesz funkcjonalnego interfejsu użytkownika do nagrywania lub tworzenia automatycznych testów. Mam tylko scenorysy, które ewoluują w miarę rozwoju funkcji i odkrywania nowych wymagań. W moim przypadku opracowuję nową aplikację desktopową. Aplikacje na komputery zazwyczaj nie nadają się zbyt dobrze do automatycznego testowania. Mam kilka automatycznych testów jednostkowych, ale nie są to ręczne testy funkcjonalne/integracyjne, które wykonałby specjalista ds. kontroli jakości. Tak więc teraz jestem, że mój sprint kończy się jutro, wciąż mam kodowanie do skończenia, a moi ludzie od QA nie mają jeszcze nic do przetestowania i nie mają pojęcia, jak przetestować wszystko, co im dam bez trzymania ich za ręce. Jestem pewien, że nie jestem pierwszą osobą, która ma ten dylemat. W przeszłości wykonałem potok: w bieżącym sprincie zespół testowy testuje funkcje, które zostały zaimplementowane w poprzednim sprincie. W mojej obecnej pracy premier nazywa to podejście „wodospadem” i jako takie jest niedopuszczalne.


title: Zend Framework 2 - Utrzymujesz wszystkie modele i mapery w module Aplikacji?

text: Jestem w trakcie planowania aplikacji webowych zgodnie z najlepszymi praktykami i podejściami do tworzenia oprogramowania. Buduję tę aplikację przy użyciu zend framework 2 i przechodzę przez jej dokumentację oraz najlepsze praktyki budowania aplikacji za pomocą zend framework 2 i wzorców MVC. W tej chwili nie wiem, gdzie przechowywać warstwy modelu. Do tej pory wszystkie aplikacje, które opracowałem przy użyciu Zend, używałem do utrzymywania warstw modelu w module aplikacji, ponieważ myślę, że modele nie są powiązane z pojedynczym modułem i jeden moduł może komunikować się z wieloma modelami. Również w Zf2 moduły są ładowane tylko wtedy, gdy jest to wymagane, z wyjątkiem modułu aplikacji, który ładuje się z każdym żądaniem, niezależnie od tego, który moduł jest żądany. Jeśli umieszczę moje modele w określonych modułach i załaduję je w konfiguracji usługi odpowiednich modułów. Nie będę mógł ich używać w innych modułach. Więc co powinienem zrobić?


title: Czy sprawdzanie poprawności aplikacji gry logicznej z ograniczeniami czasowymi powinno odbywać się po stronie serwera?

text: Pracuję nad aplikacją, w której użytkownik musi ułożyć puzzle i sprawdzić w określonym czasie. To jest gra oparta na HTML5, nie mogę utrzymać rozwiązania po stronie klienta. ale chcę również uniknąć opóźnień, które będą powodowane, gdy sprawdzamy poprawność próby gracza. Czy istnieje sposób na bezpieczne sprawdzenie poprawności rozwiązania po stronie klienta? Jedną z implementacji, którą rozważałem, było wzięcie skrótu rozwiązania i porównanie go z hashem rozwiązania użytkownika po stronie klienta, a gdy w końcu go prześle, ponownie sprawdzi go po stronie serwera. Jakieś potencjalne wady tutaj, czy ich czystsze sposoby na osiągnięcie tego samego?


title: Implementacja klasy nazwy użytkownika

text: Próbuję hermetyzować kilka funkcji dotyczących użytkownika w jednej klasie. Chociaż głównym zastosowaniem tej klasy byłoby jej jednorazowe zainicjowanie i nigdy więcej nie trzeba wywoływać żadnych zmiennych set, chciałbym, aby ta klasa była skalowalna do wielokrotnego wywoływania. Chociaż umieszczając to w klasie, czuję, że albo nadmiernie komplikuję, albo łamię standardy OOP. W tej chwili używam tych bieżących rodzajów wywołań w całym kodzie VBA: username = GetUsername() OR IF userHasSecurity(GetUsername(), "WhatUserHasAccessTo") = true THEN To, co mam nadzieję to zrobić, zamień (odpowiednio) na: Set UserID = Nowa nazwa użytkownika UserID.GetUserName OR IF UserID.HasModuleAccess("WhatUserHasAccessTo") = true THEN Oprócz tej zmiany mam funkcję, która zwraca informacje `Active Directory`, a także sprawdza, czy wprowadzone nazwy użytkowników istnieją w `Active Directory` Diagram klas to taki Private UserName As String Private FirstName As String Private MiddleInitial As String Private LastName As String Private Sub class_Initialize() Prywatna funkcja findCurrentUsername() As String Prywatna funkcja doesUsernameExist(usernameToCheck As String) As Boolean Właściwość publiczna Get GetUserName() As String Własność publiczna Niech s etUsername(newUsername As String) Własność publiczna Pobierz getFirstName() jako ciąg Własność prywatna getFirstName(newFirstName As String) Właściwość publiczna Uzyskaj getLastName() jako ciąg Właściwość prywatna Niech ustaw Właściwość publiczną getMiddleInitial() jako ciąg Let setMiddleInitial(newMiddleInitial As String) Funkcja prywatna findNameDetails() Właściwość publiczna Get getFullName() As String Funkcja publiczna HasModuleAccess(moduleName As String, opcjonalnie appName As String) As Boolean funkcja publiczna getUserActiveDirectoryGroups() As DAO.Recordset wykonanie (funkcje samodzielne a klasa) czy można coś zyskać? Czy to łamie standardy OOP i czy niewłaściwie używam klas?


title: jak licencjonować moją aplikację

text: Chcę wydać aplikację stworzoną przeze mnie jako freeware i po osiągnięciu znacznych zysków (z jej komercyjnej wersji) wydam ją jako open source. Czy ktoś mógłby mi zasugerować, jak mogę wydać moją aplikację na licencji freeware, skąd mogę uzyskać tę licencję, zasugerować mi najlepszy sposób. (Niewiele wiem o tych prawach rządzących). Mam nadzieję, że licencje freeware możemy zrobić za darmo. Proszę, nie zostawiaj mnie, podając listę dostawców, zasugeruj mi, który pasuje do mojego wydania. Nie mam żadnych szczególnych warunków, których użytkownik musi przestrzegać podczas korzystania z tej aplikacji. Uwaga: Do tej pory nie opublikowałem go ani nie omawiałem nigdzie indziej.


title: Jaka jest najskuteczniejsza rzecz, którą zrobiłeś, aby poprawić swoje umiejętności programistyczne?

text: Patrząc wstecz na moją karierę i życie jako programisty, było wiele różnych sposobów, w jakie poprawiłem swoje umiejętności programistyczne - czytanie kodu, pisanie kodu, czytanie książek, słuchanie podcastów, oglądanie screencastów i wiele innych. Moje pytanie brzmi: Jaka była najskuteczniejsza rzecz, jaką zrobiłeś, która poprawiła twoje umiejętności programistyczne? Co poleciłbyś innym, którzy chcą się poprawić? Oczekuję tu różnych odpowiedzi i nie ma jednej odpowiedzi "jeden rozmiar dla wszystkich" - chciałbym wiedzieć, co działa dla różnych osób.


title: Czy programiści powinni mieć dostęp do PHI w celu rozwoju i testowania?

text: Moje obowiązki w małej firmie są głównie związane z programowaniem, ale pełnię również szereg innych ról, które zdecydowanie wymagają dostępu do PHI1. W większych organizacjach z jaśniejszym określeniem odpowiedzialności, czy rozsądne jest dostarczanie programistom tylko fikcyjnych danych, a nigdy rzeczywistych PHI? 1 Chronione informacje zdrowotne, zgodnie z amerykańskim ustawodawstwem regulującym prywatność pacjentów, HIPAA.


title: Jak stworzyć własny system operacyjny telefonu

text: Wiem, że to bardzo duże pytanie :), pytam tylko z ciekawości. Czy ktoś może zbudować system operacyjny telefonu? Czy ktoś może mnie przez to poprowadzić? Na przykład, jak wybrać sprzęt i jak przetestować kod, czy można kupić jakieś urządzenie (np. HTC) i po prostu wypróbować kod z nim? Dobrą rzeczą jest to, że jądro Linuksa jest tam, więc nie można zaczynać od zera.


title: Warunek użycia polimorfizmu

text: czy polimorfizm jest możliwy tylko wtedy, gdy istnieje scenariusz dziedziczenia, czy też realizacja polimorfizmu nie jest zależna od dziedziczenia. A może polimorfizm jest użyteczny głównie wtedy, gdy istnieje dziedziczenie?


title: Czy ASCII ma nagłówek, stopkę lub coś podobnego?

text: Pracuję nad problemem w Perłach Programowania -- konkretnie, implementacją programu, który sortuje plik zawierający co najwyżej 10 000 000 liczb całkowitych, z których każda ma długość 7 cyfr (Kolumna 1, Zadanie 3). Problem ma bardzo ścisłe ograniczenia, jeśli chodzi o pamięć, więc rozważam odczytywanie i zapisywanie liczb całkowitych w ASCII -- 7 bajtów na raz. Muszę wiedzieć, czy ASCII ma jakieś nagłówki, stopki lub coś podobnego, co powinienem rozważyć (umieszczam wszystko w 1 linii bez żadnych separatorów, więc nowe linie nie stanowią problemu).


title: Jak modelować konta użytkowników w ASP MVC Framework za pomocą Entity Framework przy użyciu podejścia code-first?

text: Jak zaprojektować podejście „code-first” we frameworku encji, kiedy twój kod powinien zawierać dane użytkownika (nazwę, hasło...) bez powtarzania/nadpisywania tego, co framework MVC wygeneruje pod względem tabel użytkowników, klas, autoryzacji i uwierzytelniania Tak proste na przykład, jeśli mam aplikację, która będzie zarządzać projektami użytkowników, moje modele będą zawierały następujące klasy i będą miały następującą zależność: - jednemu użytkownikowi można przypisać jeden lub WIELE projektów - Jeden projekt może być przypisany jednemu lub WIELU użytkownikom (tylko aby pokazać naturę relacji wiele do wielu ERD) class User{ //implementacja składowych klasy i // właściwości nawigacji aby umożliwić Entity Framework tworzenie tabel DB } class Project{ //implementacja składowych klasy i // właściwości nawigacji zezwolić Entity Framework na tworzenie tabel DB } Teraz problemem, z którym się borykam, jest dbałość o tworzenie tabel użytkowników, profili i encji ról... Nie jestem pewien, czy jest możliwe zaprojektowanie moich klas w taki sposób, aby pokazać automatyczną (konwencjonalną) relację z resztą tabel tworzonych przez MVC. W przypadku, gdy trzeba to zrobić, pisząc niestandardowe klasy uwierzytelniania, czy możesz wyjaśnić, jak? ponieważ znalazłem wiele artykułów, które poruszają ten sam problem, ale bez wskazywania relacji między klasami projektu a utworzonymi przez MVC klasami/tabelami, a dodatkowo jeśli deweloper zdecyduje się na użycie sposobu MVC, otrzyma dwa konteksty danych, nawet po scalanie obu tabel w jeden katalog serwera sql.


title: Przykład utrwalania relacji dziedziczenia przy użyciu ORM

text: Mam pewne doświadczenie z OOP i RDB, ale bardzo mało kontaktu z programowaniem sieciowym. Próbuję zrozumieć, jakie **nietrywialne** rodzaje problemów rozwiązuje ORM. Oczywiście znam potrzebę trwałości **danych**, ale nigdy nie spotkałem się z potrzebą utrzymywania **relacji między obiektami**, co jest wskazywane w wielu artykułach online o ORM-ie. Nie pytam o **proces** utrwalania POJO w bazie danych i przywracania go później. Nie pytam też o to, dlaczego **frameworki** ORM są przydatne – lub ból w tyłku – w tym celu. Szczególnie interesuje mnie, jak powstaje potrzeba utrwalania i przywracania **relacji między obiektami**. W różnych dokumentacjach widziałem wiele przykładów utrwalania POJO w bazie danych, ale wszystkie przykłady dotyczyły tylko bardzo prostych obiektów, które i tak są niczym więcej niż rekordami: konstruktor, niektóre pola prywatne i metody pobierające/ustawiające. Motywacja do utrzymywania takiego „zapisu obiektu” wydaje się oczywista i trywialna. Ten przykład: samouczek Hibernate ORM oferuje taki przykład, ale dalej omawia problemy niezgodności dotyczące szczegółowości, dziedziczenia, tożsamości, skojarzeń i nawigacji, które nie są motywowane przez przykład. Jeśli ktoś mógłby podać zabawkowy przykład sytuacji, w której, powiedzmy, pojawia się potrzeba utrzymania związku spadkowego, byłbym wdzięczny. Może to być oślepiająco oczywiste dla każdego, kto już spotkał się z tą sytuacją, ale ja tego nie zrobiłem, a wiele poszukiwań i lektur nie znalazło żadnych przykładów.


title: Czy moje użycie wzorca strategii narusza podstawowy wzorzec MVC w systemie iOS?

text: Mam zamiar użyć wzorca „strategia” w mojej aplikacji na iOS, ale mam wrażenie, że moje podejście narusza w jakiś sposób podstawowy wzorzec MVC. Moja aplikacja wyświetla wizualne „historie”, a „Story” składa się (tj. ma „@properties”) z jednego „Zdjęcia” i jednego lub więcej obiektów „VisualEvent” do reprezentowania np. animowane kółka lub ruchome strzałki na zdjęciu. Każdy obiekt `VisualEvent` ma zatem `eventType` `@property`, którym może być np. `kEventTypeCircle` lub `kEventTypeArrow`. Wszystkie zdarzenia mają cechy wspólne, takie jak `startTime` `@property`, ale różnią się sposobem ich rysowania w `StoryPlayerView`. Obecnie próbuję podążać za wzorcem MVC i mieć obiekt `StoryPlayer` (mój kontroler), który wie zarówno o obiektach modelu (takich jak `Story` i wszelkiego rodzaju zdarzeniach wizualnych) oraz o obiekcie widoku `StoryPlayerView`. Aby wybrać odpowiedni kod rysowania dla każdego z różnych typów zdarzeń wizualnych, mój `StoryPlayer` używa instrukcji `switch`. @implementation StoryPlayer // (...) - (void)showVisualEvent:(VisualEvent *)event onStoryPlayerView:storyPlayerView { switch (event.eventType) { case kEventTypeCircle: [self showCircleEvent:event onStoryPlayerView:storyPlayerView]; przerwanie; case kEventTypeArrow: [self showArrowDrawingEvent:event onStoryPlayerView:storyPlayerView]; przerwanie; // (...) } Ale instrukcje switch do sprawdzania typu są złym projektem, prawda? Według Wujka Boba prowadzą one do ścisłego sprzężenia i mogą i powinny być prawie zawsze zastąpione przez polimorfizm. Po przeczytaniu o wzorze „Strategia” we wzorcach projektowych na pierwszym miejscu, poczułem, że to świetny sposób na pozbycie się mojego oświadczenia o przełączniku. Zmieniłem więc projekt w następujący sposób: Wszystkie wyspecjalizowane typy zdarzeń wizualnych są teraz podklasami abstrakcyjnej klasy `VisualEvent`, która ma metodę `showOnStoryPlayerView:`. @interface VisualEvent : NSObject - (nieważne)showOnStoryPlayerView:(StoryPlayerView *)storyPlayerView; // streszczenie Każda konkretna podklasa implementuje konkretną, wyspecjalizowaną wersję tej metody zachowania podczas rysowania. @implementation CircleVisualEvent - (void)showOnStoryPlayerView:(StoryPlayerView *)storyPlayerView { [storyPlayerView drawCircleAtPoint:self.position color:self.color lineWidth:self.lineWidth radius:self.radius]; } „StoryPlayer” teraz po prostu wywołuje tę samą metodę we wszystkich typach zdarzeń. @implementation StoryPlayer - (nieważne)showVisualEvent:(VisualEvent *)event onStoryPlayerView:storyPlayerView { [event showOnStoryPlayerView:storyPlayerView]; } Wynik wydaje się być świetny: pozbyłem się instrukcji switch, a jeśli kiedykolwiek będę musiał dodawać nowe typy VisualEvents w przyszłości, po prostu tworzę nowe podklasy `VisualEvent`. I nie będę musiał nic zmieniać w `StoryPlayer`. Ale nie bez powodu to podejście narusza wzorzec MVC, ponieważ teraz mój model musi wiedzieć o moim poglądzie i na nim polegać! Teraz mój kontroler komunikuje się z moim modelem, a mój model komunikuje się z metodami wywołującymi widok w `StoryPlayerView`, takimi jak `drawCircleAtPoint:color:lineWidth:radius:`. Ale tego rodzaju wywołania powinny być kodem kontrolera, a nie kodem modelu, prawda? Wydaje mi się, że pogorszyłem sytuację. Jestem zmieszany! Czy całkowicie umyka mi sedno wzorca strategii? Czy istnieje lepszy sposób na pozbycie się instrukcji switch bez naruszania separacji widoku modelu?


title: Czy muszę wkleić informacje o licencji open source na górze mojej strony internetowej?

text: Zajmuję się tworzeniem aplikacji JavaScript, która korzysta z kilku projektów JavaScript typu open source. Wszystkie ich licencje zawierają wyrażenie takie jak „Należy przekazać innym odbiorcom Dzieła lub Dzieł Pochodnych kopię niniejszej Licencji”. Czy to oznacza, że muszę umieścić ogromny komentarz HTML na górze mojej strony internetowej ze wszystkimi licencjami oprogramowania, którego używam? Zadaję to pytanie, ponieważ nigdy nie widziałem kodu źródłowego strony, która to robi.


Jaki jest obecny „standard” tworzenia środowiska programistycznego, które obsługuje zdalną współpracę oraz bezpieczną kontrolę wersji? Rozważenie wirtualnego rozwiązania dedykowanego z vm dla warstwy internetowej i warstwy danych, z wykorzystaniem VPN dla każdego programisty. Jesteśmy małym start-upem, który zajmuje się zarówno rozwojem Microsoft, jak i open-source. Czy istnieje zestaw narzędzi lub pakietów oprogramowania, które są odpowiednie dla małego sklepu, a jednocześnie skalowalne?


title: Jaki byłby najlepszy sposób na spędzenie dnia na nauce Guice?

text: Właśnie dołączyłem do firmy, w której główne projekty, w tym ten, w którym wylądowałem, wykorzystują Guice. Nigdy nie używałem Guice. Znam wstrzykiwanie zależności w postaci CDI (trochę) i niejasnego, ale przyzwoitego Nucleusa (część ATG). Właśnie zakończyliśmy udaną iterację, więc jutro (piątek 13!) jest dzień, w którym programiści muszą wydać na rzeczy, które uważają za wartościowe. Mam kilka spotkań w ciągu dnia, ale będę miał na to około czterech lub pięciu godzin. Mam maszynę tylko dla siebie, z zainstalowanym i skonfigurowanym Eclipse według moich upodobań. Chciałbym spędzić dzień na nauce Guice. Jak mam spędzić czas? (Nie jestem do końca pewien, czy to właściwe pytanie dla programistów, ale jest tylko jeden sposób, aby się dowiedzieć)


title: wzorzec do udostępniania obiektów między API a aplikacją

text: Mam poważne wątpliwości co do projektu mojej aplikacji internetowej. Chciałem oddzielić logikę biznesową od interfejsu, więc stworzyłem Web API, które obsługuje wszystkie żądania do bazy danych. Jest to interfejs API sieci Web ASP.NET z platformą Entity i jednostką pracy oraz ogólnym wzorcem repozytorium. Jak dotąd wszystko jest w porządku. **PROBLEM** Tam, gdzie potrzebuję pomocy, nie mogę znaleźć wydajnego sposobu udostępniania obiektów między API a aplikacją. Nie chcę serializować bezpośrednio obiektu encji, pomyślałem, że byłoby to złą praktyką, ponieważ jeśli zmieni się model encji, mogę skończyć z serializacją dużych obiektów bez powodu. **Jak to jest teraz zaimplementowane** Ponieważ mój interfejs to aplikacja ASP.NET Web w C#, a moje API jest w C#, stworzyłem wspólną bibliotekę z definicją wszystkich moich klas, które chcę dzielić między nimi. Wiem, że to rozwiązanie nie zadziała, gdy będę tworzyć aplikację na Androida, będę musiał od nowa tworzyć swoje klasy w Javie, ale to nie jest mój największy problem. Problem polega na tym, że czuję, że zawsze przekształcam swoje obiekty. **PRZYKŁAD** Oto przykład mojego przepływu pracy: zaczynam od modelu ze wszystkimi obiektami i adnotacjami danych dla mojego formularza, a następnie użytkownik może POST ten model do kontrolera. W kontrolerze muszę przekonwertować ten model na klasę w mojej wspólnej bibliotece, a następnie wysłać ten obiekt do mojego API. Następnie kontroler w moim API przechwytuje wywołanie i konwertuje ten obiekt na obiekt encji, aby zaktualizować bazę danych. Czyli mam 3 klasy 1. Model dla widoku z wszystkimi adnotacjami do walidacji (Klient) 2. Wspólne klasy bibliotek do udostępniania obiektów (DLL) 3. Klasy Entity (API) Mam wrażenie, że ja zrobić coś naprawdę złego. Czy jest coś bardziej eleganckiego? Chciałbym się upewnić, że mam dobre rozwiązanie tego problemu, zanim projekt stanie się zbyt duży.


title: Jaka jest licencja Pash?

text: Pash to reimplementacja programu Windows PowerShell o otwartym kodzie źródłowym. Został wydany w 2008 roku i od tego czasu jest bezczynny. Chciałbym objąć płaszcz. Nie jest jasne, jaka jest licencja. W kodzie nie ma pliku LICENSE ani szczegółów licencji. Jedyne odniesienie do licencji, jakie mogę znaleźć, znajduje się na tej stronie: http://sourceforge.net/projects/pash/, gdzie jest napisane: > „Licencja: Licencja BSD, Powszechna Licencja Publiczna GNU (GPL)” Ale nie jestem pewnie, czy mogę to uznać za autorytatywne. Próbowałem skontaktować się z autorem, ale nie odpowiedział. Nie chciałbym kontynuować tego projektu, a później odkryć, że naruszam licencję, w wyniku czego projekt jest okaleczony.


title: Czy łatka do projektu open source dziedziczy tę samą licencję?

text: Przesłałem poprawkę do projektu na GPL, a teraz osoba trzecia chce dołączyć tę poprawkę do produktu. Zapytali mnie, jakiej licencji używa moja łatka. Czy moja łatka musi przyjąć licencję GPL? Czy mogę wybrać alternatywny?


title: perspektywy pracy dla 45-letniego początkującego w programowaniu

text: Mam zamiar ukończyć studia w zakresie programowania i chcę wiedzieć, czy to dobry pomysł, aby wybrać się na program licencjacki dla kogoś w moim wieku (45)? Jeśli Twoja odpowiedź brzmi „tak”, jaki język lub umiejętności, Twoim zdaniem, powinienem nabyć, aby dostać pracę po ukończeniu studiów?


title: Czy możliwe jest wydanie kodu za pomocą MS Solver Foundation na GPLv3?

text: Napisałem oprogramowanie przy użyciu Microsoft Solver Foundation. Teraz praca jest skończona. Chcę opublikować kod na warunkach GPLv3, jeśli to możliwe. Problem polega na tym, że GPLv3 stwierdza w sekcji 1: > „Biblioteki systemowe” dzieła wykonywalnego zawierają wszystko, poza > dziełem jako całością, które (a) jest zawarte w normalnej formie opakowania > Komponentu głównego, ale który nie jest częścią tego Głównego Komponentu oraz (b) > służy wyłącznie do umożliwienia korzystania z pracy z tym Głównym Komponentem lub > do implementacji Standardowego Interfejsu, dla którego implementacja jest dostępna > w formie kodu źródłowego. „Główny składnik” w tym kontekście oznacza główny istotny składnik (jądro, system okien itp.) konkretnego systemu operacyjnego (jeśli istnieje), na którym działa wykonywalna praca, lub kompilator używany do tworzenia praca lub interpreter kodu wynikowego używany do > jej uruchomienia. Z mojego punktu widzenia Solver Foundation nie mieści się w tej definicji, co czyni ją niezgodną z GPL (co samo w sobie nie jest zaskoczeniem). Teraz nie chcę rozpowszechniać żadnej formy MSF (lub dołączonej licencji Gurobi dla tej części) i nie będę dostarczać żadnych plików binarnych do oprogramowania, więc nie jestem pewien, czy MSF, który nie jest biblioteką systemową, ma wpływ na moje licencje w ogóle opcje (za pierwszym razem muszę sam wybrać licencję na cokolwiek). Pozostałe biblioteki, z których korzystałem, używają licencji Apache2 i (L)GPLv3 oraz licencji zlib dla NUnit (która pozwala na wszystko dla dystrybucji binarnej), więc nie powinno to stanowić problemu (proszę mnie poprawić, jeśli się mylę). Ale część MSF i Gurobi trochę mi przeszkadza. Miałem na myśli dostarczenie rozwiązania Visual Studio (które wymienia MSF jako zależność) i zamiast dołączania bibliotek dll wtyczki gurobi, byłoby readme o tym, jak je dołączyć po nabyciu solvera gurobi wraz z MSF. Czy to możliwe? Jeśli tak nie jest, może można znaleźć inną licencję FOSS?


title: Jak przenieść zespół z programowania C# ASP.NET do programowania w PHP przy użyciu Drupala?

text: Posiadam zespół wykwalifikowanych programistów C# z dużym doświadczeniem w tworzeniu aplikacji ASP.NET MVC. Wkrótce rozpoczniemy nowy duży projekt strony internetowej oparty na platformie Drupal. Moi programiści nie mają żadnego doświadczenia w Drupalu ani PHP i chcę, aby przejście było jak najszybsze i najskuteczniejsze. Zdecydowaliśmy się podjąć tę decyzję w oparciu o dwa czynniki: 1. W mojej organizacji jest kilka zespołów konkurujących o wykonanie tego projektu. Żaden z pozostałych zespołów nie ma doświadczenia w PHP ani Drupal i naprawdę wierzę, że mój zespół zrobi to najlepiej, niezależnie od tego, czy jest to ASP.NET czy Drupal. 2. Jednym z wymagań kierownictwa wyższego szczebla było to, że nie budujemy czegoś od zera, ale korzystamy z istniejącego fundamentu. Wiele wymagań jest dostępnych we wtyczkach/modułach dla różnych CMS. Wiem, że to nie jest idealne środowisko, ale to stan i muszę jak najlepiej z niego skorzystać. Żaden z systemów CMS opartych na platformie .NET Framework nie obsługuje wszystkich naszych wymagań. Ponieważ mój zespół ma dynamiczny charakter, wierzę, że potrafi dostosować się do współpracy z Drupalem. Zatrudnianie innych osób nie wchodzi w grę, a wysłanie ich na kurs zajmie zbyt dużo czasu. Pomyślałem o poświęceniu tygodnia, w którym każdy programista będzie studiował konkretny przedmiot, a następnie przekaże go zespołowi. Jakieś sugestie, jak byś to zrobił?


title: Czy pewne problemy są rozwiązywane bardziej elegancko za pomocą AOP?

text: Natknąłem się na ideę programowania zorientowanego na aspekty i mam co do niego pewne obawy. Podstawową ideą wydaje się to, że chcemy wziąć przekrojowe problemy, które nie są dobrze zmodularyzowane za pomocą obiektu i zmodularyzować je. To wszystko bardzo dobrze i dobrze. Ale implementacja AOP wydaje się polegać na modyfikowaniu kodu spoza modułu. Na przykład można napisać aspekt, który zmienia to, co się dzieje, gdy określony obiekt jest przekazywany jako parametr w funkcji. Wydaje się to być bezpośrednio sprzeczne z ideą modułów. Nie powinienem być w stanie modyfikować zachowania modułu spoza tego modułu, w przeciwnym razie cały punkt modułów zostanie odwrócony. Ale wydaje się, że aspekty robią dokładnie to! Zasadniczo aspekty wydają się być formą łatania kodu. Może się przydać przy niektórych szybkich hackach; ale, zgodnie z ogólną zasadą, być może nie jest to coś, co chcesz robić. Wydaje mi się, że programowanie zorientowane na aspekt aspektowy bierze złe praktyki i podchodzi do ogólnej zasady projektowania. Czy AOP to dobra praktyka? Czy pewne problemy programistyczne są rozwiązywane bardziej elegancko za pomocą AOP?


title: Porady dotyczące buforowania/aktualizowania danych w pamięci dla klienta Silverlight

text: Obecnie w mojej aplikacji Silverlight odpytuję bazę danych pod kątem zmian w buforowanych obiektach i szukam porady, jak zaktualizować widoki, które wyświetlają te listy. Przykład: Mam klasę statyczną, która zawiera listy obiektów (obszary, kierowcy pojazdów itp.), których będę używał w całej aplikacji. Mam w powłoce zegar, który będzie sondować bazę danych, przekazując znacznik czasu ostatniej aktualizacji. Więc jeśli znacznik czasu uległ zmianie, aktualizacje zostaną przekazane z powrotem, a listy zostaną zaktualizowane. Jak zaktualizować widoki, w których będą wyświetlane te listy. Jeśli użytkownik edytuje rekord, który wyświetla pole kombi powiązane z tą listą, w jaki sposób te dane zostaną zaktualizowane i jeśli użytkownik dokonał wyboru z listy, czy wpłynie to na wybór? Pamiętaj, że niektórzy użytkownicy będą dodawać do tych list, które ja będę wstawiał do bazy danych. Czy zabieram się do tego we właściwy sposób?, czy ktoś z powodzeniem wdrożył to w swojej aplikacji?


title: Jak podejść do testów funkcjonalnych w systemach segregowanych

text: Wdrażam kilka automatycznych testów funkcjonalnych w środowisku, w którym około 20 aplikacji komunikuje się ze sobą za pomocą kolejek i/lub spokojnych interfejsów. Problem, z którym się borykam, polega na tym, że dodałem test do jednej z aplikacji, nazwijmy to Płatności, i wszystkie wyglądały bardzo ładnie i zielono. Jedna ze zmian w aplikacji Płatności dodała dodatkowe pole w wiadomościach wysyłanych do innej aplikacji, nazwijmy to CRM, a CRM odrzucił wiadomość, co oznaczało, że aplikacje zaczęły tracić synchronizację. Aplikacja Payments (podobnie jak większość innych aplikacji) wysyła komunikaty w trybie „uruchom i zapomnij”, co oznacza, że producent nigdy nie wie, czy komunikat jest przetwarzany, czy odrzucany. Zastanawiam się, jak przetestować te zależności między systemami. Jedną z opcji (której nie lubię z mojej intuicji, ale nie mam pojęcia dlaczego) jest połączenie z innym systemem i sprawdzenie, czy rekord został zaktualizowany. Większość aplikacji ma spokojny interfejs, a także zapewnia klientom, więc nie jest to dużo pracy. Ale mam silne wrażenie, że zrobienie tego sprawi, że test będzie bardziej kruchy. Jednym z powodów, dla których mi się to nie podoba, jest to, że większość aplikacji rozmawia z innymi 4-10 innymi aplikacjami, więc nie chodzi tylko o sprawdzenie innej aplikacji ... a ponieważ wiele rzeczy jest asynchronicznych, dodaje to jeszcze więcej niepewności do testu. Jak więc tworzyć testy funkcjonalne dla tego typu środowiska?


title: Upewnienie się, że informacje o połączeniu z bazą danych są zabezpieczone

text: Po raz pierwszy pracuję nad aplikacją internetową. Zadawałem sobie pytanie Co każdy programista powinien wiedzieć o tworzeniu stron internetowych? i zauważyłem jedną rzecz, o której nic nie wiedziałem: > Upewnij się, że informacje o połączeniu z bazą danych są zabezpieczone. Jestem zdezorientowany, ponieważ zgodnie z moją wiedzą informacje o bazie danych, hasło itp. będą na moim serwerze używane w moim kodowaniu do łączenia się z bazą danych. Więc co konkretnie oznacza ta linia?


title: Zbieranie wymagań w metodyce zwinnej

text: W świetnej książce User Stories Applied autor określił następujący proces dotyczący wymagań dotyczących trałowania w formie historyjek użytkownika: Tworzenie ról użytkowników (persony) **\-->** burza mózgów cele użytkowników dla każdej roli **\-->* * Napisz historyjki użytkownika **\-->** oszacuj wszystkie historyjki użytkownika **\-->** nadaje priorytet historyjkom **\-->** wybierz niektóre historyjki użytkownika dla pierwszego wydania **\-->** napisz kryteria akceptacji dla każdej historii **\-->** podziel każdą historię na zadania **\-->** oszacuj zadania Jednak nie rozumiem, dlaczego **WSZYSTKIE** historie powinny być najpierw szacowane i czy są trzeba oszacować, dlaczego nie uwzględniać kryteriów akceptacji w historii, dopóki nie nadejdzie czas, aby nad nią popracować? Następna sprawa dotyczy samych kryteriów akceptacji, w książce Kryteria akceptacji gdzie proste stwierdzenia jak: * test z Master Card do zapłaty. * test z Visa do zapłaty. Czy format **Given... When... Then...** nie jest lepszy do pisania testów akceptacyjnych? Ostatnia sprawa dotyczy podziału historyjek użytkowników na zadania, po co zawracać sobie głowę ponownym oszacowaniem zadań, skoro samo zadanie zostało oszacowane w story pointie?


title: Czy musimy używać JCA podczas łączenia się z db z wnętrza EJB?

text: Podczas pisania EJB (wdrożonego na WAS), który łączy się z db, nigdy nie musiałem używać JCA. Ale najwyraźniej JCA jest standardem dla połączeń z EIS stron trzecich (w tym z bazą danych). Czy więc WAS wdraża wewnętrznie JCA? W jakiej sytuacji programista aplikacji musiałby korzystać z klas powiązanych z JCA?


title: Wizualizacja tablicy N>2-D?

text: Mam tablicę wymiaru 5. Ale nie mogę zrozumieć, jak zwizualizować tę tablicę? int[][][][][] tablica = nowa int[4][4][4][6][2]. Czy istnieje dobry sposób na wizualizację tablic, których liczba wymiarów wynosi 3 lub więcej?


title: Jakie będą najlepsze praktyki dotyczące posiadania „przejrzanego” kodu źródłowego w repozytorium kontroli źródła?

text: Jaki będzie najlepszy sposób zarządzania sprawdzonym kodem źródłowym w repozytorium kontroli źródła? Czy kod źródłowy powinien przejść przez proces przeglądu przed zaewidencjonowaniem, czy też przegląd kodu powinien nastąpić po zatwierdzeniu kodu? Jeśli przegląd ma miejsce po zaewidencjonowaniu kodu do repozytorium, jak należy to śledzić?


title: Publikuj/subskrybuj, pytanie o implementację wzorca obserwatora

text: Zajmuję się tworzeniem aplikacji desktopowej w java/swing. Mam składnik, który jest zarejestrowany jako subskrybent wielu paneli i otrzymuje od nich wiadomości (moje niestandardowe zdarzenie). Ten składnik to coś w rodzaju zasobnika wiadomości. Gdy pojawi się błąd walidacji lub jakiś komunikat informacyjny, jest on dostarczany z panelu do tego zasobnika moją metodą „publikowania”. Ale teraz mam problem. Mam okno, które składa się z paska wiadomości i panelu wewnętrznego. w tym panelu wewnętrznym znajdują się niektóre elementy i inny Panel. A w tym Panelu są panele implementujące interfejs Publishera, ale są one tworzone na bieżąco z metadanych i nie mam do nich dostępu, aby zarejestrować subskrybenta. Nie mogę więc bezpośrednio zarejestrować mojego zasobnika wiadomości jako subskrybenta paneli, ponieważ: 1. nie mam do nich dostępu 2. są tworzone dynamicznie z metadanych i mogą się zmieniać. Czy mogę ustawić odwołanie do obiektu subskrybenta na środku (pomiędzy) panelami, a podczas dynamicznego tworzenia moje panele wydawcy rejestrują to odniesienie do nich? Czy to jest w porządku z wzorcem obserwatora, ponieważ teraz inne klasy mają odniesienie do obiektu, którego nie potrzebują. Może ten obiekt należy wstrzyknąć w inny sposób? a może wszystko jest w porządku i po prostu dzisiaj namieszałem w głowie ;) ![Zdjęcie, aby było wyraźniejsze](http://i.stack.imgur.com/iiHxN.png)


title: Czy muszę rozumieć wewnętrzne elementy języka programowania?

text: Jestem początkujący w Pythonie i do tej pory bardzo mi się podoba. Jedno pytanie, które bardzo często przychodzi mi do głowy, dotyczy tego, czy muszę zrozumieć, a zatem nauczyć się elementów wewnętrznych języka programowania (jak w moim przypadku Python). Jak zapewne wiesz, sam Python jest napisany w C. Więc moje pytanie brzmi: jak głęboko trzeba zagłębić się w język programowania, aby być biegłym lub płynnym w tym języku. Porównuję to pytanie do języków „naturalnych”. Nie znam wszystkich szczegółów gramatyki w moim języku ojczystym, ale potrafię bez problemu wypowiadać się w tym języku. Wtedy mówię, że biegle władam językiem. Czy dotyczy to również języków programowania?


title: Czym tak naprawdę jest JavaScript?

text: Wszystko zaczęło się, gdy szukałem sposobu na przetestowanie mojej strony internetowej pod kątem zgodności z JavaScriptem, takim jak Walidator HTML W3C. Jeszcze nie znalazłem. Więc daj mi znać, jeśli znasz jakieś... 1. Szukałem oficjalnej strony JavaScript i znalazłem ECMA Script. Ci ludzie ustandaryzowali język skryptowy (nie mam już ochoty nazywać go JavaScript!) i nazwali go ECMA-262 (Wikipedia). Ich ostatnim dziełem jest Edition 5.1 2. JavaScript został opracowany przez moją firmę Mozilla Corporation, a ich ostatnią stabilną wersją jest 1.8.5 (zobacz to), która jest oparta na edycji 5.1 ECMA. Strona Wikipedii, do której prowadzi link, wspomina dialekty. JavaScript 1.8.5 Mozilli jest wymieniony jako dialekt wraz z JScript 9 (IE) i JavaScript (Chrome V8[Wiki]) i wieloma innymi. Czy mam rozumieć, że JavaScript 1.8.5 jest pochodną ECMA-262, a SpiderMonkey[Wiki] jest silnikiem, który go obsługuje? A Chrome ma swój dialekt, a silnik V8 to program, który go uruchamia? Z tymi wszystkimi dialektami opartymi na ECMA-262, to, czego już nie mogę zrozumieć, to „Co to jest _JavaScript_ ”? Czy istnieją naprawdę języki skryptowe dla wielu przeglądarek? Czy różni realizatorzy spotykają się, aby uzgodnić zgodność krzyżową dialektów? Czy to wysiłek ECMA?


title: Reprezentowanie reguł biznesowych z wyjątkami

text: Wiem, że jest to drogie, ale (IMO) uważam, że to bardzo dobra praktyka. Mówię o zasadach, takich jak powiedz, nie możesz zapisać faktury, jeśli nie jesteś sprzedawcą… więc w takim przypadku rzucenie wyjątku mówiącego „nie masz uprawnień” itp. Innym podejściem byłoby posiadanie przedmiotów ze statusem lub czymś w tym rodzaju Czy jest jakieś inne podejście? jak się z tym czujesz?


title: Czy są jakieś niezawodne rozwiązania dotyczące adnotacji/odbić/metadanych kodu w języku C?

text: Nie wszystkie języki obsługują adnotacje w stylu java lub atrybuty w stylu C# lub ogólnie metadane kodu, jednak nie oznacza to, że nie można ich używać w językach, które tego nie mają. Przykładem jest PHP z Stubbles i biblioteką adnotacji Doctrine. Moje pytanie brzmi, czy jest coś takiego dla C?, czy są jakieś niezawodne sposoby na refleksję z rozszerzonymi metadanymi kodu w C? Idealnie szukam czegoś, co czyta komentarze w stylu javadoc. Edycja: Powodem, dla którego ***potrzebuję***, a nie tylko chcę, jest to, że muszę wygenerować kod C i metadane kodu z bazy danych, a także móc edytować tę metadadę i aktualizować bazę danych. Wielkość pracy (~15 000 zmiennych/struktur/funkcji do wygenerowania z tej bazy danych) uzasadnia rozwiązanie.


title: Jak sprawić, by ogólny proces był wyjątkowy?

text: Obecnie pracuję nad projektem, który tworzy połączenie między różnymi bankami, które przesyłają nam informacje, na które ten projekt odpowiada. Część tego projektu konfiguruje różne używane protokoły (nie każdy bank używa tego samego protokołu), działa to na osobnym serwerze. Wszystkie te procesy mają unikalne identyfikatory, które są przechowywane w bazie danych. Aby jednak zaoszczędzić czas i pieniądze na konfiguracjach i nowych procesach, chcemy stworzyć ogólny protokół, z którego mogą korzystać banki. Ze względu na wymagania PCI musimy stworzyć osobny proces dla każdego banku, z którym się łączymy. Ale procesy generyczne mają tylko 1 unikalny identyfikator i dlatego nie możemy ich rozdzielić. Nadanie każdej kopii tego procesu innego identyfikatora jest moim zdaniem niemożliwe, ponieważ działają one całkowicie oddzielnie. Jak więc sprawić, by mój ogólny proces był wyjątkowy?


title: W MVC DAO powinno być wywoływane z kontrolera lub modelu

text: Widziałem różne argumenty przeciwko wywoływaniu DAO bezpośrednio z klasy Controller, a także DAO z klasy Model. W rzeczywistości osobiście uważam, że jeśli podążamy za wzorcem MVC, kontroler nie powinien być połączony z DAO, ale z klasą Model powinien wywoływać DAO od wewnątrz, a kontroler powinien wywoływać klasę modelu.Dlaczego, ponieważ możemy oddzielić klasę modelu od aplikacji internetowej i udostępnić funkcje na różne sposoby, na przykład dla usługi REST, aby użyć naszej klasy modelu. Jeśli napiszemy wywołanie DAO w kontrolerze, nie byłoby możliwe, aby usługa REST ponownie wykorzystała tę funkcjonalność, prawda? Poniżej podsumowałem oba podejścia. **Podejście #1** public class CustomerController extends HttpServlet { protectected void doPost(....) { Klient klient = nowy Klient("xxxxx","23",1); nowy CustomerDAO().save(klient); } } **Podejście #2** public class CustomerController extends HttpServlet { proctected void doPost(....) { Klient klient = nowy Klient("xxxxx","23",1); klient.zapisz (klient); } } public class Klient { ........... private void save(Customer customer){ new CustomerDAO().save(customer); } } **Uwaga** \- Oto jaka jest definicja modelu: Model: Model zarządza zachowaniem i danymi domeny aplikacji, odpowiada na prośby o informacje o swoim stanie (zwykle z widoku) i odpowiada na instrukcje zmiany stanu (zwykle ze sterownika). W systemach sterowanych zdarzeniami model powiadamia obserwatorów (zwykle widoki) o zmianie informacji, aby mogli zareagować. Potrzebowałbym opinii eksperta na ten temat, ponieważ znajduję wielu przy użyciu #1 lub #2, więc który to jest?


title: Kiedy słowo kluczowe register jest rzeczywiście przydatne w C?

text: Jestem zdezorientowany co do użycia słowa kluczowego `register` w C. Ogólnie mówi się, że jego użycie nie jest potrzebne, jak w tym pytaniu dotyczącym przepełnienia stosu. Czy to słowo kluczowe jest całkowicie zbędne w C ze względu na nowoczesne kompilatory, czy są sytuacje, w których może być nadal przydatne? Jeśli tak, w jakich sytuacjach użycie słowa kluczowego „rejestr” jest rzeczywiście pomocne?


title: Korzystanie z oprogramowania do śledzenia błędów/problemów w celu omówienia kwestii projektowych, nowych narzędzi itp.

text: Czy ktoś ma doświadczenie w korzystaniu z oprogramowania do śledzenia błędów/śledzenia problemów, takiego jak bugzilla, mantis lub JIRA, nie tylko w przypadku błędów lub zadań, ale także w inicjowaniu i prowadzeniu dyskusji, które ostatecznie prowadzą do decyzji? Na przykład programista uważa, że wszystkie chronione pola powinny zostać zniesione i zmienione na pola prywatne za pomocą chronionych metod, które mają do nich dostęp. To nie jest jego powołanie i chciałby o tym porozmawiać. Zwykle porusza ten punkt na następnym spotkaniu deweloperskim, na którym zapada decyzja. Zamiast tego, moim pomysłem było, aby otworzył sprawę pewnego typu „decyzji” i opisał swoje zamiary tak, jak zwykle opisuje się błąd lub zadanie. Inni programiści mogą zgłaszać swoje komentarze, jeśli mają na to ochotę, a ostatecznie sprawa jest zamykana jako „zaakceptowana” lub „odrzucona”. Widzę w tym zalety: * Komunikacja asynchroniczna: nikt nie jest zmuszany do wyrażania swojej opinii na spotkaniu, gdy nie miał jeszcze czasu, aby przyjrzeć się wszystkim konsekwencjom tej decyzji. * Pisemny dziennik rozważań, które prowadzą do podjęcia decyzji. Jeśli ktoś później ponownie postawi to pytanie, można go do niego odesłać. * Można nawiązać relacje z innymi sprawami, m.in. zadanie może być poprzedzone podjęciem decyzji. * Integracja z oprogramowaniem do kontroli wersji, m.in. zatwierdzenie można prześledzić z powrotem do decyzji. Wady: * Ciężki zapach złotego młotka: oprogramowanie do śledzenia problemów jest zwykle używane do śledzenia elementów wymagających działania * Narzut organizacyjny może być nieproporcjonalny: zamiast małej nieformalnej rozmowy trzeba przekazać swoje pomysły w formie pisemnej


title: Czy programowanie modułowe wpływa na czas obliczeń?

text: Wszyscy mówią, że powinienem uczynić mój kod modułowym, ale czy nie jest to mniej wydajne, jeśli używam więcej wywołań metod, a nie mniej, ale większych metod? Jaka jest różnica w Javie, C lub C++? Rozumiem, że łatwiej jest edytować, czytać i rozumieć, zwłaszcza w grupie. Czy zatem strata czasu obliczeń jest nieznaczna w porównaniu z korzyściami związanymi z porządkiem kodu?


title: Izolowanie testów jednostkowych w Pythonie

text: Jako 30-letni programista, głównie w językach OO, ale nowicjusz w Pythonie, szukam najlepszych praktyk w izolowaniu testów jednostkowych w Pythonie. Powiedzmy, że mam następujący, pół-pseudo-kod. Wiem, że some_database_client nie jest prawdziwym klientem bazy danych: from some_database_client importuje połączenie connection.connect('server_id','username','password') def function_under_test(): return connection.get_value('some_value_reference') + 10 Jeśli piszę test dla `function_under_test()`, a następnie skutecznie testuję potencjalnie ogromną ilość logiki w łączeniu i pobieraniu danych z `connection`. Zamiast tego naprawdę chcę przetestować, czy funkcja `function_under_test()` dodaje dziesięć do pobranej wartości. Odnosi się to do praktycznego przykładu ze świata rzeczywistego, w którym zmienna na poziomie modułu `connection` (lub jej odpowiednik w świecie rzeczywistym) jest mocno przywoływana w całym kodzie. Dlatego przekazanie `połączenia` jako argumentu do wszystkich funkcji, które go używają, wymagałoby dużej i przez to bardzo ryzykownej zmiany. Jednak bez tego nie mogę łatwo oddzielić zmiennej `connection`, gdy próbuję przeprowadzić test jednostkowy funkcji, które z niej korzystają. `connection` jest tworzony zanim jeszcze uruchomię test jednostkowy. Czy istnieje zalecany sposób izolowania takich funkcji do testowania? Z pewnością potrafię wymyślić wiele, wiele sposobów, ale podejrzewam, że niektórzy mają o nich więcej „Zen Pythona” niż inni. np. Zawijanie wszystkiego w klasy jest możliwe, ale być może jest to zbyt dalekie od prostoty, co jest celem Pythona.


title: Czy sprzedaż aplikacji na Androida (USA) jest wymagana do założenia firmy?

text: Wiem, że możesz sprzedawać aplikacje, korzystając z własnych danych podatkowych, ale co, jeśli nad aplikacją pracuje kilka osób? Nasz plan polega na tym, że jeden z nas zarejestruje się na koncie Google Merchant, a następnie podzielimy się prywatnie wszelkimi przychodami pochodzącymi z konta PayPal. Czy to legalne? A może musimy faktycznie stworzyć LLC i mieć listę płac itp.?


title: Organizowanie naprzemiennej historii użytkownika w Scrumie

text: Jak zorganizowałbyś element zaległości, który ma ulec zmianie w przyszłych wydaniach? Mam wymaganie, które mówi, że: W wydaniu 1 użytkownicy mogą otwierać zawartość z lokalnych maszyn. W przyszłych wydaniach użytkownicy będą mogli otwierać treści ze zdalnych serwerów, FTP i strumieni internetowych. Czy typowe jest tworzenie 2 pozycji zaległości, aby opisać to wymaganie. Czy po prostu przypisać ulepszenie do przyszłej wersji? (Używanie TFS do wszelkich odpowiedzi kontekstowych)


title: Stwórz aplikację, która komunikuje się z aplikacją na serwerze przez Wi-Fi

text: To bardzo szerokie pytanie i szukam tylko wskazówki we właściwym kierunku, a nie konkretnej odpowiedzi, ale jest to coś, nad czym zawsze się zastanawiałem i nigdy nie wiedziałem. Powiedzmy, że mam program, który napisałem i umieściłem go na serwerze. Następnie piszę aplikację na Androida, której chcę użyć do kontrolowania tego programu (w zasadzie podaj dane wejściowe). aplikacja, która jest tylko interfejsem użytkownika dla tego programu i może być kontrolowana z dowolnego miejsca, myślę, że to coś w rodzaju zdalnego drukowania przez Wi-Fi. Naprawdę nic o tym nie wiem ani nawet od czego zacząć. Doceniłbym nawet kilka słówek, które wskazują mi właściwy kierunek.


title: Wizualizacja złożonego oprogramowania

text: ## Pytanie Jaki jest dobry sposób na wizualizację złożonej aplikacji? Czy zalecane aplikacje mogą być użyte do tego celu? ## Tło Około 3 lata temu zacząłem budować aplikację do eksploracji danych internetowych. Zaczynałem jako sam, ale od tego czasu rozrósł się do projektu z 5 programistami. Kiedyś byłem w stanie śledzić wszystkie części aplikacji w moim umyśle, ale teraz stała się ona tak złożona, że odczuwam potrzebę pewnego rodzaju wizualnej dokumentacji struktury aplikacji. Nie jestem do końca pewien, dokąd mam się udać. Myślę o czymś, co wygląda jak schemat blokowy. Ale nie mam żadnego wykształcenia, doświadczenia ani formalnego szkolenia w tworzeniu oprogramowania na taką skalę. Nigdy też nie pracowałem w innym zespole, w którym mogłem obserwować, jak ktoś inny projektuje złożoną aplikację lub zarządza zespołem. Wszelkie wskazówki we właściwym kierunku, takie jak książki lub zasoby na ten temat, byłyby bardzo mile widziane!


title: Rozdzielenie budowy i inicjalizacji

text: Jestem zdezorientowany tym postem Marka Seemana. I jego komentarz na temat IInitializable poniżej: > Problem z metodą Initialize jest taki sam, jak z wstrzykiwaniem właściwości > (znany również jako Setter Injection): tworzy sprzężenie czasowe między metodą > Initialize a wszystkimi innymi członkami klasy. O ile naprawdę nie możesz > wywołać dowolnego innego członka klasy bez uprzedniego wywołania metody Initialize >, taki projekt interfejsu API jest oszukańczy i prowadzi do wyjątków w czasie wykonywania. > Znacznie trudniej jest również zapewnić, że obiekt jest zawsze w > spójnym stanie. Jednocześnie pisze: > Ta kwestia jest podobna do kwestii wywoływania składowych wirtualnych > z konstruktora. Koncepcyjnie wstrzyknięta zależność jest równoważna wirtualnemu członkowi >. Myślę, że to stwierdzenie jest prawdziwe tylko wtedy, gdy przyznasz, że skonstruowane != zostało zainicjowane. Co teraz otrzymujemy: Dependecnie są wstrzykiwane do konstruktora, ale nie zaleca się ich używania. Faza inicjalizacji przynosi złożoność i należy jej unikać. Czy to nie jest sprzeczne? Wyobraź sobie, że klasa musi ustawić swój stan przy użyciu dostarczonych zależności. Na przykład wczytywanie zapisanych ustawień. Init jest zły, konstruktor jest zły, więc gdzie wykonać tę operację? I jeszcze jedna kwestia: czy metody takie jak Connection.Open() nie są po prostu inną nazwą dla Initialize? Pytanie: _Więc czy ktoś może opisać dobry wzorzec inicjalizacji w kontekście Dependency Injection, który rozwiązuje obawy, które podsuwa Mark Seeman?_