title: Historie użytkowników z elementami projektu w Scrum

text: Wdrażamy przepływ pracy Scrum i staram się owinąć głowę wokół historyjek użytkownika, kiedy są ukończone, iteracji itp. Jedną z rzeczy, które często robimy, jest praca nad historią we wczesnej iteracji, aby działała w pełni, ale "brzydki". Używamy zwykłych przycisków, żadnych obrazów, tylko tekst, aby pokazać, że działa tak, jak powinien. Pokazujemy naszemu klientowi, upewniamy się, że jest zadowolony z tego, jak to działa, a następnie zwykle używamy dostarczonych przez niego obrazów, aby dokończyć projekt funkcji i ją uzupełnić. Czy w tym przypadku uzupełnilibyśmy historyjkę użytkownika, gdy jest ona kompletna funkcjonalnie, i stworzylibyśmy drugą historyjkę użytkownika, która mówi coś w stylu „jako użytkownik chcę, aby xyz był atrakcyjny wizualnie”, aby zająć się fazą projektowania? A może po prostu przeniesiemy historyjkę użytkownika z pierwszej iteracji do późniejszej części projektu, gdy już zdobędziemy elementy projektu i będziemy mogli je ukończyć? Jeśli tak jest, widzę, że kończymy tylko jedną lub dwie historie w pierwszych kilku iteracjach i TONĘ pięter w ostatnich kilku iteracjach. Jak wszyscy radzicie sobie z tym scenariuszem?


title: Jak zaimplementować wzorzec symulacji dla repozytorium?

text: Powiedzmy, że mam repozytorium funkcji. Funkcje te współpracują z obiektami biznesowymi w bazie danych, CMS lub innym API innej firmy. Na przykład moje repozytorium współdziała z wirtualnymi plikami i dokumentami w systemie zarządzania dokumentami. Chcę mieć możliwość zaimplementowania trybu symulacji w moim repozytorium, tak aby podczas wykonywania poleceń chciałem zobaczyć jego wynik bez robienia czegokolwiek. Ma to na celu zmniejszenie ryzyka, że ktoś wykona serię poleceń w moim repozytorium i zrobi coś niebezpiecznego. Chcę, aby najpierw zobaczyli dane wyjściowe i potwierdzili przed wykonaniem. Moje pytanie brzmi, jakie są dobre wzorce do zaimplementowania trybu symulacji dla repozytorium? Przychodzi mi do głowy kilka z mojej głowy: zawijaj wszystkie obiekty biznesowe w inną klasę, tak aby podczas wywołania File.Delete faktycznie wywoływana klasa opakowania i sprawdzanie w trybie symulacji była włączona. Problem polega na tym, że wiele bibliotek i zestawów SDK innych firm nie pozwala na tworzenie podklas ich obiektów biznesowych. Jak byś przeszedł w trybie symulacji (za każdym razem, gdy powstaje obiekt?). Inną opcją byłoby zaimplementowanie SimulatedRepository. Nie chcę jednak duplikować żadnego istniejącego kodu w repozytorium. Oznacza to, że nie chcę symulować wszystkiego do tego stopnia, że nic nie robi, chcę tylko symulować polecenia tworzenia, aktualizowania i usuwania, a nie logikę biznesową. Może muszę zaimplementować kolejną warstwę w swojej aplikacji? Sugestie byłyby mile widziane. Zastanawiam się również, czy ta filozofia projektowania jest popularna w większości środowisk korporacyjnych i jak to się robi. Myślę, że umożliwienie administratorom przeprowadzenia symulacji i pomiaru wyników przed ich faktycznym wykonaniem jest kluczowe w scenariuszu o krytycznym znaczeniu, w którym pracujesz z danymi innego klienta.


title: Czy ograniczenie sesji do bezwzględnego adresu IP może mieć duży wpływ na sieci komórkowe?

text: Nasza witryna obecnie ogranicza sesję opartą na plikach cookie do adresu IP, który został pierwotnie przesłany w nagłówku HTTP Set-Cookie. W przeszłości adres IP użytkownika rzadko się zmieniał, więc nie stanowiło to większych niedogodności. Jednak niektórzy z naszych klientów uzyskujących dostęp za pośrednictwem urządzeń 3G doświadczają awarii sesji z powodu tego ograniczenia IP. Niewiele wiem o infrastrukturze sieciowej wykorzystywanej w sieciach komórkowych. Czy większość dostawców próbuje kierować połączenia do wspólnego publicznego adresu IP, aby zachować zgodność z witrynami takimi jak nasza, czy też powinienem zamiast tego rozważyć ograniczenie sesji do zakresu adresów IP?


title: Projektowanie oprogramowania przez pseudokodowanie?

text: Czy znasz dobry sposób na zaprojektowanie (tj. zapisanie) oprogramowania metodą opartą na pseudokodzie? Jestem nowy w projektowaniu oprogramowania i przeczytałem kilka informacji o UML. Moje skromne hierarchie klas są jak dotąd dobre, jednak po tym, jak robi się skomplikowana, zauważam, że przy „widzieniu całości” mogłem użyć innej struktury, aby uzyskać większą możliwość rozbudowy w przyszłości. Ponieważ Python jest dobry do tworzenia prototypów, jestem prawie w porządku z rozpoczęciem pisania, ale nie do końca. Próbowałem więc diagramów klas UML, ale nie wydają mi się one zbytnio pomocne. Problemy, które tam rozwiązuję, potrafię banalnie zrobić w głowie. Ale zauważam dodatkowe wymagania projektowe, gdy zaczynam pseudokodować rzeczywiste metody. Więc jeśli chciałbyś projektować za pomocą pseudokodu, jak byś to zrobił? Uważam, że dla mnie najlepiej działa metoda, która jest mniej więcej 1 do 1 z kodem. Ale większość oprogramowania UML nie pokazuje nawet kodu metody (w przeciwieństwie do obrazów w np. GoF). Ktoś twierdził, że UML służy tylko do dokumentacji i prezentacji, a nie do projektowania? Ja też mam to uczucie. Myślałem, że czysty UML i kilka uproszczonych szkiców tablicowych są sposobem na projektowanie oprogramowania, dopóki nie znalazłem w google Envision APDT. Czy rozwój zwinny jest czymś, na co powinienem zwracać uwagę, czy losowo nazywają to zwinnością - myślałem, że zwinne dotyczy tylko harmonogramu? A może projektuję niepoprawnie (za pomocą UML) - czy ktoś projektuje za pomocą pseudokodu? Jak znaleźć do tego dobre narzędzie?


title: Właściwa struktura danych dla komentarzy, które można komentować

text: Walczyłem z tym na poziomie architektonicznym. Mam obiekt, który można komentować, nazwijmy go `Post`. Każdy post ma unikalny identyfikator. Teraz chcę skomentować ten post i mogę użyć identyfikatora jako klucza obcego, a każdy postComment ma pole ItemID, które koreluje z postem. Ponieważ każdy post ma unikalny identyfikator, bardzo łatwo jest przypisać komentarze „Najwyższego poziomu”. Kiedy jednak komentuję komentarz, czuję, że potrzebuję teraz PostCommentComment, który dołącza się do identyfikatora PostComment. Ponieważ identyfikatory są przypisywane sekwencyjnie, nie mogę już po prostu używać ItemID do rozróżniania, gdzie w drzewie przypisywany jest komentarz. TJ. zarówno Post, jak i Post Comment mogą mieć identyfikator „5”, więc moja relacja klucza obcego jest nieprawidłowa. Wygląda na to, że może to trwać w nieskończoność, z PostCommentCommentComment itp. Jaki jest najlepszy sposób na rozwiązanie tego? Czy powinienem mieć w komentarzu pole o nazwie „IsPostComment” lub coś w tym rodzaju, aby wiedzieć, do której kolekcji należy dołączyć identyfikator? Wydaje mi się to najlepszym rozwiązaniem, jakie do tej pory widziałem, ale teraz czuję, że muszę wykonywać rekurencyjne wywołania bazy danych, które zaczynają być drogie. Oznacza to, że otrzymuję `Post` i wszystkie PostComments `where ItemID == Post.ID && where IsPostComment == true` Następnie biorę to jako kolekcję, zbieram wszystkie identyfikatory `PostComments` i przeprowadzam kolejne wyszukiwanie ` where ItemID == PostComment[all].ID && where IsPostComment == false`, a następnie powtarzaj w nieskończoność. Oznacza to, że wykonuję wywołanie dla każdej warstwy, a jeśli wywołuję 100 postów, mogę wykonać 1000 wywołań DB, aby uzyskać 10 warstw komentarzy każda. Jaki jest _właściwy_ sposób, aby to zrobić?


title: czy mogę sprzedać oprogramowanie korzystające z biblioteki GPL i innej licencjonowanej biblioteki BSD?

text: Po raz pierwszy mam do czynienia z problemami licencyjnymi, więc przepraszam, jeśli robię jakieś głupie przypuszczenia. Moim problemem jest to, że napisałem program w Pythonie, który używa PyQT dla GUI, a także używa innej biblioteki na licencji BSD. PyQT jest dostarczany z GPL v2 i GPL v3 oraz licencją komercyjną. Z tego, co do tej pory przeczytałem (łącznie z licencją GPL), rozumiem, że możesz sprzedawać oprogramowanie na licencji GPL. Istnieje jednak problem, jeśli nie jesteś oryginalnym autorem i ponownie używasz kodu źródłowego na licencji GPL. Oto moje pytania: 1. W moim przypadku, ponieważ używam PyQT, uważam, że powinienem licencjonować swój program również na GPL? Również w takim przypadku mogę sprzedać swoje oprogramowanie pod warunkiem, że wydam również kod źródłowy, prawda? 2. Jeśli PyQT jest wydany na licencji GPL, co, o ile rozumiem, daje ci swobodę sprzedaży oprogramowania, jeśli korzystasz z biblioteki, dlaczego udostępniają również licencję komercyjną? Czy to tylko w przypadku, gdy nie chcesz udostępniać kodu źródłowego? 3. Ponieważ używam również biblioteki, która jest licencjonowana na podstawie BSD, mogę licencjonować moje oprogramowanie tylko na licencji GPL i wspomnieć, że mój program korzysta z tej biblioteki w pliku License.txt i sekcji Informacje o moim programie?


title: Czy zmiana głównego programisty to dobry czy zły pomysł?

text: Pracuję w zespole, który od powstania kilka miesięcy temu jest płaski organizacyjnie. Mój menedżer jest osobą nietechniczną, a to oznacza, że cały nasz zespół jest odpowiedzialny za podejmowanie decyzji. Mój menedżer zaczyna zdawać sobie sprawę, że posiadanie wiodącego programisty ma wiele zalet, zarówno dla jego dobra (pojedynczy punkt kontaktowy i jedna osoba odpowiedzialna za zadania), jak i dla nas (rozwiązywanie sporów, zorganizowane doradztwo techniczne itp.). Ponieważ zespół był płaski, jedną z obaw jest to, że wybór jednego głównego dewelopera może zniechęcić pozostałych. Osoba niebędąca deweloperem zasugerowała mojemu menedżerowi, że zmiana głównego programisty jest możliwym sposobem na uniknięcie tego problemu. Jeden programista będzie prowadził w jednym miesiącu, inny w następnym i tak dalej. **Czy to dobry pomysł? Dlaczego lub dlaczego nie?** Pamiętaj, że oznacza to _wszystkich_ programistów — wszyscy programiści są dobrzy, ale niekoniecznie w równym stopniu nadają się do przywództwa. A jeśli **nie** , to jak radziłbym unikać tego podejścia bez wrażenia, że jest to jedynie samolubne powody?


title: Programowanie aplikacji o ustalonym rozmiarze okna dla systemu Mac OS X

text: Zajmuję się tworzeniem przyjemnej dla oka aplikacji, która ma zostać wydana w Mac App Store. Ze względu na intensywne wykorzystanie grafiki zaoszczędziłoby to dużo czasu na końcu interfejsu użytkownika, gdyby aplikacja mogła zostać wydana z głównym oknem dialogowym o stałym rozmiarze. Próbowałem przeprowadzić wyszukiwanie dotyczące zasad App Store w tej sprawie, ale niczego nie mogłem znaleźć. Czy dystrybucja aplikacji z ramkami o stałym rozmiarze [produktywność] jest dozwolona w App Store, jeśli są one zgodne z innymi wytycznymi projektowymi?


title: Dlaczego SQL BETWEEN zawiera?

text: Przedziały półotwarte (`[a,b)`, gdzie `x`należy do przedziału, jeśli `a <= x < b`) są dość powszechne w programowaniu, ponieważ mają wiele wygodnych właściwości. Czy ktoś może przedstawić uzasadnienie, które wyjaśnia, dlaczego `BETWEEN` w SQL używa interwału domkniętego (`[a,b]`)? To jest zwł. niewygodne dla dat. Dlaczego miałbyś zachowywać się w ten sposób „BETWEEN”?


title: Jakie popularne „najlepsze praktyki” nie zawsze są najlepsze i dlaczego?

text: „Najlepsze praktyki” są wszędzie w naszej branży. Wyszukiwarka Google pod kątem „najlepszych praktyk kodowania” daje prawie 1,5 miliona wyników. Pomysł wydaje się być dla wielu pociechą; po prostu postępuj zgodnie z instrukcjami, a wszystko będzie dobrze. Kiedy czytam o _najlepszej praktyce_ \- na przykład, właśnie przeczytałem kilka ostatnio w Clean Code - denerwuję się. Czy to oznacza, że powinienem _zawsze_ stosować tę praktykę? Czy są jakieś warunki? Czy są sytuacje, w których może to _nie_ być dobrą praktyką? Skąd mam wiedzieć na pewno, dopóki nie dowiem się więcej o problemie? Kilka praktyk wymienionych w _Czystym kodzie_ nie pasowało do mnie, ale szczerze nie jestem pewien, czy to dlatego, że są potencjalnie złe, czy może to tylko moje osobiste uprzedzenia. Wiem, że wielu wybitnych ludzi z branży technologicznej wydaje się uważać, że nie ma najlepszych praktyk, więc przynajmniej moje dręczące mnie wątpliwości stawiają mnie w dobrym towarzystwie. Liczba najlepszych praktyk, o których przeczytałem, jest po prostu zbyt duża, aby je tutaj wymienić lub zadać pojedyncze pytania, więc chciałbym sformułować to jako pytanie ogólne: **Które praktyki kodowania, które są powszechnie określane jako „najlepsze praktyki”, mogą być nieoptymalne lub nawet szkodliwe w pewnych okolicznościach? Jakie są te okoliczności i dlaczego sprawiają, że praktyka jest słaba?** Wolałabym posłuchać o konkretnych przykładach i doświadczeniach.


title: Wyjaśnienie danych satelitarnych z perspektywy programistów

text: Zacząłem czytać część 2 Wstępu do algorytmów i w sekcji **Struktura danych** autor/autorzy mówi w kontekście sortowania ciągu liczb: > W praktyce liczby do sortowania rzadko są izolowane wartości. Każdy jest > zwykle częścią zbioru danych zwanego rekordem. Każdy rekord zawiera klucz >, który jest wartością do sortowania, a pozostała część rekordu > składa się z danych satelitarnych, które zwykle są przenoszone razem z kluczem. > W praktyce, gdy algorytm sortujący permutuje klucze, musi także permutować dane > satelitarne. Jeśli każdy rekord zawiera dużą ilość danych > satelitarnych, często permutujemy tablicę wskaźników do rekordów, a nie samych rekordów, aby zminimalizować ruch danych. Czy ktoś może wyjaśnić, co autorzy mają tutaj na myśli? Dlaczego termin _dane satelitarne_? Jaka intuicja kryje się za tą koncepcją? A także, jak ta koncepcja odnosi się do platformy programistycznej wyższego poziomu, takiej jak Java?


title: Co robi &callback=?

text: Próbuję stworzyć zegar, który kiedykolwiek x minut będzie dzwonił do serwera, pobierał plik JSON i coś z nim robił. Zalety tego systemu nie są obecnie kwestionowane, pytanie dotyczy pobrania pliku JSON. Obecnie używam kimonify z KimonoLabs do tworzenia pliku JSON z innej witryny. Sugerują użycie funkcji kimonoCallback(data) { // zrób coś z danymi // upewnij się, że zakres tej funkcji jest globalny } $.ajax({ "url":"http://www.kimonolabs.com/ api/9ey3ljcs?apikey=d753b0c5546495826e7aaa5422f59e30&callback=kimonoCallback", "crossDomain":true, "dataType":"jsonp" }); W tym samym czasie szukałem innych metod i otrzymywałem błąd parsowania i znalazłem to rozwiązanie. Do tej pory oba używały `&callback=` co jest tak wyjątkowego w `&callback=`, co czyni go bardziej preferowanym niż coś takiego jak `.done()` lub `success:` Zgaduję, że ma coś do czynienia z Access-Control-Allow -Początek.


title: Która ciągła integracja dla Selenium 2 z TestNG

text: Więc mam projekt Selenium Automation (przy użyciu Mavena). Chciałbym móc ustawić testy na noc i ewentualnie wysłać raport codziennie do zespołu. Który CI byłby najbardziej odpowiedni dla pakietów TestNG.xml? Próbowałem Hudsona, ale nie mogłem znaleźć sposobu na wykonanie plików TestNG z kompilacji? Z góry dziękuję.


title: Jakie są konsekwencje pamięci podręcznej podczas korzystania z notyfikacjiDataSetChanged?

text: Używam Volley do zwracania JSON z API. Analizuję ten JSON i dodaję obiekty `StoreItem` do listy, a następnie używam adaptera do wyświetlania w widoku listy. Korzystam z funkcji pamięci podręcznej w Volley i zastanawiam się, jak podejść do kwestii usuwania/dodawania elementów. Wiem, że będę musiał wykonać żądanie POST/DELETE za pomocą Volley, aby faktycznie zapisać/zniszczyć elementy w bazie danych, ale ze względu na wrażenia użytkownika nie chcę ponownie ładować widoku za pomocą nowego żądania Volley. Nie chcę też, aby pamięć podręczna aktualizowała widok bez rozpoznania elementu, który właśnie został dodany/zniszczony. Dokumentacja Androida dotycząca notyfikacjiDataSetChanged mówi: > Powiadamia dołączonych obserwatorów, że dane źródłowe zostały zmienione > i każdy widok odzwierciedlający zestaw danych powinien się odświeżyć. W takim przypadku dane bazowe to pamięć podręczna, baza danych mojego serwera czy pozycje na liście? Daj mi znać, jeśli mogę wyjaśnić to pytanie.


title: Najlepszy typ danych do przechowywania zmiennej trójskładnikowej lub trójstanowej

text: _Zastrzeżenie: Wiem, że typy danych są nieco subiektywne w stosunku do języka skryptowego/programowania, którego używasz, lubię pisać w Pythonie z preferencji; chociaż cieszę się słysząc o dowolnym języku / implementacji._ Jaki jest najlepszy typ danych do przechowywania zmiennej trójstanowej? Coś zdolnego lub reprezentującego pozytywne, neutralne i negatywne. Przykład: liczby całkowite „-1”, „0”, „1”. * Za: Bardzo zwięzły. * Pro: Potencjalnie wydajny, może być przechowywany jako pojedyncza 2-bitowa liczba całkowita ze znakiem. * Pro: może być używany jako skala, taka jak mnożnik zmiennoprzecinkowy. Przykład 2: „0”, „null”, „1” (lub dowolna permutacja) * Pro: Nieneutralny przypadek użycia może być binarny. * Wada: Wymaga dynamicznego typu danych * Wada: Potencjalnie nie jest zwięzła. Przykład 3: `+`, `` (ciąg pusty), `-` * Pro: Bardzo zwięzły. * Wada: Może wykorzystywać logikę ciągów do określenia stanu. * Pro?: Intuicyjna prezentacja graficzna. Być może istnieje jakaś sprytna logika binarna, która może zrobić coś sprytnego, czego nawet nie mogę sobie wyobrazić, być może zbyt wiele opiera się na rozważaniach dotyczących przypadku użycia. Ponadto, czy są jakieś względy przy dostosowywaniu stanu trójargumentowego do przechowywania w aparacie bazy danych? Jak Innodb w celach informacyjnych.


title: Sposoby na aktualizowanie usługi zewnętrznej, która okresowo odpytuje Twoją usługę?

text: Przepraszam, jeśli tytuł jest trudny do zrozumienia, łatwiej będzie, jeśli opiszę scenariusz, aby przekazać pytanie. Mam usługę, która zbiera dane, wykonuje logikę biznesową i wykonuje wszystkie normalne rzeczy. Teraz muszę przeprowadzić integrację, która dostarczy zestaw danych (dla kont Sage) za pośrednictwem punktu końcowego (`http://example.net/import-feed`). Ten punkt końcowy może być sondowany przez usługę zewnętrzną w dowolnym momencie, aby pobrać najnowsze zmiany. Gdy część danych zostanie zaktualizowana, powiedz płatność lub datę, którą należy dodać do pliku danych. Ta płatność lub data mogą być zmieniane wielokrotnie, zanim usługa zostanie odpytana. Pytanie brzmi, jaka jest najlepsza metoda śledzenia **wszystkich** lub **ostatniej (prawdopodobnie najlepszej)** zmiany wprowadzonej w rekordzie/wierszu/danych i przesłania wszystkich tych zmian do pliku danych. Zewnętrzna usługa wyśle powiadomienia z powrotem do mojego serwisu, informując mnie, czy dodanie tej aktualizacji zakończyło się powodzeniem, czy nie. Obecnie jedyną metodą, o której mogę pomyśleć, jest śledzenie czasu ostatniej modyfikacji i czasu ostatniego importu oraz status mówiący, czy należy go zaimportować/zaktualizować. Te importy/aktualizacje byłyby następnie pobierane z pliku danych. Mam nadzieję, że rozumiesz problem, miałem trudności ze znalezieniem informacji na temat tego typu integracji. Może to po prostu ja nie używam poprawnych terminów. Więc jakie są na to metody?


title: Co oznacza 4 GL?

text: Natknąłem się na termin 4GL (język generacji) czytając o komponentach Oracle ADF Busniess. Chcę wiedzieć, czym dokładnie jest 4GL? Oto cytat z książki Oracle Fusion Guide: > Oracle ADF Business Components to warstwa usług biznesowych wybierana w > rozwoju aplikacji Oracle Fusion. W porównaniu z innymi warstwami trwałości, > ADF Business Components zapewnia wyjątkową, wbudowaną aplikację biznesową > funkcjonalność i maksymalnie deklaratywne doświadczenie, co czyni go idealnym > rozwiązaniem dla tych, którzy poszukują kompleksowego języka czwartej generacji (4GL) Java > Programowanie EE architektura.


title: RESTful API design - czy PUT powinien zwracać dane związane z obsługą?

text: Mam API, które pozwala użytkownikowi aktualizować stan systemu; oraz oddzielne wywołanie do pobierania aktualizacji stanu systemu od innych użytkowników. Czy byłoby sensowne ujednolicenie ich w ramach żądania PUT, w którym użytkownik zażądałby aktualizacji PUT z własną aktualizacją statusu i otrzymywałby aktualizacje statusu innych użytkowników? Moje rozwiązanie pozwoliłoby żądaniu PUT na wewnętrzne wywołanie metody żądania GET. Powodem tego jest to, że kiedy użytkownik aktualizuje swój status systemu, powinien być natychmiast informowany o statusie innych użytkowników i nie uważam, że posiadanie 2 oddzielnych żądań jest konieczne - i powinno być opcjonalne. Zamierzam zachować żądanie GET dotyczące statusu innych użytkowników, ponieważ aktualizacja statusu dla użytkownika niekoniecznie jest wymagana w celu uzyskania statusu innych użytkowników”, ale po zaktualizowaniu własnego statusu ważne jest, aby uzyskać informacje o innych użytkownikach.


title: Inna baza danych dla Członkostwa i naszych danych internetowych czy używasz tylko jednej?

text: Czy lepiej zachować nasze elementy członkostwa na DefaultConnection i utworzyć inne połączenie (inną bazę danych) dla naszych danych? A może tylko jedna baza danych dla wszystkich? Jeśli mam _MyAppContext_ i chcę migracji dla tego kontekstu, wygląda na to, że nie mogę mieć migracji dla _UserContext_ (innymi słowy, mogę po prostu migrować jeden kontekst) Tak więc, mając dwie różne bazy danych, które mogę migrować lub użytkowników (może migracja członkostwa jest dziwne) lub danych internetowych. Lub mogę zmieszać _UserContext_ i _MyAppContext_ w jednym _UserAndAppContext_ i migrować wszystko w jednym miejscu, ale to mieszanie również wydaje się dziwne. Jaki jest normalny sposób, aby to zrobić, jedna lub dwie bazy danych i co należy przenieść?


title: Niezmienna metoda w Javie

text: W Javie istnieje słowo kluczowe `final` zamiast słowa `const` w C i C++. W tych ostatnich językach istnieją metody mutowalne i niemutowalne, takie jak w odpowiedzi Johannesa Schauba - litb na pytanie Ile i jakie są zastosowania „const” w C++? > Użyj const, aby powiedzieć, że inne metody nie zmienią stanu logicznego tego > obiektu. > > > struct SmartPtr { > int getCopies() const { return mCopiesMade; } > }ptr1; > > ... > > int var = ptr.getCopies(); // zwraca mCopiesMade i określa, że > nie zmienia stanu obiektów. > Jak to się robi w Javie?


title: Dlaczego Javascript inaczej traktuje dni i miesiące?

text: Zauważyłem, że w JavaScript podczas tworzenia `Date` miesiące są liczone od zera, a dni nie. Na przykład: var foo = new Date(2012, 1, 1) produkuje 1 lutego 2012 r. Dlaczego to jest?


title: Obsługa formatów odpowiedzi REST

text: Wydaje się, że nowsze strony internetowe (a zwłaszcza API) wykorzystują formaty żądań, dodając oczekiwany format na końcu ścieżki URL. /ścieżka/do/zasobu.html /ścieżka/do/zasobu.json /ścieżka/do/zasobu.xml Czy mają jakieś problemy z tym podejściem? Czy istnieją jakieś badania lub zarysy zalet i wad takiego postępowania, zamiast po prostu wymieniać zasób bez rozszerzenia typu pliku?


title: Jaki jest sens alokacji dynamicznej w C++?

text: Naprawdę w ogóle tego nie rozumiałem. Mogę to zrobić, ale po prostu nie rozumiem, dlaczego miałbym chcieć. Na przykład programowałem wczoraj grę i ustawiłem tablicę wskaźników do dynamicznie przydzielanych małych wrogów w grze, a następnie przekazałem je do funkcji, która aktualizuje ich pozycje. Kiedy uruchomiłem grę, dostałem jeden z tych nieokreślonych błędów asercji, coś o nieistniejącym bloku pamięci, nie wiem. To był błąd w czasie wykonywania, więc nie powiedział, gdzie jest problem. Więc powiedziałem tylko, że to wkręć i przepisałem to ze statyczną instancją, tj.: while(n<4) { Enemy tempEnemy = Enemy(3, 4); wektor wroga.push_back(tempEnemy); n++; } updatePositions(&enemyVector); I od razu zadziałało idealnie. Pewnie, niektórzy z was mogą myśleć coś w stylu „Może gdybyś wiedział, co robisz”, a może „n00b nie może używać wskaźników L0L”, ale szczerze mówiąc, naprawdę nie możesz zaprzeczyć, że robią rzeczy zbyt skomplikowane, dlatego większość współczesnych języków całkowicie je zlikwidowała. Ale proszę kogoś... Jaki _JEST_ punkt alokacji dynamicznej? Na jaką korzyść to zapewnia? Dlaczego miałbym nigdy nie zrobić tego, co właśnie zrobiłem w powyższym przykładzie?


title: Używanie ng-init do inicjalizacji danych w kontrolerze Angular

text:
Ostatnio w jednym z naszych projektów natknąłem się na następujące. W jednym z naszych widoków mvc przekazują dane modelu do kontrolera Angular za pomocą dyrektywy ngInit In xxx.cshtml
 Zaznaczyłem, że zgodnie z dokumentacją Angulara dyrektywa ngInit nie służy do inicjalizacji kontrolerów. https://docs.angularjs.org/api/ng/directive/ngInit Zamiast tego zasugerowałem wysłanie identyfikatora w dyrektywie ngInit i
 Następnie użyj usługi $http [https://docs.angularjs.org/api/ng/service/$http], aby pobrać pozostałe dane z kontrolera Angular. Deweloper odrzuca mój pomysł mówiąc, że to szybciej po prostu wysłać wszystkie dane przez dyrektywę ngInit, zamiast wykonywać kolejne wywołanie, aby uzyskać dane do kontrolera Angular.Co myślicie o tym scenariuszu?Jedynym punktem, który mam teraz, jest to, że ten kod jest NIEPRAWIDŁOWY i to nie według standardów. Jak przekonałbyś programistę do podążania ścieżką, którą zasugerowałem. A może całkowicie się mylę?


title: Delphi IcmpPing Exception tylko w wydaniu, ok w debugowaniu

text: Poniższy kod jest testem procedury IcmpPing wywoływanej z biblioteki icmp dll. W debugowaniu działa dobrze, ale w wydaniu zgłasza błąd. Błąd jest spowodowany wywołaniem „IcmpCloseHandle”, ponieważ wywołanie IcmpSendEcho w jakiś sposób zmieniło uchwyt. Ma wrażenie problemu z pamięcią, ale jak dotąd jedyną poprawką, jaką znalazłem, jest pobranie kopii uchwytu i użycie jej do wywołania zamknięcia uchwytu. Ograniczyłem kod do minimum, w tym adres IP jako liczbę całkowitą (127.0.0.1 = $0100007F little endian). Co ja robię źle? Testowałem ten problem na 2010, XE2 i XE4 z tym samym problemem. Wszelkie pomysły * * * unit icmptest1; interfejs wykorzystuje // Windows, Wiadomości, SysUtils, Warianty, Klasy, Grafika, // Kontrolki, Formularze, Dialogi, StdCtrls; Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; typ TSunB = rekord spakowany s_b1, s_b2, s_b3, s_b4: bajt; koniec; TSunW = rekord spakowany s_w1, s_w2: słowo; koniec; PIPAddr = ^TIPAaddr; TIPAddr = liczba całkowita przypadku rekordu równa 0: (S_un_b: TSunB); 1: (S_un_w: TSunW); 2: (S_addr: długie słowo); koniec; Adres IP = Adres TIP; PICMP_ECHO_REPLY = ^ICMP_ECHO_REPLY; ICMP_ECHO_REPLY = spakowany rekord Adres : IPAddr; Status : ULONG; Czas podróży w obie strony : ULONG; Rozmiar danych : SŁOWO; Zarezerwowane : SŁOWO; Dane : Wskaźnik; koniec; PIP_OPTION_INFORMATION = ^IP_OPTION_INFORMATION; IP_OPTION_INFORMATION = spakowany rekord Ttl : bajt; Tos : bajt; Flagi : bajt; Rozmiar opcji : bajt; OpcjeDane : Wskaźnik; koniec; wpisz TForm34 = class(TForm) Button2: TButton; procedura Button2Click(Sender: TObject); private { Deklaracje prywatne } public { Deklaracje publiczne } end; funkcja IcmpCreateFile : HWnd; wywołanie standardowe; zewnętrzny 'icmp.dll'; function IcmpCloseHandle(const IcmpHandle : HWnd) : longbool; wywołanie standardowe; zewnętrzny 'icmp.dll'; function IcmpSendEcho(const IcmpHandle: HWnd; const DestinationAddress: IPAddr ;const RequestData: Wskaźnik;const RequestSize : WORD;const RequestOptions : PIP_OPTION_INFORMATION;const ReplyBuffer : Pointer;const ReplySize : DWORD;const TimeOut : DWORD;const TimeOut : DWORD;const wywołanie standardowe; zewnętrzny 'icmp.dll'; var Form34: TForm34; implementacja {$R *.dfm} {$T+} funkcja IcmpPing1(): Boolean; var dwSize : DWORD; DW: DWord; Adres IP: Adres TIP; EchoReply: ICMP_ECHO_REPLY; hICMP : HWnd; Hc: HWnd; początek Wynik := Fałsz; hICMP := IcmpCreateFile; Hc := hICMP; jeśli hICMP <> INVALID_HANDLE_VALUE to zacznij spróbować dwSize := SizeOf(ICMP_ECHO_REPLY) + 8; Adres IP.S_addr := $0100007F; // 127.0.0.1 ShowMessage(Format('1: %x',[hICMP])); DW := IcmpSendEcho(hICMP, IPAddr, nil, 0, nil, @EchoReply, dwSize, 500); hICMP := Hc; ShowMessage(Format('2: %x',[hICMP])); Wynik := (EchoReply.Status = 0); na koniec spróbuj IcmpCloseHandle(hICMP); z wyjątkiem e:exception do ShowMessage(e.Message); koniec; koniec; koniec; koniec; procedura TForm34.Button2Click(Sender: TObject); rozpocznij ShowMessage(IntToStr(Byte(IcmpPing1()))); koniec; koniec.


title: Jak ludzie piszą tyle linijek kodu dziennie?

text: Wiem, że wiele stron internetowych, gier wideo i innego oprogramowania zawiera tysiące linijek kodu i jest tworzonych przez jedną osobę w krótkim czasie. Jak ci ludzie są w stanie pisać tysiące LOC dzień po dniu? Dla mnie wydaje się to ogromną liczbą: rzadko piszę więcej niż kilkaset wierszy dziennie i często spędzam czas na _usuwaniu_ kodu zamiast dodawania LOC. Czy to naprawdę jest napisane ręcznie, czy używają generatorów kodu?


title: Pytanie, które zadano mi podczas rozmowy kwalifikacyjnej

text: Podczas rozmowy kwalifikacyjnej zadano mi następujące pytanie, na które nie mogłem wtedy znaleźć odpowiedzi, a ta sprawa wciąż mnie dręczy. Miałem nadzieję, że ktoś może znać odpowiedź tutaj: Rozważ dwa banki, które komunikują się za pośrednictwem zaszyfrowanego kanału, w którym możesz posłuchać komunikacji między nimi: ![tutaj wpisz opis obrazu](http://i.stack.imgur. com/rUNov.png) Bank A wyśle kilka numerów kart kredytowych do Banku B (możesz odnosić się do numerów kart kredytowych jako liczby dziesiętnej lub binarnej o dowolnej długości - nie ma to znaczenia). Załóżmy teraz, że w jakiś sposób uzyskałeś dostęp do bazy danych banku A, w której znajdują się numery kart kredytowych, i masz szansę podłączyć do niej swój dok i uruchomić na nim dowolny kod. Jak wtedy będziesz mógł ukraść numery kart kredytowych Banku A? Mam nadzieję, że nie pominąłem żadnych ważnych szczegółów (powinienem to zapisać). Czy to wykonalne?


title: GDI + podwójne renderowanie

text: Wiem, że niestandardowe kontrolki GDI są zwykle implementowane jako kontrolki okna i odbierają zdarzenia WM jako normalne okno, jeśli kontrolka otrzyma WM_PAINT, musi się przemalować. Moje pytanie brzmi: gdybym wyrenderował za pomocą GDI mój obszar klienta okna i utworzył tam wszystkie kontrolki, renderując je (bez użycia kontrolek okna) w podwójnym buforowaniu, czy pojawią się problemy dotyczące „który obszar wymaga przerysowania”? Nie byłoby więcej zdarzeń WM_PAINT, aby przerysować określoną kontrolkę


title: Wykres R w formie okien C#

text: Widzę, że R ma bardzo ładne możliwości kreślenia, których chciałbym użyć w formularzu okien C#. Istnieje pewna integracja między C# i R, ale czy możliwe jest również posiadanie wykresu R w formie Windows? Zasadniczo wykonywanie wszystkich obliczeń w C# i wklejanie wyników do R, aby wykreślić i zobaczyć wszystko w aplikacji formularzy Windows. Masz jakiś pomysł, żeby mi w tym pomóc? Dziękuję.


title: Wdrażanie wielojęzycznego wsparcia na stronie internetowej

text: Zajmuję się tworzeniem **Wielojęzycznej** strony internetowej, która jest rozwijana w niestandardowym `PHP` i używa `MySql`. Aby wdrożyć obsługę wielu języków, pomyślałem o tym podejściu (kroki poniżej). Prosimy o krytykowanie i wyrażanie opinii oraz sugestii na temat techniki realizacji. Możesz również zaproponować lepsze rozwiązanie, jeśli takie istnieje. **METODA 1** 1- Zapisz preferowany przez użytkownika identyfikator/kod języka w pliku „Cookie” (przy pierwszej wizycie domyślny kod języka). 2- **Baza danych** będzie zawierała tabelę o nazwie „języki” z następującymi kolumnami: ----------------------------- ---------------- lang_id | język | lang_place | lang_text --------------------------------------------- 1 | pol | menu[1] | Strona główna 2 | pol | menu[2] | Opcje 3 | pol | menu[2][1] | Moje konto 4 | pol | menu[2][2] | Ustawienia 5 | pol | menu[2][3] | Wyloguj 6 | pol | menu[3] | Zamówienia                              . . Tak dalej dla innych języków **METODA 2** 1- Tak samo jak w metodzie 1 2- Kolumny **bazy danych** będą wyglądały następująco: -------------------- ------------------------- lang_id | język | lang_data ------------------------------------------------------------ 1 | pol | { "menu1":"dom", "menu2":{ "name":"opcje", "button1":"moje konto", "button2":"ustawienia", "button3":"wyloguj" } } . . Tak więc w przypadku innych języków bardzo doceniam twoją pomoc w tym zakresie.


title: Jakie rzeczy najbardziej sprzyjają wydajnemu środowisku programowania?

text: Wielu z nas przez lata pracowało w różnych środowiskach i przekonało się, że niektóre są bardziej produktywne niż inne. W wielu przypadkach nie jest to bezpośrednio związane z możliwościami twórców, ale z ich środowiskiem. Sam tego doświadczyłem, będąc w miejscach, w których wydawało mi się, że rozwijam się szybciej i lepiej. A jeszcze w innych miejscach wydaje mi się, że ciągnę czas i rozwijam się mniej przemyślanie. Jak myślisz, co tworzy produktywne środowisko programistyczne?


title: Czy makiety do testów powinny być tworzone na wysokim czy niskim poziomie?

text: Kiedy tworzysz testy jednostkowe dla tych innych obiektów, jaki jest najlepszy sposób na tworzenie pozorowanych obiektów, które dostarczają dane do innych obiektów. Czy powinny one być tworzone na „wysokim poziomie” i przechwytywać wywołania tak szybko, jak to możliwe, czy też powinny być wykonywane na „niskim poziomie” i robić tyle, ile prawdziwy kod nadal będzie wywoływany? np. Piszę test dla jakiegoś kodu, który wymaga obiektu `NoteMapper`, który umożliwia ładowanie Notes z bazy danych. class NoteMapper { function getNote($sqlQueryFactory, $noteID) { // Utwórz zapytanie SQL z $sqlQueryFactory // Uruchom ten SQL // if null // return null // else // return new Note($dataFromSQLQuery) } } I może albo naśladować ten obiekt na wysokim poziomie, tworząc atrapę obiektu NoteMapper, aby nie było żadnych wywołań SQL, np. class MockNoteMapper { function getNote($sqlQueryFactory, $noteID) { //$mockData = {'Tytuł notatki testowej', "Test notatki tekstowej" } // return new Note($mockData); } } Albo mógłbym to zrobić na bardzo niskim poziomie, tworząc MockSQLQueryFactory, która zamiast faktycznie odpytywać bazę danych, po prostu dostarcza mock danych z powrotem i przekazuje je do bieżącego obiektu NoteMapper. Wydaje się, że tworzenie mocków na wysokim poziomie byłoby łatwiejsze w krótkim okresie, ale w dłuższej perspektywie zrobienie tego na niskim poziomie byłoby bardziej wydajne i możliwe, że pozwoliłoby na większą automatyzację testów m.in. rejestrując dane w bazie danych poza bazą danych, a następnie odtwarzając te dane do testów. Czy istnieje zalecany sposób tworzenia makiet? Czy istnieją twarde i szybkie zasady dotyczące tego, które są lepsze, czy też powinny być stosowane w odpowiednich przypadkach?


title: Jak pogodzić OOAD i projektowanie baz danych?

text: Ostatnio studiowałem analizę obiektową i projektowanie i bardzo mi się to podobało. W każdym miejscu, które czytałem, ludzie mówią, że chodzi o to, aby zacząć od minimalnego zestawu wymagań i po drodze dążyć do doskonalenia, powtarzając tę każdą iterację i ulepszając ją, ponieważ stale się rozwijamy i kontaktujemy z klientem zainteresowanym oprogramowaniem. W szczególności jeden kurs z Lynda.com powiedział wiele o tym: nie chcemy spędzać dużo czasu na planowaniu wszystkiego z góry, chcemy tylko mieć minimum, aby zacząć, a następnie ulepszać to w każdej iteracji. Widziałem też kurs tego samego faceta na temat projektowania baz danych i tam mówi inaczej. Mówi, że chociaż podczas pracy z orientacją obiektową lubi zwinne podejście iteracyjne, przy projektowaniu baz danych powinniśmy naprawdę spędzać dużo czasu na planowaniu rzeczy z góry, zamiast po prostu podążać drogą z minimum. Ale to trochę mnie dezorientuje. Rzeczywiście, baza danych będzie utrzymywała ważne dane z naszego modelu domeny i być może konfiguracje oprogramowania i tak dalej. Teraz, jeśli mam zamiar stale powracać do analizy i projektowania modelu, wydaje się, że projekt bazy danych również powinien się zmienić. W ten sam sposób, jeśli planujemy całą bazę danych z góry, wydaje się, że planujemy również cały model z góry, więc te dwie koncepcje wydają się niekompatybilne. Bardzo podoba mi się zwinne podejście iteracyjne, ale szukam również lepszego projektu dla bazy danych, więc pracując z zwinnym podejściem iteracyjnym, jak powinniśmy radzić sobie z projektowaniem bazy danych?


title: Jakie są kwalifikacje do pracy z rozwojem systemów operacyjnych?

text: Zawsze wcześniej widziałem dużo ogłoszeń o pracach programistycznych. Ale nigdy wcześniej nie widziałem reklamy pracy nad rozwojem systemów operacyjnych. Nigdy też nie spotkałem osobiście kogoś, kto pracował jako programista systemu operacyjnego lub coś związanego z osdev (raz widziałem nauczycielkę na uczelni, która o tym mówiła, ale nie pamiętam, czy mówiła o osdev). Chciałbym wiedzieć: 1. Jakie są kwalifikacje na stanowisko osdev (lata doświadczenia, szkoła wyższa/uniwersytet, języki itp.)? 2. Co powinien zrobić początkujący, który chce pracować w tym obszarze? 3. Jak wygląda praca programisty OS?


title: Alternatywa dla XML / XSLT do generowania artefaktów?

text: ## Scenariusz: system musi wytwarzać różne artefakty, które mają być prezentowane użytkownikom końcowym podczas normalnego toku działalności. Przykładami takich artefaktów mogą być pozwolenia, faktury lub paragony – wyobraź sobie jakąkolwiek aplikację online, która udostępnia jedną z tych stron „wydrukuj tę stronę w celach archiwalnych”. Pracuję nad systemem, który wytwarza takie artefakty, ale oczekuje się, że będziemy w stanie przywołać wcześniej wygenerowany artefakt i zaprezentować go ponownie, gdy będzie potrzebny. Obecnie system zachowuje dane transakcyjne i w razie potrzeby odtwarza stronę „artefaktu” z tych danych online. Stwarza to szereg problemów: * Podczas przetwarzania transakcyjnego potrzeba więcej danych niż podczas generowania artefaktów. Jednak po zakończeniu transakcji nie możemy zarchiwizować danych transakcyjnych, ponieważ może być konieczne odtworzenie artefaktu w pewnym momencie w przyszłości. * Generowanie artefaktów jest nieco droższe niż powinno być, ponieważ za każdym razem, gdy wyciągamy jeden z tych artefaktów, generujemy go ponownie. Szczerze mówiąc, w praktyce nie jest to wielka sprawa, ale mnie to wkurza. * Jeśli kiedykolwiek zmienimy sposób generowania określonego artefaktu, stary artefakt zostanie „ulepszony”, jeśli zostanie odtworzony. Chociaż wydaje się to być cnotą, uważam, że skoro celem jest pokazanie artefaktu tak, jak został pierwotnie wygenerowany, jest to szkoda. Dwie najbardziej rozsądne poprawki projektowe, które przychodzą na myśl, to generowanie plików PDF i XML / XSLT. Nie jestem zbyt podekscytowany opcją PDF, ponieważ naprawdę nie sądzę, abym musiał przechowywać statyczne części każdego artefaktu w kółko. Opcja XML / XSLT nadal wydaje się mieć zalety. W tym podejściu musiałbym asemblować dokument XML dla każdego artefaktu zawierający tylko dane potrzebne dla tego artefaktu plus odniesienie do właściwego dokumentu XSLT. Nowe wersje artefaktu zostałyby wdrożone z nowym XSLT, tak aby stary kod XML używał starego XSLT, a nowy XML używał nowego XSLT i tak dalej. ## Pytanie: Czy istnieje inny zabójczy projekt lub technologia, których brakuje mi, które pasowałyby do tej potrzeby? To jest system .Net, za ile jest wart.


title: Architektura oprogramowania i lokalizacja kompozycji MEF

text: **Wprowadzenie** Moje oprogramowanie (kilka webapi) składa się z 4 projektów: Core, FrontWebApi, Library i Administration. Biblioteka to projekt biblioteki kodu, który składa się tylko z interfejsów i enumeratorów. Wszystkie moje klasy w innych projektach dziedziczą z przynajmniej jednego interfejsu, a ten interfejs znajduje się w bibliotece. Ogólnie rzecz biorąc, moje interfejsy definiują albo encje, repozytoria, albo kontrolery. Ten projekt nie odwołuje się do żadnego innego projektu ani żadnych specjalnych bibliotek dll ... tylko zwykłe rzeczy .Net ... Core jest projektem biblioteki klas, w którym konkretna implementacja encji i repozytoriów. W niektórych przypadkach mam więcej niż 1 implementację dla repozytorium (np. jedną dla przechowywania tabel Azure i jedną dla zwykłego SQL). Ten projekt obsługuje inteligencję (głównie zasady biznesowe) i trwałość, a odwołuje się tylko do Biblioteki. FrontWebApi to projekt WebApi ASP.NET MVC 4, który implementuje interfejsy kontrolerów do obsługi żądań internetowych (z mobilnej aplikacji natywnej)... Odwołuje się do rdzenia i biblioteki. Administracja to projekt biblioteki kodu, który reprezentuje „moduł opcjonalny”, co oznacza: jeśli jest obecny, zapewnia dodatkowe funkcje (takie jak listy kontroli dostępu) do aplikacji, ale jeśli nie, nie ma problemu. Administracja jest również tylko odwoływaniem się do Biblioteki i implementowaniem konkretnych klas kilku interfejsów, takich jak "IAccessControlEntry"... Zamierzam to udostępnić z "ustawieniami", które utworzy dowolną wymaganą tabelę bazy danych lub coś w tym rodzaju. Ale ważne jest, aby zauważyć, że Core nie ma odniesienia do tego projektu... **Rozwój** Teraz, aby mieć odsprzęgnięty kod, zdecydowałem się na użycie IoC, a ponieważ jest to mały projekt, postanowiłem to zrobić przy użyciu MEF, szczególnie ze względu na jego reklamowane możliwości „składania”. Zaaranżowałem wszystkie importy/eksporty, konstruktory i tak dalej, ale coś nie jest idealne w mojej "mentalno-wizualizacji": **Główne pytanie** _Gdzie powinienem "skomponować" obiekty?_ Mam na myśli: Technicznie jedyne miejsce gdzie rzeczywisty dostęp wdrożeniowy jest wymagany w Repozytoriach, ponieważ w celu pobrania danych skądkolwiek potrzebne będą instancje encji i we wszystkich innych miejscach. Repozytoria mogą również udostępniać publiczne „GetCleanInstanceOf()”, prawda? Wtedy wszystkie inne miejsca będą dobrze pracowały z interfejsami zamiast z konkretnymi klasami... **Pytanie dodatkowe** _Czy "Administracja" powinna zaimplementować konkretny obiekt dla "IAccessControlGeneralRepository" czy Core powinien?_


title: Jaki typ mechanizmu resetowania/zapomnienia hasła (weryfikacji) polecasz?

text: Szukam sposobów weryfikacji użytkownika w celu zresetowania jego haseł. 2 powszechnie używane: * Weryfikacja adresu e-mail * Sekretne pytanie Zastanawiam się, które polecisz? Staram się w ogóle unikać korzystania z poczty e-mail (użytkownicy nie muszą podawać e-maili, większość hostów ogranicza wysyłane e-maile). Ale samo tajne pytanie wydaje się trochę niepewne. Co myślisz?


title: Czy są jacyś znamienici programiści, którzy zaczęli późno w życiu?

text: Więc zaczynam być niezadowolony... Mam 25 lat i próbuję nauczyć się programowania i mam problemy ze zrozumieniem niektórych pojęć i czuję to, ponieważ zaczynam tak późno w życiu. Więc jestem po prostu ciekawa, czy byli jacyś znamienici programiści, którzy rozpoczęli swój start w późnym wieku?


title: Przetwarzanie równoległe i przetwarzanie mobilne

text: Przez ostatnie 4 lata pracowałem jako programista nad różnymi produktami oprogramowania (system finansowy ERP, tworzenie stron internetowych online, oprogramowanie handlowe, a teraz oprogramowanie do zarządzania łańcuchem dostaw). Większość pracy została wykonana w Core Java. Ostatnio czuję, że powinienem zacząć przyglądać się konkretnym „zasadom” technicznym i/lub dziedzinom, takim jak przetwarzanie równoległe i przetwarzanie mobilne, a nie pracować długo tylko nad rozwiązaniem programowym ze względu na pracę jako programista. Krótko mówiąc, chcę nadać kierunek mojemu dotychczasowemu zestawowi umiejętności, abym wiedział więcej niż tylko język programowania. Czy ktoś może mi pomóc w nauce tych domen? Jestem naprawdę zainteresowany przetwarzaniem równoległym, ale nie jestem zbyt świadomy innych takich dziedzin, którym mógłbym się przyjrzeć.


title: Czy istnieją alternatywy typu open source dla Bitbucket, Github, Kiln i podobnych narzędzi do przeglądania i zarządzania DVCS?

text: Znam kilka narzędzi/usług, które zapewniają przeglądanie i zarządzanie DVCS, takich jak Bitbucket, Github, Kiln, SCM-Manager i Rhodecode. Jednak rozważany przeze mnie przypadek użycia jest taki, że: 1. Każdy kod źródłowy musi znajdować się na wewnętrznych serwerach pracodawcy. 2. Rozwiązanie musi być open source. 3. Powinien zapewniać doświadczenie podobne do Bitbucket lub Github, w tym projekt wiki, przeglądanie i zarządzanie repozytorium oraz aspekty kodowania społecznościowego, takie jak przegląd kodu. 4. Rozwiązanie powinno mieć wsparcie rtęciowe (jeśli nie obsługuje innych DVCS). Spośród nich tylko SCM-Manager i RhodeCode są bliskie, ponieważ można je zainstalować na własnych serwerach i są open source. Jednak nie mają doświadczenia Bitbucket ani Github. Nie ma trackera problemów ani wiki, a interfejs użytkownika, chociaż jest funkcjonalny, nie dorównuje Githubowi lub Bitbucketowi. Mogę zbliżyć się do Traca lub Redmine z ich przeglądarkami repozytoriów, ale niestety nie mają one żadnych możliwości zarządzania repozytorium. Czy istnieją inne narzędzia open source, które zapewniłyby podobne wrażenia jak Bitbucket, Github lub Kiln?


title: Czy zaleca się korzystanie z DocBlock, nawet jeśli nie używam phpDocumentora?

text: Zajmuję się tworzeniem prostej strony internetowej dla klienta. Czytałem o **phpDocumentor** i **DocBlocks** i pomyślałem, że dokumentowanie moich klas i funkcji będzie bardzo przydatne. Jestem prawie pewien, że **nie** generuję żadnej dokumentacji dla tej strony, ponieważ jest to dość prosta strona internetowa i wiecie co? Nie ma interfejsu API... Ale czy nadal zaleca się pisanie DocBlocks w moim kodzie? Z tego co wiem wielu programistów nawet nie pisze prostych komentarzy, tylko DocBlocks. Nie zamierzam generować żadnej czytelnej dokumentacji przez klienta/następnego programistę, ale nadal uważam, że lepsze będzie dodawanie komentarzy, które są czymś więcej niż zwykłym tekstem. _edytuj -_ Jeśli uważasz, że DocBlocki są w moim przypadku zbędne, czy istnieją jakieś inne „standardy” pisania komentarzy/dokumentacji? Ostatnim razem wszystko, co nie ma standardu, sprawia, że czuję się głupio, że nie jestem pewien, czy lepiej napisać `if(){` czy `if() {`, `/* */` czy `/ /` itp. Jestem nowy w documentor i DockBlocks i nadal nie jestem pewien, czy mam napisać to pytanie tutaj, czy w StackOverflow. W każdym razie bardzo dziękuję!


title: Co umieścić w dokumentacji procedury składowanej?

text: Miałem za zadanie udokumentować nasze procedury składowane. * Grupa docelowa: Techniczni * Cel: Posiadanie dobrej dokumentacji w ramach przygotowań do migracji. Zakładam, że ktoś już to zrobił.


title: Różnica w orientacji maski Sobela daje inny wynik detektora krawędzi

text: Wdrażam detektor Canny Edge dla klasy, który oparłem na kodzie znalezionym tutaj. Do pierwszej maski pochodnej, którą będę splatał z obrazem, używam maski Sobela, chociaż strona korzysta z Prewitta. Jak widać na przykładach na stronie, kod jest doskonale funkcjonalny. Zauważyłem jednak różne wyniki, gdy zmieniłem „orientację” maski gradientowej Sobela, jak wyjaśnię poniżej. Typowa maska do obliczania pochodnej w kierunku x w moich notatkach z klasy jest pokazana jako: [-1 0 1] [-2 0 2] [-1 0 1] Dla kierunku y jest to: [-1 -2 -1] [0 0 0] [1 2 1] Dla eksperymentu zmieniłem orientację dla kierunku x na: [1 0 -1] [2 0 -2] [1 0 -1] A dla kierunku y : [1 2 1] [0 0 0] [-1 -2 -1] Co dziwne, daje mi to dwa różne wyniki, których się nie spodziewałem, ponieważ nie sądzę, aby „kierunek”, którego używam zrobienie gradientu powinno dać mi inny wynik. Pierwszy wynik: ![Default_mask_orientation](http://i.stack.imgur.com/rFD0y.jpg) Drugi wynik: ![tu wpisz opis obrazu](http://i.stack.imgur.com/HroFv.jpg ) Dlaczego otrzymuję inny wynik? Gdzie powinienem zbadać dalej?


title: Dlaczego Adobe Air jest tak niedoceniany do tworzenia aplikacji mobilnych?

text: Od 5 lat pracuję z technologiami związanymi z Adobe Flash. Widziałem małe błędy w niektórych aplikacjach, ale nie rozumiem, dlaczego wiele dużych firm nie bierze pod uwagę Adobe Air dla swoich aplikacji mobilnych. Widziałem wiele ofert pracy dla programistów mobilnych, które wymagają wiedzy na temat Androida lub iOS, ale niezbyt wiele, które wymagają wiedzy o Adobe Air. Zastanawia mnie to, ponieważ aplikacje Adobe Air można wdrażać w urządzeniach Blackberry, iOS **i** Android. Ponadto, moim zdaniem, znacznie łatwiej jest stworzyć grę we Flashu niż na przykład przy użyciu Android SDK. Czy Adobe Air naprawdę ma słabości, których nigdy nie widziałem?


title: Jak programować w systemie Windows oraz testować i uruchamiać w systemie Linux?

text: Jestem jednym z dwóch programistów oprogramowania wewnętrznego (napisanego w Pythonie) w mojej firmie. Oprogramowanie to aplikacja serwerowa zaprojektowana do pracy na dedykowanym komputerze z systemem Linux. Obecnie mamy jedno pudełko zawierające nasze repozytorium SVN i to pudełko jest również używane do testowania. Problem polega na tym, że rozwijam go na mojej stacji roboczej za pomocą Eclipse w systemie Windows i ta aplikacja nie działa w systemie Windows. Jak właściwie zorganizować takie środowisko, aby nie tracić cennego czasu na przenoszenie projektu i kodu, aby móc je przetestować? Obecnie wykonuję svn checkout, zmieniam trochę kodu, a następnie przesyłam go na serwer deweloperski w celu przetestowania (nie przez svn). Przetestuj go na serwerze, zmień coś, przetestuj ponownie itd. Po tym wszystkim przychodzi zatwierdzenie. To ciągłe przesyłanie i testowanie doprowadza mnie do szału. Próbowałem trzymać projekt na serwerze (checkout to home dir), ale to powoduje wiele problemów z Eclipse. Oczywiście nie mam w tym dużego doświadczenia, więc pytam jakie są najlepsze praktyki dotyczące tego typu problemów?


title: Wydajność: rekurencja vs. iteracja w JavaScript

text: Czytałem ostatnio kilka artykułów (np. http://dailyjs.com/2012/09/14/functional-programming/) o funkcjonalnych aspektach Javascript i relacji między Scheme a Javascript (na ten ostatni wpłynął pierwszy, który jest językiem funkcjonalnym, podczas gdy aspekty O-O są dziedziczone z Self, które jest językiem opartym na prototypowaniu). Jednak moje pytanie jest bardziej szczegółowe: zastanawiałem się, czy istnieją metryki dotyczące wydajności rekursji vs. iteracji w JavaScript. Wiem, że w niektórych językach (gdzie z założenia iteracja działa lepiej) różnica jest minimalna, ponieważ interpreter/kompilator zamienia rekursję na iterację, jednak domyślam się, że prawdopodobnie tak nie jest w przypadku JavaScriptu, ponieważ jest to przynajmniej częściowo funkcjonalny język.


title: Dlaczego w C# jest ograniczenie new(), ale nie ma innego podobnego ograniczenia?

text: W rodzajach C# możemy zadeklarować ograniczenie dla parametru typu `T`, aby miał domyślny konstruktor, mówiąc `gdzie T: new()`. Jednak żadne inne ograniczenia, takie jak to, nie są poprawne - na przykład `new(string)` itp. **Z perspektywy projektowania języka i/lub implementacji, jaki jest tego powód?** Czy coś stoi na przeszkodzie konstruktorzy działają lub sposób w jaki zaimplementowany jest system typów, który tego zabrania (a przynajmniej utrudnia)? Jeśli tak, co to jest? Przypominam sobie, że przeczytałem gdzieś, że `default(T)` faktycznie kompiluje się do `nowego T()` dla `T:struct`. Może ma to związek z tym? A może jest to po prostu decyzja projektowa podjęta w celu uniknięcia zbytniego komplikowania języka?


title: Dlaczego nazwa „kontynuuj”

text: Słowo kluczowe 'continue' w Javie (i prawdopodobnie w wielu innych językach programowania) służy do pominięcia dalszego wykonywania bieżącej iteracji. Dlaczego wybrano nazwę „kontynuuj”? Dlaczego nie coś prostszego, jak „pomiń”?


title: Nazwa dewelopera w informacji o prawach autorskich do plików wniesionych do projektu open source?

text: Zajmuję się tworzeniem małej aplikacji, którą chcę udostępnić jako open source. Obecnie nad aplikacją jest tylko moja praca, dlatego we wszystkich plikach umieściłem w moim imieniu informację o prawach autorskich. Teraz, kiedy robię projekt open source i mówię, że programista Sam wprowadza pewne ulepszenia do niektórych istniejących plików. Czy zatem powinno mu się pozwolić na umieszczenie informacji o prawach autorskich również w swoim imieniu? A co, jeśli Sam doda nowy plik, który jest w całości jego dziełem. Więc powinien dodać swoje prawa autorskie czy moje? Uważam, że wszystkie pliki powinny mieć tylko moje nazwisko jako prawa autorskie, niezależnie od pracy wykonanej przez kogokolwiek. Dzieje się tak, ponieważ powiedzmy, że dodałem trochę kodu, który zależy od kodu chronionego prawami autorskimi Sama, a aplikacja jest na nim uruchomiona. Teraz, w przyszłości, jeśli do Sama zwróci się jakaś organizacja, będzie mógł sprzedać kod objęty jego prawami autorskimi. Jeśli tak się stanie, moja aplikacja przestanie działać, ponieważ będę musiał usunąć kod Sama i cały mój zależny kod. To właśnie czuję. Jaka jest powszechna praktyka w społeczności Open Source? Uwaga: Chcę używać GNU LGPL jako mojej licencji. Prowadzę listę współtwórców, którą można wyświetlić, klikając przycisk w oknie dialogowym Informacje.


title: Generator map kursów

text: Moja uczelnia wymienia rotację kursów w każdym semestrze/roku. Dzięki temu można przewidzieć, kiedy będą prowadzone zajęcia. Próbuję stworzyć program JavaScript (język jest naprawdę nieistotny), w którym użytkownik będzie wybierał wszystkie kursy, które chciałby wziąć, na ile semestrów i maksymalną (a może dokładną) liczbę zajęć, które chciałby do podjęcia podczas każdego z tych semestrów. Na przykład moja uczelnia oferuje: 12 kursów jesienią (w zależności od roku parzystego i nieparzystego) 10 kursów wiosennych (w zależności od roku parzystego i nieparzystego) 6 kursów letnich (w zależności od roku parzystego i nieparzystego) zasadniczo 6 różnych semestrów wzorce Zasadniczo użytkownik wybierze preferowane 16 lub więcej kursów, wprowadzi 6 semestrów, semestr, w którym chciałby rozpocząć i maksymalną liczbę kursów w semestrze. Z tego miejsca chciałbym wygenerować wszystkie możliwe mapy kursów, które użytkownik mógłby wziąć, aby ukończyć 6 semestrów. Chcę, aby mogli zmieniać liczbę kursów w każdym semestrze – na przykład 3 kursy w jednym semestrze, 2 kursy w innym itd. Chcę również sprawdzić poprzednie zajęcia, aby upewnić się, że zajęcia się nie powielają, a także upewnić się, że czy klasy spełniają odpowiednie warunki wstępne. Instynkt podpowiada mi, aby w tym celu skorzystać z rekurencji, ale nie jestem do końca pewien, jak bym to zrobił. Do tej pory udało mi się tylko wymyślić: wygenerować wszystkie zestawy w semestrze na podstawie wielu kursów, które użytkownik chciałby w tym semestrze (jeśli użytkownik wybierze 3 kursy na pierwszy semestr, utwórz wszystkie zestawy 3 z 12 kursów). Zrób to dla każdego semestru. Następnie przejrzyj wszystkie te kombinacje, aby zobaczyć, które z nich działają. Wydaje mi się bardzo nieefektywny i powolny. Jako, że jest to Programrs SE, nie szukam żadnego kodu, ale może algorytmu lub bardziej efektywnego podejścia do tego problemu. Każda pomoc byłaby bardzo mile widziana. Jeśli to pomoże, mogę zamieścić link do rotacji kursów na mojej uczelni.


title: Kiedy powinienem używać ZeroMQ i kiedy powinienem używać Akka?

text: Moje _rozumienie_ Akki polega na tym, że pozwala ona definiować grupy mini-wątków (" **Aktorzy** "), a następnie komunikować się ze sobą (i wykonywać pracę) za pomocą zdarzeń. Moje _rozumienie_ ZeroMQ polega na tym, że jest to biblioteka gniazd TCP, która pozwala wątkom komunikować się ze sobą za pośrednictwem TCP/portów. Moje pytanie: wydaje się, że to bardzo podobne koncepcje. Jestem jednak pewien, że w rzeczywistości mają one rozwiązywać zupełnie inne problemy. Czyli: **Z punktu widzenia intencji, jaka jest różnica między tymi dwoma narzędziami?** Jakie problemy rozwiązują? Czy istnieją jasne/konkretne przypadki użycia, w których jedno jest lepsze od drugiego?


title: Dlaczego rozwój oprogramowania tak daleko nie jest dyscypliną inżynierską?

text: Jestem zagorzałym zwolennikiem inżynierii oprogramowania, ale nawet ja muszę przyznać, że nie mamy wielu takich samych narzędzi, zasad i praw, jak inne dyscypliny inżynierskie. Dlaczego to? A co powinniśmy zrobić, aby się tam dostać?


title: Rozwidlenie aplikacji dla klienta „przedsiębiorczego”

text: _Uwaga: jest to głównie pytanie techniczne, ale najpierw muszę wyjaśnić tło biznesowe._ **CZĘŚĆ BIZNESOWA** Mam do czynienia z naprawdę interesującą sytuacją, przynajmniej interesującą dla mnie. Od 3,5 roku buduję biznes/aplikację o nazwie Snip Salon Software. To oprogramowanie do planowania dla salonów fryzjerskich. Co ważne, skierowałem się konkretnie do salonów _włosów_, w przeciwieństwie do salonów pielęgnacji paznokci lub solarium, które mają inne potrzeby. Firma odniosła pewien sukces, ale jak dotąd nic spektakularnego. Mam 6 salonów w mojej okolicy używających produktu. Jakiś czas temu zwróciło się do mnie kilku przedsiębiorców z branży salonów _lash_, która ma inne potrzeby w zakresie harmonogramowania niż salony fryzjerskie. (Branża kosmetyczna to zaskakująco złożona przestrzeń!) Ci faceci w zasadzie chcieliby, żebym oznaczyła dla nich mój produkt, aby mogli go sprzedawać jako część pakietu typu „business in a box”, który oferują początkującym technikom rzęs . **CZĘŚĆ TECHNICZNA** Wyzwanie, przed którym staję, to: * Nie chcę mieć jednej aplikacji obsługującej zarówno salony fryzjerskie, jak i salony rzęs. Myślę, że szybko zamieniłoby się to w koszmar. * Nie chcę, aby aplikacje działały głównie pod tym samym kodem. To byłoby głupie. I nie chodzi tylko o funkcje - wszystkie brandingi itp. prawie na pewno będą inne dla każdej wersji. Myślę więc, że chcę najpierw rozwidleć bazę kodu i skonfigurować oddzielny hosting itp. dla aplikacji do salonu rzęs. Następnie, z biegiem czasu, może chcę rozłożyć wspólne części (np. e-maile z przypomnieniem o spotkaniach) do modułów (używam Ruby on Rails, więc mówię o silnikach Rails), a następnie niech każdy widelec mojej aplikacji używa tego samego kopię każdego modułu. Oczywiście umieściłbym to tak, aby każdy silnik zawierał tylko funkcje, które były wspólne dla dwóch widełek aplikacji. **Moje pytanie: z technicznego punktu widzenia, jak poradziłbyś sobie z tą sytuacją?** Możesz też wtrącić się po stronie biznesowej.


title: Jak starsi programiści powinni odpowiadać podczas wywiadu?

text: Jak starsi programiści powinni odpowiadać podczas wywiadów i „konfrontacji” z pytaniami typu „jesteśmy młodą grupą, czy będziecie w stanie dopasować się do naszej kultury?”. A co z doświadczeniem, jakie ma starszy programista? (mówi to wszystko naprawdę) [edytuj] Przeczytaj to na slashdot \- whoo-haa - jesteśmy jak wino! ;)


title: Zalecana abstrakcja do przesyłania danych przez sieć niż tablica bajt[]?

text: Byłem ciekawy, dlaczego wolimy tablicę byte[] do przesyłania danych przez sieć, a nie cokolwiek innego? Lub jeśli czegoś mi brakuje, jakie są inne sposoby przesyłania danych przez sieć.


title: Ogólne a IoC

text: Jedną z wad wzorca „Lokalizator usług” jest to, że dzwoniący może zostać wprowadzony w błąd co do zależności osoby wywoływanej. Ok, ale co, jeśli umieszczę zależności jako parametry ogólne na poziomie klasy: class Node<T> gdzie T : ISomeInterface, new() { ISomeInterface obj public Node() { obj = new T(); } } Znalazłem tutaj kilka opinii. Ale chcę, aby dyskusja była kontynuowana. Najważniejszym kontrargumentem jest to, że wstrzykiwanie zależności przy użyciu generyków sprawia, że późne wiązanie jest niedostępne. Ale kogo to obchodzi w większości przypadków? Co się stanie, jeśli moja aplikacja nie wymaga tej funkcji? Chcę znaleźć solidne kontrargumenty. p.s. Jak rozumiesz, ograniczenie new() nie jest konieczne.


title: Dlaczego widzę tak wiele konstrukcji for(;;)?

text: Według mojego sposobu myślenia, pętla for służy do iteracji w znanym lub możliwym do określenia zakresie. String[] names = //coś; for ( int i = 0; i < names.length; i++ ) { //do rzeczy } co jest równoważne (zakresowanie i na bok) do : String[] names = //coś; int i = 0; while (i < names.length ) { // rób rzeczy i++; } Innymi słowy, pętla `for` jest po prostu (bardzo użytecznym) cukrem składniowym dla powszechnie używanej konstrukcji `while`. Jednak widzę w sieci wiele konstrukcji `for(;;)`, które są funkcjonalnie równoważne `while(true)` Jakie jest tego uzasadnienie? Dlaczego nieskończona pętla for miałaby być preferowana nad nieskończoną pętlą while? // Widziałem nawet podręcznik Javy, który w ogóle nie używał pętli while! Prowadzi do takich potwornych konstrukcji jak: String input = getInput(); for( ; !inputIsValid(input) ; ) { //ponów; }


title: Unikanie wbudowanego JavaScriptu z dynamiczną zawartością

text: Przeczytałem tutaj, że powinieneś unikać kodowania JavaScript w linii (patrz punkt #1). Brzmi jak świetny pomysł; jednak nie jestem pewien, jak używać js do wybierania zawartości dynamicznej bez ustawiania identyfikatora w wywołaniu funkcji inline. Na przykład mam prosty blog. Komentarze są ukryte, ale można je wyświetlić, klikając kotwicę (generowaną dynamicznie), która wywołuje funkcję JavaScript, aby przełączyć komentarze dla tego konkretnego wpisu: $commentsButton = "id . "' href='#comments" . $post->id . "'> komentarze (" . count($comments) . ")"; Funkcja `toggleComments()`: function toggleComments(id) { $('#' + id + ' .commentsContainer').toggle(500); } Jak powstrzymujesz się od robienia tego typu rzeczy? Czy zawsze należy unikać wbudowanego JavaScriptu? Czy jest to przypadek, w którym jest to konieczne? **Aktualizacja:** Skończyło się na użyciu tego: $('.commentButton').each(function() { $(this).click(function() { $(this).parents('.post'). find('.commentsContainer').toggle(500); }); }); w ten sposób: $commentButton = " komentarze (" .count($comments) . ")";


title: Jakie są najlepsze wzorce/projekty do tworzenia stanowego API?

text: Mam zamiar zaimplementować API dla mojego serwera TCP/IP napisane w Javie. W tej chwili mam tymczasową metodę, która pobiera String, wykonuje polecenie oparte na String i zwraca String zasadniczo jak poniżej. public void komunikuj(BufferedReader in, PrintWriter out) { while(true) { out.println(handleCommand(in.readLine())); } } private String handleCommand(String command) { if (command.equals("command1") { // zwróć "Polecenie 1 wykonane"; } else if (command.equals("command2") { // wykonaj inne stuff return "Wykonano polecenie 2"; } } Naprawdę chcę zrobić coś bardziej rozszerzalnego, mądrzejszego i bardziej stanowego, aby móc obsługiwać bardziej złożone i stanowe polecenia bez rozdęcia metody/klasy. Od czego zacząć? Sugestie, pomysły, lub linki do dalszej lektury są bardzo mile widziane.


title: Jakie jest najlepsze podejście do kodowania w środowisku powolnej kompilacji?

text: Przyzwyczaiłem się do kodowania w C# w stylu TDD - napisz/lub zmień mały kawałek kodu, przekompiluj w 10 sekund całe rozwiązanie, ponownie uruchom testy i jeszcze raz. To proste... Ta metodologia programowania działała dla mnie bardzo dobrze przez kilka lat, aż do zeszłego roku, kiedy musiałem wrócić do kodowania C++ i naprawdę czuję, że moja produktywność drastycznie spadła od tego czasu. C++ jako język nie jest problemem - miałem sporo doświadczenia z programistami C++... ale w przeszłości. Moja produktywność jest nadal w porządku dla małych projektów, ale jest jeszcze gorzej, gdy wraz ze wzrostem rozmiaru projektu i gdy czas kompilacji osiągnie ponad 10 minut, robi się naprawdę źle. A jeśli znajdę błąd, muszę ponownie rozpocząć kompilację itp. To po prostu frustrujące. W ten sposób doszedłem do wniosku, że w małych fragmentach (jak poprzednio) jest to nie do zaakceptowania - wszelkie zalecenia, w jaki sposób mogę wejść w stary nawyk kodowania przez około godzinę, podczas ręcznego przeglądania kodu (bez polegania na szybkim kompilatorze C#) , a ponowne kompilowanie/ponowne uruchamianie testów jednostkowych tylko raz na kilka godzin. Z C# i TDD bardzo łatwo było napisać kod w sposób ewolucyjny - po kilkunastu iteracjach wszystko, z czym zacząłem, kończyło się w dobrym kodzie, ale po prostu już mi to nie działa (w powolnej kompilacji środowisko).


title: Deklarowanie czystych danych

text: $czyste = tablica(); $email_pattern = '/^[^@\s<&>]+@([-a-z0-9]+\.)+[a-z]{2,}$/i'; if (preg_match($email_pattern, $_POST['email'])) { $clean['email'] = $_POST['email']; } Powyższy przykładowy kod (Źródło) używa tablicy o nazwie `$clean` do przechowywania przefiltrowanej wartości z `$_POST`. Jest to uważane za dobrą praktykę w zakresie bezpieczeństwa. Jakie są zalety takiego podejścia?


title: Pisanie wieloplatformowych typów, interfejsów i klas/metod w C++

text: Szukam najlepszego rozwiązania do pisania oprogramowania wieloplatformowego, czyli kodu, który piszę i który za każdym razem muszę łączyć się z różnymi bibliotekami i platformami. To, co uważam za najłatwiejsze, popraw mnie, jeśli się mylę, to definicja nowych typów, wszystko, co muszę zrobić, to napisać plik hpp z listą `typedefs`, mogę zachować te same nazwy dla każdego nowego wpisz na różnych platformach, aby moja baza kodu mogła być bez problemu udostępniana. `typedefs` pomaga mi również przedefiniować lepszy zakres dla moich typów w moim kodzie. Prawdopodobnie otrzymam coś takiego: include |-windows | |-types.hpp |-linux | |-types.hpp |-mac |-types.hpp W przypadku interfejsów myślę o tym samym rozwiązaniu, które zastosowano dla typów, serii plików hpp, prawdopodobnie wszystkie interfejsy napiszę tylko raz, ponieważ opierają się na typach a cała „przenośność międzyplatformowa” jest zapewniona dzięki pracy wykonanej na typach. obejmują | |-interfejsy.hpp | |-okna | |-types.hpp |-linux | |-types.hpp |-mac | |-types.hpp W przypadku klas i metod nie mam prawdziwej odpowiedzi, chciałbym uniknąć 2 rzeczy: * jawnego użycia wskaźników * użycia szablonów Chcę uniknąć używania wskaźników, ponieważ mogą one spowodować kod mniej czytelny dla kogoś i chcę uniknąć szablonów tylko dlatego, że jeśli je napiszę, nie mogę oddzielić interfejsu od definicji. Jaka jest najlepsza opcja, aby ukryć użycie wskaźników? Chciałbym również kilka słów na temat makr i sposobu implementacji niektórych wywołań i definicji specyficznych dla systemu operacyjnego.


title: Jakie jest uzasadnienie filozofii projektowania Apache Jena *wszystko jest interfejsem, jeśli to możliwe*?

text: Jeśli znasz silnik Java RDF i OWL Jena, to natknąłeś się na ich filozofię, zgodnie z którą wszystko powinno być określone jako interfejs, gdy tylko jest to możliwe. Oznacza to, że _Resource_ , _Statement_ , _RDFNode_ , _Property_ , a nawet RDF _Model_ itd. są, wbrew temu, co mogłoby się wydawać, _Interfaces_ zamiast konkretnych klas. Prowadzi to do częstego korzystania z fabryk. Ponieważ nie możesz utworzyć instancji _Właściwości_ ani _Modelu_ , musisz mieć coś innego — wzorzec projektowy Factory. Moje pytanie brzmi zatem, jakie jest uzasadnienie używania tego wzorca w przeciwieństwie do tradycyjnego systemu hierarchii klasowej? Często jest całkowicie opłacalne użycie jednego z nich. Na przykład, jeśli chcę mieć _Model_ oparty na pamięci zamiast modelu _Model_ opartego na bazie danych, mógłbym po prostu utworzyć instancję tych klas, nie muszę prosić Factory, aby mi ją dała. * * * Na marginesie, jestem w trakcie pisania biblioteki do manipulowania danymi Pearltrees, które są eksportowane z ich strony internetowej w postaci dokumentu RDF/XML. Kiedy piszę tę bibliotekę, mam wiele możliwości definiowania relacji występujących w danych Peartreesa. To, co jest miłe w danych Pearltrees, to to, że mają bardzo logiczny system klas: drzewo składa się z pereł, które mogą być perłami Page, Reference, Alias lub Root. Moje pytanie pochodzi z próby ustalenia, czy powinienem przyjąć filozofię z Jeny w mojej bibliotece, która korzysta z Jeny, czy też powinienem ją zignorować, wybrać własną filozofię projektowania i trzymać się jej.


title: Czy instynkt programisty jest akceptowalną odpowiedzią w odniesieniu do decyzji projektowych?

text: Są chwile, w których mogę natychmiast rozpoznać i zaproponować rozwiązanie problemu z wzorcem projektowym. Jednak są inne sytuacje, w których ujęcie tego w słowa po prostu nie jest możliwe. Wiem, że coś jest nie tak, opierając się na moim doświadczeniu i „instynkcie”, ale może nie być możliwe zidentyfikowanie i refaktoryzacja obraźliwego kodu bez pisania testów lub prac badawczo-rozwojowych. Na przykład ktoś może powiedzieć, że występują problemy z wydajnością lub aplikacja jest „wolna”. Wiem, od czego zacząć szukać, może nawet wydam rekomendację, ale to prawie podświadomy wysiłek. Kiedy jest to dopuszczalne (jeśli w ogóle)?


title: które algorytmy sortowania używają OrderBy

text: Jestem trochę ciekaw, jaki algorytm sortowania używa OrderBy (linq to objects). szybkie sortowanie? sortowanie? sortowanie introspektywne ? Jak widzę w dokumentacji MSDN List.Sort używa sortowania introspektywnego: zobacz: http://msdn.microsoft.com/en-us/library/b0zbh7b6.aspx Może OrderBy użyje tego samego? Jeśli idziemy na zamówienie przez dokumentację, nie widzę zbyt wielu informacji: http://msdn.microsoft.com/en-us/library/system.linq.enumerable.orderby(v=vs.110).aspx


title: Architektura do łączenia wielu aplikacji

text: Załóżmy, że masz główną bazę danych i kilka zewnętrznych/wewnętrznych aplikacji, które używają usług sieci Web do interfejsu danych. Jaka byłaby Twoja preferowana architektura do łączenia danych zi do tych aplikacji? Czy umieściłbyś pomiędzy nimi coś w rodzaju Enterprise Service Bus? Lubisz BizTalk? Czy coś tańszego? Nie chcemy blokować aplikacji, gdy są połączone, ale chcemy użyć kodów powrotu z interfejsów, aby określić, czy musimy wykonać jakieś działania w aplikacji, z której pochodzą, czy nie.


title: Związek między repozytorium a jednostką pracy

text: Zamierzam zaimplementować repozytorium i chciałbym użyć wzorca UOW, ponieważ konsument repozytorium mógłby wykonać kilka operacji, a chcę je zatwierdzić na raz. Po przeczytaniu kilku artykułów na ten temat nadal nie rozumiem, jak powiązać te dwa elementy, w zależności od artykułu jest to robione w inny sposób. Czasami UOW jest czymś wewnętrznym repozytorium: public class Repozytorium { UnitOfWork _uow; repozytorium publiczne() { _uow = IoC.Pobierz<JednostkaPracy>(); } public void Zapisz(Element e) { _uow.Track(e); } public void PrześlijChanges() { SaveInStorage(_uow.GetChanges()); } } A czasami jest to zewnętrzne: public class Repository { public void Save(Entity e, UnitOfWork uow) { uow.Track(e); } public void SubmittChanges(UnitOfWork uow) { SaveInStorage(uow.GetChanges()); } } Innym razem jest to UOW, który odwołuje się do klasy publicznej Repozytorium UnitOfWork { Repository _repository; public UnitOfWork (repozytorium repozytorium) { _repository = repozytorium; } public void Zapisz(Entity e) { this.Track(e); } public void SubmittChanges() { _repository.Save(this.GetChanges()); } } W jaki sposób te dwa elementy są powiązane? UOW śledzi elementy, które wymagają zmiany, a repozytorium zawiera logikę utrwalania tych zmian, ale… kto dzwoni do kogo? Czy to ostatnie ma więcej sensu? Kto zarządza połączeniem? Jeśli w repozytorium trzeba wykonać kilka operacji, uważam, że użycie tego samego połączenia, a nawet transakcji, jest bardziej słuszne, więc może umieszczenie obiektu połączenia wewnątrz UOW, a ten w repozytorium również ma sens. Twoje zdrowie


title: Alternatywa dla wielokrotnego dziedziczenia przy tworzeniu warstwy abstrakcji?

text: W moim projekcie tworzę warstwę abstrakcji dla niektórych API. Celem warstwy jest ułatwienie obsługi wielu platform, a także uproszczenie interfejsów API do zestawu funkcji, którego potrzebuję, przy jednoczesnym zapewnieniu pewnej funkcjonalności, której implementacja będzie unikalna dla każdej platformy. W tej chwili zaimplementowałem to poprzez klasę definiującą i abstrakcyjną, która posiada metody tworzące obiekty implementujące interfejsy. Klasa abstrakcyjna i te interfejsy definiują możliwości mojej warstwy abstrakcji. Ich implementacja w mojej warstwie powinna być oczywiście dowolna z punktu widzenia POV mojej aplikacji, ale zrobiłem to dla mojego pierwszego API, tworząc łańcuchy podklas, które dodają bardziej specyficzne funkcje, ponieważ cechy API, które ujawniają, stają się mniej ogólne. Przykład prawdopodobnie lepiej to zademonstruje: //Interfejs widziany przez interfejs aplikacji IGenericResource { byte[] GetSomeData(); } interface ISpecificResourceOne : IGenericResource { int SomePropertyOfResourceOne {get;} } interface ISpecificResourceTwo : IGenericResource { string SomePropertyOfResourceTwo {get;} } public abstract class MyLayer { ISpecificResourceOne CreateResourceOne(); ISpecificResourceTwo UtwórzResourceTwo(); void UseResourceOne(ISpecificResourceOne jeden); void UseResourceTwo(ISpecificResourceTwo dwa); } //Warstwa utworzona w mojej bibliotece public class LowLevelResource : IGenericResource { byte[] GetSomeData() {} } public class ResourceOne : LowLevelResource, ISpecificResourceOne { int SomePropertyOfResourceOne {get{}} } public class ResourceTwo : ResourceOne, ISpecificResourceTwo { string SomePropertyOfResourceTwo {get {}} } public część klasy Implementacja: MyLayer { override UseResourceOne(ISpecificResourceOne one) { DoStuff((ResourceOne)one); } } Jak widać, zasadniczo próbuję mieć dwa łańcuchy dziedziczenia na tym samym obiekcie, ale oczywiście nie mogę tego zrobić, więc symuluję drugą wersję z interfejsami. Rzecz w tym, że nie lubię do tego używać interfejsów; wydaje mi się, że to źle, moim zdaniem interfejs definiuje kontrakt, każda klasa, która implementuje ten interfejs, powinna być możliwa do użycia tam, gdzie ten interfejs jest używany, ale tutaj wyraźnie tak nie jest, ponieważ interfejsy są używane do zezwalania na obiekt z warstwa do maskowania jako coś innego, bez konieczności dostępu aplikacji do jej definicji. **Jaka technika pozwoliłaby mi zdefiniować kompleksową, intuicyjną kolekcję obiektów dla warstwy abstrakcji, przy czym ich implementacja pozostaje niezależna?** (Język to C#)


title: Jak działają tekstowe interfejsy użytkownika (TUI)?

text: Witam Niedawno zostałem przydzielony do portu i starego programu cobol. Jestem przyzwyczajony do GUI i nie mogę zrozumieć, jak działa TUI! Dużo szukałem w google, ale mogłem coś znaleźć .... Wiedziałem, że aplikacje konsolowe mogą wyprowadzać wiersz po wierszu, ale jak kolory itp. rysują się na ekranie terminala? ..Czy terminale to jakoś obsługują?? Czy istnieje standard??? Jestem naprawdę zdezorientowany!


title: Czy „testy” powinny być trzymane z dala od głównego potoku scalania?

text: Wszyscy znamy czasami m.in. scalanie może się nie udać. Jeśli nasze testy [jednostkowe/integracyjne] znajdują się w tym samym repozytorium co scalenie, czy istnieje tam słabość polegająca na tym, że jeśli testy zostały połączone niepoprawnie i nie pojawiają się w końcowym kodzie, to „nie wiemy, czego nie wiemy wiedzieć". Czy projekt testów jednostkowych powinien być wtedy całkowicie oddzielnym elementem? Pod wieloma względami powiedziałbym, że nie, ponieważ może to zaśmiecać gałąź master testami funkcji, które nie są jeszcze istotne. W językach kompilowanych kompilacja zakończy się niepowodzeniem, jeśli brakuje odpowiedniego kodu testu, co w pewnym stopniu pomoże. Być może jednak język nieskompilowany jest lepszy, ponieważ podczas wykonywania testu zawierałby bardzo konkretne brakujące elementy. Czy ktoś ma przepływ pracy, z którego można dowiedzieć się, które funkcje mogą być niepoprawnie scalone?


title: Czy wybrałbyś bazę danych czy pliki Dvc jako miejsce przechowywania wiki z dokumentacją?

text: Zaraz zacznę kodować wiki zorientowaną na dokumentację, jako projekt dla zwierząt. Podstawowe funkcje to: * Niezwykle łatwe grupowanie dokumentów według wersji * Składnia Markdown (podzbiór) * Wielu autorów i projektów Nadal nie jestem zdecydowany na opcje przechowywania. Oczywistym podejściem byłaby baza danych. Ponieważ jest to projekt dla zwierząt, prawdopodobnie wybiorę rozwiązanie NoSQL, prawdopodobnie MongoDB. Większość projektów związanych z pracą opiera się na MySQL i chcę, aby było to zabawne, tj. nie robić tego samego, co w pracy przez cały dzień. Mniej oczywistym podejściem byłoby Mercurial, podobnie jak git-wiki. Mercurial oferowałby oczywiście ściślejszą integrację z kodem i nie musiałbym budować wersjonowania. Nadal potrzebuję jakiejś bazy danych do przechowywania informacji o repozytorium i prawdopodobnie innych rzeczy, ale Mercurial byłby głównym miejscem przechowywania tekstów. Stworzyłem małą listę głównych punktów dla każdego podejścia: **Baza danych** * Mogę ją dowolnie kształtować, nie przejmując się przepływem pracy Mercurial. * Integracja kodu może być tak prosta, jak umieszczenie linku do repozytorium (ale nic więcej). * Dość łatwe przełączanie baz danych w dowolnym momencie, jeśli zajdzie taka potrzeba (mnóstwo narzędzi natywnych). * Naturalny wybór (więcej osób jest do tego przyzwyczajonych, nie połączonych z vcs). **Mercurial** * Wersjonowanie i diff domyślnie. * Ścisła integracja z kodem oznacza, że wiele fajnych rzeczy jest możliwych, takich jak wtyczka do przeglądu kodu. * Będę musiał napisać wrapper, nie jestem zadowolony z każdej gotowej biblioteki, którą oceniałem (niekoniecznie jest to zła rzecz). * Wciąż potrzebna jest jakaś baza danych. * Kilka prawidłowych przepływów pracy, ten, który wybrałem dla narzędzia, może nie być zbyt kompatybilny z tymi, które ludzie wybiorą dla swojego kodu. Chcę, aby było to tak małe i zabawne, jak to tylko możliwe, i trochę utknąłem na dwóch podejściach. Myśli? Czy brakuje mi czegoś oczywistego? Jeśli jest to zbyt niejasne, aby zdecydować, co lepiej zdefiniować przed dokonaniem wyboru?


title: Wynaleźć koło na nowo, czy technologię, która je napędza?

text: Niedawno zadałem pytanie na StackOverflow, które dotyczyło dzielenia ciągów i dopasowywania wzorców w .NET. Niektórzy programiści, którzy widzieli to pytanie, powiedzieli: „ _Wygląda na to, że próbujesz przeanalizować ciąg JSON ... dlaczego po prostu nie użyjesz JSON.NET lub JavaScriptSerializer_ ”. Rozmowa potoczyła się w pewnym momencie (i została odrzucona, najprawdopodobniej dlatego, że nie widzieli sensu pisania jakiejś funkcjonalności, co już zostało zrobione). Mam swoje powody, aby napisać tę funkcjonalność...moja implementacja, więc Far jest zgrabny i superszybki (chociaż trochę cierpi z powodu dzielenia ciągów, stąd pytanie StackOverflow). Myślę, że celem tych programistów było: „ _dlaczego wymyślać koło na nowo?_”. Mogę równie dobrze się spierać: „ _Po co zawracać sobie głowę tworzeniem NHibernate, skoro Microsoft zbudował doskonale dobry Entity Framework?_ ” lub „ _Po co zawracać sobie głowę budowaniem systemu Windows 8, kiedy Windows 7 jest idealnym systemem operacyjnym dla komputerów stacjonarnych?_ " Ta sama zasada obowiązuje, prawda? Kiedy firma motoryzacyjna projektuje nowy samochód, nie wynajduje koła na nowo; raczej ulepszają technologię, która je napędza. Podobnie mój parser JSON jest ładną, zgrabną i szybką implementacją (chociaż, jak wspomniano powyżej, trochę cierpi na dzielenie ciągów), dlatego gdy mój parser jest gotowy, czy powinienem unikać pisania czegoś, co już zostało zrobione, lub chwalony za robienie tego lepiej? **EDYTUJ:** Rozważ następujące pytanie: Czy wymyślanie koła na nowo jest naprawdę takie złe?


title: Mamy więc narzędzie do przeglądu kodu, czego teraz możemy użyć do dokumentów oprogramowania?

text: Używamy Subversion jako pełnego CM dla kodu, a także dla powiązanych dokumentów projektowych. Mamy JIRA i Rybie Oko. Kiedy chcieliśmy dodać narzędzie do recenzowania, przyjrzeliśmy się i przetestowaliśmy kilku kandydatów. Nasze ważone wymagania obejmowały zarówno przegląd kodu, jak i dokumentów, ale ostatecznie integracja z JIRA przechyliła wyniki na korzyść Crucible. Atlassian zatrzasnął drzwi do obsługi programów Word lub PDF w Crucible. Przetestowałem kilka metod obejścia, aby Tygiel działał dla dokumentów bez powodzenia. (Wtyczka Confluence/Crucible została wycofana przez Atlassian, więc ta opcja również nie jest dostępna). niewykonalny. Word Track Changes nie zapewnia metody prawdziwej współpracy i komentowania. Komentarze i znaczniki Adobe PDF są interesujące, ale nie zapewniają doskonałego sposobu na przechowywanie trwałej jakości rozmowy. Nie możemy działać w chmurze, nasze dokumenty muszą być hostowane lokalnie tylko na naszym własnym serwerze. Jesteśmy tylko na Sharepoint 2007. Pomocy! Czy ktoś ma jakieś sugestie?


title: Jak uniknąć powielania kodu w systemie, którego logika może się zmieniać z roku na rok?

text: Jaki byłby sposób na zaprojektowanie systemu, który ma logikę, która może się zmieniać z roku na rok? Istnieje aplikacja, która przeprowadza egzaminy online. Jest pięć pytań dotyczących konkretnego tematu. Pytania mogą (lub nie) zmieniać się z roku na rok. Zgodnie z moim obecnym projektem, pytania w bazie danych są przechowywane przez cały rok. Istnieje również pewna logika kodu specyficznego dla roku. W celu umożliwienia aplikacji na kolejny rok zostaną skopiowane lub zduplikowane rekordy i kod bazy danych dla danego roku. Jak uniknąć tego powielania kodu?


title: Dlaczego niektóre projekty nie używają generyków

text: Przyglądałem się wielu projektom java OSS i wiele z nich wciąż nie przyjęło generyków. Używają typów surowych (np. `List foo`) zamiast typów ogólnych (np. `List<string> foo`). Inne projekty zaczęły używać leków generycznych dopiero w ciągu ostatnich kilku lat, nawet sądząc, że istnieją od dłuższego czasu. Interesuje mnie, dlaczego ludzie i projekty unikają używania generyków, kiedy wydaje mi się, że ich używanie zamiast rawtypes jest teraz wadą. Dla tych z was, którzy używają javy, ale nie generyków, co (jeśli w ogóle) skłoniłoby was do zmiany?


title: Testowanie mojego modelu pod kątem harmonogramowania hybrydowego w systemach wbudowanych

text: Pracuję nad projektem dla szkoły, gdzie muszę przeanalizować wydajność kilku algorytmów serwerów o stałym priorytecie (serwer odpytujący, serwer deferrable, priorytet exchange) przy użyciu symulatora w przypadku harmonogramowania hybrydowego, gdzie mamy oba trudne okresowe zadania i miękkie zadania aperiodyczne. W moim modelu uważam, że: * zadania trudne mają okres równy ich terminowi realizacji, ze znanym czasem wykonania najgorszego przypadku (wcet). Rzeczywisty czas wykonania może być krótszy niż wcet. * zadania miękkie mają znane czasy wcet i losowe między przybyciem. Rzeczywisty czas wykonania może być krótszy niż wcet. Aby przetestować te algorytmy, potrzebuję realistycznych studiów przypadku. Z tego powodu grzebię w literaturze naukowej, ale borykam się z różnymi problemami: * Czasami znajduję listę zadań trudnych za pomocą wcet, ale nie jest sprecyzowane, jak znaleźć parametry zadań miękkich. * Biorąc pod uwagę wagę zadania, jak mogę modelować jego rzeczywisty czas wykonania? To znaczy, jakiego rozkładu losowego powinienem użyć biorąc pod uwagę wcet? * Jak mogę modelować losowe czasy między przybyciem miękkich zadań aperiodycznych?


title: Czy wysyłanie danych na serwer za pomocą tagu skryptu to przestarzały paradygmat?

text: Odziedziczyłem stary kod JavaScript dla trackera witryny, który przesyła dane do serwera za pomocą adresu URL skryptu: var src = "http://domain.zzz/log/method?value1=x&value2=x" var e = document.createElement( 'scenariusz'); e.src = src; Myślę, że pomysł polegał na tym, że żądania między domenami nie musiały być włączone. Został również napisany w 2005 roku. Nie jestem pewien, jak dobrze XmlHttpRequests były wtedy obsługiwane. Każdy może umieścić to na swojej stronie i wysłać dane na nasz serwer w celu zalogowania, a idealnie działałoby to w większości przeglądarek z javascriptem. Głównym ograniczeniem jest to, że serwer może jedynie odesłać kod javascript, a każde żądanie musi czekać na odpowiedź z serwera (w formie ogólnego wywołania metody javascript z potwierdzeniem), aby wiedzieć, że zostało odebrane, a następnie wysyła następne. Nie mogę znaleźć nikogo, kto robi to online, ani żadnych wskaźników dotyczących tego, czy jest to szybsze lub bezpieczniejsze niż XmlHttpRequests. Nie wiem, czy to tylko stary sposób robienia rzeczy, czy nadal jest to najlepszy sposób wysyłania danych na serwer, gdy głównie próbujesz wysłać dane w jedną stronę i potrzebujesz najlepszej możliwej wydajności. **Więc podsumowując, czy wysyłanie danych za pomocą tagu skryptu jest przestarzałym paradygmatem? Czy powinienem zrezygnować na rzecz używania XmlHttpRequsts?**


title: Jak skonfigurować wielodeweloperskie środowisko iOS?

text: Pozwól, że wyjaśnię moją potrzebę: mam środowisko sieciowe z 3 komputerami podłączonymi do serwera, który będzie działał w pełnym wymiarze godzin. Na serwerze działa również serwer FTP. Chciałbym stworzyć środowisko, w którym 3 programistów będzie mogło pracować nad tym samym projektem. Na przykład, jeśli tworzę aplikację CRM, chciałbym podzielić projekt na moduły, aby każdy z nich pracował nad każdym modułem, tak jak programista A będzie pracował nad uwierzytelnianiem, programista B będzie pracował nad zapisywaniem/odzyskiwaniem danych a programista C będzie pracował nad programowaniem interfejsu użytkownika. Jeśli używam Kontroli wersji, czy ktoś może poprowadzić, jak ją skonfigurować? Czy rozwój całej aplikacji może przebiegać **jednocześnie**, ponieważ każdy z programistów będzie pracował nad innymi obszarami? Jak mogę stworzyć taki rodzaj **wieloprogramowego** środowiska iOS?


title: Czy pojawienie się dysku SSD ma jakiś wpływ na optymalizację bazy danych?

text: Dzisiaj przeglądałem książkę o optymalizacji SQL Server i wydawało mi się, że pewna ilość pomysłów opierała się na liniowym modelu przechowywania. Ponieważ dyski SSD mają zupełnie inny model przechowywania, czy w jakikolwiek sposób zmieniają grę, jeśli chodzi o dostrajanie lub optymalizację bazy danych?


title: Czy niezmienne/bezstanowe singletony są złe?

text: Ostatnio doszło do jakiejś rewolucji przeciwko singletonom, ale czy jest z nimi coś nie tak, skoro są bezpaństwowcami? Znam gadki o nadużyciu iw ogóle... dotyczy to wszystkiego, nie tylko singli.


title: Co zrobić, aby mieć edytowalny plik do przekształcenia obiektu na stronie internetowej?

text: Mam kod, który tworzy obiekty na stronie internetowej za pomocą rysowania na kanwie HTML5. W moim pliku aspx mam funkcje takie jak: function drawLine(x, y, w, h, width) { var canvas = document.getElementById('cpMainContent_myCanvas'); var ctx = canvas.getContext('2d'); ctx.przenieśDo(x, y); ctx.lineTo(x + w, y + h); ctx.lineSzerokość = szerokość; ctx.stroke(); } function drawShape(x, y, listOfPoints, fill, width, color) { var canvas = document.getElementById('cpMainContent_myCanvas'); var ctx = canvas.getContext('2d'); ctx.początekŚcieżka(); ctx.przenieśDo(x, y); for (var i = 0; i < listOfPoints.length; i++) { ctx.lineTo(listOfPoints[i][0], listOfPoints[i][1]); }; ctx.fillStyle = wypełnienie; ctx.wypełnij(); ctx.closePath(); ctx.lineSzerokość = szerokość; ctx.strokeStyle = kolor; ctx.stroke(); } itd... Po stronie serwera generuję ciąg 's', który tworzy mój skrypt, a następnie wywołuję go za pomocą: ClientScript.RegisterStartupScript(GetType(), "Test", s.ToString(), true); Gdy strona jest wyświetlana, tworzy coś takiego: <script type="text/javascript"> //<![CDATA[ function Test(){drawLine(680,409.5,19,0,1);drawSemiCircle(699,409.5,8,0 );drawRectangle(700,422.5,68,-26,'#000000',1,'#FFFFFF');drawText('K1D',703,415.5,'14pt Arial wąskie');}Test();//]]> < /script> I otrzymuję stronę internetową wyświetlającą rysunki przedstawiające pewne obiekty. Moje pytanie brzmi, czy można mieć zewnętrzny plik do opisania, jak te obiekty są tworzone? Rzuciłem okiem na XSLT i wydaje mi się, że nie mogę znaleźć, czy obsługuje on niestandardowe rysunki linii. Chciałbym mieć możliwość posiadania pliku dla każdego typu obiektu, a następnie w pliku zdefiniować, z czego jest wykonany. Np. w pliku mogę zadeklarować: drawLine(x,y,19,0,1); narysujPółkole(x + 19, y,8,0); Albo coś podobnego. Myślę, że muszę użyć SVG. Powodem, dla którego użyłem płótna HTML5, było to, że myślałem, że to najnowsza technologia i zrobi prawie to, co robi SVG. Ale wydaje się, że używam XSL do tworzenia rysunku liniowego na mojej stronie internetowej, musiałbym użyć SVG. Czy interpretuję to poprawnie?


title: Nie można wybrać treści za pomocą CSS

text: Znalazłem stronę, na której tekst jest chroniony przed zaznaczeniem. Jak mogę to zrobić bez JavaScript. Myślę, że jest to możliwe dzięki CSS. Zestaw akapitów jest chroniony treścią, której nie można wybrać. Ale nie wiem jak to zrobić.


title: Repozytorium przechowywania dokumentów — Open Source / wzorzec projektowy

text: Obecnie posiadam kilka aplikacji internetowych, które oferują przesyłanie i przechowywanie dokumentów. Teraz próbuję utworzyć centralną usługę zarządzania dokumentami, którą ta aplikacja może wykorzystać do przechowywania i pobierania tych dokumentów. Obecnie dokumenty są przechowywane na dysku. Nazwa pliku to Guid, a jego rzeczywista nazwa pliku i typ danych są przechowywane w bazie danych. Czy stosuję właściwe podejście, zgodnie z którym mam tabelę bazy danych, która przechowuje informacje o dokumentach (Name, ContentType, CreatedDate, CreatedBy, SystemId itp.), a następnie przechowuję dokument w folderze w lokalnym systemie plików serwera? Kiedy zacząłem przechowywać dokumenty, pierwotnie były to obiekty typu blob w bazie danych. To znalazłem niekorzystne podejście. Moja baza danych stała się nagle MASYWNA i niemożliwa do wykonania kopii zapasowej i przywrócenia. Separując dokumenty do lokalnego systemu plików, baza danych jest teraz znacznie prostsza, a moja strategia tworzenia kopii zapasowych łatwiejsza. (Kopia zapasowa bazy danych, kopia zapasowa File Diff z folderu) Czy jest rozsądniejszy sposób na zrobienie tego, którego mi brakuje? Czy jest jakiś projekt open source, który mogę wykorzystać do ulepszenia projektu mojej nowej usługi, którą teraz tworzę od zera?


title: Dodatkowa klasa do budowy obiektów podczas pracy z bazą danych

text: Mam klasę wywodzącą się z `SQLiteOpenHelper`, która polega na pracy z bazą danych, tj. tworzeniu tabel, wstawianiu, selekcji danych. Wszystkie metody zajmujące się selekcją danych zwracają `Kursor`. To, czego naprawdę chcę, to uzyskać listę obiektów, a nie „kursor”, jednocześnie nie chcę, aby moja klasa robiła wiele rzeczy. Czy dobrym pomysłem jest dodanie innej klasy, która pobiera selekcje z bazy danych i konstruuje obiekty z selekcji? Dziękuję Ci.


title: Czy komercyjne kalkulatory statystyczne obliczają z wysokim stopniem arbitralnej precyzji, czy tylko z dokładnością zmiennoprzecinkową?

text: Czy komercyjne kalkulatory statystyczne, takie jak Minitab lub SAS (oraz open source, takie jak R) wykonują analizy statystyczne z bardzo dużą precyzją? A może używają po prostu zmiennoprzecinkowej (lub podwójnej) precyzji? Chcę napisać kalkulator statystyczny, z którego profesjonalni statystycy będą mogli korzystać w dowolnym celu. Napisałem program, który aktualnie wykonuje lub oblicza standaryzowany wynik Z, testy hipotez, przedziały ufności i statystyki opisowe. Obecnie 90% obliczeń wykorzystuje bibliotekę dowolnej precyzji (C++) lub klasę Javy BigDecimal. Teraz jestem prawie pewien, że to pomyłka, ponieważ nawet jeśli statystyka dotyczy wartości pieniężnych, statystyka jest zwykle zaokrąglana, a poszczególne wartości tworzące statystykę są również zaokrąglane do czterech miejsc po przecinku (lub tymczasowo przesunięte, aby pojawiły się jako liczby całkowite). Podejrzewam jednak, że w mojej logice jest jakiś błąd i nie potrafię powiedzieć, dlaczego precyzja jest ważna. Podejrzewam, że z podwójną precyzją w standardowej bibliotece nawet obliczenie średniej może być szalenie niedokładne. Być może chcę znać średnią ze zbioru bardzo małych liczb, który ma zbyt wiele miejsc po przecinku, aby mógł być obsługiwany przez precyzję zmiennoprzecinkową.


title: Czy licencja open source MIT oznacza upublicznienie utworów pochodnych (na licencji MIT)?

text: Szukam licencji open source dla biblioteki, którą chcę opublikować. Najlepiej byłoby, gdyby można było korzystać z tej biblioteki w darmowych lub komercyjnych aplikacjach bez uiszczania mi opłaty, ale jeśli stworzona zostanie jakakolwiek praca pochodna z biblioteki (na przykład jakiekolwiek ulepszenie biblioteki), powinna być udostępniona wszystkim na jej podstawie ta sama licencja. Innymi słowy, chcę sformułować następującą etykę: „Korzystasz z tej pracy za darmo, a jeśli ją ulepszysz, ja też mogę skorzystać z twojego ulepszenia za darmo”. To licencja typu copyleft, której szukam. Licencja MIT wygląda na możliwe rozwiązanie, ale nie jest dla mnie jasne, czy prace pochodne kodu objętego tą licencją MUSZĄ być PUBLICZNIE udostępniane każdemu. Czy ktoś może to wyjaśnić/potwierdzić? Jeśli istnieje inna bardziej odpowiednia licencja open source pokrywająca moje potrzeby, również jestem zainteresowany. Dziękuję.


title: Licencja ExtJs na darmową aplikację

text: Dużo czytam o licencji GPL. Ale to nie mogło rozwiać moich wątpliwości. Chcę opracować małą aplikację internetową przy użyciu ExtJs ze względu na jej funkcje. Nie będę go dużo używał. Ale niektóre funkcje są bardzo dobre. Teraz, jak rozumiem, myślę, że mogę dać tę aplikację mojemu przyjacielowi za darmo dla jego potrzeb biznesowych, prawda? Czy powinienem wziąć licencję komercyjną na ExtJs?


title: Za ile kodu powinienem odpowiadać?

text: Dzięki współpracownikom i wywiadom końcowym dowiedziałem się, że w mojej małej firmie jestem „odpowiedzialny” za 3-10 razy więcej kodu niż w innej pracy. Próbuję poszukać jakiegoś rozmytego wskaźnika, którego mógłbym użyć do porównania obciążenia pracą z innymi w mojej dziedzinie. Przez „odpowiedzialność za kod” nie mam na myśli „jestem jedynym, który zna obszar X bazy kodu” (choć niestety często jest to prawdą w środowisku startowym), ale raczej odnoszę się do liczby, takiej jak „code_base_size /liczba_programistów". Czy są jakieś zasoby, których mogę użyć, aby dokładniej mierzyć obciążenie pracą niż tylko liczenie wierszy kodu?


title: Korzystanie z notacji z podwójną kropką w linku URL

text: Ostatnio pracowałem nad projektem i zauważyłem, że używane są dwie różne formy adresu URL. src="../MyLinkUrl" and src="/MyLinkUrl" Używamy MVC .NET, a czasy, w których widziałem użycia .., były w plikach kodu JavaScript, a nie wtedy, gdy zostały wygenerowane przez pomocników URL MVC. Zazwyczaj zastosowania wahają się od określenia akcji kontrolera do określenia obrazów. Oba wydają się działać, ale zastanawiam się, co jest lepszą praktyką, czy zależy to od kontekstu. Niektóre pytania, które mam to: 1. Jakie korzyści/pułapki ma jedna z nich w stosunku do drugiej 2. Czy jedna praktyka jest lepsza od drugiej 3. Czy zależy to od kontekstu, a jeśli tak, to jaki kontekst?


title: TDD / jeden test reprezentujący cały scenariusz ? czy powinienem to podzielić?

text: Ćwicząc TDD, natknąłem się na tę specyfikację: _** Należy utworzyć użytkownika z zahaszowanym hasłem, utrwalić go i zwrócić token aktywacyjny._** Czy mój pierwszy test jednostkowy, (mam na celu rozpoczęcie testowania tego scenariusza ) powinien obejmować całość potrzeb? : shouldPersistTheNewlyCreatedUserWithAHasedPasswordAndReturnACorrespondingActivationToken A raczej podzielenie jego głównych części na kilka mniejszych testów i testowanie przyrostowe: powinienCreateAUser powinienReturnAUserActivationToken powinienReturnAnActivationTokenBasedOnNewlyCreatedUserEmail powinienPersPersUseristTheNewsCreAby przejść przez cały scenariusz A może powinienem postępować stopniowo, określając dodatkowe funkcje w innych małych testach. IMHO, korzyścią z pierwszego rozwiązania jest to, że **specyfikacja** definiuje się w jednym miejscu, nie ma potrzeby zbierania części funkcji, aby wypracować całość. Z drugiej strony liczba asercji i oczekiwań może być ogromna, przez co **kod** testu byłby mniej czytelny.


Powiedzmy, że mamy pewne wymagania * **Req1** : Nazwa użytkownika akceptuje wartość alfa 6-10 znaków. * **Req2** : Po kliknięciu przycisku Prześlij aplikacja wyświetli komunikat o błędzie „Proszę wprowadzić wartość lub znak od 6 do 10 włącznie” dla nieprawidłowej wartości granicznej. W tym przypadku, jeśli projektujemy przypadki testowe dla niepoprawnych wartości granicznych 5 i 11, byłyby to pozytywne przypadki testowe, ponieważ weryfikujemy również komunikat o błędzie, o którym mowa w wymaganiu. Jaki byłby negatywny przypadek testowy dla tego scenariusza?


title: GUI: ustawianie opcji w dwóch różnych miejscach i synchronizowanie ich?

text: Programowanie w Windows z Visual Studio 2010 C++ i MFC. Moje pytanie dotyczy tego, jak najlepiej przechowywać, aktualizować i przekazywać ustawienia lub opcje programu. Mam proste główne okno/ramkę/dialog GUI. W tym głównym oknie mam przycisk opcji. Kiedy klikam przycisk opcji, tworzę okno dialogowe opcji. W oknie dialogowym opcji otrzymuję odniesienie do „aplikacji” (koncepcja MFC, dostępna globalnie) i pobieram odniesienie do mojej klasy ustawień niestandardowych (instancja jest przechowywana w klasie aplikacji. Stamtąd mogę wypełnić okno dialogowe opcji i zapisz moje opcje z powrotem.Być może powinienem użyć wstrzykiwania zależności, aby wstrzyknąć ustawienia do mojego okna dialogowego?A może nawet nie powinienem uzyskiwać dostępu do ustawień z poziomu klasy okna dialogowego?Może powinienem ujawnić ustawienia za pomocą set/get w klasie okna dialogowego ?Ponadto, teraz chcę pokazać niektóre opcje bezpośrednio w oknie głównym, jednocześnie zachowując możliwość ustawienia w oryginalnym oknie dialogowym opcji.Więc teraz zastanawiam się, jaki jest do tego dobry projekt.Jeśli ustawię opcję w moich opcjach okno dialogowe Chcę zaktualizować opcje wyświetlane w głównym oknie.Wydaje mi się, że jest to dobre miejsce dla wzorca Observer, ale próbuję dowiedzieć się, jak to wszystko ułożyć w kontekście MFC (co najlepiej jak potrafię jest w zasadzie prawie taki sam jak a żadnego innego zestawu narzędzi GUI w jakimkolwiek innym języku, więc jeśli nie jesteś w MFC, nadal chcę twoje komentarze) 1. Jak mam przekazywać moje ustawienia? 2. Jak zsynchronizować ze sobą wyświetlanie GUI ustawień? Czy po kliknięciu OK w oknie dialogowym opcji opcje wyświetlane bezpośrednio w oknie głównym są aktualizowane?


title: Najlepszy sposób na obsługę rozdzielanych plików

text: Tak więc zazwyczaj plik CSV używa przecinka i znaku powrotu jako ograniczników pól i wierszy. To prowadzi do oczywistych problemów z tekstem, który może zawierać oba te znaki. Oczywiście są tam opcje (uciekanie przed nimi), ale jak ludzie sobie z tym radzą? Używać różnych znaków - fajki czy tyldy? Uciec im? Nie używaj rozdzielanych plików, w końcu jest rok 2010 i mamy teraz XML? Szukam przynajmniej wysiłku na przyzwoitą szansę na niezauważenie problemów. (Aby było jasne, jest to pytanie raczej z ciekawości niż z czegoś solidniejszego - to coś, z czym od czasu do czasu spotykam się bawiąc się danymi, zawsze je omijam, ale zwykle wydaje się to trochę, cóż, brudne, i zastanawiał się, jakie było doświadczenie innych ludzi).


title: Gdybyśmy mogli uzyskać formę binarną pliku, czy ta metoda kompresji plików zadziałałaby?

text: Nie jestem do końca pewien, jak łatwo jest pobrać binarną kompozycję pliku, ale załóżmy, że mamy jakiś plik z taką reprezentacją: 010011 Moglibyśmy zrobić 2 tablice. Jedna, która przechowuje pozycje zer: ['x', '', 'x', 'x', '', ''] I druga, która przechowuje pozycję jedynek (co jest po prostu przeciwieństwem poprzedniej tablicy ): ['', 'x', '', '', 'x', 'x'] Następnie możemy utrwalić te dwie tablice w pliku i voila? Nie wiem, czy jest coś, z czego nie zdaję sobie sprawy? Nie jestem ekspertem od kompresji, tylko zastanawiałem się, czy to zadziała.