title: Prawidłowy wzorzec dla procesów roboczych obejmujących kolejki i tabele

text: Edycja: OK, więc ludzie powiedzieli, że nie jest jasne, o co pytam. Proszę o opinie na temat tego projektu. Oto przykładowa historyjka użytkownika: Jako administrator grupy na stronie chcę być powiadamiany, gdy użytkownik z mojej grupy prześle plik do grupy. Najprostszym rozwiązaniem byłoby to, że w kodzie obsługującym upload, po prostu bezpośrednio tworzymy tam wiadomość e-mail i wysyłamy ją. Wydaje się jednak, że nie jest to odpowiedni poziom separacji obaw, więc zamiast tego myślimy o osobnym procesie roboczym, który nie robi nic poza wysyłaniem powiadomień. Tak więc witryna w kodzie przesyłania obsługuje odbieranie pliku, wyodrębnianie z niego niektórych metadanych (takich jak nazwa pliku) i zapisywanie ich w bazie danych. Zaraz po zakończeniu obsługi przesyłania pliku wykonuje dwie rzeczy: Zapisuje szczegóły powiadomienia do wysłania (takie jak temat, nazwa pliku itp.) w dedykowanej tabeli „powiadomień”, a także tworzy wiadomość w kolejka, którą monitoruje proces roboczy wysyłający powiadomienia. Całą sekwencję pokazano na poniższym schemacie. Moje pytania to: Czy widzisz jakieś wady tego projektu? Czy istnieje lepszy projekt? Zespół chce używać ról, kolejek i magazynu tabel Azure Worker. Czy to słuszne wezwanie do korzystania z tych komponentów, czy ten projekt jest niepotrzebnie skomplikowany? Wymagania atrybutów jakościowych to łatwość kodowania, łatwość utrzymania, łatwość debugowania w czasie wykonywania, możliwość audytu (dostępna jest historia wysyłania powiadomień itp.), możliwość monitorowania. Jakieś inne cechy jakościowe, które Twoim zdaniem powinniśmy projektować? Oryginał: Tworzymy aplikację chmurową (na Azure), w której znajdują się co najmniej 2 komponenty. Pierwszym z nich jest komponent „źródłowy” (na przykład interfejs użytkownika/strona internetowa), w którym dzieje się jakaś akcja lub spełniony jest warunek, który uruchamia drugi komponent lub „pracownika” do wykonania jakiejś pracy. Z tymi zadaniami są powiązane szczegóły lub metadane, które planujemy przechowywać w usłudze Azure Table Storage. Oto wzorzec, który rozważamy: ![tutaj wpisz opis obrazu](http://i.stack.imgur.com/fLIs4.png) Kroki: 1. Spełniony warunek zlecenia. 2. Źródło zapisuje szczegóły zadania do tabeli. 3. Źródło umieszcza zadanie w kolejce. Asynchronicznie: 1. Pracownik przyjmuje zadanie z kolejki. 2. Rekordy pracowników DateTimeStarted w tabeli. 3. Kolejka oznacza zadanie oznaczone jako „w toku”. 4. Pracownik wykonuje pracę. 5. Pracownik aktualizuje tabelę o szczegóły (w tym DateTimeCompleted). 6. Pracownik zgłasza zakończenie do kolejki. 7. Zadanie usunięte z kolejki. Proszę o komentarz i daj znać, czy mam rację, czy jest jakiś lepszy wzór. Na przykład, rozważ pracę jako „wysyłanie powiadomienia”, takiego jak wiadomość e-mail, której pola szablonu są wypełnione na podstawie „szczegółów” wymienionych we wzorcu.


title: Jak przezwyciężyć paraliż poprzez analizę podczas kodowania?

text: Kiedy zaczynam nowy projekt, często od razu zaczynam myśleć o szczegółach realizacji. „Gdzie mam umieścić DataBaseHandler? Jak go używać? Czy klasy, które chcą go używać, powinny przedłużyć się z jakiejś abstrakcyjnej superklasy…? Czy powinienem użyć interfejsu? Jakiego poziomu abstrakcji zamierzam użyć w mojej klasie, która zawiera metody wysyłania żądań i parsowania danych?" Kończę się przez długi czas, ponieważ chcę kodować pod kątem rozszerzalności i ponownego użycia. Ale czuję, że prawie niemożliwe jest, aby zapomnieć o tym, jak perfekcyjnie wdrożyć. A potem, jeśli spróbuję po prostu powiedzieć „pieprzyć to, po prostu zrób to!”, dość szybko uderzam w mur, ponieważ mój kod nie jest zorganizowany, mieszam poziomy abstrakcji itp. Jakie są techniki/metody musisz rozpocząć nowy projekt, jednocześnie tworząc logiczną/modułową strukturę, która będzie się dobrze skalować? - _-_ EDYTUJ - _-_ Cóż, to już jest rodzaj pytania, na które trudno jest zaakceptować odpowiedź, ale chciałem uzyskać więcej informacji zwrotnych, zobacz, czy jest jakiś konsensus. TDD brzmi naprawdę fajnie i szczerze mówiąc, miałem zamiar przyspieszyć korzystanie z JUnit itp. Jednocześnie, co fani TDD myślą o fakcie, że jeden uzasadniony punkt w odniesieniu do TDD rozwiązuje moje szczególnych problemów jest to, że TDD nie wydaje się tak naprawdę odnosić się do kwestii projektowania. Jasne, zgadzam się, że TDD pomoże mi określić, co chcę zrobić, a następnie będę mógł stopniowo pracować nad tym, jak to zrobić, ale istnieje wiele różnych ogólnych wzorców/struktur projektowych, które mogą przejść przez testy jednostkowe. To po prostu: testuje pojedyncze JEDNOSTKI. Chyba jestem trochę zdezorientowany... Nie wiem. Może po prostu próbuję jeszcze bardziej zwlekać, próbując wymyślić jakąś magiczną formułę, ale chciałbym usłyszeć, jak niektórzy weterani podchodzą do tego obszaru... Dzięki!


title: Tworzenie interfejsu do standardowej biblioteki języka?

text: W procesie uczenia się programowania sterowanego testami zostałem wprowadzony do wstrzykiwania zależności i korzystania z interfejsów i zacząłem używać tych koncepcji w moim własnym kodzie PHP, aby uczynić go bardziej testowalnym. Były czasy, kiedy musiałem przetestować kod, który robił takie rzeczy, jak wywoływanie funkcji PHP `time()`. Aby te testy były przewidywalne, logiczne wydawało się stworzenie interfejsu do standardowych funkcji PHP, których używam, abym mógł je wyśmiewać w moich testach. Czy to dobry projekt oprogramowania? Jakie są plusy i minusy takiego postępowania? Zauważyłem, że jęczę, jak szybko mój interfejs PHP może wtykać palce we wszystko, co robię. Czy istnieje lepszy sposób na uczynienie kodu, który opiera się na stanie i funkcjach dostępnych w PHP, bardziej testowalnymi?


title: Czy FitNesse poprawia jakość produktu i współpracę?

text: Słyszałem o narzędziu o nazwie FitNesse, które ma promować lepszą współpracę między grupami deweloperskimi, testowymi i produktowymi. Jakie masz z tym doświadczenia? Czy to naprawdę poprawia jakość programu? Czy są jakieś wady korzystania z niego?


title: Generowanie testów ze specyfikacji

text: Czytam "Pragmatic Programmer". Książka zawiera następujący akapit > Dave pracował kiedyś nad międzynarodowym teleksem. Całkiem zrozumiałe, > klient zażądał wyczerpującej specyfikacji testu i wymagał, aby oprogramowanie przeszło wszystkie testy przy każdej dostawie. Aby upewnić się, że testy > dokładnie odzwierciedlają specyfikację, zespół wygenerował je > programowo z samego dokumentu. Gdy klient zmienił > specyfikację, zestaw testów zmieniał się automatycznie. Gdy zespół przekonał > klienta, że procedura jest prawidłowa, wygenerowanie testów akceptacyjnych > zwykle trwało tylko kilka sekund. Jestem ciekaw, jak stworzył testy ze specyfikacji. W jakim formacie była specyfikacja? Jak napisać program, który automatycznie odczyta specyfikację i zapisze przypadki testowe. Czy źle zrozumiałem powyższy akapit?


title: Jak przezwyciężyć własne błędy w kodowaniu, gdy otrzymujesz starszy kod?

text: Jako programiści często jesteśmy niezwykle dumni z naszych umiejętności i mamy bardzo silne opinie na temat tego, co jest „dobrym” i „złym” kodem. W dowolnym momencie naszej kariery prawdopodobnie zrzucono nam na kolana jakiś tradycyjny system i pomyśleliśmy: „Mój Boże, ten kod jest do bani!”. ponieważ nie pasował do naszego wyobrażenia o tym, jaki powinien być dobry kod, mimo że mógł być doskonale funkcjonalnym, łatwym do utrzymania kodem. Jak przygotowujesz się mentalnie, gdy próbujesz ogarnąć pracę innego programisty?


title: Jaki byłby najskuteczniejszy sposób zmniejszenia złożoności zestawu obrotów do sześcianu?

text: Mimo długiego tytułu moje pytanie jest dość proste. Załóżmy, że masz sześcian w przestrzeni 3D i chcesz go obrócić wzdłuż trzech osi w oparciu o zestaw instrukcji dostarczonych przez użytkownika lub w innym miejscu programu. Jak uprościłbyś, jeśli chcesz, ten zestaw obrotów? Dla uproszczenia użyjemy notacji związanej z obracaniem kostki Rubika. (A także dlatego, że to właśnie programuję.. Ale to nieistotne.) Tak więc, X byłby obrotem w prawo wzdłuż osi X, X' byłby obrotem w lewo wzdłuż osi X, a X2 będzie dwoma obrotami w prawo wzdłuż osi X. Załóżmy teraz, że mam zestaw instrukcji `X Y X'`. Ten zestaw instrukcji robił to samo, co pojedyncza instrukcja `Z`. Lub, w prostszym przypadku, gdybym miał `X X'' lub `X2 X2`, te rotacje się anulują. Moje pytanie brzmi, jaki jest najlepszy sposób – z perspektywy programowania – na uproszczenie tych zestawów instrukcji?


title: Usługi sieciowe ujawnione przez url

text: Weźmy losową witrynę internetową, której nie znam żadnego interfejsu API, który ujawnia dla swoich usług internetowych, jeśli takie istnieją, czy istnieje sposób na zapytanie o ten adres URL dla odsłoniętych usług internetowych?


title: Czy wskazane jest tworzenie licencji na oprogramowanie typu open source ad-hoc?

text: IANAL Mam kilka prywatnych projektów, które _być może_ trzeba będzie pokazać moim potencjalnym pracodawcom. Nie przesłałem ich do żadnego systemu kontroli wersji online, ponieważ nie tylko nie mam cierpliwości, aby filtrować wiele dostępnych licencji i wybrać najbardziej odpowiednią (ponieważ nie jestem jeszcze pewien, jak chciałbym, aby mój kod open source być używany), uważam również, że projekty nie są wystarczająco odpowiednie do przesyłania w domenie publicznej, ponieważ nie są dla mnie wystarczająco rygorystycznie testowane. Mógłbym gdzieś stworzyć prywatne repozytorium i umożliwić dostęp potencjalnym pracodawcom, albo mógłbym po prostu zabrać ze sobą pamięć USB, ale wciąż pozostaje pytanie o licencjonowanie. Pomyślałem więc o stworzeniu licencji ad-hoc, aby powiedzieć „ten kod jest dostępny dla ciebie i żadna jego część nie będzie odtwarzana z pamięci…”, co jest prawie jak podpisanie umowy NDA. Wiem, że może to zabrzmieć głupio lub głupio, ale chcę w jakiś sposób chronić moje IP (nigdy nie wiesz, czym może się stać Twój kod!). Jaki jest najlepszy sposób na to? Jeśli rzeczywiście tworzenie licencji jest opcją, jak będzie działać? Czy wystarczyłoby napisanie prologu na początku każdego pliku źródłowego, czy jest to jakaś długa i zawiła legalność?


title: Kod wzorca stanu dla urządzenia osadzonego — wstrzykiwanie zależności obiektów urządzeń w klasach kontekstu i stanu

text: Zmagam się z jakimś kodem i wydaje mi się, że w końcu uzyskałem kod wzorca stanu, który działa z moimi zdarzeniami. Mam _uproszczony_ system, który będzie działał w ten sposób: ![Diagram stanu](http://i.stack.imgur.com/LzxdG.jpg) To jest moje pierwsze podejście z kodem wzorca stanu, a przykłady, które znalazłem to zbyt proste lub po prostu niezwiązane z moim typem urządzenia. **P:** Czy klasa context ma zajmować się wszystkimi urządzeniami peryferyjnymi urządzenia, czy też stan aktywny powinien je bezpośrednio kontrolować? Np. jedź wyświetlaczem, odczytaj czujniki itp. Dla mnie tak czy inaczej by zadziałało, ale nie mam tu wystarczającego doświadczenia, aby wybrać, co jest poprawne. Wspominam o DI, ponieważ muszę przekazać wszystkie moje urządzenia peryferyjne do kontekstu, a następnie do każdego stanu, aby zapewnić kontrolę. CZY mam po prostu przekazać je do kontekstu i wywołać kontekst ze stanu aktywnego (wspomnianego powyżej)? Sposób, w jaki to widzę, stan aktywny i kontekst nieustannie komunikują się ze sobą poprzez DI w celu sterowania urządzeniem. Mam nadzieję, że to jasne. Kod klasy kontekstu: //kontekst //kontekst przechwyci zdarzenia przerwań i przekaże klasę odpowiedzi ModeContext { private int rotationCount; kierunek prywatnego ciągu; państwo prywatne; publiczny RotaryEncoder RotaryEncoderInstance; publiczny wyświetlacz Tlc5940; //zdarzenie publiczne NativeEventHandler rotacjaEventHandler;// = null; public ModeContext(RotaryEncoder re, wyświetlacz Tlc5940) { this.State = new Mode1(this); ObrotowyEncoderInstancja = re; rotorEncoderInstance.RotationEventHandler += OnRotationEvent;//dołącz do procedury obsługi kontekstu rotorEncoderInstance.MomentaryButtonEventHandler += OnButtonEvent; Wyświetlacz = wyświetlacz; liczba obrotów = 0; } public void RunStateTask() { state.MainTask(to); } public State State { get { return state; } ustaw { stan = wartość; }//zmiana stanu debugowania } //Obsługa zdarzeń public void OnButtonEvent(uint clickCount, uint zero, DateTime czas) { switch (clickCount) { case 0: state.OnButtonHold(this); przerwanie; przypadek 1: state.OnButtonSingleClick(this); przerwanie; //domyślnie: // wyrzuć nowy wyjątek("Coś poszło nie tak!"); //             przerwanie; } } public void OnRotationEvent(uint data1, uint data2, DateTime czas) { rotationCount++; if (dane1 == 1) { kierunek = "Zgodnie z ruchem wskazówek zegara"; state.OnCWRotationEvent(to); } else { kierunek = "W lewo"; state.OnCCWRotationEvent(to); } //Debug.Print(rotationCount.ToString() + ": " + kierunek + " Uruchomiono zdarzenie rotacji trybu kontekstowego!"); } } Przykład State Class: class Mode1 : State//, IDisposable { public Mode1(ModeContext mode): base(mode) { Display = mode.Display; } public override void MainTask(tryb ModeContext) { Debug.Print("Główne zadanie trybu1 uruchomione..."); //odczytaj czujnik //wyświetl wartość do wyświetlenia //pozwól kontekstowi określić, jak ją wyświetlić? //lub wywołać metodę w kontekście, który zawiera wszystkie jej funkcje? //Wątek.Uśpienie(500); } #obsługi zdarzeń regionu public override void OnCCWRotationEvent(tryb ModeContext) { //zmiana stanu mode.State = new Mode2(tryb); Debug.Print("Zmieniam stan"); } public override void OnCWRotationEvent(tryb ModeContext) { //zmiana stanu Debug.Print("Zmiana stanu"); mode.State = nowy Mode0(tryb); } public override void OnButtonSingleClick(tryb ModeContext) { Debug.Print("Tryb1: Pojedyncze kliknięcie!"); } public override void OnButtonHold(tryb ModeContext) { Debug.Print("Tryb1: Wykryto naciśnięcie i przytrzymanie!"); } #endregion }


title: Wiele zdalnych widoków aplikacji C#

text: Mam aplikację C# (aplikację desktopową dla systemu operacyjnego Windows), z której chciałem korzystać z przeglądarki internetowej. Aplikacja jest rodzajem narzędzia analitycznego, które pobiera pewne wartości wejściowe i wykonuje na nich zestaw obliczeń, a następnie wyświetla animację wyników. Ponieważ aplikacji nie można ponownie napisać w nowym języku, czy ktoś może mi zasugerować, w jaki sposób mogę przeglądać i wchodzić w interakcję z tą aplikacją C# z poziomu przeglądarki (tak jak w przypadku interakcji z apletami Java)? Z aplikacji może korzystać jednocześnie więcej niż jeden użytkownik, więc musi istnieć wiele widoków dla tej aplikacji internetowej.


title: Małe firmy i licencjonowanie oprogramowania

text: Małe firmy z małym budżetem mogą nie mieć pieniędzy na zainwestowanie w drogie licencje na oprogramowanie, których mogą potrzebować w danym projekcie rozwojowym. Jest to tym bardziej, jeśli projekt był liderem strat, aby przyciągnąć więcej biznesu, a cena produktu deweloperskiego nie może być renegocjowana bez potencjalnej szkody dla relacji, gdy później okazuje się, że potrzebna jest jakaś prawnie zastrzeżona, droga licencja na oprogramowanie dla bardzo małej jeszcze kluczowa część aplikacji. W przeszłości radziłem sobie z tym, sprytnie używając próbnych wersji oprogramowania w potencjalnie nieetyczny sposób, próbując tylko opóźnić lub uniemożliwić zakup licencji. Jakie kreatywne sposoby sprytni inżynierowie oprogramowania obchodzą ten problem, gdy trudno byłoby zdobyć pieniądze na inwestycje bez łamania prawa lub kradzieży? **AKTUALIZACJA:** Aby nadać kontekst sytuacji, w której wolne lub otwarte oprogramowanie nie jest dostępne, masz urządzenie peryferyjne z tabletem do podpisów, które jest dostarczane z wtyczką integracyjną do programu Adobe Acrobat Professional. Aby prawidłowo korzystać z tego urządzenia, należy utworzyć plik PDF za pomocą programu Acrobat i dołączonej wtyczki. Wersja próbna działa dobrze przy tworzeniu pliku PDF, ale co się stanie, jeśli klient zechce zmodyfikować plik PDF za rok? W zasadzie po prostu przestawiłeś ten problem na dalszy plan.


title: Czy mogę używać aac w komercyjnej aplikacji za darmo?

text: Zastanawiałem się, czy mogę używać kodeka aac w mojej komercyjnej aplikacji za darmo (poprzez lgpl ffmpeg). Na wiki jest napisane: > Żadne licencje ani płatności nie są wymagane, aby móc przesyłać strumieniowo lub > treści w formacie AAC.[36] Już sam ten powód sprawia, że AAC jest o wiele bardziej > atrakcyjnym formatem do dystrybucji treści niż MP3, szczególnie do przesyłania strumieniowego > treści (takich jak radio internetowe). Jednak licencja patentowa jest wymagana > dla wszystkich producentów lub twórców kodeków AAC.> Z tego powodu bezpłatne i > implementacje oprogramowania typu open source, takie jak FFmpeg i FAAC, mogą być > dystrybuowane tylko w formie źródłowej, aby uniknąć naruszenia patentu. (Patrz > poniżej w sekcji Produkty obsługujące AAC, Oprogramowanie.) Jednak program xSplit musiał anulować AAC dla bezpłatnych członków, ponieważ muszą oni płacić tantiemy za osobę. Czy to prawda (że musisz płacić za każdą osobę, która używa aac)? Jeśli musisz zapłacić, jakiej firmie płacisz i jak złożyć wniosek?


title: Pytanie dotyczące podejścia do programowania i testowania

text: Czytałem gdzieś, że koszt usunięcia błędów wzrasta, jeśli nie zostanie rozwiązany na początkowym etapie. Moje pytanie brzmi: Jakie podejście powinienem przyjąć podczas tworzenia programów: 1. Podziel programowanie na moduły. Pełne kodowanie jednego modułu. Napraw WSZYSTKIE błędy tego modułu przed rozpoczęciem kodowania innych modułów. 2. Podziel programowanie na moduły. Pełne kodowanie wszystkich modułów. Następnie zacznij naprawiać błędy w całym programie. Daj mi znać o swoich doświadczeniach, w którym podejściu znalazłeś lepsze.


title: Bardziej produktywny w pojedynkę niż w zespole?

text: Jeśli pracuję sam, jestem superproduktywny, jeśli chcę. Uruchamianie prototypów w ciągu jednego dnia, coś, co można wdrożyć i używać w ciągu kilku dni. Nie idealny, ale wystarczająco dobry. Miałem też to doświadczenie kilka razy, pracując bezpośrednio z kimś innym. Każdy mógł zrobić wszystko, ale fajniej było nie robić tego samemu, a także szybciej. Odpowiednie dwie osoby mogą wprawdzie przenieść niezbyt duży projekt na nowe poziomy. Teraz w pracy mamy siedmioosobowy zespół i nie czuję się tak produktywny. Nawet prawie. Pewne rzeczy muszą zostać porównane z czymś innym, co następnie musi również zająć się jakimś nowym wymaganiem, które pojawiło się właśnie trzy dni temu. Wszelkiego rodzaju rzeczy, głównie ważne, ale często po prostu dług techniczny z dawnych czasów, błędne przekonanie lub inne słownictwo dotyczące tej samej rzeczy, a czasem po prostu niezbyt technicznie przemyślany świetny pomysł od kogoś, kto chce mieć coś do powiedzenia, i tak dalej. Kopanie króliczej nory, myślę sobie, że mógłbym wykonać większe porcje tej pracy sam szybciej (i trochę lepiej), ale to nie moja odpowiedzialność (ktoś inny dostaje za to wynagrodzenie), więc z założenia nie powinno mnie to obchodzić . Ale robię to, ponieważ pewne rzeczy idą w parze (jak możesz tego doświadczyć, gdy sam robiłeś projekty poboczne). Wiem, że jest to coś, o czym pisał Fred Brooks, ale jaka jest twoja strategia, aby pozostać tak produktywnym, jak wiesz, że możesz być w boksie? A może zrezygnowałeś z jakiegoś powiązanego powodu; a jeśli tak, to gdzie poszedłeś?


title: Dlaczego powinienem używać języka szablonów struktury internetowej zamiast opcji szablonów Pythona?

text: Pochodzę ze środowiska CGI Pythona i chciałem przejść do czegoś bardziej współczesnego i myślę, że zdecydowałem się na `web.py` jako framework, którego chciałbym użyć. Jeśli chodzi o tworzenie szablonów, wcześniej używałem sformatowanych łańcuchów i modułu `string.Template`, aby spełnić większość moich potrzeb związanych z szablonami. Po przeczytaniu kilku opcji szablonów, o których słyszałem, zacząłem się zastanawiać, jakie są główne korzyści z używania czegoś takiego jak opcje szablonów `Django` lub `jinja` w porównaniu z „natywnymi” opcjami szablonów Pythona? Czy po prostu zastąpię `$tmpl_var` `{{ tmpl_var }}` i `s.substitute(tmpl_var=value)`` `t.render(s)`, czyli alternatywną składnię? czy uzyskam dodatkowe korzyści z korzystania z tych systemów szablonów?


title: Czy ktoś zna jakieś równoległe kompilatory podążające za podejściem Smoczej Księgi?

text: W _Compilers: Principles, Techniques, & Tools_ Aho _i inni_ opisują podejście do optymalizacji pod kątem równoległości (rozdział 11 w drugim wydaniu). Czy ktoś wie o istnieniu kompilatorów, które stosują to podejście?


title: Czy szybkie prototypowanie jest niezgodne ze specyfikacją wymagań oprogramowania?

text: Z tego, czego nauczyłem się w poprzednim semestrze na kursach SWE, duża część to pisanie dokumentów, więc wydaje się, że specyfikacja wymagań oprogramowania (SRS) powinna zdobywać punkty za mój projekt kończący kurs. Jednak będzie mi wygodniej, jeśli będę korzystał z prototypowania, czyli robię drobiazg, który sprawdza się w najbardziej trywialnych sytuacjach i stopniowo dodaję funkcje i ulepszenia. LVS 68:1996 nie wydaje się zalecać mieszania tych dwóch rzeczy razem. Czy nadal można zachować moje preferowane podejście do rozwoju i mieć jakiś użyteczny dokument specyfikacji wymagań?


title: Git, rebase i bądź zsynchronizowany ze zdalnym oddziałem

text: Mam coś w rodzaju irytacji w moim przepływie pracy Git. Robię zwykłą rzecz, kiedy odgałęziam master do gałęzi o nazwie feature. Przez jakiś czas pracuję nad tą gałęzią funkcji, w międzyczasie prawdopodobnie master ma swoje własne commity, które mogę połączyć w funkcję. Kiedy to robię, mam zdalną gałąź dla funkcji (pochodzenie/funkcja), której używam, aby móc budować i uruchamiać mój kod na wielu komputerach. Teraz, kiedy skończę z gałęzią funkcji, muszę wypchnąć kod do naszego systemu przeglądu kodu. Oznacza to zmianę bazy funkcji z poziomu głównego i zgniecenie wszystkich zmian w jednym. Robię to, w razie potrzeby rozwiązuję konflikty, świetnie. Oto problem: funkcja i pochodzenie/funkcja mają teraz różne historie i nie jestem w stanie przeforsować. Próbowałem push z -f, aby wymusić to nawet, ale to też nie zadziałało. Czy jest jakiś wygodny sposób na zmianę bazy funkcji poza główną i zachowanie synchronizacji funkcji i źródła/funkcji? Rozważam wykonanie kolejnej gałęzi do przeglądu kodu. Innymi słowy, przed zmianą bazy i squashem przejdź do przeglądu kodu funkcji. Następnie zmień bazę funkcji featurecodereview na master, a jeśli mi się podoba, mogę przenieść to do nowej zdalnej gałęzi. Zastanawiałem się, czy jest coś czystszego niż otwarcie kolejnego oddziału.


title: Jak wykryć duszki w arkuszu sprite?

text: Obecnie piszę program do rozpakowywania arkuszy sprite, taki jak Alferds Spritesheet Unpacker. Teraz, zanim zostanie to wysłane do gamedev, niekoniecznie chodzi o gry. Chciałbym wiedzieć, jak wykryć duszka w arkuszu, a dokładniej kształt wewnątrz obrazu. Biorąc pod uwagę ten arkusz sprite: ![](http://www.gotoandplay.it/_articles/2006/06/beatemup/pixel_splatter.gif) Chcę wykryć i wyodrębnić wszystkie poszczególne sprite'y. Postępowałem zgodnie z algorytmem opisanym w Alferd's Blog Post, który wygląda następująco: 1. Określ dominujący kolor i nadaj mu nazwę BackgroundColor 2. Iteruj po każdym pikselu i sprawdź ColorAtXY == BackgroundColor 3. Jeśli false, znaleźliśmy duszka. Idź w prawo, aż ponownie znajdziemy BackgroundColor, cofnijmy się, zejdź w dół i powtarzaj, aż zostanie osiągnięty BackgroundColor. Utwórz pudełko od lokalizacji do lokalizacji końcowej. 4. Powtarzaj to, aż wszystkie duszki zostaną zapakowane. 5. Połączone nakładające się pola (lub w bardzo małej odległości) 6. Powstałe nienakładające się pola powinny zawierać duszka. Ta implementacja jest w porządku, szczególnie w przypadku małych arkuszy kształtów. Uważam jednak, że wydajność jest zbyt niska dla większych arkuszy sprite i chciałbym wiedzieć, jakie algorytmy lub techniki można wykorzystać, aby zwiększyć wyszukiwanie sprite'ów. Drugą implementacją, którą rozważałem, ale jeszcze nie testowałem, jest znalezienie pierwszego piksela, a następnie użycie algorytmu śledzenia wstecznego, aby znaleźć każdy połączony piksel. Powinno to znaleźć ciągły duszek (załamuje się, jeśli duszek jest czymś w rodzaju eksplozji, w której cząsteczki nie są już częścią głównego duszka). Fajne jest to, że mogę natychmiast usunąć wykrytego duszka z arkusza ikonek. Jakieś inne sugestie?


title: Licencja Publiczna Microsoft czy MIT?

text: Pracuję z nową wtyczką (flexbox) i natknąłem się na licencję MS-PL, z którą wcześniej nie miałem do czynienia. W przeszłości korzystałem głównie z projektów na licencji MIT i Apache, więc nie mam pojęcia, jakie są główne różnice w tym przypadku. Oto link do niego: http://opensource.org/licenses/MS-PL Czy ktoś może mi pomóc wyjaśnić różnice? Zwykle jestem nieufny wobec Microsoftu, więc fakt, że ten produkt jest wyposażony w to, mnie denerwuje.


title: Używanie „wyłącznika zmarłego” do zarządzania kodem wrażliwym na czas

text: W naszym środowisku programowym często przeprowadzamy testy a/b, co prawdopodobnie jest dobrą praktyką. Jednak nasze środowisko jest skonfigurowane w taki sposób, że w bardzo krótkim czasie kod staje się bardzo gryzący z martwymi testami. Rejestr testowy to niewiele więcej niż zbiór wewnętrznych stron wiki. Pomyślałem o stylu zarządzania nieistniejącym kodem „dead man's switch”. Jeśli nie znasz tego terminu, odnosi się on do przełącznika, który musi być okresowo resetowany, aby zapobiec uruchomieniu czegoś – w istocie, jeśli nie zareagujesz, przełącznik zostanie uruchomiony i cokolwiek chcesz, aby przełącznik wyzwalacz jest wykonywany. Na przykład napisałbym jakiś kod, zarejestrował go w jakiś sposób w tym systemie, a gdy minęła data mojego z góry określonego wyboru, otrzymywałbym powiadomienie, że ten kod zostanie usunięty (automatycznie wyczyszczony) chyba, że zainterweniowałem (ręcznie sprzątania lub drzemki). Jakie są zalety, wady i opłacalność wprowadzenia takiego systemu? Czy to możliwe czy mądre? Jakie mogą być alternatywne sposoby zarządzania kodem przed gniciem?


title: Java czy c++ do aplikacji graficznych wymagających dużej ilości matematyki?

text: Powiedzmy, że mój przyjaciel musi napisać niesamowicie trudną do matematyki aplikację. Myślał o użyciu C++, ale chce to napisać w Javie. Jak wolna jest Java w porównaniu do C++? Jego aplikacja będzie musiała rozwiązać mniej więcej matix 10000 na 10000 na klatkę, więc wydajność jest ważna. Co mam mu powiedzieć? Zrobić to w Javie czy C++? I dlaczego? (Naprawdę bardzo chce używać Javy, ale jeśli aplikacja ma działać z prędkością ślimaka, będzie bardzo rozczarowany).


title: Problem z licencją SUN Java i GPL V2 dla połączonych aplikacji

text: Niedawno zauważyłem, że kod Sun Java został wydany jako kod GPL V2 (zobacz repozytorium kodu Google). Czy to oznacza, że wszystkie aplikacje napisane w Javie i połączone z Sun API (beans itd.) są również objęte GPL? Jeśli ściśle przestrzegamy GPL, to tak właśnie powinno być (Biblioteki powinny być na licencji LGPL, a nie GPL, jeśli chcemy budować na niej oprogramowanie własnościowe). Czy istnieje inna licencja komercyjna, która pozwoli uniknąć takiego problemu? Nie mogę uwierzyć, że tak jest. Musi być na to wyjaśnienie. Pozdrawiam, Jabłko92


title: Czy wskazane jest stworzenie pełnej aplikacji w Silverlight?

text: Czy naprawdę wskazane jest stworzenie ogromnej witryny publicznej w pełni w Silverlight? dla np. witryna e-commerce. Nie chcę rozpoczynać żadnej debaty, ale tak naprawdę uważam, że Silverlight nie powinien być używany do pełnej witryny, ponieważ największą stratą, jaką ponosisz, jest SEO. Żadna wyszukiwarka do dziś nie może przeanalizować pliku xap i zindeksować go na podstawie jego zawartości. Możesz obejść ten problem, wykonując if, a następnie, na przykład, jeśli Silverlight nie jest obsługiwany, a następnie utwórz dla niego stronę równoważną Asp.Net, ale to tylko podwaja nasz wysiłek związany z tworzeniem aplikacji, bardziej niż cokolwiek innego. Po co pisać podwójny kod w 2 aplikacjach przeznaczonych do tego samego celu. Jeśli jest to jedyna opcja, dlaczego nie utworzyć tylko aplikacji Asp.Net. Jakie są twoje poglądy? Z góry dziękuję :)


title: Przykład aplikacji internetowej ASP.NET dla początkujących

text: Chcę nauczyć się tworzenia aplikacji internetowych ASP.NET na przykładzie. Chcę się tego nauczyć z już opracowanej aplikacji internetowej, która jest dobrym samouczkiem dla początkujących. W pełni funkcjonalna aplikacja internetowa, która jest niewielka, ale wystarczająco wydajna, aby nauczyć początkujących prac programistycznych wymaganych do tworzenia aplikacji internetowych. Szukam jakiejś aplikacji, która jest wykonana z wykorzystaniem zasad inżynierii oprogramowania, a nie tylko kodu napisanego przypadkowo.


title: Czy frameworki „Compile to JavaScript” są wrogie ciągłej integracji?

text: Ostatnio szukaliśmy sposobów na ulepszenie automatycznego testowania i powiązanych narzędzi naszej aplikacji internetowej GWT na poziomie korporacyjnym. Zdałem sobie sprawę, że pod pewnymi względami GWT jest nieco wrogo nastawiony do automatycznego testowania, głównie ze względu na długi czas kompilacji GWT z Javy do JS. To sprawia, że testowanie jednostkowe jest nieco trudne, ale także stawia pewne przeszkody w testowaniu w środowisku CI. Odkryłem również, że niektóre z naszych procesów budowania i wdrażania są nieco skomplikowane ze względu na naturę procesu kompilacji GWT. Czy jest to ogólny problem dla frameworków "kompiluj do JS" dla aplikacji internetowych? Nie mam z nimi dużego doświadczenia, ale widzę potencjalne problemy związane z automatycznym testowaniem oraz ciągłą integracją i wdrażaniem. Niektóre problemy, które widzę: * Długie czasy kompilacji i kompilacji uniemożliwiające szybkie wdrożenia * Język, w którym aplikacja jest tworzona != JS, uniemożliwiający dobre testowanie jednostkowe * Zaciemniony JS w rzeczywistej aplikacji sprawia, że bardziej przypomina ona plik wykonywalny niż aplikację internetową Czy te problemy występują w innych podobnych frameworkach, czy jest to bardziej problem GWT?


title: Ogólny opis tworzenia eksperymentalnych funkcji C++?

text: Herb Sutter w filmie odpowiada na pytanie dotyczące propozycji koncepcji rozważanych dla C++11 i z jego uwag wynika, że wiele grup oferowało prototypowe implementacje, ale wszystkie pozostawiły obawy dotyczące powolnego czasu kompilacji. Komentarz zaskoczył mnie, ponieważ sugeruje, że przynajmniej w niektórych przypadkach opracowywane prototypy nie są tylko dowodami koncepcji – oczekuje się od nich nawet, że będą działać. Cała praca, którą trzeba podjąć, zaciekawiła mnie. W jaki sposób rozwijane są eksperymentalne funkcje języka dla języków dojrzałych, zwłaszcza C++? Czy to znacznie różni się od tworzenia kompilatora, który implementuje standard? Czy programista ma poczucie, czy to będzie działać i wydajnie, a nawet czy kiedykolwiek będzie mogło? Jakie są najbardziej czasochłonne części i czy jakiekolwiek części są zaskakująco łatwiejsze, niż można by się spodziewać? Pytanie nie dotyczy tego, co robi komitet ds. standardów C++, ale raczej części, która pojawiła się wcześniej. Kiedy powstaje eksperymentalna implementacja propozycji i nie ma całkowicie utrwalonych zasad, jak powstaje kiełbasa? Nie jestem profesjonalnym programistą kompilatora ani nie oczekuję odpowiedzi z kontami krok po kroku. Chciałbym mieć ogólne wyobrażenie o tym, jak to zrobić lub czy w ogóle istnieją jakieś ogólne wzorce. Nie wiem, czego się spodziewać po odpowiedziach, ale nawet jeśli nie ma żadnych zasad dotyczących tego procesu, a niewielka liczba ludzi, którzy to robią, po prostu to kowboj, a następnie, dla rzeczy, które się udało, napisz „oficjalną wersję” jako wniosek, ta odpowiedź byłaby nadal pouczająca.


title: Czy ATL jest przestarzałym językiem?

text: Obecnie opracowuję niektóre transformacje M2M za pomocą języka Atlas Transformation Language (ATL). Podczas studiowania konstrukcji i właściwości języka często czytałem, że ATL jest prototypem dla QVT, ale nie był używany dla QVT. To prowadzi mnie do pytania, czy ATL jest językiem przestarzałym. Osobiście twierdzę, że ATL nie jest przestarzały, ponieważ są ku temu pewne przesłanki: 1. Jeśli spojrzę na stronę ATL, ostatnia aktualizacja miała miejsce 26 sierpnia 2011. Pierwsza specyfikacja QVT to rok 2008. Myślę więc, że rozwój Wydaje się, że ATL postępuje. 2. Istnieje również kilka artykułów od 2011 r. w google naukowiec: http://scholar.google.de/scholar?q=atl+m2m&btnG=&hl=de&as_sdt=0&as_ylo=2011 3. Nadal jest częścią ram M2M Zaćmienie Co byś powiedział? Czy lepiej byłoby używać innego języka M2M, czy jest to ATL przyszłościowe? Jeśli nie, czy znasz możliwości przekształcenia ATL w inne języki M2M?


title: Wpływ Load Balancera na tworzenie stron internetowych

text: To pytanie ma swoje korzenie w witrynie programu SharePoint, w której pomagam. ### Tło problemu, którym się zajmowałem: dev box i serwer integracyjny nie są ustawione za load balancerem. Linki zostały zbudowane przy użyciu wartości HttpRequest.Url z bieżącego kontekstu. Zauważ, że linki nie były linkami względnymi, ale pełnymi identyfikatorami URI. Po wdrożeniu do testów (która ma między innymi LB) otrzymaliśmy błędy w budowanych linkach, ponieważ serwer miał adres „http://some.site.org:999”, podczas gdy adres w LB to „https://site.org” (SSL został wyłączony w LB). Poprawka była dość łatwa dzięki użyciu względnych identyfikatorów URI. ### Pytanie: Ponieważ jest to pierwsza witryna, z którą pracowałem, która stoi za Load Balancer, zastanawiam się, czy istnieją inne problemy, które muszę wziąć pod uwagę podczas tworzenia witryny za nią?


title: Buforowanie dużej ilości obiektów zwróconych przez ajax

text: Buduję aplikację, która pobiera dużą ilość elementów z żądaniami ajax za pośrednictwem innego API aplikacji. Zwraca mi 6k - 30k obiektów js, które są używane wielokrotnie w różnych widokach aplikacji (sortowanie, filtrowanie itp.). Chciałbym uniknąć za każdym razem odpytywania API o tak dużą listę, więc postanowiłem jakoś buforować te dane. Myślałem o różnych rozwiązaniach: * zapisanie go do localstorage, * użycie jakiejś biblioteki buforującej (np. locachejs), * przechowywanie w js var. Nie jestem ekspertem, więc chciałbym usłyszeć Twoje sugestie dotyczące każdego (lub jednego z tych) rozwiązań, jego zalet i wad. Każda pomoc będzie bardzo mile widziana.


title: źródło zdarzeń wywołuje metody w interfejsie

text: Używam Javy. W jaki sposób źródło zdarzenia, takie jak (przycisk w GUI), wie, którą metodę należy wywołać w interfejsie? Na przykład, słucham zdarzeń myszy i zaimplementowałem w mojej klasie interfejs nasłuchiwania myszy, skąd źródło zdarzenia ma wiedzieć, czy powinno wywołać `mousePressed()`, `mouseReleased()` czy jakąś inną abstrakcyjną metodę w interfejs? Zdaję sobie sprawę, że użycie `addMouseListener(this)` zapewnia sposób na wywołanie przez źródło zdarzenia metody interfejsu.


title: Nauka Pythona jest dobra?

text: > **Możliwy duplikat:** > Czy warto uczyć się Pythona? Czy to przydatne narzędzie? Ostatnio widziałem kilka filmów z MIT na tematy związane z programowaniem komputerowym. Uważam, że naprawdę warto go obejrzeć. Zwłaszcza pojęcia algorytmów i podstaw. Programy zostały napisane i wyjaśnione w Pythonie. Nigdy wcześniej nie zaglądałem do tego języka, kiedy uczyłem się i robiłem rzeczy z programowaniem C/C++. Ale przyciągnęła mnie czystość i lepsza czytelność składni. Oczywiście jako programista C++ od dawna jest to dla mnie najbardziej czytelny język. Słyszałem też, że biblioteka Pythona zawiera solidne algorytmy i implementacje struktur danych. Czy możesz podzielić się swoim doświadczeniem w tym języku?


title: Dlaczego tak wiele bibliotek nie ma / ma słabą dokumentację?

text: W podobnym duchu jak Dlaczego wiele projektów open source nie ma dokumentacji na temat ich projektu lub architektury? pytanie, jestem ciekaw: Dlaczego tak wielu bibliotekom tak brakuje w dokumentacji użytkownika końcowego? Mój pogląd jest następujący: 1. Większość zgadza się, że czytanie kodu źródłowego jest trudniejsze niż pisanie kodu źródłowego. 2. Bez dokumentacji należy przeczytać kod źródłowy biblioteki, aby z niej skorzystać. 3. Dlatego korzystanie z nieudokumentowanej biblioteki to więcej pracy niż odtworzenie biblioteki od podstaw. 4. W rezultacie, jeśli chcesz, aby ludzie korzystali z twojej biblioteki, cholernie lepiej upewnij się, że jest ona udokumentowana. Wiem, że wielu programistów nie lubi pisać dokumentów i zgadzam się, że może to być żmudna praca. Ale to podstawowa praca. Powiedziałbym nawet, że ważniejsze jest, aby biblioteka miała dobrą dokumentację niż najlepszy interfejs programisty na świecie. (Ludzie używają gównianych bibliotek cały czas; niewielu używa nieudokumentowanych bibliotek) Och, zauważ, że kiedy mówię o dokumentacji, mam na myśli prawdziwą dokumentację. Nie Sandcastle/Javadoc/Doxygen.


title: Konsekwencje niekorzystania z licencji open source?

text: Powiedzmy, że nie używasz licencji do swojego projektu open source. I nie umieszczasz w kodzie niczego na temat licencji.. czy to jest w porządku?


title: Egzekwowanie zwrotu wartości nienull

text: Wdrażamy niektóre usługi sieciowe i musimy upewnić się, że niektóre z naszych metod **zawsze** zwracają wartości inne niż null. Zbadaliśmy dwa sposoby na zrobienie tego: * Używanie kontraktów kodu i zwracanie wartości domyślnej przy użyciu ograniczeń `Ensures` na zwracanej wartości. * Korzystanie z podejścia programistycznego zorientowanego aspektowo przy użyciu PostSharp. Oba podejścia działają, ale zastanawiam się, czy istnieją inne podejścia, które powinniśmy rozważyć. Jak wymusisz wartości zwracane inne niż null? * * * Wygląda na to, że podobne pytanie dotyczyło SO, a Jon Skeet zaleca podejście Code Contract.


title: Czy w rozmowie kwalifikacyjnej należy poruszyć projekty komercyjne?

text: Nie jestem pewien, czy to dobry pomysł, czy nie wspominając już o komercyjnych projektach oprogramowania. W tej chwili mam jedną witrynę z oprogramowaniem komputerowym, która sprzedaje oprogramowanie komputerowe (jeszcze za mało, abym mogła się utrzymać) i nie jestem pewien, jaki jest dobry sposób, aby wykorzystać ją jako sposób na przekazanie moich umiejętności i doświadczenia? Mówiąc o doświadczeniu, nigdy nie pracowałem jako programista. Pracowałem sam nad tworzeniem aplikacji z zamiarem ich sprzedaży i z jednej strony czuję, że jeśli o tym wspomnę, mógłbym natknąć się na kogoś, kto nie myśli poważnie o zdobyciu pracy programisty, co nie jest prawdą, mój umysł jest ustawiony o zdobyciu pracy programisty. Czy powinienem powiedzieć, że zrezygnowałem z projektu, aby szukać pracy? Czy to wydaje się słabe? Po prostu nie wiem, jak powiązać moje zaangażowanie w samodzielnie uruchamiane projekty oprogramowania w sytuacji rozmowy kwalifikacyjnej w odpowiedni sposób.


title: Implementacja algorytmu uczenia maszynowego do wykrywania regionu adresu

text: Mam 10 000 adresów z miasta, z których wszystkie mają w bazie danych pole regionu. Po wprowadzeniu nowego adresu chcę, aby moje oprogramowanie automatycznie wykrywało region adresu . Myślę, że powinien być zaimplementowany za pomocą jakiegoś algorytmu uczenia maszynowego. W jaki sposób mogę to zrobić? Z każdym nowo wprowadzonym adresem urządzenie powinno nauczyć się wykrywać region nowego adresu. Czy jest jakaś biblioteka algorytmów uczenia maszynowego (np. aforge.net dla sieci neuronowych)?


title: Czy będzie jakaś oficjalna biblioteka LINQ oparta na lambda dla C++?

text: Biorąc pod uwagę, że C++('11) ma teraz lambdy, czy będzie jakaś biblioteka funkcji wyższego rzędu, taka jak LINQ, oficjalnie obsługiwana później? Czy jest jakaś taka biblioteka obecnie używana w dowolnym kodzie na poziomie produkcyjnym? Oczywiście nie oczekuję składni zapytania LINQ opartej na drzewie wyrażeń SQL w C++. Mówię o tej opartej na lambdzie. Tak więc żadna nowa funkcja językowa nie jest potrzebna w C++'11, wystarczy biblioteka.


title: Czy mogę sugerować programiście gotowe skrypty? Jeśli tak, jak mogę to zrobić, nie obrażając go?

text: Czy można sugerować gotowe skrypty z miejsca takiego jak Codecanyon programiście, który buduje startową aplikację internetową? A może jest bardziej prawdopodobne, że obrazi? Nie spodziewam się, że cała aplikacja internetowa może zostać zbudowana z bitów i bobów zakupionych w witrynie, ale nie jestem pewien, czy słuszne jest proszenie kogoś o zrobienie. Nie jestem też programistą.


title: Jak przenieść JMS do frontendu

text: Obecnie posiadam aplikację internetową i chciałbym dodać do niej funkcję przesyłania wiadomości. W tym celu używam JMS (właściwie OpenMQ, implementacja dostarczana z Glassfish 3). Problem polega na tym, że nie wiem, jak przenieść powiadomienie o wiadomości z tła (od słuchacza) na pierwszy plan. Używam JSF jako framework, jeśli ma to znaczenie. Czy mógłbyś mi powiedzieć, jak mam powiadomić użytkownika o otrzymanej wiadomości (np. na czacie). Wszelkie sugestie są mile widziane.


title: Spotkanie w Ada

text: W teście zadano mi pytanie: > jakich elementów obecnych w ogólnej formie spotkania nie ma w > języku Ada? Trochę się zgorszyłem, bo myślałem, że Ada w pełni poparła spotkanie. Teraz wydaje się, że tak nie jest. Czy ktoś może mi powiedzieć, co to za elementy?


title: Jakie są przyczyny dużych różnic w wydajności podczas korzystania z tego samego programu?

text: Nie jestem informatykiem, więc proszę o wyrozumiałość. Ostatnio napisałem program w Pythonie, który musi przeprowadzać kosztowne wyszukiwania przestrzenne, jednocześnie przechowując w pamięci dużo danych. Próbowałem poprawić wydajność, czyli wypróbowałem różne podejścia (patrz na przykład moje pytanie). Po pierwsze, i może nie jest to zaskakujące, zauważyłem duże różnice w wydajności podczas uruchamiania tego samego kodu na dwóch różnych maszynach (do 6 razy szybciej na jednej maszynie). Jednak, ku mojemu zaskoczeniu, uruchomienie dokładnie tego samego kodu na tej samej maszynie w dwa różne dni wykazało duże różnice w wydajności. Aby dać ci ogólne pojęcie, co rozumiem przez świetnie. Komputer 1, dzień 1: 11 minut Komputer 1, dzień 2: 2 minuty Nawiasem mówiąc, w międzyczasie nie było restartu. Tak więc moje pytanie tak naprawdę brzmi: jakie mogą być możliwe przyczyny tej różnicy? Jak mogę upewnić się, że mój system jest gotowy na wysoką wydajność, kiedy zaczynam uruchamiać mój program?


title: Aktualizowanie kodu źródłowego innej firmy

text: Jaki jest najlepszy sposób na aktualizowanie kodu źródłowego innej firmy? Na przykład w mojej aplikacji używam kodu źródłowego innej firmy z otwartego repozytorium GitHub. To, co zrobiłem, to pobranie zip kodu źródłowego, rozpakowanie go i zaimportowanie do mojej aplikacji na iOS, a następnie zacząłem modyfikować ten kod źródłowy do zawartości mojego serca. Więc ten kod źródłowy strony trzeciej działał dla mnie świetnie, ale teraz kilka miesięcy później twórca kodu źródłowego strony trzeciej opublikował aktualizację swojego kodu z `1.0 -> 2.0`. Teraz oczywiście chcę mieć tę aktualizację również w mojej aplikacji na iOS. Jaki byłby najłatwiejszy sposób migracji mojego kodu źródłowego `1.0` innej firmy (wraz ze wszystkimi dodatkami do kodu) do `2.0`?


title: Niezależna od produktu książka dotycząca kolejek wiadomości?

text: Czy istnieją jakieś zalecenia dotyczące książek, które są w dużej mierze niezależne (z przykładami implementacji MQ są w porządku) od dostawcy, ale zawierają szczegółowe informacje na temat architektury, zarządzania, nazewnictwa, niepodzielności, trwałości, wzorców i wdrożeń logicznych w systemach kolejki wiadomości ? Z pewnością istnieje wystarczająca liczba wspólnych koncepcji między MQ Series, MSMQ, SysV IPC (OK, to może być rozciąganie), RabbitMQ itd.


title: Algorytmy tworzenia mozaik obrazów - czy istnieje szybszy sposób?

text: Bawiłem się tworzeniem mozaiki obrazów. Mój skrypt pobiera dużą liczbę obrazów, skaluje je do rozmiaru miniatury, a następnie używa ich jako kafelków, aby przybliżyć obraz docelowy. Podejście jest całkiem przyjemne: ![](http://i.stack.imgur.com/RZKkTm.jpg) Obliczam błąd średniokwadratowy dla każdego kciuka w każdej pozycji płytki. Na początku użyłem po prostu chciwego ustawienia: położyłem kciuk z najmniejszym błędem na płytce, która najlepiej pasuje, a potem następny i tak dalej. Problem z chciwością polega na tym, że w końcu możesz umieszczać najróżniejsze kciuki na najmniej popularnych kafelkach, niezależnie od tego, czy pasują do siebie, czy nie. Przykłady pokazuję tutaj: http://williamedwardscoder.tumblr.com/post/84505278488/making-image-mosaics Więc wtedy robię losowe zamiany, dopóki skrypt nie zostanie przerwany. Wyniki są całkiem OK. Losowa zamiana dwóch kafelków nie zawsze jest poprawą, ale czasami rotacja trzech lub więcej kafelków skutkuje globalną poprawą, tj. `A <-> B` może się nie poprawić, ale `A -> B -> C -> A ``1` może.. Z tego powodu, po wybraniu dwóch losowych płytek i stwierdzeniu, że się nie poprawiają, wybieram kilka płytek, aby ocenić, czy mogą być trzecią płytką w takiej rotacji. Nie badam, czy dowolny zestaw czterech płytek można z zyskiem obracać i tak dalej; to będzie bardzo drogie naprawdę wkrótce. Ale to wymaga czasu... Dużo czasu! Czy istnieje lepsze i szybsze podejście? * * * **_Bounty Update_** Przetestowałem różne implementacje i wiązania metody węgierskiej w Pythonie. Zdecydowanie najszybszy był czysty Python https://github.com/xtof-durr/makeSimple/blob/master/Munkres/kuhnMunkres.py Moje przeczucie jest takie, że jest to w przybliżeniu optymalna odpowiedź; po uruchomieniu na obrazie testowym wszystkie inne biblioteki zgodziły się z wynikiem, ale ten kuhnMunkres.py, chociaż był o rząd wielkości szybszy, tylko bardzo, bardzo, bardzo zbliżył się do wyniku uzgodnionego przez inne implementacje. Szybkość jest bardzo zależna od danych; Mona Lisa przeszła przez kuhnMunkres.py w 13 minut, ale Parakeet Scarlet Chested zajęła 16 minut. Wyniki były bardzo podobne do losowych zamian i rotacji dla Parakeet: ![tu wpisz opis obrazu](http://i.stack.imgur.com/ZW8uh.jpg)![tu wpisz opis obrazu](http:// i.stack.imgur.com/RZKkTm.jpg) (kuhnMunkres.py po lewej, losowe zamiany po prawej; oryginalny obraz do porównania) Jednak dla obrazu Mona Lisy, z którym testowałem, wyniki były zauważalnie lepsze i faktycznie czy jej zdefiniowany „uśmiech” świeci przez: ![tu wpisz opis obrazu](http://i.stack.imgur.com/u4muy.jpg)![tu wpisz opis obrazu](http://i.stack.imgur .com/2fI3G.jpg) (kuhnMunkres.py po lewej, losowe zamiany po prawej)


title: Czy są elementy wspólne dla prawie każdego SRS?

text: SRS jest podstawą każdej poważnej pracy kontraktowej i może być niewiarygodnie nudny dla tych, którzy nigdy nie mieli nieszczęścia, by przeczytać go za jednym zamachem. Piszę serię klas dokumentów z LaTeX (język znaczników dla dokumentów o jakości zawodowej; zobacz te pytania i tę odpowiedź na TeX.SE) i robiąc to, muszę zdefiniować podstawowe zasady i wspólne struktury logiczne widoczne poprzez wszelkie uzasadnione SRS. Niestety nigdy nie miałem okazji uczestniczyć w tworzeniu SRS od podstaw, z wyjątkiem uproszczonego, nieco wymyślonego przykładu na studiach, więc nie sądzę, abym znał zakres tego, co wchodzi w skład specyfikacji wymagań oprogramowania (SRS). Wiem, że składa się przynajmniej z dziennika zmian i samych wymagań, ale poza tym... ? Jakie są niezbędne części dokumentu, które powinien posiadać każdy SRS? * * * Wciąż jestem tu całkiem nowy, ale jestem otwarty na tworzenie tego CW, jeśli Programrs.SE _wszystko dotyczy_ tego rodzaju rzeczy.


title: Wymagania licencyjne dotyczące oprogramowania Open Source z podwójną licencją

text: Jak wybrać jedną licencję na oprogramowanie, a nie drugą, gdy dystrybutor daje konsumentowi więcej niż jeden wybór? Na przykład chciałbym użyć biblioteki DataTables JavaScript w mojej aplikacji internetowej. Według ich strony internetowej „DataTables jest licencjonowane podwójnie na podstawie licencji GPL v2 lub licencji BSD (3-punktowej)”. Co więcej, kod źródłowy biblioteki JavaScript zawiera tekst **wywołujący obie licencje:** /** * @summary DataTables * @description Strony, przeszukiwanie i sortowanie tabel HTML * @wersja 1.9.4 * @file jquery. dataTables.js * @autor Allan Jardine (www.sprymedia.co.uk) * @kontakt www.sprymedia.co.uk/contact * * @copyright Copyright 2008-2012 Allan Jardine, wszelkie prawa zastrzeżone. * * Ten plik źródłowy jest wolnym oprogramowaniem, na licencji GPL v2 lub * licencji BSD, dostępny pod adresem: * http://datatables.net/license_gpl2 * http://datatables.net/license_bsd * * Ten plik źródłowy jest rozpowszechniany z nadzieją, że będzie przydatny, ale * BEZ ŻADNEJ GWARANCJI; nawet bez dorozumianej gwarancji PRZYDATNOŚCI HANDLOWEJ * lub PRZYDATNOŚCI DO OKREŚLONEGO CELU. Szczegóły znajdziesz w plikach licencyjnych. * * Aby uzyskać szczegółowe informacje, odwiedź: http://www.datatables.net */ Wreszcie, strony internetowe z tekstem licencji (np. strona licencji DataTables BSD) zawierają następujące oświadczenie: „DataTables są udostępniane zarówno na licencji GPL v2 i licencję w stylu BSD (3-punktową). **Możesz wybrać, której chcesz użyć** kodu DataTables w ramach." Moje konkretne pytanie brzmi: „jak wybrać, którego chcesz użyć”. W moim przypadku chcę używać tylko licencji BSD i chcę wyraźnie powiedzieć, że w żaden sposób nie zgadzam się na licencję GPL v2. Jak to zrobić **i czy wytrzyma wyzwanie prawne?**


title: Wzorzec projektowy do tworzenia złożonych widoków w nutach

text: Mam kilka `Note`-Modele z właściwościami takimi jak `pitch` i `duration`. W notacji muzycznej nuty te muszą być teraz umieszczone w określonym takcie w określonej linii na określonej stronie i tak dalej. O wiele więcej czynników wpływa na położenie tych nut, takich jak nuty umieszczone przed nimi na tym samym pasku. Ponadto właściwości stylu wpływają na wiele różnych elementów widoku. Pozycjonowanie nut zależy od "wysokości linii" linii muzycznych, czy pasek jest wyrównany do szerokości strony czy nie, i tak dalej. **Szukam wzoru, który pomoże mi w uporządkowany sposób ustawić wszystkie te widoki względem siebie.** Czy ktoś może mi pomóc? Używam SVG z JavaScriptem w moim obecnym projekcie, jeśli jest to ważne. Dziękuję bardzo za pomoc! :)


title: Pliki wykonywalne i Python

text: Niedawno zacząłem uczyć się mojego pierwszego języka, Pythona, i zainteresowałem się tym, jak różni się on od niezliczonych innych języków programowania. Większość z nich udało mi się znaleźć po pewnym czasie wyszukiwania: jest język interpretowany, kompilowany i asemblerowy. Następnie istnieje numeryczny kod maszynowy (który, jak rozumiem, jest po prostu binarny?), który jest odczytywany bezpośrednio przez sprzęt. Więc Python jest językiem interpretowanym, ponieważ nie jest jawnie kompilowany do kodu maszynowego (chociaż z tego, co rozumiem, jest to fałszywe rozróżnienie, ponieważ większość kodu jest zarówno kompilowana, jak i interpretowana, choćby tylko za kulisami). Nadal mam jedno pytanie, na które nie mogłem znaleźć odpowiedzi. Zakładam, że kod Pythona wymaga odczytania platformy Python, ponieważ zawiera interpreter. Ale jak zdobyć te „samodzielne” programy .exe, które można uruchomić na większości komputerów? Czy te pliki używają tylko platformy, którą domyślnie ma każdy komputer, czy są to pliki, które są już całkowicie skompilowane do kodu maszynowego? (Jak z C++?) Głównym powodem, dla którego się zastanawiam, jest to, że chciałem wysłać komuś moje proste programy w Pythonie bez konieczności instalowania platformy. Przeszukałem internet i znalazłem kilka 'kompilatorów?' to zrobi to, ale wydaje się, że nie działają zbyt dobrze i są bardzo trudne w obsłudze.


title: Czy wszystkie nowe funkcje muszą przejść betatest?

text: Oczywiście drobne poprawki użyteczności i poprawki błędów trafiają bezpośrednio do stabilnego produktu. A co z małymi nowymi funkcjami? Czy możesz sobie pozwolić na wydanie ich po testach wewnętrznych, czy też muszą najpierw przejść testy beta przez klientów? Sytuacja: To młody projekt komercyjny, wyprodukowany przez jednoosobową firmę. Posiada istniejącą bazę użytkowników i jest w swojej drugiej głównej wersji. Poprzednie betatesty przyniosły pewne wyniki, jednak większość opinii pochodziła ze stabilnego produktu, a nie z wersji beta.


title: Jakiej licencji mogę użyć w moim projekcie AWS typu open source

text: Tworzę projekt w codeplex, który korzysta z usług Amazon Web Services i zestawu AWS SDK dla platformy .NET Z jakich licencji mogę korzystać? SDK jest wydany na licencji Apache 2.0, więc zakładam, że mój projekt może lub powinien używać tego samego. Jeśli dodam kolejną bibliotekę open source wydaną na innej licencji, czy muszę znaleźć licencję, która jest „zgodna” z obydwoma licencjami? taki, który ma takie same wymagania dla utworów pochodnych? * * * Wymagam licencji, która pozwala mi na publikację pracy pochodnej z AWS .NET SDK. Mogę używać dowolnej licencji obsługiwanej przez codeplex, która obejmuje: * Apache 2.0 * GNU GPLv2 * MIT * Mozilla Public License 2.0 * Microsoft Public License


title: Tworzenie relacji encji w REST: Czy mogę utworzyć rodzica, wysyłając do identyfikatora podrzędnego?

text: Obecnie projektujemy REST API, aby uzyskać dostęp do klasycznych danych klientów. Jednym z elementów API są zasoby użytkownika. Aktywa są dodawane w ramach danej usługi. Interfejs API zaplecza doda zasób tylko do użytkownika w ramach danej usługi. Tak więc nie ma relacji użytkownik-zasób, ale relacja użytkownik-[usługa]-zasób. Nasze identyfikatory URI będą wyglądać tak: /users/{id}/assets/{id}/services/{id} Użycie API będzie znało identyfikator zasobu i identyfikator usługi, aby utworzyć nowy wpis. To, z czym walczymy, to tworzenie tej relacji. Prostym sposobem byłoby opublikowanie całej relacji do `/users/{id}/assets/` POST /users/{id}/assets {asset:${id}, service:{id}, attribute1:"{var }", atrybut2:"{zmienna}"}, ale w rzeczywistości nie tworzymy zasobu, jak może wskazywać identyfikator URI, ale relację zasób-usługa. Jako alternatywę rozważamy wykonanie POST'a do URI adresującego relację, w następujący sposób: POST /users/{id}/assets/{id}/service/{id} {attribute1:"{var}", attribute2: "{var}"} Ale w tym przypadku ścieżka zasobów `/users/{id}/assets/{id}` nie będzie istniała przed POST i zostanie utworzona jako efekt uboczny. Czy POST'ing do ścieżki zasobów, która jeszcze nie istnieje, jest w ogóle dozwolony? Dziękuję za twoje przemyślenia, Gerardzie.


title: Sproc chaining wersetów dyskretnych wywołań z kodu OO

text: Obecnie pracuję nad zmianą w pracy, aby uogólnić funkcję, która została niechlujnie zakodowana do pracy dla konkretnego przypadku użycia. Funkcja wywołuje konkretny spoc, który sprawdza, czy encja istnieje i jeśli jej nie wstawia, to jest główny problem. W dyskusji na temat zmiany ze współpracownikiem oboje zgodziliśmy się, że powinno to być bardziej modułowe (musisz być w stanie uzyskać bez wstawiania), jednak stwierdziłem, że wolę mieć dwa indywidualne sprocs, które są dyskretnie wywoływane w naszym kodzie C#. Twierdził, że lepiej jest, aby jeden sproc dzwonił do drugiego, ale w rzeczywistości nie był w stanie dostarczyć mi przekonującego argumentu, dlaczego ta praktyka byłaby lepsza (poza uogólnionym twierdzeniem, że działa lepiej, na co powiedziałem, że jest wiele niższe wiszące owoce w celu optymalizacji wydajności). Którą praktykę uważasz za lepszą? Czemu?


title: Czy testujesz jednostki POD?

text: czy tworzysz testy jednostkowe dla POD (Plain Old Data Structure)? I dlaczego? Interesują mnie Twoje opinie. Pozdrawiam Tobiasza


title: Jaki jest najszybszy sposób na dostosowanie dotychczasowego kodu do „zasady bliskości”?

text: Na stronie 242 Code Complete 2 Steve McConnell zachwala **Zasada bliskości**. Mówiąc prościej, pan McConnell radzi programistom, aby **utrzymywali powiązane działania razem**. W moim przypadku nacisk kładziony jest na: * Ważne jest, aby zainicjować i ustawić zmienne (i obiekty) blisko miejsca, w którym są używane. Zwykle łatwo jest przestrzegać „zasady bliskości”, gdy pracujesz w obrębie pojedynczego bloku kodu lub treści metody; ale co, jeśli pracujesz ze starszym kodem, a obiekt na szczycie stosu jest ustawiony lub zmutowany głęboko w stosie? Aby skomplikować sprawę, co się stanie, jeśli ten obiekt zostanie ustawiony, zmutowany lub _wielokrotnie_ przywoływany na stosie? Oto moje pytanie: > Jaki jest najszybszy sposób dostosowania starszego kodu do „zasady > bliskości”? Nawiasem mówiąc, pracuję z Visual Studio 2010 i Resharper 5. Czy są jakieś sztuczki IDE, które mogą mi pomóc?


title: Projekt Javascript do analizy i nauki

text: Zacząłem uczyć się i używać Javascript od około sześciu miesięcy. Najpierw zacząłem podążając za innym samouczkiem w Internecie. Testowanie ich, bawienie się nimi i wypróbowywanie różnych odmian. Potem wziąłem kilka średniozaawansowanych książek o JavaScript i nauczyłem się od nich cennych rzeczy. A teraz interesuje mnie: * Jeśli ktoś może polecić projekt Javascript, skąd mogę poznać budowę poważnej aplikacji Javascript oraz projekt, który da mi wyobrażenie o tym, jak należy napisać aplikację Javascript. * Przykład: zastosowanie prototypowania w świecie rzeczywistym, funkcje anonimowe (lambda), ogólna struktura programu, jak pisać aplikacje OO, jakie jest właściwe zadanie, aby użyć domknięcia * itp. Dalsze wyjaśnienie: Pracuję nad pracą dyplomową, na temat wizualizacji wykresów. Patrzę więc na projekt, który pomoże mi zrealizować dobre wzorce, abym mógł je zastosować w swoim projekcie, a także zobaczyć realne przykłady wzorców projektowych JavaScript Pozdrawiam, FJ


title: Dlaczego Javascript jest używany w MongoDB i CouchDB zamiast w innych językach, takich jak Java, C++?

text: Zadałem to pytanie na SO, ale zasugerowano, aby spróbować tutaj. A więc oto idzie: Jak dotąd rozumiem JavaScript, że jest to język po stronie klienta, który wychwytuje zdarzenia i sprawia, że strona internetowa jest dynamiczna. Ale czytając porównanie MongoDB i CouchDB zauważyłem, że oba używają Javascript. To sprawia, że zastanawiam się, dlaczego wybrałem JavaScript w stosunku do innych konwencjonalnych języków. Chyba staram się zrozumieć rolę JavaScript i jego przewagi nad innymi językami. Aktualizacja: nie pytam o języki/sterowniki obsługiwane przez obie bazy danych. Porównanie mówi: > Zarówno CouchDB, jak i MongoDB korzystają z Javascript. CouchDB używa Javascript > intensywnie włączając w budowanie widoków. > > MongoDB obsługuje również uruchamianie dowolnych funkcji javascript po stronie serwera i > używa javascript do operacji map/reduce. Mój brak zrozumienia dotyczy tego, dlaczego JavaScript jest w ogóle używany do pracy zaplecza. Dlaczego jest preferowany do budowania widoków w CouchDB lub do korzystania z operacji map/reduce? Dlaczego nie użyto C/C++ lub Java? Jakie są zalety używania JavaScript do takiej pracy zaplecza?


title: Dlaczego pozornie nieproporcjonalna liczba programistów jest po prostu, no cóż, niemiła?

text: Może to tylko moje osobiste doświadczenie, ale kojarzę się z różnymi grupami i typami ludzi i wydaje mi się, że dziwnie duży procent programistów, których spotkałem, jest „niemiły” lub dla próby lepszej definicji: * Protekcjonalny * Snarky * Negatywne w sposobie, w jaki mówią o ludziach Jeśli zauważyłeś to samo, jakieś teorie, dlaczego? Jakieś sugestie, jak grzecznie lub nie tak grzecznie poinformować jednego z tych programistów, jak się zachowuje i zasugerować, aby to poprawili, jeśli chcą być postrzegani jako profesjonaliści, z którymi chciałby pracować? A może po prostu natknąłem się na złą próbkę i w każdej grupie ludzi, których można wymienić, są złe nasiona.


title: Nauka nowego języka z wykorzystaniem niedziałających testów jednostkowych

text: Niedawno słuchałem dot net rocks, w których prawie mimochodem wspomnieli o naprawdę intrygującym narzędziu do nauki nowych języków - myślę, że mówili konkretnie o F#. Jest to rozwiązanie, które otwierasz i jest kilka nieudanych testów jednostkowych. Naprawienie ich poprowadzi Cię przez kolejne etapy nauki języka. Chcę to sprawdzić, ale jechałem samochodem i nie mam pojęcia, jak nazywa się ten projekt, ani który to odcinek Dot Net Rocks. Google niewiele pomogło. Dowolny pomysł?


title: Jak język programowania o typach zależnych radzi sobie ze zmiennością?

text: Badałem wykonalność "normalnego" języka programowania z typami zależnymi. Pomyśl na przykład w Javie i dodaj do tego typy zależne. Jedną z trudności, którą znalazłem, jest to, że typ zmiennej może się zmienić po zmutowaniu, jak w następującym fragmencie pseudokodu: let xs = [1, 2, 3]; // Typ xs to List<int, 3> let ys = [4, 5]; // Typ ys to List<int, 2> xs.concat(ys); // Łączymy listy, więc typem xs jest teraz List<int, 5> Staje się to problemem, gdy mutujemy zmienną wewnątrz instrukcji `if`: let xs = [1, 2, 3]; // Typ xs to List<int, 3> if random_bool { xs.push(4); // Typ xs to List<int, 4> } // Typ xs jest nieznany, ponieważ random_bool jest ustawiane w czasie wykonywania Czy są jakieś badania na ten temat? Czy można rozwiązać ten problem bez rezygnacji z zmienności?


title: Przecięcie elementów geometrycznych

text: Próbowałem zaprojektować małe geometryczne API C++ do celów edukacyjnych, ale natknąłem się na problem, gdy miałem do czynienia z przecięciami elementów geometrycznych. Na przykład przecięcie linii i sfery może mieć trzy różne typy: kilka punktów, punkt lub w ogóle nic. Znalazłem kilka sposobów radzenia sobie z tym problemem, ale nie wiem, który z nich wydaje się najlepszy: ## CGAL Typ zwracany `Object` Najpierw próbowałem zobaczyć, co zostało zrobione w innych bibliotekach geometrycznych. Najbardziej kompletnym, jaki udało mi się znaleźć, był CGAL. W CGAL funkcje przecięcia zwracają `Object`, który jest ogólnym typem, który może przechowywać wszystko (np. `boost::any`). Następnie próbujesz przypisać `Object` do wartości innego typu, oto przykład: void foo(CGAL::Segment_2<Jądro> seg, CGAL::Line_2<Jądro> linia) { CGAL::Object wynik; CGAL::Point_2<Jądro> ipoint; CGAL::Segment_2<Jądro> iseg; wynik = CGAL::przecięcie(seg, linia); if (CGAL::assign(ipoint, result)) { // obsłuż przypadek przecięcia punktów. } else if (CGAL::assign(iseg, wynik)) { // obsłuż przypadek przecięcia segmentów. } else { // obsłużenie przypadku braku przecięcia. } } Przy okazji, funkcja `assign` używa `dynamic_cast` do sprawdzenia, czy dwie zmienne można przypisać (wszyscy kochają RTTI). ## Union zwracany typ Unia może być również używana jako typ zwracany, ale oznacza to użycie `id` dla każdego typu geometrycznego i posiadanie pewnego rodzaju wariantu, aby pokryć wszystkie problemy. struct Wariant { int id; zjednoczenie { Punkt punkt; std::para<Punkt, Punkt> para; }; }; int main() { Punkt punkt; std::para<Punkt, Punkt> para; Wariant v = przecięcie(Linia{}, Kula{}); if (v.id == ID_POINT) { punkt = v.punkt; // Zrób coś z punktem } else if (v.id == ID_VARIANT) { pair = v.pair; // Zrób coś z parą } else { // Brak przecięcia } } ## Unikanie problemu „brak przecięcia” W celu oddzielenia przypadku „brak przecięcia” od głównego problemu, niektóre biblioteki wymagały od użytkownika sprawdzenia, czy istnieje było skrzyżowaniem przed próbą znalezienia zwracanego typu skrzyżowania. Wyglądało to tak: Linia linii; Kula kula; if (przecina(linia, kula)) { auto ret = intersection(linia, kula); // Zrób coś z ret } Innym sposobem na oddzielenie przypadku "brak przecięcia" od reszty problemu jest użycie typu `opcjonalny`: std::opcjonalny<...> ret = intersection(Line{}, Kula{}); if (ret) { // Zrób coś z ret } ## Używanie wyjątków do kontrolowania typu "return" _Już widzę, jak niektórzy z was płaczą._ Jeszcze innym sposobem poradzenia sobie z tym problemem związanym z różnymi typami zwrotów byłoby `rzucenie ` wyniki zamiast ich zwracania. Powrót "bez przecięcia" może nadal używać jednej z technik z poprzedniego akapitu: try { intersection(Line{}, Sphere{}); } catch (const Point& point) { // Zrób coś z punktem } catch (const std::pair<Point, Point>& pair) { // Zrób coś z parą } // Nadal można złapać błędy (lub "brak przecięcia" typ specjalny?) ## Posiadanie typu zwracanego "main", odrzucanie pozostałych Innym sposobem byłoby posiadanie typu zwracanego "main" dla skrzyżowania, powiedzmy `std::pair<Point, Point>` i rozważenie inne typy zwracane jako „wyjątkowe”; daje to większe znaczenie używaniu wyjątków, chociaż nadal nie jest to gestykulacja błędów. Z drugiej strony może wydawać się dziwne traktowanie typu "głównego" inaczej niż pozostałych... try { auto pair = intersection(Line{}, Sphere{}); // Zrób coś z pair } catch (const Point& point) { // Szanse na spotkanie kuli i linii w // pojedynczym punkcie są tak małe, że // przypadek można już uznać za wyjątkowy. // ... } Celowo pominąłem gestykulację błędów i przypadek "brak przecięcia" z tego ostatniego przykładu, ponieważ wiele już opisanych technik może być użytych do obsługi tego i nie chcę, aby liczba przykładów była wykładnicza. Oto jedno: try { // res jest opcjonalna<para<Punkt, Punkt>> if (auto res = intersection(Linia{}, Kula{})) { std::cout << "przecięcie: dwa punkty" < < '\n' << std::get<0>(*res).x() << " " << std::get<0>(*res).y() << '\n' < < std::get<1>(*res).x() << " " << std::get<1>(*res).y() << '\n'; } else { std::cout << "brak przecięcia" << '\n'; } } catch (const Point& point) { // Wyjątkowy przypadek std::cout << "przecięcie: jeden punkt" << '\n' << point.x() << " " << point.y() < < '\n'; } Ponieważ przypadki, w których zgłaszany jest wynik, są wyjątkowe, nie należy dodawać do programu żadnych narzutów w czasie wykonywania, jeśli system bazowy używa wyjątków o zerowym koszcie zamiast starego systemu wyjątków SJLJ. ## Właściwe pytanie Cóż, to było dość długie wprowadzenie, więc oto pytanie: czy w tych przykładach istnieje idiomatyczne rozwiązanie problemu? A jeśli nie, to czy istnieją przynajmniej niektóre przykłady, które można by zakazać bez namysłu (no cóż, możesz zastanowić się jeszcze nad przykładami wyjątków...)? **Uwaga:** coś wydawało mi się oczywiste, ale najwyraźniej nie jest: byt zwrócony przez przecięcie dwóch bytów geometrycznych nie jest ograniczony do niczego, punktu lub zbioru punktów. Przecięcie może w zasadzie zwrócić dowolną jednostkę geometryczną. Dlatego używanie kontenera do przechowywania wartości nie wydaje się dobrym pomysłem.


title: Który schemat bazy danych powinienem wybrać?

text: Planuję schemat bazy danych i waham się między dwoma projektami, który wybrać? Na potrzeby pytania załóżmy, że chcemy przygotować schemat bazy danych dla aplikacji zarządzającej informacjami o studentach na uczelni. Aplikacja składa się z kilku modułów: * **Rejestr**, zajmujący się informacjami ogólnymi, takimi jak data urodzenia, numer ubezpieczenia zdrowotnego i tym podobne. * **Biblioteka** zajmująca się właściwościami przydatnymi w zarządzaniu biblioteką, takimi jak liczba wycofanych książek, quitus czy kary. * **Egzaminy** dotyczące zdanych egzaminów i ocen. Moduły Biblioteka i Egzaminy widzą moduły Rejestr, ale poza tym są niezależne. W scenariuszu aplikacji jest bardzo duża liczba uczniów, dane są zapisywane raz, rzadko aktualizowane i często czytane. Ponadto uczelnia co roku rozbudowuje swój system, dodając moduły: Sport, Campus, cokolwiek. Moduły pozostają dość niezależne. Waham się między dwoma układami baz danych. ### Pierwszy układ W pierwszym układzie, tabela `MODULE` jest powiązana z każdym modułem, a `UID` jest używany jako klucz podstawowy. Ponieważ każdy moduł potrzebuje właściwości pod kontrolą Rejestru, przygotowujemy również widoki złączenia `REGISTRY` i `MODULE` na `UID`, aby baza danych wiedziała, że będziemy intensywnie korzystać z tego złączenia. Gdy system się rozwija, dodajemy nową tabelę i nowy widok, aby odzwierciedlić to rozszerzenie. ### Drugi układ W drugim układzie tworzymy tabelę z dużą liczbą kolumn zawierających właściwości różnych modułów. Gdy system się rozwija, dodajemy kolumny do tabel. ### Porównanie Jak wypada porównanie tych dwóch podejść? Jeśli, powiedzmy, jakaś aktualizacja oprogramowania zawiera poważny błąd, wymagający obniżenia wersji oprogramowania i późniejszego wykonania drugiej aktualizacji, pierwszy układ wydaje się bardziej niezawodny. Jeśli chodzi o wydajność, drugi układ oszczędza wiele operacji łączenia, ale w pierwszym układzie zdefiniowaliśmy widoki dla operacji łączenia, ogłaszając w ten sposób, które złożone operacje mogą się zdarzyć, aby system bazy danych mógł to zaplanować. Daleko mi do eksperta od baz danych, ale czy mam rację, jeśli uważam, że jeśli oddam wszystkie istotne informacje w ręce systemu bazodanowego, będzie on w stanie prawidłowo przeprowadzić operację? Gdybym nie widział go w zastosowaniach przemysłowych, nigdy nie dałbym 2 pensów na drugi układ. Ale skoro to zrobiłem, chciałbym uzyskać inne porady.


Dlaczego generyki w Scali mają wymazane typy i nie są reifikowalne? Czy wynika to z braku wsparcia ze strony JVM, czy z kompatybilności z bibliotekami Java? Jakie są ogólne korzyści z posiadania leków generycznych jako reifikowalnych?


title: Ogólne i wymazywanie typów

text: Generyki w Javie są implementowane za pomocą wymazywania typu. JLS twierdzi, że inspiracją była kompatybilność wsteczna. Gdzie, jak z drugiej strony, generyki C# są reifikowalne. Teoretycznie, jakie są zalety i wady posiadania Generics jako „wymazywania” lub „reifikowalności”? Czy brakuje czegoś w Javie?


title: Czy dobrą praktyką jest deklarowanie funkcji inline?

text: Piszę metodę i w zależności od pola konfiguracyjnego muszę zmienić skąd czerpię moje dane. Co to powoduje, że muszę napisać kod, który wygląda tak: List<string> result = new List<string>(); if (configField) { wynik.Dodaj(poleA); } else { wynik.Dodaj(...BusinessLogic...); } Będę musiał napisać tę instrukcję wiele razy, więc oczywiście chcę zamiast tego zmienić ją w metodę, więc mogę po prostu napisać `result.Add(newMethod(configField, fieldA, dataForBusinessLogicToParse))`. Ta metoda byłaby bezużyteczna dla każdego, kto nie pisze konkretnej metody, którą piszę, więc czy ma sens deklarowanie tej metody jako oddzielnej metody `prywatnej`, czy też mogę po prostu zadeklarować ją inline jako `delegat` w następujący sposób: Func<Enum , int, int> newMethod = (configField, fieldA, dataForBusinessLogicToParse) => ...businessLogic... Martwię się, że deklaracja inline może sprawić, że kod będzie trudniejszy do zrozumienia, ale myślę, że sprawi to, że klasa będzie czystsza.


title: Implementacja wzorca repozytorium, która nie wie nic o nazwach tabel i kolumn bazy danych

text: Widziałem w Internecie i Github implementacje dla repozytorium wzorców projektowych, które znają nazwy tabel i kolumn bazy danych. Pomyślałem, że jeśli chcę pracować z bazą danych jako wtyczką, że mogę odłączyć i podłączyć inną, przestrzegając Open/Closed dla reszty mojego kodu, moje repozytorium nie powinno wiedzieć o nazwach kolumn bazy danych, której używam . Jak więc zaimplementować ten wzorzec w taki sposób, aby mógł przekształcić wynik z bazy danych w Entity mojej domeny, nie znając nazw tabel i kolumn bazy danych? Ponieważ moim głównym językiem jest PHP, zauważyłem, że w Doctrine\ORM można łatwo przekazywać różne pliki konfiguracyjne yamls lub xmls, mapując nazwy kolumn na nazwy właściwości w Entity, ale... Nie mogę być zakładnikiem implementacji biblioteki, jeśli chcę zaimplementować surowe PDO lub jakąkolwiek inną bibliotekę dla moich repozytoriów, która nie czyni tego nawodnienia od razu po wyjęciu z pudełka, moja implementacja powinna wystarczyć, więc jak? **Aktualizacja** ![Ilustracja](http://s30.postimg.org/u2vp7n0xt/Desenho_sem_t_tulo_1.jpg) **Aktualizacja 2** Proszę spojrzeć na: http://leocavalcante.github.io/patterns /2014/07/11/wzorzec-repozytorium-i-baza-schemat.html


title: Widoki : ViewControllers, wiele do jednego czy jeden do jednego?

text: Opracowałem aplikację na Androida, w której zazwyczaj każdy widok (`layout.xml`) wyświetlany na ekranie ma swój odpowiedni fragment (na potrzeby tego pytania mogę nazwać go `ViewController`). Te widoki i fragmenty/ViewControllers są odpowiednio nazwane, aby odzwierciedlić to, co wyświetlają. Dzięki temu programista może łatwo zlokalizować pliki powiązane z tym, co widzi na dowolnym ekranie. Powyższe odnosi się do jednej części mojego pytania. _Proszę zauważyć, że z powyższym jest kilka wyjątków, gdzie bardzo podobne są wyświetlane w dwóch widokach, więc `ViewController` jest używany dla dwóch widoków. (Za pomocą prostego przełącznika (typu), aby określić, jaki plik `layout.xml` należy załadować)_ Z drugiej strony. Obecnie pracuję nad wersją tej samej aplikacji na iOS, której nie tworzyłem. Wygląda na to, że przyjmują podejście jeden-do-wielu (`ViewController`:`View`). Wydaje się, że istnieje jeden `ViewController`, który obsługuje logikę wyświetlania dla wielu różnych typów widoków. W `ViewController` znajduje się zestaw flag logicznych i tablic danych (do wyświetlenia), które są używane do określenia, jaki widok załadować i jak go wyświetlić. Wydaje mi się to bardzo uciążliwe i w połączeniu z brakiem komentarzy/niejednoznacznych nazw zmiennych, bardzo trudno jest wprowadzić zmiany do projektu. Co myślicie o tych dwóch podejściach? Który wolisz? Naprawdę zastanawiam się nad poświęceniem dodatkowego czasu w pracy na refaktoryzację iOS na podejście bardziej zorientowane na 1:1. Moje rozumowanie dla 1:1 nad M:1 jest oparte na modułowości i czytelności. W końcu, czy niektórzy ludzie nie mierzą jakości kodu na podstawie tego, jak łatwo jest innemu programiście przejąć kontrolę lub jak łatwo jest wyciągnąć kawałek kodu i użyć go gdzie indziej?


title: Dlaczego testowanie języka nie jest obsługiwaną funkcją na poziomie składni?

text: Możesz znaleźć niekończącą się listę blogów, artykułów i stron internetowych promujących korzyści płynące z testowania jednostkowego Twojego kodu źródłowego. Jest prawie pewne, że programiści, którzy programowali kompilatory dla Javy, C++, C# i innych typów języków, używali testów jednostkowych do weryfikacji swojej pracy. Dlaczego więc, mimo swojej popularności, w składni tych języków nie ma testowania? Microsoft wprowadził LINQ do C#, więc dlaczego nie mogli również dodać testów? Nie chcę przewidzieć, jakie będą te zmiany językowe, ale wyjaśnić, dlaczego na początku ich nie ma. Jako przykład: Wiemy, że możesz napisać pętlę `for` bez składni instrukcji `for`. Możesz użyć instrukcji `while` lub `if`/`goto`. Ktoś uznał, że wyrażenie „for” jest bardziej efektywne i wprowadził je do języka. Dlaczego testowanie nie nastąpiło po tej samej ewolucji języków programowania?


title: Określanie, które klasy dekoratorów są dostępne przez odbicie

text: Tworzę aplikację pizzerii, w której pracownicy będą mogli tworzyć zamówienia dla klientów (pizzę i dowolną ilość dodatków). To dotyczy projektu szkolnego, ale wymagania nie mają nic wspólnego z tym pytaniem. Na GUI mam kilka pól wyboru, których pracownik użyje, aby określić, jakie dodatki powinna mieć pizza. Chcę użyć do tego wzoru dekoratora. **To właśnie chcę zrobić (ale nie jestem pewien, czy to dobry pomysł):** Chcę umieścić wszystkie moje dekoratory w oddzielnej przestrzeni nazw, a następnie za pomocą odbicia pobrać wszystkie nazwy dekoratorów z tej przestrzeni nazw i użyj ich do zbudowania listy wyboru. Powodem tego jest to, że jeśli później doda się więcej dodatków, myślę, że korzystne byłoby po prostu dodawanie zestawów (dekoratorów toppingowych) bez konieczności ponownej kompilacji/ponownej dystrybucji całej aplikacji. Myśli? (właśnie nauczyłem się refleksji i mam młotek i tylko próbuję wbić wszystko w to, co nawet w oddali wygląda jak gwóźdź)


title: Zdalne ograniczenia hg4j?

text: Oceniam hg4j, aby sprawdzić, czy nadaje się do użytku w moim bieżącym projekcie. Potrzebuję (najlepiej) czystej biblioteki hg Java, która może: 1. Sprawdź działającą kopię repozytorium _remote_ hg na, powiedzmy, http://myhg01.example.com/myapp 2. Utwórz nowe repozytorium na tym samym hg serwer; być może nowe repozytorium o nazwie „fizzbuzz”, które następnie będzie hostowane z http://myhg01.example.com/fizzbuzz 3. Sprawdź kod („push”) do tego nowego repozytorium Moje pytanie: czy hg4j obecnie to robi? Jeśli nie, czy ktoś ma dla mnie jakieś sugestie?


title: Ile indeksów to za dużo indeksów?

text: Mam tabelę z około 37 indeksami. Czy uznano by to za zbyt wiele? Jakie są najlepsze praktyki dotyczące indeksowania? EDIT: To dane magazynowe, aktualizowane codziennie o nowe transakcje. Jest 47 milionów wierszy. 3 indeksy są bardzo potrzebne. Pozostałe 34~ to indeksy klauzul 'where', których celem jest przyspieszenie zapytań.


title: Połączenie warstwy serwisowej

text: Pracuję nad pisaniem warstwy serwisowej dla systemu zamówień w php. To typowy scenariusz, masz zamówienie, które może mieć wiele pozycji. Powiedzmy, że otrzymano prośbę o zapisanie elementu zamówienia ze zdjęciami i komentarzami. Mogę otrzymać żądanie json, takie jak { 'type': 'Bike', 'color': 'Red', 'commentIds': [3193,3194] 'attachmentIds': [123,413] } Moim pomysłem było posiadanie `Service_LineItem_Bike ` klasa, która wie, jak pobrać dane json i zapisać jednostkę dla roweru. Moje pytanie brzmi, że klasa `Service_LineItem` musi teraz pobierać komentarze i załączniki oraz przechowywać relacje. Wygląda na to, że `Service_LineItem` powinien wchodzić w interakcje z `Service_Comment` i `Service_FileUpload`. Czy instancje tych dwóch innych usług powinny być tworzone i przekazywane do konstruktora `Service_LineItem`, czy ustawiane przez metody pobierające i ustawiające? Wstrzykiwanie zależności wydaje się właściwym rozwiązaniem, ponieważ zezwalanie usłudze na dostęp do „pomocnika pobierania usługi” wydaje się niewłaściwe i powinno pozostać na poziomie aplikacji. Używam Doctrine 2 jako ORM i technicznie mogę napisać zapytanie dql wewnątrz `Service_LineItem`, aby pobrać komentarze i przesłane pliki niezbędne do skojarzenia, ale wydaje się, że byłoby to ściślejsze połączenie, zamiast pozostawić to do odpowiedni obiekt usługowy.


title: Jakiej składni należy używać do wykonywania funkcji w terminalu jQuery?

text: Chcę dodać do jQuery Terminal funkcję, która pozwoli na wykonywanie poleceń z serwera. Obecnie ma tylko składnię formatowania, która wygląda następująco: [[<lista stylów jednoliterowych> ; <kolor> ; <tło> ; <klasa>] TEKST ], a jeśli chcesz wyświetlić pogrubiony biały tekst, możesz użyć: `[[b;#fff;]Jakiś tekst]`. Jakiej składni należy używać do wykonywania poleceń, które nie będą kolidować z formatowaniem, ale będą podobne? Może coś takiego jak `[{nazwa}(parametr1, param2, param3)]` lub `[[exec:name(param1, param2, param3)]]` Wszelkie sugestie są mile widziane.


title: Czy z punktu widzenia DDD usługa generująca raporty jest usługą domenową czy usługą infrastrukturalną?

text: Załóżmy, że mamy następującą usługę, której zadaniem jest generowanie raportów Excel: class ExcelReportService{ public String generateReport(String fileFormatFilePath, dataSet zestawu wyników){ ReportFormat reportFormat = new ReportFormat(fileFormatFilePath); ExcelDataFormatterService excelDataFormatterService = new ExcelDataFormatterService(); FormattedData formattedData = excelDataFormatterService.format(dane); ExcelFileService excelFileService = nowy ExcelFileService(); String reportPath= excelFileService.generateReport(raportFormat,formattedData); zwróć ścieżkę raportu; } } To jest pseudokod usługi, którą chcę zaprojektować, gdzie: * `fileFormatFilePath`: ścieżka do pliku konfiguracyjnego, w którym zachowam format mojego pliku Excela (nagłówki, szerokości kolumn, liczba kolumn itp.) * `data`: rzeczywiste rekordy zwrócone z bazy danych. Tych danych nie można użyć bezpośrednio, ponieważ być może będę musiał wykonać dalsze obliczenia na danych przed wstawieniem ich do pliku Excel. * `ReportFormat`: Obiekt wartości do przechowywania formatu raportu, posiada metody takie jak `getHeaders()`, `getColumnWidth()`,...itd. * `ExcelDataFormatterService`: usługa przechowująca logikę, która musi być zastosowana do danych zwróconych z bazy danych przed wstawieniem ich do pliku. * `FormattedData`: Obiekt wartości reprezentuje formatowane dane do wstawienia. `ExcelFileService`: opakowanie znajdujące się na wierzchu biblioteki innej firmy, która generuje plik Excela. Jak teraz ustalić, czy usługa jest usługą infrastrukturalną czy domenową? Mam tutaj następujące 3 usługi: `ExcelReportService`, `ExcelDataFormatterService` i `ExcelFileService`?


title: Programiści front-end a koderzy HTML/CSS plus „programista JavaScript”

text: Właśnie szukałem w wyszukiwarce dobrej definicji front-end developera, a definicje, które znalazłem, były w zasadzie „gościem, który robi HTML/CSS/JavaScript (jQuery)”. Ale myślę, że już tak nie jest. Dzisiaj mamy bardzo złożone interfejsy, powiedzmy jednostronicową aplikację BackboneJS, która wymaga czegoś więcej niż tylko „człowieka, który robi HTML/CSS/JavaScript” i nie ma doświadczenia w informatyce. Twierdzę, że facet, który projektuje aplikację front-endową (Backbone, Angular, itp.) powinien być równie (jeśli nie bardziej) wykwalifikowanym programistą niż facet, który projektuje back-end. Tak więc w moim scenariuszu (aplikacja internetowa z jedną stroną - powiedzmy z Backbone), mam 3 osoby: 1. Programista back-endowy - człowiek odpowiedzialny za wszystkie wywołania API, które wykona aplikacja Backbone 2. Programista "front-endowy" - to gość, który jest odpowiedzialny za pobranie pracy od projektanta (makiety, jeśli wolisz) i przekształcenie jej w responsywny, wieloprzeglądarkowy, wieloplatformowy kod HTML/CSS 3. Programista "JavaScript", który wszystko rozjaśnia, podłącza się HTML/CSS do API i ożywia aplikację. Moje pytanie brzmi: Jaka jest najczęstsza współczesna struktura zespołu deweloperów? Jak zwykle dzieli się pracę między programistami frontend i backend. Oczywiście, jeśli masz tylko programistów z pełnym stosem, którzy potrafią tworzyć JavaScript i mówić równie dobrze PHP, masz mniejszy problem. Ale nadal, kto jest programistą front-end i jak nazywa się „programistą JavaScript”? Przepraszam za mój prosty język, starałem się trzymać jak najdalej od terminologii.


title: Licencja na oprogramowanie dla projektu wykorzystującego .NET i SQL Server Express

text: Rozważam udostępnienie mojej aplikacji jako open source na github. Nie zamierzam go sprzedawać (ani w formie binarnej, ani w formie kodu źródłowego). Prawdopodobnie nie jest to nawet przydatne dla wielu ludzi, z wyjątkiem być może do celów edukacyjnych. Aplikacja została stworzona w .NET 4.5 (WPF). Nie korzysta z żadnych zewnętrznych bibliotek. Tylko czyste biblioteki .NET dostarczone przez firmę Microsoft. Jest to jednak zależne od Microsoft Sql Server Express 2008. Chciałbym licencjonować aplikację na licencji GPLv3, ale nie wiem czy to zadziała ze względu na wymagania SQL Server. Jeśli nie, co byś polecił? Przepraszamy, ale angielski nie jest moim pierwszym językiem i dlatego mam trudności ze zrozumieniem wszystkich prawniczych spraw. Dziękuję za Twój czas.


title: zestaw statyczny i niestatyczna metoda pobierania

text: Mam następujący interfejs. interfejs publiczny ValueInterface { long getValue(); } I klasa: public class ValueCreator implementuje ValueInterface { private static long value = 0; public void setValue(długa wartośćWDolarze) { wartość=wartośćWDolarze; } @Override public long getValue() { zwraca wartość; } } Statyczny analizator kodu findbugs ostrzegł mnie, abym nie ustawiał pola statycznego w metodzie niestatycznej. Jeśli ustawię metodę set jako statyczną, nie mogę ustawić metody pobierającej jako statycznej, ponieważ jest to metoda z przesłoniętym interfejsem. Czy to jest w porządku, aby mieć statyczny setter i niestatyczny getter, czy też może być lepsze podejście?


title: Jaki jest standard modelowania nowoczesnych aplikacji przed rozwojem?

text: Zabieram się za moją pierwszą aplikację na poziomie przedsiębiorstwa ~~ i chcę, aby mój zespół zamodelował całą aplikację ASP.NET MVC C#, zanim nawet wystukamy jeden wiersz kodu. ~~ AKTUALIZACJA: To nie miało być filozoficzne dyskusja na temat tego, kiedy dokumentować/modelować aplikację. Proszę podać tylko odpowiedzi dotyczące „jak” dokumentować/modelować. Prawda jest taka, że zawsze skąpiłem w tym dziale i nigdy wcześniej nie modelowałem aplikacji. Jaki jest standardowy sposób na zrobienie tego? Jakiego typu diagramy należy stosować i jak wyglądałaby dokumentacja? Mile widziane linki do przykładowych diagramów i dokumentacji. Podczas wyszukiwania mogę znaleźć wiele rzeczy w sieci, ale chciałem sprawdzić, czy istnieje współczesny konsensus co do tego, jak to zrobić. Z góry dziękuję! ### Oświadczenie końcowe Nie miałem pojęcia, że to taki lepki temat. Dziękuję wszystkim, którzy mogli odłożyć na bok oczywiste kontrowersje i udzielić użytecznych odpowiedzi. To była co najmniej ciekawa dyskusja :) Kolejnym przydatnym linkiem, który odkryłem, jest to: Czy używasz UML w praktykach programistycznych Agile?


title: Co się dzieje z PHP 6?

text: Jestem podekscytowany zmianami w PHP 6 przedstawionymi w PHP 5.3+. Jednak zastanawiam się, dlaczego wydanie PHP 6 trwa tak długo? Książki na ten temat publikowane są od 2008 roku, a zapowiedzi na ten temat od 2007 roku, ale nie słyszę jeszcze o wersji alfa lub beta. Dlaczego wydanie go zajmuje tak długo? A może tak jest ze wszystkimi językami, kiedy przechodzą na główne wydanie, gdzie wydaje mi się, że wydanie zajmuje około 4-5 lat?


title: Czy powinniśmy mieć niezależny od bazy danych SQL, taki jak język zapytań w Django?

text: **Uwaga :** * Wiem, że mamy już `Django ORM`, który utrzymuje niezależność od bazy danych i konwertuje na zapytania `SQL` specyficzne dla bazy danych. * Gdy sprawy zaczynają się komplikować, preferowane jest pisanie „surowych zapytań SQL” w celu uzyskania większej wydajności. * Kiedy piszesz `surowe zapytania sql`, twój kod zostaje uwięziony w bazie danych, której używasz. * Rozumiem również, że ważne jest, aby wykorzystać pełną moc swojej bazy danych, czego nie można osiągnąć za pomocą samego `django orm`. Moje pytanie : * Dopóki nie użyję żadnej funkcji specyficznej dla bazy danych, dlaczego ktoś miałby być uwięziony w bazie danych. * Na przykład: > Mamy zapytanie z wieloma sprzężeniami i zdecydowaliśmy się napisać surowe zapytanie sql. > To sprawia, że moja strona jest specyficzna dla postgresu. Nawet jeśli nie używałem > żadnej funkcji specyficznej dla postgresa. Uważam, że powinien istnieć jakiś `fałszywy język sql`, który może przetłumaczyć na zapytanie sql dowolnej bazy danych. Można na nim zbudować nawet ORM Django. Tak więc, jeśli wyjdziesz z ORM, ale nie zależy to od bazy danych - nadal możesz pozostać niezależny od bazy danych. To samo pytanie zadałem `Jacobowi Kaplanowi Mossowi` (osobiście) : * Poradził mi, abym pozostał przy bazie danych, którą lubię i znosił całą jej moc, na co się zgadzam. Nie chodziło mi jednak o to, że powinniśmy być „niezależni od bazy danych”. * Chodzi mi o to, że powinniśmy być niezależni od bazy danych, dopóki nie użyjemy funkcji specyficznej dla bazy danych. Proszę wyjaśnić, dlaczego powinna być warstwa `fałszywego sql` nad rzeczywistym sql? ================================ **Aktualizacja:** ============ ==================== **Moja sugestia:** Rozwiąż niezależność bazy danych na poziomie `fałszywego sql`, a następnie zbuduj ORM na tym fałszywym sql. Tak więc, jeśli mam napisać zapytanie sql - użyję `fałszywego sql`, który będzie działał na wszystkich bazach danych, oprócz surowego SQL. W ten sposób pozostanę niezależny od bazy danych, chyba że użyję funkcji bardzo specyficznej dla mojej bazy danych. Dlatego zapytanie typu `select * from table limit 10;` będzie działać zarówno na `postgres` jak i 'MS-SQL Server'. Czy to rozsądne? **Uwaga:** * Nie mówię o `ANSI SQL`, proponuję `fałszywy sql`, aby wszystkie bazy danych działały z 1 standardowym sql. **[ Które mogą nie obejmować specyficznych funkcji db ]**


title: Team Parallel development w ASP.NET

text: Zajmuję się tworzeniem aplikacji napisanej w ASP.NET (C#), które intensywnie wykorzystują na stronie wzorcowej i sesji. Ponieważ ta sama aplikacja internetowa zostanie ulepszona, a zrobi to mój kolega z zespołu. czy jest jakieś dobre podejście, które pozwoli nam pracować nad tym samym rozwiązaniem i osobno dostarczyć zmianę do UAT/PDN? zespół kontroli zmian mojej firmy nie pozwala nam na stworzenie 2 zestawów kodu w UAT i połączenie go w jeden zestaw w PDN. każdy pomysł jest mile widziany. Dziękuję.


title: Termin „interfejs” w C++

text: Java wyraźnie rozróżnia „klasę” i „interfejs”. (Uważam, że C# też tak, ale nie mam z tym żadnego doświadczenia). Jednak podczas pisania C++ nie ma narzuconego języka rozróżnienia między klasą a interfejsem. W związku z tym zawsze postrzegałem interfejs jako obejście braku wielokrotnego dziedziczenia w Javie. Dokonywanie takiego rozróżnienia wydaje się arbitralne i pozbawione sensu w C++. Zawsze stosowałem podejście „pisz rzeczy w najbardziej oczywisty sposób”, więc jeśli w C++ mam coś, co można by nazwać interfejsem w Javie, np.: class Foo { public: virtual void doStuff() = 0; ~Foo() = 0; }; i wtedy zdecydowałem, że większość realizatorów `Foo` chce podzielić się jakąś wspólną funkcjonalnością, którą prawdopodobnie napisałbym: class Foo { public: virtual void doStuff() = 0; ~Foo() {} protected: // Jeśli potrzebuje tego do wykonania swojej pracy: int internalHelperThing(int); // Lub jeśli nie potrzebuje wskaźnika this: static int someOtherHelper(int); }; Co sprawia, że nie jest to już interfejs w sensie Java. Zamiast tego C++ ma dwie ważne koncepcje, związane z tym samym podstawowym problemem dziedziczenia: 1. Dziedziczenie „wirtualne” 2. Klasy bez zmiennych składowych nie mogą zajmować dodatkowej przestrzeni, gdy są używane jako baza > „Podobiekty klasy bazowej mogą mieć rozmiar zerowy” te, których staram się unikać, gdy tylko jest to możliwe – rzadko spotykam scenariusz, w którym to naprawdę jest „najczystszy” projekt. #2 jest jednak subtelną, ale ważną różnicą między moim rozumieniem terminu "interfejs" a cechami języka C++. W wyniku tego obecnie (prawie) nigdy nie odnoszę się do rzeczy jako "interfejsów" w C++ i mówię o klasach bazowych i ich rozmiarach. Powiedziałbym, że w kontekście C++ "interfejs" jest mylącą nazwą. Zauważyłem jednak, że niewiele osób robi takie rozróżnienie. 1. Czy mogę coś stracić, zezwalając (np. `chronionym`) na istnienie funkcji nie`wirtualnych` wewnątrz „interfejsu” w C++? (Moje odczucie jest dokładnie odwrotne - bardziej naturalne miejsce dla współdzielonego kodu) 2. Czy termin "interfejs" ma znaczenie w C++ - czy oznacza _tylko_ czysty `wirtualny`, czy też byłoby uczciwe wywoływanie klas C++ bez zmiennych składowych interfejs nadal?


title: Jak zostać inżynierem oprogramowania?

text: Mój problem jest trochę dziwny, więc proszę o wyrozumiałość. Pracuję w start-upie zajmującym się głównie rozwojem mobilnym od czasu ukończenia studiów 2 lata temu. Tworzę aplikacje na iOS, ale to nie jest istotne. Struktura startowa to po prostu założyciele > programiści, bez nadzoru technicznego średniego szczebla lub zarządzania projektami. Nasz typowy cykl projektowy wygląda tak: spotkanie z klientem > wysłanie bardzo niejasnych wymagań do zewnętrznego grafika > kopanie w rozwoju zaraz po otrzymaniu projektu, bez zadawania pytań > potem improwizuj improwizuj improwizuj! Nie chodzi o to, że nie zdajemy sobie sprawy, że istnieją takie rzeczy jak analiza wymagań, UML, wzorce projektowe, kontrola kodu źródłowego, testowanie, metodologie rozwoju... itd., po prostu ich nie używamy, i mam na myśli jak nigdy. Rezultatem jest zwykle brzydka trudna do utrzymania, ale działająca część kodu. Mimo wszystko dosłownie rozkwitamy dzięki wielu udanym aplikacjom na wszystkich platformach i większym klientom w każdym projekcie. Chodzi o to, że chcemy, aby chaos się skończył i szukamy porady. Jak naprawiłbyś naszą firmę technicznie? Biorąc pod uwagę, że nie możesz zatrudnić kierowników projektów lub kierowników zespołów tylko dlatego, że jesteśmy zaledwie 5 programistami, więc nie byłby to uzasadniony koszt dla założycieli, ale jednorazowe rzeczy, takie jak kursy, książki, prywatne szkolenia... itd. opcja. Wreszcie, jeśli to istotne, mamy siedzibę w Egipcie. Z góry bardzo dziękuję.


title: Programuj bardziej profesjonalnie (planowanie, notacja, ...)

text: Programuję framework do analizy danych dla mojej firmy (do tej pory 2000LOC). Jest 2 programistów, którzy pomagają w pisaniu poszczególnych modułów dla zdefiniowanych przeze mnie interfejsów. Do tej pory nie używałem dużo planowania ani narzędzi. Zasadniczo myślę o nowych klasach w mojej głowie i zapisuję je w Python + Eclipse. Ponieważ Python jest dobry do pisania prototypów, mogę go łatwo zmodyfikować, jeśli przeoczę jeden aspekt. Czasami jednak muszę dokonać refaktoryzacji jakiejś struktury i zastanawiam się, czy tak się nie stało, gdybym używał narzędzi do planowania. Jak myślisz, co jest najważniejszym początkiem bardziej profesjonalnego planowania programowania? Projekt nie stanie się zbyt duży, ponieważ dotyczy tylko analizy danych, ale zarządzanie tym, które dane są przetwarzane w jaki sposób jest również żmudne. Czy możesz zaproponować metody, lekturę lub narzędzia? Moja hierarchia klas jest dość płaska, więc nie widzę zbytniego użycia w diagramach klas. Jednak pomocne może być coś takiego jak diagramy wywołań i diagramy, które pokazują, w jaki sposób obiekty odwołują się do siebie. Nauczyłem się OOP samodzielnie, ale jestem pewien, że po rozważeniu wszystkich wymagań mogę zaprojektować ładną strukturę klas. A co z TDD? W tej chwili nie wyobrażam sobie, jak tego użyć, ponieważ większość obliczeń dotyczy danych sieciowych z obiektami i wieloma referencjami do obiektów (linkami). Ponadto zawartość danych nie stanowiła jeszcze problemu. Podejrzewam jednak, że bardziej profesjonalne podejście może być bardziej skuteczne. Pomysły?


title: Metody systematycznego badania technologii do wykorzystania w projekcie?

text: Jeśli chcę polecić mojej firmie technologię/wtyczkę/bibliotekę do wykorzystania w projekcie, czy są jakieś metodologie, których mogę użyć, które przyniosą bardziej wiarygodne wyniki i bardziej przekonującą prezentację tych wyników niż tylko moje własne „zdroworozsądkowe” podejście ?


title: Czy powinienem poprawić odpowiedzi kandydatów na rozmowy kwalifikacyjne?

text: Ostatnio przeprowadzałem wywiady z inżynierami oprogramowania i mam tendencję do zadawania coraz trudniejszych pytań, dopóki nie zrobią czegoś nie tak, a następnie przestawiam się na inną ścieżkę technologiczną i robię to samo. Kiedy kandydaci coś źle zrozumieją, zawsze udzielam im właściwej odpowiedzi… głównie dlatego, że tego bym chciał, gdybym był na rozmowie kwalifikacyjnej. Do bani jest po prostu słyszeć „nie, to nie jest w porządku” i nic więcej… Wczoraj kandydat zrobił złośliwy komentarz, kiedy udzieliłem mu prawidłowej odpowiedzi po tym, jak odpowiedział niepoprawnie, mówiąc „no cóż, nie jestem pewien, czy kiedykolwiek tego użyję Informacja...". Nigdy nie mówię protekcjonalnie ani krytycznie. Po prostu mówię rzeczowym tonem: „właściwie w języku xyz abc jest zaimplementowane w taki sposób, a nie w ten sposób”. Czy moja praktyka udzielania poprawnych odpowiedzi jest niewłaściwa? Czy powinienem ponownie rozważyć tę praktykę?


title: Proces weryfikacji kodu

text: Szukam lekkiego procesu przeglądu kodu. Kilka wymagań, recenzent musi być w stanie wykonać recenzję sam w wybranym przez siebie czasie (nie jest związany z check-inami), recenzent musi być w stanie łatwo znaleźć kod docelowy, recenzja musi pozostawić trochę dokument pokazujący, co zostało poddane przeglądowi. Wiem, że są dostępne narzędzia do przeglądu kodu, ale pracuję w bardzo sztywnym środowisku i wprowadzanie nowych narzędzi nie wchodzi w grę. Jednym z pomysłów, o którym myślałem, jest utworzenie nowego tokenu listy zadań programu Visual Studio o nazwie REVIEW i użycie go do oznaczenia kodu, który wymaga przeglądu. Coś w rodzaju // PRZEGLĄD doe_john: Nowa metoda, nie jestem pewien co do wyjątku. Następnie dodamy element roboczy Review w TFS (używamy szablonu CMM). Inną możliwością, którą wolałbym, byłoby, aby programiści utworzyli element roboczy TFS Review i dodali do niego linki do kodu, ale nie wiem, czy jest to możliwe. Oczywiście możesz dodać link do pliku, ale chciałbym mieć link do konkretnej metody.


title: czy „ochrona” jest kiedykolwiek rozsądna poza wirtualnymi metodami i destruktorami?

text: załóżmy więc, że niektóre pola i metody są oznaczone jako chronione (niewirtualne). prawdopodobnie zrobiłeś to, ponieważ nie oznaczyłeś ich jako publicznych, ponieważ nie chcesz, aby jakiś nincompoop przypadkowo wywołał je w złej kolejności lub przekazał nieprawidłowe parametry, lub nie chcesz, aby ludzie polegali na zachowaniu, które jesteś zmieni się później. dlaczego więc ten nincompoop może używać tych pól i metod z podklasy? o ile wiem, nadal mogą schrzanić w ten sam sposób, a te same problemy ze zgodnością nadal istnieją, jeśli zmienisz implementację. Przypadki ochrony, o których mogę pomyśleć, to: niewirtualne destruktory, więc nie możesz zepsuć rzeczy, usuwając klasę bazową. metody wirtualne, dzięki czemu można przesłonić metody „prywatne” wywoływane przez klasę bazową. konstruktory w c++. w java/c# oznaczenie klasy jako abstrakcyjnej zrobi w zasadzie to samo. jakieś inne przypadki użycia?


title: Czy te zaawansowane/nieuczciwe pytania do rozmowy kwalifikacyjnej dotyczą współbieżności Java?

text: Oto kilka pytań, które ostatnio zadałem respondentom, którzy twierdzą, że znają współbieżność Javy: 1. Wyjaśnij zagrożenie „widocznością pamięci” — sposób, w jaki JVM może zmienić kolejność niektórych operacji na zmiennych, które nie są chronione przez monitor i nie są zadeklarowane jako „ulotne” , tak, że jeden wątek może nie widzieć zmian wprowadzonych przez inny wątek. Zwykle zadaję to pytanie, pokazując kod, w którym występuje to zagrożenie (np. przykład „NoVisibility” na listingu 3.1 z „Java Concurrency in Practice” Goetza i in.) i pytam, co jest nie tak. 2. Wyjaśnij, w jaki sposób `volatile` wpływa nie tylko na rzeczywistą zmienną zadeklarowaną jako `volatile`, ale także na wszelkie zmiany zmiennych dokonane przez wątek, zanim zmieni on zmienną `volatile`. 3. Dlaczego możesz użyć `volatile` zamiast `synchronized`? 4. Zaimplementuj zmienną warunku za pomocą `wait()` i `notifyAll()`. Wyjaśnij, dlaczego powinieneś używać `notifyAll()`. Wyjaśnij, dlaczego zmienna warunku powinna być testowana za pomocą pętli `while`. Moje pytanie brzmi - czy są one odpowiednie lub zbyt zaawansowane, aby zapytać kogoś, kto twierdzi, że zna współbieżność Java? A skoro już przy tym jesteśmy, czy uważasz, że ktoś pracujący we współbieżności w Javie powinien mieć ponadprzeciętną wiedzę na temat odśmiecania Javy?


title: Czy istnieją gotowe rozwiązania do analizy wykorzystania funkcji?

text: Piszę zestaw narzędzi zwiększających produktywność, które sprzedają online i mają dziesiątki tysięcy użytkowników. Chociaż otrzymujemy bardzo dobre opinie, zwykle pochodzą one tylko od najgłośniejszych użytkowników, więc obawiamy się, że możemy przeoczyć duży obraz. Chcielibyśmy wiedzieć, czy istnieje gotowe (lub prawie) rozwiązanie do przechwytywania wykorzystania różnych funkcji i raportowania wzorców użytkowania i trendów w czasie. Uwaga: te narzędzia są aplikacjami natywnymi, a nie internetowymi. Wiem o Google Analytics i tym podobnych. Są świetne, ale szukam rozwiązań kodu natywnego.