title: Jak uzyskać kąt urządzenia z włączonym GPS?

text: Mam zamiar kupić telefon z systemem Android z obsługą GPS i opracować aplikację Augmented Reality (która będzie wskazywać lokalizacje przed kamerą). Wszystko, co znalazłem w GPS, to to, że mówi tylko o lokalizacji urządzenia, jak uzyskać kierunek, w którym skierowany jest aparat i wysokość urządzenia? jak zrobić kompas (2D, 3D) z telefonem z włączonym GPS? Czy telefon jest odpowiedzialny za wskazanie kierunku? **(proszę poprawić, jeśli zadałem to pytanie w złym miejscu)**


title: Stos i sterta — pytanie o alokację dynamiczną

text: Źródła zwykle wspominają, że dynamicznie tworzone zmienne są alokowane na stercie, natomiast zmienne funkcji na stosie. Również te na stosie przestają istnieć automatycznie, gdy np. funkcja, która zawiera zmienną wychodzi. Jeśli dobrze rozumiem, pola danych klasy są na stercie. Nie rozumiem, co to znaczy „dynamiczny”? Jak widzę, kiedy kod jest uruchomiony, wszystko, co jest tworzone, jest tworzone dynamicznie w locie, czy to zmienne funkcyjne, czy obiekty ze zmiennymi wewnątrz nich. Byłbym zadowolony z prostego wyjaśnienia. Dziękuję


title: Moduł używany przez większość innych modułów

text: Zajmuję się projektowaniem obiektowym. Więc nie chcemy używać globalnych, ale czasami mamy moduł, którego używa większość innych modułów. Oznacza to, że musimy po prostu przekazać go do wszystkich innych modułów, a to mogą być dosłownie wszystkie moduły! class Logger { public: Logger(void); ~Rejestr (unieważniony); }; Kalkulator klasy { public: Kalkulator(Logger * logger); ~Kalkulator(unieważnij); }; class Opodatkowanie { public: Opodatkowanie(Logger *logger); ~Opodatkowanie (nieważne); }; Pomysł polega więc na tym, że moduły `Calculator` i `Taxation` używają modułu `Logger` do rejestrowania wszystkiego. Podobnie większość innych modułów również będzie z niego korzystać, a rejestrowanie jest wymagane wszędzie. Czy ta metoda jest w porządku, czy zamiast tego `Logger` powinien być globalny?


title: Jaki jest proces tworzenia paska błędów?

text: W mojej firmie pracujemy nad przyjęciem cyklu Microsoft Secure Development Lifecycle, a część procesu MSDL obejmuje tworzenie pasków błędów bezpieczeństwa i prywatności na początku projektu. Słyszałem pojęcie paska błędów przed MSDL i rozumiem, że jest to zasadniczo definicja tego, jaki poziom/ilość błędów jesteś w stanie zaakceptować w produkcie końcowym, ale nigdy nie rozumiałem, jak stworzyć pasek błędów projektu. Czy są jakieś dobrze udokumentowane procesy tworzenia pasków błędów, z których mogę się uczyć? Próbowałem zrobić trochę Googling dla przykładów lub rzeczywistych scenariuszy projektów definiujących paski błędów na początku projektu, ale nie mogę uzyskać żadnych dobrych wyników ani wskazówek na temat procesu tworzenia paska błędów. Istnieją przykłady MSDL tego, co wygląda na zakończone paski błędów, ale jestem zainteresowany poznaniem procesu definiowania czegoś takiego. Na przykład dla tych, którzy zrobili coś takiego wcześniej, czy zdefiniowałeś paski błędów w bardzo specyficzny sposób (np. mówiąc „Nie powinno być nieautoryzowanego dostępu do systemu plików: odczyt z systemu plików”), czy też skorzystałeś z odroczonego podejście polegające na tym, że gdy znajdziemy błędy, ocenimy je w skali od 1 do 5 (5 jest najpoważniejszą), ustal teraz, że żadne błędy powyżej 3 nie zostaną wysłane i zostaw swój ranking błędów, dopóki nie zostaną odkryte? Wydaje mi się, że próba zrobienia tego pierwszego jest głupią i niemożliwą czynnością, ale ta druga jest podatna na skłonność do pobłażliwości, gdy projekt sprowadza się do sieci. Ponownie, aby podsumować to wszystko w zwięzłe pytanie, czy ktoś może zapewnić mi dobrze udokumentowane podejście do definiowania/tworzenia pasków błędów?


title: Jak całkowicie uniknąć logiki biznesowej w DAL?

text: W naszej aplikacji ASP.NET MVC bardzo mocno staramy się rozdzielić problemy dla każdej warstwy (używamy DDD). Niemniej jednak wydaje się, że nie możemy uniknąć przynajmniej pewnej logiki biznesowej w DAL. Na przykład istnieją nazwane obiekty, w których wymaganiem biznesowym jest, aby każda nazwa była unikalna (ale nazwa nie jest kluczem). Jeśli pojawi się żądanie utworzenia nowego nazwanego obiektu, usługa sprawdza, czy jakiś obiekt o tej nazwie istnieje w repozytorium, jeśli nie, fabryka tworzy nowy obiekt i repozytorium go utrwala (używamy EF dla repozytoriów i procedur składowanych dla obiektów zapytań ). Problem jest z warunkami wyścigu - jeśli dwa żądania przychodzą jednocześnie (jest to mało prawdopodobne, ale możliwe), oba żądania chcą utworzyć nowy obiekt pod tą samą nazwą, w tym przypadku oba sprawdzenia wyjdą negatywnie i zostaną utworzone dwa obiekty o tej samej nazwie . Do tej pory radzimy sobie z ograniczeniami w bazie danych SQL, więc jeśli coś takiego się wydarzy, wyjątek jest rzucany w repozytorium - ale takie podejście jest po prostu błędne, ponieważ takie wymaganie jest wymogiem stricte biznesowym i nie powinno być bąbelkowe do warstwy trwałości; jeśli zmienimy taki wymóg, np. w nazwach rozróżniana jest wielkość liter, takie ograniczenie również musiałoby zostać zmienione itp.). Jak poprawnie zrealizować taki scenariusz? Dziękuję.


title: Jaki jest najlepszy sposób na zweryfikowanie następujących danych?

text: Powiedzmy, że otrzymuję żądanie xml, które jest wysyłane do mojej usługi sieciowej i zawiera ono pewne dane, takie jak pary Pokój/Cena (Pokój = Double Queen, Cena = 10%). Baza danych zawiera wszystkie te pary Pokój/Cena, więc gdy nadejdzie żądanie xml, muszę je zweryfikować, aby sprawdzić, czy żądanie zawiera zarówno pokój, jak i stawkę w bazie danych. Jeśli otrzymam jedną parę pokój/cena i nie ma jej w bazie danych, wiadomość nie powiedzie się i odeśle błąd, ale jeśli otrzymam na przykład 3 pary pokój/cena, a w bazie danych zostaną znalezione 2, ale jedna jest nie, przetworzyłbym te, które zakończyły się sukcesem, i odesłałem ostrzeżenia dla tych, które nie zostały znalezione. Inny scenariusz jest taki, że jeśli otrzymam 3 pary pokój/cena i nie wszystkie nie zostaną znalezione w bazie danych, chcę odesłać komunikat o błędzie. Jaki jest najlepszy sposób podejścia do tych scenariuszy?


title: Pasek postępu dla nieznanej liczby przedmiotów

text: Pracuję nad funkcją opartą na ankietach w naszej aplikacji, a ankieta ma rozgałęzienia przy każdym pytaniu w zależności od udzielonej odpowiedzi. Każda ścieżka, którą może obrać oddział, może nie mieć takiej samej liczby pytań. Jeśli więc ocenimy każdą możliwą ścieżkę, którą można obrać, za każdym razem możesz otrzymać inną liczbę wszystkich pytań. Powiedziano mi, że do ankiety wymagany jest pasek postępu, jednak nie wyobrażam sobie, w jaki sposób pasek postępu może dostarczyć istotnych danych w tym kontekście. Nie wiemy, na ile pytań trzeba odpowiedzieć, dopóki ankieta nie zakończy się bez perspektywy czasu. Czy ktoś może polecić dobre logiczne rozwiązanie do wdrożenia paska postępu dla takiej funkcji? Nie potrzebuję konkretów. System interfejsu użytkownika, którego używam, język, którego używam, wszystko to jest nieistotne. Chcę mieć ściśle matematyczne rozwiązanie tego problemu, jeśli takie istnieje. Jeśli nie, to używanie takich rzeczy jak szacunki, uśrednianie lub inne „szacunki” są również dobrymi, ale ostatecznymi deskami ratunku. Z góry dziękuję.


title: Jak mogę anulować wszystkie uruchomione zapytania mysql w aplikacji internetowej?

text: Korzystam z aplikacji internetowej, która musi przeskanować (zapytanie mysql w określonej kolumnie) ogromną tabelę MySQL, która ma ponad 100 000 rekordów. Zauważyłem problem polegający na tym, że gdy użytkownik żąda innej strony z tej samej aplikacji internetowej, podczas gdy wyniki są pobierane ze skanowania, przeglądarka wyświetla stronę przez długi czas. Jak mogę anulować skanowanie (lub zapytanie mysql) podczas żądania nowej strony?


title: Używanie gramatyki języka naturalnego w płynnym API

text: Majsterkuję przy abstrakcji zapytań w interfejsie API bazy danych WebSQL/Phonegap i uważam, że zarówno pociąga mnie, jak i wątpię w zdefiniowanie płynnego interfejsu API, który naśladuje użycie gramatyki naturalnego języka angielskiego. Najłatwiej byłoby to wyjaśnić na przykładach. Poniżej znajdują się wszystkie poprawne zapytania w mojej gramatyce, a komentarze wyjaśniają zamierzoną semantykę: //znajdź użytkownika, gdzie nazwa równa się „foo” lub e-mail zaczyna się od „foo@” find(„użytkownik”).where(„nazwa”).equals ("foo").and("email").startsWith("foo@") //znajdź użytkownika gdzie nazwa równa się "foo" lub "bar" find("użytkownik").where("nazwa").equals( "foo").or("bar"); //znajdź użytkownika, gdzie nazwa równa się "foo" lub kończy się na "bar" find("użytkownik").where("nazwa").equals("foo").or().endsWith("bar"); //znajdź użytkownika gdzie nazwa jest równa lub kończy się na "foo" find("użytkownik").where("nazwa").equals().or().endsWith("foo"); //Znajdź użytkownika, gdzie nazwa jest równa „foo”, a adres e-mail nie jest podobny do „%contoso.com” find(„user”).where(„name”).equals(„foo”).and(„email”).is ().not().like("%contoso.com"); //gdzie nazwa nie jest null find("użytkownik").where("nazwa").is().not().null(); //znajdź post, w którym autor to "foo" a id to (1,2,3) find("post").where("autor").is("foo").and("id").is ().w(1, 2, 3); //znajdź post gdzie id jest pomiędzy 1 a 100 find("post").where("id").is().between(1).and(100); * * * **Edycja na podstawie opinii Quentina Pradeta** : Dodatkowo wydaje się, że API będzie musiało obsługiwać formy czasowników w liczbie mnogiej i pojedynczej, więc: //a równa się b find("post").where("foo "). równa się (1); //a i b (oba) równe c znajdź("post").where("foo").and("bar").equal(2); Ze względu na pytanie załóżmy, że nie wyczerpałem tutaj wszystkich możliwych konstrukcji. Załóżmy też, że potrafię opisać _najbardziej_ poprawne zdania w języku angielskim - w końcu sama gramatyka ogranicza się do czasowników i koniunkcji zdefiniowanych przez SQL. * * * **Edycja dotycząca grupowania** : Jedno "zdanie" to jedna grupa, a pierwszeństwo jest takie, jak zdefiniowano w SQL: od lewej do prawej. Wiele grup może być wyrażonych za pomocą wielu instrukcji `where`: //spójnik "and()" pomiędzy instrukcjami where jest opcjonalny find("post") .where("foo").and("bar").equal(2 ).and() .where("baz").isLessThan(5); * * * Jak widać, definicja każdej metody zależy od kontekstu gramatycznego, w którym się znajduje. Na przykład argument „metody łączenia” `or()` i `and()` można pominąć, * *lub** odnoszą się do nazwy pola **lub** oczekiwanej wartości. Wydaje mi się to bardzo intuicyjne, ale chciałbym, abyś usłyszał Twoją opinię: czy to dobry, użyteczny interfejs API, czy też powinienem wycofać się do bardziej prostej implementacji? Dla przypomnienia: ta biblioteka zapewni również bardziej konwencjonalny, niepłynny interfejs API oparty na obiektach konfiguracyjnych.


title: Jaki jest preferowany sposób komunikacji między aplikacjami w tym samym systemie?

text: Projektuję system, który jest zbudowany na kilku małych aplikacjach napisanych w pythonie, niektóre z nich będą usługami, a inne będą programami uruchamianymi tylko w szczególnych sytuacjach. To, co muszę osiągnąć, to pozwolić serwerowi komunikować się z usługą, gdy wystąpi określone zdarzenie z niewielką ilością danych. Aby służba wiedziała o nowej sytuacji i mogła podjąć odpowiednie działania, czasem natychmiast, a czasem w przyszłości. Patrzyłem na memcached, ale wydaje mi się, że jest to przesadne rozwiązanie dla mojego systemu (który jest tylko kilkoma oddzielnymi aplikacjami działającymi na Raspberry Pi) lub pisaniem do plików i używaniem czegoś takiego jak pyinotify, ale nie sądzę, że to jest bardzo elegancki i wreszcie myślałem o przechowywaniu stanu w bazie danych, co też mi się nie podoba. Czy są jakieś preferowane sposoby obsługi tego rodzaju komunikacji między procesami, o których nie pomyślałem (jestem pewien, że są) lub który z wyżej wymienionych byłby najmądrzejszy?


title: Jak platformy chmurowe jako usługa mierzą czas procesora?

text: Obecnie oceniam Google App Engine i jedną z odpowiedzi w temacie Ukryte ograniczenia Google App Engine? stwierdził: > Wydajność cię zaskoczy. GAE jest zoptymalizowany pod kątem wielu małych zapytań i > otrzymujesz ostrzeżenie, jeśli zapytanie w ogóle zajmuje trochę czasu procesora. Dostajesz 6,5 (w końcu > czek) darmowych godzin dziennie, ale to mistyczna liczba i powinieneś przetestować. > > Przekonasz się, że ten czas nie jest związany z czasem procesora lub > czasu procesora w magazynie danych, ponieważ (na przykład) pod osłonami może znajdować się > wiele komputerów aktualizujących indeksy podczas usuwania/aktualizacji. Niektórzy użytkownicy stwierdzili > ogromne zużycie procesora podczas przesyłania danych zbiorczych - wiele godzin użytkowania np. > 20 minut czasu rzeczywistego. >> Twoja instancja Java może wymagać włączenia zasilania, jeśli nie została uruchomiona w (chyba) 20 minut. Zaletą jest to, że mogą przerzucić swoje inteligentne zarządzanie > na Ciebie jako tańsze koszty, ale oznacza to, że doświadczysz krótkiego > opóźnienia i zobaczysz wysokie ostrzeżenie o procesorze przy pierwszym żądaniu od jakiegoś czasu. >> W wielu przypadkach dostęp do datastore w Pythonie jest szybszy niż Java JDO. Prawdopodobnie odkryjesz, że korzystanie z niskopoziomowego API dla Javy jest szybsze. > > Wydaje się, że niektórzy programiści doświadczyli więcej błędów Datastore, dziękuję > można się spodziewać (może około 0,4-1%?). Jeszcze nie. Zastanawiam się, jakie czynniki wpływają na określenie czasu procesora PaaS (np. w tym przypadku 6,5 godziny za darmo, które otrzymujesz z GAE). Na przykład, czy obejmuje całkowity czas potrzebny na przesłanie danych do klienta przez bazę danych? Czy koszty w ramach tego modelu drastycznie rosną wraz ze wzrostem liczby użytkowników?


title: Przekazywanie/przekazywanie ruchu SMTP?

text: Mamy trzy różne sieci. Regularne, zaufane, bezpieczne. Zwykły ma dostęp do internetu i zaufany. Zaufany ma dostęp do zwykłego, internetowego i bezpiecznego. Bezpieczny ma dostęp do Zaufanych. Kiedyś mieliśmy lokalny serwer SMTP, ale władze, które zdecydowały się przenieść go na zewnątrz. Teraz bezpieczna sieć nie ma do niej dostępu. Dla mojego własnego, domowego kodu, który działa w bezpieczny sposób, napisałem usługę sieciową .Net do wysyłania e-maili. To działa świetnie. Problem polega na tym, że nie możemy modyfikować gotowych aplikacji. Najlepsze, co możemy zrobić, to zmienić adres serwera i port serwera SMTP. Postanowiłem napisać własny serwer SMTP, który zasadniczo przekazuje wiadomość do zewnętrznego serwera SMTP. Prawdopodobnie dość łatwe, ale zajmie to trochę czasu. Mam nadzieję, że ktoś zna rozwiązanie, które możemy kupić lub inny sposób na zrobienie tego, czego potrzebujemy.


title: Czy program kiedykolwiek ulegnie awarii, jeśli główna pętla zostanie umieszczona w bloku try/catch?

text: Jeśli mamy klasę main i konstruktor main konstruuje naszą klasę setupu i umieszczamy tę klasę w try catch w main. Teoretycznie Czy wszystkie błędy zostaną wyłapane? Jeśli to zrobią, jak wpłynie to na wydajność i łatwość konserwacji? Czy aplikacja będzie wolna od awarii?


title: Czy Twój zespół rozwija swoje narzędzia wspierające, czy należy to zlecić na zewnątrz?

text: Przez narzędzia wspierające mam na myśli: * **menedżer danych referencyjnych** , taki jak definicja wirusów w oprogramowaniu antywirusowym * **generator danych testowych** * **konstruktory poziomów** do gier * **symulatory** lub zaawansowane mockowanie systemy > Czy zespół tworzący `podstawowy produkt` (w powyższym przypadku grę lub > antywirus) powinien być częścią rozwoju `narzędzi wspierających` > > czy jest to zadanie, które zleciłbyś na zewnątrz zespołu, aby > pomóc mu skoncentrować się na produkcie? Nie mam wystarczającego doświadczenia, aby ocenić zalety i wady każdego z nich, więc mam nadzieję, że wymyślisz osobiste doświadczenia, którymi możesz się podzielić, a nawet badania lub artykuły, które przeczytałeś na ten temat.


title: ASP.NET MVC SoC w przypadku obiektów zaplecza (decyzja projektowa)

text: Rozmawiałem z kilkoma rówieśnikami, a nawet z kilkoma technicznymi liderami w zespole wokół tego i jestem całkowicie za purystycznym podejściem MVC. Zwłaszcza, gdy projekt jest na początkowym etapie (łatwo jest wprowadzić wzór w przyszłość). Jestem głęboko przekonany, że wszystko, co ma związek z zapleczem, powinno być trzymane oddzielnie od widoków, modeli, a także modeli widoków. Podjęto ostateczną decyzję o korzystaniu z obiektów uznanych za tranzytowe, ponieważ są one używane wszędzie, od interfejsu użytkownika z powrotem do platformy zaplecza, która obsługuje rzeczywiste żądanie. Oto przykładowa ilustracja tego, co zostanie zaimplementowane: Stos MVC <-> Platforma zaplecza <-> Może komunikować się z bazą danych lub inną usługą strony trzeciej W powyższym przykładzie obiekt żądania zaplecza może być utworzony w poziomie kontrolera i przechodzi przez platformę zaplecza i tam może zostać dostosowany do bazy danych lub innej usługi. A kiedy odpowiada usługa bazy danych/strony trzeciej, jej odpowiedź jest pobierana i dostosowywana do jednego z naszych własnych typów. Ten typ zostanie następnie zwrócony do stosu MVC. Views i ViewModels po prostu używają tych typów platform zaplecza. Co chciałbym zobaczyć zrobione: Chciałbym, aby kontroler przekazał odpowiedzialność na kartę lub rzeczywiście warstwę usług, która jest odpowiedzialna za przyjmowanie POCO i tworzenie obiektów platformy zaplecza. Utwórz zgłoszenie, wyślij je na platformę Backend. A kiedy odpowie, dostosuj odpowiedź do View lub ViewModel i wyślij ją z powrotem do kontrolera. Obiekty są wstrzykiwane do kontrolera, więc wystarczy przekazać POCO do innej warstwy, aby wziąć odpowiedzialność za tworzenie żądań, wysyłanie ich, a następnie zwracanie odpowiedzi, która składa się z widoku lub modelu widoku. Plusy i minusy. Przy obecnej implementacji jest to wygodne i biorąc pod uwagę, że my (moja firma) jesteśmy właścicielem kodu, który przechodzi od front-endu do back-endu, który jest używany. Oszczędza czas. Czego nie mamy wiele do wykonania. Nie widzę tu separacji warstw. Z implementacją, którą chciałbym zobaczyć, wierzę, że zbliża się nieco bardziej do SoC i dodaje kolejną warstwę adaptacji. To trochę więcej pracy. I, z czystego punktu widzenia MVC, używa obiektów platformy zaplecza, które są używane w zapleczu (chociaż założono, że te obiekty będą również używane w zapleczu). Zdaję sobie sprawę, że to jest długie i nie ma ładnych zdjęć. Przeprosiny. Chciałbym wiedzieć, co byś zrobił. Twoje zdrowie.


title: Testuj dane w systemie rozproszonym

text: Pytanie, które ostatnio mnie dręczy, dotyczy tego, jak skutecznie testować (od końca do końca) funkcje w systemie rozproszonym. W szczególności, jak efektywnie zarządzać (w czasie) danymi testowymi do testowania funkcji. Omawiany system jest typową konfiguracją SOA. Kompozycja jest wykonywana w JavaScript podczas wywołania kilku interfejsów API REST. Każda usługa jest budowana jako niezależny blok. Każda usługa ma pewien rodzaj trwałego magazynu (w większości przypadków SQL Server). Obecnie głównym problemem jest podejście do danych testowych podczas testowania kompleksowych funkcji. Kompleksowe testowanie funkcjonalne odbywa się za pośrednictwem interfejsu użytkownika, dlatego konieczne jest skonfigurowanie danych testowych przed uruchomieniem testu (może to być testowanie ręczne lub automatyczne). Jak zwykle w systemie rozproszonym, identyfikatory z jednej usługi są wykorzystywane jako łącze w innej usłudze. Tak więc, aby skutecznie testować, w danych musi być obecny pewien poziom synchronizacji. Jaki jest najlepszy sposób zarządzania tymi danymi i ich konfigurowania po pomyślnym wdrożeniu w środowisku testowym? Na przykład, czy lepiej zarządzać tymi danymi testowymi w każdej usłudze? Lub spakować go razem z pakietem testowym? Czy ten zestaw testowy istnieje jako osobny projekt? Interesują mnie wskazówki dotyczące projektowania dotyczące przechowywania tych danych testowych i zarządzania nimi w miarę rozwoju funkcji aplikacji.


title: NodeJS jako droga do nauki JavaScript

text: Jestem programistą backendowym, który pracuje głównie w Pythonie. Prawdopodobnie nigdy nie będę chciał być pełnoetatowym programistą front-end, ale mając na celu poszerzenie mojego zestawu umiejętności, chciałbym stać się przynajmniej dostatecznie biegły w JavaScript. Wygląda na to, że język, w którym obecnie nosi się wiele kapeluszy, a jeśli nie, to chciałbym mieć trochę więcej wiedzy na temat „ich świata”, kiedy pracuję z facetami od frontendu. Używamy NodeJS do niektórych prac po stronie serwera w mojej firmie i byłem tego ciekawy. Znalazłem kilka dobrych tutoriali i wydaje się to interesujące. Wygląda na to, że może to być dobry sposób na zapoznanie się z JavaScriptem, ponieważ chodzi o to z punktu widzenia, który rozumiem - programowanie po stronie serwera. Ale jestem też trochę zaniepokojony, że jeśli nauczę się obu naraz, nie będę w stanie śledzić, czym jest „Stock JavaScript” w porównaniu z funkcjami, które są specyficzne dla NodeJS. Co myślicie? Czy zaznajomienie się z JavaScriptem poprzez naukę NodeJS to dobry pomysł? A może po prostu zdezorientuję się, jeśli wskoczę do Node bez solidnego zrozumienia podstaw JavaScript?


title: Nie mogę programować, ponieważ kod, którego używam, używa starych stylów kodowania. Czy to normalne dla programistów?

text: Mam swoją pierwszą prawdziwą pracę jako programista, ale nie mogę rozwiązać żadnych problemów ze względu na zastosowany styl kodowania. Kod tutaj: * Nie ma komentarzy * Nie ma funkcji (50, 100, 200, 300 lub więcej linii wykonywanych po kolei) * Używa wielu instrukcji `if` z wieloma ścieżkami * Posiada zmienne, które nie mają sensu (np.: `cf_cfop`, `CF_Natop`, `lnom`, `r_procod`) * Używa starego języka (Visual FoxPro 8 z 2002), ale są nowe wydania z 2007. Czuję się jakbym cofnął się do 1970 Czy to normalne, że programista zaznajomiony z OOP, czystym kodem, wzorcami projektowymi itp. ma problemy z kodowaniem w ten staromodny sposób? **EDYTUJ** : Wszystkie odpowiedzi są bardzo dobre. Z mojej (nie)nadziei okazuje się, że tego rodzaju bazy kodu na świecie jest bardzo dużo. Punktem wymienionym we wszystkich odpowiedziach jest refaktoryzacja kodu. Tak, naprawdę lubię to robić. W moim osobistym projekcie zawsze tak robię, ale... nie mogę zmienić kodu. Programiści mogą zmieniać pliki tylko w zadaniu, do którego zostali stworzeni. Każda zmiana w starym kodzie musi być skomentowana w kodzie (nawet z Subversion jako kontrolą wersji), plus informacje meta (data, programista, zadanie) związane z tą zmianą (to był bałagan, jest kod z 3 użytymi liniami i 50 stare wiersze skomentowane). Myślę, że to nie tylko problem z kodem, ale zarządzaniem problemem rozwoju oprogramowania.


title: Tworzenie skalowalnych aplikacji przy użyciu metod Agile

text: Może ktoś może podzielić się swoim doświadczeniem na temat tworzenia aplikacji, która ma skalować duże czasy, gdzie samo wyrzucenie większej ilości pieniędzy na lepszy sprzęt nie jest realistyczną opcją przy użyciu metodologii programistycznych, takich jak SCRUM i XP. 1. Czy musiałeś przepisać istotne części swojej aplikacji, ponieważ obecny framework nie mógł skalować się na tyle, aby pasował do aktualnych historii sprintu? jak tego uniknąć? 2. Kiedy przeprowadzasz testy obciążeniowe (lub obciążeniowe)? 3. Na jakim etapie wykonałeś projekt SMART(TM) dotyczący wymagań dotyczących krawędzi? 4. Czy dodałeś więcej etapów do cyklu tworzenia testu napisania testu, testu kodu do zaliczenia, refaktoryzacji? 5. Czy w końcu wszystko przerobiłeś, aby spełnić wymagania?


title: Czy projekt na podstawie umowy oznacza poprawność wyników?

text: Design by Contract mówi, jeśli chodzi o funkcję mówiącą: „daj mi wszystkie właściwe parametry, a ja podam ci dokładnie takie dane” … w istocie. Czy biorąc pod uwagę to, czy powinienem używać zasobów do sprawdzania wyników? Powinienem sprawdzić właściwości, które funkcja nie gwarantuje, że posiada dane wyjściowe, ale właściwości, które gwarantuje funkcja, nie muszą być sprawdzane, prawda? Oto przykład: class Transition_Manager { string str = generate_non_null_string(); process_using_a_function_that_can't_handle_null_strings(str ); }


title: Czy istnieją odmiany OOP, w których niektóre lub wszystkie zasady SOLID są sprzeczne z czystym kodem?

text: Niedawno rozmawiałem z moim przyjacielem na temat OOP w tworzeniu gier wideo. Wyjaśniałem architekturę jednej z moich gier, która ku zaskoczeniu mojego przyjaciela zawierała wiele małych klas i kilka warstw abstrakcji. Twierdziłem, że było to wynikiem tego, że skupiłem się na nadaniu wszystkim pojedynczej odpowiedzialności, a także na poluzowaniem sprzężenia między komponentami. Obawiał się, że duża liczba zajęć przełoży się na koszmar konserwacji. Moim zdaniem miałoby to dokładnie odwrotny skutek. Kontynuowaliśmy dyskusję na ten temat przez, jak się wydawało, stulecia, ostatecznie zgadzając się na odmowę, mówiąc, że być może były przypadki, w których zasady SOLID i właściwe OOP tak naprawdę nie mieszały się dobrze. Nawet wpis w Wikipedii dotyczący zasad SOLID stwierdza, że są one _wytycznymi_, które pomagają w pisaniu łatwego do utrzymania kodu i że są częścią ogólnej strategii programowania zwinnego i adaptacyjnego. Tak więc moje pytanie brzmi: ** Czy w OOP są przypadki, w których niektóre lub wszystkie zasady SOLID nie nadają się do czystego kodu?** Od razu mogę sobie wyobrazić, że zasada substytucji Liskov mogłaby kolidować z innym rodzajem bezpiecznego dziedziczenia . Innymi słowy, jeśli ktoś wymyślił inny użyteczny wzorzec zaimplementowany przez dziedziczenie, jest całkiem możliwe, że LSP może być z nim w bezpośrednim konflikcie. Czy są inni? Być może niektóre typy projektów lub określone platformy docelowe działają lepiej przy mniej SOLIDNYM podejściu? **Edycja:** Chciałbym tylko zaznaczyć, że nie pytam, jak poprawić swój kod ;) Jedynym powodem, dla którego wspomniałem o projekcie w tym pytaniu, było nadanie trochę kontekstu. Moje pytanie dotyczy OOP i zasad projektowania w _general_. _Jeśli jesteś ciekawy mojego projektu, zobacz to._ **Edytuj 2:** Wyobrażałem sobie, że na to pytanie można odpowiedzieć na jeden z 3 sposobów: 1. Tak, istnieją zasady projektowania OOP, które częściowo kolidują z SOLID 2. Tak, istnieją zasady projektowania OOP, które są całkowicie sprzeczne z SOLID 3. Nie, SOLID to kolana pszczół i OOP będzie z nim zawsze lepszy. Ale jak ze wszystkim, nie jest to panaceum. Pij odpowiedzialnie. Warianty 1 i 2 prawdopodobnie wygenerowałyby długie i interesujące odpowiedzi. Z drugiej strony opcja 3 byłaby krótką, nieciekawą, ale ogólnie uspokajającą odpowiedzią. Wydaje się, że zbliżamy się do opcji 3.


title: Czy deklaracja interfejsu Java może wymusić właściwości parametrów?

text: O ile wiem, deklarowanie interfejsu wygląda tak: interfejs publiczny Roots_Squares { public double square_root(podwójna wartość); } Teraz... jak wymusić, aby wartość miała wartości nieujemne? Taka funkcja powinna unikać wartości ujemnych, prawda? Jeśli ktoś tworzy klasę, która to implementuje, a tamta implementacja nie obsługuje wartości ujemnych, a następnie używam jego klasy z wartością ujemną… cóż, rzeczy się psują. Wtedy moim obowiązkiem jest sprawdzenie negatywów, kiedy jestem prawie pewien, że to implementujący powinien to sprawdzić.


title: Programowanie stron internetowych najwięcej wysiłku?

text: Aby stworzyć stronę internetową * Tworzę pliki Psd do projektu (Faza 1) * Konwertuję te pliki Psd na statyczne strony internetowe html/css (Faza 2) * Dodaję javascript do tych stron internetowych (Faza 3) * Uruchamiam wizualizację IDE web developer” do rozpoczęcia rozwoju (Faza 4) Studiowałem programowanie komputerowe przez ostatnie pięć lat i teraz zauważyłem, że odpowiednia faza (faza 4) tworzenia strony internetowej zajmuje najmniej czasu i wysiłku w całym procesie. Cała ciężka praca i wysiłek wydaje się być skupiona na projekcie graficznym, a zwłaszcza na konwersji tego projektu do html/css. Moje pytanie brzmi, czy to częsty przypadek? Czy robię coś złego na moich etapach rozwoju?


title: Jak obsługiwać dzielenie przez zero w języku, który nie obsługuje wyjątków?

text: Jestem w trakcie opracowywania nowego języka programowania, aby rozwiązać pewne wymagania biznesowe, a ten język jest skierowany do początkujących użytkowników. Nie ma więc wsparcia dla obsługi wyjątków w języku i nie spodziewałbym się, że będą go używać, nawet gdybym go dodał. Osiągnąłem punkt, w którym muszę zaimplementować operator dzielenia i zastanawiam się, jak najlepiej obsłużyć błąd dzielenia przez zero? Wydaje mi się, że mam tylko trzy możliwe sposoby załatwienia tej sprawy. 1. Zignoruj błąd i jako wynik wygeneruj „0”. Zapisywanie ostrzeżenia, jeśli to możliwe. 2. Dodaj `NaN` jako możliwą wartość liczb, ale to rodzi pytania dotyczące obsługi wartości `NaN` w innych obszarach języka. 3. Zakończ działanie programu i zgłoś użytkownikowi wystąpienie poważnego błędu. Opcja nr 1 wydaje się jedynym rozsądnym rozwiązaniem. Opcja nr 3 nie jest praktyczna, ponieważ ten język będzie używany do uruchamiania logiki jako nocny cron. Jakie są moje alternatywy dla obsługi dzielenia przez zero błędu i jakie są zagrożenia związane z opcją nr 1.


title: Czym różni się przewidywanie celu rozgałęzienia od przewidywania rozgałęzienia?

text: Nie rozumiem czym BTP różni się od BP? Tak, rozumiem, że BP ocenia, czy warunek jest prawdziwy/fałszywy, ale z pewnością domyślnie określa to również instrukcję „docelową”? Jeśli przewiduję, że pierwsza gałąź IF jest prawdziwa, to z pewnością właśnie określiłem również cel gałęzi (kod w przewidywanej gałęzi IF)?


title: Czy mogę używać tekstu (fragmentów) z biblioteki iOS Developer Lib w mojej dokumentacji?

text: W tej chwili tworzę Java-Wrapper dla Apples *.pkpass-Files (Passbook). Ponieważ muszę parsować plik JSon-File, planowałem dodać dokument java do każdego pola, aby wiedzieć, co dokładnie to pole jest w pkpass i jak powinno być wyświetlane. (Istnieją inne interesujące metadane). Na https://developer.apple.com/library/ios/documentation/UserExperience/Reference/PassKit_Bundle/Chapters/TopLevel.html#//apple_ref/doc/uid/TP40012026-CH2-SW1 można zobaczyć opis tego pliku format. Więc moje pytanie brzmi: czy mogę używać fragmentów tekstu (lub całego tekstu) z kolumny opisu, gdy dodam również link do strony do java doc?


title: Pamiątka ze stanem opcjonalnym?

text: **EDYTUJ:** Jak zauważył Steve Evers i pdr, nie implementuję poprawnie wzorca Memento, mój projekt jest w rzeczywistości wzorcem State. ## Program menu Zbudowałem program menu oparty na **konsoli** z wieloma poziomami, który wybiera konkretny test do uruchomienia. Każdy poziom dokładniej opisuje operację. Na dowolnym poziomie możesz wpisać wstecz, aby cofnąć się o jeden poziom ( **memento** ). Poziom 1: Typ serwera? [1] Serwer A [2] Serwer B Poziom 2: Środowisko serwera? [1] test [2] produkcja Poziom 3: Rodzaj testu? [1] obciążenie [2] jednostka Poziom 4: Zbieranie danych? [1] Dokumenty prawne [2] Dokumenty korporacyjne Poziom 4.5 (opcjonalnie): Typ testu obciążenia [2] Multi TIF [2] Pojedynczy plik PDF Poziom 5: Typ polecenia? [1] Przenieś [2] Kopiuj [3] Usuń [4] Niestandardowy poziom 6: Wpisz słowo kluczowe [ustaw, czyść, uruchom] ## Projekt ![Projekt](http://i.stack.imgur.com/BnufH .png) ## Stany ![Stany](http://i.stack.imgur.com/OFIvU.png) ## PROBLEM: **W tej chwili wyliczenie STANÓW jest czynnikiem decydującym o tym, który stan jest POWRÓT i jaki stan jest NASTĘPNY, ale nie wie nic o tym, jaki jest obecny stan pamiątek.** Czy ktoś doświadczył podobnego problemu i znalazł skuteczny sposób obsługi pamiątek ze stanem opcjonalnym? static enum STATES { SERVER, ENVIRONMENT, TEST_TYPE, COLLECTION, COMMAND_TYPE, KEYWORD, FINISHED } ## Możliwe rozwiązanie (nieelastyczne) W odniesieniu do mojego kodu poniżej, każda instrukcja case w klasie Menu może sprawdzić stan currentMemo, a następnie ustawić STAN (enum) odpowiednio do przekazania Konstruktorowi. Jednak nie wydaje się to elastyczne, bardzo elastyczne do zmiany i mam problemy ze znalezieniem skutecznego sposobu refaktoryzacji projektu. class Menu rozszerza StateConscious { private State state; prywatny czytnik skanera; prywatne narzędzie ServerUtils; Menu() { stan = nowy stan (); czytnik = nowy skaner(System.in); narzędzie = nowe ServerUtils(); } // Powtarzająca się logika menu public void startPromptingLoop() { List<State> states = new ArrayList<>(); state.add(nowy stan()); boolean redoInput = false; wartość logiczna userIsDone = false; while (true) { // pobierz Memento z ostatniej pętli Memento currentMemento = states.get(states.size() - 1) .saveMemento(); if (currentMemento == null) currentMemento = new Memento.Builder(0).build(); if (!redoInput) System.out.println(currentMemento.prompt); redoInput = fałsz; // przygotuj Memento na następną pętlę Memento nextMemento = null; STANY stan = STANY.values()[stany.size() - 1]; // pobierz dane wejściowe użytkownika String selection = reader.nextLine(); switch (wybór) { case "exit": reader.close(); zwrócić; // tylko przypadek ucieczki "quit": nextMemento = new Memento.Builder(first(), currentMemento, selection).build(); stany.wyczyść(); przerwanie; case "back": nextMemento = new Memento.Builder(poprzedni(stan), currentMemento, selection).build(); if (states.size() <= 1) { states.remove(0); } else { states.remove(states.size() - 1); state.remove(stany.rozmiar() - 1); }                     przerwanie; case "1": nextMemento = new Memento.Builder(next(state), currentMemento, selection).build(); przerwanie; case "2": nextMemento = new Memento.Builder(next(state), currentMemento, selection).build(); przerwanie; wielkość liter "3": nextMemento = new Memento.Builder(next(state), currentMemento, selection).build(); przerwanie; case "4": nextMemento = new Memento.Builder(next(state), currentMemento, selection).build(); przerwanie; domyślnie: if (state.equals(STATES.CATEGORY)) { Polecenie ciągu = wybór; System.out.println("Wykonywanie " + polecenie + " polecenie na: " + currentMemento.type + " " + currentMemento.environment); utility.executeCommand(bieżącaPamięć.pseudonim, polecenie); userIsDone = prawda; stany.wyczyść(); nextMemento = new Memento.Builder(first(), currentMemento, selection).build(); } else if (state.equals(STATES.KEYWORD)) { nextMemento = new Memento.Builder(next(state), currentMemento, selection).build(); stany.wyczyść(); nextMemento = new Memento.Builder(first(), currentMemento, selection).build(); } else { redoInput = prawda; System.out.println("spróbuj jeszcze raz"); kontynuować; }                     przerwanie; } if (userIsDone) { // uruchom menu cykliczne od początku for (int i = 0; i < states.size(); i++) { if (i != 0) { states.remove(i); // usuń wszystkie oprócz pierwszego } } reader = new Scanner(System.in); this.state = new State(); userIsDone = false; } if (!redoInput) { this.state.restoreMemento(nextMemento); stany.dodaj(ten.stan); } } } }


title: Dwie sprzeczne definicje zasady segregacji interfejsów – która z nich jest prawidłowa?

text: Czytając artykuły na temat ISP, wydaje się, że istnieją dwie sprzeczne definicje ISP: Zgodnie z pierwszą definicją (patrz 1, 2, 3), ISP stwierdza, że klasy implementujące interfejs nie powinny być zmuszane do implementowania funkcjonalności, których nie potrzebują . Tak więc gruby interfejs `IFat` interface IFat { void A(); nieważne B(); nieważne C(); nieważne D(); } class MojaKlasa: IFat { ... } należy podzielić na mniejsze interfejsy `ISmall_1` i `ISmall_2` interface ISmall_1 { void A(); nieważne B(); } interfejs ISmall_2 { nieważne C(); nieważne D(); } class MyClass:ISmall_2 { ... } ponieważ w ten sposób moja `MyClass` jest w stanie zaimplementować tylko te metody, których potrzebuje (`D()` i `C()`), bez konieczności dostarczania fikcyjnych implementacji dla ` A()`, `B()` i `C()`: Ale zgodnie z drugą definicją (patrz 1 , 2, odpowiedź Nazara Merzy), ISP stwierdza, że `MyClient` wywoływanie metod w `MyService` nie powinno pamiętaj o metodach w „MyService”, których nie potrzebuje. Innymi słowy, jeśli `MyClient` potrzebuje tylko funkcjonalności `C()` i `D()`, to zamiast klasy MyService { public void A(); publiczne nieważne B(); public void C(); publiczne nieważne D(); } /*kod klienta*/ Usługa MyService = ...; usługa.C(); usługa.D(); powinniśmy podzielić metody `MyService' na interfejsy _specyficzne_ dla klienta: interfejs publiczny ISmall_1 { void A(); nieważne B(); } publiczny interfejs ISmall_2 { void C(); nieważne D(); } class MyService:ISmall_1, ISmall_2 { ... } /*kod klienta*/ ISmall_2 service = ...; usługa.C(); usługa.D(); Tak więc przy pierwszej definicji celem ISP jest " _ułatwienie życia klasom implementującym interfejs IFat_ ", podczas gdy przy drugiej celem ISP jest " _ułatwienie życia klientom wywołującym metody MyService_ ". Która z dwóch różnych definicji usługodawcy internetowego jest rzeczywiście poprawna? **@MARJAN VENEMA** **1.** > Więc kiedy zamierzasz podzielić IFat na mniejszy interfejs, które metody > kończą w którym ISmallinterface powinien zostać wybrany na podstawie tego, jak spójne są > elementy. Chociaż sensowne jest umieszczanie spójnych metod w tym samym interfejsie, pomyślałem, że przy wzorcu ISP potrzeby klienta mają pierwszeństwo przed „spójnością” interfejsu. Innymi słowy, pomyślałem, że wraz z usługodawcą internetowym powinniśmy umieścić w tym samym interfejsie te metody, których potrzebują poszczególni klienci, nawet jeśli oznacza to pominięcie tego interfejsu tych metod, które ze względu na spójność powinny być również umieszczone w tym samym interfejsie? Tak więc, jeśli było wielu klientów, którzy będą potrzebować tylko wywołania `CutGreens`, ale nie również `GrillMeat`, to aby zastosować się do wzorca ISP, powinniśmy umieścić `CutGreens` w `ICook`, ale nie również `GrillMeat` , mimo że obie metody są bardzo spójne?! **2.** > Myślę, że Twoje zamieszanie wynika z ukrytego założenia w pierwszej > definicji: że klasy implementujące już stosują zasadę pojedynczej > odpowiedzialności. Przez „implementowanie klas niezgodnych z SRP” odnosisz się do tych klas, które implementują `IFat`, czy do klas, które implementują `ISmall_1` / `ISmall_2`? Zakładam, że odnosisz się do klas, które implementują `IFat`? Jeśli tak, dlaczego zakładasz, że nie przestrzegają jeszcze SRP? Dziękuję


title: Jak długo programista java może zacząć programować w C#?

text: Pracuję nad projektem, który będzie pozyskiwał czterech nowych programistów Java (poziom od średniego do starszego). Będą odpowiedzialni za pisanie kodu dla usług internetowych i interfejsu użytkownika sterowanego zdarzeniami. To jest projekt .NET używający C# i WPF. Na stworzenie dużej ilości nowej funkcjonalności mamy dziesięć tygodni. Kierownictwo projektu nazwało naszą linię czasu „agresywną, ale osiągalną”. Nowi programiści ograniczyli się do braku doświadczenia w .NET. Zakładając, że nowi programiści są bardzo utalentowani, ile tygodni przed rozpoczęciem pracy nad projektem? Czy jesteśmy skazani? Zdaję sobie sprawę, że podaję bardzo niewiele szczegółów, ale z przyjemnością przyjmę nawet najgrubsze szacunki.


title: Jak sformułować „to open source, prześlij łatkę”, aby była przyjazna?

text: W odpowiedziach na pytanie _Jaka jest kanoniczna odpowiedź na „to open source, prześlij łatkę”?_, wiele osób wyraziło opinię, że samo proszenie ludzi o przesłanie łaty jest aroganckie i niegrzeczne. Ale wydaje mi się, że jako programista w dowolnym projekcie open source zobaczysz o wiele więcej próśb o nowe funkcje na liście dyskusyjnej, niż mógłbyś zaimplementować. Więc kiedy użytkownik mówi: „Chciałbym zobaczyć funkcję X”, prawda jest taka, że szanse na jej zaimplementowanie są raczej niewielkie, chyba że sam prześle łatkę. Czasami wystarczy trochę zachęty, aby zmienić użytkownika we współtwórcę. Z drugiej strony nie chcesz odstraszyć (potencjalnych) współpracowników, udając się jako niegrzeczny. Jak więc w przyjazny sposób powiedzieć „proszę przesłać łatki zamiast prosić o funkcje”? **Aktualizacja:** Dziękujemy za wszystkie sugestie! Widzę, że większość z nich wymaga dość długich wyjaśnień. Ale ponieważ wolę unikać albo (a) wyjaśniania tego samego co drugi dzień (zabiera to zbyt dużo czasu), albo (b) używania fragmentów, które wklejam do wiadomości e-mail (to szybko robi się bezosobowe), zastanawiam się: Czy ktoś napisał to w dokumencie, do którego mogę zamieścić link? (Rzeczy specyficzne dla projektu, takie jak pisanie testów, kompilowanie kodu i przesyłanie łatki, nadal muszą być oczywiście udokumentowane, ale myślę, że te problemy techniczne i tak powinny znaleźć się w pliku CONTRIBUTING.txt.)


title: Potrzebujesz pomocy z algorytmem do sortowania listy

text: Odpowiedź jest prawdopodobnie oczywista, ale nie dla mnie w tej chwili, więc zastanawiałem się, czy ktoś, kto lepiej radzi sobie z algorytmami sortowania, może pomóc mi poprowadzić we właściwym kierunku. To nie jest praca domowa, legalnie próbuję pracować w ramach istniejącego projektu dla czegoś związanego z pracą. Zasadniczo zaczynam od nieuporządkowanej listy obiektów danych, które reprezentują coś podobnego do komentarzy na forum. Te obiekty MOGĄ jawnie mieć jednego i tylko jednego bezpośredniego rodzica. Innymi słowy > Rodzic (1...*) ----------- (1...1) Dziecko Dziecko ma odniesienie do swojego rodzica, jednak rodzic nie widzi swoich dzieci (jawnie) . Zazwyczaj podczas sortowania listy należy przekazać komparator, który dla dowolnych dwóch obiektów danych w kolekcji powinien zwrócić liczbę całkowitą, która reprezentuje odległość między dwoma obiektami na wykresie. Odległość między dwoma całkowicie niepowiązanymi komentarzami będzie oparta na wartości Timestamp obiektu danych. Problem polega na tym, że dowolne dwa obiekty danych mogą i powinny być porównywane tylko według sygnatury czasowej z innymi obiektami danych z tej samej gałęzi nadrzędnej. Oto przykład: > DO1 - Czas (1000ms) > > |___DO3 - Czas (5000ms) > > DO2 - Czas (2000ms) Porównanie DO1 i DO2 da w wyniku liczbę ujemną, więc te dwa są poprawnie posortowane względem siebie. DO3 do DO1 jest również poprawne, ponieważ mogę założyć, że każda gałąź nad komentarzem musi być mniejsza niż. Problem pojawia się przy porównaniu DO3 z DO2. Pomyślałem, że w tym przypadku powinienem porównać rodzica najwyższego rzędu z DO2 i to działa, dopóki nie pojawią się dzieci DO poniżej DO3. Próbuję dowiedzieć się, czy aktualny wykres obiektu jest nawet wystarczającą informacją, aby komparator poprawnie zwrócił odpowiednią liczbę dla dowolnych dwóch porównań. Być może komparator musi być najpierw zainicjowany nieuporządkowaną listą, aby mógł zbudować strukturę drzewa, w której mogę zobaczyć listę dzieci od dowolnego rodzica? A może potrzebuję refaktoryzacji? Na tym etapie nie przejmuję się wydajnością. Dziękuję Ci.


title: Czy programista powinien martwić się stosem technologicznym sklepu?

text: To pytanie może dotyczyć tylko stanowisk początkowych/młodszych. Pytanie: * Załóżmy, że jesteś programistą Java/Open Source. Czy powinieneś rozważyć pozycje, w których stos technologiczny sklepu to C++/.NET? * Załóżmy, że sklep jest zainteresowany zatrudnieniem Cię, ponieważ jest pod wrażeniem Twoich umiejętności algorytmicznych. A fakt, że jesteś programistą Java, nie ma dla nich żadnego znaczenia. Pytanie brzmi – czy to powinno być problemem, który powinien niepokoić początkujących/młodszych programistów? Czy wnioskodawca powinien podjąć decyzję o przyjęciu na podstawie innych kryteriów, takich jak domena, nad którą będzie pracował? Profity? Pensja? Wzrost kariera? itp.?


title: Alternatywne IDE

text: Po obejrzeniu http://www.kickstarter.com/projects/ibdknox/light-table zastanawiam się, czy ktoś natknął się na inne alternatywne metody programowania. Podczas pracy nad osadzonymi rzeczami Notepad ++ był wystarczający, co niekoniecznie jest IDE, ale jest to inny sposób obsługi rzeczy niż używanie Xcode, Visual Studio lub Eclipse. A nawet JDeveloper stosuje ten sam projekt, co tamte. Wraz ze zmianą OS X i innych systemów operacyjnych, wraz z metodologiami stron internetowych, strukturami aplikacji, frameworkami, czy możemy zacząć zmieniać sposób, w jaki tworzymy? Widziałem też sporo aplikacji „kod na iPadzie”. Czy w końcu odejdziemy od kodowania, jakie znamy? Czy dojdzie do rozłamu? Czy coś takiego jak Light Table może wnieść nawet niskopoziomowe kodowanie w C++ do następnej generacji programowania na poziomie korporacyjnym lub wbudowanym? Zwłaszcza, że czuję się jak niewielka mniejszość, która korzysta nawet z niektórych niestandardowych ustawień IDE, takich jak niestandardowe kolorowanie składni (po przejściu na Zenburn nie wracasz)


title: Jak określić priorytet i wagę „poprawy kodu”?

text: W naszym systemie śledzenia błędów mamy pola „priorytet” i „ważność”. Definiujemy powagę jako „jak to wpływa na użytkownika”, a priorytet jako „jak to wpływa na produkt”. Moje pytanie dotyczy kategoryzacji zadania „poprawy kodu” pod względem ważności i priorytetu. Załóżmy, że ulepszenie nie zmienia żadnego zachowania, ale sprawia, że jest to „lepszy kod”. Ogólnie przewidujemy długoterminową poprawę konserwacji, ale trudno to określić ilościowo. Kiedy używamy naszych definicji dla priorytetu i ważności, ulepszenie kodu uzyskuje najniższe wartości dla obu, chyba że wprowadzisz do obrazu trudne do przewidzenia długoterminowe korzyści. Dlatego oznacza to, że ulepszanie kodu jest błahym zadaniem i nigdy nie powinno się go podejmować. Uważam jednak, że ciągłe ulepszanie i refaktoryzacja kodu jest niezwykle ważne, ponieważ: * Tworzenie oprogramowania jest samo w sobie procesem ciągłego uczenia się i bez ulepszania kodu nie można być w tym lepszym. * Zespół powinien być dumny ze swojego kodu. * Przyszła konserwacja zajmie mniej czasu, a na dłuższą metę oszczędności będą znaczne. A może uważasz, że takich zadań nigdy nie powinno się tworzyć, a usprawnień wykonywać tylko „na żądanie”, „kiedy wiąże się z błędem”? Nawet jeśli jest to związane z błędem, czy nie byłby to temat do dyskusji na temat przeglądu kodu, np.? „dlaczego dokonałeś tej drastycznej zmiany w strukturze?”.


title: Dlaczego nierealistyczne jest oczekiwanie, że wszystkie przeglądarki będą obsługiwać te same standardy?

text: Idealnie byłoby mieć różne przeglądarki obsługujące te same standardy i ten sam kod, dające ten sam wynik we wszystkich przeglądarkach. To się jeszcze nie stało. Jakie są powody?


title: Jakie języki mówione powinienem obsługiwać w mojej aplikacji na Androida?

text: Tworzę małą aplikację na Androida, która jest niezależna od regionu. Jestem ciekaw, który język powinienem spróbować obsługiwać? W tej chwili jestem pewien, że wspieram tylko języki, którymi mówię płynnie. To jest niemiecki i angielski. Ale co z francuskim, hiszpańskim czy japońskim...? Czy istnieją jakieś statystyki, które pomogą określić, które wsparcie? P.S.: Czy powinienem używać może gównianego tłumaczenia automatycznego, jeśli nie znam native speakera, czy też powinienem o tym zapomnieć?


title: Jak radzić sobie z niezbędnymi obejściami w oprogramowaniu?

text: Nawet przy szczegółowych specyfikacjach wymiany danych między programami komputerowymi istnieje prawdopodobieństwo, że dane generowane przez starsze wersje programów nie są w 100% zgodne ze specyfikacją lub że wykorzystują stare, niejasne funkcje, które niewiele osób wie, jak je zaimplementować. W rezultacie firmy muszą utrzymywać bibliotekę „nieparzystych próbek” do testowania swojego oprogramowania. W dobrym projektowaniu oprogramowania te dziwactwa można ograniczyć do małej warstwy bibliotek o nazwie „Warstwa abstrakcji”. Jednak większość warstw abstrakcji odcina zbyt wiele funkcji (aby zapobiec dotykaniu przez oprogramowanie wyższego poziomu niestabilnych części oprogramowania niższego poziomu). Czasami nie da się całkowicie ukryć niestabilnych części. Jakie są strategie radzenia sobie z takimi niezbędnymi obejściami? _(((Proszę wybaczyć moje słabe umiejętności językowe.)_


title: Czy konwertowanie/rzucanie wartości logicznej na int to dobry pomysł?

text: **Uwaga:** Mimo że zawiera Pythona, nie dotyczy konkretnie Pythona. Bardziej ogólnie chodzi o oczekiwanie określonego zachowania od języka, który niekoniecznie jest taki sam we wszystkich kompilatorach/interpreterach. * * * Natknąłem się więc na to pytanie: > Jak przekonwertować wartość logiczną na int w Pythonie? Czy mogę po prostu zrobić `int(mybool)`? Moją odpowiedzią było napisanie: 1 if mybool else 0 Moje rozumowanie było takie, że ślepe "rzucanie" na `int` będzie polegać na wewnętrznej implementacji kompilatora/interpretera. I kto wie, czy uruchomienie przez inny interpreter `int(mybool)` może zwrócić coś innego. Wyraźne określenie wartości „prawdziwej” i „fałszywej” zawsze da oczekiwane zachowanie. Jest to z pewnością coś, co można rozważyć w przypadku większości języków. Czy jestem zbyt wybredna? Wiem, że sam napisałem „int(mybool)” w przeszłości. I to pytanie sprawiło, że pomyślałem: czy to w porządku? Biorąc pod uwagę, że jest to bardzo częsty przypadek, czy kompilatory/interpretery są wystarczająco inteligentne, aby "właściwe" dla konwersji bool -> int? Teraz, w szczególnym przypadku języków kaczych, takich jak Python, `int(mybool)` może z pewnością być naprawdę złym pomysłem, ale inne języki są nieco jaśniejsze w pisaniu.


title: Czy istnieje dobry sposób na zakomunikowanie intencji, że klasa zawiera tylko metody referencyjnie przezroczyste?

text: Moje miejsce pracy głównie używa C# do pisania kodu. Próbuję znaleźć dobry sposób na wskazanie, że klasa z metodami referencyjnie przezroczystymi ma być referencyjnie transparentna (tj. mając ten sam zestaw argumentów, zawsze otrzymasz tę samą wartość zwracaną) dla przyszłych opiekunów. Rozważałem po prostu użycie klas statycznych dla klas, które mają zawierać tylko referencyjnie przejrzyste metody, ale otrzymały odpowiedź od moich kolegów, ponieważ wolą podejście do testowania jednostkowego, w którym wszystkie klasy zależne są odcięte, do czego używają konstruktora DI. Nie widzę wady w nieodcinaniu referencyjnie przezroczystych funkcji do testów jednostkowych, ponieważ i tak są one prawie zawsze w pamięci, ale nie byłem w stanie przekonać do tego moich kolegów. Nasze nazwy klas używają typowych nazw wzorców obiektowych, takich jak DTO lub Factory lub Controllers and Models dla przestrzeni nazw. Nie znam żadnych nazw wzorców w OO, które wskazywałyby na rodzaj intencji, do której zmierzam (tj. Nie wprowadzać operacji z efektami ubocznymi lub w zależności od rzeczy, które czytają z bazy danych lub systemu plików).


title: Synchronizowanie obiektów ze zdalnym serwerem i buforowanie w pamięci lokalnej

text: Jaka jest najlepsza metoda synchronizacji obiektów (jako JSON) ze zdalnym serwerem z lokalnym buforowaniem? Mam kilka obiektów, które będą po prostu zwykłym tekstem z dodatkowymi meta-danymi. Myślałem o może dołączeniu „daty ostatniej modyfikacji” zarówno dla magazynu lokalnego, jak i magazynu zdalnego. Można to następnie wykorzystać do określenia, który obiekt jest najnowszy. Na przykład, mimo że obiekty będą zapisywane zarówno lokalnie, jak i zdalnie, czasami użytkownik może nie mieć dostępu do Internetu, serwer może być wyłączony lub może mieć inną liczbę rzeczy. W takim przypadku data ostatniej modyfikacji magazynu zdalnego zostanie przywrócona do poprzedniej daty. Pamięć lokalna pozostanie bez zmian. W tym momencie użytkownik może wyjść z aplikacji, a po ponownym załadowaniu aplikacji sprawdzi daty ostatniej modyfikacji lokalnych i zdalnych magazynów i podejmie decyzję. Czy jest coś, czego mi w tym brakuje? Czy istnieje lepsza metoda, z której mógłbym skorzystać?


title: Jak ważne jest używanie tego samego języka dla klienta i serwera?

text: Oceniałem rozwiązania architektoniczne dla projektu mobilnego, który będzie miał usługę internetową / aplikację oprócz natywnych aplikacji i przyjrzałem się różnym bibliotekom, frameworkom i stosom, takim jak Meteor, który jest rodzajem „struktury pakietów otwartego stosu” , jest ściśle powiązany z Node.js. Dużo się mówi o korzyściach płynących z używania tego samego języka zarówno po stronie klienta, jak i serwera, a ja tego nie rozumiem. Mogę zrozumieć, jeśli chcesz odzwierciedlić cały stan aplikacji internetowej zarówno na kliencie, jak i na serwerze, ale masz problemy ze znalezieniem innych wygranych... Wydajność przepływu pracy? Próbuję zrozumieć, dlaczego parytet językowy klient/serwer jest uważany za świętego Graala. Dlaczego parzystość języka klient/serwer ma znaczenie w tworzeniu oprogramowania?


title: Sprzeczność warstwowej konstrukcji i globalny dostęp do danych na potrzeby raportowania analitycznego

text: Tworząc aplikację (aplikację mobilną na Androida), nasz zespół zawsze stara się wykorzystywać najlepsze praktyki programistyczne, takie jak interfejsy, warstwowanie i separacja obaw. Jeśli chodzi o raportowanie zdarzeń analitycznych z naszej aplikacji, wymagania czasami zmuszają nas do wysyłania zdarzeń z danymi, które są przechowywane i zarządzane przez wiele różnych „komponentów” aplikacji. Niektóre z tych danych nie są bezpośrednio dostępne w komponencie/warstwie, która wykonuje raportowanie, **ani w żadnej centralnej lokalizacji** w aplikacji. Wydaje mi się, że jest to sprzeczne ze wszystkimi wysiłkami architektury i projektowania, które zostały podjęte podczas tworzenia aplikacji. **Moje pytanie**: Jaki jest właściwy sposób rozwiązania tego problemu? Czy problem dotyczy wymagań, które otrzymaliśmy, czy jest to powszechny problem, który czasami wymaga aplikacji warstwowej/modułowej, aby wszystko było „globalne”? jeśli tak, jaki jest sposób na rozwiązanie tego problemu, jednocześnie czerpiąc korzyści z najlepszych praktyk programistycznych?


title: Jak radzić sobie z nadmiarem informacji lub jak przetrwać?

text: Lepiej wyjaśnię moje pytanie. Walczę z tym od dłuższego czasu Za każdym razem, gdy chcę coś przeczytać do np. książki na java, wtedy znajduję tak wiele rzeczy, jak wiele samouczków, wiele ebooków, których nie jestem w stanie zdecydować, który wybrać. Poświęcam trochę czasu na czytanie jednego , potem 2 i tak dalej, aż w końcu odchodzę i nic nie zyskuję. Lubię dawne czasy, kiedy mieliśmy niewiele zasobów, jak jedna twarda książka i przynajmniej skończyłem ją od początku do końca i wiele zyskałem, ale teraz jest tak wiele informacji, że umysł skacze z jednego źródła do drugiego i nic nie zyskuje, co powinienem robić


title: Dlaczego wielokrotne wywołania konstruktora tej samej klasy z poziomu konstruktora nie działają?

text: Proszę spojrzeć na następujący fragment: public class Foo { int digit; Nazwa ciągu; Foo (int d, String n) { this(d); // nie można wykonać obserwowania. //błąd czasu kompilacji: wywołanie konstruktora musi być pierwszą instrukcją w konstruktorze //this(n); } Foo (int p) { cyfra = p; } Foo (Ciąg q) { nazwa = q; } Jaki byłby powód tego ograniczenia? Rozumiem, dlaczego wywołanie Constructor (zarówno w Constructor, jak i w metodzie) musi być pierwszą instrukcją - obiekt powinien zostać poprawnie zainicjowany przed użyciem. To, czego nie otrzymuję, to kompilator, który nie pozwala na wywoływanie wielu konstruktorów tej samej klasy z poziomu konstruktora. Nie widzę problemu z tą konstrukcją - zarówno pod względem inicjalizacji, jak i niezmienników. Byłoby wspaniale, gdyby ktoś mógł rzucić trochę światła na to, czego tu brakuje... Dzięki!


title: Jak wytłumaczyć DependencyProperty za pomocą analogii ze świata rzeczywistego?

text: 1. Jak wyjaśnić DependencyProperty za pomocą analogii ze świata rzeczywistego? 2. Dlaczego jest to potrzebne?


title: Tworząc bibliotekę opublikowaną na CodePlex, jak „złe” byłoby, gdyby projekty testów jednostkowych opierały się na produktach komercyjnych?

text: Rozpocząłem projekt na CodePlex dla implementacji serwera WebDAV dla .NET, dzięki czemu mogę hostować serwer WebDAV we własnych programach. Jest to zarówno projekt naukowo-badawczy (WebDAV + część serwerowa), jak i projekt, z którym myślę, że mogę się dobrze bawić, zarówno jeśli chodzi o jego tworzenie, jak i używanie. Widzę jednak potrzebę wykonania mockowania typów w celu prawidłowego testowania jednostkowego. Na przykład będę polegał na HttpListener dla części serwera WWW serwera WebDAV, a ponieważ ten typ nie ma interfejsu i jest zapieczętowany, nie mogę łatwo z niego tworzyć atrap ani skrótów. Chyba że używam czegoś takiego jak TypeMock. Więc jeśli użyłbym TypeMock w projektach testów jednostkowych w tej bibliotece, jak złe byłoby to dla potencjalnych użytkowników? Projekty są wykonane w C# 3.5 dla .NET 3.5 i 4.0, a pliki projektu zostały stworzone w Visual Studio 2010 Professional. Rzeczywiste biblioteki klas, do których odwołujesz się w swoim oprogramowaniu, oczywiście nie byłyby obciążone czymś takim zdalnie, tylko biblioteki testów jednostkowych. Jakie są twoje przemyślenia na ten temat? Jako przykład mam w mojej starej bazie kodu, która jest prywatna, możliwość inicjowania serwera WebDAV za pomocą tego: var server = new WebDAVServer(); To konstruuje i jest właścicielem wystąpienia HttpListener wewnętrznie i chciałbym zweryfikować za pomocą testów jednostkowych, że jeśli pozbędę się tego obiektu serwera, wewnętrzny odbiornik zostanie usunięty. Jeśli z drugiej strony użyję przeciążenia w miejscu, w którym przekazuję mu obiekt nasłuchujący, ten obiekt nie powinien zostać usunięty. Poza wystawieniem wewnętrznego obiektu słuchacza na świat zewnętrzny, czego trochę nie lubię, jak mogę w dobry sposób upewnić się, że obiekt został usunięty? Dzięki TypeMock mogę wyśmiewać części tego obiektu, nawet jeśli nie jest dostępny przez interfejsy. Alternatywą byłoby dla mnie zawijanie wszystkiego w opakowujące klasy, nad którymi mam pełną kontrolę.


title: Klonowanie strony internetowej

text: Jestem freelancerem w witrynie z ofertami pracy dla freelancerów i rozpocząłem pracę z klientem w projekcie z umową na tej witrynie z ofertami pracy dla freelancerów. Do tej pory wszystko jest OK.Najpierw zacząłem ale rozwijanie niektórych problemów i domyśliłem się, że chce przeszukać stronę już istniejącą on-line,dziś w kolejnym zadaniu pracy stwierdziłem, że klient chce sklonować stronę z innej nie przeglądanej i nie jest administratorem witryny do klonowania. Dostarczy mi inny szablon (nie to samo logo i kolor), ale z mniej więcej taką samą treścią. Moje pytania brzmią: * Jeśli ta metoda klonowania jest nielegalna, czy jego obowiązkiem będzie zajęcie się kwestiami prawnymi? Może stworzę dla niego tylko kod po stronie serwera. Czy to oznacza, że będę ponosił jakąkolwiek odpowiedzialność, jeśli administrator innej witryny zapyta go o naruszenie praw autorskich? * Czy mogę to zrobić w sposób bezbolesny? Zrobię mu kod, a kiedy umowa zostanie sfinalizowana, czy będzie mógł uruchomić stronę pod własną nazwą i domeną? Proszę o wprowadzenie pewnych modyfikacji, czy mogę mieć poważną odpowiedź i proszę o odpowiedź, jeśli jesteś pewien, a może miałeś ten sam problem ...


title: Czy powinienem dokonać refaktoryzacji dużych funkcji, które w większości składają się z jednego wyrażenia regularnego?

text: Właśnie napisałem funkcję, która obejmuje około 100 linii. Słysząc to, prawdopodobnie masz ochotę opowiedzieć mi o pojedynczych obowiązkach i nakłonić mnie do refaktoryzacji. To też jest mój instynkt, ale oto problem: funkcja _robi_ jedną rzecz. Wykonuje złożoną manipulację ciągami, a treść funkcji składa się głównie z jednego pełnego wyrażenia regularnego, podzielonego na wiele wierszy, które są udokumentowane. Jeśli podzielę wyrażenie regularne na wiele funkcji, czuję, że faktycznie _stracę_ czytelność, ponieważ skutecznie przełączam języki i nie będę w stanie skorzystać z niektórych funkcji oferowanych przez wyrażenia regularne. Oto moje pytanie: **Jeśli chodzi o manipulowanie ciągami znaków za pomocą wyrażeń regularnych, czy duże ciała funkcji nadal stanowią antywzorców?** Wygląda na to, że nazwane grupy przechwytywania służą bardzo podobnemu celowi do funkcji. Swoją drogą mam testy dla każdego przepływu przez wyrażenie regularne.


title: Jaki jest najlepszy sposób przechowywania funkcji w bazie danych?

text: biorąc na przykład aplikację, która zawiera **Firmy**, a wraz z upływem czasu potrzebnych jest coraz więcej funkcji. Zwykle trzymam wszystko w tabeli `Firmy`, ale raczej otrzymuję trochę danych wejściowych, gdy zaczynam nowy projekt i zastanawiam się, czy powinienem trzymać je w tabeli `CompanyFeatures`: ![tutaj wpisz opis obrazu]( http://i.stack.imgur.com/4qCrV.png) Czy powinienem mieć 2 tabele, czy ten przepływ wystarczy? Mam to samo dla użytkowników, każdy użytkownik ma swoją własną funkcję włączania/wyłączania (kiedy funkcja może być specyficzna dla użytkownika), czy powinienem nadal je tam przechowywać, czy też powinienem utworzyć tabelę `UserFeatures`, aby przechowywać takie informacje? Za każdym razem, gdy dostaję firmę, wszystkie powiązane z nią informacje muszą być „sklejone”, ale jest to łatwe dołączenie, a zapytanie zostanie zapisane w pamięci podręcznej dla następnego żądania... Odpytywanie bazy danych nigdy nie powinno stanowić problemu, moje pytanie brzmi: więcej o wzorcach projektowych i czy takie informacje powinny mieć swoje miejsce.


title: Czy można zbudować pojedynczą grę do uruchomienia na Facebooku i Google+?

text: Zostałem poproszony przez mojego klienta o zbudowanie gry na Facebooka. Gra byłaby czymś podobnym do Mafiawars.com, gdzie gra jest hostowana na serwerze i uruchamiana przez ramkę na Facebooku. Rzecz w tym, że po kilkudniowych negocjacjach z klientem i przy finalizacji wymagań wspomniał o czymś dziwnym. Powiedział, że jeśli gra odniosła sukces na Facebooku, to możemy dodać ją również do Google+. Myślałem, że miał na myśli, że opracujemy nową wersję dla Google+, ale odmówił, twierdząc, że gra powinna obsługiwać obie strony i nie zapłaci dwa razy za tę samą grę. Teraz nie tworzyłem wcześniej ani gier na Facebooka, ani Google+, więc nie wiem, czy jest możliwe zbudowanie jednej gry na Facebooka/Google+. Jak byś zareagował na taki wymóg? Jak zaprojektowałbyś taką aplikację? **Uwagi** 1. Potwierdziłem z klientem, że nie rozmawiał o używaniu Open ID, chciał pełnej integracji (udostępnianie postów, prośby znajomych itp.) 2. Naprawdę nie chcę stracić tego klienta z wielu powodów (zgodził się nawet na wydłużenie czasu projektu, aby zrekompensować mi czas potrzebny na nauczenie się API Facebooka/Google+)


title: Kiedy używać zmiennej interfejsu = nowa zmienna klasy OOP

text: Widziałem często, że ludzie używają tego kodu, takiego jak interfejs IAnimal { void die(); } class Kot : IZwierzę { void die() { ... } void meow() { ... } } IZwierzę anZwierzę = new Cat(); Kot aCat= nowy Kot(); C# wie na pewno, że anAnimal.die() działa, ponieważ die() jest zdefiniowane w IAnimal. Ale nie pozwoli ci wykonać anAnimal.meow(), mimo że jest to Cat, podczas gdy aCat może wywołać obie metody. Dlaczego i kiedy powinniśmy napisać taki kod: IAnimal anAnimal = new Cat(); Jaka jest zaleta?


title: Używając modułu GPLv3 Python, czy cały mój projekt będzie musiał być na licencji GPLv3?

text: Obecnie pracuję nad małym projektem, który planuję wydać na licencji open-source (jeszcze nie zdecydowałem, który). Mam pytanie, czy jeden z używanych przeze mnie modułów Pythona jest na licencji GPLv3. Skoro nie dokonuję żadnych modyfikacji w bibliotece (używam jej tak, jak jest), czy nadal mogę licencjonować swój projekt na wybranej przeze mnie licencji, czy też będę zmuszony zrobić z niego GPLv3?


title: Jak zmierzyć sukces małego projektu programistycznego?

text: Jestem częścią 7-osobowego zespołu programistycznego, który wspiera kilkutysięczną firmę. Nasz zespół opracowuje szybki proces przeglądu, aby zmierzyć sukces projektu oprogramowania. Projekty są w większości wewnętrzne, co oznacza, że nasi „klienci” to najczęściej inni pracownicy. Projekty są dość małe (zwykle od 100 do 1000 godzin). Nasz proces przeglądu będzie musiał obejmować kilka aspektów, prawdopodobnie w tym: * Kwestionariusz wysłany do klientów (wypełniony przez osoby pełniące różne role, jeśli to możliwe, takie jak menedżerowie, którzy mogą nie być użytkownikami oprogramowania, oraz użytkownicy ), biorąc pod uwagę łatwość użytkowania, jakość dokumentacji, reakcję na incydenty, stosunek jakości do ceny, niezawodność. * Koszt w porównaniu z budżetem. Przyjrzymy się również szacowanemu czasowi rozwoju w porównaniu z czasem rzeczywistym. * Bezpieczeństwo, jeśli dotyczy. * Łatwość utrzymania, na przykład łatwość zalogowania się jako konkretny użytkownik w celu replikacji problemów i łatwość śledzenia kodu. * Dokumentacja techniczna, taka jak instrukcje konfigurowania środowisk programistycznych i danych testowych. Czy jest coś rażącego, co przegapiłem, lub coś, co powinno mieć szczególnie silne (lub słabe) skupienie?


title: Dlaczego kolumny tabeli Core Data sqlite zaczynają się od „Z”?

text: Patrzyłem na tabelę sqlite, którą generuje Core Data i zauważyłem, że wszystkie kolumny tabeli zaczynają się od „Z”. Zdaję sobie sprawę, że jest to szczegół implementacji, ale byłem ciekawy, dlaczego tak jest i czy była w to zamieszana decyzja projektowa. Ktoś wie lub zgaduje dlaczego? Oto przykładowy schemat wyjściowy bazy danych sqlite Core Data: sqlite> .schema CREATE TABLE ZPOST ( Z_PK INTEGER PRIMARY KEY, Z_ENT INTEGER, Z_OPT INTEGER, ZPOSTID INTEGER, ZUSER INTEGER, ZCREATEDAT TIMESTAMP, ZTEXT VARCHAR ); CREATE TABLE ZUSER ( KLUCZ PODSTAWOWY Z_PK INTEGER, Z_ENT INTEGER, Z_OPT INTEGER, ZUSERID INTEGER, ZAVATARIMAGEURLSTRING VARCHAR, ZUSERNAME VARCHAR ); CREATE TABLE Z_METADATA (KLUCZ PODSTAWOWY Z_VERSION INTEGER, Z_UUID VARCHAR(255), Z_PLIST BLOB); CREATE TABLE Z_PRIMARYKEY (KLUCZ PODSTAWOWY Z_ENT INTEGER, Z_NAME VARCHAR, Z_SUPER INTEGER, Z_MAX INTEGER);


title: Który styl atrybutu routingu internetowego interfejsu API jest preferowany?

text: Możesz to zrobić w ten sposób: [Route("api/DeliveryItems/{ID:int}/{CountToFetch:int}")] ...nazywając to tak: http://localhost:28642/api/deliveryitems/N /N ...który ma tę zaletę, że atrybut routingu dokładnie dokumentuje, jakich argumentów potrzebuje metoda. Lub możesz to zrobić w ten sposób: [Route("api/DeliveryItems")] ...nazywając to w ten sposób: http://localhost:28642/api/deliveryitems?ID=N&CountToFetch=N ...co ma tę zaletę jasnego „oddzielenia obaw” (lub może „oddzielenia kontekstu” lub „oddzielenia intencji”), aby informacje o ścieżce to jedno, a argumenty to drugie i nigdy nie spotykają się ze sobą (w ciągu atrybutu routingu, w każdym razie). Jakieś ważne powody, by wybrać jeden styl zamiast drugiego?


title: Czy GPL pozwala każdemu na uzyskanie oprogramowania GPL bez płacenia za to?

text: Znalazłem na sprzedaż fajny motyw WordPress (GPL). Znam kogoś, kto go kupił. Mam 2 pytania: 1. Czy firma sprzedająca ma obowiązek wysłania kodu źródłowego komukolwiek (klient lub nie) o to poprosi? 2. Czy osoba, która go kupiła, może dać mi kopię za darmo, którą mógłbym wykorzystać w produkcji?


title: Sposoby zbierania informacji o wydarzeniach z Internetu

text: Jakie są najlepsze sposoby zbierania informacji o wydarzeniach (dowolnego typu) z internetu? Pamiętaj, że różne strony internetowe będą prezentować informacje w różny sposób. Myślałem o „inteligentnych” robotach indeksujących, ale może to okazać się niezwykle trudne, po prostu ze względu na bardzo różne sposoby, w jakie różne witryny prezentują swoje informacje. Potem myślałem o przejrzeniu oficjalnych kanałów twitterowych organizacji, ludzi znających się na wydarzeniach itp. i poszukaniu hashtagu wydarzenia, złapaniu tweeta i przeanalizowaniu go, aby uzyskać istotne informacje o wydarzeniu. Informacje, które chcę zebrać, to: **Data** i **Godzina** Wydarzenia, **Adres**, pod którym odbywa się Wydarzenie, oraz wszelkie **osoby (lub inne znane osoby) uczestniczące** w wydarzeniu ( Jeśli w ogóle). Powodem, dla którego tu pytam, jest moja nadzieja, że doświadczeni ludzie otworzą mi oczy na rzeczy, które przegapiłem, a których jestem pewien.


title: Czy istnieje limit liczby wątków, które mogą być odradzane jednocześnie?

text: Wczoraj natknąłem się na to pytanie: Jak mogę wywołać robocopy w skrypcie Pythona, aby zbiorczo kopiować wiele folderów? I pomyślałem, że może to być dobre ćwiczenie dla wielowątkowości. Pomyślałem o spawnowaniu tylu wątków, ile plików trzeba skopiować, a każda procedura ma system obsługi wyjątków, aby zapobiec awarii całego procesu kopiowania (i dziennika - używając mutexa w pliku dziennika - jeśli wystąpił błąd). Moje pytanie: **Czy istnieje limit liczby wątków, które możesz odrodzić prawie jednocześnie? Jeśli tak, jaki jest czynnik ograniczający?** Moje pytanie dotyczy pulpitu PC, ale z zadowoleniem przyjmuję każdą odpowiedź dotyczącą innego sprzętu (systemy wbudowane, klastry rachunku różniczkowego itp.).


title: Jaka jest analiza kolejności następujących elementów (przy użyciu listy liczb pierwszych)

text: Mam następujący program: Iteruj `x` od 1 do `N`. Sprawdź, czy `x` jest liczbą pierwszą. Jeśli tak, dodaj go do listy liczb pierwszych. Sposób, w jaki sprawdzam, czy jest to liczba pierwsza, polega na iterowaniu przez bieżącą listę liczb pierwszych i sprawdzaniu, czy mogą one równomiernie podzielić `x`. Jaka jest analiza kolejności tego programu? Nie sądzę, że jest to „O(n^2)”, ponieważ rosnąca lista liczb pierwszych z pewnością nie rośnie w tempie „n”. Ja też nie jest to `O(nlog(n))`. Jak przeprowadzić analizę kolejności funkcji?


title: Jaka jest różnica między funkcjonalnym programowaniem relacyjnym a programowaniem funkcjonalnym?

text: Po przeczytaniu zarówno tego wątku, jak i powiązanego artykułu, nie rozumiem, jak FRP (funkcjonalne programowanie relacyjne) różni się od programowania funkcjonalnego (FP). Czy FRP zwiększa lub zastępuje FP? Czy FRP można zaimplementować jako bibliotekę w języku FP?


title: Czy porównanie kompilatora OO z kompilatorem/optymalizatorem SQL jest prawidłowe?

text: Obecnie zajmuję się dużo rozwojem SQL w mojej nowej pracy, gdzie tak jak wcześniej zajmowałem się aplikacjami desktopowymi zorientowanymi obiektowo. Ciągle biegam po bardzo dużych skryptach (tysiące linii) i chcę w jakiś sposób dokonać refaktoryzacji. Widzę, że SQL jest innym rodzajem bestii i prawdopodobnie dobrze jest mieć te duże skrypty w większości, ale wyjaśniając mi to, ludzie również upierają się, że cały _pomysł_ na refaktoryzację jest zły. Takie rzeczy, jak kompilator .NET, są w rzeczywistości obciążone refaktoryzowanym kodem i że wielka ściana kodu jest bardziej wydajna i lepsza niż kod zaprojektowany z myślą o ponownym użyciu, czytelności i skalowalności. Innym argumentem jest to, że kompilatory OO są prawie niebezpiecznie nieefektywne i nie mają wydajnego zarządzania pamięcią lub wykonują zbyt wiele instrukcji procesora w porównaniu ze starszymi "prostszymi" kompilatorami i w porównaniu do SQL. Czy te skargi są uzasadnione? Nawet _jeśli_ jakiś kompilator, taki jak kompilator C, jest nieco bardziej „wydajny” (cokolwiek to oznacza na tak wysokim poziomie bez oglądania kodu), czy chciałbyś pisać aplikacje w C zamiast C# lub Java? Czy porównanie kompilatora OO z kompilatorem/optymalizatorem SQL jest nawet prawidłowe?


title: Czy programiści wiedzą, czym właściwie zajmują się inżynierowie?

text: Tworzenie oprogramowania jest często skontrastowane z tradycyjnymi gałęziami inżynierii, najczęściej inżynierią lądową lub mechaniczną. Na przykład: * „Tworzenie oprogramowania to nie inżynieria, to rzemiosło!” * "Tworzenie oprogramowania to nie inżynieria, ale powinno być!" Czy programiści rozumieją, czym zajmują się inżynierowie i jak to robią? Przynajmniej czy rozumieją to na tyle dobrze, aby móc dokonać świadomego porównania z tym, co robią twórcy oprogramowania?


title: Czy to normalne, że firma ma programistów na tak sztywnym harmonogramie?

text: Więc pracuję w tej pracy od kilku miesięcy. Jestem trochę sfrustrowany, ponieważ najlepiej pracuję od 2 do 7. W poprzednich pracach przychodzę o 9:30-10:00 i wychodzę o 7. Niektóre firmy są z tym w porządku, inne nie. . Ale moja obecna firma nalega, żebym był tam o 8:30. Każde odstępstwo od tego to wielka sprawa. Czy to typowe? Mam kolegów, którzy są bardziej od 9:30 do 6:30, od 10:00 do 7:00… ale może to tylko kultura startupowa? Nie rozumiem dlaczego, biorąc pod uwagę, że nie spotykam się z klientami itp., jaka może być korzyść z posiadania tak sztywnych rzeczy. Nie rozumiem też, dlaczego, jeśli czasami pojawia się 15-20 minutowa zmienność, dlaczego ludzie po prostu nie zakładają, że dostosuję się, kiedy odejdę... Czy są to nierozsądne oczekiwania jako programista, czy coś mi brakuje?


title: Uwierzytelnianie za pomocą If/Else

text: Czy najlepszym sposobem na zabezpieczenie „Panelu administracyjnego” dla osób zalogowanych w mojej aplikacji internetowej jest użycie instrukcji If/Else? if($_SESSION['logged_in'] == true) { include '../styles/templates/admincp/header.php'; dołącz '../style/templates/admincp/content.php'; dołącz '../style/templates/admincp/footer.php'; } else { include '../style/templates/login.php'; } Czy w ten sposób „profesjonaliści” (tacy jak twórcy CMS itp.) stosują ten styl uwierzytelniania?LUB czy istnieje zupełnie lepsza trasa i metoda do instrukcji If/Else do uwierzytelniania stron dla zalogowanych użytkowników?


title: Jak zapoznać się z „co dzieje się pod Javą”?

text: Nie studiowałem CS ani IT. Właśnie zostałem programistą, teraz pracuję z Javą. Właściwie, odkąd pracuję teraz z dużą firmą piszącą wysoce skalowalne aplikacje internetowe, myślę, że muszę być lepszy w szczegółach. Nie rozumiem, co dzieje się pod Javą. Wydajność Java, Java po stronie serwera mogą być modnymi słowami?!! Jestem bardzo ubogi z tymi bardziej niskopoziomowymi szczegółami, ale nie wiem, gdzie uczciwie szukać. Zacząłem szukać niektórych słów kluczowych w Amazon, skończyłem czytając książki takie jak "programista pragmatyczny", "czysty kod", "kod kompletny", których IMO nie są tym, czego szukam. Czy mógłbyś podać mi materiały edukacyjne (książki, artykuły, posty na blogu, szkolenia online) w tej sprawie? Przeczytałem też ten post: Zbliżanie się do wewnętrznych elementów Java/JVM Ale myślę, że potrzebuję wstępnego kroku przed wskoczeniem do OpenJDK, prawda?!


title: Jaka jest różnica między typowaniem zależnym a umowami?

text: Jaka jest różnica między zależnymi językami wpisanymi a językami, takimi jak Spec# i Eiffel, które umożliwiają określenie „kontraktów” dla funkcji w kodzie dla warunków wstępnych i końcowych? Czy pisanie zależne jest w zasadzie czysto funkcjonalną wersją „umów” Eiffla? Z tego, co rozumiem, języki wpisywane zależnie pozwalają określić warunki przed i po funkcji przy użyciu logiki predykatów jako części typu. Koncepcja kontraktów Eiffla wydaje się podobna, ale oparta na programowaniu imperatywnym, a nie funkcjonalnym.


title: Synchronizacja danych podstawowych (usuwanie) za pomocą niestandardowej usługi internetowej REST

text: Muszę zsynchronizować mój lokalny stos danych rdzeniowych z serwerem, na którym pod osłonami działa trwałe przechowywanie danych. (Przejrzałem inne posty tutaj i w SO na podobne tematy) Moje wymagania: 1. Synchronizacja w jedną stronę. Oznacza to, że mój serwer jest zawsze aktualizowany, a moi klienci po prostu muszą otrzymywać przyrostowe delty, które wprowadzają do swojego podstawowego stosu danych. 2. Serwer może dowolnie wstawiać nowe rekordy, modyfikować istniejące, a nawet je usuwać. Wolałbym nie używać RestKit, ponieważ sam mogę wykonywać zadania związane z tworzeniem zapytań i aktualizowaniem stanu lokalnego. Nie potrzebuję do tego dodatkowej biblioteki. Moje rozwiązanie: zachowuję lokalnie datę ostatniej aktualizacji (UTC). Okresowo wysyłam tę datę do mojego serwera, a mój serwer odpowiada danymi, które muszę zaktualizować lub wstawić, na podstawie sygnatury czasowej serwera dla każdego rekordu. **Mój problem:** Nie wiem, jak radzić sobie z usuwaniem. Jak poradziłbym sobie z usuwaniem w takim scenariuszu? Jeśli usunę rekord z serwera, skąd klienci będą wiedzieć, że należy usunąć również ten rekord. Myśli? Przychodzi mi do głowy kilka skomplikowanych sposobów na zrobienie tego (np. nie usuwaj tak naprawdę rekordu, nie śledź usuniętych rekordów oddzielnie itp.), ale szukam najprostszego.


title: Dlaczego wskaźniki do literałów nie są możliwe?

text: Odwołanie do literału jest możliwe tylko wtedy, gdy odwołanie jest zadeklarowane jako stałe. Ale dlaczego wskaźnik do stałego obiektu nie jest możliwy w przypadku literałów? tj. int const& ref = 5;// Ale dlaczego ta sama funkcja nie jest dostępna dla wskaźnika, wskazującego na stały obiekt?


title: Najlepsze praktyki dotyczące komentarzy nad metodami w aplikacji Grails?

text: Piszę aplikację Grails i nie jestem pewien, jaka jest najlepsza praktyka w odniesieniu do komentarzy poza blokami metod. Zrobiłem trochę badań i wydaje się, że istnieją sprzeczne poglądy na temat tego, jak i kiedy należy używać tego rodzaju komentarzy. W wielu kodach źródłowych, które widziałem, wydaje się, że nad każdą metodą znajdują się komentarze szczegółowo opisujące, co robi ta metoda. Nie jestem pewien, czy Grails powinien być inny? Moje pytanie brzmi, czy powinienem mieć komentarz nad każdą metodą w moich kontrolerach, usługach i obiektach domeny? tj. /* * Ta metoda wyświetla stronę indeksu */ def index(){ render view : "index" }


title: Czy podczas TDD można kiedykolwiek pisać kod bez testów?

text: Czy jest kiedykolwiek uzasadnione pisanie kodu produkcyjnego bez pisania dla niego testów podczas wykonywania Test Driven Development?


Jakie są najczęstsze błędy i antywzory popełniane przez programistów użytkowników NHibernate? Wyjaśnij, dlaczego są to złe praktyki, lub podaj link do zasobu do dalszego czytania. **Na przykład:** * Jednym z antywzorców wspólnych dla nowych programistów NHibernate jest jednokrotne użycie tożsamości/natywnego POIDu zamiast stylu ORM. Przeczytaj więcej tutaj...


title: Czy to zapach kodu, jeśli przedmiot dużo zna swojego właściciela?

text: W naszej aplikacji Delphi 2007 używamy wielu następujących konstrukcji FdmBasic:=TdmBasicData(FindOwnerClass(AOwner,TdmBasicData)); FindOwnerClass przemieszcza hierarchię Owner bieżącego składnika w górę w celu znalezienia określonej klasy (w przykładzie TdmBasicData). Wynikowy obiekt jest przechowywany w zmiennej Field FdmBasic. Używamy tego przede wszystkim do przekazywania modułów danych. Przykład: podczas generowania raportu dane wynikowe są kompresowane i przechowywane w polu obiektu Blob tabeli dostępnej za pośrednictwem modułu danych TdmReportBaseData. W osobnym module naszej aplikacji istnieje funkcjonalność umożliwiająca pokazanie danych z raportu w formie Paged przy użyciu ReportBuilder. Główny kod tego modułu (TdmRBReport) używa klasy TRBTempdatabase do konwertowania skompresowanych danych obiektów blob na różne tabele, które można wykorzystać w kreatorze raportów środowiska uruchomieniowego Reportbuilder. TdmRBReport ma dostęp do TdmReportBaseData dla wszystkich rodzajów danych związanych z raportami (typ raportu, ustawienia obliczeń raportu itp.). TRBTempDatabase jest skonstruowany w TdmRBReport, ale musi mieć dostęp do TdmReportBasedata. Jest to teraz zrobione przy użyciu powyższej konstrukcji: konstruktor TRBTempDatabase.Create(aOwner: TComponent); rozpocznij dziedziczone Utwórz (właściciel); FdmReportBaseData := TdmRBReport(FindOwnerClass(Właściciel, TdmRBReport)).dmReportBaseData; end;{- .Create } Mam wrażenie, że oznacza to, że TRBTempDatabase zna bardzo dużo swojego właściciela i zastanawiałem się, czy to jakiś zapach kodu lub Anti-wzorzec. Jakie są twoje przemyślenia na ten temat? Czy to zapach kodu? Jeśli tak, jaki jest lepszy sposób?


title: Dlaczego tak wiele witryn woli „git rebase” od „git merge”?

text: Jedną z zalet korzystania z DVCS jest przepływ pracy **edit-commit-merge** (w porównaniu z **edit-merge-commit** często wymuszanym przez CVCS). Umożliwienie zarejestrowania każdej unikalnej zmiany w repozytorium niezależnie od fuzji zapewnia, że DAG dokładnie odzwierciedla prawdziwy rodowód projektu. Dlaczego tak wiele stron internetowych mówi o chęci „unikania zatwierdzeń scalających”? Czy scalanie przed zatwierdzeniem lub zmiana bazy po scaleniu nie utrudnia wyizolowania regresji, cofnięcia wcześniejszych zmian itp.? **EDYTUJ:** Punkt wyjaśnienia: Domyślnym zachowaniem DVCS **jest** tworzenie zatwierdzeń scalania. Dlaczego tak wiele miejsc mówi o chęci zobaczenia liniowej historii rozwoju, która ukrywa te zatwierdzenia scalające?


title: Doradztwo projektowe dotyczące budowania wtykowych komponentów w AngularJS

text: Obecnie pracuję nad zespołem, który opracował kilka bardzo podobnych aplikacji internetowych we flashu i chce, aby zostały przeniesione do JavaScript. Chcą również, aby jedna wiązka aplikacji obsługiwała wszystkie te aplikacje, ponieważ wszystkie są bardzo podobne. Aplikacje są dość standardowe. Każda aplikacja składa się z zestawu widżetów selekcji/filtrowania oraz zestawu widżetów wyświetlania (wizualizacji). Wybieranie rzeczy na „pasku bocznym” zmieni to, co jest wyświetlane w obszarze wizualizacji. Czasami zaznaczanie rzeczy w obszarze wizualizacji wpłynie na to, co znajduje się w widżetach zaznaczania/filtrowania. Zarówno zestaw wyborów, jak i zestaw widżetów wyświetlania może się zmieniać w zależności od aplikacji, więc wszystkie muszą być napisane, aby można je było podłączyć. Pracowałem nad tym i wpadłem na pomysł, że plik konfiguracyjny oparty na JSON zostanie załadowany do mojej aplikacji nowej generacji i zasadniczo określi, co będzie zawierać aplikacja i jakie interakcje są dozwolone. Ładuję plik "aplikacji" do uprzęży aplikacji JavaScript i ten plik informuje moją aplikację, jakie widżety selekcji wybrać z zestawu predefiniowanych widżetów selekcji (aplikacje mogą współużytkować te same widżety selekcji). To mniej więcej tyle, ile udało mi się osiągnąć, jeśli chodzi o implementację. to działa, ale myślę, że przed nami trudniejsze wyzwanie. Teraz muszę zacząć współpracować, komunikując się ze sobą i komunikując się ze sobą w sposób oparty na konfiguracji, aby nowe aplikacje mogły być tworzone bez pisania kodu dla klienta. Moim obecnym planem jest zdefiniowanie widżetów wizualizacji wyświetlania w tym samym pliku aplikacji, w którym aktualnie definiuję widżety wyboru, a do komunikacji między tymi dynamicznie ładowanymi komponentami będę miał zestaw mapowań wywołań zwrotnych z każdego widżetu wyboru do każdego wyświetlacza- widget wizualizacji i odwrotnie. Widżety wyboru przejrzą plik, zobaczą, które funkcje mają wywoływać w przestrzeni nazw na poziomie aplikacji w określonych zdarzeniach, i ustawią te funkcje jako wywołania zwrotne dla zdarzeń widżetów. Widżety Display-Visualization zrobią to samo. Oto moje pytania: 1. Czy to brzmi jak rozsądne podejście? Czy istnieje lepszy sposób na zrobienie czegoś takiego? Czy istnieje jakiś wzorzec projektowy, którego ludzie używają w takich sytuacjach, o którym mogę nie wiedzieć? 2. Robię to w AngularJS, ale NAPRAWDĘ nie znam AngularJS. Rozumiem scoping i niektóre dyrektywy, ale jestem bardzo nowy w frameworku i nie wiem, jaki byłby „sposób” implementacji tego w AngularJS, więc szkic projektu oparty na kątach byłby bardzo przydatny. Na przykład jedną rzeczą, która mnie martwi, jest to, że projekt, który mam powyżej, jest mocno oparty na zdarzeniach i wywołaniach zwrotnych, co, jak rozumiem, tak naprawdę nie jest sposobem Angulara. Z drugiej strony wiele widżetów (oba typy) nie może być kątowych. Będą to wykresy liniowe, siatki danych, mapy, wykresy bąbelkowe itp. Nie mam doświadczenia niezbędnego, aby naprawdę zrozumieć, jak i czy mój projekt powinien się zmieniać w oparciu o moje ramy.


title: Dlaczego moje środowisko IDE nie kompiluje/buduje w tle?

text: Dziś rozwijam się na dość złożonym komputerze, ma wiele rdzeni, dyski SSD i co tam. Mimo to, przez większość czasu, gdy programuję komputer, na pewno nic nie robi. Kiedy potrzebuję skompilować i uruchomić/wdrożyć nieco skomplikowany projekt, w najlepszym razie zajmuje to kilka sekund. Czemu? Teraz, gdy żyjemy coraz bardziej w „erze natychmiastowej”, dlaczego nie mogę nacisnąć F5 w Visual Studio i od razu uruchomić/wdrożyć moją aplikację? Kilka sekund może nie brzmieć tak źle, ale to wciąż tarcia poznawcze i czas, który się sumuje, i szczerze mówiąc, programowanie jest mniej przyjemne. Jak więc kompilacja może być natychmiastowa? Cóż, ludzie mają tendencję do edytowania plików w różnych zespołach, co by było, gdyby Visual Studio/IDE stale kompilowało/i budowało wszystko, co zmodyfikowałem w dowolnym momencie, kiedy było to właściwe. Cholera, gdyby chcieli iść naprawdę wysoko, mogliby zrobić kompilację dla każdej klasy. Kompilacja może nie działać, ale wtedy może po prostu dyskretnie nic nie robić (z wyjątkiem dodawania komunikatów o błędach do okna błędu). Z pewnością dzisiejszy komputer mógłby poświęcić jeden lub dwa rdzenie do tego zadania, a jeśli ktoś uzna to za irytujące, może zostać wyłączony opcjonalnie. Wiem, że jest prawdopodobnie tysiąc problemów technicznych i pewne wymyślne kopiowanie w tle, które musiałyby zostać rozwiązane, aby było to płynne i praktyczne, ale z pewnością sprawiłoby to, że programowanie byłoby bardziej płynne. Czy jest jakiś praktyczny powód, dla którego ten scenariusz nie jest możliwy? Czy zużycie ciągłego pisania plików binarnych byłoby zbyt duże? Czy zestawy nie mogą być przechowywane w pamięci do czasu wdrożenia/uruchomienia?


title: Indeksowanie danych w C++. Czy konstruktor może w razie potrzeby utworzyć nowy wpis lub zwiększyć istniejący w innym miejscu w większym obiekcie, który go zawiera?

text: Indeksuję plik par kluczy i liczę liczbę wystąpień. Plik brzmi: A B C A B A D E B F i tak dalej. Wygląda na to, że odpychanie struktury lub obiektu z powrotem do wektora jest dobrym miejscem do rozpoczęcia, które można sortować przy pierwszym lub drugim wpisie itp. Gdy mam związek, A B lub B A, myślę, że mogę zacząć liczyć, gdy para się powtarza , bo to, jakie pary z czym i jak często się pojawiają, jest ciekawą rzeczą, którą staram się znaleźć. Gdybym miał bardzo sprytny konstruktor dla klasy lub struktury zawierającej wpis po prawej stronie i licznik, mógłbym mieć obiekt meta, który wygląda jak wpis struct { valueAndCount ID; wektor"<"valueAndCount">" pairsWith; }; Która sama w sobie byłaby użyta w klasie wektorowej indexObj { vector"<"entry">" index; bool istnieje (wartość ); }; W danym wektorze pairsWith pushback, jeśli podałbym wartość konstruktorowi valueAndCount, czy byłoby właściwe, aby sprawdził, czy wpis dla tej wartości już istnieje? Jeśli nie, śmiało utwórz nowy z licznikiem = 1. Jeśli już istnieje, zwiększ tę (inną) liczbę, a następnie uwolnij się jako zbędny? A może szukanie od konstruktora instancji do struktury, która go zawiera, jest zbyt bałaganiarskie?


title: Czy prawidłowe jest utrzymywanie zawsze takich samych numerów wersji wszystkich komponentów?

text: Planujemy użyć konfiguracji, która wykorzystuje kilka modułów do uzupełnienia całej aplikacji, przykładowe moduły to: * Rdzeń (kod współdzielony przez wszystkie inne moduły) * Serwer * Klient (Windows, OS X, Linux) * Klient ( iOS) * Klient (Android) * Narzędzie #1 * Narzędzie #2 A teraz, kiedy przygotowujemy się do wydania naszego pierwszego wydania, nadszedł dobry moment, aby pomyśleć o schemacie numeracji. Zdefiniowaliśmy użycie formatu major.minor.patch, ale zmagamy się z jednym pytaniem: **Czy każdy moduł powinien mieć ten sam numer wersji co najnowsza wersja, a co za tym idzie, czy powinniśmy podbijać numery wersji, jeśli nie było aktualizacji do ich?** Przykład ilustrujący: 1) Załóżmy, że wszystkie nasze komponenty działają w wersji 0.1.0 (wczesna faza rozwoju), po wykonaniu znaczącej aktualizacji, czy wszystkie komponenty powinny zostać przeniesione do wersji 0.2.0? Działa to również w drugą stronę: 2) Załóżmy ponownie, że początkowo każdy komponent działa w wersji 0.1.0, a teraz wprowadzamy istotną aktualizację (może to być przeróbka GUI) na kliencie Android, jeśli następnie wydamy wersję 0.2.0 dla _każdy_ składnik, mimo że inne wersje nie otrzymały żadnej aktualizacji? I być może najtrudniejszy: 3) Załóżmy, że nadal uruchamiamy 0.1.0 jeden bardzo składnik na początku i dowiadujemy się, że narzędzie nr 2 ma błąd i musimy go naprawić do 0.1.1, jeśli następnie zaktualizujemy każdy składnik do 0.1.1? * * * Obecnie wątpię, czy powinniśmy dążyć do poprawnego wersjonowania, czy raczej postawić na kompatybilność? Osoby spoza zespołu programistów będą najprawdopodobniej oczekiwać, że wszystkie moduły będą działały na przykład w wersji 0.3.0, podczas gdy my, jako programiści, jesteśmy nieco zdezorientowani i być może czujemy się nieswojo z podbiciem numeru wersji, podczas gdy moduł nie miał żadnych zmian w to. Jak najlepiej sobie z tym poradzić? * * * **Edytuj** , o czym zapomniałem wspomnieć, ale co może zmienić opinie, to fakt, że wszystkie wydania będą robione w sposób zautomatyzowany. Na Github/git określone zatwierdzenie zostanie oznaczone jako wersja major.minor.patch, a następnie system budowania (tutaj: Travis CI) pobierze tag i automatycznie zbuduje każde wydanie i opublikuje je gdzieś, jeśli jest to konieczne i/lub pożądane.


title: Wzorce projektowe w Delphi

text: Delphi ma kilka problemów z implementacją niektórych wzorców projektowych, ponieważ brakuje mu pewnych funkcji, takich jak wielokrotne dziedziczenie i brak czystych klas abstrakcyjnych. Czy są jakieś dobre zasoby lub „wzorce adaptacyjne”, aby przekonwertować niektóre lub wszystkie wzorce projektowe z książki GoF na aplikacje Delphi?


title: Kto organizuje Twój kod MATLAB?

text: Po przeczytaniu http://stackoverflow.com/questions/2326609/how-to-organize-matlab-cod, miałem kolejne pytanie. Jeśli pracujesz w grupie programistów MATLAB, kto wymusza organizację współdzielonego kodu MATLAB i plików mat projektu? Na przykład, czy masz dedykowanego informatyka MATLAB, czy też najstarszy programista wydaje wytyczne, których każdy musi przestrzegać, czy też wszyscy zgadzają się przestrzegać systemu? W mojej małej grupie każda osoba ma swój własny „system”. Kod MATLAB i pliki mat projektu są albo umieszczane w stosie na dysku współdzielonym, albo na własnych komputerach. Trudno odtworzyć pracę wykonaną przez inną osobę, a nawet zlokalizować jej kod. Było wiele dobrych sugestii, jak się zorganizować. Ale wygląda na to, że ktoś musi sprawić, by pociągi kursowały na czas. Kto to robi w Twojej grupie?


title: Lepszy mechanizm komunikacji serwera z klientem przez HTTP

text: Mam jeden serwer z kilkoma klientami. Chcę wysyłać wiadomości do konkretnego klienta w określonym czasie. Klienci nie powinni odpytywać serwera. jakie są dobre wzorce i praktyki, aby rozwiązać ten problem?


title: Porównywanie wielu nowych zmiennych ze starą

text: Czasami wpadam w sytuację, w której muszę utożsamić dwie nowe zmienne ze starą. Która z poniższych (jeśli w ogóle) jest dobrą praktyką (czytelność kodu w.r.t lub jakikolwiek inny czynnik) pod jakimi warunkami? a=b; c=b; lub a=b; c=a; Zauważ, że `a`, `b` i `c` to tylko nazwy wybrane w tym przykładzie.


title: dlaczego len nie jest zarezerwowanym słowem kluczowym w pythonie?

text: dlaczego funkcje takie jak **`len`** i **`max`** nie są zarezerwowanym słowem kluczowym w Pythonie. Poniżej znajdują się jedyne zastrzeżone słowa http://docs.python.org/2/reference/lexical_analysis.html#keywords


title: Jak zsynchronizować obiekty modelu klienta i serwera?

text: Posiadamy aplikację klient-serwer z grubym klientem (GWT). Istnieją prezentery MVP po stronie klienta (kontrolery MVC), które przechowują odniesienia do niektórych obiektów wyświetlanych w GUI. Niektóre działania użytkownika powodują, że te obiekty są aktualizowane na serwerze. Następnie możemy wysłać zaktualizowane obiekty z powrotem do klienta i ponownie przypisać je prezenterowi. Problem polega na tym, że zazwyczaj na kliencie znajduje się kilka odniesień do obiektu (Listy, HashMaps itp.) i trudno je wszystkie zaktualizować. Innym podejściem nie jest aktualizacja referencji, ale aktualizacja samego obiektu, np. skopiuj wszystkie właściwości z obiektu serwera do obiektu klienta. Ale jeśli obiekt jest złożony, to też nie jest łatwe. Które podejście jest lepsze? A może czegoś mi brakuje?


title: Jak biblioteki takie jak DirectX mają się do sterowników?

text: Zawsze byłem ciekaw, jak zaimplementowane są biblioteki takie jak DirectX, OpenGL i OpenAL. Czy używają jakiegoś zunifikowanego API dostarczanego przez system operacyjny? Porozmawiaj bezpośrednio z jądrem? Może sterowniki sprzętowe zapewniają zunifikowane API? A może dostawcy dostarczają własne backendy do takich bibliotek? Nawet całe wdrożenia takich bibliotek? A może takie biblioteki samodzielnie obsługują różne sterowniki?


title: Czy wykonanie zadania wewnątrz warunku jest uważane za zapach kodu?

text: Wiele razy muszę napisać pętlę, która wymaga inicjalizacji warunku pętli i aktualizacji za każdym razem, gdy pętla się wykonuje. Oto jeden przykład: List<String> currentStrings = getCurrentStrings(); while(currentStrings.size() > 0) { doThingsThatCanAlterCurrentStrings(); obecneStrings = pobierzBieżąceStrings(); } Jedną z rzeczy, których nie lubię w tym kodzie, jest zduplikowane wywołanie `getCurrentStrings()`. Jedną z opcji jest dodanie przypisania do warunku w następujący sposób: List<String> currentStrings; while( (currentStrings = getCurrentStrings()).size() > 0) { doThingsThatCanAlterCurrentStrings(); } Ale chociaż mam teraz mniej duplikatów i mniej kodu, _czuję_, że mój kod jest teraz trudniejszy do odczytania. Z drugiej strony łatwiej jest zrozumieć, że zapętlamy się na zmiennej, która może zostać zmieniona przez pętlę. Jaka jest najlepsza praktyka w takich przypadkach?


title: Jakie słowo opisuje języki, które mają klasy i dziedziczenie?

text: Jakiego słowa używa się do opisania typu języków programowania, które zapewniają jawną składnię do definiowania klas i obsługują dziedziczenie? Na przykład: „Język ______, taki jak C++, Java, C# lub D”. Ciągle myślę "zorientowany obiektowo", ale obejmuje to również języki takie jak Lua i JavaScript, które nie do końca są tym, o czym myślę. Jestem pewien, że istnieje określenie definitywne dla tej grupy języków, po prostu nie wiem, co to jest.


title: Czy usługi w tle systemu wpływają na testy porównawcze języków?

text: Dzisiaj przeglądałem kilka blogów na temat Ruby i Pythona. Lojalista Pythona napisał kilka linijek kodu z pętlą, aby pokazać, że Python jest szybszy niż Ruby, z podobnym kodem. Znalazłem też blog ucznia Rubiego, który twierdzi, że to jest złe i również przesłał próbkę kodu i wyniki testów porównawczych. Zastanawiam się, czy programy działające w tle lub procesy w tle mogą czasami utrudniać wyniki i możemy nie uzyskać dokładnego scenariusza porównawczego. Proszę, popraw mnie jeśli się mylę.


Zajmuję się zarządzaniem rozwojem aplikacji mobilnych w mojej firmie, a obecnie buduję „bibliotekę” urządzenia mobilnego do testów. Zasadniczo chcemy mieć własne reprezentatywne urządzenie dla każdego z systemów operacyjnych, dla których rozwijamy, obecnie iOS (tylko iPhone), Blackberry i Android. Symulatory idą tylko tak daleko, ale wprowadzam w proces krok do testowania oprogramowania na samych urządzeniach. Problem, który znajdujemy, dotyczy Androida. Nie sądzę, aby ktokolwiek z nas kiedykolwiek naprawdę rozumiał, jak podzielona jest cała platforma, dopóki nie zaczęliśmy szukać urządzeń do zdobycia. Poczekamy na wydanie v2.3 Androida, ale jakie produkty wybrać? Czy jesteśmy najbardziej popularni według udziału w rynku? Czy otrzymujemy niewielką gamę produktów według specyfikacji od najmniej do najpotężniejszej? Staramy się uniknąć konieczności zarządzania tuzinem różnych urządzeń w celu przetestowania każdej aplikacji, jeśli nie ze względu na koszty, choćby ze względu na powtarzające się ubytki czasu. Jak zarządzasz testowaniem swojego oprogramowania Android na urządzeniach fizycznych? AKTUALIZACJA: Aby nadać kontekst temu, o co proszę, tworzone aplikacje służą wyłącznie celom edukacyjnym i nie ma planów korzystania z żadnych funkcji sprzętowych samych urządzeń. Po prostu wyświetlamy treści na różne sposoby: e-booki, pytania testowe, karty flash itp., które mogą, ale nie muszą być treściami do pobrania. A więc żadnych kamer, GPS, zarządzania treścią sterowanego przez użytkownika ani niczego w tym rodzaju; tak samo niezależny od urządzeń, jak tylko możemy to zrobić.


title: Scala jako język programowania generycznego

text: W artykule „Rozszerzone studium porównawcze wsparcia językowego dla programowania generycznego” autorstwa Garcii i in. podane jest interesujące porównanie funkcji języków programowania dla programowania generycznego: ![tu wstaw opis obrazka](http://i.stack.imgur.com/8kNzR.png) z krótkim wyjaśnieniem terminologii: ![tu wstaw opis obrazka ](http://i.stack.imgur.com/LuQLi.png) Czy ktoś może przetestować obsługę Scali dla programowania generycznego w tym frameworku? Tj. dodaj kolumnę w pierwszej tabeli z objaśnieniami, jeśli to możliwe.


title: Problem bezpieczeństwa związany z upublicznieniem mojego kodu w serwisie GitHub

text: Tworzę duży serwis społecznościowy/forumowy i chciałbym wgrać swój kod na GitHub, aby mieć przynajmniej jakąś kontrolę nad nim (ponieważ nie mam nic innego niż plik .rar jako kopię zapasową, nawet SVN ), aby inni mogli wnieść swój wkład do projektu, a także być może wykorzystają go, aby moi potencjalni przyszli pracodawcy zobaczyli część mojego kodu jako swego rodzaju program nauczania. Ale teraz zastanawiam się i jestem zaskoczony, że nikt wcześniej o tym nie wspominał, to aspekt bezpieczeństwa. Czy publikowanie kodu strony internetowej nie jest **_HUGE_** luką w zabezpieczeniach? To tak, jakby dać potencjalnemu hakerowi lub każdemu, kto chciałby znaleźć możliwy potencjalny exploit, nawet biorąc pod uwagę, że krytyczne pliki nie zostały przesłane (hasła do baz danych, skrypty uwierzytelniające itp.). Oczywiście, że na GitHub są wgrane miliony projektów i nikt nie znajdzie mojego „przypadkiem”. Ale gdyby tego szukali, to rzeczywiście by tam było. Konkluzja: mój problem nie dotyczy praw autorskich lub licencji, ale innych osób, które znajdują exploity w mojej witrynie. Coś mi tu brakuje?


title: Czy właściwe jest prowadzenie złożonego projektu konfiguracji i migracji systemu w przedsiębiorstwie w sposób podobny do projektu deweloperskiego Scrum?

text: Dopiero zaczynam wdrażanie dużego systemu obejmującego całe przedsiębiorstwo, który ma złożone wymagania i wielu interesariuszy. Firma przeszła proces oceny i przetargu na wysokim poziomie i była zdeterminowana, aby kupić wysoce konfigurowalny „gotowy” produkt, zamiast budować całkowicie zindywidualizowany system. System zastąpi kilka istniejących systemów i będzie wymagał znacznej migracji danych. Myślę, że wdrożenie tego systemu (które ma potrwać ponad 2 lata) mogłoby przebiegać podobnie jak projekt rozwoju oprogramowania Scrum. Pierwsze sprinty miały na celu zbudowanie minimalnej wymaganej funkcjonalności (we wszystkich obszarach funkcjonalnych), a następnie iteracyjne pogłębianie poziomu funkcjonalności zgodnie z opiniami interesariuszy. Myślę, że to zmniejszy ryzyko projektu i pomoże zapewnić równowagę potrzeb interesariuszy w dostępnym czasie. Historyjki użytkowników są nadal takie same, tylko aby je wdrożyć, musimy pracować w ramach ograniczeń systemu przedsprzedażowego. Jeśli chodzi o „budowanie rzeczy”, zamiast pisać niestandardowy kod, zespół będzie konfigurował gotowy pakiet, pisał skrypty konwersji danych i tym podobne (i powinno to być znacznie szybsze!). Czy to brzmi jak rozsądne podejście? Czy podejście Agile ma tu sens?