title: Idealny i idomatyczny interfejs JavaScript dla RESTful API

text: Próbuję napisać usługę kątową do interfejsu z interfejsem API RESTful. Dla uproszczenia załóżmy, że API to + Firma |___+ Dział | |____ Osoba | |____ Osoba > Zwróć uwagę, że osoba może znajdować się w sekcji „Firma > Dział” lub bezpośrednio > w sekcji „Firma”. Każdy z encji (Firma, Dział i Osoba) > obsługuje dodawanie, edycję, listę i get_by_id. Który z poniższych interfejsów jest bardziej idiomatyczny? ## Opcja 1: // We wszystkich przypadkach get(), put() zwracają $http obietnicę companyApi().get() // Lista wszystkich firm companyApi(1).get() // Pobierz firmę o identyfikatorze 1 companyApi (1).departments().get() // Wyświetl wszystkie działy companyApi(1).departments(2).get() // Pobierz dział o identyfikatorze 2 companyApi(1).departments(2).persons(). get() // Lista wszystkich osób companyApi(1).departments(2).persons().put(p) //Dodaj nową osobę w dziale 2 companyApi(1).persons().put(p) // Dodaj nową osobę w firmie 1 companyApi(1).persons(3).put(p) //Edytuj osobę o ID=3 w firmie 1 companyApi(1).persons(1).remove(p) // Usuń a osoba ## Opcja 2: // We wszystkich przypadkach get(), put() return $http obietnica // Lista wszystkich firm companyApi({ type: 'company' }).get(); // Pobierz firmę o ID=1 companyApi({ type: 'company', companyId: 1 }).get(); // Pobierz dział o ID=2 w firmie 1 companyApi({ type: 'department', companyId: 1, DepartmentId: 2 }).get(); // Lista osób w dziale o ID=2 w firmie 1 companyApi({ type: 'person', companyId: 1, DepartmentId: 2 }).get(); // Pobierz osobę o ID=3 w dziale z ID=2 w firmie 1 companyApi({ type: 'person', companyId: 1, DepartmentId: 2, personId: 3 }).get(); // Pobierz osobę o ID=3 w dziale z ID=2 w firmie 1 companyApi({ type: 'person', companyId: 1, DepartmentId: 2, personId: 3 }).get(); // Dodaj osobę w dziale o ID=2 w firmie 1 companyApi({ type: 'person', companyId: 1, DepartmentId: 2, }).put(personObj); //Edytuj osobę o ID=3 w firmie 1 companyApi({ type: 'person', companyId: 1, DepartmentId: 2, personId: 3 }).put(personObj); // Dodaj osobę bezpośrednio do firmy 1 companyApi({ type: 'person', companyId: 1 }).put(personObj);


title: Jak poprawnie sformułować model domeny w projektowaniu opartym na domenie (konteksty ograniczone, domeny)?

text: Załóżmy, że masz kilka aplikacji, które obsługują kilka różnych domen podstawowych. _Przykłady są zmyślone i trudno jest zestawić prawdziwy przykład z sensownymi danymi (zwięźle)._ W projektowaniu opartym na domenie (DDD), kiedy zaczynasz patrzeć na Bounded Contexts i Domains/Sub Domains, mówi się, że Bounded Context jest „faza” w cyklu życia. Przykładem kontekstu jest tutaj system e-commerce. Chociaż możesz modelować to jako pojedynczy system, uzasadniałoby to również podzielenie na oddzielne Konteksty. Każdy z tych obszarów w aplikacji ma swój własny język wszechobecny, własny model i sposób na porozumiewanie się z innymi kontekstami ograniczonymi w celu uzyskania potrzebnych informacji. Domeny podstawowe, podrzędne i ogólne są obszarem specjalizacji i mogą być liczne w złożonych aplikacjach. 1. Załóżmy, że istnieje długi proces związany z Jednostką, na przykład Książką w domenie podstawowej. Patrząc teraz na Bounded Contexts, w cyklu życia książki może występować kilka faz. Powiedz zarys, tworzenie, korekta, publikowanie, etapy sprzedaży. 2. Teraz wyobraź sobie drugą domenę podstawową, być może domenę sklepu. Wydawnictwo posiada własną filię sklepów do sprzedaży książek. Sklep może mieć wiele ograniczonych kontekstów (faz cyklu życia), na przykład kontekst "Zapasu" lub "Zapasu". W pierwszej domenie prawdopodobnie znajduje się tabela bazy danych Book z zasadniczo tylko identyfikatorem do śledzenia różnych jednostek książki w różnych cyklach życia. Załóżmy teraz, że masz ponad 10 domen wspierających, np. Użytkownicy, Katalogi, Inwentarz, .. (trudno wymyślić odpowiednie przykłady). Na przykład DomainModel dla fazy Book Outline, Creation, Correction, Publish, Sale. W przypadku głównej domeny Store prawdopodobnie ma ona kilka faz cyklu życia. public class BookId: Entity { public long Id { get; ustawić; } } W fazie tworzenia (Bounded Context) książka mogłaby być prostą klasą. public class Book: BookId { public string Title { get; ustawić; } public List<string> Chapters { get; ustawić; } //... } Natomiast w fazie publikowania (Bounded Context) miałby cały tekst, datę wydania itd. public class Book : BookId { public DateTime ReleaseDate { get; ustawić; } //... } Bezpośrednią korzyścią, jaką widzę w rozdzieleniu przez „fazę cyklu życia”, jest to, że jest to świetny sposób na oddzielenie logiki biznesowej, dzięki czemu nie ma gigantycznych, wszechogarniających encji ani usług domenowych. Problem, który mam, polega na ustaleniu, jak konkretnie zdefiniować reguły fizycznego układu Modelu Domeny. A. Czy model domeny jest „modelowany”, dzięki czemu istnieje tyle kontekstów ograniczonych (oddzielne projekty itp.), ile jest faz cyklu życia w domenach podstawowych w złożonej aplikacji? **Edytuj: Odpowiedz na A.** Tak, zgodnie z odpowiedzią Aleksieja Zimareva powinna istnieć cała „Domena” dla każdego ograniczonego kontekstu. B. Czy Model Domeny jest zazwyczaj uporządkowany według Bounded Contexts (lub Domeny, czy obu)? **Edycja: Odpowiedź na B.** Każdy ograniczony kontekst powinien mieć własną kompletną „Domenę” (usługa/jednostki/VO/repozytoria) C. Czy to oznacza, że łatwo może być 10 „segregowanych” modeli domen i wiele projektów może go używać (jednostki/obiekty wartości)? **Edycja: Odpowiedź na C.** Dla każdego kontekstu ograniczonego istnieje pełna „domena”, a model domeny (warstwa encja/VO/projekt) nie jest „używany” bezpośrednio przez inne konteksty ograniczone, tylko za pośrednictwem wybranych ścieżek (tj. przez zdarzenia domeny). Częścią, którą staram się zrozumieć, jest to, jak faktycznie zaimplementowany jest model domeny, gdy zaczniesz rozumieć swoje ograniczone konteksty i domeny podstawowe/podrzędne, szczególnie w złożonych aplikacjach. Celem jest ustalenie definicji, które mogą pomóc w oddzieleniu encji pomiędzy ograniczonymi kontekstami i domenami.


title: Jakie rodzaje wiedzy niskiego poziomu mają znaczenie?

text: Zdaję sobie sprawę, że to pytanie jest podobne do programowania niskopoziomowego – co w nim jest dla mnie, ale odpowiedzi tak naprawdę nie odpowiadały dobrze mojemu pytaniu. Pomijając tylko zrozumienie, jak dokładnie Twoja wiedza niskiego poziomu przekłada się na szybsze i lepsze programy? Oczywistym jest brak zatrzymania świata przed wywozem śmieci, ale co jeszcze jest zaletą? Czy naprawdę przewyższasz kompilator optymalizujący? Czy pakujesz swoje struktury danych tak ciasno, jak to możliwe i martwisz się o wyrównanie? Naturalnie jest dodatkowa wolność, ale czy to naprawdę przekłada się na szybszy program?


title: Jak mogę zarządzać centralnym repozytorium dokumentacji?

text: Nasz zespół pracuje z wieloma różnymi interfejsami API i usługami, a także posiadamy własne wewnętrzne narzędzia i usługi, które utrzymujemy. W tej chwili nie mamy dobrego, centralnie zarządzanego systemu, aby wymieniać projekty, w których używaliśmy określonego interfejsu API, ani dołączać dokumentacji dla wszystkich naszych narzędzi/apisów. Wierzę, że to, czego szukam, to jakiś rodzaj zespołu wiki, ale nie byliśmy pod wrażeniem możliwości wyszukiwania rozwiązania, które wypróbowaliśmy (Sharepoint). Czy wiki to właściwy sposób na scentralizowanie dokumentacji? Na jakie rzeczy powinienem zwrócić uwagę podczas tworzenia scentralizowanego systemu dokumentacji?


title: Visual Studio Express kontra SharpDevelop

text: Potrzebuję trochę informacji od ludzi, którzy używali obu tych programów. Obecnie używam Visual Studio Express 2010 do tworzenia projektu w VB.net i WPF 4. Właśnie odkryłem darmowe IDE o nazwie IC#Develop, które najwyraźniej obsługuje oba te formaty. Czy ktoś korzystał z obu, a jeśli tak, jakie są zalety i wady każdego z nich? Co poleciłbyś? Czy IC#Develop jest dobrą alternatywą dla bardzo drogiego Visual Studio Ultimate?


title: Jaki jest właściwy sposób na rozwidlenie/ponowne wykorzystanie kodu z projektu open source?

text: Załóżmy, że pracuję nad projektem open source i chcę ponownie użyć trywialnej funkcji narzędzia z innego projektu open source (na przykład funkcji wyszukiwania/zamieniania plików). Czy legalne jest kopiowanie tej funkcji i po prostu napisanie małej informacji o prawach autorskich w górnej części pliku? Czy powinienem zawrzeć w licencji ich nazwiska jako właścicieli praw autorskich do całego projektu? Podobnie, powiedzmy, że rozwidlam projekt open source. Gdzie i jak mogę określić, że prawa autorskie są dzielone zarówno pomiędzy pierwotnego posiadacza praw autorskich, jak i mnie? Myślę, że odpowiedź musi się nieco różnić w zależności od licencji open source, ale chciałbym jak najwięcej ogólnej odpowiedzi. PS: Martwię się przede wszystkim o aspekt prawny, ale nie wahaj się przedstawić swojego etycznego punktu widzenia.


title: Java vs PHP Pamięć / zużycie procesora

text: Pracuję w firmie opartej na PHP. Jest projekt, w którym chcemy stworzyć usługę backendu. Starsi członkowie wybierają PHP, chociaż jest wolniejszy niż Java. Ich jedynym punktem spornym jest to, że Java jest cięższa od PHP zarówno pod względem pamięci, jak i obciążenia procesora. Jvm jest bardziej jak środowisko kontenerowe, jeśli wniesiesz więcej bagażu, zużyje to tak dużo, ale usługa, o której tutaj mówimy, będzie średnio złożona. Więc są szanse, że nie będzie to zbyt wymagające (a może będzie?). Rozumiem, że to pytanie mocno skłania się do niejasności, jednak mój punkt rozważania jest taki, że zawsze jest tak samo? Że Java jest bardziej wymagająca sprzętowo? Chciałbym tylko poznać opinie wszystkich doświadczonych ludzi na temat tego, jak wygląda rzeczywisty scenariusz.


title: Co to za błąd?

text: Moja aplikacja ma 3 metody wysyłki, z których najtańsza jest bezpłatna. Opcja bezpłatnej wysyłki jest dostępna tylko dla zamówień o łącznej wartości powyżej 100 USD. Gdy tylko go zbudowałem, pomyślałem o sposobie, w jaki użytkownik mógłby łatwo to obejść. Dodaj produkty do koszyka o łącznej wartości powyżej 100 USD, a następnie wybierz bezpłatną wysyłkę, a następnie edytuj koszyk tak, aby był mniejszy niż 100 USD i zachowaj bezpłatną wysyłkę. Poprawiłem moją aplikację, aby na to nie zezwalać. Zacząłem się jednak zastanawiać, jak nazywasz tego rodzaju wadę projektową? Wiem, że można to nazwać błędem, ale czy istnieje lepszy opis, którego mogę użyć, aby ktoś zrozumiał, o czym mówię?


title: Bezpieczeństwo poprzez ukrywanie i przechowywanie niezaszyfrowanych haseł

text: Co dokładnie oznacza „Zabezpieczenie przez ukrywanie” w kontekście zapisywania niezaszyfrowanych haseł? Korzystam z niewielkiego programu (nie będę go nazywał, żeby nie wywoływać dość dużego wstydu jego autorowi), który używa mojego konta Google do pewnych zadań. Zauważyłem, że przechowuje moje hasło w niezaszyfrowanym pliku tekstowym. Po prostu ciąg znaków, widoczny dla wszystkich, który można przeciągnąć i upuścić do Notatnika lub użyć klawisza 'F3' w Total Commanderze. Otrzymałem bilet z prośbą do autora programu o naprawienie tego JAK NAJSZYBCIEJ. Nie otrzymałem jeszcze żadnej odpowiedzi, ale mój problem otrzymał jeden komentarz, który zawiera jedynie wspomniany wyżej link do strony Wikipedii " _Bezpieczeństwo przez zapomnienie_ ". Jak mam rozumieć ten komentarz? Czy to za czy przeciw mój problem? Na początku myślałem, że to wspiera moje oświadczenie o naprawieniu tego JAK NAJSZYBCIEJ. Ale potem znalazłem przykład Fetchmaila Erica Raymonda (w " _Katedrze i bazarze_ "), który odmówił zaimplementowania szyfrowania pliku konfiguracyjnego (hasła są przechowywane w pliku konfiguracyjnym dla Fetchmaila), twierdząc, że to od użytkownika zależy zapewnienie bezpieczeństwa przez nie pozwalając nikomu „z zewnątrz” na dostęp do tego pliku konfiguracyjnego. To stwierdzenie (lub odmowa) jest często przedstawiane jako przykład _Ochrony przez zapomnienie_. Patrząc z tego punktu widzenia, całkowicie się mylę i ten autor programu ma rację. Nie musi implementować szyfrowania pliku moim hasłem, może tam pozostać, przechowywany w postaci niezaszyfrowanej i to ja odpowiadam za zapewnienie bezpieczeństwa, nie dając nikomu dostępu do tego pliku lub usuwając go za każdym razem, gdy przestanę używać tego softu . (inne pytanie brzmi, jak mogę to osiągnąć w systemie tak niezabezpieczonym jak sam Windows?) To wydaje się być w całkowitej opozycji do tego, co mówiono mi i uczyłem się przez lata, więc chciałbym zapytać bardziej doświadczonych programistów, kto jest tutaj i jak dokładnie mam rozumieć „StO”?


title: C++: wywoływanie funkcji niebędących członkami o tej samej składni, co funkcje członkowskie

text: Jedną rzeczą, którą chciałbym zrobić w C++, jest wywołanie funkcji niebędących członkami o tej samej składni, co funkcje członkowskie: class A { }; void f( A & this ) { /* ... */ } // ... A a; a.f(); // to to samo co f(a); Oczywiście może to działać tylko tak długo, jak * `f` nie jest wirtualny (ponieważ nie może pojawić się w wirtualnej tabeli `A`. * `f` nie musi mieć dostępu do niepublicznych członków `A`. * `f` nie koliduje z funkcją zadeklarowaną w `A` (`A::f`). Chciałbym taką składnię, ponieważ moim zdaniem byłaby całkiem wygodna i nakłaniałaby do dobrych nawyków: 1. wywołanie `str.strip()` na `std::string` (gdzie `strip` jest funkcją zdefiniowaną przez użytkownika) brzmi o wiele lepiej niż wywołanie `strip( str );`. zawsze?) klasy dostarczają pewnych funkcji członkowskich, które nie wymagają bycia członkami (np. nie są wirtualne i nie używają niepublicznych członków).To łamie enkapsulację, ale jest najbardziej praktyczną rzeczą do zrobienia (ze względu na punkt 1 ). Moje pytanie brzmi: co sądzisz o takiej funkcji? Czy uważasz, że byłoby to coś miłego, czy coś, co wprowadziłoby więcej problemów niż te, które ma rozwiązać? Czy proponowanie takiej funkcji ma sens? następny standard (ten po C++0x)?* * * Oczywiście to tylko krótki opis tego pomysłu; nie jest kompletna; prawdopodobnie musielibyśmy wyraźnie oznaczyć funkcję specjalnym słowem kluczowym, aby działała w ten sposób i wiele innych rzeczy.


title: Jak daleko iść z testami jednostkowymi

text: Pytanie zadawane wiele razy wcześniej, ale ze specyficznym nachyleniem rozwoju twds mvc. Byłem bardzo dobrym chłopcem i kodowałem wszystkie moje akcje kontrolera z odpowiednimi testami jednostkowymi, które były świetne (jeśli czasami trochę [czytaj DUŻO] powtarzalne). Szczerze mówiąc, stworzyłem mały szablon T4, aby napisać większość nagich kości początkowych testów jednostkowych, a następnie dostosowałem go odpowiednio do użycia. Przyznam, że nie jestem do końca pewien, jak radzić sobie z testami w widokach zawierających widoki częściowe - ale to już historia na inne pytanie. Teraz trudno mi zdecydować, jak głębokie powinno być pokrycie w mojej warstwie usług. Powodem jest to, że niektóre z moich metod serwisowych (na lepsze lub gorsze) faktycznie wykonują różne zapytania linq, które następnie dostarczają dyskretne informacje do kolejnej logiki w ramach metody. Wiem, że mógłbym (powinienem?) rozbić te metody, aby wywołać tylko wymaganą logikę dla każdej instrukcji linq, a następnie zastosować je w ramach metody. Jednak w wielu przypadkach nigdy nie ma ponownego użycia funkcji linq i dlatego wydaje się, że spowodowałoby to refaktoryzację kodu o poziom za daleko. To, o co pytam, to czy przy złożonej logice występującej w ramach metody „wystarczająco dobre” jest posiadanie metody testowej, która po prostu potwierdza wymagany wynik i/lub oczekiwany błąd, czy też każda linia logiczna powinna być symulowana i testowana. sposób, w jaki to widzę, aby wykonać test poprawnie, to logika metody (linia po linii) również powinna być w pewnym stopniu pokrywana. To jednak (moim naiwnym zdaniem) może prowadzić do niekończącego się cyklu prób utrzymywania testu i wdrożonej metody tak blisko siebie (co wiem, że powinno być), aby stworzyć chałupniczy przemysł w samych testach. Wiem, że moje pytanie może urazić kilku wielbicieli TDD, którzy uznają to za nieprzemyślane. Nie będąc w obozie TDD, jest to dla mnie "tak myślenie", stąd pytanie. btw - sprawdziłem to pod kątem pomysłów: http://dotnetslackers.com/articles/aspnet/Built-in-Unit-Test-for-ASP-NET-MVC-3-in-Visual-Studio-2010-Part-1 .aspx patrząc w przód do stałych głosów przeciwnych :) **[edytuj]** \- na korzyść singla (w tej chwili singla!!) 'zamknij' głosującego. to pytanie jest **nie** subiektywne. Szukam zgody na bardzo konkretny temat. Nie próbuję rozbudzać negatywnych namiętności, nie obnażam wad w technologii - jestem OGROMNYM fanem. Więc proszę, zostaw uprzejmy komentarz na moją korzyść, jeśli głosuję za zamknięciem, ponieważ może to pomóc mi zmienić strukturę pytania, jeśli jest niejasność lub dezinformacja. to pytanie może przynieść korzyści dużej części populacji mvc. Dziękuję Ci!! Jim


title: buforowanie na wielu serwerach

text: Ponieważ musimy utrzymywać krótkie czasy odpowiedzi, otrzymujemy mnóstwo żądań i musimy w zasadzie przetwarzać PRAWIE te same dane (które będę określać jako X) każde żądanie (jednak dane wejściowe są różne, więc nie możemy buforować odpowiedzi), używamy techniki, w której co 90 sekund pobieramy nową kopię X z bazy danych i przechowujemy ją lokalnie w pamięci jako listę słowników Pythona na naszych serwerach aplikacji (używamy uwsgi). Załamanie w maszynie: istnieją tymczasowe analizy, które musimy śledzić w ciągu tych 90 sekund, aby dostosować nasze dane w każdej iteracji, a każda iteracja zależy od tego, co obliczyliśmy na podstawie ostatniej iteracji. Problem polega na tym, że mamy wiele serwerów aplikacji, które przechowują te same dane X w pamięci i każdy z tych serwerów musi odświeżyć X w tym samym czasie, aby zachować spójność obliczeń dla następnego interwału. Próbowałem kilku technik, takich jak nadawanie wiadomości po każdym obliczeniu, aby przeładować X każdego serwera, ale nie było to tak skuteczne, jak bym chciał, a to tylko komplikuje sprawę. Powinienem powiedzieć, że powodem, dla którego nie używaliśmy memcached lub czegoś podobnego, jest to, że nie chcemy poświęcać żadnej szybkości, jeśli możemy. Może nie wiem, jak szybko możemy pobrać i załadować listę do obiektów Pythona z memcached. Rozumiem, że moje wyjaśnienie nie jest najlepsze i odpowiem na wszelkie pytania, aby dać lepszy obraz sytuacji. Edycja: mamy około 5000 żądań na sekundę, rozmiar danych, które przetwarzamy, wynosi obecnie około 2 MB, ale będzie nadal rósł, więc chcielibyśmy uniknąć przesyłania ich przez sieć dla każdego żądania.


title: Brak członka zespołu? Klej między producentami danych a konsumentami danych

text: Działamy w branży handlu automatycznego, a nasz zespół składa się z dwóch większych grup, które nazywam producentami danych i konsumentami danych. Podstawowym zadaniem producentów jest utrzymanie łańcucha mniejszych narzędzi, które przepychają niektóre dane w czasie rzeczywistym przez system wskaźników i wychodzi zamówienie. Wszystkie potrzebne lub wytworzone dane są rejestrowane w plikach, jeden plik na narzędzie na przebieg. Z drugiej strony konsumenci danych, przyzwyczajeni do testowania wstecznego i przechwyceni w ich świecie zaplecza, chcą fragmentów danych generowanych w różnych cyklach, dopracowanych do ich potrzeb, a dokładniej jednego dużego fragmentu danych poddanych obróbce końcowej dziennie. **Problem**, który podzielił nasz zespół na dwie dobrze rozróżnialne strony, polega na tym, że producenci danych uważają za swój obowiązek dostarczanie kompleksowych danych bez utraty informacji i chcą, aby konsumenci wybrali wszystko, czego potrzebują w _pre_ -krok przetwarzania. Z drugiej strony konsumenci chcą widzieć handel na żywo jako czarną skrzynkę, dla nich nie powinno to różnić się od backtestu, co oznacza, że producentom danych w ich oczach brakuje kluczowego etapu _post-processingu, bez którego nie mogą rozpocząć ich zadaniem. Teraz wyraźnie musi być jakiś klej między tymi dwoma zespołami, moje pytanie brzmi, czyje to jest zadanie? A może pośrodku jest trzecia grupa, która dostarcza kleju? Co mówi o tym teoria (czy możemy zastosować wzorzec producent/konsument do „prawdziwego życia”)? I żeby problem był prawdziwy: producenci danych uważają za brzydkie sprowadzanie danych do zużywalnych kawałków, głównie dlatego, że strona konsumentów ciągle zmienia swoje wymagania. Z drugiej strony konsumenci nie są wystarczająco wykwalifikowani, aby dokonać proponowanej selekcji.


title: Dodawanie testów jednostkowych do aplikacji brownfield

text: Pracuję dla firmy, która od lat opracowuje serię produktów z niewielkim lub zerowym testowaniem jednostkowym. Chcą przejść do TDD i testować nowy kod w przyszłości. Martwi mnie jednak brak testowalności starego kodu i to, gdzie postawić granicę między starym a nowym. Czy ktoś miał doświadczenie w testowaniu jednostek na warstwach w oprogramowaniu do terenów poprzemysłowych, takim jak to? Jeśli tak, czy mógłbyś polecić jakieś skuteczne podejścia?


title: Graficzna reprezentacja powierzchni Ziemi w wysokiej rozdzielczości

text: Mam bibliotekę, którą odziedziczyłem, która przedstawia przybliżoną reprezentację Ziemi. Jest to odwzorowanie Mercatora i jest zbudowane z trójkątów, których właściwości są przechowywane w plikach binarnych. Powierzchnia jest budowana dla dowolnego okna obserwacyjnego poprzez narysowanie tych trójkątów w sposób nakładający się, aby uzyskać obraz. Definicja każdego trójkąta to szerokość/długość wierzchołków. Wygląda dobrze przy niskich wartościach powiększenia, ale wygląda na coraz bardziej poszarpane w miarę powiększania przez użytkownika. Widoki są wyświetlane głównie przez prostokąt o współrzędnych szerokości/długości. Chciałbym to zastąpić podejściem lepszej jakości. Problem polega na tym, że nie wiem, od czego zacząć szukać opcji, ponieważ nie znam potrzebnych rzutów ani technik graficznych używanych do ich renderowania. Na przykład wyobrażam sobie, że mógłbym uzyskać obrazy o wysokiej rozdzielczości, powiedzmy projekcje Mercatora, chociaż jestem otwarty na wszystko, rozbić je na płytki i jakoś zawinąć w graficzną reprezentację kuli. Nie pytam „jak mam zrobić”, bardziej od czego powinienem zacząć rozumieć, co może być z tym związane i technik, których będę musiał się nauczyć. Jestem bardzo wdzięczny za wszelkie wskazówki dotyczące „Earth rendering 101” jakie mogą mieć ludzie.


title: Jak organizujesz swoje metody w programowaniu OO?

text: Ilekroć programuję w języku obiektowym, zawsze mam do czynienia z kolejnością i sposobem grupowania metod dla obiektu. Czy są jakieś standardy lub sugestie?


title: Prześlij kod podczas rozmowy kwalifikacyjnej

text: Prowadzę rozmowę kwalifikacyjną na stanowisko w startupie internetowym. Stanowisko dotyczy prowadzenia eksploracji danych na ich bardzo dużej bazie informacji o użytkownikach. W ramach procedury wywiadu (na odległość), która polega na zbadaniu podzbioru ich bazy danych, poprosili mnie o przesłanie kodu, którego użyłem do analizy. Moją główną obawą jest to, że ten kod jest „zastrzeżony”, z braku lepszego słowa. Nie mam problemów z przekazaniem im całego mojego kodu, jeśli w końcu dla nich pracuję, ale biorąc pod uwagę, że potencjalnie mogą wziąć kod, a nie zatrudnić mnie, i użyć go w swojej większej bazie danych do generowania przychodów, jestem niezdecydowany. Czy jestem po prostu paranoikiem? Czy jest to uzasadniona obawa?


title: Czy format csv można zdefiniować za pomocą wyrażenia regularnego?

text: Kolega i ja ostatnio spieraliśmy się, czy czysty regex jest w stanie w pełni zahermetyzować format csv, tak aby był w stanie przeanalizować wszystkie pliki z dowolnym znakiem ucieczki, cudzysłowu i separatora. Wyrażenie regularne nie musi mieć możliwości zmiany tych znaków po utworzeniu, ale nie może zawieść w żadnym innym przypadku brzegowym. Twierdziłem, że jest to niemożliwe dla zwykłego tokenizatora. Jedynym wyrażeniem regularnym, które może to zrobić, jest bardzo złożony styl PCRE, który wykracza poza zwykłe tokenizowanie. Szukam czegoś w stylu: > ... format csv to gramatyka bezkontekstowa i jako taka jest niemożliwa > parsowanie za pomocą samego wyrażenia regularnego ... A może się mylę? Czy możliwe jest parsowanie csv tylko za pomocą wyrażenia regularnego POSIX? Na przykład, jeśli zarówno znak ucieczki, jak i znak cudzysłowu to `"`, to te dwa wiersze są poprawne w csv: """to jest test.""","" "i powiedział:""Co będzie, będzie."", na co odpowiedziałem: ""Na pewno nie!"",","Przechodzę do następnego pola tutaj..."


title: dobre książki o Scrumie i XP

text: Chcę wiedzieć, co poleciłbyś przeczytać dla Scrum i XP. Mam Scruma i PD z Okopów, ale chciałbym zobaczyć więcej odniesień, które są warte zachodu.


title: Klasa podstawowa nie powinna mieć wiedzy o swoich podtypach?

text: Jaka jest zasada obiektowa, która stwierdza (w sumie): > Obiekt bazowy nie powinien mieć wiedzy o swoich podtypach. _Myślałem_, że to zastępstwo Liskova, ale po przeczytaniu tego artykułu w Wikipedii nie wierzę, że mam rację. Z góry dziękuję!


title: Oddziel renderer od modelu biznesowego

text: Mam mały problem z podziałem odpowiedzialności, który mam nadzieję, że ktoś może wyjaśnić. Mam mały model złożony z 2 klas: GameBoard i GamePiece, a oczywisty związek jest taki, że GameBoard może mieć kilka GamePiece. W implementowanej przeze mnie aplikacji GameBoard i GamePiece zawierają dane związane z renderowaniem na ekranie (metody Update/Draw, Textures itp.) oraz ich logiką (ilość kwadratów planszy, pieceType itp.). Aktualizacja/rysowanie GameBoard powoduje również aktualizację/rysowanie elementów. Jednak, aby zachować zasadę pojedynczej odpowiedzialności, postanowiłem oddzielić logikę od renderowania. Ale mam pewne kłopoty z odpowiednią implementacją. Wymyśliłem kilka rozwiązań i nie jestem pewien, które z nich jest najlepsze: 1- Utwórz klasy GameBoardRenderer i GamePieceRenderer (które będą przechowywać tekstury, aktualizowanie i rysowanie), a każda instancja tych klas Renderera będzie związana z jednym GameBoardem lub odpowiednio GamePiece. Problem, który widzę, polega na tym, że zmusza mnie to do utrzymywania podwójnej relacji między GameBoard i GamePiece oraz GameBoardRenderer i GamePieceRenderer i upewnienia się, że zawsze jest spójna. 2- Utwórz GameBoardRenderer i GamePieceRenderer, ale spraw, aby dziedziczyły odpowiednio po GameBoard i GamePiece, przenosząc wszystkie elementy renderowania do tych klas, zachowując skojarzenie w klasach GameBoard i GamePiece. Problem polega na tym, że kiedy wywołam metodę Update/Draw GameBoarda, nie będę mógł wywołać metody GamePieceRenderer Update i Draw (ponieważ żadna relacja nie będzie dostępna). Co powinienem zrobić? Czy jest lepsze rozwiązanie? Dziękuję Ci bardzo.


title: Dlaczego niezmienniki są ważne w informatyce

text: Rozumiem „niezmienny” w jego dosłownym znaczeniu. Rozpoznaję je również, kiedy wpisuję kod. Ale chyba nie rozumiem znaczenia tego terminu w kontekście informatyki. Za każdym razem, gdy czytam rozmowy/białe księgi na temat projektowania języka od znanych programistów/naukowców komputerowych, termin „niezmienny” pojawia się jako żargon; i to jest część, której nie rozumiem. Co jest w nim takiego specjalnego?


title: Zasoby dotyczące powiązania informacji ustrukturyzowanych i częściowo/nieustrukturyzowanych

text: Nie mam dużego doświadczenia w organizacji/wyszukiwaniu informacji, ale znam kilka sposobów radzenia sobie z tym problemem. Aby uzyskać uporządkowane informacje, można przejść do OOish – wszystko „ma-a” lub „ma-wiele” coś innego, a ty poruszasz się po wykresie, aby znaleźć relacje między rzeczami. W przypadku informacji nieustrukturyzowanych masz techniki, takie jak wyszukiwanie tekstu i tagowanie. Wiem o podstawowych strukturach danych CS i algorytmach dla danych strukturalnych, ale to, co mnie interesuje, wykracza poza to. Chcę wiedzieć, w jaki sposób nieustrukturyzowane dane mogą być powiązane z ustrukturyzowanymi danymi „inteligentnie”, tj. bez konieczności wyraźnego zrozumienia przez użytkowników hierarchii obiektów. Jakie źródła - artykuły lub książki - są dostępne, które podsumowują teorię CS stojącą za tymi technikami lub mogą przedstawić mnie innym? Ponieważ do tej pory trudno było dokładnie zakomunikować, z jakim problemem mam do czynienia, oto przykładowy scenariusz. To moje własne sformułowanie, a domena została (radykalnie) zaciemniona, aby chronić klienta. > Entuzjastka wina chce stworzyć stronę internetową dla swojego stowarzyszenia winiarskiego. Gospodarstwa winiarskie > mogłyby uchwycić wiele cen wina i podać swoje lokalizacje. Użytkownicy wyszukiwaliby > miejsca degustacji wina w swojej okolicy. Lub wszystkie wina, które kosztują poniżej X za > butelkę. Jak dotąd nie ma w tym nic trudnego, ponieważ mamy do czynienia z > uporządkowanymi informacjami w postaci prostego wykresu obiektów lub bazy danych > tabel. > > Jednak mają też artykuły z poradami (informacje nieustrukturyzowane), takie jak „10 > rzeczy, na które należy zwrócić uwagę w dobrym czerwonym” (przepraszam, przekraczamy granice > mojej wiedzy na temat wina :). Jako użytkownik chciałbyś, aby witryna wyświetlała > link do artykułu, gdy przeglądasz winnice. Jeśli entuzjasta > zdecyduje się na utworzenie sekcji, w której ludzie mogą wymieniać „przepisy na posiłki, które pasują > dobrze do wina” na jej stronie internetowej, może również chcieć, aby artykuł pojawił się > obok przepisów, które pasują do czerwonego wina. Teraz nie chcesz, aby entuzjasta, który zbiera dane, musiał łączyć każdy nowy artykuł z każdym posiłkiem (ponieważ nie będzie to tylko ten jeden artykuł, który odnosi się do przepisów lub win); i nie chcesz, aby autorzy posiłków ugrzęzli dokładnie w > który jeden, dwa lub trzy artykuły z biblioteki liczącej 50 osób są najbardziej istotne. > Z pewnością nie chcesz wprowadzać pola „porada dotycząca czerwonego wina” na każdym > wino lub posiłek. Więc to jest miejsce, w którym możesz użyć tagowania. Wina, przepisy kulinarne i artykuł z poradami > czerwonego wina można oznaczyć jako „czerwone”. Świetne rozwiązanie, które naprawdę działa na blogspot.com, prawda? Cóż, tak, o ile osoby przechwytujące dane wiedzą, że istnieje „czerwony” znacznik. Może zamiast tego zdecydują się użyć „Claret” >. Doh! Jeśli jest tylko 5 tagów, prawdopodobnie mają rację, ale jeśli > jest 50 tagów, a nawet tylko 20, mogą nie. Co gorsza > scenariusz spamu, w którym autor nowego artykułu po prostu stosuje każdy tag -> "czerwony", "biały", "shiraz", "chenin blanc" itp. > > W tym momencie musimy rozważyć inne techniki , jak wyszukiwanie tekstowe. Wino > jest oznaczone jako czerwone, artykuł jest wypełniony słowem „wino czerwone”. > Gotowe. Cóż, możesz chcieć zastosować niektóre techniki grupowania danych >, które pomogą Ci lepiej określić, jakie są główne tematy tekstu. > Lub utwórz proces indeksowania, który pomija popularne słowa i znaki interpunkcyjne. > Nie ma sensu dopasowywać dwóch przedmiotów, ponieważ oba często używają słowa „ale”. > Właściwie, najlepszym rezultatem byłoby prawdopodobnie użycie kombinacji > wszystkiego, o czym wspomniałem. Możesz zauważyć, że w tym przykładzie mój ton zmienia się z „Dokładnie wiem, co robię” na „spróbuj zrobić coś takiego jak...”. Tak więc szukam zasobów, które nauczą mnie radzenia sobie z kombinacją informacji strukturalnych i nieustrukturyzowanych - tagowanie, wyszukiwanie tekstowe z inteligentnym indeksowaniem i klastrowaniem, a także wszelkie inne techniki, o których jeszcze nie wiem. Właściwe byłoby również omówienie mocnych i słabych stron każdego z nich.


title: Skąd wiesz, czy poprawnie podzieliłeś domenę?

text: W DDD staram się zrozumieć, czy moja domena jest poprawnie podzielona na zagregowane korzenie, a następnie te zagregowane korzenie są poprawnie pogrupowane w ograniczone konteksty. czy istnieje sposób - na przykład zestaw zasad/wskazówek, których mogę użyć, aby zdecydować, czy umieszczam rzeczy we właściwym AR/BC


title: Komunikacja między zagnieżdżonymi dyrektywami

text: Wydaje się, że istnieje wiele sposobów komunikacji między dyrektywami. Załóżmy, że masz dyrektywy zagnieżdżone, w których dyrektywy wewnętrzne muszą przekazywać coś zewnętrznym (np. zostało wybrane przez użytkownika). <outer> <inner></inner> <inner></inner> </outer> Do tej pory mam 5 sposobów na zrobienie tego ## dyrektywa `require:` parent Dyrektywa `inner` może wymagać dyrektywy `outer` , który może ujawnić jakąś metodę na swoim kontrolerze. Tak więc w definicji `inner` wymagaj: '^outer', link: function(scope, iElement, iAttrs, outerController) { // Można to przekazać do ng-click w szablonie $scope.chosen = function() { outerController .wybrany(coś); } } A w kontrolerze dyrektywy `outer`: controller: function($scope) { this.chosen = function(something) { } } ## `$emit` event Dyrektywa `inner` może `$emit` zdarzenie, na które może odpowiedzieć dyrektywa `outer`, poprzez `$on`. Tak więc w kontrolerze dyrektywy `inner`: controller: function($scope) { $scope.chosen = function() { $scope.$emit('inner::chosen', coś); } } oraz w dyrektywach `zewnętrznych` kontroler: controller: function($scope) { $scope.$on('inner::chosen, function(e, data) { } } ## Wykonaj wyrażenie w zakresie nadrzędnym, poprzez ` &` Element może zostać powiązany z wyrażeniem w zakresie nadrzędnym i wykonać je w odpowiednim miejscu. HTML będzie wyglądał następująco: <outer> <inner inner-choose="functionOnOuter(item)"></inner> <inner inner-choose="functionOnOuter(item)"></inner> </outer> Zatem kontroler `inner` ma funkcję 'innerChoose', którą może wywołać scope: { 'innerChoose': '&' }, controller: function( ) { $scope.click = function() { $scope.innerChoose({item:coś}); } } która wywołałaby (w tym przypadku) funkcję 'functionOnOuter' w zakresie dyrektywy `outer`: controller: function( $scope) { $scope.functionOnOuter = function(item) { } } ## Dziedziczenie zakresu na nieizolowanym zakresie Biorąc pod uwagę, że są to kontrolery zagnieżdżone, dziedziczenie zakresu może działać, a wewnętrzna dyrektywa może po prostu wywoływać dowolne funkcje w łańcuchu zakresu, o ile nie ma izolowanego zakresu). Tak więc w dyrektywie `inner`: // scope: wszystko oprócz kontrolera hash {}: function() { $scope.click = function() { $scope.functionOnOuter(coś); } } A w dyrektywie `outer`: controller: function($scope) { $scope.functionOnOuter = function(item) { } } ## Przez usługę wstrzykniętą zarówno do wewnętrznej, jak i zewnętrznej Do obu dyrektyw można wstawić usługę, więc mogą mieć bezpośredni dostęp do tego samego obiektu lub wywoływać funkcje powiadamiania usługi, a może nawet zarejestrować się, aby otrzymywać powiadomienia, w systemie pub/sub. Nie wymaga to zagnieżdżania dyrektyw. **Pytanie** : Jakie są potencjalne wady i zalety każdego z nich nad innymi?


title: Co oznacza licencjonowanie Apache przez „Dozwolone: użytek komercyjny”

text: Na stronie Choosealicense.com/licenses Czytam licencje Apache i widzę, że w sekcji „Dozwolone” znajduje się „Użytek komercyjny”: > To oprogramowanie i jego pochodne mogą być wykorzystywane do celów komercyjnych. Oznacza to, że mogą używać (i modyfikować) moją aplikację w środowisku komercyjnym (np. Microsoft, Apple). Albo mogą skomercjalizować moją aplikację? Angielski nie jest moim językiem ojczystym i zastanawiam się, czy coś źle interpretuję.


title: Jaka jest zaleta korzystania ze struktury danych mapy?

text: Jestem członkiem pewnej strony internetowej poświęconej kodowaniu i dzisiaj, kiedy przesłałem rozwiązanie w C++, zauważyłem, że w samym C++ są znacznie lepsze odpowiedzi, co zajęło znacznie mniej czasu. Rozwiązania były otwarte, więc przejrzałem niektóre z nich i znalazłem je wszystkie za pomocą struktury danych mapy. Nie mogłem się domyślić, gdzie dokładnie to ma przewagę. Zrobiłem trochę googlowania, ale nie było to przekonujące. Proszę pomóż.


title: Czy powinienem kodować HTML wszystkie dane wyjściowe z mojego API?

text: Tworzę RESTful JSON API, aby uzyskać dostęp do danych z naszej strony internetowej, której treść jest w języku niemieckim. Kilka pól zwróci sformatowany kod HTML, podczas gdy większość to pojedyncze wiersze tekstu, chociaż bardzo lubią zawierać znaki specjalne. Aby było łatwe w użyciu, chciałem zachować spójność. Ponieważ tekst w polach HTML nie byłby łatwy do zakodowania po tym, jak mają dane, moją pierwszą myślą było zakodowanie wszystkich pól (zawsze mogą być później niezakodowane w innych polach). Czy to najlepsze podejście, czy powinienem dodać sufiks do wszystkich pól HTML, np. description_html sugerować, że są już zakodowane, czy spróbować czegoś innego? Plan polega na tym, aby ludzie mogli korzystać z API w dowolny sposób, chociaż początkowo nasi partnerzy mogą korzystać z naszych danych na ich stronie internetowej.


title: Różnica między Javabean a Java Beans

text: Jestem zmieszany. Widziałem dwa różne terminy: `Javabean` i `Java Beans`. Czy jest między nimi znacząca różnica?


title: Czy powinienem używać oddzielnych zajęć na test?

text: Biorąc pod uwagę następującą prostą metodę, jak sugerowałbyś, abym napisał dla niej test jednostkowy (używam MSTest, ale koncepcje są podobne w innych narzędziach). public void MyMethod(MyObject myObj, bool validInput) { if(!validInput) { // Nic nie rób } else { // Zaktualizuj obiekt myObj.CurrentDateTime = DateTime.Now; myObj.Name = "Witaj świecie"; } } Jeśli spróbuję przestrzegać zasady jednego potwierdzenia na test, moja logika będzie taka, że powinienem mieć metodę Class Initialise, która wykonuje metodę, a następnie poszczególne testy, które sprawdzają każdą właściwość w myobj. public class void MyTest { MyObj myObj; [TestInitialize] public void MyTestInitialize() { this.myObj = new MyObj(); MojaMetoda(mojObiekt, prawda); } [TestMethod] public void IsValidName() { Assert.AreEqual("Witaj świecie", this.myObj.Name); } [TestMethod] public void IsDateNotNull() { Assert.IsNotNull(this.myObj.CurrentDateTime); } } Gdzie jestem zdezorientowany jest wokół TestInitialize. Jeśli wykonam metodę w ramach TestInitialize, będę potrzebował oddzielnych klas na odmianę parametrów wejściowych. Czy to jest poprawne? To zostawiłoby mi ogromną liczbę plików w moim projekcie (chyba że mam wiele klas na plik). Dziękuję


title: Jaki jest dobry sposób na komentowanie klauzul warunkowych?

text: Ilekroć piszę typową konstrukcję if-else-construct w dowolnym języku, zastanawiam się, w jaki sposób (pod względem czytelności i poglądu) najlepiej dodać do niej komentarze. Zwłaszcza gdy komentuje się klauzulę else, komentarze zawsze wydają mi się nie na miejscu. Powiedzmy, że mamy konstrukcję taką jak ta (przykłady są napisane w PHP): if ($big == true) { bigMagic(); } else { smallMagic() } Mógłbym to skomentować w ten sposób: // sprawdź, jaki rodzaj magii powinien się wydarzyć if ($big == true) { // zrób jakąś wielką magię bigMagic(); } else { // wystarczy mała magia smallMagic() } lub // sprawdź, jaki rodzaj magii powinien się wydarzyć // wykonaj jakąś wielką magię if ($big == true) { bigMagic(); } // wystarczy mała magia else { smallMagic() } lub // sprawdź, jaki rodzaj magii powinien się wydarzyć // if: zrób jakąś wielką magię // else: wystarczy mała magia if ($big == true) { bigMagic(); } else { smallMagic() } Jakie są twoje najlepsze przykłady komentowania tego?


title: Strategia wstecznej kompatybilności pamięci trwałej

text: Z mojego doświadczenia wynika, że próba zapewnienia, że nowe wersje aplikacji zachowują zgodność z przechowywaniem danych z poprzednich wersji, często może być bolesnym procesem. To, co obecnie robię, to zapisywanie numeru wersji dla każdej „jednostki” danych (czy to plik, wiersz/tabela bazy danych, czy cokolwiek innego) i upewniam się, że numer wersji jest aktualizowany za każdym razem, gdy dane ulegną jakiejś zmianie. Tworzę również metody konwersji z v1 na v2, v2 na v3 i tak dalej. W ten sposób, jeśli jestem na v7 i napotkam plik v3, mogę zrobić v3->v4->v5->v6->v7. Jak dotąd wydaje się, że to podejście działa dobrze, ale nie musiałem go jeszcze intensywnie wykorzystywać, więc mogą wystąpić nieprzewidziane problemy. Obawiam się również, że jeśli obiekty, które ładuję, znacznie się zmienią, będę musiał albo trzymać się starych wersji klas, albo zmierzyć się z aktualizacją wszystkich moich metod konwersji, aby obsłużyć nową definicję klasy. Czy moje podejście jest rozsądne? Czy istnieją inne/lepsze podejścia, z których mógłbym skorzystać? Czy istnieją jakieś wzorce projektowe mające zastosowanie do tego problemu?


title: Jaki jest powód umieszczania przedrostków w nowych funkcjach CSS?

text: Czy istnieje uzasadniony powód, dla którego przeglądarki mają prefiksować nowe funkcje CSS, zamiast pozwalać webmasterom na używanie wersji bez prefiksu? Przykładowy kod dla gradientu tła wygląda następująco: #arbitrary-stops { /* fallback DIY*/ /* Safari 4-5, Chrome 1-9 */ background: -webkit-gradient(linear, left top, right góra, od (#2F2727), zatrzymanie koloru(0,05, #1a82f7), zatrzymanie koloru(0,5, #2F2727), zatrzymanie koloru(0,95, #1a82f7), do(#2F2727)); /* Safari 5.1+, Chrome 10+ */ background: -webkit-linear-gradient(po lewej, #2F2727, #1a82f7 5%, #2F2727, #1a82f7 95%, #2F2727); /* Firefox 3.6+ */ background: -moz-linear-gradient(po lewej, #2F2727, #1a82f7 5%, #2F2727, #1a82f7 95%, #2F2727); /* IE 10 */ background: -ms-linear-gradient(po lewej, #2F2727, #1a82f7 5%, #2F2727, #1a82f7 95%, #2F2727); /* Opera 11.10+ */ background: -o-linear-gradient(po lewej, #2F2727, #1a82f7 5%, #2F2727, #1a82f7 95%, #2F2727); } Jaki jest sens zmuszania webmasterów do kopiowania i wklejania tego samego kodu cztery razy, aby uzyskać ten sam wynik? * * * Uwaga: jednym z często podawanych powodów jest to, że **style z prefiksami mają charakter tymczasowy, gdy przeglądarka nie implementuje poprawnie specyfikacji lub specyfikacja nie jest ostateczna**. IMO ten powód to bzdura: * Jeśli silnik przeglądarki nie implementuje poprawnie specyfikacji, przeglądarka nie będzie zgodna, bez względu na to, czy nie zaimplementuje jej w formie bez prefiksu, czy nie zaimplementuje jej w prefiksie Formularz. * Jeśli specyfikacja nie jest ostateczna, może mieć znaczenie, kiedy istniały poprzednie implementacje o tej samej nazwie. Na przykład, jeśli CSS2 miał `linear-gradient`, ale CSS3 miał rozszerzać `linear-gradient` o dodatkowe funkcje, sprytnym byłoby dodanie tymczasowego prefiksu do nowej, roboczej implementacji przez `-css3-<style>` rozróżniając pomiędzy działający CSS2 i eksperymentalny CSS3. W praktyce CSS2 nie ma „liniowego gradientu” ani innych nowości CSS3. Zrozumiałbym również, gdyby **różne przeglądarki miały różne formaty implementacji** : na przykład, powiedzmy, że Firefox wymagał, dla cienia tekstu, `<waga-od-cienia odległość-x odległość-y kolor>`, podczas gdy Chrome wymagał `<odległość -x odległość-y waga-cienia kolor>`. Ale w rzeczywistości tak nie jest; przynajmniej wszystkie nowe funkcje CSS3, z których korzystałem do tej pory, miały ten sam format.


title: Czy istnieje nazwa dla tego wzorca projektowego, wykorzystującego hooki/callbacki?

text: Widziałem/używałem niektórych obiektów, które mają taką strukturę, zaprojektowaną, aby umożliwić dzieciom rozszerzenie funkcjonalności funkcji bez konieczności ich nadpisywania. Czy istnieje nazwa tego wzoru? przykład kodu: class CrudModel { public function create($data) { $data = $this->pre_create($data); //utwórz logikę } public function delete($data) { $data = $this->pre_delete($data); //delete logic } protected function pre_create($data) { //empty } protected function pre_delete($data) { //empty} } class SpecificCrudModel extends Model { protected function pre_create($data) { //niestandardowej logice dla tego obiektu . } }


title: Jak mogę oszacować koszty hostingu w Heroku na setki tysięcy użytkowników?

text: Strona cenowa Heroku jest przejrzysta, gdy patrzę na to, co płacę i co otrzymuję, ale nie jest pomocna w przewidywaniu przyszłych kosztów aplikacji. Jeśli mam aplikację, która jest wciąż rozwijana, w jaki sposób mogę uzyskać nawet oszacowanie, ile moja aplikacja będzie kosztować na 10, 100, 1000, aż do 100 000 użytkowników?


title: Uprawnienia GIT

text: Jest dla mnie coś niejasnego i to jest sposób, aby uniemożliwić innym osobom czytanie mojego kodu. Chodzi o to, że chcę, aby ludzie tworzyli własne gałęzie, ale nie oglądali gałęzi innych. Jeśli ktoś jest odpowiedzialny za networking, nie chcę, żeby ten gość oglądał kody graficzne. Musi być zmuszony do pracy tylko w swoim oddziale.


title: Przeciążenie w celu obsługi wielu powiązanych typów (zwłaszcza wskaźników)

text: # Problem Próbowałem po prostu debugować zestaw procedur manipulacji plikami, które napisałem dla programu, nad którym pracuję. Jeden z nich ciągle zwracał błąd „INVALID_HANDLE”. # Wyjaśnienie Odkryłem, na czym polega problem. Okazuje się, że ponieważ udostępniłem kilka przeciążeń, aby móc wywołać funkcję z uchwytem pliku lub nazwą pliku, stworzyłem niejednoznaczne przeciążenia. Na przykład (nie funkcje wariadyczne; elipsy służą tylko uproszczeniu): INT CopyFileSection ( HANDLE fIn, HANDLE fOut, … ); INT CopyFileSection ( HANDLE fIn, TCHAR* fOut, … ); INT CopyFileSection ( TCHAR* fIn, HANDLE fOut, … ); INT CopyFileSection ( TCHAR* fIn, TCHAR* fOut, … ); Pierwsza (`HANDLE, HANDLE`) wykonuje główną pracę, podczas gdy pozostałe po prostu otwierają plik wskazywany przez nazwę pliku i wywołują pierwszą funkcję. Problem polega na tym, że `HANDLE` jest tylko wskaźnikiem, więc kompilacja nie może dowiedzieć się, który z nich dzwonię (nawet jeśli dla mnie było to oczywiste) i kończy się wywołaniem `HANDLE, HANDLE` nawet gdy przekażę wskaźnik do łańcucha, więc naturalnie nie powiedzie się, ponieważ wskaźnik nie jest uchwytem pliku. # Pytanie Chcę zapewnić maksymalną elastyczność, więc bez ponownego pisania, aby użyć `std::string` _zamiast_ `TCHAR*` dla nazw plików (które faktycznie włączyłem), jakie są sugestie, jak sobie z tym poradzić rodzaj scenariusza? # Powiązane Na marginesie — osobne pytanie? — Zastanawiałem się nad łatwością, bezpieczeństwem i wykonalnością zapewnienia przeciążenia dla wszystkich (lub przynajmniej zestawu) możliwych permutacji. Na przykład w przypadku funkcji, która pobiera dwa pliki, możesz użyć `HANDLE`, `TCHAR*` i `string` (prawdopodobnie innych, ale w tym przypadku pozostaniemy przy tych trzech). Oznacza to, że istnieje do dziewięciu przeciążeń tylko dla plików: `HH, HT, HS, TH, TT, TS, SH, ST, SS`. Nie mówiąc już o innych argumentach, które mogłyby zapewnić więcej przeciążeń. Z pewnością musi istnieć lepszy sposób na zapewnienie elastyczności w wywoływaniu funkcji oraz czystego, zrozumiałego i łatwego w utrzymaniu kodu.


title: Jakich argumentów mogę użyć, aby „sprzedać” koncepcję BDD niechętnemu do jej przyjęcia zespołowi?

text: Jestem trochę wokalnym zwolennikiem metodologii Behavior Driven Development (aka BDD). Stosuję BDD od kilku lat i wybrałem StoryQ jako framework do tworzenia aplikacji DotNet. Chociaż od wielu lat zajmuję się testowaniem jednostkowym i wcześniej przestawiłem się na podejście „najpierw test”, odkryłem, że czerpię znacznie więcej korzyści z używania frameworka BDD, ponieważ moje testy wychwytują intencję wymagań stosunkowo jasny angielski w moim kodzie, a ponieważ moje testy mogą wykonywać wiele asercji bez kończenia testu w połowie - co oznacza, że mogę zobaczyć, które konkretnie asercje zakończą się powodzeniem lub niepowodzeniem na pierwszy rzut oka bez debugowania, aby to udowodnić. To był dla mnie naprawdę wierzchołek góry lodowej, ponieważ zauważyłem również, że jestem w stanie debugować kod testowy i implementacyjny w bardziej ukierunkowany sposób, w wyniku czego moja produktywność znacznie wzrosła i mogę więcej łatwo określić, gdzie występuje awaria, jeśli problem zdarzy się, aby przejść do kompilacji integracji ze względu na dane wyjściowe, które trafiają do dzienników kompilacji. Co więcej, interfejs API StoryQ ma uroczą, płynną składnię, która jest łatwa do nauczenia i którą można zastosować na niezwykłą liczbę sposobów, nie wymagając żadnych zewnętrznych zależności, aby z niego korzystać. Biorąc pod uwagę wszystkie te korzyści, można by pomyśleć, że łatwo jest przedstawić koncepcję reszcie zespołu. Niestety, pozostali członkowie zespołu niechętnie patrzą na StoryQ, aby właściwie je ocenić (nie mówiąc już o rozważeniu pomysłu zastosowania BDD) i przekonali się nawzajem, aby spróbować usunąć szereg elementów StoryQ z naszych własnych podstawowych frameworków testowych, nawet chociaż pierwotnie wspierali użycie StoryQ i mimo że kod, który chcą usunąć, nie ma wpływu na żadną inną część naszego systemu testowego. Takie postępowanie doprowadziłoby do znacznego ogólnego zwiększenia obciążenia pracą i naprawdę idzie pod prąd, ponieważ dzięki praktycznemu doświadczeniu jestem przekonany, że jest to lepszy sposób na pracę w trybie testowym w naszym konkretnym środowisku pracy i może prowadzić tylko do większych poprawa jakości naszego oprogramowania, biorąc pod uwagę, że łatwiej było mi trzymać się najpierw testów przy użyciu BDD. Aby dokładniej wyjaśnić, większość testów jednostkowych, które mieliśmy tendencję do bycia dość delikatną i trudną do utrzymania, pozostałość po latach źle stosowanego testowania, w których niechęć do trzymania się procesu opartego na testach spowodowała, że programiści powrócili do starych nawyków i wykonaj wszystkie testy pod koniec projektu (ci sami ludzie twierdzą, że są Agile!). Tak więc pytanie tak naprawdę sprowadza się do następujących: 1. Jakich argumentów mogę użyć, aby naprawdę uświadomić sobie, że dla tego zespołu byłoby lepiej, gdyby użył StoryQ, a przynajmniej zaadoptował metodologię BDD? 2. Czy możesz wskazać mi jakieś anegdotyczne dowody, które mogę wykorzystać na poparcie mojego argumentu za przyjęciem BDD jako naszej standardowej metody z wyboru? 3. Jakie kontrargumenty mogą sugerować, że moja chęć zachęcenia zespołu do przyjęcia BDD może być błędna? Tak, cieszę się, że się mylę, pod warunkiem, że argument jest słuszny. **UWAGA** : Nie opowiadam się za pisaniem naszych testów na nowo w całości, ale po prostu, aby po prostu zacząć pracować w inny sposób dla wszystkich przyszłych prac testowych, najlepiej w taki sposób, w jaki angażujemy naszych klientów. A dla tych, którzy chcą dowiedzieć się więcej o BDD, przydatne mogą być następujące linki: * http://dannorth.net/introducing-bdd/ * http://en.wikipedia.org/wiki/Behaviour_driven_development * http:/ /behaviour-driven.org/Introduction * * * Dla zainteresowanych szczegółami, jesteśmy małym 4-osobowym zespołem pracującym nad około 5 dużymi projektami. „Próba pilotażowa” BDD trwała początkowo około 2 miesięcy, a następnie kolejne około 4 miesiące. Zespół zgodził się, że powinienem dalej pracować w ten sposób i zrobić własne próby. Od około 2 lat zajmuję się BDD, odkąd zakończył się proces, podczas gdy inni stali się bardzo dobrzy w unikaniu problemu. Zamiast wymuszać „konfrontację” w tej sprawie, szukam sposobów na delikatne przekonanie zespołu, aby wyszedł ze swoich kolektywnych tyłków i znalazł czas, aby coś zrobić.


title: Algorytm wyznaczania siatki na podstawie „bloków” o zmiennej wielkości?

text: Próbuję przekonwertować zestaw "bloków" na układ przypominający siatkę. Bloki mają szerokość 25%, 33%, 50%, 66% lub 75% ich pojemnika, a każdy rząd siatki powinien zmieścić jak najwięcej bloków, aż do całkowitej szerokości 100%. Odkryłem, że próba zrobienia tego, nie pozostawiając żadnych pozostałych klocków w oryginalnym zestawie, jest bardzo trudna. W końcu myślę, że moim rozwiązaniem będzie uaktualnienie/obniżenie różnych rozmiarów bloków (w oparciu o ich priorytet lub coś takiego), aby wszystkie pasowały do rzędu. Tak czy inaczej, zanim to zrobię, pomyślałem, że sprawdzę, czy ktoś ma już jakiś kod (lub papier) demonstrujący rozwiązanie tego problemu? I dodatkowe punkty, jeśli rozwiązanie uwzględnia w swoich obliczeniach różne wysokości bloków :)


title: Implementacja zestawu określonych wartości w porównaniu z użyciem pewnego rodzaju ogólnego zestawu z zaawansowanymi kontrolami

text: Obecnie pracuję nad zestawem implementacji w JavaScript. Powinno to w pewnym sensie symulować generyki znane z Javy lub C#. Potrzebuję mutowalnej wersji tego (pozwala na dodawanie/usuwanie ustawionych wartości) i niezmiennej. Mój podpis konstruktora wygląda tak: new GenericSet('number', [10, 20, 30] ); , // mutowalny zestaw mieszanych wartości (umożliwia dodawanie kolejnych wartości poprzez "add") new MutableGenericSet( '*', [ 'foo', 42, {}, /./ ] ); lub // DataValues.prototype.equals zostaną użyte przez zestaw do określenia równości. new GenericSet( { type: DataValue, valueComparison: 'equals' }, [ dv1, dv2, dv3 ] ); ## Tylko GenericSet czy jedna implementacja zestawu na typ? Początkowo moim głównym celem było posiadanie zestawów wartości jednego typu. Np. _DataValuesSet_, który akceptuje tylko wartości danych. Mogłem wtedy zdefiniować interfejsy z funkcjami, które wymagają wystąpienia _DataValuesSet_. Nie mogłem użyć dziedziczenia (i zgaduję, że i tak byłoby źle), więc użyłbym kompozycji i miałby wewnętrznie instancję _GenericSet_ / _MutableGenericSet_. Alternatywnym podejściem byłoby zawsze wziąć _GenericSet_ i zaimplementować i użyć `GenericSet.requireSetOfType( type )`, co wygeneruje błąd, jeśli typ zestawu nie będzie wymagany. Obawiam się, że zrobię to w ten sposób, aby moje definicje interfejsów wyglądały mniej jednoznacznie. Take /** * @param DataValuesSet dataValues */ function printDataValues( dataValues ) { if( !( dataValues instanceof DataValuesSet )) { throw Error( '...' ); } // ... } vs. /** * @param GenericSet dataValues Musi być zbiorem instancji DataValue. */ function printDataValues( dataValues ) { // Zgłasza błąd, jeśli dataValues nie jest zestawem lub jest to zestaw z wartościami niewłaściwego typu. GenericSet.requireSetOfType( dataValues, DataValue ); // ... } być może użycie `@param GenericSet(DataValues) dataValues` do udokumentowania drugiego wyboru byłoby w porządku? Czy ktoś widzi jakieś dalsze implikacje drugiego podejścia, czy są jakieś alternatywne sugestie? Dla mnie to drugie wygląda bardziej intuicyjnie, a pierwsze obawiam się, że po prostu stworzyłbym więcej narzutu z konstruktorami, podczas gdy nie widzę teraz żadnej wyraźnej przewagi.


title: Jak wymyślasz algorytmy?

text: Wybrałem dzisiaj kilka pytań Projektu Euler i postanowiłem znaleźć skuteczniejsze sposoby odpowiedzi na pytania, na które już odpowiedziałem. Tak więc na pytanie o znalezienie sumy parzystych wyrazów Fibonacciego do 4 milionów; Zauważyłem, że gdybyśmy mieli osobny ciąg dla parzystych wyrazów Fibonacciego (zaczynając od 0 i 2 odpowiednio jako pierwszego i drugiego wyrazu), progresja wyszłaby `[0,2,8,34,144610,...]` Jeśli dwa znane są wartości z dwóch kolejnych wyrazów, to kolejny wyraz można otrzymać za pomocą tego wyrażenia: [ T(n) = (4 * T(n-1) + T(n-2) ] ... Gdzie; T(n) : jest n-tym składnikiem, T(n-1) : jest (n-1)-tym składnikiem, T(n-2) : jest (n-2)-tym składnikiem, a '4' jest stały. Jednak do tej pory nie byłem w stanie wyprowadzić odpowiedniego wyrażenia, aby znaleźć wartość w dowolnej pozycji bez znajomości wartości dwóch poprzednich warunków. Moje pytanie: 1. Czy tak wyprowadza się równania (/algorytmy)? 2. Czy to wydajny algorytm? Przypis: Inną mniej wydajną metodą (moim zdaniem) jest: 1. Stworzenie funkcji generującej wszystkie liczby w ciągu Fibonacciego poniżej 4 milionów, 2. Pobranie liczb parzystych spośród nich, 3. Znalezienie ich sumy.


title: Czy lepiej jest użyć bazy danych, czy struktury danych do stosu sieciowego?

text: Zbudowałem wielowątkową aplikację do przesyłania wiadomości w C i obecnie używam tabeli pamięci MySQL do zapisywania identyfikatora sesji, ale nie jestem pewien, czy była to dobra decyzja, czy nie. Działa to tak, aplikacja wysyła komunikat i zapisuje identyfikator sesji źródłowej w tabeli MySQL. Gdy aplikacja otrzyma odpowiedź o powodzeniu, usunie identyfikator sesji z tabeli MySQL lub, jeśli otrzyma odpowiedź o błędzie, zachowa identyfikator do późniejszej próby. Zbudowałem go w ten sposób, że nie muszę dbać o samodzielne budowanie struktury danych, a Baza Danych zapewnia elastyczność, jeśli chodzi o odpytywanie. Czy uważasz, że jest to właściwe, czy muszę użyć czegoś innego? Należy pamiętać, że aplikacja oczekuje na obsługę dużej liczby transakcji na sekundę.


title: Jakie są potencjalne pułapki związane z przepisywaniem adresów URL z SSL?

text: Używanie przepisywania adresów URL do zarządzania sesjami dla zwykłej komunikacji HTTP jest receptą na katastrofę, jednak czy niektóre z tego ryzyka znikną, jeśli używasz SSL (https)?


title: Recenzja dla testów, podobnie jak recenzje kodu

text: Czy ktoś praktykuje proces „przeglądu kodu” dla testów funkcjonalnych? Czy uważasz to za przydatne? Sposób, w jaki mój obecny pracodawca ćwiczy SCRUM, włącza testowanie funkcjonalne jako część naszych „musisz zrobić” w każdym sprincie.


title: Czy potrzebuję licencji przed sprzedażą oprogramowania?

text: Mam małą firmę programistyczną. Niedawno dostaliśmy duży projekt, który druga firma chce sprzedać. Wykonamy stronę internetową oraz wieloplatformowe aplikacje mobilne. Kodujemy w PHP, JAVA, HTML. Czy potrzebuję jakiejkolwiek licencji, aby używać tych języków? Widząc, że musimy to sprzedać... Będziemy też korzystać z map google. Jakich uprawnień będziemy potrzebować od Google?


title: Koderzy zarządzani a koderzy natywni

text: Jestem programistą i mam doświadczenie zarówno z kodem natywnym, jak i zarządzanym. Zacząłem od Pascala i C, potem przeniosłem się do C++ i ostatecznie do C#. Przez ostatni rok kodowałem prawie wyłącznie w C# i straciłem wiele z tego, co przychodziło mi naturalnie, gdy byłem programistą C++. Kilka tygodni temu, kiedy usiadłem, aby napisać natywny kod C++, zacząłem grzebać w okolicy, powoli zapoznając się ze złożonością, dziwactwami i dziwactwami tego wszystkiego. Ze wstydem muszę powiedzieć, że zupełnie zapomniałem, że przekazanie dynamicznie przydzielonej tablicy do funkcji bez przekazywania jej rozmiaru oznaczałoby, że funkcja odbierająca nie miałaby możliwości sprawdzenia, jak długa jest tablica. Istnieje niezliczona ilość artykułów i dokumentów, które porównują i przeciwstawiają kod zarządzany i niezarządzany. Wszyscy wiemy, że kod natywny, jeśli jest dobrze zoptymalizowany, może działać znacznie szybciej i lżej niż kod zarządzany. Z drugiej strony, kod zarządzany ma garbage collectors i optymalizację pod kątem procesora i systemu operacyjnego w czasie wykonywania, co może dać kod natywny działać za swoje pieniądze. Z czysto technicznego punktu widzenia nie ma wyraźnego zwycięzcy. Nie ma wątpliwości, że kod zarządzany jest o rzędy wielkości prostszy do zakodowania i zrozumienia. Wystarczy spojrzeć na różnicę w liczbie linii potrzebnych do skonstruowania prostego GUI w Win32 C++ vs C#. W czasach mojego rodzimego programowania pisałem głównie symulacje matematyczne, które działały na superkomputerach. Miały brzydkie CLI i były w większości skoncentrowane na algorytmach. Obecnie piszę w C# i tworzę piękne aplikacje GUI, ale zgubiłbym się, gdybym musiał zrobić coś podobnego kalibru w rodzimym języku. Nawet z frameworkiem takim jak QT, wytworzenie czegoś w C++/QT zajęłoby dwa razy więcej czasu niż w C#. Ilekroć widzę kogoś, kto napisał na dużą skalę, w pełni funkcjonalną aplikację GUI w C/C++, nie mogę powstrzymać uczucia podziwu i zazdrości. Jestem ciekawy, jak inni doświadczeni programiści widzą języki zarządzane i niezarządzane. Czy widzisz kod zarządzany jako _amatorski_? Czy postrzegasz natywnych koderów jako bardziej _hardcore_?


title: OCR API (w Javie) z ekstrakcją Worda (NIE MS-WORD)

text: ![ilustracja wyodrębniania słów](http://i.stack.imgur.com/eDsJK.png) ## Moja sytuacja Muszę stworzyć aplikację, która robi crowd-sourced usługę Image-To-Text (podobnie jak reCaptcha google) . Potrzebuję więc API OCR, które może znaleźć słowa w obrazie z tekstem. ## Moje badania * Przeszedłem przez bibliotekę JavaOCR. * Również Tessaract (który nie jest zaimplementowany w Java & Tess4J Wrapper nie ma niczego, czego szukam). Więc w zasadzie nie mam dokąd pójść, więc potrzebuję pomocy. ## Czego chcę * Czy istnieje jakieś API (najlepiej w Javie), które działa dokładnie tak, jak pokazano na powyższym obrazku? * Jeśli takie API nie istnieje, czy istnieją DOKŁADNE algorytmy odpowiednie dla tego procesu? * Jeśli nie, jaka jest Twoja sugestia, aby to osiągnąć? Uwaga: nie chcę kolejnych interfejsów API do przetwarzania obrazu na tekst. Potrzebuję interfejsu API, który znajduje LOKALIZACJE WORD w obrazie wejściowym.


title: Tworzenie instancji obiektów zerowych za pomocą operatora łączenia zerowego

text: Rozważmy następujący typowy scenariusz: if(myObject == null) { myObject = new myClass(); } Zastanawiam się, co myśli się o następującym zastąpieniu przy użyciu operatora koalescencyjnego o wartości null: myObject = myObject ?? nowa mojaKlasa(); Nie jestem pewien, czy powinienem używać drugiej formy. Wydaje się to być miłym skrótem, ale konstrukcja `myObject = myObject` na początku wydaje się być trochę śmierdząca kodem. Czy jest to rozsądna rzecz do zrobienia, czy też brakuje mi lepszego skrótu? A może: „To trzy linijki, przestań!”? Edycja: Jak już wspomniano, być może nazwanie tego typowym scenariuszem jest przesadą. Zwykle napotykam tę sytuację, gdy pobieram jednostkę z bazy danych, która ma właściwość podrzędnego typu referencyjnego, która może lub nie może być jeszcze wypełniona: myClass myObject = myClassService.getById(id); myObject.myChildObject = mojObiekt.myChildObject ?? nowa mojaKlasa_dziecka();


title: Wzorzec projektowy do importu danych z różnych typów źródeł i do różnych typów docelowych

text: Muszę zaprojektować i zbudować skrypt importu (w C#), który może obsłużyć: * odczyt danych z różnych źródeł (XML, XSLX, CSV) * weryfikację danych * zapisanie danych do różnych typów obiektów (klient, adres) Dane będzie pochodzić z kilku źródeł, ale źródło zawsze będzie miało jeden format importu (csv, xml, xslx). Formaty importu mogą się różnić w zależności od źródła. W przyszłości mogą zostać dodane nowe formaty importu. Typy obiektów docelowych są zawsze takie same (klient, adresy i inne). Myślałem o używaniu generyków i czytałem coś o wzorcu fabrycznym, ale jestem dość dużym noobem w tej dziedzinie, więc każda rada jest bardziej niż mile widziana. Jaki jest odpowiedni wzorzec projektowy, aby rozwiązać ten problem?


title: Jak wprowadzić testowanie w cykl rozwojowy

text: W naszej firmie jesteśmy tylko dwoma pracownikami IT, a ja jestem jedynym programistą. Zajmuję się tworzeniem bogatych aplikacji intranetowych przy użyciu zwykłego php i extjs jako frameworka javascript. Nasz cykl rozwojowy jest zwykle bardzo szybki, tak że często ludzie jutro korzystają z tego, co opracuję dzisiaj. Jest to możliwe dzięki zautomatyzowanemu skryptowi kompilacji. ### Teraz problem: Zdarza się, że pomimo wszelkich starań, rzeczy się psują. A ja lub użytkownicy końcowi zauważymy to po opublikowaniu aktualizacji aplikacji. Oczywiście rozwiązaniem byłby framework testowy (lub może dwa, jeden dla php i jeden dla js). Wydaje mi się jednak, że jest to bariera nie do pokonania, ponieważ: * Nigdy nie korzystałem z frameworka testowego i brak mi niezbędnej wiedzy. kod pasuje do dowolnego konkretnego frameworka). Dlatego obawiam się, że musiałem zrefaktoryzować swój kod, aby móc korzystać z frameworka testowego. * Obawiam się, że napisanie testów zajmie więcej czasu niż napisanie kodu. * Duża część kodu zależy od danych znajdujących się w różnych bazach danych. Jak stworzyć próbne dane, które można wykorzystać do testów. Czy ktoś może mi doradzić, jak wprowadzić ramy testowe w środowisku, w którym biegłość i czas są ograniczone? Wiem, że to pytanie jest naprawdę szerokie, ale mam nadzieję, że mimo wszystko otrzymam kilka cennych rad.


title: Dziedziczenie z Entity Framework Code First

text: Rozpoczynam pracę nad nowym osobistym projektem i szukam porady w zakresie organizacji zajęć. Moja klasa bazowa to User. Klasa User będzie miała następujące właściwości ogólne * ID użytkownika * Nazwa użytkownika * Hasło * Adres (będzie to typ złożony/wartościowy) Będę wtedy miał klasę Subscriber, czyli Użytkownik, który wybrał subskrypcję planu, który ja oferta. Klasa Subscriber będzie miała swoje własne właściwości oprócz właściwości Użytkownika, w tym: * Identyfikator subskrybenta * Identyfikator planu * Data subskrypcji * itp. Jest dziedziczeniem sposobu, w jaki należy przejść tutaj, a Użytkownik jest klasą bazową lub jest kluczem obcym od subskrybenta do Klasa użytkownika w lepszy sposób? Jeśli preferowane jest dziedziczenie, to jaka metoda? TPH czy TPT? Planowane jest posiadanie innych klas, których bazą będzie klasa User, w tym Uczestnicy i Wolontariusze. Dziękuję!


title: Klient nie zdecyduje, jak postępować?

text: Piszę oprogramowanie, które wymaga użycia mierzonych wielkości, wielu danych wejściowych użytkownika, najczęściej wyświetlanych, które są wprowadzane do modeli obliczeniowych w celu symulacji różnych fizycznych rzeczy. Stworzyliśmy typ danych, który pozwala nam powiązać wartość liczbową z jednostką, nazywamy te „ilościami” (duże duh). Ilości i jednostki są unikalne dla wymiaru. Nie możesz na przykład dołączyć kilograma do długości. Matematyka na ilościach wykonuje automatyczną konwersję jednostek na SI, a typ jest bezpieczny wymiarowo (na przykład nie można przypisać wagi do ciśnienia). Opracowano niestandardowe komponenty interfejsu użytkownika, które wyświetlają wartość i jej jednostkę i/lub umożliwiają użytkownikowi ich edycję. Ilości bezwymiarowe, nie posiadające jednostek, są pojedynczym, niestandardowym przypadkiem realizowanym w ramach systemu. Istnieje zestaw powiązanych ilości, tak że nasi docelowi odbiorcy najwyraźniej używają ich zamiennie. Ilości są używane w specjalnych jednostkach, które zawierają współczynniki konwersji dla powiązanych wymiarów ilościowych… innymi słowy, gdy używa się tych jednostek, konwersja między jednostkami polega po prostu na pomnożeniu wartości przez 1 do różnicy wymiarów. Jednak konwersja do/z systemu obliczeniowego (SI) nadal obejmuje te czynniki. Jedna z tych powiązanych wielkości jest bezwymiarową, która reprezentuje stosunek. Po prostu nie mogę zmusić „klienta” do uznania konieczności rozróżniania tych wartości i ich wykorzystania. Wybrali jeden i chcą go używać wszędzie, dostosowując sposób, w jaki sobie z nim radzimy w specjalnych miejscach. W tym przypadku wybrali jeden z wymiarów, który ma jednostkę... ALE nie chcą, aby istniała jednostka (GRR!!!). To oczywiście powoduje, że wdrażamy te specjalne nadpisania dla naszych elementów interfejsu użytkownika i tym podobne. To oczywiście często jest zapomniane i gorsze... po kilku miesiącach wszyscy zapominają, dlaczego było to konieczne i dlaczego używamy tej wartości wymiarowej, nazywając to niewłaściwą rzeczą i wyłączając urządzenie. Mógłbym po prostu zignorować „klienta” i zaimplementować typ jako wielkość bezwymiarową, co ma największy sens. Jednak to pozostawia zespół odpowiedzialny za rozgryzienie tego, gdy podali nam formułę wykorzystującą jedną z pozostałych ilości. Musimy nie tylko zorientować się, że to się dzieje, musimy zdecydować, co robić. To nie jest banalna sprawa. Inną opcją jest po prostu powiedzieć do diabła z tym, zrobić to po swojemu klientowi i pozwolić mu marnować ciągły czas i wysiłek, ponieważ jest to po prostu zagmatwane jak diabli. Jednak nie mogę zliczyć, ile razy ktoś powiedział: „Dlaczego robi się to w ten sposób, to w ogóle nie ma sensu”, a zespół schodzi na głęboką wodę, próbując to rozgryźć. Co byś zrobił? Obecnie wciąż staram się ich przekonać, że nawet jeśli używają terminów zamiennie, to przynajmniej nie możemy tego zrobić w ramach dyskusji o produkcie. Nie miej jednak wielkich nadziei.


title: Jak testujesz swój javascript?

text: Ostatnio dużo czasu spędzam pracując w javascript. Nie znalazłem sposobu, który wydaje się działać dobrze do testowania javascript. W przeszłości nie stanowiło to dla mnie problemu, ponieważ większość stron, nad którymi pracowałem, zawierała bardzo mało javascriptu. Mam teraz nową stronę internetową, która w dużym stopniu wykorzystuje jQuery. Chciałbym zbudować testy jednostkowe dla większości systemu. Moje problemy są takie. * Większość funkcji w jakiś sposób wprowadza zmiany w DOM. * Większość funkcji żąda również danych z serwera WWW i wymaga sesji w usłudze, aby uzyskać wyniki. Chciałbym uruchomić test z wiersza poleceń lub testowego uprzęży, a nie w przeglądarce. Pomocna byłaby każda pomoc lub artykuły, które powinienem przeczytać.


title: widok podobny do ogona w plikach dziennika HTML

text: Pracuję nad aplikacją, która tworzy pliki dziennika HTML. Jestem zmęczony koniecznością ręcznego ponownego ładowania i przewijania do dołu w przeglądarce, aby zobaczyć najnowsze wpisy. Rozwiązaniem, które tak naprawdę mnie nie satysfakcjonuje, jest użycie wtyczek Firefoksa ReloadEvery i ScrollyFox. W wielu sytuacjach częstotliwość przeładowywania i prędkość przewijania są po prostu zbyt wolne. Oczywiście mógłbym użyć ogona, ale wolałbym wyrenderowaną stronę HTML. Masz jakieś sugestie? Preferowane są rozszerzenia Firefox, ale każda inna wskazówka jest również mile widziana.


title: Próbuję nauczyć się ASP.NET

text: Mam doświadczenie w komputerach i programuję od około 7 lat. Zmieniłem karierę i zostałem pisarzem technicznym, a teraz myślę, że powinienem znów wskoczyć na statek, z powrotem do bycia programistą. Oczywiście naturalny kierunek działania, w którym mogę spędzić, powiedzmy całe dwa lata, na nauce kodowania, może już nie być dostępny. Interesuje mnie ASP.NET jako język, w którym napisana jest większość produktów w mojej firmie. Jestem pewien, że zadano mi to wcześniej, ale zaczynam: od czego zacząć? Naprawdę byłbym wdzięczny za kilka praktycznych rad.


title: Co zrobić, gdy dział marketingu próbuje kierować procesem rozwoju?

text: Jestem dość doświadczonym web-developerem pracującym w małym startupie jako programista witryny e-commerce. Pozostałe trzy zaangażowane osoby to dyrektor, projektant i specjalista od marketingu. Plan, jak to rozumiałem, polegał na tym, że projektant miałby zrobić logo i makiety stron, ja przekształcenie ich w funkcjonalną stronę internetową, marketer do nadzorowania wszelkich wiadomości/blurbów/mediów społecznościowych, dyrektor do zarządzania biznesem i nadzorowania wszystkiego w przeciwnym razie. Ostatnio facet od marketingu zapytał o nasze plany dotyczące RWD (responsywnego projektowania stron internetowych). Powiedziałem mu, że ze względu na nasz napięty harmonogram i że piszę zarówno kod front-endowy, jak i back-endowy, będę kierować reklamy tylko na najpopularniejsze urządzenia mobilne, dopóki nie będziemy mieli funkcjonalnej strony internetowej, po czym skupię się na bardziej wszechstronnym, responsywnym projekcie, aby ukierunkować wszystko. Nie chciał tego zaakceptować i zapytał, dlaczego nie możemy po prostu kupić szablonu WordPress do obsługi aspektu responsywnego. Ponieważ szablon wymaga WordPressa, jakiejś wtyczki e-commerce do WP i modyfikacji samego szablonu, aby pasował do naszego projektu i tak, odpowiedziałem, że to nie był dobry pomysł i prawdopodobnie dodałby tylko dodatkowe koszty rozwoju w tym momencie. Jego ostatnia odpowiedź zdawała się tylko powtarzać jego punkty, nie odnosząc się do moich. Zamiast mieć jakiś sikający mecz, szukam rozwiązania, które będzie najlepsze dla całego projektu, jednocześnie unikając wrogości, jeśli to możliwe. Jakieś pomysły (techniczne, zarządcze lub inne)?


title: Statusy defektów: „NIE NAPRAW” vs „Anulowane”

text: Byłem zaangażowany w kilka projektów jako tester lub programista. W wielu projektach występowały następujące statusy dla defektów: 1. NIE NAPRAWI 2. Anulowane Czy używasz takich statusów i jak je rozróżniasz? Pytam, ponieważ większość ludzi nie potrafi wyjaśnić różnicy. Rozumiem: **NIE NAPRAWI** \- programista nie naprawi defektu, ponieważ to nie jest defekt; **Anulowane** \- defekt nie powinien być naprawiany, ponieważ ma najniższy priorytet


title: Jak prawy móżdżek może poradzić sobie z ogromnym kodem lewego móżdżka?

text: Głównie jestem artystą, chociaż sam siebie określam jako artysta/fizyk. Chociaż umiem robić matematykę, radzić sobie ze słowami i "logicznymi" rzeczami uważanymi za lewą półkulę mózgu, jest to wysiłek i popełniam błędy, podczas gdy dobrze sobie radzę i przez większość czasu myślę w kategoriach tych rzeczy związanych z prawą półkulą myślenie - relacje przestrzenne, holistyczny kontekst z dużego obrazu itp. Oczywiście wszystko to jest niejasne, ponieważ teoria prawego-lewego mózgu jest zbyt uproszczona i żadna aktywność umysłowa nie jest tak prosta. Jednak czuję, że dobrze pasuję do artystów, reżyserów wideo, szefów kuchni i innych niewerbalnych ludzi myślących, kreatywnych, podczas gdy większość ludzi z „IT” lub zagorzałych inżynierów oprogramowania ma umysły, które działają inaczej, z dbałością o szczegóły, trzymając wiele szczegółów jednocześnie i silne zdolności racjonalne i werbalne. A więc mam tutaj pracę, którą płacę za naprawę wybrednych i niejasnych błędów w ogromnym roju oprogramowania C++, bardzo ciężkiego na OO, a każda linia kodu nie ma sensu, chyba że pamiętam o dwudziestu innych nazwach klas i metod. relacje między nimi, przebieg egzekucji (bardzo spaghetti) i inne szczegóły. Poza tym jestem również dość mocno przeciwny wielu współczesnym stylom C++ i OO. Ci, którzy napisali ten kod, naprawdę pili głębokie kool-ade OO i Modern C++. Uważam, że w rzeczywistości sprawia to, że kod jest znacznie trudniejszy do naśladowania, znacznie trudniej jest zdecydować, gdzie coś naprawić lub zmienić. Nie wiem, czy jest to część różnicy między lewą a prawą stroną (czy jakkolwiek chcesz to nazwać), czy nie. Ale praca nad C++ muszę - ludzie polegają na mnie, jeśli chodzi o moje dochody. Jakie są wskazówki i techniki, jak radzić sobie z tą sytuacją, aby być jak najbardziej efektywnym dla mojego pracodawcy?


title: Co możesz zrobić z jakością istniejących testów integracyjnych i jednostkowych, będąc nowym członkiem zespołu?

text: Powtarzającym się motywem, na który natknąłem się w mojej karierze, jest bycie nowym deweloperem, który pojawia się w zespole i szybkie posiadanie nieodłącznej nieufności do istniejących zestawów testów jednostkowych i integracyjnych. Podczas rozmowy kierownictwo mówi, że „mocno wspierają testy jednostkowe” i otwarcie do tego zachęcają. Robią, ale wszystko w samych testach jest po prostu złe. Podobnie jak fakt, że żądają 100% pokrycia, gdy istnieje 100% pokrycie testami integracyjnymi, ale mniej niż 10% pokrycia powtarzalnych testów jednostkowych. Kilka innych problemów, które znalazłem: 1. Brak wyraźnego wskazania między tym, co jest testem jednostkowym, a tym, co jest testem integracyjnym. Testy jednostkowe i integracyjne są mieszane razem w tej samej klasie. 2. Testy integracyjne, które mają niezadeklarowane jawne zależności od bardzo konkretnych danych dynamicznych w bazie danych określonego środowiska. 3. Nietransakcyjne testy integracyjne, w zasadzie testy, które mogą, ale nie muszą, zawracać sobie głowę czyszczeniem po sobie, czasami wymagają ręcznego „szorowania” bazy danych, aby test był powtarzalny. 4. Żadnego wyśmiewania, a kod aplikacji wymaga gruntownego remontu tylko po to, aby kpić było możliwe. Innymi słowy, projektuj bez testowania. 5. Brak jasnych konwencji nazewnictwa, aby szybko spojrzeć na nazwę testu i z grubsza określić, jakie testy są wykonywane. To wszystko nie znaczy, że WSZYSTKIE testy są bezużyteczne lub złe, wiele z nich jest całkiem dobrych i warto je zachować, ale czasami wydaje się, że trzeba szukać złota. Celowo unikałbym przeprowadzania testów tylko dlatego, że bałem się zepsuć bazę danych dla moich czarnoskrzynkowych przypadków testowych. Zasadniczo dało mi to wrodzoną **nieufność** do testów jednostkowych i integracyjnych, których osobiście nie napisałem ani w żaden sposób nie recenzowałem. Na pewnym poziomie, jeśli nie wierzysz w jakość swojego zestawu testów, to naprawdę nie przynosi to żadnej wartości zespołowi ani projektowi. Co robisz, gdy znajdziesz się w takiej sytuacji? Jak myślisz, jaki jest najlepszy plan ataku, aby zmierzyć się z czymś takim? Czy wszystkie testy powinny zostać zrefaktoryzowane w ramach monumentalnego wysiłku obejmującego różne wydania? Czy powinieneś porzucić pomysł, że ten stary projekt może mieć jednodniowe solidne pokrycie testami jednostkowymi?


title: Czy w dzisiejszych czasach nauka C jest nadal aktualna?

text: W czasach uniwersyteckich miałem okazję studiować C przez jeden semestr, ale nie kontynuowałem tego, ponieważ nie widzę wielu możliwości pracy dla C, dlatego nauczyłem się Java. Obecnie widzę więcej rzeczy tworzonych w C, głównie język programowania i serwer baz danych. Czy nauka C jest nadal aktualna? Czy nauka C da mi pracę w dzisiejszych czasach?


title: Czy to jest zwinne? Scrum? Jak poprawić zwinność?

text: Czy to jest **zwinne**? **Scrum**? Jakieś sugestie, jak można to zrobić bardziej sprawnie w danych okolicznościach? Które punkty są pozytywne, a które można poprawić? * Produkt został opracowany dla klienta, który będzie go odsprzedawał płacąc nam tantiemy. * Zespół nie może rozmawiać bezpośrednio z użytkownikiem końcowym. Tylko do sprzedawcy. * Dokument wymagań produktu został utworzony przed rozpoczęciem rozwoju. * Wymagania są sztywne i nie ulegają zmianie. * Harmonogram dostaw został uzgodniony z kamieniami milowymi, takimi jak „alfa”, „beta” itp. oraz funkcjami/czasami dołączonymi do tych kamieni milowych. * Wszyscy programiści w zespole Scrum podlegają właścicielowi produktu, menedżerowi oprogramowania. * Testerzy w zespole zgłaszają się do kierownika ds. kontroli jakości. * Właściciel produktu skierował zespół do pewnych zadań technicznych wysokiego ryzyka. Wynik tych zadań nie jest użyteczny dla użytkownika końcowego, ale raczej pewna technologia/kod, który ostatecznie zostanie wykorzystany w produkcie. * Właściciel produktu utworzył backlog na podstawie wymagań. * Właściciel produktu nie jest w stanie odpowiedzieć na niektóre pytania dotyczące produktu. Odwołuje się do innych lub do udokumentowanych wymagań. * Zespół przechodzi przez ruchy Scrum. Codzienny Scrum, Planowanie Sprintu, Retrospektywa itp. Jest ScrumMaster. * W każdym sprincie właściciel produktu i kierownictwo decydują, nad którymi elementami zaległości pracuje zespół. * Istnieje wykres wypalania. Tablica Scrum z historiami i zadaniami. Szacunki dotyczące tych pochodzą od zespołu. * Drużyna siedzi w otwartej podłodze „bull pen” dzielonej z innymi zespołami, wszystko widoczne i słyszalne. Na terenie zespołu panuje hałas między drużynami i ruch pieszy. * Zespół może być zobowiązany do udziału w różnych spotkaniach niezwiązanych bezpośrednio z celami sprintu. * Istnieje nacisk na wybór pewnych rozwiązań technicznych. Niektóre narzędzia i procesy są obowiązkowe.


title: Egzamin Microsoft 70-536: Jak to wszystko zapamiętać?

text: Po ponad 6 latach rozwoju platformy .NET postanowiłem przystąpić do egzaminów i uzyskać certyfikaty, aby uzupełnić braki w mojej wiedzy. Zdaję egzamin 70-536 (Podstawy aplikacji .NET Framework Development) za 18 dni. Przystępując do egzaminów praktycznych, zauważam, że te pytania dotyczą najdrobniejszych szczegółów postępowania z bibliotekami BCL, na których koncentruje się egzamin. Nie chodzi tu tak bardzo o „Oto twój scenariusz. Które zajęcia lub podejście jest odpowiednie”. To bardziej jak "Jedna z tych (4) opcji jest wykonywana poprawnie. Która?" Dobrze iw ogóle, ale to są rzeczy, które mógłbym sprawdzić w MSDN w dwie sekundy, ale egzamin wymaga zapamiętania ich! Te pytania mogą pochodzić z dowolnej z tysięcy zajęć objętych tym egzaminem. To jest hardkorowe zapamiętywanie. Czy są jakieś sugestie dotyczące zapamiętywania tak dużej ilości informacji? Jakieś wzorce w sposobie tworzenia klas, które mógłbym wykorzystać w wykształconych domysłach na wypadek, gdybym nie pamiętał dokładnej składni? Co jest warte, spędziłem dużo czasu przygotowując się do tego egzaminu, więc nie staram się tylko zdać i przejść przez niego, nauczyłem się mnóstwo. Ale żeby przejść, muszę dużo zapamiętać, a nie tylko rozumieć BCLs.


title: Jaka jest prawdziwa różnica między plikiem skompresowanym a skompresowanym? Jakie są zalety każdego z nich?

text: Podczas czytania blogów lub pobierania frameworków często widzę coś w stylu „nieskompresowany do rozwoju / zminifikowany do produkcji”. Jaka jest prawdziwa różnica między tymi dwoma i jeśli minifikacja jest „dobre do produkcji”, dlaczego nie jest zalecana do rozwoju?


title: Rola zapewnienia jakości (nie testowanie!) w Agile

text: Z Wikipedii: > Zapewnienie jakości odnosi się do działań administracyjnych i proceduralnych > wdrażanych w systemie jakości, aby wymagania i cele > produktu, usługi lub działania zostały spełnione.[1] Jest to systematyczny > pomiar, porównanie ze standardem, monitorowanie > procesów i związana z nim pętla sprzężenia zwrotnego, która zapewnia zapobieganie błędom.[2] Można to > skontrastować z kontrolą jakości, która koncentruje się na wynikach procesu. Możesz przeczytać następujący artykuł, aby zrozumieć różnicę między kontrolą jakości a testowaniem (kontrolą jakości): http://blogs.msdn.com/b/alanpa/archive/2006/02/26/539527.aspx Co chciałbym Rozumiem, czy jest miejsce dla inżyniera QA, który nie jest testerem w Agile/Scrum. W Agile celowo brakuje procesów i dokumentacji (jest to nawet w manifeście) i na tym się specjalizuje QA. Czy w Agile powinien być nawet inżynier QA? Sam nie jestem inżynierem QA (jestem testerem), ale mam znajomego, który jest, dlatego pytam.


title: Mam wolny czas na programowanie Androida. Potrzebuję sugestii, jak skutecznie sobie z tym poradzić

text: Jutro kończę studia na dobre, a następnego dnia odchodzę z mojej obecnej pracy programistycznej. Będę szukał możliwości, ale może skończyć się miesiąc lub dwa bez pracy, więc będę miał dużo wolnego czasu, aby popracować nad umiejętnościami programistycznymi na Androida i poprawić swoją wartość w tych miejscach pracy. Zacząłem myśleć o tym, co zrobię, aby jak najlepiej wykorzystać cały ten czas i pomyślałem, że potrzebuję dobrego planu. Nie kodowałem zbyt wiele w Javie, ale czuję, że mogę dość szybko uchwycić składnię. Grałem już trochę z ADT i całą konfiguracją Androida, ale nigdy nie ukończyłem aplikacji z powodu braku czasu. Szukam wskazówek, jak ukończyć następny miesiąc z najlepszym zestawem umiejętności, jaki mogę w tym czasie zdobyć. Od czego zacząć, samouczki, czego się najpierw nauczyć i tak dalej. Nawiasem mówiąc, mam urządzenie z Androidem, więc spowolnienie emulatora lub krzywa uczenia się nie będą problemem. Dziękuję Ci


title: W którym momencie niezmienne klasy stają się ciężarem?

text: Podczas projektowania klas do przechowywania modelu danych, które przeczytałem, przydatne może być tworzenie niezmiennych obiektów, ale w którym momencie obciążenie list parametrów konstruktora i głębokich kopii staje się zbyt duże i trzeba zrezygnować z niezmiennego ograniczenia? Na przykład tutaj jest niezmienna klasa do reprezentowania nazwanej rzeczy (używam składni C#, ale zasada dotyczy wszystkich języków OO) class NamedThing { private string _name; public NamedThing(string name) { _name = nazwa; } public NamedThing(NamedThing other) { this._name = other._name; } public string Nazwa { get { return _name; } } } Nazwane rzeczy mogą być konstruowane, odpytywane i kopiowane do nowych nazwanych rzeczy, ale nazwy nie można zmienić. Wszystko dobrze, ale co się stanie, gdy chcę dodać kolejny atrybut? Muszę dodać parametr do konstruktora i zaktualizować konstruktor kopii; co nie jest zbyt dużo pracy, ale problemy zaczynają się, o ile widzę, gdy chcę, aby _złożony_ obiekt był niezmienny. Jeśli klasa zawiera wiele atrybutów i kolekcji, zawierających inne złożone klasy, wydaje mi się, że lista parametrów konstruktora stałaby się koszmarem. Więc w którym momencie klasa staje się _zbyt złożona_, aby była niezmienna?


title: Pytanie dotyczące czytelności a czasu przetwarzania

text: Tworzę schemat blokowy dla programu z wieloma sekwencyjnymi krokami. Każdy krok należy wykonać, jeśli poprzedni krok się powiedzie. Używam języka programowania opartego na c, więc układ wyglądałby mniej więcej tak: **METODA 1:** if(step_one_succeeded()) { if(step_two_succeeded()) { if(step_three_succeeded()) { //itd . itd. } } } Gdyby mój program miał ponad 15 kroków, wynikowy kod byłby strasznie nieprzyjazny do czytania. Zmieniłem więc projekt i zaimplementowałem globalny kod błędu, który przekazuję przez odniesienie, aby wszystko było bardziej czytelne. Wynikowy kod wyglądałby mniej więcej tak: **METODA 2:** int _no_error = 0; pierwszy krok (_brak_błędu); if(_brak_błędu == 0) krok_drugi(_brak_błędu); if(_no_error == 0) krok_trzeci(_brak_błędu); if(_brak_błędu == 0) krok_drugi(_brak_błędu); Złożoność cyklomatyczna pozostaje taka sama. Załóżmy teraz, że jest N kroków. Załóżmy, że sprawdzenie warunku trwa 1 zegar, a wykonanie kroku nie zajmuje czasu. Szybkość przetwarzania Metody 1 może wynosić od 1 do N. Szybkość przetwarzania Metody 2 jest jednak zawsze równa N-1. Tak więc Metoda 1 będzie przez większość czasu szybsza. Co prowadzi mnie do mojego pytania, czy poświęcanie czasu, aby kod był bardziej czytelny, jest złą praktyką? Czemu nie)?


title: Obsługa błędów w PHP podczas korzystania z MVC

text: Ostatnio bardzo dużo korzystam z Codeignitera, ale jedna rzecz, która mnie denerwuje, to obsługa błędów i wyświetlanie ich użytkownikowi. Nigdy nie byłem dobry w radzeniu sobie z błędami bez bałaganu. Moją główną troską jest zwracanie błędów użytkownikowi. Czy dobrą praktyką jest używanie wyjątków i zgłaszanie/przechwytywanie wyjątków zamiast zwracania 0 lub 1 z funkcji, a następnie używania if/else do obsługi błędów. Dzięki temu łatwiej jest poinformować użytkownika o problemie. Skłaniam się do odchodzenia od wyjątków. Mój nauczyciel Java na uniwersytecie kilka lat temu powiedział mi, że "wyjątki nie powinny być używane w kodzie produkcyjnym, ale raczej do debugowania". Mam wrażenie, że kłamał. Ale na przykład mam kod, który dodaje użytkownika do bazy danych. Podczas procesu więcej niż jedna rzecz może pójść nie tak, jak np. problem z bazą danych, zduplikowany wpis, problem z serwerem itp. Gdy podczas rejestracji wystąpi problem, użytkownik musi o tym wiedzieć. Jaki jest najlepszy sposób obsługi błędów w PHP, pamiętając, że używam frameworka MVC.


title: Niestandardowa praca z otwartym kodem źródłowym

text: Wiele niestandardowych projektów, które podejmuję, zawiera rzeczy, które mogą być przydatne dla społeczności open source. Chciałbym, żeby otwierali nimi repozytoria Github :) Większość z nich to wtyczki jQuery. Prawie zawsze kończę tworzeniem własnych wtyczek jQuery dla funkcji, które muszę zaimplementować w projekcie, na przykład autouzupełniania, funkcji edycji w miejscu itp. Czy dobrym pomysłem byłoby zaoferowanie „zniżki” dla osób, które akceptują pozwolić mi na część projektu z otwartym kodem źródłowym? Jak -15%, -25% itd.? Czy uważasz, że zadawanie ich tego byłoby nieprofesjonalne?


title: Czy istnieje rynek do pracy w ramach crowdfundingu OSS?

text: Obecnie jest kilka projektów OSS, które chciałbym stworzyć, a następnie wykorzystać, ale po prostu nie mam czasu na ich tworzenie lub w przypadku niektórych projektów (np. pakietów Emacs) nie mieć doświadczenie z językiem. Byłbym szczęśliwy, gdybym zapłacił komuś innemu za rozwój, ale prawdopodobnie nie w zgodzie z całym rozwojem (zakładając, że minimalna kwota, za którą ktoś mógłby pracować, to ~5000 USD). Jednak podczas omawiania jednego z tych projektów z innym programistą wyrazili zainteresowanie jego wykorzystaniem, co doprowadziło mnie do przekonania, że będą inni podobnie zainteresowani pomyślnym stworzeniem jednego z tych projektów (lub być może nie, ale ze względu na argumenty załóżmy, że projekt przydałby się nie tylko mnie). Wygląda na to, że coś takiego jak skrzyżowanie gun.io i Kickstarter byłoby odpowiednie, ponieważ zarówno przyciągnęłoby programistów, jak i pozwoliło innym zainteresowanym obserwowaniem rozwoju, proponować projekty i inwestować pieniądze w wysiłek. Czy istnieje platforma do tego rodzaju finansowania społecznościowego? NB. Kickstarter i jego podobni wydają się bardziej pasować do produktów dyskretnych (takich jak systemy CMS i różne aplikacje), ale być może jest to dla niego najlepszy rynek.


title: Żaden programista nie zbuduje mojej pół-dorosłej strony internetowej. Czemu?

text: Od dłuższego czasu szukałem wykonania tej strony. Pomyślałem, że z dobrze zorganizowanym spisem tego, czego chciałem, a także mając jasne przykłady zrobione w Photoshopie fałszywych stron, aby dać wyobrażenie o wizji, bez ukrytych niespodzianek, będę wymarzonym zajęciem programisty. Niestety żadna firma nie tknie strony. Nie ma w tym nic nielegalnego ani nawet w najmniejszym stopniu obraźliwego. To oferta dla dorosłych dla profesjonalnych Dominatrics. Nie rozumiem, o co chodzi, kiedy istnieją znacznie gorsze i bardziej wymagające strony, a to tylko lista. Pro Domination to legalna okupacja w USA i większości świata. Ludzie po prostu nie chcą dotykać witryny. To naprawdę dziwne. Wszystkie informacje i szczegóły dotyczące witryny są doskonale i jasno określone. Po prostu albo nie otrzymuję odpowiedzi, albo ludzie, którzy mówią mi, że nie dotkną niczego dorosłego. Czy jest ku temu powód?


title: Czy powinienem prosić o zaliczkę na prace celne?

text: ...do pracy projektowej. Do tej pory nie miałem i zawsze otrzymywałem wynagrodzenie, gdy praca była skończona i nie miałem żadnych problemów. Czy to sprawia, że wyglądam nieprofesjonalnie? :) Czy powinienem prosić o 25% - 50% zaliczki przed rozpoczęciem pracy? Praca, którą zwykle wykonuję obejmuje również w pewnym stopniu projektowanie graficzne (interfejs użytkownika dla mojej aplikacji)


title: Poprawa przepływu pracy w programowaniu Java

text: Chciałbym pomóc mojej grupie w standaryzacji do odtwarzalnego środowiska narzędziowego Java, które jest zgodne z niektórymi dobrymi praktykami, aby poprawić nasz przepływ pracy. Jesteśmy głównie sklepem .NET, który ostatnio sporo rozwijał w Javie i zbyt wiele razy spaliliśmy się w naszym obecnym procesie rozwoju Javy. Proces jest ad-hoc, ponieważ jesteśmy trochę nowi we wszystkich rzeczach związanych z Javą. Każdy programista decyduje o swoim wyborze narzędzia (coś dobrze), a ze względu na brak jakiejkolwiek procedury w zakresie zarządzania zależnościami stron trzecich, najczęściej napotykamy problemy z kompilacją lub wdrażaniem i napotykamy poważne niepowodzenia, gdy maszyny programistyczne muszą zostać odbudowane z tego czy innego powodu. Nasze środowiska programistyczne Java nie są po prostu ani spójne, ani powtarzalne z jednej maszyny na drugą. Nie mamy podobnego problemu z naszymi projektami .NET. Wszyscy korzystają z tej samej wersji programu Visual Studio, Resharper oraz wszystkich bibliotek innych firm i bibliotek typu open source. Prawdopodobnie dlatego, że płacimy za większość rzeczy, ale istnieje również spójny wzorzec w naszych projektach C#, w których wszystko, czego potrzebujesz, jest zawarte w pliku rozwiązania, a wszystkie biblioteki dll innych firm wymagane dla tego rozwiązania są sprawdzane w podkatalogu względem rozwiązania nadrzędnego w kontroli źródła. Visual Studio również pomaga w sprawdzaniu wersji, ale ten proces działa dobrze i wydaje mi się, że można go odtworzyć w naszych wysiłkach programistycznych w języku Java. Aby pomóc osiągnąć ten cel, przygotowałem poniższą listę pytań, aby ocenić, z czego korzystają eksperci. 1. Jakiego środowiska programistycznego Java używasz? Eclipse, NetBeans czy **IntelliJ** ? 2. Czy używasz narzędzia do zarządzania zależnościami, takiego jak **Apache Maven** , Gradle, standaryzowanego domowego rozwiązania, czy też każdy programista określa, co jest dla niego najlepsze? Co mamy 3. Jeśli odpowiedź na 2 brzmi tak, jak zintegrować takie narzędzia ze swoim systemem budowania? 4. Czy standaryzujesz określoną wersję IDE, powiązanych narzędzi i środowiska uruchomieniowego? Na przykład, czy wszyscy programiści korzystają z Eclipse IDE for Java EE Developers 3.7, IntelliJ 12.1.6, JDK1.7 lub 1.8 i czy istnieją jakieś zasady wymuszające, że wszyscy programiści używają tej samej wersji? 5. W jaki sposób zapewniasz, że ustawienia projektów są spójne i powtarzalne na wszystkich maszynach deweloperskich? Czy nakazujesz sprawdzanie wszystkich ustawień projektu w kontroli źródła, czy tylko odpowiednich plików źródłowych? 6. W przypadku każdego narzędzia, w tym IDE, zarządzania zależnościami i kompilacji, jakiego procesu selekcji użyłeś? Pozycje wyróżnione pogrubieniem to to, czego uczymy się na podstawie przeszłych doświadczeń. Ale dobrze będzie uczyć się z tego, co robią inni. Zacznę od odpowiedzi na kilka pytań, wymieniając niektóre problemy, z którymi się borykamy: 1. Każdy programista używa Eclipse. Jednak wersje Eclipse i JDK mogą się różnić w zależności od komputera. Dev A może używać Eclipse Juno z JDK 1.6, podczas gdy Dev B używa Eclipse Galileo z JDK 1.7. Maszyna kompilacyjna może działać inaczej i będziemy wiedzieć, że problem występuje dopiero następnego ranka, gdy kompilacja jest zepsuta. Ponieważ zasoby są również rozmieszczone na kontynentach, powoduje to poważne bóle głowy. W przypadku standaryzacji IDE skłaniam się ku IntelliJ pod względem użyteczności i spójności, żeby wymienić tylko kilka. 2. Nie używamy takiego narzędzia. Zamiast tego wszystkie biblioteki innych firm są przechowywane w folderze centralnym 3rdParty poza drzewem rozwiązań. Następnie mamy konfigurację projektu Eclipse, która odwołuje się do tych plików JAR. Działa to dobrze, ale ten folder innej firmy jest bardzo duży. Więc jeśli nie chcesz selektywnie pobierać plików JAR, których potrzebujesz tylko po to, aby skompilować ten projekt, czeka Cię długi poranek, aby sprawdzić cały folder 3rdParty z SVN. Do zarządzania zależnościami skłaniam się ku Mavenowi. 3. Używamy surowych skryptów ANT. Każdy programista musi upewnić się, że wszystkie elementy wymagane do skompilowania projektu są sprawdzane w kontroli źródła. Ale ponieważ te zasoby są wszędzie, pamiętaj, że folder innej firmy nie jest częścią drzewa projektu, bardzo łatwo jest zapomnieć o sprawdzeniu tego nowego zależnego pliku JAR pobranego skądś. A jeśli używasz Mavena, tak jak ja, muszę skopiować plik JAR z mojego lokalnego repozytorium Maven do odpowiedniego folderu centrll 3rdParty, aby maszyna kompilująca nie narzekała. Jednak nadal istnieje duża szansa, że ta kompilacja się nie powiedzie, ponieważ środowisko kompilacji również może być inne. Jeśli chodzi o kompilację i pakowanie, skłaniam się również ku Mavenowi, aby zapewnić, że środowisko kompilacji jest podobne do środowiska deweloperskiego. Chcę złagodzić ból konieczności pamiętania, gdzie umieścić zależności. 4. Nie. Zobacz odpowiedź 1. 5. Nie zapisujemy, prawdopodobnie dlatego, że nie zapisujemy całego obszaru roboczego Eclipse pod kontrolą źródła. Więc jeśli otrzymam nową maszynę i sprawdzę projekt Eclipse, będę musiał poświęcić sporą część dnia na konfigurowanie ustawień projektu, które powinny być zapisane w kontroli źródła. TIA dla wszystkich komentarzy. **EDIT:** Wystarczy dodać, że mamy serwer CI i używamy skryptów Jenkins/ANT do budowania. Klaus


title: Czy powinniśmy spróbować przejrzeć cały nasz kod?

text: Obecnie modyfikujemy proces rozwoju i zastanawiam się, czy powinniśmy starać się, aby 100% naszych zatwierdzeń było recenzowanych. Jakie masz doświadczenia z przeglądami kodu? * Czy spędzasz na nich „dużo” czasu (powiedzmy 1/2 godziny dziennie), czy po prostu prześlizgujesz się przez maksymalnie 5/10 minut? * Czy masz określoną ilość czasu na dzień/tydzień/sprint/projekt? * Co najważniejsze, czy uważasz, że celem powinno być sprawdzenie 100% kodu, czy też 100% nie jest konieczne?


title: Jak nazywa się technika, w której zwracasz niekończącą się odpowiedź http, aby nadal zwracać wiersze kodu javascript w celu uzyskania efektu dynamicznej aktualizacji?

text: Istnieje technika, w której nie kończysz odpowiedzi, a to pozwala na wysyłanie treści do klienta w kawałkach, takich jak fragmenty javascript lub może dokument xml, który można przeanalizować po stronie klienta i dać efekt aktualizacji czegoś w rzeczywistości czas zamiast odpytywać serwer raz za razem. Czy była taka technika, czy śnię? Czy masz odniesienie do artykułu online, który to wyjaśnia?


title: Płacisz za szkolenie przy rezygnacji?

text: Cześć Społeczność programistów. W ciągu ostatniego miesiąca natknąłem się na następujące kłopoty, kiedy pracownik mojej firmy zrezygnował z pracy. Zasadą firmy jest, że rezygnując z wszelkich szkoleń, które odbyłeś w ciągu roku poprzedzającego rezygnację, musisz się zwrócić. To wszystko dobrze, ponieważ jest to praktyka w wielu firmach. To, co się wydarzyło, to kilka miesięcy temu pewien kurs przedstawiony przez firmę zewnętrzną. Zaoferowaliśmy pokój w naszym biurze jako lokal za darmo, a następnie pozwolono nam wysłać część pracowników na szkolenie za darmo. Był jednym z nich. Czy powinien zwrócić koszty szkolenia (które było dość drogie)? Czy ktoś spotkał się z podobną sytuacją? A może ktoś ma politykę w tym zakresie? Dziękuję! * * * **AKTUALIZACJA** Żeby wyjaśnić kilka rzeczy. Szkolenie było _w pewnym sensie_ opcjonalne (starszy programista wybrał kogo wysłać, ale jestem pewien, że mógł odmówić). To **było** jednak bardzo związane z pracą. Było to szkolenie dotyczące technologii, z której korzystamy na co dzień. Poza tym nie było to szkolenie wewnętrzne, zostało wykonane przez firmę zewnętrzną. Zostało to jednak zrobione w naszej siedzibie. Taka była umowa, oni korzystają z naszego miejsca za darmo, a my wysyłamy ludzi na szkolenie za darmo.


title: Jak wyjaśnić metodę rubinową analogią ze świata rzeczywistego?

text: Szukam dobrej analogii, która pomoże mi w koncepcji metody w rubinowym sztyfcie. Kiedy naprawdę rozumiem pojęcie, w mojej głowie pojawia się obraz, który wiąże coś fizycznego z abstrakcyjnymi pojęciami, których próbuję się nauczyć. Na przykład, ktoś wyjaśnił mi pojęcie zmiennej w następujący sposób: > Zmienna jest jak pudełko, do którego można włożyć rzeczy. Nazwa zmiennej to > jak wzięcie ostrej końcówki i napisanie słowa, jak "widelce" z boku pola >. Wybór dobrego imienia jest ważny. Możesz włożyć wszystko do pudełka, ale jeśli napiszesz „widełki” z boku pudełka, spodziewasz się, że widelce > będą w pudełku. Możesz włożyć cokolwiek do pudełka, a następnie zanieść > do różnych osób i powiedzieć im "w tym pudełku są widelce". Kiedy potrzebują > widelca, idą do skrzynki na widelce i wyjmują widelec. To rodzaj fizycznej, opartej na obrazach, konkretnej analogii, której szukam dla metody rubinowej. W tej chwili większość definicji, które znalazłem, jest dla mnie bezużyteczna. Na przykład w turtorialspoint pierwszy wynik wyszukiwania google „co to jest metoda ruby” ma następującą definicję. > Metody Ruby są bardzo podobne do funkcji w każdym innym języku programowania. Metody Ruby są używane do łączenia jednej lub więcej powtarzalnych instrukcji > w jedną jednostkę. Podam przykład, dlaczego te definicje są dla mnie bezużyteczne. Zamienię każde słowo i pojęcie w tej definicji, których nie rozumiem, słowem „bla”. > Ruby blah są bardzo podobne do blah w każdym innym języku programowania. Ruby > blah są używane do blah jednego lub więcej blah blah w jeden blah. Podsumowując, czy mogę uzyskać dobrą, fizyczną analogię do koncepcji metody w rubinu?