title: Dobry problem z kodowaniem do nauczania i ćwiczenia jak pisać dobre testy jednostkowe?

text: Od czasu do czasu uczę innych technik przydatnych do pisania skutecznych testów jednostkowych (zwykle w Javie, gdzie pisanie testów jest dla wielu osób wyzwaniem). Jednak muszę jeszcze znaleźć mały, ale nie za mały problem, który mógłbym wykorzystać do zademonstrowania technik. Podobnie nie znalazłem jeszcze wielkiego problemu, który możemy wykorzystać do ćwiczenia pisania testów. Niektóre problemy, które próbowałem, wydawały mi się całkowicie nierealne lub nieistotne w prawdziwym życiu. Czy ktoś wie o wielkim problemie, który mogę wykorzystać, który jest mały, ale wystarczająco złożony i wystarczająco realistyczny, abym mógł z nim uczyć i ćwiczyć? W tym przypadku _mała_ = _wystarczająco niska złożoność, aby była dostępna dla większości programistów_ , niekoniecznie _łatwe do ukończenia w krótkim czasie._ W porządku, jeśli nie zakończymy wdrażania rozwiązania podczas warsztatów.


title: Czy doświadczenie w analizie biznesowej jest przydatne przy przejściu na karierę programisty?

text: _**Uwaga: Jeśli chcesz poznać sedno tego postu, przejdź do dwóch ostatnich akapitów._** Zanim rozwiniesz pytanie, wystarczy krótka preambuła: * Uznałem, że sieć Q&A dla programistów jest lepszym miejscem, aby to zadać pytanie niż StackOverflow. **Mogę się mylić**. * To jest cross-post z pytaniem, które zadałem na Quorze jakiś czas temu. Ogólny sedno odpowiedzi było takie, że **nawet jeśli niekoniecznie pomoże ci to w zdobyciu pracy w programowaniu, doświadczenie w analizie biznesowej najprawdopodobniej przyniesie korzyści programiście**. Główne przyczyny takiego stanu rzeczy obejmowały: * „zdolność do zrozumienia i wczucia się w biznesową stronę działalności firmy”; * pomysł, że umiejętność analizy biznesowej i sposób myślenia „mogą całkiem dobrze odwzorować [programowanie] i pomóc ci szybciej zdobywać umiejętności”; oraz * że „umiejętności analityczne mają kluczowe znaczenie dla bycia dobrym programistą”. * Ktoś w innym miejscu w tej sieci zapytał, czy „ważniejsze jest skupienie się na domenie biznesowej czy stosie/technologii programistycznej”. To pytanie rezonuje z jednym elementem mojego pytania, ponieważ dotyczy ono tego, czy skupić się na konkretnej wiedzy dziedzinowej (np. warzenie piwa), czy na konkretnych stosach technologicznych (np. starzenie w beczkach, podwójne upuszczanie itp.). Drugim elementem zawartym w moim pytaniu (dodatkowym do wartości konkretnej wiedzy dziedzinowej) jest wartość **ogólnego myślenia analitycznego (które można zastosować do dowolnej domeny biznesowej) dla programisty**. * Inny facet w tej sieci (przepraszam, nie mogę wkleić hiperłącza, ponieważ przy moim obecnym poziomie reputacji mam już limit 2 na post) zapytał „Ile analizy systemowej i biznesowej należy oczekiwać od programisty do zrobienia?". Twierdzi, że na większości stanowisk, które zajmował, nie było formalnych ról związanych z analizą biznesową lub systemową. Od programistów oczekiwano, że będą odgrywać te role. W związku z tym często **"przegrywał z facetami, którzy mogą być przeciętnymi programistami, ale znacznie lepiej rozumieją procesy biznesowe"**. Sądzę, że dzięki zadaniu pytania, pytający już przyczynił się do odpowiedzi na moje - wiedza z zakresu analizy biznesowej (tj. zarówno ogólna umiejętność analitycznego myślenia, jak i wiedza z konkretnej dziedziny biznesowej) oraz doświadczenie ("przyjęcie i internalizacja podejścia zorientowanego na klienta"). jak stwierdzono w jednej odpowiedzi) jest przydatne dla programisty. Oto **moje pytanie bardziej szczegółowo**: Obecnie pracuję jako konsultant w firmie konsultingowej. Zajmuję się głównie analizą biznesową w branży finansowej (aby mieć dobre pojęcie o tym, czym właściwie się zajmuję, rozważ przyjrzenie się temu, co ma do powiedzenia International Institute of Business Analysis). Zajmuję się tym od półtora roku, prosto po studiach, gdzie uzyskałem dyplom z informatyki (co jest fantazyjnym słowem na analizę biznesową). **Rozważam przejście na karierę programistyczną**. Pytanie: czy moje kwalifikacje w zakresie analizy biznesowej i półtora roku doświadczenia w pracy jako analityk biznesowy wniosą jakąkolwiek wartość do przyszłej kariery w tworzeniu oprogramowania. **Kolejne pytanie, które naturalnie następuje** : Zdaję sobie sprawę, że, jak wskazują odpowiedzi na Quorze, może to nie pomóc mi w _znalezieniu_ pracy w programowaniu. Więc co _byłoby_? (Oczywiście mam plan, ale chciałbym usłyszeć, co społeczność ma do powiedzenia). Możesz zadawać pytania lub polecać zmiany w pytaniu iz góry dziękuję!


title: Czy istnieje edytor, w którym mogę uruchomić kod za pomocą SSH?

text: Potrzebuję edytora, w którym mogę edytować stronę klienta kodu, a następnie podświetlić jego część i uruchomić podświetlony kod na podłączonym serwerze. Przykładem może być studio zarządzania SQL, ale potrzebuję go do skryptów powłoki i innych języków. UltraEdit robi coś zbliżonego do mechaniki kopiuj-wklej, czy są jeszcze jakieś inne?


title: Konkurs na Facebooku i wymiana głosów (polubień)

text: **ZAKTUALIZOWANE** prowadzimy konkurs przy użyciu aplikacji facebook do łączenia się z facebookiem i identyfikowania użytkowników. użytkownik postępuje zgodnie ze standardową procedurą Facebooka, aby zezwolić na aplikację i zalogować się. użytkownik może wtedy zagłosować na dowolny wpis tylko raz. głos jest zapisywany, aby ten sam użytkownik nie głosował dwa razy. ponieważ konkurs ma nagrodę pieniężną, stajemy przed problemem wymiany głosów. wymiana głosów to proces, w którym jedna osoba przechodzi do strony grupowej-forum-itp i wymienia swój głos na inny konkurs, dla ludzi głosujących na jego wpis w naszym konkursie. w istocie „kupując” głosy. osiągają większą liczbę dzięki fałszywym profilom (kolejny problem), więc mamy do czynienia z: 1. jak wykryć tę wymianę głosów 2. jak wykryć fałszywe profile na facebooku 3. ogólnie jak zabezpieczyć taką procedurę (z facebookiem lub bez) dobrze teraz szukamy oślepiająco oczywistych naruszeń 1. Bardzo podobne e-maile (john1@ , john2@) 2. Nagły wzrost liczby głosów (pod względem czasu i liczby głosów)


title: Witryny blogów społeczności

text: Rozważam napisanie bloga o moich doświadczeniach z programowaniem. Niestety wątpię, czy będę mógł regularnie publikować. Zastanawiam się, czy istnieją dobre witryny do blogowania o programowaniu, które zawierają posty wielu osób, pozwalając każdemu na publikowanie we własnym tempie, a ponieważ jest ich wiele, mają wystarczającą ilość treści, że warto je odwiedzić ? Kontekst: Istnieją trzy rodzaje postów, które prawdopodobnie utworzyłbym: * Osobiste przemyślenia na różne tematy (myślę, że funkcja językowa X jest ważna, ponieważ..., itp.) * Osobiste doświadczenia z danym językiem/ramą/itd. (miałem problemy z frameworkiem X, ponieważ...) * Osobiste doświadczenie próbując rozwiązać konkretny problem (Oto czego potrzebowałem, oto problemy, które napotkałem, i oto jak to rozwiązałem) Edytuj: Oczywiście błędnie wpisałem tytuł jako „społeczność witryn globalnych”. To nie wróży dobrze mojej wydajności blogowania ;)


title: Obieg kontroli wersji dla środowiska ze współdzielonym kodem

text: Pracuję w firmie, która rozważa „uaktualnienie” naszego systemu kontroli wersji. Posiadamy około 200 stron internetowych, które działają we własnych katalogach. Jednak wszystkie te witryny używają tego samego wspólnego kodu. Zasadniczo używamy 200 katalogów do wyświetlania kodu (html/css), a następnie wspólnego kodu do przetwarzania i zapytań do bazy danych. Jest trochę bardziej szczegółowy, ale na razie to zostawię. Mamy również system zaplecza, który używa głównie tylko wspólnego kodu. Obecnie mamy wielu programistów i wielu programistów/projektantów, z których wszyscy potrzebują regularnego dostępu do kodu. Niestety nasz wspólny kod nie jest dokładnie modułowy, więc trudno jest podzielić coś na „projekt”, gdy coś trzeba zrobić, ponieważ trafia tak wiele plików. Zasadniczo szukam sugestii dotyczących najlepszego dostępnego przepływu pracy dla systemu kontroli wersji. Z badań wynika, że git wydaje się być drogą do zrobienia. Ale będąc nowicjuszami w zakresie kontroli wersji, nadal mamy obawy dotyczące ogólnego przepływu pracy. Czy ktoś może mi udzielić porady na ten temat? **Edytuj:** staram się być trochę bardziej szczegółowy, mam nadzieję, że odpowiem na kilka pytań z komentarzy. Prawie każdy może zmienić dowolny kod w dowolnym momencie. Jeśli zmiana zostanie dokonana w kodzie współdzielonym, zostanie ona natychmiast zastosowana do centralnej bazy kodu. Tak naprawdę nie mamy schematu wersjonowania. Przywykliśmy do tego w przeszłości, ale nigdy nie było to egzekwowane, gdy dołączano nowych programistów. Wspólny kod jest wyraźnie oddzielony od reszty kodu. W naszym systemie jest kilka plików, które są często edytowane. Nieustannie „wchodzimy sobie po palcach” z tymi plikami. Te pliki są bardzo ważne dla naszego systemu. Jako pierwszy powiem, że to nie jest idealna sytuacja w pracy. Doskonale zdajemy sobie sprawę, że te pliki muszą zostać usunięte. Jesteśmy w trakcie planowania ich modularyzacji, ale nadal musielibyśmy wziąć je pod uwagę przy wyborze systemu wersjonowania. Myślę, że kolejną dobrą rzeczą, o której warto wspomnieć, jest fakt, że mamy dużą liczbę plików. To też nie jest idealne, ale wynika to przede wszystkim z braku systemu kontroli wersji dźwiękowej. Wielu programistów przez lata po prostu zapisywało kopię zapasową pliku, jeśli wprowadzałoby znaczącą zmianę. To kolejny powód, dla którego chcemy odejść od obecnego schematu. Dziękuję za twoje odpowiedzi.


title: Zalecenia dotyczące niejawnego i jawnego łączenia wierszy

text: Chciałbym poznać zalecenia dotyczące niejawnego łączenia linii w porównaniu z jawnym łączeniem linii w Pythonie. W szczególności, czy wolisz jedną formę nad drugą? Co polecasz jako ogólne ustawienie domyślne? Jakie masz kryteria wyboru jednego z nich, a jeśli wolisz jedno, kiedy robisz wyjątki dla drugiego? Mam na myśli odpowiedź na to pytanie, która odzwierciedla moje własne uprzedzenia, ale zanim opublikuję własną odpowiedź, chciałbym wiedzieć, co myślą inni ... i jeśli możesz mieć lepszy zestaw kryteriów niż to, co mam na myśli, wtedy z pewnością przyjmę twoją odpowiedź zamiast własnej. Niektóre zalecenia mogą być uogólnione na ten wybór w innych językach programowania, ale moje własne nastawienie jest nieco silniejsze w Pythonie ze względu na pewne cechy specyficzne dla języka, więc chciałbym poznać zarówno ogólne, jak i skoncentrowane na Pythonie rozumowanie, które możesz mam na ten temat. Na pewnym tle dyskusja toczyła się wokół konkretnego pytania na temat przepełnienia stosu, ale pomyślałem, że bardziej odpowiednie będzie przeniesienie dyskusji tutaj jako pytanie, aby uniknąć zaśmiecania odpowiedzi na SO za pomocą tej stycznej, ponieważ odeszła od tematu oryginalne pytanie. Możesz spojrzeć na to pytanie i odpowiedzi na przykładowe fragmenty kodu, które wywołały dyskusję. Oto uproszczony przykład: join_type = "explicit" a = "%s łączenie linii" \ % (join_type) # versus join_type = "implicit" b = ("%s łączenie linii" % (join_type))


title: Czy definiowanie każdej metody/stanu na obiekt w serii diagramów UML jest ogólnie reprezentatywne dla MDA?

text: Obecnie pracuję nad projektem, w którym wykorzystujemy framework łączący generowanie kodu i ORM wraz z UML do tworzenia oprogramowania. Metody są dodawane do klas UML i generowane jako częściowe klasy, w których „rzeczy się dzieje”. Na przykład klasa UML „Treść” może mieć metodę DeleteFromFileSystem(void). Można to zaimplementować w następujący sposób: public częściowa klasa Zawartość { public void DeleteFromFileSystem() { File.Delete(...); } } Wszystkie metody są zaprojektowane w ten sposób. Wszystko dzieje się w tych gigantycznych klasach domenowych bomb logicznych. Czy tak zwykle robi się MDA, DDD lub podobne? Na razie moje wrażenie z MDA/DDD (które zostało nazwane przez przełożonych) jest takie, że poważnie hamuje to moją produktywność (wszystko musi być zrobione tak, jak trzeba) i że utrudnia prace konserwacyjne, ponieważ cała logika jest powiązana, zakorzeniona, przeplatana gigantyczne bomby. _Proszę nie interpretować tego jako tyrady - jestem tylko ciekaw, czy jest to typowe MDA, czy jakaś ekstremalna MDA_ **UPDATE** Odnośnie powyższego przykładu, moim zdaniem Content nie powinien poradzić sobie z usuwaniem jako takim. Co jeśli zmienimy pamięć lokalną na Amazon S3, w takim przypadku musielibyśmy ponownie wdrożyć tę funkcjonalność w wielu miejscach zamiast jednego pojedynczego interfejsu, dla którego moglibyśmy zapewnić drugą implementację.


title: Podejście do projektowania oprogramowania dla dużej relacyjnej bazy danych

text: Pracuję nad osobistym projektem, który będzie wykorzystywał złożoną i dużą relacyjną bazę danych. Podczas projektowania bazy danych miałem kilku współpracowników, którzy doradzali, jak mam podejść do mojej aplikacji; doradzili, aby korzystać z ram encji. Z tego, co przeczytałem i co oglądam, wydaje się, że framework encji jest właściwym narzędziem do pracy. Jednak przyszedłem do programmer.stackexchange, aby zapytać, czy powinien to zrobić ktoś, kto dopiero zaczyna swoją karierę. Pozwól, że przeformułuję; Mam 3 lata doświadczenia w projektowaniu / programowaniu stron internetowych (html/css/js/php/mysql), a teraz około 1 roku w rzeczywistej inżynierii oprogramowania C#/VB. Więc pytanie brzmi: czy powinienem wykorzystać framework encji, czy powinienem zbudować ten dość złożony i ambitny projekt bez frameworka encji; ergo budowanie całego SQL, które obsłuży ogromne ilości danych relacyjnych? Powodem, dla którego pytam, jest to, że chcę uzyskać jak największy zwrot z inwestycji (wiedzę i doświadczenie) z projektu. Jeszcze raz... dzięki!


title: Jakie są najlepsze praktyki rejestrowania z punktu widzenia projektu?

text: Chcę dodać logowanie do aplikacji, nad którą aktualnie pracuję. Wcześniej dodałem logowanie, to nie jest problem. Ale z perspektywy projektowania w języku obiektowym, jakie są najlepsze praktyki rejestrowania zgodne z OOP i wzorcami? _**Uwaga:_** Obecnie robię to w C#, więc przykłady w C# są oczywiście mile widziane. Chciałbym również zobaczyć przykłady w Javie i Ruby. * * * **Edytuj:** Używam log4net. Po prostu nie wiem, jak najlepiej go podłączyć.


title: Jak wykorzystać wzór Dekorator, aby dodać niewielką funkcjonalność do dużych obiektów?

text: To pytanie dotyczy użycia wzorca Decorator w celu dodania niewielkiej funkcjonalności do obiektów dużych klas. Zgodnie z klasycznym wzorcem Decorator, rozważ następującą strukturę klas: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/FCyEd.png) Wyobraź sobie na przykład, że dzieje się to w grze. Instancje `ConcreteCharacterDecorator` mają na celu dodanie niewielkiej funkcjonalności do `ConcreteCharacter`, które są 'opakowane'. Na przykład `methodA()` zwraca wartość `int` reprezentującą obrażenia, jakie postać zadaje wrogom. `ConcreteCharacterDecorator` po prostu dodaje do tej wartości. W związku z tym wystarczy dodać kod do metody `methodA()`. Funkcjonalność metody `methodB()` pozostaje taka sama. `ConcreteCharacterDecorator` będzie wyglądać tak: class ConcreteCharacterDecorator extends AbstractCharacterDecorator{ ConcreteCharacter character; public ConcreteCharacterDecorator(ConcreteCharacter character){ this.character = character; } public int methodA(){ return 10 + znak.metodaA(); } public int metodaB(){ znak.metodaB(); // po prostu deleguj do opakowanego obiektu. } } Nie ma problemu z małymi klasami zawierającymi dwie metody. **A co, jeśli `AbstractCharacter` zdefiniował 15 metod?** `ConcreteCharacterDecorator` musiałby zaimplementować je wszystkie, mimo że ma to na celu jedynie dodanie niewielkiej funkcjonalności. Skończę z klasą zawierającą jedną metodę, która dodaje trochę funkcjonalności i kolejne 14 metod, które po prostu delegują do wewnętrznego obiektu. Wyglądałoby to tak: class ConcreteCharacterDecorator extends AbstractCharacterDecorator{ ConcreteCharacter znak; public ConcreteCharacterDecorator(ConcreteCharacter character){ this.character = character; } public int methodA(){ return 10 + znak.metodaA(); } public int metodaB(){ znak.metodaB(); // po prostu deleguj do opakowanego obiektu. } public int methodC(){ character.methodC(); // po prostu deleguj do opakowanego obiektu. } public int methodD(){ character.methodD(); // po prostu deleguj do opakowanego obiektu. } public int methodE(){ character.methodE(); // po prostu deleguj do opakowanego obiektu. } public int methodF(){ character.methodF(); // po prostu deleguj do opakowanego obiektu. } public int methodG(){ character.methodG(); // po prostu deleguj do opakowanego obiektu. } public int methodH(){ character.methodH(); // po prostu deleguj do opakowanego obiektu. } public int methodI(){ character.methodI(); // po prostu deleguj do opakowanego obiektu. } public int methodJ(){ character.methodJ(); // po prostu deleguj do opakowanego obiektu. } public int methodK(){ character.methodK(); // po prostu deleguj do opakowanego obiektu. } public int methodL(){ character.methodL(); // po prostu deleguj do opakowanego obiektu. } public int methodM(){ character.methodM(); // po prostu deleguj do opakowanego obiektu. } public int metodaN(){ znak.metodaN(); // po prostu deleguj do opakowanego obiektu. } public int methodO(){ character.methodO(); // po prostu deleguj do opakowanego obiektu. } } Oczywiście bardzo brzydkie. Prawdopodobnie nie jestem pierwszym, który napotkał ten problem z Dekoratorem. Jak mogę tego uniknąć?


title: Dlaczego twórcy gier preferują system Windows?

text: Czy DirectX jest łatwiejszy lub lepszy niż OpenGL, nawet jeśli OpenGL jest wieloplatformowy? Dlaczego nie widzimy naprawdę potężnych gier na Linuksa, takich jak na Windows?


title: Jak powiedzieć klientowi, że nie chcę już pracować nad jego projektem

text: To prawdopodobnie będzie zabrzmieć bałaganem, ale o to chodzi. Od jakiegoś czasu pracuję nad projektem dla klienta. Nie podano mi żadnych szczegółów poza „To musi być wtyczka XYZ i interfejs z produktem ABC”. Co było w porządku, ale teraz zbliżamy się do końca (chyba) i to się po prostu przeciąga. Nie mam na to czasu, a harmonogram jest już przesunięty o 3 miesiące. Próba nakłonienia klienta do opisania mi, w jaki sposób chciałby móc poruszać się po danych (problem z interfejsem użytkownika) jest po prostu trudna. Przesłałem makiety tego, co myślę, że chce, ale jego ostatnia odpowiedź brzmi: „powinieneś spojrzeć na produkt XXX”, ma on podobną funkcjonalność. Oczywiście patrzyłem na to i wygląda podobnie do tego, co przesłałem, ale nie sądzę, aby sposób, w jaki zbudowałem framework, będzie wspierał to, co teraz mi opisuje. Przez cały proces mieliśmy dobrą komunikację, ale on nie wie, czego chce. Wyjaśniłem, jak zamierzam zbudować framework, a on się zgodził, więc nie jest to zły wybór z mojej strony, jeśli chodzi o projektowanie. Kiedy przechodzę przez to, co myślę, że są sfinalizowanymi modułami, mówi: „Powinieneś to zrobić w ten sposób”, co wymaga ode mnie cofnięcia się i przerobienia kodu i interfejsu użytkownika. Niektóre mniejsze elementy mogłyby być przeze mnie lepiej przemyślane, ale najważniejsze jest to, jak zinterpretowałem jego wymagania i kilkakrotnie przejrzałem ten moduł podczas tworzenia. W zeszłym miesiącu otrzymałem już ostatnie środki, więc teraz pracuję za darmo. Nie chcę już zajmować się tym projektem. Otrzymałem już płatność. Zrealizowałem już inne udane projekty z tym klientem, a on ma wiele innych projektów, które chce zrobić. Co do cholery powinienem zrobić? Nie chcę już pracować nad tym projektem. Nie chcę prosić o więcej pieniędzy (pieniądze nie są problemem). Nie chcę go też denerwować. Wiem, że wygląda na to, że chcę mieć ciastko i je zjeść. Jeśli uważasz, że powinienem to zakończyć, jak powinienem to zrobić, biorąc pod uwagę okoliczności?


title: Czy zasada 10% kodu oznacza, że komentarze są nadal ważne?

text: Używałem starszych języków przed C# i zawsze czułem potrzebę komentowania tego, co robię, więc jest to jasne dla każdego, kto czyta kod. Ale teraz, kiedy używam C# przyzwoicie, często czuję, że pisanie większości komentarzy jest uciążliwe, ponieważ czuję, że stwierdzam oczywiste. Więc jeśli nie robię skomplikowanych formuł lub algorytmów, nie jestem pewien, jak powinienem komentować. Microsoft osiągnął taką czytelność w C#, jestem zahipnotyzowany. Czy masz to samo uczucie? Jak piszesz swoje komentarze, aby nie były czystą redundancją? Czy zmieniłeś nawyki komentowania / najlepsze praktyki?


title: Książki lub pomoc dotycząca analizy OO

text: Mam ten kurs, w którym uczymy się o modelu domeny, przypadkach użycia, kontraktach i ostatecznie przechodzimy do diagramów klas i diagramów sekwencji, aby zdefiniować dobre klasy oprogramowania. Właśnie miałem egzamin i zostałem wyrzucony, ale częściowo z tego powodu, że prawie nie mamy żadnego praktycznego materiału, spędziłem co najmniej dwa dobre miesiące bez samodzielnego rysowania ani jednego diagramu klasy na podstawie studium przypadku. Podczas egzaminu nauczyciel przekazał nam model domeny, dwa lub trzy przypadki użycia niektórych istotnych operacji systemowych oraz słowniczek. Musieliśmy stworzyć dla nich diagram klas i kilka diagramów sekwencji. Chodzi o to, że przejście od modelowania w prawdziwym życiu do zajęć OO nie wydawało mi się jasne. Całkiem dobrze radzę sobie z zasadami GRASP, ale brakuje mi praktyki. Mógłbym użyć czegoś, co daje gotową analizę i prosi o narysowanie projektu OO w postaci diagramów klas lub czegoś takiego. Wiem, że różni się to w zależności od osoby, ale niektóre koncepcje zawsze powinny mieć sens. Nie jestem tutaj, aby obwiniać system lub klasę, w której należę, tylko zastanawiam się, czy ludzie mają jakieś książki w stylu ćwiczeń, które dostarczają modele domen z glosariuszami, diagramami sekwencji systemu i proszą o użycie GRASP do tworzenia oprogramowania zajęcia? Naprawdę przydałoby mi się ćwiczenie w samotności, przechodząc od analizy do koncepcji bytów oprogramowania. Prawie skończyłem z książką Larmana zatytułowaną „Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development, Third Edition”. To dobra książka, ale sam nic nie robię, bo nie ma w niej ćwiczeń. Od czterech lat programuję w OO w Javie i C++. Był zorientowany na aplikacje biznesowe. Spędziłem też 6 miesięcy nad składnią UML na przyspieszonym kursie na studiach. Po prostu nie rozumiem, jak mogą oczekiwać, że zdefiniuję encje oprogramowania od przypadków użycia do diagramów klas, jeśli zrobiłem jak jeden lub dwa w swoim życiu.


title: Jak ściśle przestrzegasz zasady „Brak cyklu zależności” (NDepend)

text: Trochę tła: Jako lider zespołu używam NDepend mniej więcej raz w tygodniu, aby sprawdzić jakość naszego kodu. Szczególnie bezcenne są dla mnie zakres testów, wiersze kodu i metryki cyklomatycznej złożoności. Ale jeśli chodzi o cykle wyrównywania i zależności, jestem trochę… dobrze zaniepokojony. Patrick Smacchia ma fajny wpis na blogu, który opisuje cel levelowania. Żeby było jasne: w „cyklu zależności” rozumiem cykliczne odwołania między dwiema przestrzeniami nazw. Obecnie pracuję nad frameworkiem GUI opartym na Windows CE dla wbudowanych instrumentów - pomyśl tylko o platformie graficznej Androida, ale dla bardzo niskich instrumentów. Framework to pojedynczy zestaw zawierający około 50.000 linii kodu (bez testów). Framework jest podzielony na następujące przestrzenie nazw: * Podsystem Nawigacji i Menu * Podsystem Ekranu (Prezenterzy / Widoki / ...) * Kontrolki / Warstwa Widgetów Dzisiaj spędziłem pół dnia, próbując doprowadzić kod do odpowiednich poziomów [dzięki Resharper ogólnie nie ma problemu], ale we wszystkich przypadkach istnieją pewne cykle zależności. Więc moje pytanie: jak ściśle przestrzegasz zasady „braku zależności”? Czy poziomowanie naprawdę jest takie ważne?


title: Używanie XSLT do przesyłania wiadomości zamiast rozmieszczania/odprowadzania obiektów komunikatów Java

text: Do tej pory używałem ręcznie lub generowanych (np. JAXB) obiektów Java jako „nośników” wiadomości w oprogramowaniu do przetwarzania wiadomości, takim jak konwertery protokołów. Prowadzi to często do żmudnego programowania, takiego jak kopiowanie/konwertowanie danych z obiektu komunikatu jednego systemu do instancji obiektu komunikatu systemu innego. I na pewno przynosi dużo kodu Java z getterami i seterami dla każdego atrybutu wiadomości, kodu walidacji itp. Zastanawiałem się, czy dobrym pomysłem byłoby przekonwertowanie wiadomości XML jednego systemu na format innego systemu - lub nawet przekonwertowanie żądań na odpowiedzi z tego samego systemu - za pomocą XSLT. Oznaczałoby to, że nie musiałbym już rozpakowywać strumieni XML do obiektów Javy, kopiować/konwertować danych za pomocą Javy i rozmieszczać wynikowy obiekt komunikatu do innego strumienia XML. Ponieważ każda wiadomość może faktycznie mieć jakiś cel, połączyłbym wiadomość (i ładunek, który zawiera we właściwościach lub elementach/atrybutach XML) z funkcjami EXSLT. Zmieniłoby to moje podejście projektowe z imperatywnego do deklaratywnego stylu. Czy ktoś robił to wcześniej, a jeśli tak, jakie są twoje doświadczenia? Czy zmniejszona ilość kodu „płyty kotłowej” Javy wpływa na zwiększoną złożoność (E)XSLT?


title: Jak skomentować system plików?

text: Gdy pewne części kodu są nietypowe lub niejasne, powszechną praktyką jest pozostawienie komentarza wyjaśniającego, dlaczego tak jest. Czasami jednak system plików może mieć nietypową konfigurację, taką jak katalog z uprawnieniami 0477. **Czy jest jakaś konwencja na zostawianie komentarzy na ten temat?** Piszę 'Developers Wiki' dla firmy, ponieważ byłoby to miejsce na takie rzeczy. Jednak wolałabym coś **bardziej standardowego, jeśli istnieje** i bardziej dostępnego, gdy na przykład następny facet musi wchodzić przez SSH z domu w środku nocy i może nie myśleć o sprawdzaniu wiki (lub nawet mieć dostęp do niego).


title: Czy to prawda, że "Prawdziwi programiści mogą pisać kod asemblera w dowolnym języku."?

text: > Prawdziwi programiści mogą pisać kod asemblera w dowolnym języku. > (Larry Wall). O ile wiem, pan Larry Wall próbuje powiedzieć, że dla prawdziwego programisty każdy język może mieć taką samą funkcjonalność jak ASM. Ale poważnie nie rozumiem. Jak pisać kod asemblera w językach wysokiego poziomu, takich jak Perl, Python, Java i C#? Języki takie jak Perl i Python nie mają nawet wskaźników. Czy ma na myśli coś innego? Co właściwie próbuje powiedzieć pan Wall?


title: Jak zrobić kompilator w C++?

text: Zapewne o to proszono, ale nie mogę wygooglować „Jak zrobić kompilator w C++”, ponieważ jako wynik otrzymam po prostu „Jak skompilować C++”. W każdym razie na moje pytanie chciałbym stworzyć prosty język programowania w C++. Teraz rozumiem podstawowe rzeczy we/wy plików, ale nie rozumiem, jak zbudować plik EXE. Problem polega na tym, że nie wiem, jak dokładnie EXE są „planowane”, biorąc pod uwagę, że większość ludzi tego nie robi. Miałem zamiar po prostu przetworzyć język na asembler i złożyć go za pomocą asemblera. Ale nie chcę tego robić, chcę faktycznie skompilować go bezpośrednio do EXE. Czy ktoś wie, jak miałoby to być zrobione? PS: Do wszystkich, którzy twierdzą, że tworzenie kompilatora jest praktycznie niemożliwe, to dość szybki proces, to po prostu implementacja funkcji OOP, które są trudne


title: Czy naprawdę możesz stworzyć kod wysokiej jakości, jeśli brakuje Ci snu?

text: Słyszałem o programistach, którzy przez dwa dni kodują bez snu i piją kawę i Red Bulla. Również w filmach takich jak The Social Network w scenie pokazują, że Mark Zuckerberg programuje od 36 godzin. Mówi się również, że w firmach takich jak Facebook, Google, foursquare itp. mogą kodować ponad 24 godziny bez snu. Czy to naprawdę prawda? Czy naprawdę możesz stworzyć kod wysokiej jakości, jeśli nie masz snu? _Czy takie rzeczy jak Red Bull nadrabiają sen?_


title: Jakie są najlepsze rozwiązania dotyczące korzystania z sesji NHiberante w asp.net (mvc/web api)?

text: W moim projekcie mam następującą konfigurację: public class WebApiApplication: System.Web.HttpApplication { public static ISessionFactory SessionFactory { get; zestaw prywatny; } public WebApiApplication() { this.BeginRequest += delegate { var session = SessionFactory.OpenSession(); CurrentSessionContext.Bind(sesja); }; this.EndRequest += delegate { var session = SessionFactory.GetCurrentSession(); if (sesja == null) { return; } sesja = CurrentSessionContext.Unbind(SessionFactory); session.Dispose(); }; } protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); var Assembly = Assembly.GetCallingAssembly(); SessionFactory = new NHibernateHelper(zespół, Server.MapPath("/")).SessionFactory; } } public class PositionsController : ApiController { prywatna sesja ISession tylko do odczytu; public PositionsController() { this.session = WebApiApplication.SessionFactory.GetCurrentSession(); } public IEnumerable<Pozycja> Get() { var wynik = this.session.Query<Position>().Cacheable().ToList(); if (!result.Any()) { wyrzuć nowy HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound)); } zwraca wynik; } public HttpResponseMessage Post(PositionDataTransfer dto) { //TODO: Mapuj dto do modelu IEnumerable<Position>positions = null; using (var transaction = this.session.BeginTransaction()) { this.session.SaveOrUpdate(positions); spróbuj { transakcja.Zatwierdź(); } catch (StaleObjectStateException) { if (transakcja != null && transaction.IsActive) { transaction.Rollback(); } } } var response = this.Request.CreateResponse(HttpStatusCode.Created, dto); response.Headers.Location = new Uri(this.Request.RequestUri.AbsoluteUri + "/" + dto.Name); odpowiedź zwrotna; } public void Put(int id, string value) { //TODO: Implementuj PUT throw new NotImplementedException(); } public void Usuń(int id) { //TODO: Zaimplementuj DELETE throw new NotImplementedException(); } } Nie jestem pewien, czy jest to zalecany sposób wstawiania sesji do kontrolera. Myślałem o użyciu DI, ale nie jestem pewien, jak wstrzyknąć sesję, która jest otwarta i powiązana w delegatze BeginRequest do konstruktora kontrolerów, aby uzyskać tę publiczną PositionsController(session ISession) { this.session = session; } **Pytanie:** Jaki jest zalecany sposób używania sesji NHiberante w asp.net mvc/web api ?


title: Czy możesz „skopiować” GUI/funkcje innej aplikacji?

text: Tworzę aplikację, która opiera się w dużej mierze na innej aplikacji, która służy podobnemu celowi. Właściwie nie planuję go sprzedawać, ale zastanawiam się, czy w ogóle byłoby to legalne. Grafiki nie pożyczam z innej aplikacji, ale mam bardzo podobną kolorystykę, praktycznie te same funkcje (dodałem kilka, ale mało znaczących) i bardzo podobny układ interfejsu. Oczywiście nie pożyczam żadnego kodu (jest napisany w Objective-C, a kopalnie napisane w Javie). Ponownie, właściwie nie planuję go sprzedawać, tylko zastanawiałem się nad hipotetycznym. Nie jestem pewien, czy to tylko kod chroniony prawem autorskim, czy sam projekt.


title: Czy powinienem zamienić WCF na NserviceBus?

text: Posiadamy centralny serwer, który wysyła i odbiera wiadomości z wielu komputerów znajdujących się w sieciach klienckich w różnych lokalizacjach. Aby to ułatwić, obecnie używam WCF z TCPNetBindings, korzystając z komunikacji dupleksowej zabezpieczonej certyfikatami. Teraz mamy z tym wiele problemów - głównie dlatego, że jesteśmy proszeni o obsługę "trybu rozłączonego" (musimy być odporni na błędy). Z tego, co wiem, nie ma prostego sposobu na zrobienie tego przy użyciu stosu WCF — musielibyśmy coś zaimplementować i być może użyć msmq. Ostatnio przyglądałem się NServiceBus i widzę, że wydaje się on dobrze pasować - odporność na awarie, wiadomości mogą być wysyłane przez internet przez prostą bramkę http itp. Wiem, że jest szanowany w społeczności i Widzę dlaczego, patrząc na to. Więc moje pytanie brzmi... Czy korzystanie z NServiceBus brzmi jak rozsądny pomysł, czy też ktoś ma jakieś inne sugestie / doświadczenia w świecie rzeczywistym, które się z tym wiążą? Wydaje mi się, że martwię się wprowadzeniem nowej technologii, o której wiem stosunkowo niewiele, i stawieniem czoła problemom z takimi rzeczami, jak jej zabezpieczanie, konfigurowanie wszystkiego w niezawodny sposób, pojawiają się po drodze. poszycie „architektury i wybranie czegoś błyszczącego, co w końcu ugrzęźnie mnie we wdrożeniu, zamiast trzymać się WCF i po prostu sprawić, by działał dla mnie.. Dzięki!


title: Skuteczne i proste dopasowanie dla 2 nierównych zestawów punktów w małej skali

text: Muszę dopasować dwa zestawy punktów 3D, jednak liczba punktów w każdym zestawie może być inna. Wydaje się, że większość algorytmów ma na celu wyrównanie obrazów i przycięcie do pracy z setkami tysięcy punktów. Mój przypadek to 50 do 150 punktów w każdym z dwóch zestawów. Do tej pory zapoznałem się z algorytmami `Iterative Closest Point` i `Procrustes Matching`. Wdrożenie `algorytmów Prokrustesa` wydaje się całkowitą przesadą dla tej małej ilości. `ICP` ma wiele implementacji, ale nie znalazłem żadnej łatwo zaimplementowanej wersji uwzględniającej tak zwane „odstające” – punkty bez pasującej pary. Oprócz kosztów implementacji algorytmy takie jak „Fractional” i „Sparse ICP” wykorzystują pewne informacje statystyczne do anulowania punktów, które są uważane za wartości odstające. W przypadku serii zawierających od 50 do 150 punktów miary statystyczne są często tendencyjne lub nie są spełnione kryteria istotności statystycznej. Znam "Problem przypisania" w optymalizacji liniowej, ale nie nadaje się on do przypadków z nierównymi zestawami punktów. Czy istnieją inne, małoskalowe algorytmy, które rozwiązują problem dopasowania 2 zestawów punktów? Poszukuję nazw algorytmów, artykułów naukowych lub implementacji C++. Potrzebuję kilku wskazówek, aby wiedzieć, od czego zacząć moje poszukiwania.


title: Informacje o kodowaniu Watsona

text: Watson firmy IBM ma wiele informacji o książkach zakodowanych w „bazie danych”, którą Watson przeszukuje w czasie rzeczywistym. Czy ktoś wie, jak ta informacja jest zakodowana? Chodzi mi o to, że nikt nie mógł wpisać wszystkich tych zasad.


title: Elementy posortowane niejawnie czy jawnie?

text: Mam więc następujący problem: mam kilka uporządkowanych elementów, uporządkowanych w następujący sposób: * Typ 1: Musi być pierwszym elementem. (możliwy tylko jeden, zawsze obecny) * Typ 2: Musi być drugim i kolejnymi elementami, jeśli występuje. * Typ 3: Musi być zamówiony jako ostatni. Ujęte nieco bardziej zwięźle / pseudoregex: `12*3+` Teraz, konstruując te elementy, robię to w metodzie, w której łatwo jest zrobić coś takiego: public List<IElement> CreateElements(...) { var lista = ...; list.Add(nowy Type1()); list.AddRange(GetType2Elements()); list.AddRange(GetType3Elements()); } Nie ma jednak jednoznacznego uporządkowania semantycznego - to tylko lista, którą akurat konstruuję w określony sposób. Bardziej jawnym sposobem jest zaimplementowanie przez IElement IComparable, a następnie użycie jawnie posortowanej listy i zwrócenie jej w zamian. To wyniosłoby „uporządkowanie” z mojej metody konstrukcji i posortowało byty bez względu na to, jak są tworzone. Jednak nagle staje się to nieco mniej trywialne, ponieważ należy zaimplementować co najmniej 3 różne metody porównania. Co byś wybrał?


title: Za dużo seniorów w jednej drużynie?

text: Czy zbyt wielu starszych programistów w jednym zespole może okazać się złą rzeczą? Na przykład 4-5 starszych programistów w zespole 6-7 osób. Jaka jest optymalna liczba/stosunek w takich sytuacjach? Czy może to prowadzić do zbytniej filozofii i sporów o idee? Czy ktoś miał takie doświadczenie, że może się nim ze mną podzielić?


title: Plik konfiguracyjny, który może być modyfikowany przez użytkownika w C#

text: Chcę utworzyć plik konfiguracyjny (najlepiej plik tekstowy), który może być modyfikowany przez użytkownika. Usługa Windows odczyta z tego pliku i odpowiednio się zachowa. Czy możesz polecić format pliku dla tego rodzaju procesu? To, co mam w swoim, to plik konfiguracyjny, taki jak pliki konfiguracyjne gry, ale nie wyobrażam sobie, jak z niego odczytać. Moje pytanie jest bardzo podobne do plików INI, rejestru czy plików osobistych?, ale moje pytanie jest inne, ponieważ muszę rozważyć edycję użytkownika.


title: Czy język programowania może działać również bez instrukcji?

text: Jako programista w JavaScript zauważyłem, że wszystko, co można zrobić za pomocą instrukcji i bloków, można zrobić za pomocą samych wyrażeń. Czy język programowania może działać tylko z wyrażeniami? A jeśli tak, to dlaczego w ogóle używa się stwierdzeń?


title: MVC helper funkcje logiki biznesowej

text: Tworzę kilka funkcji pomocniczych (mvc.net) do tworzenia wspólnych kontrolek, których potrzebuję w prawie każdym projekcie, takich jak pola alertów, okna dialogowe itp. Jeśli nie zawierają one żadnej logiki biznesowej i jest to tylko kod po stronie klienta (html, js) to w porządku. Mój problem pojawia się, gdy potrzebuję logiki biznesowej za tym pomocnikiem. Chcę utworzyć kontrolkę „oceń moją aplikację (internetową), która będzie widoczna co 3 dni, a użytkownik może ją na razie ukryć, przejść do linku oceń lub ukryć go na zawsze. Aby to zrobić, potrzebuję pewnego rodzaju dostępu do bazy danych i kodu, który działa jako logika biznesowa. Normalnie użyłbym do tego kontrolera, z moim DI i wszystkim, ale nie wiem teraz, gdzie umieścić ten kod. Powinno to zostać umieszczone **w funkcji pomocniczej** lub **w kontrolerze**, który odpowiada obiektom zamiast ActionResults?


title: Jak mogę pobierać opłaty za oprogramowanie open source skierowane do osób fizycznych?

text: Większość takich pytań dotyczy tylko dużych programów dla firm z pieniędzmi. Zajmuję się tworzeniem małej aplikacji skierowanej do osób indywidualnych. Mówiąc nieformalnie, chcę sprzedać aplikację użytkownikom, ale pozwolić im ją naprawiać i modyfikować (ale nie redystrybuować). Praktycznie i prawnie, jak bym to zrobił?


title: QT-C++ a ogólny C++ i STL

text: Ostatnio odświeżyłem swój C++ na Ubuntu QQ. Uwielbiam framework Qt do wszystkiego, szczególnie do budowania GUI. Zapoznałem się z nim, kiedy używałem PyQt w ciągu ostatnich kilku lat. Używając PyQt, miałem pewne problemy, które są teraz bardziej widoczne podczas używania C++ z Qt: **Qt ma wiele rozszerzeń do C++, które są specyficzne dla Qt** \- QString jest tylko jednym z powszechnych przykładów, nie wspominając o automatycznym usuwaniu śmieci. Możliwe jest pisanie aplikacji Qt przy użyciu C++ bez znajomości C++ i STL. Być może wkrótce będę musiał ponownie wejść na rynek pracy i chciałbym móc rozważyć pozycje w C++ - ale obawiam się, że zbytnie wiązanie się z Qt ograniczy moje możliwości pracy z ogólnym C++, które kiedyś były dość potężne, ale są teraz długo uśpione i zardzewiałe. Czy powinienem unikać Qt? Czy lepiej byłoby używać WxWidgets lub GTK++ do budowania GUI? Jaki jest najlepszy framework GUI do użycia, który umożliwia/wymaga najczęściej używania generycznego C++ i STL? Jak mogę stać się najbardziej rynkowym programistą C++, jeśli chodzi o frameworki GUI itp.?


title: Najlepsza opcja do wysłania obrazu z klienta javascript na serwer SQL

text: Z klienta (przeglądarki) za pomocą javascript chcę wysłać obraz do serwera sql (i zapisać z profilem użytkownika) (serwer sql) wraz z innymi danymi, takimi jak identyfikator użytkownika lub nazwa. Która opcja jest lepsza? Wysłać obraz jako img/jpg? Lub przekonwertować go na base64 i wysłać wszystko w formacie json?


title: Dokumentacja Java API w formacie PDF lub ebook

text: Ponieważ mam długą podróż pociągiem do iz pracy, zastanawiałem się, czy jest dostępna wersja dokumentacji Java API, którą mógłbym umieścić na moim Kindle. Byłoby miło, gdybym miał w głowie coś, o czym chciałbym jeszcze więcej pomyśleć. Wiem, że mogę przeglądać sieć za pomocą Kindle, ale zasięg jest nierówny i powolny. Wiem, że dokumenty API nie są tak naprawdę zaprojektowane dla formatu odczytu sekwencyjnego, ale jestem ciekaw, czy ktoś inny pomyślał o tym i dał mu szansę. Uwaga Nie czytam Java API, aby dowiedzieć się, jak programować Java, ale przejrzeć klasy, których planuję użyć. Różnice między takimi rzeczami jak FileReader i FileInputStream są subtelne i najlepiej można je uzyskać, przeglądając API, a nie czytając rozdział w książce, który powie mi wiele rzeczy, które już znam.


title: Jak zapełnić prywatny kontener do testu jednostkowego?

text: Mam klasę, która definiuje prywatny (dokładnie `__container`, ponieważ jest to python). Używam informacji w ramach wspomnianego kontenera w ramach logiki tego, co robi klasa i mam możliwość dodawania/usuwania elementów wspomnianego kontenera. W przypadku testów jednostkowych muszę wypełnić ten kontener pewnymi danymi. Te dane zależą od wykonanego testu, a zatem umieszczenie ich wszystkich w setUp() byłoby niepraktyczne i nadęte - a ponadto mogłoby dodać niepożądane efekty uboczne. Ponieważ dane są prywatne, mogę dodawać rzeczy tylko przez publiczny interfejs obiektu. Uruchamia kod, który nie musi być uruchamiany podczas testu jednostkowego, aw niektórych przypadkach jest to po prostu kopiowanie i wklejanie z innego testu. Obecnie wyśmiewam cały pojemnik, ale jakoś nie wydaje się to tak eleganckie rozwiązanie. Ze względu na fałszowanie ramek Pythona (mock), wymaga to, aby kontener był publiczny — więc mogę użyć `patch.dict()`. Wolałbym zachować prywatność tych danych. **Jakiego wzorca można użyć, aby nadal zapełniać kontenery bez wykonywania metody publicznej, dzięki czemu mam dane do przetestowania?** Czy jest sposób na zrobienie tego za pomocą fałszywego `patch.dict()`, którego przegapiłem?


title: Jak nazywa się ten „interfejsowy” wzór/strukturę?

text: Załóżmy, że mamy klasę `XmlDoc`, która zawiera podstawową funkcjonalność obsługi struktury danych XML oraz zapisywania/ładowania danych do/z pliku. Teraz mamy kilka podklas, `A`, `B` i `C`. Wszystkie one dziedziczą po `XmlDoc` i dodają specyficzne dla komponentu metody ustawiania i pobierania dużej ilości danych. Są jak "interfejsy", ale dodają również implementację dla sygnatur. Na koniec mamy klasę `ABCDoc`, która łączy wszystkie „interfejsy” poprzez wirtualne dziedziczenie wielokrotne i dodaje pewne elementy specyficzne dla `ABCDoc`, takie jak użycie metod `XMLDoc` do ustawienia odpowiedniego typu dokumentu. Możemy również mieć klasę `ADoc` do zapisywania tylko danych `A`. Jak nazywa się ten wzór? „Interfejs” nie jest właściwym słowem, ponieważ interfejsy zwykle nie zawierają implementacji. Dodatkowe punkty za konwencje kodu C++.


title: jak zarządzasz ocenami wydajności aplikacji

text: Próbowałem wymyślić sposoby skutecznego przeprowadzania przeglądów wydajności przed instalacją wszystkich wydań wykonanych przez nasz zespół. Czy zazwyczaj traktujesz to jako część procesu przeglądu kodu, czy traktujesz to jako osobne zadanie przeglądu? FYI - nie mamy dedykowanego zespołu testującego wydajność. To od programistów zależy, czy aplikacja działa dobrze. Aplikacje, o których mówię, to aplikacje internetowe.


title: Zaczynasz zdanie od nazwy funkcji?

text: Czasami podczas pisania czegoś, co odnosi się do języka programowania uwzględniającego wielkość liter, zaczynam zdanie od nazwy funkcji. Teraz reguły języka angielskiego mówią, że pierwsze słowo w zdaniu musi być pisane wielką literą; nazwa funkcji jest jednak pisana małymi literami. Jeśli zastanawiasz się, co mógłbym powiedzieć, że pierwsze słowo będzie nazwą funkcji, weź ten przykład: > Twoja implementacja fread jest zepsuta. fread musi zwrócić liczbę > przeczytanych bajtów. Rozumiem, że mógłbym zmienić drugie wystąpienie _fread_ na _It_, ale chcę wiedzieć, jak najlepiej sobie z tym poradzić, poza przepisywaniem zdania. Czy nazwę funkcji należy pisać wielką literą? Jedynym sposobem, w jaki chciałbym usłyszeć „przepisz zdanie” jako odpowiedź, jest to, że rozpoczęcie zdania od nazwy funkcji narusza jakąś angielską regułę, której nie jestem świadomy. Edycja: Naprawdę dziękuję wszystkim za te odpowiedzi. Zmienili i poprawili mój wgląd w ten problem. Wiele się z tego nauczyłem. Jestem bardzo zaskoczony, że nie pomyślałem o tych prostych, ale dobrych rozwiązaniach. Myślę, że moje stanowisko w sprawie zmiany zdania było zbyt trudne i teraz zdaję sobie sprawę z tych dobrych odpowiedzi, że ogólna zmiana zdania wydaje się być najlepszą opcją do radzenia sobie z tymi przypadkami, czy to dodanie nawiasu po funkcji, czy powiedzenie Funkcja przed nazwę funkcji i, jeśli jest dostępna, przy użyciu formatowania nazwy funkcji.


title: Jak internetowy interfejs API powinien obsługiwać błędnie napisane/dodatkowe parametry?

text: **Pytanie:** W przypadku publicznego internetowego interfejsu API (wysyłanie żądań HTTP Get/Post, pobieranie danych JSON/XML z powrotem), jak powinny być obsługiwane parametry, które są błędnie napisane lub są dodatkowe. Wydaje mi się, że jeśli niepoprawne parametry zostaną zignorowane, błąd w kodzie wywołującego może pozostać niezauważony, ponieważ zwracałby poprawny wynik. Może to być szczególnie prawdziwe w sytuacjach, w których nie byłoby to oczywiste patrząc na zwrócone wyniki. **Mam na myśli tylko parametry opcjonalne.** Oczywiście, jeśli wymagany parametr jest błędnie napisany, parametr zostanie uznany za brakujący i zostanie zwrócony błąd. **Jako przykład** , wywołanie Place Search API ma cztery wymagane parametry (lokalizacja, promień, czujnik i klucz) oraz kilka parametrów opcjonalnych (jednym z nich jest typ). Mogę uruchomić te polecenia (z kluczem API) i odzyskać prawidłowe wyniki: curl "https://maps.googleapis.com/maps/api/place/search/json?location=45.47554,-122.794189&radius=500&sensor=false&key =<api_key>&type=bakery" curl "https://maps.googleapis.com/maps/api/place/search/json?location=45.47554,-122.794189&radius=500&sensor=false&key=<api_key>&types=bakery" pierwsze polecenie ma parametr „types” w liczbie pojedynczej, który jest nieprawidłową nazwą klucza. Interfejs API ignoruje ten parametr i zwraca wszystkie typy jednostek. W tym przypadku błąd jest oczywisty, ale mogą zdarzyć się sytuacje (i inne wywołania API), w których go nie będzie.


title: Jak uzyskać certyfikat w celu C?

text: > **Możliwy duplikat:** > Certyfikaty programowania iOS Jestem zainteresowany certyfikacją Objective C lub jakimkolwiek certyfikatem, który może wspierać mnie jako programistę iOS, co polecacie?


title: Implementacja logiki typu Rules bez silnika reguł (jak Drools)?

text: Mam system, który musi wyprowadzać decyzje i alerty na podstawie danych wejściowych odczytanych z kolejki wiadomości. Ten system będzie przechowywać stan wszystkich obiektów w pamięci i aktualizować ten stan na podstawie danych wejściowych z kolejki przesyłania komunikatów. Logika musi być zastosowana do danych wpływających do systemu i gdy dane aktualizują pamięć roboczą systemu. Przykład: > Mam 50 czterowirnikowych dronów, które zgłaszają swój aktualny stan do kolejki RabbitMQ >. Obejmuje to właściwość lokalizacji (szerokość i długość geograficzną), właściwość „pozostały czas > na baterii” oraz właściwość procentową całkowitego naładowania akumulatora. Reguły > uruchamiane dla każdej wiadomości drona wyglądałyby następująco: if (drone.charge_left < czas_do_domu_z(drone.lokalizacja)) { drone.state = EMERGENCY; // natychmiast wyląduj send_alert("Dron musi zostać odzyskany!"); // umieść alert w innej kolejce wiadomości } else if (drone.charge_percentage < jakiś_próg) { drone.state = RETURN_HOME; send_alert("Dron wraca na ładowanie"); } ... i tak dalej Drools wydaje się być przyzwoitym kandydatem do tego zadania, ale tylko dlatego, że niewiele silników reguł wydaje się być wciąż w fazie rozwoju i ma największą nazwę, że tak powiem. Z drugiej strony architektura Drools wydaje się ciężka i przestarzała. Widziałem wiele przypadków użycia w domenie finansowej, co jest dość dalekie od mojego przypadku użycia. Skłaniam się ku użyciu rozwiązania opartego na wykresie baz danych (np. Neo4j), w którym każda z reguł jest węzłem zawierającym predykat MVEL i pewien rodzaj alertu, który jest wysyłany, gdy predykat reguły ocenia prawdę. Jak zaprojektowałbyś taki system w 2014 roku? EDYCJA: Zapomniałem dodać, że tylko zespół inżynierów kiedykolwiek przyjrzy się lub zmodyfikuje te zasady, ale byłoby pożądane, aby wartości takie jak „jakiś_próg” były dostrajane przez nietechnicznych członków zespołu za pośrednictwem interfejsu internetowego.


title: Czy istnieje księga kanoniczna o Scali?

text: Interesuje mnie nauka Scali, ale ze względu na względną nowość nie mogę znaleźć wielu książek na ten temat. Czy istnieje książka, która jest de facto standardem opisującym najlepsze praktyki, metodologie projektowania i inne przydatne informacje na temat Scali? Co sprawia, że ta książka jest wyjątkowa?


title: Niedawny absolwent z pomysłem, ale potrzebuję porady na początek

text: Jak mówi tytuł, jestem świeżo upieczonym absolwentem matematyki i zamierzam rozwijać oprogramowanie jako karierę. Poszukiwanie pracy nie zaowocowało jeszcze pracą, ale w ciągu ostatnich kilku miesięcy nauczyłem się sporo Ruby/Rails i Objective-C, a także nauczyłem się git i wdrożyłem prostą aplikację internetową w Heroku. Chcę dalej tworzyć swoje CV i czuć, że tworzenie prostej aplikacji i wkład w projekty open source wygląda naprawdę dobrze. Co prowadzi mnie do mojego pomysłu: moja dziewczyna jest botanikiem w California Native Plant Society i właśnie stworzyli tę naprawdę fajną bazę danych rzadkich roślin. Chciałbym więc stworzyć prostą aplikację na iPhone'a, która pozwoliłaby użytkownikowi na zapytanie tej bazy danych. W końcu fajnie byłoby zrobić inne rzeczy, ale moim pierwszym celem jest stworzenie razem prototypu, który umożliwiłby wyszukiwanie za pomocą naukowych nazw różnych gatunków roślin. Szukam porady lub zasobów, ponieważ nie jestem nawet pewien, co google. Nie jestem pewien, czy moja aplikacja fizycznie wypełnia pola tekstowe, czy też istnieje inny sposób przeszukiwania internetowej bazy danych, którego nie znam. CNPS to całkiem niezła organizacja non-profit i fajnie byłoby im w jakiś sposób oddać. Planuję udostępnić to również na githubie, jeśli ktoś inny jest zainteresowany. Dziękuję


title: Tworzenie platformy lub aplikacji na masową skalę – od czego to wszystko się zaczyna?

text: Zauważyłem, że w dzisiejszych czasach powstaje mnóstwo platform. Zawsze zastanawiałem się, od czego to wszystko się zaczyna – jakich wyborów należy dokonać, powody, dla których wybiera się określone platformy, dlaczego niektóre miejsca decydują się na korzystanie z Open Source, czy produktów Microsoft. Jestem na etapie mojej kariery .NET Development, gdzie chciałbym napisać coś dużego i zrobić z tego platformę wykorzystującą wiele różnych technologii, aby stworzyć jedno rozwiązanie. To pytanie też jest prawdopodobnie dwustronne. **Gdzie zaczyna się rozwój platformy?** **Co musi zbadać i poznać programista, zanim podejmie wyzwanie napisania aplikacji na masową skalę** **Czy warto angażować społeczności w projekt, nawet jeśli nie planujesz w pełni korzystać z technologii open-source?** To tylko kilka pytań, które nie dają mi spokoju. Jestem młodym programistą chcącym doskonalić swoje umiejętności w zakresie tworzenia, tworzenia i budowania aplikacji. Nie zawsze jest fajnie, gdy milionerzy polegają na mnie w mojej ciężkiej pracy, gdzie mogę wykorzystać własną pracę, aby wygodniej wiązać koniec z końcem. Dziękuję


title: Co jest złego we wskaźnikach w C++?

text: Kontynuacja dyskusji w Dlaczego wskaźniki nie są zalecane podczas kodowania w C++ Załóżmy, że masz klasę, która hermetyzuje obiekty, które wymagają pewnej inicjalizacji, aby były poprawne - jak gniazdo sieciowe. // Blah zarządza niektórymi danymi i przesyła je przez gniazdo klasy gniazda; // Prześlij deklarację, więc ładne słabe powiązanie. class blah { ... rzeczy TcpSocket * gniazdo; } ~blah { // TcpSocket uchwyty dtor rozłącz usuń gniazdo; // lub lepiej, zapakuj go w inteligentny wskaźnik } ctor zapewnia, że `socket` jest oznaczone jako NULL, a później w kodzie, gdy mam informacje potrzebne do zainicjowania obiektu. // inicjalizacja blah if ( !socket ) { // Wiem, że gniazdo nie zostało utworzone/podłączone // utwórz je w znanym stanie inicjalizacji i obsłuż wszelkie błędy // RAII to dobra rzecz ! gniazdo = nowy TcpSocket(ip,port); } // i kiedy rzeczywiście muszę go użyć if (socket) { // jeśli gniazdo istnieje, musi być połączone i poprawne } Wydaje się to lepsze niż posiadanie gniazda na stosie, gdy jest ono utworzone w pewnym stanie „oczekującym” w uruchomienie programu, a następnie konieczność ciągłego sprawdzania niektórych funkcji isOK() lub isConnected() przed każdym użyciem. Dodatkowo, jeśli ctor TcpSocket zgłosi wyjątek, dużo łatwiej jest obsłużyć w momencie nawiązania połączenia Tcp niż w momencie startu programu. Oczywiście gniazdo to tylko przykład, ale trudno mi pomyśleć o tym, kiedy enkapsulowany obiekt z jakimkolwiek stanem wewnętrznym nie powinien być tworzony i inicjowany za pomocą `new`.


title: jak podejść do projektu oprogramowania dla farmacji

text: Chciałbym zrealizować koncepcję weryfikacji oprogramowania apteki. Ale mam kilka pytań, których nie znam. **Informacje lekarza** Aby uzupełnić lub wydać nowy RX, oprogramowanie musi mieć dostęp do bazy danych aktualnych lekarzy. Czy istnieje baza danych do pobrania lub usługa, z którą mogę wchodzić w interakcję, aby uzyskać listę aktualnie praktykujących lekarzy? **Informacje o lekach** muszą mieć dostęp do bazy danych leków, którą, jak sądzę, firmy takie jak Medispan oferują za odpowiednią cenę. Ile kosztuje interakcja z tego rodzaju firmami. **Płatności** Jak mogę połączyć się z firmą ubezpieczeniową, medyczną, medyczną itp. w celu rozliczenia? Widziałem, że te programy są w stanie składać zamówienia i automatycznie otrzymywać odpowiedzi, ile zostało naliczonych i zapłaconych itp. **Co zrobiłem** Zacząłem po prostu pracować nad podstawową aplikacją formularzy Windows, która byłaby klientem a potem wyobrażam sobie, że musiałbym połączyć go z moim serwerem, aby przeprowadzić uwierzytelnianie itp., zanim zapłaciłbym za nie z serwera. Czy aplikacje klienckie łączą się bezpośrednio z interfejsami API, czy tylko pośredniczą usługą sieciową, która z kolei wykonuje całą pracę? Znalazłem również jeden projekt open source http://www.anshealth.com/, ale wydaje się, że jego konfiguracja jest dość skomplikowana i nie ma zbyt wiele dokumentacji. Na ich forach nie było żadnego posta od zeszłego roku. **Edytuj** Zmodyfikowałem moje pytanie, aby było bardziej szczegółowe, zadałem konkretnie trzy pytania.


title: Uprawnienia aplikacji na jednej stronie reprezentowane przez interfejsy API RESTful

text: Próbuję znaleźć właściwy sposób obsługi uprawnień w aplikacji jednostronicowej, która komunikuje się bezpośrednio z kilkoma interfejsami API RESTful, które implementują HATEOAS. Na przykład: „Jako użytkownik mojej aplikacji mogę przeglądać, uruchamiać i wstrzymywać zadania, ale nie mogę ich zatrzymywać”. Bazowy interfejs API reszty ma następujący zasób: /jobs/{id}, który akceptuje GET i PUT. GET zwraca model zadania, a PUT akceptuje model zadania jako _treść żądania_ w postaci: { "_links" : { "self" : "/jobs/12345678" } "id" : 12345678, "description" : "foo job", "state" : "STOPPED" } Akceptowane stany zadań mogą być: nieaktywne | bieganie | wstrzymane | zatrzymany. Wymóg mówi, że na UI muszę mieć przyciski: START, PAUZA, STOP… i wyświetlać tylko na podstawie uprawnień zalogowanego użytkownika. Z punktu widzenia API wszystko działa, ponieważ podstawowa logika na serwerze zapewnia, że użytkownik nie może zaktualizować stanu do stanu STOPPED po wysłaniu żądania (być może zwracany jest 401). Jaki jest najlepszy sposób na poinformowanie aplikacji/interfejsu użytkownika o uprawnieniach użytkownika, aby mogła ukryć wszelkie przyciski, do których użytkownik nie ma uprawnień do działania? **Czy API powinno udostępniać listę uprawnień, na przykład :** { "_links" : { "self" : "/permissions", "jobs" : "/jobs" } "permissions" : { "job" : ["UPDATE", "DELETE"], "job-updates" : ["START", "PAUSE"] } } ** ALBO powinien zmienić się interfejs API tak, aby uprawnienia były odzwierciedlone w linkach HATEOS, może coś w stylu :** { "_links" : { "self" : "/jobs/12345678", "start" : "/jobs/12345678/state?to=RUNNING", "pause" : "/jobs/12345678/state?to=PAUSED" , } "id" : 12345678, "description" : "foo job", "state" : "DORMANT" } **A może to zrobić w zupełnie inny sposób?**


title: Testy parametryczne – kiedy i dlaczego z nich korzystasz?

text: Ostatnio w pracy mamy pewne różnice zdań odnośnie testowania sparametryzowanego. Zwykle używamy stylu TDD (a przynajmniej staramy się), więc rozumiem zalety takiego podejścia. Trudno mi jednak zobaczyć, jak przyniosą testy sparametryzowane wzmocnienie. Dla porównania pracujemy nad usługą i jej bibliotekami, które są udostępniane przez interfejs RESTful. To, co do tej pory widziałem, to testy, które przynajmniej używają JUnit w Eclipse: * Brak szczegółów - gdy test się nie powiedzie, bardzo trudno jest zobaczyć parametry, które spowodowały jego niepowodzenie * Często skomplikowane w tworzeniu * Ma tendencję do tworzenia po napisaniu kodu - nie jest to wada jako taka, ale czy ludzie rozpoczynają kawałek kodu, mając na uwadze testy parametryczne? Jeśli ktoś ma jakieś przykłady tego, gdzie są naprawdę przydatne, a nawet dobre wskazówki, jak ich używać, byłoby fantastycznie. Chcę się upewnić, że nie jestem po prostu uparty, ponieważ osobiście nie wybieram ich używania i sprawdzam, czy są czymś, co powinniśmy rozważyć, będąc częścią naszego arsenału testowego.


title: Co oznacza przewodnik dotyczący licencjonowania neo4j?

text: Najwyraźniej istnieją trzy wersje Neo4j, zwane Community, Advanced i Enterprise. Przewodnik po Licensing Guide Neo4j mówi, że Community to GPL3 (co potwierdziłem na podstawie pliku LICENSE w tarballu), a Advanced/Enterprise wydaje się być podwójnie licencjonowany na podstawie AGPL3 i licencji własnościowej. Co dokładnie oznacza stwierdzenie w przewodniku?: > Jeśli używasz Neo4j do tworzenia aplikacji online o zamkniętym kodzie źródłowym, które są > kluczowe dla Twojej firmy, wtedy porozmawiaj z nami o komercyjnych > licencjonowaniu Neo4j Advanced lub Enterprise wydania. Co dokładnie oznacza aplikacja o zamkniętym kodzie źródłowym w kontekście oprogramowania serwerowego? Czy pisanie oprogramowania, które jedynie komunikuje się z neo4j przez RPC, uruchamia AGPL w interpretacji Neo? Jeśli tak, to znacznie różni się to od sposobu, w jaki 10gen traktuje MongoDB (AGPL). Powyższe nie byłoby tak mylące, gdyby nie następujące stwierdzenie: > ... możesz swobodnie korzystać z Community Edition Neo4j Server na licencji GPL > – co oznacza, że możesz go używać w dowolnym miejscu coś w stylu > MySQL. _Używane w ten sposób, tylko zmiany, które wprowadzasz w samym oprogramowaniu Neo4j > powinny być otwarte i udostępniane społeczności._ To ostatnie zdanie nie jest wymagane w przypadku oprogramowania GPL3 zmodyfikowanego dla organizacji, ale nigdy nie rozpowszechnianego i udostępnianego tylko jako Aplikacja internetowa. W rzeczywistości jest to dokładny powód, dla którego wynaleziono AGPL3, aby wypełnić tę lukę. Co więcej, poniższe stwierdzenie nie ma sensu, ponieważ projekt w domenie publicznej jest projektem bez praw autorskich: > Kochamy rozwój oprogramowania typu open source: więc możesz swobodnie używać wszystkich komponentów Neo4j > w swoim projekcie o otwartym kodzie źródłowym, należącym do domeny publicznej na licencji GPL ( dla > Community) lub AGPL (dla Advanced i Enterprise).


title: Najbardziej odpowiedni typ uwierzytelniania dla projektu MVC5

text: Zaraz rozpoczynam nowy projekt ASP.NET MVC5 i na chwilę obecną planuję wymagania dotyczące uwierzytelniania/autoryzacji. Klient chce uwierzytelnienia systemu Windows, aby uniemożliwić użytkownikom pamiętanie kolejnego nowego hasła. Witryna jest skierowana w stronę sieci Web, więc wadą byłoby brzydkie wyskakujące okienko z prośbą o podanie danych uwierzytelniających, gdy uzyskują do niej dostęp poza witryną. Co gorsza, na telefonie komórkowym to pudełko stanowiłoby problem. Opcje uwierzytelniania Active Directory od razu po wyjęciu z pudełka są dla mnie nowe, ale po pewnym przeczytaniu wydają się bardziej dotyczyć kontrolowania ról i autoryzacji przez grupy AD. Zamierzam zachować wszystkie kwestie związane z autoryzacją wewnątrz aplikacji. Najlepiej byłoby, gdyby użytkownicy mieli uwierzytelnianie w systemie Windows, ale z ładną stroną logowania, na której mogą wybrać swoją domenę z listy rozwijanej i wprowadzić dane logowania do domeny. Z lektury pomyślałem, że prawdopodobnie ActiveDirectoryMembershipProvider jest odpowiedzią. Jednak z nowymi dostępnymi opcjami chcę mieć pewność, że nie ma innych opcji przed ślepym wyborem tej trasy.


title: Jak wybrać parametr do kodowania Golomba?

text: Próbuję zaimplementować kodowanie Golomba, ale nie rozumiem, jak jest dostrojone, aby uzyskać optymalny kod. Mówi się, że > kodowanie Golomba wykorzystuje przestrajalny parametr M, aby podzielić wartość wejściową na dwie > części: q, wynik dzielenia przez M, i r, resztę. Iloraz > jest wysyłany w kodowaniu jednoargumentowym, po którym następuje reszta w obciętym kodowaniu binarnym >. Nie rozumiem, jak wybrać parametr _M_ \- Nie widzę, jak wyjaśnienie w Wikipedii odnosi się do rzeczywistych danych. Uważam, że powinno to być powiązane z momentami statystycznymi, czy to prawda? Na przykład, jeśli mam ustawiony ten przykład: {3,4,4,4,3,1,2,2,3,1,2,1,4,1,2,2,2,2,1,1 ,2,2,1} Uważam, że _M_ powinno być bardzo małe dla tego rodzaju danych. Założę się, że to 1 lub 2. Średnia to ~2,2 a odchylenie standardowe ~1,1. Moja intuicja podpowiadałaby mi, aby wybrać 2. Kolejny zestaw danych tutaj: {2,7,11,19,6,2,6,13,11,1,5,2,19,7,6,9,6,7, 2,4,5,12,3} Tym razem średnia wynosi ~7,2 a odchylenie standardowe ~5,0. Czy 7 to właściwa wartość w tym przypadku? I czy powinienem preferować kod Rice (użyj 8, ponieważ jest to potęga 2), jeśli otrzymam wartość taką jak 7? Rozumiem, że podział będzie łatwiejszy, jeśli użyję kodowania Rice, ale czy są jakieś korzyści z NIE używania go? Chodzi mi o to, że w każdym przypadku 3 bity zostaną użyte jako reszta, jak czysty kod Golomba mógłby być wtedy bardziej optymalny? Jeszcze jeden niuans - kod Golomba dotyczy nieujemnych liczb całkowitych. Jeśli zamiast tego mam dodatnie liczby całkowite, czy powinienem zamiast tego zapisać x-1? W przypadku pierwszego z wymienionych zestawów danych bardzo by się to zmieniło.


title: Czy Scrum i XP są porównywalne rzeczy, czy są używane do różnych rzeczy?

text: Czy Scrum i XP są porównywalne rzeczy, czy są używane do innych rzeczy? jakie są główne cechy każdego z nich? jak się nakładają? Czytałem o XP i Scrumie przez ostatnie tygodnie i coś jest dla mnie niejasne. Scrum ma ostateczną oficjalną instrukcję, ale jeśli chodzi o XP, nie jestem pewien, gdzie szukać.


title: Czy wiadomości weryfikacyjne powinny zawierać znaki interpunkcyjne?

text: Czy podczas tworzenia aplikacji wszystkie komunikaty weryfikacyjne powinny zawierać znaki interpunkcyjne?


title: Odwiedzający ma zastosowanie tylko w przypadku korzystania z wzorca kompozytowego?

text: Przez długi czas starałem się owinąć głowę wokół wzoru gościa i jakoś ta sprawa jest dla mnie raczej niewyraźna. Obecnie mam wrażenie, że przydaje się tylko wykonywanie operacji na obiektach, które implementują wzorzec Composite. Przynajmniej jeśli chodzi o PHP. Czy to trafna obserwacja, czy czegoś mi brakuje? Jestem w trakcie ponownej implementacji niektórych funkcji, w tym obliczania różnicy między dwiema encjami. Te Encje zawierają różne obiekty wartości. Różne pochodne w hierarchii typów tych Encji mają różne obiekty wartości. Pierwotnie kod diff był zawarty w samych encjach, chociaż spowodowało to sporo bałaganu, więc wolałbym przenieść go do obiektów usług dedykowanych. Przypomniał mi się wzorzec Odwiedzającego, chociaż nie widzę, jak mogę go właściwie zastosować. Czy wszystkie obiekty wartości musiałyby zaimplementować jakiś interfejs EntityElement? To wydaje się złe. Czy jest to przypadek, w którym wzorzec Odwiedzający rzeczywiście nie ma zastosowania, czy po prostu nie widzę, jak byłby on tutaj ładnie zastosowany?


title: Używanie divów w stylu tabeli zamiast tabel

text: Zostałem tutaj odesłany z stackoverflow, ponieważ moje pytanie było najwyraźniej zbyt szerokie. Pracuję nad szablonem i wiem, że używanie CSS jest lepsze niż tabele HTML do pozycjonowania... Ale czy jest dopuszczalne, aby uzyskać to, co najlepsze z obu światów i używać stylów tabelarycznych na moich divach? Na przykład: wyświetlacz: tabela; Pomaga to nie tylko rozwiązać problem lepkiej stopki, ale także pozwala uniknąć bólu związanego z używaniem pływaków. Jakoś wydaje się to brudne, ale nie mogę logicznie wyjaśnić dlaczego, ponieważ działa bez żadnych „sztuczek” lub brzydkich hacków, a tak powinno być, prawda? Czy jest to technicznie niepoprawne, czy ostatecznie sprowadza się to tylko do kwestii opinii? ...Myśli?


title: czy jest na to termin: func1(func2(), func3());

text: Wiem, że `obj.func1().func2()` nazywa się łączeniem metod, ale jaki jest termin techniczny dla: func1(func2(), func3()); Gdzie powrót funkcji jest używany jako argument do innej.


title: Jaka jest filozofia/rozumowanie stojące za nazwami metod Pascala w języku C#?

text: Dopiero zaczynam się uczyć C#. Wywodząc się z języka Java, C++ i Objective-C, uważam, że C# Pascal-case jego nazwy metod jest raczej unikalny i trochę trudny do przyzwyczajenia się na początku. Jakie jest to rozumowanie i filozofia? Zgaduję, że jest to spowodowane właściwościami języka C#. W przeciwieństwie do Objective-C, gdzie nazwy metod mogą być dokładnie takie same jak zmienne wystąpienia, nie ma to miejsca w przypadku C#. Przypuszczam, że jednym z celów właściwości (tak jak w przypadku większości języków, które je obsługują) jest uczynienie właściwości naprawdę nieodróżnialnymi od zmiennych i metod. Tak więc można mieć "int x" w C#, a odpowiadająca mu właściwość staje się X. Aby zapewnić, że właściwości i metody są nie do odróżnienia, wszystkie nazwy metod, które zgaduję, również powinny zaczynać się od wielkiej litery. (To tylko moja hipoteza oparta na tym, co do tej pory wiem o C# — wciąż się uczę). Jestem bardzo ciekaw, jak powstała ta ciekawa wytyczna (biorąc pod uwagę, że nie jest to coś, co można zobaczyć w większości innych języków, w których nazwy metod mają zaczynać się od małej litery) (EDIT: Przez Pascal-wielkość liter, mam na myśli PascalCase ( co jest w zasadzie camelCase, ale zaczyna się od dużej litery).Nazwy metod zwykle zaczynają się od małej litery w większości języków)


title: Najlepszy sposób radzenia sobie z podłogami i sufitem przy użyciu metody substytucji do rozwiązywania nawrotów

text: Obecnie do rozwiązywania nawrotów używam metody podstawienia. Problem, który mam, dotyczy T(n), które mają albo sufity, albo podłogi. Na przykład w poniższym przykładzie zobacz przykład tutaj. W końcu używają domysłu: `T(n) ≧ c(n+2) lg(n+2)` Moim pierwszym przypuszczeniem było `T(n) ≧ n lg(n)`, co okazuje się nie działać, ale mój problem polega na tym, że muszę bawić się zgadywaniem, aby spróbować go uruchomić. Więc pytania są następujące: 1. Jaki jest najlepszy sposób radzenia sobie z tymi podłogami i sufitami w ogóle? 2. Jeśli chodzi o zgadywanie, czy przychodzi to z praktyką, czy też istnieją lepsze sposoby wydedukowania prawidłowego zgadywania z pierwszego rzutu bez konieczności używania drzew rekurencji. (PS nie wiem, jak pisać równania w notacji matematycznej, po raz pierwszy korzystam z tego forum)


title: Strategie rozwiązywania problemów, które występują tylko na określonym urządzeniu

text: Jako programista Androida rynek docelowy, dla którego tworzę aplikacje, jest bardzo rozdrobniony. Chociaż mogę określić pewne wymagania - np. moja aplikacja obsługuje tylko Androida w wersji x.x lub nowszej, czasami mogą wystąpić błędy, które są widoczne tylko w jednym konkretnym modelu telefonu. **Czy istnieją jakieś strategie postępowania z błędami specyficznymi dla urządzenia bez kupowania danego telefonu?** Utrzymujemy zestaw telefonów do testów, ale nie możemy sobie pozwolić na kupno nowego telefonu, gdy 2 lub 3 użytkowników zgłasza zgłoszenie że jest błąd, który występuje tylko w ich modelu telefonu. Jestem pewien, że inni programiści Androida napotkali w przeszłości podobne problemy i jestem ciekaw, jakie dostępne są opłacalne strategie, które pomogą zlikwidować błędy specyficzne dla danego urządzenia. **Zaktualizuj, aby dodać kilka szczegółów:** * Używam Bugsense do przechwytywania raportów o błędach, więc za każdym razem, gdy zostaną zgłoszone wyjątki, będę znał model telefonu, ślad stosu, ile razy zdarzyło się to moim użytkownikom oraz kilka innych szczegółów. * Użytkownicy mogą znajdować się w różnych krajach, więc nie zakładam, że kiedykolwiek będę mógł pożyczyć ich telefon. **Wyobraź sobie taki scenariusz:** 100 użytkowników zainstalowało aplikację, ale trzy osoby skarżyły się, że przycisk nie działa poprawnie po naciśnięciu. Żaden z modeli telefonów, które mam do testów, nie ma problemu. Wygląda na to, że nie ma emulatora dla tego modelu telefonu.


title: Model biznesowy JavaScript

text: Czy ktoś wie coś o modelu biznesowym slidedeck (patrz link poniżej)? Ci faceci to komponent javascript, który sprzedają online. Jak wiedzą znawcy technologii - bardzo trudno jest sprzedawać javascript online, ponieważ jest to prawie jak sprzedaż kodu źródłowego. Ale sprawdź: http://www.slidedeck.com/pricing-b/ Ci goście rozdają markową wersję swojego kodu „GPL Branded”, a następnie sprzedają dwie premium „niemarkowe” wersje, które umożliwiają licencjonowanie serwerów. Mają kilku imponujących klientów. Już prawie skończyłem z moim własnym projektem, który jest podobny. Chciałem po prostu otworzyć go, a następnie użyć tego źródła, aby stworzyć demo, aby znaleźć finansowanie dla większego projektu po stronie serwera (z bardziej przejrzystą strategią monetyzacji), ale widząc to, wstrzymałem się. Zastanawiam się - czy mógłbym w krótkim okresie spieniężyć źródło klienta i zebrać mniej pieniędzy? Wydaje się, że jest to opcja, ale rodzi też wiele pytań: 1) Jeśli kod slidedeck jest oznaczony jako „GPL Branded” – w jaki sposób wymuszają jego markę? Czy nie mogę po prostu usunąć marki, udostępnić mojej aktualizacji społeczności? (Byłoby to kiepskie, ale czy byłoby to nielegalne, czy sprzeczne z GPL?) 2) Chociaż jest to oczywiście ciche - słuszne - poza modelami wsparcia premium, jakie są główne czynniki napędzające firmy do licencjonowania tego kodu poza modelami systemu honorowego? 3) Biorąc pod uwagę, że Slidedeck jest GPL, jakie mają zabezpieczenia przed plaugerizmem i ludźmi, którzy naciągają ich kod i sprzedają go za mniej? Czy można podjąć środki prawne, aby temu zapobiec? Jak mogli to egzekwować? Może prawa autorskie?


title: Problem równoważenia drzewa AVL

text: Weź następujące drzewo: 50 40 30 20 10 Który węzeł zostanie zbilansowany jako pierwszy? 50 lub 30 **Przypadek 1: 50** Drzewo to 30 20 40 10 50 **Przypadek 2: 30** Drzewo to 40 / \ 20 50 10 30 Cóż, oba są drzewami AVL, więc oba są poprawne?


title: Czy COM naprawdę nie żyje?

text: Wcześniej pracowałem nad COM, jednak od dłuższego czasu obserwowałem, że prawie żadna firma nie prosi o COM exp. Czy COM nie żyje, czy doniesienia o jego upadku są mocno przesadzone?


title: C/C++: Kto używa makr operatorów logicznych z iso646.hi dlaczego?

text: Toczy się debata na temat wykorzystania alternatywnych pisowni operatorów logicznych C/C++ w `iso646.h`: i && and_eq &= bitand & bitor | kompletne ~ nie ! not_eq != lub || or_eq |= xor ^ xor_eq ^= Według Wikipedii te makra ułatwiają wpisywanie operatorów logicznych na klawiaturach międzynarodowych (nie-angielski?) i nie-QWERTY. Cały nasz zespół programistów znajduje się w tym samym biurze w Orlando, Floryda, USA i z tego, co widziałem, wszyscy używamy amerykańskiego układu klawiatury QWERTY; nawet Dvorak zapewnia wszystkie niezbędne postacie. Zwolennicy używania makr `iso646.h` twierdzą, że powinniśmy je stosować, ponieważ są one częścią standardów C i C++. Myślę, że ten argument jest dyskusyjny, ponieważ digrafy i trigrafy są również częścią tych standardów i nie są nawet domyślnie obsługiwane w wielu kompilatorach. Moje uzasadnienie sprzeciwu wobec tych makr w naszym zespole jest takie, że nie potrzebujemy ich, ponieważ: * Wszyscy w naszym zespole używają układu klawiatury QWERTY w języku angielskim (USA); * Amerykańskie książki o programowaniu w językach C i C++ prawie nie wspominają o `iso646.h`, jeśli w ogóle; oraz * nowi programiści mogą nie znać `iso646.h` (jest to oczekiwane, jeśli pochodzą z USA). /rant Na koniec odpowiem na mój zestaw pytań: * Czy ktoś w tej witrynie używa makr operatorów logicznych `iso646.h`? Czemu? * Jaka jest Twoja opinia na temat używania makr operatorów logicznych `iso646.h` w kodzie pisanym i utrzymywanym na klawiaturach QWERTY w języku angielskim (USA)? * Czy moja analogia _digraph i trigraph_ jest słusznym argumentem przeciwko używaniu `iso646.h` z układami klawiatury QWERTY w języku angielskim (USA)? EDYCJA: Brakowało mi dwóch podobnych pytań w StackOverflow: * Czy ktoś używa nazwanych operatorów logicznych? * Jakich operatorów logicznych C++ używasz: i, czy nie, i operatorów w stylu ilk lub C? Dlaczego?


title: Jak radzisz sobie z brzydkim kodem, który napisałeś?

text: Więc twój klient prosi cię o napisanie kodu, więc to robisz. Następnie zgodnie z oczekiwaniami zmienia dla ciebie specyfikacje, a ty sumiennie wdrażasz jego nowe funkcje jak dobry mały chłopak. Z wyjątkiem... nowe funkcje kolidują ze starymi funkcjami, więc teraz twój kod jest bałaganem. Naprawdę chcesz wrócić i to naprawić, ale on ciągle prosi o nowe rzeczy i za każdym razem, gdy coś kończysz, znowu robi się bałagan. Co robisz? Przestań być maniakiem OCD i po prostu zaakceptuj, że twój kod będzie bałaganem, bez względu na to, co zrobisz, i po prostu dodawaj funkcje do tej potworności? Zapisać czyszczenie dla wersji 2?


title: Programowanie równoległe względem bazy danych: zarządzanie blokadami i transakcjami

text: Mam pierwsze doświadczenie w równoległym programowaniu kodu, który aktywnie współpracuje z relacyjną bazą danych. Interesujące jest łączenie prymitywów programowania równoległego .NET z blokadami/transakcjami bazy danych i interesują mnie artykuły na ten temat. Czy mógłbyś coś doradzić (.NET jest opcjonalny)?


title: Jak utrzymujesz kontakt z językiem programowania?

text: Po raz pierwszy zacznę pracę w branży IT 18. tego miesiąca. Będę pracował głównie z technologiami Microsoft, takimi jak C#.NET i MS Dynamic CRM. Ostatni rok spędziłem pracując z C++. Tworzenie małych aplikacji do automatyzacji ujęć i organizowania notatek. W tym czasie rozwinąłem dobrą podstawową znajomość języka. Moje pytanie brzmi: jak utrzymujecie kontakt z językiem programowania, który kochacie, kiedy potrzebujecie w biurze użyć czegoś innego?


title: 0,00006103515625 GB pamięci RAM. Czy platforma .NET MicroFramework jest częścią systemu Windows CE?

text: .NET MicroFramework twierdzi, że działa na 64K RAM i ma listę zgodnych dostawców docelowych. W tym samym czasie ci sami dostawcy, którzy dostarczają sprzęt i tworzą pakiety wsparcia dla płyt (sprzedawcy tacy jak Adeneo) wciąż wypuszczają coś o nazwie Windows 7 CE BSP dla tych samych celów sprzętowych. Oczywiście system operacyjny tak ciężki jak WinCE potrzebuje więcej niż 64 KB pamięci RAM. Tak więc, jakoś .NET MicroFramework ma znaczenie dla WinCE, ale jak? **Czy jest to część większego systemu operacyjnego, czy jest jego podstawą, czy też oba te elementy wzajemnie się wykluczają?** Tło: 0,00006103515625 GB pamięci RAM to tyle samo, co 64 KB pamięci RAM. Szukam możliwości wykorzystania narzędzi programistycznych Microsoft dla małych celów, takich jak BeagleBone. http://www.adeneo-embedded.com/About-Us/News/Release-of-TI-BeagleBone Nice. Teraz .. gdzie jest MicroFramework dla tego samego beaglebone ? Czy jest wewnątrz uwolnionego stosu?


title: Problemy Tracker zarówno dla programistów, jak i użytkowników końcowych

text: obecnie mamy pod ręką projekt o zamkniętym kodzie źródłowym. Chcielibyśmy jednak mieć kanał komunikacji z naszymi użytkownikami końcowymi. * Chcielibyśmy, aby nasi użytkownicy końcowi wiedzieli, nad jakimi funkcjami obecnie pracujemy i jakie funkcje otrzymają w następnej wersji. * Chcielibyśmy poznać opinie użytkowników na temat planowanych funkcji. Zawsze mogą dostarczyć danych wejściowych / sugestii dotyczących naszych planowanych funkcji. * Nie planujemy hostować na własnym serwerze. Dlatego mile widziana jest gotowa usługa. * **Ale chcielibyśmy pozostać naszym kodem źródłowym w modelu zamkniętym** Czy dostępna jest jakaś usługa internetowa do tego celu? Bezpłatne lub komercyjne nie ma znaczenia.


title: Jak napisać zestaw funkcji, które można wywoływać z (prawie) dowolnego języka programowania?

text: Chciałbym znaleźć sposób na napisanie API, do którego można uzyskać dostęp z dowolnego innego języka programowania za pośrednictwem powiązań językowych (lub innego frameworka). Czy można to zrobić? Jeśli tak, to jaki język programowania byłby najbardziej odpowiedni do pisania „międzyjęzykowego” interfejsu API? Moim celem jest stworzenie jednego zestawu funkcji, do którego będę miał dostęp z dowolnego języka programowania, z którym pracuję, aby nie musiał ręcznie przepisywać całego API w każdym języku.


title: Każdy język programowania można łatwo opanować, jeśli podstawy programowania są mocne. Fakt czy mit?

text: Czy to prawda, że osoba z dość dobrymi podstawami programowania może z łatwością nauczyć się dowolnego języka programowania? Cóż, kiedy mówię o językach programowania, mam na myśli języki zwinne i dynamiczne, takie jak PHP, Perl, Ruby itp., ale nie dawne języki programowania z odległej przeszłości. Pracowałem tylko na javie, groovy i do pewnego stopnia flex. Biorąc więc pod uwagę fakt, że jestem programistą amatorem, ale szybko się uczę, z grubsza, ile czasu zajęłoby zdobycie przyczółka w jednym z takich języków?


title: Czy nierozsądne jest pisanie dokumentacji użytkownika w stylu książki technicznej?

text: Powiedz mi, czy to brzmi znajomo: > coś coś coś... jak widać na rysunku 1-1 na następnej stronie... Jest to praktycznie w każdej książce o programowaniu, jaką kiedykolwiek czytałem. Kiedy więc pisałem małą broszurę instruktażową, jak korzystać z wewnętrznego oprogramowania, które zawierało obrazy ekranu, które użytkownik będzie miał na tym określonym kroku, napisałem coś w stylu „Wyskakujący ekran wygląda tak, jak pokazano na rysunku 1-1 poniżej." Ale myślę: jestem przyzwyczajony do tego stylu pisania, ale jeśli moją grupą docelową jest „przeciętna osoba”, czy będą zdezorientowani? Więc ogólniej, czy są jakieś powszechne praktyki w książkach technicznych, których należy unikać podczas pisania dokumentacji dla przeciętnych ludzi?


title: Jakich narzędzi używasz do zarządzania żądaniami od użytkowników?

text: Tonę w e-mailach użytkowników i chciałbym wdrożyć lepszy sposób zarządzania wszystkimi tymi żądaniami, które otrzymuję i umieścić je w kolejce, w której osoby z zespołu, jak również użytkownicy, mają do nich dostęp i mogą się łączyć notatki. Zastanawiam się nad jakimś narzędziem do zarządzania zadaniami, które pozwoliłoby na tworzenie wielu zadań w ramach projektu, w którym e-maile, komentarze, pomysły itp. mogłyby być upuszczane/wprowadzane i łatwo dostępne. Potrzebuję czegoś, w co mogą być zaangażowane wszystkie strony - użytkownicy, menedżerowie, liderzy zespołów, programiści. Szukam narzędzia, które pozwoli: * Użytkownikom po prostu przeciągnąć/upuścić wiadomość e-mail w celu złożenia wniosku o konserwację lub ulepszenie. * Deweloperzy, aby po prostu zobaczyć swoją kolejkę i ważony priorytet każdego zadania/projektu. * Zespół programistów, aby zobaczyć, nad czym wszyscy pracują w czasie rzeczywistym. * Zarządzanie, aby prowadzić rejestr czasu spędzonego na każdym zadaniu. Zaczynam patrzeć w kierunku Agile/Scrum, aby rozwiązać ten problem. Znalazłem listę narzędzi open source do zarządzania projektami scrum agile. Ponieważ mam ograniczony czas, czy ktoś z nich korzystał? Który z nich powinienem przetestować, aby sprawdzić, czy spełni moje potrzeby? TeamPulse to dobry kierunek, ale uważam, że jest trochę zbyt rozdęty. Potrzebuję czegoś prostego na wszystkie imprezy.


title: Jak ustalać priorytety zadań, gdy masz wiele projektów programistycznych działających równolegle?

text: Załóżmy, że masz 5 klientów, dla każdego opracowujesz 2 lub 3 różne projekty. Każdy projekt ma zadania Xi. Każdy projekt zajmuje od 2 do 10 osobotygodni. Biorąc pod uwagę, że zasobów jest niewiele, pożądane jest zminimalizowanie kosztów zarządzania. Dwa pytania w tym scenariuszu: 1. Jakich narzędzi użyłbyś do ustalania priorytetów zadań i śledzenia ich realizacji, jednocześnie minimalizując koszty ogólne? 2. Jakie kryteria wziąłbyś pod uwagę, aby określić, które zadanie przypisać do następnego dostępnego zasobu, biorąc pod uwagę, że głównym celem jest zwiększenie przepustowości (więcej projektów zakończonych w jednostce czasu, cel ten koliduje z rozpoczęciem jednego projektu i jego zakończeniem, a następnie przeniesieniem do następnego)? Pomysły, techniki zarządzania, algorytmy mile widziane


title: Jak rozplanować sprinty w Scrumie, aby przeznaczyć czas na TDD?

text: Mamy sprinty trwające 4 tygodnie. To, co robię, to 3 tygodnie czasu tworzenia i 1 tydzień czystych testów ręcznych/automatycznych, stabilizacji i testowania dostawy. Jak zarządzać TDD w czasie tworzenia? W moim poprzednim doświadczeniu pisanie testów i uzyskanie 80% pokrycia wymaga około 50% czasu programowania. Idąc tym samym dostalibyśmy tylko półtora tygodnia rozwoju, co nie wystarczy. Mój aktualny problem polega na tym, jak przydzielić czas na TDD? Chcę, aby TDD było obowiązkowe, ale z nimi staje się to dla mnie naprawdę trudne. Czy uważasz, że jest to właściwe podejście, którego używamy, czy może czegoś brakuje i zmieniamy nasze podejście do Scrum?


title: Nazewnictwo w protokołach bezpieczeństwa: Alice, Bob i Eve

text: Wśród informatyków i programistów istnieje powszechny zwyczaj nazywania osób w kontekście protokołów bezpieczeństwa, m.in. „Alicja”, „Bob” lub „Ewa”. Opisy bardziej rozbudowanych wektorów ataku czasami odnoszą się do `Charliego` (tak jak ten pasek XKCD), ale czy istnieje konwencja dla dodatkowych uczestników?


title: Tworzenie prostych formularzy w aplikacjach webowych

text: Jak pracujesz z formularzami w swoich aplikacjach internetowych? Nie mówię o aplikacjach RESTful, nie chcę budować ciężkiego front-endu przy użyciu frameworków takich jak Backbone. Na przykład muszę dodać formularz "skontaktuj się z nami". Muszę sprawdzić dane, które zostały wypełnione przez użytkownika i powiedzieć mu, że jego dane zostały wysłane. Wymagania: * Chcę używać AJAX. * Chcę sprawdzić poprawność formularza po stronie zaplecza i nie chcę duplikować tego samego kodu po stronie frontonu. Mam własne rozwiązanie, ale mnie nie satysfakcjonuje. Wykonuję żądanie AJAX z serializowanymi danymi w przesłanym formularzu i otrzymuję odpowiedź. Następnym krokiem jest sprawdzenie nagłówka „Content-type”. * **html** -> _Oznacza to, że istnieją błędy w wypełnieniu formularza, a html odpowiedzi to formularz z etykietami błędów._ -> Zamienię formularz na html odpowiedzi. * **json** i **response.error_code == 0** -> _Oznacza to, że formularz został pomyślnie przesłany._ -> Pokażę użytkownikowi powiadomienie o sukcesie. * **json** i **response.error_code != 0** -> _Coś zostało zepsute na zapleczu (np. połączenie z bazą danych)._ * **other** \- Wyświetlam następujący komunikat: > We zostali powiadomieni i rozpoczęli pracę z tym problemem. Proszę > spróbuj później. Problem polega na tym, że nie mogę go używać z formularzami, które przesyłają plik. Jaka jest twoja praktyka? Z jakich bibliotek i zasad korzystasz?


title: Wzorzec projektowy i najlepsze praktyki

text: Jestem programistą iPhone'a. Jestem całkiem pewny w tworzeniu aplikacji na iPhone'a z minimalną funkcjonalnością. Uważam się za uczciwego programistę aplikacji, ale kod, który piszę, nie jest tak bardzo ustrukturyzowany. Bardzo mało korzystam z MVC, ponieważ wydaje mi się, że nie znajduję miejsc do narzucania MVC. Przez większość czasu tworzę aplikację z kontrolerami widoków i tylko kilkoma modelami. Jak mogę poprawić umiejętność uczynienia mojego kodu bardziej użytecznym, standardowym, łatwym i konserwowalnym. Widziałem kilka książek o wzorcach projektowych i sam wypróbowałem kilka rozdziałów, ale wydaje mi się, że nie pomijam swojego przyzwyczajenia. Znam kilka z nich, ale nie mogę zastosować tych wzorców w mojej aplikacji. Jaki jest najlepszy sposób na poznanie wzorców projektowych i nawyku kodowania. Wszelkie sugestie są mile widziane.


title: Dlaczego z perspektywy inżynierskiej tworzenie szablonów ciągów jest lepsze niż konkatenacja ciągów?

text: Kiedyś przeczytałem (chyba to było w "Perłach programowania"), że należy używać szablonów zamiast budować ciąg za pomocą konkatenacji. Rozważmy na przykład poniższy szablon (przy użyciu biblioteki brzytwy C#) <w pliku właściwości> Browser Capabilities Type = @Model.Type Name = @Model.Browser Version = @Model.Version Supports Frames = @Model.Frames Supports Tables = @ Model.Tables Supports Cookies = @Model.Cookies Supports VBScript = @Model.VBScript Supports Java Applets = @Model.JavaApplets Supports ActiveX Controls = @Model.ActiveXControls i nowsze, w osobnym pliku kodu private void Button1_Click(nadawca obiektu, System. EventArgs e) { BrowserInfoTemplate = Properties.Resources.browserInfoTemplate; // patrz powyżej string browserInfo = RazorEngine.Razor.Parse(BrowserInfoTemplate, przeglądarka); ... } Z punktu widzenia inżynierii oprogramowania, jak jest to lepsze niż równoważna konkatentacja ciągów, jak poniżej: private void Button1_Click(object sender, System.EventArgs e) { System.Web.HttpBrowserCapabilities przeglądarka = Request.Browser; string s = "Możliwości przeglądarki\n" + "Typ = " + przeglądarka.Typ + "\n" + "Nazwa = " + przeglądarka.Przeglądarka + "\n" + "Wersja = " + przeglądarka.Wersja + "\n " + "Obsługuje ramki = " + przeglądarka.Frames + "\n" + "Obsługuje tabele = " + przeglądarka.Tables + "\n" + "Obsługuje pliki cookie = " + przeglądarka.Cookies + "\n" + "Obsługuje VBScript = " + przeglądarka.VBScript + "\n" + "Obsługuje JavaScript = " + przeglądarka.EcmaScriptVersion.ToString() + "\n" + "Obsługuje aplety Java = " + przeglądarka.JavaApplets + "\n" + "Obsługuje ActiveX Kontrolki = " + przeglądarka.ActiveXControls + "\n" ... }


title: Jak rozwiązywać rekurencje liniowe obejmujące dwie funkcje?

text: Właściwie natknąłem się na pytanie w Programowaniu Dynamicznym, w którym musimy znaleźć liczbę sposobów rozmieszczenia obszaru 2 X N za pomocą płytek o określonych wymiarach. Oto opis problemu Teraz, po odrobinie powtarzania się, wyszedłem z nimi. F(n) = F(n-1) + F(n-2) + 2G(n-1) i G(n) = G(n-1) + F(n-1) Wiem jak rozwiązać Model LR, w którym występuje jedna funkcja.Dla dużego N jak w powyższym zadaniu możemy wykonać potęgowanie macierzy i osiągnąć czas O(k^3log(N)) gdzie k jest liczbą minimalną taką, że dla wszystkich k>m F(n) nie zależy od F(n-k). Metoda rozwiązywania rekurencji liniowej z potęgowaniem macierzowym podana w tym blogu. Teraz dla LR obejmującej dwie funkcje, czy ktoś może zaproponować podejście wystarczająco wykonalne dla dużego N.


title: Zasada substytucji Liskov z abstrakcyjną klasą nadrzędną

text: Czy zasada podstawienia Liskova ma zastosowanie do hierarchii dziedziczenia, w których rodzic jest klasą abstrakcyjną w ten sam sposób, jeśli rodzic jest klasą konkretną? Strona Wikipedii zawiera listę kilku warunków, które muszą zostać spełnione, aby hierarchia została uznana za poprawną. Jednak przeczytałem w poście na blogu, że jednym ze sposobów na ułatwienie dostosowania się do LSP jest użycie abstrakcyjnego rodzica zamiast konkretnej klasy. Jak wybór typu nadrzędnego (abstrakcyjny vs konkretny) wpływa na LSP? Czy lepiej mieć abstrakcyjną klasę bazową, gdy tylko jest to możliwe?


title: Wydajny sposób na znalezienie unikalnych elementów w wektorze w porównaniu z wieloma wektorami

text: Próbuję znaleźć liczbę unikalnych elementów w wektorze w porównaniu z wieloma wektorami przy użyciu C++. Wektory są posortowane i mogą mieć rozmiar 2 000 000. Załóżmy, że mam v1: 5, 8, 13, 16, 20 v2: 2, 4, 6, 8 v3: 20 v4: 1, 2, 3, 4, 5, 6, 7 v5: 1, 3, 5, 7, 11, 13, 15 Liczba unikalnych elementów w v1 wynosi 1 (tj. liczba 16). Próbowałem dwóch podejść. 1. Dodano wektory v2,v3,v4 i v5 do wektora wektora. Dla każdego elementu w v1 sprawdź, czy element jest obecny w którymkolwiek z pozostałych wektorów. 2. Połącz wszystkie wektory v2,v3,v4 i v5 za pomocą sortowania przez scalanie w jeden wektor i porównaj go z v1, aby znaleźć unikalne elementy. Uwaga: wektor przykładowy = v1 i all_vectors_merged zawiera v2,v3,v4,v5 //Metoda 1 unsigned int compute_unique_elements_1(vector<unsigned_elements_1(wektor<unsigned_elements> wektor przykładowy,wektor<wektor<unsigned int> > all_vectors_merged) { unsigned int duplikat = 0; for (unsigned int i = 0; i < sample_vector.size(); i++) { for (unsigned int j = 0; j < all_vectors_merged.size(); j++) { if (std::find(all_vectors_merged.at(j) ).begin(), all_vectors_merged.at(j).end(), sample_vector.at(i)) != all_vectors_merged.at(j).end()) { duplikat++; } } } return sample_vector.size()-duplicate; } // Metoda 2 unsigned int compute_unique_elements_2(vector<unsigned_int> przykładowy_wektor, wektor<unsigned int> all_vectors_merged) { unsigned int unique = 0; unsigned int i = 0, j = 0; while (i < wektor przykładowy.size() && j < scalone_wszystkie_wektory.size()) { if (wektor_przykładowy.at(i) > scalone_wszystkie_wektory.at(j)) { j++; } else if (wektor przykładowy.at(i) < all_vectors_merged.at(j)) { i++; unikalny ++; } inny { i++; j++; } } if (i < wektor przykładowy.size()) { unique += wektor przykładowy.size() - i; } zwraca unikatowe; } Z tych dwóch technik widzę, że Metoda 2 daje szybsze rezultaty. 1) Metoda 1: Czy istnieje bardziej wydajny sposób na znalezienie elementów niż uruchomienie std::find na wszystkich wektorach dla wszystkich elementów w v1. 2) Metoda 2: Dodatkowy narzut przy porównywaniu wektorów v2,v3,v4,v5 i ich sortowaniu. Jak mogę to zrobić w lepszy sposób? [edytuj] Wektory są posortowane.


title: Od Slashdot: Czy bycie lojalnym programistą jest opłacalne?

text: Widziałem to pytanie zamieszczone na Slashdot i pomyślałem, że będzie to świetne pytanie tutaj na Programmers.SE. _To nie jest moje pytanie, ani moja sytuacja._ Oto brzmi: > „Jako starszy programista w małej firmie IT z siedzibą w Wielkiej Brytanii, która ma > wydać swój flagowy projekt, wiem, że gdybym miał teraz opuścić firmę , przysporzyłoby im to bardzo dużych problemów. Obecnie > szkolę pozostałych dwóch "młodszych" programistów, próbując ich przyspieszyć > z naszymi produktami. Niestety, wciąż daleko im do zrozumienia > używanych technologii – nie wspominając o „ciekawej" pracy, jaką wykonali zewnętrzni > programiści z kodem. Zwykle nigdy > nie rozważałbym odejścia w tak kluczowym momencie; jestem w firmie > kilka lat i rozważam wiele moi koledzy, w tym wyższe > kierownictwo, żeby się zaprzyjaźnić, ale zwróciła się do mnie inna > firma, która jest znacznie większa i zaproponowała mi podwyżkę w wysokości 7 tys. przed moimi drzwiami (w przeciwieństwie do moich obecnych 45 minut dojazdów w jedną stronę) . To miałoby ogromny wpływ na > moje życie. To powiedziawszy, nie mogę oprzeć się wrażeniu, że odejście teraz > byłoby zdradą moich przyjaciół i kolegów. Niektórzy znajomi powiedzieli mi, że > jestem po prostu „miękki” – jednak myślę, że jestem lojalny. Jakieś rady?” Jakie są twoje przemyślenia na temat sytuacji tego Anonimowego Slashdottera?


title: Jak spakować aplikację J2SE do sprzedaży na rynku kupujących?

text: Obecnie cieszę się moją klasą Java 101. Mam kilka pomysłów na aplikacje, które chciałbym zrobić i z czasem i pracą myślę, że proces tworzenia aplikacji od podstaw będzie przebiegał pomyślnie. Czy po zainstalowaniu i uruchomieniu moich aplikacji Java będzie łatwo znaleźć miejsce, w którym będę mógł je wystawić na sprzedaż? Na rynku pracy Enterprise widzę reklamy dla programistów z doświadczeniem w zakresie J2EE, WebSphere, Hibernate, Spring itp. Jako nowicjusz Javy mam świadomość, że mogę zapomnieć o kwalifikacjach do tych stanowisk. Alternatywą dla mnie może być zrobienie czegoś, dzięki czemu będę mógł zbudować mikrobiznes. Czy istnieje prosty sposób na zrobienie tego?


title: Czy subskrypcja MSDN jest opłacalna do użytku osobistego?

text: Koduję głównie w .net w pracy, ale zastanawiałem się, czy domowe subskrypcje MSDN są dostępne/warte zachodu jako narzędzie do pozostawania w kontakcie z najnowszą technologią rozwoju firmy Microsoft?


title: Jaki jest wpływ błędu walidacji CSS?

text: Zajmuję się tworzeniem serwisu asp.net. Kiedy użyłem właściwości CSS „word-wrap”, VIsual Studio 2010 wyświetla ostrzeżenie: Walidacja (CSS 2.1) „word-wrap” nie jest znaną nazwą właściwości CSS. Kiedy testowałem stronę, działa dobrze. Czy jednak może być jakiś problem z używaniem tej właściwości, ignorując ostrzeżenie?


title: Jak mogę przechowywać żądania usług sieci Web w warstwie DAO bez wiązania kodu z DOM?

text: Pracuję nad aplikacją jednostronicową na platformie aplikacji desktop node-webkit, co oznacza, że 99,9% całej logiki jest napisane w JavaScript. Ponieważ jest to ponowne uruchomienie projektu, nad którym pracujemy, chciałem podejść do architektury z bardziej podejścia MVC po stronie klienta. Planuję stworzyć warstwę DAO umożliwiającą dostęp do localStorage, IndexedDB, a także usług Web poprzez żądania REST. Problem w tym, że pierwszym narzędziem, po które sięgam do wysyłania żądań HTTPS do serwera jest jQuery AJAX. Używanie jQuery w warstwie DAO wydaje się trochę dziwne, mimo że nie planuję manipulować DOM, ale działa naprawdę dobrze na node-webkit i jest wypróbowanym i przetestowanym narzędziem do pobierania i wysyłania danych na serwery. Pomimo popularności niektórych frameworków aplikacji JavaScript, które mają pewien _sposób_ działania, nie planujemy używać innych frameworków niż biblioteki JavaScript, które są dość lekkie i dyskretne, takich jak moduły jQuery, Underscore, Mustache, Node.js, ale nic, co zmusza nas do jednoznacznego wykluczenia pewnych technologii. Planuję wstrzyknąć jQuery do warstwy DAO w celu wykonywania wywołań przez AJAX do usług sieci Web. Moje pytanie brzmi: * Jak mam podejść do usług internetowych? Czy usługi sieci Web traktuję jako kolejne źródło danych, takie jak lokalna baza danych? * Czy po prostu używam surowego obiektu XMLHttpRequest? Jaka jest sprawdzona metoda radzenia sobie z tym problemem architektonicznym po stronie klienta, **_bez frameworków JavaScript_**?


title: Czy powinniśmy używać jakiegokolwiek frameworka JS, który sprawia, że HTML jest językiem skryptowym?

text: Po przestudiowaniu HTML 5 dowiedziałem się, że HTML służy wyłącznie do definiowania semantyki danych. I zapewnił różne tagi do każdego celu. Chociaż możemy tworzyć własne tagi, możemy zapewnić stylizację i nadal będzie działać, używamy standardowych tagów, ponieważ są one znane na poziomie globalnym. I wszystkie wyszukiwarki mogą je zrozumieć. Frameworki JS, takie jak AngularJS, umożliwiają tworzenie własnych dyrektyw/tagów. Które są tagami niestandardowymi. Co więcej, uważam, że logika programowania powinna być trzymana z dala od HTML :ng-if, ng-repeat itp. Sprawia to, że strona HTML jest bardzo trudna do zrozumienia przez projektanta czystego interfejsu użytkownika. Powiedziałbym, że te struktury sprawiają, że strona HTML jest przyjazna dla programistów, a nie dla projektantów. Gdybyśmy umieścili całą logikę na stronie HTML, nie byłoby żadnej różnicy między stroną po stronie serwera a stroną HTML. Uważam, że **nie powinno być żadnych niestandardowych tagów i logiki programowania** (takich jak instrukcje warunkowe lub zapętlone) **prezentowane na stronie HTML**. Zamiast tego JS powinien obsługiwać/kontrolować HTML z zewnątrz. Proszę mi powiedzieć, czy gdzieś się mylę. Albo daj mi kilka pozytywnych opinii, więc mogę pomyśleć o użyciu takich frameworków.


title: Czy powinniśmy zamknąć wszystko w bloku try{} w obiekcie Try?

text: Dlaczego nie mogę utworzyć klasy dla „Try” zawierającej to, co próbuję, a następnie uruchomić ją w bloku „try {}”? Dlaczego jest to niepraktyczne? class DBConnectTry extends Try { TryResponse response[] próba(TryObject o[]...){ //spróbuj połączyć się z bazą danych } } Następnie w `try... catch` mogłem wywołać tylko `DBConnectTry.attempt`. Czy poprawiłoby to czytelność / przejrzystość / modularyzację, czy nie jest to dobry pomysł?


title: Jaki jest dobry sposób udostępniania określonych danych między ViewModels?

text: Mamy IAppContext, który jest wstrzykiwany do ViewModel. Ta usługa zawiera współdzielone dane: filtry globalne i inne właściwości obejmujące całą aplikację. Ale zdarzają się przypadki, gdy dane są bardzo szczegółowe. Na przykład jedna VM implementuje Master, a druga - Szczegóły wybranego elementu drzewa. Dlatego DetailsVm musi wiedzieć o wybranym elemencie i jego zmianach. Możemy przechowywać te informacje albo w IAppContext lub wewnątrz każdej zainteresowanej maszyny wirtualnej. W obu przypadkach powiadomienia o aktualizacjach są wysyłane za pośrednictwem Messengera. Widzę plusy i minusy każdego z podejść i nie mogę zdecydować, które z nich jest lepsze. **1st:** \+ jawnie ujawnione współdzielone właściwości, łatwe do śledzenia zależności \- IAppContxt staje się zaśmiecony bardzo konkretnymi danymi. **Druga:** dokładne przeciwieństwo pierwszego i większego obciążenia pamięci z powodu duplikacji danych. Może ktoś może zaproponować alternatywy projektowe lub powiedzieć, że jeden z wariantów jest obiektywnie lepszy od drugiego, ponieważ brakuje mi czegoś ważnego?


title: DDD: Czy niezmienne obiekty mogą być również bytami?

text: Przeczytałem niezliczone posty na temat różnic między encjami a obiektami wartości i chociaż uważam, że przynajmniej koncepcyjnie rozumiem, czym się różnią, wydaje się, że w niektórych z tych postów autorzy uważają konkretną koncepcję domeny za VO tylko dlatego, że jest niezmienna (dlatego jej stan nigdy się nie zmieni, przynajmniej w tym konkretnym modelu domeny). Czy zgadzasz się, że jeśli stan obiektu nigdy nie zmieni się w ramach konkretnego modelu domeny, to ten obiekt nigdy nie powinien być jednostką? Czemu?