title: Dokumentowanie języka programowania: Instrukcja obsługi

text: Przyglądamy się unowocześnianiu dokumentacji w całej naszej linii produktów. Częścią tego są **instrukcje referencyjne** dotyczące **języka programowania** używanego jako część systemu. Kiedy piszesz podręcznik referencyjny dla języka programowania, jaki jest najlepszy sposób ustrukturyzowania go, aby zapewnić maksymalną użyteczność dla nowych użytkowników tego języka? Jakie są **kluczowe aspekty** każdego udokumentowanego słowa kluczowego? * Składnia * Opis * Argumenty — jeśli dotyczy * Zwracane wartości — jeśli dotyczy * Przykład użycia? * Jakieś inne mi brakuje? **Czy koncepcje** (takie jak strategie blokowania, szczegóły dotyczące wydajności) powinny być również udokumentowane w tym podręczniku, czy jest to osobny dokument? * * * To jest do użytku zewnętrznego. Mamy już pełne zestawy dokumentów (patrz: http://www.rocketsoftware.com/u2/resources/technical-resources). Wypracowanie tego, co powinniśmy zrobić inaczej – mam już swoje pomysły, ale jak zawsze staram się nie polegać wyłącznie na mojej opinii. Odbiorcy: programiści techniczni korzystający z naszych baz danych i narzędzi do tworzenia oprogramowania w wielu branżach.


title: Korzystanie z ASP.NET 4 i procedur składowanych

text: Jak popularne są obecnie **procedury przechowywane** w porównaniu do 5 lat temu? Zadaję to pytanie, ponieważ książka, którą czytam (książka ASP.NET 4), nie zawiera żadnych procedur przechowywanych. Czy jest to teraz sposób ASP.NET 4?


title: Najlepsze praktyki w zakresie bezpieczeństwa tworzenia aplikacji internetowych

text: Poszukuję aktualnych, najnowocześniejszych standardów kodowania do tworzenia stron internetowych (głównie PHP). Ponieważ nie chcę wymyślać koła na nowo, chciałbym ponownie wykorzystać biblioteki napisane przez ludzi o wiele sprytniejszych niż ja. Wiem o OWASP, który jest wspaniałym źródłem najlepszych praktyk i świetnych informacji. Ich strona internetowa jest jednak dość niezorganizowana, jeśli chodzi o biblioteki. * Z jednej strony mamy OWASP ESAPI ze wskaźnikami do bibliotek. * Z drugiej strony istnieje OWASP AntiSamy, który również posiada biblioteki. To z kolei wskazuje na HTMLPurifier lub bibliotekę MS Anti-XSS. Nie znalazłem żadnych powiązań między tymi różnymi rozwiązaniami. Czy istnieje obecnie konsensus co do najbardziej zalecanych bibliotek, których należy używać w celu złagodzenia głównych zagrożeń bezpieczeństwa? Dziękuję Ci


title: Czy dziedziczenie równoległe tworzy dobry kod?

text: Piszę interfejs bazy danych w PHP i posiadam podstawową klasę `dbTables`, a także podstawową klasę `dbTableFields`. `dbTables` posiada funkcję `getFields()`, która tworzy instancje obiektów `dbTableFields`, z których każdy przenosi istotne dane w każdym polu tabeli i umieszcza je w `dbTableFields->fields=array();` `dbTables` ma kilkoro dzieci. Teraz zdałem sobie sprawę, że dzieci muszą używać różnych wersji `getFields()`. Ale różnią się one tylko w jednym miejscu: muszą tworzyć instancje potomne `dbTableFields`, a nie obiekty `dbTableFields`. Rozwiązałem ten problem. Skorzystałem z możliwości PHP do używania zmiennych do reprezentowania nazw klas. Wszystko, co musiałem zrobić, to w `dbTables->getFields()` replace: $this->fields = new dbTableFields(); z $this->fields = new self::$field_model(); Gdzie `self::$field_model = 'dbTableFields'; // wartość ciągu dla klasy` Teraz, w klasach potomnych, wystarczy nadpisać właściwość `$field_model` nazwą odpowiednich potomków `dbTableFields`. Czy ten schemat dziedziczenia równoległego jest dobry? A może tworzę bezkompromisowy bałagan? Czy istnieje jakaś bardziej elegancka i łatwiejsza w utrzymaniu metoda na osiągnięcie tego samego efektu?


title: Podkreśl niektóre komentarze – ale nie zabrudź kodu

text: W tej chwili mam problem ze strukturą moich komentarzy. Mam główne sekcje kodu, które podczas przewijania dokumentu chcę widzieć wyróżniające się. Przykłady: > To jest zwykły komentarz: > >> int money = 100; //zacznij od 100 pieniędzy -> To jest komentarz podkreślający pewną część kodu: > >> / ** _*_ ** _*_ **** Ustaw wszystkie pieniądze **_*_ ** _*_ ****/ Ale nie podoba mi się, że to nie jest bardzo czyste. Czy istnieje standardowy sposób ustawienia tego typu komentarza?


title: zmienne porównanie bez inicjalizacji

text: Pracuję nad projektem w VC++, który obejmuje układ współrzędnych mający oś x,y,z. Próbuję sprawdzić, czy zmienna (punkt o wartościach x,y,z) jest przypisana w układzie współrzędnych lub jest to punkt domyślny (niezainicjowany). Ponieważ układ współrzędnych nie mogę przypisać zmiennej domyślnej wartości, która jest ujemna, dodatnia, a nawet zerowa, ponieważ wszystkie te wartości są prawidłowymi wartościami. Moje podejście tutaj polega na skojarzeniu _zmiennej logicznej_ z moją _zmienną punktową_. Jeśli wartość logiczna jest ustawiona, to punkt przypisany w przeciwnym razie nie. Teraz muszę sprawdzić dla każdej instrukcji, do której można przypisać wartość i ustawić Boolean. Teraz spróbowałem z tym podejściem, które jest dość złe i możesz uznać to za złe. To, co tutaj robię, to biorę niezainicjowaną zmienną typu float (ponieważ elementy x,y,z zmiennej Point są float) i porównuję ją z elementami x,y,z zmiennej Point. Ponieważ w przypadku, gdy Point jest niezainicjalizowany, zarówno zmienna zmiennoprzecinkowa, jak i składowe Point pasują do siebie i mogę zadeklarować jej niezainicjalizowaną. Próbowałem to przetestować na różnych kompilatorach i otrzymuję wynik zgodnie z oczekiwaniami. Oczywiście otrzymuję ostrzeżenie kompilatora dla ** niezainicjowanej zmiennej używanej do porównania ** Moje pytanie: Czy drugie podejście jest naprawdę złe, czy też istnieją jakieś obejście tego.


title: Odpuść sobie jeszcze raz inną pracę, czy powinienem zrezygnować z programowania?

text: Już trzy razy zostałem zwolniony z trzech różnych prac w ciągu ostatnich czterech lat. Pierwszą pracą było wykonanie oprogramowania do interpretacji sejsmicznej w C++. Trwało to prawie trzy miesiące. Powodem było to, że miałem doskonałe umiejętności C++, ale miałem poważne problemy z komunikacją. Moja druga praca była w firmie zajmującej się flashowymi grami społecznościowymi. Ponownie wytrzymałem prawie trzy miesiące, argumentując, że po raz kolejny miałem słabe umiejętności komunikacyjne i powoli nabierałem tempa. Moja ostatnia praca była w zwykłej firmie zajmującej się grami flashowymi. Wytrzymałem na tym 1 rok i 9 miesięcy. Powodem mojego zwolnienia tym razem było to, że musieli zwolnić pracowników ze względu na ekonomię, więc wybrali dwóch programistów. Zostałem wybrany, ponieważ chociaż stworzyłem kod wysokiej jakości, nie mogłem go ukończyć w rozsądnym czasie. Mój szef powiedział mi jeszcze raz, że uważa mnie za dobrego programistę i nie odmówiłby ponownego zatrudnienia mnie w przyszłości, gdybym zdołał zdobyć trochę doświadczenia w programowaniu IOS, biorąc pod uwagę ich zainteresowanie pójściem w tym kierunku. Martwię się, że jakoś wątpię, czy w ogóle nadaję się na programistę. Mimo że potrafię robić imponujące rzeczy, które potrafią niewiele osób (zostałem zatrudniony w mojej ostatniej pracy, ponieważ byłem w stanie stworzyć całkiem imponujące demo 2D/3D we flashu od zera, mimo że oni już wypełnili tę rolę), to prawie zawsze zabiera mi prawie dwa razy więcej czasu niż komukolwiek innemu, aby osiągnąć te same wyniki. Nawet gdy wykonuję najprostsze zadania, takie jak typowe automaty stanowe do zachowania postaci w grze platformowej 2D, mam wrażenie, że mój mózg w jakiś sposób zamarza bez konkretnego powodu. (Tak było odkąd pamiętam przez ostatnie 12 lat, ale myślałem, że to coś, co przydarzyło się każdemu.) Próbowałem spóźnić się prawie każdego dnia, ale wciąż nie wystarczało mi, żeby złapać w górę. Wszystko to pogarszał stres, który narastał, gdy wiedziałem, jak powolny jestem, zastanawiając się, czy mój szef zadzwoni do mnie tego dnia, aby przekazać mi złe wieści. Jestem z natury bardzo stresującą osobą, więc zdaję sobie sprawę, że stres sam w sobie sprawia, że jestem jeszcze wolniejszy. Czuję, że straciłem wszelką motywację i ambicję do uczenia się nowych rzeczy i że powinienem po prostu zrezygnować z programowania i po prostu skupić się na robieniu prostszych, mniej stresujących rzeczy, takich jak praca w bibliotece czy coś, i po prostu zapomnieć o karierze , bo po prostu nie mogę zrobić nic innego. Programowanie to wszystko, co wiem. Więc proszę cię o poważną opinię w tej sprawie, biorąc pod uwagę kilka szczegółów, które ci przekazałem. Zaczęłam już szukać nowej pracy, ale zastanawiam się, czy wyjdzie tak samo. Wiem, że muszę być pozytywnie nastawiony do różnych rzeczy, ale jak możesz zachować pozytywne nastawienie, skoro tyle razy ci się nie udało w tak krótkim czasie?


title: Na jakim etapie projektu Open Source powinieneś zaprosić członków społeczności?

text: Zastanawiałem się nad otrzymaniem wkładu do nowego produktu open source, który mój zespół będzie rozwijał. Jest dla nas zachęta do uzyskania jak największego wsparcia od szerszej społeczności, ale widzę też, że pochłania to dużo czasu, upewniając się, że osoby trzecie znajdujące się poza naszym biurem są na dobrej drodze, jeśli chodzi o takie rzeczy, jak jakość kodu. Również na początku projektu prawdopodobnie będziemy mieć wiele nieformalnych dyskusji w głównym zespole na temat projektu systemu, skoków itp., a korzystanie z nich online, aby umożliwić zaangażowanie społeczności, będzie czasochłonne i wyobrażam sobie, że może sprawić, że dyskusja mniej efektywna. Jest w tym bardziej ludzki aspekt, który prawdopodobnie należy wziąć pod uwagę: umożliwienie zaangażowania społeczności w proces projektowania może również przynieść korzyści, jeśli chodzi o postrzeganie własności projektu, i zawsze istnieje szansa, że wczesne zaangażowanie może wychwycić problemy, które zespół nie zauważył. Więc pytanie: na jakim etapie projektu Open Source powinieneś zaprosić wkład społeczności?


title: Jak sobie radzić z paraliżem analitycznym?

text: Bardzo często utknąłem przy wyborze najlepszej decyzji projektowej. Nawet w przypadku drobnych szczegółów, takich jak definicje funkcji, przepływ sterowania i nazwy zmiennych, spędzam niezwykle długie okresy, analizując korzyści i kompromisy wynikające z moich wyborów. Czuję, że tracę dużo wydajności, spędzając godziny na nieistotnych szczegółach, takich jak te. Chociaż z tyłu głowy wiem, że mogę zmienić te rzeczy, jeśli mój obecny projekt nie wyjdzie, mam problem z podjęciem zdecydowanej decyzji. Co powinienem zrobić, aby zwalczyć ten problem?


title: Implementacja dzielenia zmiennoprzecinkowego o podstawie 10

text: Wdrażam arytmetykę zmiennoprzecinkową dla mikrokontrolera, który nie obsługuje liczb zmiennoprzecinkowych, zarówno sprzętowo, jak i programowo. (Oprogramowanie jest "pisane" w rodzaju programu do tworzenia diagramów elektrycznych.) Zakończyłem kodowanie/dekodowanie od/do liczb całkowitych, dodawanie, odejmowanie i mnożenie. Moje „zmienne zmiennoprzecinkowe” są reprezentowane jako `C * 10^E`, gdzie: 1. C, współczynnik, jest 32-bitową liczbą całkowitą ze znakiem z zakresu 100000000-999999999, czyli 0. * (dziewięć cyfr precyzji plus specjalny przypadek zero.) 2. E, wykładnik, jest 32-bitową liczbą całkowitą ze znakiem, obejmującą cały zakres 32-bitów. * (Tak, to przesada.) Wybrałem okrągłe liczby o podstawie 10, aby ułatwić weryfikację matematyki. Moja strategia mnożenia polegała na podzieleniu dwóch liczb `AaaBbbCcc` i `DddEeeFff` na trzy części każda (miliony, tysiące i jedynki) i obliczenie mnożenia jako (ABC * 10^Y) * (DEF * 10^Z ) = ((AD * 10^12) + ((AE + BD) * 10^9) + ((AF + BE + CD) * 10^6) + ((BF + CE) * 10^3) + ( CF * 10^0)) * 10^Y+Z Każde `*` i `+` reprezentujące normalne mnożenie lub dodawanie, a 10^N jest sfałszowane razem ze mną w kodzie 1000, 1000000 itd. Zauważ też, że to nie jest ani rekursywne, ani zapętlone, a żadna odpowiedź nie może być rekursywna ani zapętlona. Mam dostęp do dodawania, odejmowania, dzielenia, mnożenia, modulo, cos/sin/tan/arccos/arcsin/arctan, wartości bezwzględnej i pierwiastka kwadratowego. ### Główne pytanie: Mogę/w końcu wymyślę, jak przeprowadzić dzielenie z podobnym podejściem dzielenia współczynników na mniejsze liczby, które będą lepsze dla dzielenia 32-bitowego. Dawno nie robiłem algebry, więc mnożenie zajęło mi około półtora dnia. Ponieważ zakładam, że dzielenie jest bardziej skomplikowane koncepcyjnie, byłoby bardzo przydatne, gdyby ktoś na SE mógł za mnie wykonać trudną matematykę. Więc _jak mam to zrobić?_


title: Czy istnieje język bardziej ogólny niż Lisp?

text: Programuję od dłuższego czasu i trochę mniej piszę w Lispie (no, głównie Scheme). Moje doświadczenie z tymi językami (i innymi językami funkcjonalnymi) pozwoliło mi na pisanie czystego kodu nawet przy użyciu słabszych narzędzi. Języki z rodziny Lispów mają wspaniałe możliwości implementacji każdej powszechnie używanej abstrakcji: * Wyrażenia S uogólniają strukturę. * Makra uogólniają składnię. * Kontynuacje uogólniają kontrolę przepływu. Ale jestem niezadowolony. Jakoś chcę więcej. Czy istnieje język bardziej ogólny? Mocniejszy? Chociaż Lisp jest wspaniały, trudno mi uwierzyć, że nikt nie wymyślił niczego lepszego (śmiem twierdzić). Doskonale zdaję sobie sprawę, że zwykle takie pytanie powinno być zamknięte ze względu na jego kłótliwy charakter. Ale wydaje się, że istnieje szeroka zgoda, że Lisp reprezentuje teoretyczny szczyt projektowania języka programowania. Po prostu odmawiam przyjęcia tego bez jakiegoś dowodu. To, jak sądzę, sprowadza się do zakwestionowania, czy rachunek lambda jest w rzeczywistości idealną abstrakcją obliczeń.


title: Czy zdanie „nigdy nie wymyślaj koła na nowo” jest odpowiednie dla uczniów?

text: Ciągle wpadam na to wyrażenie „nie wymyślaj koła na nowo” lub „nigdy nie wymyślaj koła na nowo”, kiedy zadaję kilka pytań na SO. Mówią ci, aby użyć niektórych frameworków lub istniejących pakietów. Wiem, skąd bierze się ta postawa, ponieważ nierozsądnie jest marnować czas na coś, co inni już rozwiązali. Czy tak jest? Jako student odkryłem, że używając kodu napisanego przez innych, aby rozwiązać mój problem, nie mogę się nauczyć tyle, ile bym chciał, i uzyskuję mniej wglądu. I czasami wydaje mi się, że to wyrażenie jest przeznaczone głównie dla pracujących programistów, borykających się z terminami, a nie dla studentów takich jak ja. Czy tak źle jest „wymyślać koło na nowo”? Może źle to myślę? Może jest sposób, by uniknąć wymyślania koła na nowo i jednocześnie dużo się nauczyć?


title: W jaki sposób Minecraft wykorzystuje ziarno, aby stworzyć całkowicie unikalny świat?

text: W grze Minecraft przed stworzeniem świata masz możliwość wprowadzenia nasion. Algorytm bierze ziarno i tworzy zupełnie wyjątkowy świat. Jak to działa?


title: Zbuduj interfejs API platformy do użytku publicznego

text: Szukam porad, zasobów lub artykułów o tym, jak udostępnić Platform API zewnętrznym programistom. Moją główną troską są standardy lub najlepsze podejście do tego, zasadniczo mam zestaw usług REST API platformy i muszę zrozumieć, jak rozwiązać następujący problem: * Hosting i zarządzanie API ogólnie (czy powinniśmy używać online narzędzia do zarządzania interfejsem API, takie jak apigee lub mashrey?) * Klucze programistyczne, uprawnienia * Narzędzia programistyczne, dokumentacja * ograniczanie przepustowości * Raportowanie * Rejestrowanie/audytowanie * Uwierzytelnianie i autoryzacja Jest to również świetne, jeśli możesz wskazać artykuły, które wyjaśniają, w jaki sposób Facebook lub Twitter lub Google to robi lub stosuje najlepsze praktyki związane z architekturą abstrakcyjną i zarządzaniem dotyczące otwierania interfejsu Platform API dla użytkowników publicznych. Dziękuję,


title: Do czego służy słowo kluczowe „znajomy”?

text: Czy możesz mi wyjaśnić, dlaczego słowo kluczowe `friend` jest preferowane do nadawania praw dostępu do prywatnych danych klasy?


title: Diagramy klas UML z pakietami Java?

text: Próbuję modelować w UML 2.0 aplikacji serwletów Java, która ma trzy klasy * Klasa Servlet; zasadniczo główna klasa, która działa jako kontroler * DatabaseLogic; zawiera metody operacji na bazach danych * XMLBuilder; buduje XML z łańcucha wynikowego zapytania. Klasy używają różnych pakietów z biblioteki Java. Nie jestem pewien, jak zamodelować to w UML. Czy muszę stworzyć pakiet i pokazać, które biblioteki są używane dla każdej indywidualnej klasy, czy mogę po prostu mieć jeden duży pakiet na diagramie ze wszystkimi bibliotekami pokazującymi, które klasy mają zależności od których. Zgodnie z tym diagramem ![wpisz tutaj opis obrazka](http://i.stack.imgur.com/N05mW.png) To jest mój pierwszy raz, kiedy poprawnie pracuję z javą (jestem gościem C++) Oprócz tego, że jestem trochę niechlujny, czy to jest poprawna reprezentacja UML opisanego przeze mnie systemu? Czy pakiet w UML oznacza to samo, co pakiet w Javie?


title: Jak obsłużyć inny katalog główny działający w iis na hoście lokalnym a serwerem WWW (iis 7)

text: Mam kilka stron internetowych, którymi pomagam zarządzać. Podczas uruchamiania na moim komputerze lokalnym (pod iis7) witryny działają w folderze na moim komputerze d:\WebRoot\NazwaWitryny i działają jako htt://localhost/NazwaWitryny, ale po wdrożeniu działają jako http:// www.NazwaWitryny.com (działa również pod iis7) Obecnie zajmuję się ścieżką do zasobów witryny (obrazy, javascript, itp.) za pomocą kodu. Ale zastanawiałem się, czy istnieje lepszy sposób na poradzenie sobie z tym, niż pisanie specjalistycznego kodu w witrynie. Dziękuję!


title: Wieloprojektowy, wielozespołowy Scrum

text: 2 zespoły (A i B) w różnych lokalizacjach geograficznych rozwijają Projekt P. Oba zespoły rozwijają również kilka innych mniejszych projektów: A ma projekty PA1 i PA2. B ma PB1 i PB2. P jest jedynym wspólnym dla 2 drużyn. Projekt Scrum dzisiaj: * Każdy zespół ma PO i wspólnie ustalają priorytety. * Jeden wspólny Backlog, który zawiera historie z projektu P oraz z PA1 i PA2. PB1 i PB2 są wykonywane poza strukturą. * Każda drużyna ma swój własny sprint i SM. Zespół A wybiera z backlogu historie związane z projektami P, PA1 i PA2. Zespół B zajmuje się tylko historiami związanymi z P. Problem: * Chcę zarządzać PB1 i PB2 również w Scrumie. Możliwe rozwiązania: * Dodać PB1 i PB2 do tego samego Backlogu? - skomplikuje zaległości jeszcze bardziej niż teraz. * Oddzielone do 3 zaległości (P, PA1-2, PB1-2)? - Jest zasada "jeden backlog na zespół"... Czy powinniśmy to złamać? I czy jest w ogóle obsługiwany w TFS? Masz pomysł, jak rozwiązać problem?


title: Działający kod i potrzeby użytkownika

text: Programiści, tacy jak ja, często zbyt martwią się o to, czy ich kod naprawdę zadziała, a nie o to, jak komunikować się z użytkownikami. W obawie przed wyrzuceniem wyjątku na użytkownika, testujemy z różnymi scenariuszami w różnych środowiskach, takich jak programowanie, staging i produkcja. Ale jeśli chodzi o dostarczenie użytkownikowi prostej linii informacji – poniesiemy porażkę. Staramy się przekazać wiadomość, która wyjaśnia nam, o co tak naprawdę chodzi, a nie wiadomość, w prostym języku angielskim, łatwo zrozumiałym dla użytkownika. A nawet więcej – używamy bardzo surowego i formalnego języka. Poświęcamy 1% lub mniej naszego czasu na zastanawianie się, kto otrzymuje wiadomość i co o niej myśli, kiedy to robi. Używam wyrażeń takich jak **„Nie wybrano do następnego kroku”** zamiast **„Przepraszamy, ale są tam inne osoby z wyższym wynikiem niż ty, które przeszły do następnego kroku. Ale tak trzymaj, lubimy cię tu znowu widzieć. Niedługo nadejdzie twoja kolej”** Nie podoba mi się ta postawa, którą wydaje mi się dostosowywać. Chciałbym, żeby to moje zachowanie się zmieniło. Jak mam się trzymać z dala od króliczej nory?


title: Abstrakcja bazy danych — czy jest przesadzona?

text: Po wystawieniu na liczne warstwy abstrakcji bazy danych, zaczynam się zastanawiać, jaki jest sens każdej biblioteki wymyślania własnego, innego paradygmatu dostępu do danych. Podjęcie nowego DAL jest jak uczenie się nowego języka od nowa, podczas gdy zwykle wszystko, co chcę zrobić, to po prostu przekonać warstwę, aby wysłała zapytanie SQL, które już napisałem w mojej głowie. I to bez dotykania czytelności po fakcie: # Dowód A: Typowy DAL wiersze = db(db.ips_x_users.ip_addr == '127.0.0.1') .inner_join(db.ips_x_users.user_id == db.users.id ) .select(order=(db.ips_x_users.last_seen, 'desc'), limit=10) **** # Dowód B: Kolejne typowe wiersze DAL = db.ips_x_users .join(db.users, on=db.ips_x_users .user_id == db.users.id) .filter(db.ips_x_users.ip_addr == '127.0.0.1') .select(sort=~db.ips_x_users, limit=10) **** # Dowód C: Hipotetyczny DAL oparty na wierszach standardowej składni SQL = db('''SELECT * FROM ips_x_users INNER JOIN users ON (ips_x_users.user_id = users.id) GDZIE ips_x_users.ip_addr = ip ZAMÓW WG last_seen DESC LIMIT 10''', ip='127.0 .0.1') Co jest nie tak ze standardową składnią SQL? Został stworzony w konkretnym celu i doskonale do tego celu pasuje. Może to tylko ja, ale rozumiem fragment C znacznie łatwiej niż dwa pierwsze. Zmienione nazwy słów kluczowych i sztuczki składniowe są urocze, ale IMO, jeśli chodzi o to, nie ułatwiają koderowi pobierania wierszy. To prawdopodobnie wydawało się długą tyradą, ale tutaj **jest** prawdziwe pytanie. Ponieważ każdy DAL wydaje się wymyślać nowy DSL dla zapytań, a nie tylko analizować wypróbowany i prawdziwy SQL, muszą być albo korzyści z używania innej składni, albo braki w standardowej składni SQL, z których nie zdaję sobie sprawy. Czy ktoś mógłby wskazać, co tu przeoczam?


title: Demo produktu i .net

text: Mam pytanie dotyczące używania .Net 3.5 lub 4.0 Wiem, że .Net jest bardziej produktywny niż Qt, ale boję się problemów, gdy klient opuści mój produkt, ponieważ nie może uruchomić np. demo mojej aplikacji bez odpowiedniej wersji frameworka. Chciałbym zapytać w tej sprawie osoby doświadczone. Czy tak wielu użytkowników nie ma .net 3.5? Warto zrobić aplikację w .Net 3.5 lub lepiej, używając Qt c++, ponieważ .net nie jest zbyt produktywny i ważniejsze jest to, że każdy może uruchomić aplikację zakodowaną w Qt ?


title: W jaki sposób rola właściciela produktu może kłócić się z ideą open source lub na nią działać?

text: Jeśli chodzi o powiązane pytania dotyczące „Znalezienia i/lub zostania właścicielem produktu o otwartym kodzie źródłowym” – pierwszy komentarz do samego pytania brzmiał: „Pomysł właściciela produktu jest sprzeczny z ideą otwartego oprogramowania”. * Czy to prawda, a jeśli tak, to dlaczego? * Jeśli nie, jakie okoliczności i/lub kontekst byłoby sensowne, aby projekt open source pełnił rolę właściciela produktu? Próbowałem znaleźć przykład tej roli na Mozilla.org \-- ale jak dotąd nie miałem szczęścia. (Aby było jasne, mówię o roli wolontariusza, a nie płatnej pozycji w organizacji non-profit.)


title: Dlaczego instrukcja kopiowania nosi zwykle nazwę MOV?

text: W wielu asemblerach instrukcja kopiowania wartości jest zwykle nazywana "MOV" i jej opis w instrukcjach zwykle zawiera również "przenieś" (jednak można użyć innych słów, jak "załaduj", "przechowuj", "wyodrębnij" itp. ) Rzadko zdarza się znaleźć ISA ), który nie jest zgodny z tą konwencją. Z drugiej strony, w innych kontekstach, "move" różni się od "copy" w tym sensie, że źródło jest zniszczone (na przykład "mv" vs. "cp" w Unix, Move[F6] w Norton Commander i klonach, itd. ) "Ruch" asemblera naprawdę ma semantyczną "kopię", zachowując nienaruszoną wartość źródłową. Odkryłem, że zaczęło się to co najmniej od IBM 1401 (1959), ale IBM 360 używał tego słowa tylko do kopiowania w pamięci, ale nie do operacji między rejestrami a pamięcią (które używały „ładowania” i „przechowywania”) . Ale dlaczego nadal jest szeroko stosowany i nie zastępuje go słowami „kopiuj” lub „przechowuj”?


title: Dlaczego niektóre języki funkcjonalne wymagają programowej pamięci transakcyjnej?

text: Języki funkcyjne z definicji nie powinny utrzymywać zmiennych stanu. Dlaczego zatem Haskell, Clojure i inni dostarczają implementacje programowej pamięci transakcyjnej (STM)? Czy istnieje konflikt między dwoma podejściami?


title: Pomysł na język specyficzny dla domeny lub port DLR?

text: Zbliżają się moje ostatnie studia licencjackie i bardzo interesują mnie leksyki, parsery, kompilatory i tak dalej. Chciałbym użyć DLR (dynamiczne środowisko uruchomieniowe języka .NET 4.0) w moim projekcie ostatniego roku studiów licencjackich, ale nie mogę znaleźć powodu, aby go używać! Pomysłem byłby język specyficzny dla domeny, ale większość domen, o których myślę, została już zrobiona. Możliwością był przede wszystkim semantyczny język zapytań potrójnego sklepu, podobny do SPARQL, ale domena jest dość skomplikowana, a napisanie i zoptymalizowanie silnika zapytań zajęłoby trochę czasu. Myślę też o różnych paradygmatach programowania, szczególnie tych wyższego poziomu, takich jak języki programowania tablicowego/kolekcji, a nie skalarne. Interesujący byłby język, który jest mniej _specyficzny_ pod względem dziedziny, ale z którym „łatwiej jest przetworzyć X, co jest powszechnie używane lub rozwiązywane w sytuacji Y”. Innym podejściem byłaby próba przeniesienia istniejącego języka (lub przynajmniej jego części, jeśli pozwoli na to czas) do DLR. Najlepiej nie APL czy Perl - nie jestem masochistą. **Edycja:** Aby wyjaśnić, przez „Port” rozumiem hostowanie istniejącego języka w DLR, takiego jak IronJS, IronPython, IronRuby itp. Czy ktoś ma jakieś pomysły na język specyficzny dla domeny, najlepiej, ale niekoniecznie odpowiedni dla DLR?


title: Jak wykonujesz modelowanie w środowisku Extreme Programming?

text: Znam metodologie, takie jak Extreme Programming (XP), które określają własne specyficzne praktyki tworzenia oprogramowania. Jednak w przeciwieństwie do Scrum, gdzie koncentruje się bardziej na aspektach zarządzania, XP określa praktyki oprogramowania, których należy przestrzegać. Po przeczytaniu tego artykułu te kroki eliminują fazę jawnego modelowania przy użyciu narzędzi takich jak BPMN i UML. W innym artykule Martina Fowlera wyjaśnia dalej takie zniechęcenie. Osobiście wolę metodologie oparte na modelach, myślę, że zależy to od preferencji firm i ludzi. Jednym z celów Agile jest „uwolnienie programistów od prac związanych z dokumentami”. Metodologia taka jak XP wydaje się łatwo prowadzić do braku dokumentacji. Myślę, że aby osiągnąć ten cel, rozwiązaniem jest zaimplementowanie narzędzia, które pomoże programiście zmniejszyć nakład pracy na pisanie dokumentu, a nie przez pisanie mniej dokumentów, przez zbieranie informacji z istniejących diagramów i automatyczne generowanie raportów (w przypadku RTF, PDF, HTML architekta korporacyjnego systemu Sparx). Niektórzy inżynierowie oprogramowania skarżą się również na to, że rysowanie diagramów zajmuje im czas. Moim zdaniem rozwiązaniem nie jest narysowanie schematu, a użycie narzędzia. Obecnie narzędzia do modelowania wspierają inżynierię w obie strony, w której można synchronizować kod i diagramy, co eliminuje dodatkowy wysiłek związany z ręczną korektą diagramów w przypadku zmiany bazy kodu (w szczególności diagramu klas). Jak modelowanie pasuje do zespołu, który korzysta z Extreme Programming?


title: Czy istnieją zadania, które są zorientowane na programowanie optymalizacyjne lub montaż?

text: Programiści silników 3D muszą trochę przejmować się szybkością wykonania, ale co z programistami w ATI i nVidii? Ile potrzebują, aby zoptymalizować aplikacje sterowników? Czy istnieją prace, których jedynym celem jest szybkość wykonania i optymalizacja, czy też prace dla ludzi do programowania tylko w montażu? Proszę, nie płomień wojny o "przedwczesna optymalizacja jest źródłem wszelkiego zła", chcę tylko wiedzieć, czy takie prace istnieją, może w bezpieczeństwie? W programowaniu jądra ? Gdzie ? Zupełnie nie ?


title: Utrzymywanie modelu MVC luźno połączonego z DB?

text: Lubię, aby mój kod był testowalny i zdecydowałem się na strategię Dependency-Injection dla mojego obecnego frameworka MVC, który zdecydowanie okazał się świetnym sposobem na zapewnienie luźno powiązanego kodu, testowalności i modułowości. Ale jako że jestem daleki od mistrza w zakresie wzorców projektowych, trudno mi znaleźć dobry sposób na utrzymanie moich modeli tak luźno połączonych z klasami łączników bazy danych, jak to tylko możliwe. **Jak to zrobić?** Ponieważ nie dostarczyłem żadnego fizycznego kodu wraz z tym pytaniem, naprawdę byłbym wdzięczny za kilka przykładów logiki/kodu lub informacji, które mogłyby wskazać mi kierunek, w którym mogę zrozumieć opisany powyżej problem.


title: rzeczywistość pokrycia testowego

text: NIE robię programowania sterowanego testami i piszę klasy testowe po napisaniu rzeczywistego kodu. W moim obecnym projekcie mam pokrycie testowe (pokrycie linii) na poziomie 70% dla 3000 linii kodu Java. Do testów używam JUnit, Mockito i Sonar. Ale czuję, że tak naprawdę nie zakrywam i nie wyłapuję 70% problemów, które mogą wystąpić. Więc moje pytanie brzmi teoretycznie, czy możliwe jest uzyskanie 100% pokrycia linii, ale w rzeczywistości jest to bez znaczenia z powodu niskiej jakości kodu testowego i może 40% dobrze napisany kod testowy jest znacznie lepszy niż złe 100% pokrycie? Czy zawsze możemy powiedzieć, że zasięg linii mniej więcej daje procent wszystkich objętych problemami?


title: Wątek w Pythonie a wieloprocesorowość: czy powinienem nauczyć się jednego przed drugim?

text: Zamierzam zagłębić się w wielowątkowość lub wieloprocesorowość w Pythonie. Pytanie: czy powinienem uczyć się jednego przed drugim (z jakiegokolwiek powodu)? Jeśli tak, to jaki i dlaczego? Czytałem za i przeciw w pytaniach SO takich jak to, ale nie jestem do końca pewien, jak odnoszą się one do pedagogicznej wartości uczenia się jednego lub drugiego w pierwszej kolejności.


title: Jaki poziom zagrożenia stwarza sprzedaż aplikacji w sklepie z aplikacjami firmie spoza USA?

text: Czy ktoś może wskazać mi artykuł lub świadomą dyskusję na temat patentów software'owych w USA dotyczących firmy spoza USA, która sprzedaje swoje produkty w amerykańskim sklepie/rynku z aplikacjami? Moja firma ma kilka produktów zarówno w Apple App Store, jak i Android Marketplace, z których wszystkie są dostępne w sprzedaży w USA. Mamy jednak siedzibę w Europie i nie mamy zarejestrowanych aktywów w USA. Zakładając, że mamy produkt na tyle wart, aby przyciągnąć trolle patentowe, czy powinniśmy się martwić? Nie badaliśmy żadnych istotnych patentów, które moglibyśmy naruszać, ponieważ takie badania byłyby dla nas zbyt drogie. Czytając artykuły na temat amerykańskiego prawa patentowego, wydaje się, że możliwość wyłapania wszystkich potencjalnych patentów i tak jest mało prawdopodobna. Zdaję sobie sprawę, że ta strona jest odwiedzana przez programistów, a nie przez prawników, ale dobre referencje zewnętrzne byłyby bardzo mile widziane.


title: Sposoby posiadania historii zmian wpisów w bazie danych

text: W jaki sposób zezwolić na wersjonowanie wpisów bazy danych (danych)? Pomyśl o możliwościach systemów zarządzania treścią, aby cofnąć zmiany artykułów. Jakie są ich plusy/minusy?


title: W jaki sposób programiści gier projektują swoje klasy do ponownego wykorzystania w AI, sieci oraz w trybie gry i zdawania?

text: W przypadku gry dla dwóch graczy, w której przeciwnik może znajdować się w sieci, na samym procesorze lub w pobliżu, gdzie grasz kolejno na tej samej maszynie. Jak ludzie projektują klasy do ponownego wykorzystania? Jestem w podobnej sytuacji i nie mam doświadczenia w tworzeniu tak skomplikowanych gier. Ale oto, co pomyślałem: Jeśli jestem obiektem gracza, powinienem wchodzić w interakcję tylko z GameManagerem lub GameEngine Singleton, z którego otrzymuję różne powiadomienia o stanie gry. Nie obchodzi mnie, gdzie i kim jest mój przeciwnik, ten GameManager w zależności od trybu gry będzie współdziałał z gameNetworkManager lub AI powie mi, w co grał przeciwnik. Nie jestem pewien scenariusza, w którym gramy i pasujemy [kolejna kolejka na tej samej maszynie]. Liczę na krótkie, ale jasne wyjaśnienie lub przynajmniej link do podobnego zasobu.:)


title: Dlaczego przy tworzeniu prototypów odradza się korzystanie z konstruktorów?

text: **Szybkie wprowadzenie:** W JavaScript funkcja konstruktora dla każdego typu obiektu ma właściwość `prototype`. „Prototyp” odnosi się do obiektu, którego każdy skonstruowany obiekt używa jako następnego kroku w łańcuchu prototypów. Jeśli chcesz, aby jeden typ był związany z innym typem, możesz ustawić `prototyp` typu potomnego na nową instancję typu nadrzędnego. Na przykład: var Parent = function() { /* konstruktor biznes */ } Parent.prototype.parentProp = "jakaś właściwość nadrzędna"; var Child = function() { /* konstruktor biznes */ } Child.prototype = /*** !! Jakiś prototypowy obiekt trafia tutaj !! ***/ Moje pytanie dotyczy tego, jaki kod powinien zostać umieszczony w miejscu „`Prototypowy obiekt idzie tutaj`” w powyższym kodzie. Moim pierwszym odruchem jest skonstruowanie instancji rodzica (tj. `new Parent()`), ale w komentarzu do odpowiedzi na temat Czy jest to bezpieczny sposób kopiowania prototypu jednego obiektu do innego?, jeden użytkownik pisze: > Nie , nie używaj `new bar()` dla obiektu prototypowego! (...co jest opinią, którą widziałem w wielu odpowiedziach i komentarzach SO, ale jest to jedyny przykład, jaki mam w tej chwili pod ręką.) Inną opcją jest użycie `Object.create(Parent.prototype)` jako `Child.prototype`. O ile wiem, to również tworzy nową instancję `Parent`, ale nie uruchamia konstruktora `Parent`. Czy ktoś może wyjaśnić, dlaczego należy unikać uruchamiania funkcji konstruktora podczas generowania obiektu prototypowego z typu nadrzędnego? Czy pojawia się jakiś znaczący problem techniczny (być może z wieloma poziomami dziedziczenia)? A może taki wzorzec jest nadużyciem konstruktorów, który koliduje z niektórymi najlepszymi praktykami prototypowymi (np. uruchomienie konstruktora podczas tworzenia prototypu narusza pewne rozdzielenie obaw)?


title: Struktury danych do przechowywania ruchów palca/rysika w aplikacji do rysowania?

text: Mam ogólne pytanie dotyczące tworzenia aplikacji do rysowania, językiem może być C++ lub ObjectiveC z OpenGL. Chciałbym usłyszeć, jakie są najlepsze metody i praktyki przechowywania danych dotyczących uderzeń. _Pomyśl o wielu aplikacjach na iPada, które umożliwiają rysowanie palcem (lub rysikiem) lub inną podobną funkcją w aplikacji komputerowej._ Podsumowując, struktura danych musi: * być bardzo wrażliwa na ruch * przechowywać dokładne wartości ( close w przestrzeni / czasie) * nadaje się do renderowania pociągnięć ze złożonymi teksturami (tekstury oparte na dynamice pociągnięcia itp.) * można wyeksportować do pliku tekstowego w celu zapisania / wczytania


title: Jakie znaczenie ma rozwiązanie gry w warcaby w badaniach nad sztuczną inteligencją?

text: Prowadziłem badania nad sztuczną inteligencją i natknąłem się na artykuł z 2007 roku zatytułowany „Warcaby rozwiązane” na temat gry w warcaby rozwiązywane przez techniki sztucznej inteligencji po ponad 16 latach prób. Rozwiązanie gry jest definiowane przez zespół jako „określenie końcowego wyniku w grze bez błędów popełnionych przez żadnego z graczy”. Poszukiwania rozwiązania rozpoczęły się w 1989 r. i zostały ostatecznie znalezione w 2007 r. Jakie to ma znaczenie w dziedzinie sztucznej inteligencji?


title: Co pojawia się w Twojej głowie, gdy ktoś poprosi o moduł do aplikacji?

text: Osoby nietechniczne mają tendencję do wypowiadania słowa moduł zamiast funkcji. Ale zawsze denerwuję się, gdy ktoś każe mi napisać moduł, gdy tak naprawdę chce funkcji. Moim zdaniem moduł to coś więcej niż funkcja. Moduł nie ma silnych zależności od aplikacji. Aplikacja działa bez konieczności posiadania jakichkolwiek modułów. Dlatego denerwuję się, gdy ktoś chce, żebym napisał moduł, bo nie jest łatwo pisać modułowe aplikacje. Wymaga architektury. Cecha może być modułem lub nie być. Dlatego zawsze wolę rozumieć moduł jako funkcję, jeśli poprosi mnie o to nie-programista. Co rozumiesz, jeśli ktoś chce moduł? Czym jest moduł pod względem programistycznym?


title: Czy powinienem dołączyć do moich aplikacji metodę samozniszczenia?

text: Ostatnio miałem negatywne doświadczenie, gdy klient uratował się z rachunku, ale mój pośrednik już wrzucił nasze oprogramowanie i projekt na serwer klienta. Klient okazał się znanym przestępcą i oczywiście zmienił wszystkie możliwe hasła do serwera. Jednak nadal mam dostęp do panelu administracyjnego CMS. Niestety okazuje się, że moje oprogramowanie jest bardzo bezpieczne. Próbowałem wstrzykiwać SQL, fałszować obrazek- wgrywać itp. Jednak nie mogę włamać się do własnego oprogramowania. problem.. Po prostu myślę teraz, że może powinna istnieć jakaś backendowa metoda samozniszczenia. Tak więc, jeśli wystąpi podobny przypadek, mam możliwość _zabicia_ oprogramowania. Moim własnym pomysłem jest ukrycie jakiejś funkcji w plikach core. Zakoduj go w base64, więc nie byłoby to oczywiste. Czyli coś takiego: eval(base64_decode('ZWNobyAnSGVsbG8gd29ybGQhJzs=')); // echo 'Witaj świecie!'; I po prostu stwórz mały skrypt, który pobiera wszystkie pliki oprogramowania, chmod je dla pewności, a następnie je usuwa. Wszystkie moje nowsze wersje CMS mają menedżery plików, których mogę użyć do łatwiejszego _hackowania_. Ale co, jeśli dostęp do panelu administracyjnego jest ograniczony. **Aby być bardzo jasnym** , jest to przeznaczone tylko dla oprogramowania na etapie rozwoju, na moim osobistym serwerze lub serwerze klienta (ostatnia część jest wątpliwa z etycznego punktu widzenia). Więc jeśli mój klient powinien ukraść moje oprogramowanie. zawarte w oprogramowaniu komercyjnym. **Aby być jeszcze jaśniejszym** , mówimy o tych _rzadkich_ pracach freelancera. Myślę, że to całkiem logiczne, że praca kontraktowa nie potrzebuje takich metod. Więc mówimy o tych jumprisk-klientach, tylko w trybie programistycznym -- kiedy projekt jest gotowy, wtedy oczywiście byłoby to bardzo nieetyczne _backdoor_ do posiadania w oprogramowaniu. 1. Czy etycznie to dobry pomysł? (Mając na uwadze, że oczywiście usunę go, gdy projekt będzie w 100% opłacony) 2. Czy kiedykolwiek musieliście _hackować_ własne oprogramowanie z powodu podobnych problemów z klientem(ami)? 3. Jakieś zalecenia dotyczące tego pomysłu, kodu i metody? 4. Jakie mogą być możliwe wady lub reperkusje skryptów autodestrukcji? **Mój wniosek na ten temat** Jest trochę smutny, że wszystkie odpowiedzi dotyczyły zakontraktowanych przypadków. Tak naprawdę to moja wina, że nie wyjaśniłem tego w moim pytaniu.. po prostu pomyślałem, że jest całkiem jasne, że nie ma sensu używać wyłącznika awaryjnego, kiedy jesteś chroniony przez kontrakt. Jednakże, jeśli wykonujesz pracę kontraktową, to powinno to być określone w umowie - to czyni to legalnym, nawet na własnym serwerze klienta. Jednak posiadanie wyłączników awaryjnych na moim osobistym serwerze to naprawdę niczyja sprawa (to jest to, co naprawdę chciałem wiedzieć). Postanowiłem stworzyć skrypt kill-switch dla mojego CMS. Głównie dlatego, że wydaje się ciekawym wyzwaniem. Ale także, że mógłbym użyć tego do moich niezakontraktowanych prac, w których klientem jest znajomy znajomego znajomego.. Prawdopodobnie nie użyję tego na serwerze klienta, ale ... w przypadkach, gdy klient lub jakiś pośrednicy mają dostęp do mojego serwera.. A moje oprogramowanie zostaje skradzione lub "przeniesione bez mojej wiedzy", wtedy nie dostaję zapłaty i odcinają dostęp do oprogramowania. Przeczytałem tutaj wiele tematów, w których zaleca się wysłanie ostrzeżenia, a następnie usunięcie strony. Cóż, widziałem w tym problem, jak wtedy, gdy mam do czynienia z osobą.. która po prostu skopiuje to gdzieś indziej (może zmieni markę i sprzeda) i powie mi, że została zdjęta. A poza tym nie "wyłączyłbym strony", ale ją usunę. Chociaż wydaje mi się, że dostęp do serwera moich klientów i jego usunięcie nadal jest nielegalne. Lub przynajmniej uzyskaj dostęp przez backend, a nie z FTP. Za to dziękuję wszystkim, którzy odpowiedzieli.


title: Jakie są „gorące” tematy w informatyce?

text: Zaraz zacznę AQA EPQ - esej na 5000 słów i prezentację na wybrany przez Ciebie temat; Szukałem tematów do badań i relacji. Myślę, że to pytanie jest często zadawane przez wielu studentów i studentów szóstej klasy, ponieważ często wybrane pytania mogą prowadzić do wielu „ślepych uliczek”. Chcę móc zagłębić się w temat i napisać szczegółowy raport z mocnym wnioskiem ogólnym. Jakie tematy w informatyce są uważane za dobre tematy do badania i raportowania.


title: Jak przekazać dane w sposób obiektowy w PHP?

text: Uważam, że nawet podczas pracy z frameworkiem MVC (np. CodeIgniter), regularnie uciekam się do przekazywania zagnieżdżonych tablic, a nie obiektów. To nie jest zgodne z moim rozumieniem zorientowania obiektowego. Na przykład, gdybym miał przenieść kod do Javy, nie marzyłbym o przekazywaniu tablic (lub wektorów, czy czegokolwiek) w ten sposób. Zastanawiałem się, czy jest to odpowiedni sposób na obsługę danych. Czy istnieje powód, dla którego tablice są przekazywane w ten sposób w PHP lub dlaczego obiekty nie są używane? Jaki jest najlepszy sposób przekazywania danych?


title: Funkcje z efektami ubocznymi w Delphi/Pascal

text: Jakie jest właściwe podejście do funkcji, które mają skutki uboczne w Delphi/Pascal? Na przykład mógłbym mieć funkcję logiczną `DeleteFile`, która zwraca `True`, jeśli plik został usunięty, a `False` w przeciwnym razie. Jak mogę odebrać wartość zwrotu? 1) Bardzo wyraźna forma to: if DeleteFile(MyFilePath) then begin IsMyFileDeleted := True; koniec; w przeciwnym razie rozpocznij IsMyFileDeleted := False; koniec; 2) Mniej nieporęczne byłoby: IsMyFileDeleted := False; jeśli DeleteFile(MyFilePath) to rozpocznij IsMyFileDeleted := True; koniec; 3) Albo jeszcze krócej, ale odradzane przez JEDI \- być może dopuszczalne jest po prostu zbieranie wartości zwracanych: IsMyFileDeleted := False; if DeleteFile(MyFilePath) to IsMyFileDeleted := True; Mój problem z 2 i 3 polega na tym, że wyraźnie stwierdzam coś (`X := False`), czego mogę nie wiedzieć na pewno. 4) Wolałbym nie ustawiać zmiennej z góry i mieć jej wartość całkowicie określaną przez funkcję: IsMyFileDeleted := DeleteFile(MyFilePath); Tutaj problem polega na tym, że jest to nieco mylące, ponieważ przypisanie wartości do wartości logicznej ma dość poważny efekt uboczny. Nie jestem pewien, czy takie użycie jest pożądane. Niektórzy twierdzą, że funkcje nigdy nie powinny mieć skutków ubocznych, ale myślę, że niektóre z wewnętrznych funkcji Pascala to naruszają. 5) Alternatywą byłoby wykonanie procedur ze zmienną wynikową do wypełnienia przez procedurę: DeleteFile(MyFilePath, IsMyFileDeleted); Może to być sprzeczne z trendem ograniczania użycia parametrów do minimum (czysty kod). Przypuszczam, że 4 i 5 byłyby jedynymi sposobami na zebranie wartości zwrotu innej niż boolean? Czy to coś oznacza dla funkcji logicznych? Tak, jest wiele sposobów na zrobienie tego samego i może po prostu nie martwię się o nic, ale staram się wypracować dobry styl i zastanawiam się, czy są jakieś najlepsze praktyki. Dla początkującego wiele zasad wydaje się być w konflikcie przez cały czas.


title: Co robisz, gdy czujesz, że utknąłeś w projekcie?

text: Kiedy jestem w kodzie lub rutynie projektowej, zwykle znajduję współpracownika, który nie jest programistą, aby omówić problem. Zmusza mnie do bardzo szczegółowego wyjaśnienia problemu i zwykle znajdę coś, co przegapiłem. Jakie są twoje metody „odklejania”?


title: Czy w modelowaniu koncepcyjnym należy używać atrybutów wielowartościowych?

text: Mój zespół i ja zaprojektowaliśmy prosty, przystępny cenowo język modelowania koncepcyjnego w ramach większego projektu badawczego. Język ten jest przeznaczony dla użytkowników końcowych, którzy mają niewielkie lub żadne szkolenie w zakresie technologii informatycznych. Pozwala im tworzyć modele klas przy użyciu podstawowych konstrukcji, takich jak klasy, atrybuty, asocjacje i tym podobne. Język działa dobrze, ale zastanawiamy się, czy dodać do niego atrybuty wielowartościowe. W paradygmacie obiektowym atrybuty są zwykle uważane za jednowartościowe, tj. mogą przyjmować wartość w każdym wystąpieniu klasy lub mogą mieć wartość null, ale nigdy nie mogą przyjmować wielu jednoczesnych wartości. Jednak niektóre sytuacje w niektórych domenach aplikacji wymagają atrybutów wielowartościowych. Na przykład wyobraźmy sobie klasę Garment z atrybutem Color. Ten atrybut może być równie dobrze wielowartościowy, ponieważ ubrania mogą być wielokolorowe: koszula, którą noszę jako typ, jest biało-fioletowa. Jednak bardzo niewiele podejść do modelowania koncepcyjnego obiektowego używa atrybutów wielowartościowych i żadne z nich nie jest mainstreamowe, o ile wiem. Wydaje mi się, że czytałem, że wielowartościowe atrybuty nie są dobrym sposobem na modelowanie rzeczy, ale nie potrafię przypomnieć sobie rozsądnego powodu i nie potrafię wymyślić żadnego, i odmawiam przyjęcia tego za dobrą monetę. Ponadto większość mojej pracy dotyczącej atrybutów wielowartościowych dotyczy poziomu bazy danych, a nie modelowania koncepcyjnego. Więc moje pytanie brzmi: czy uważasz, że wielowartościowe atrybuty mają sens w języku modelowania pojęciowego? Czy możesz wskazać mi jakieś książki, artykuły lub inne źródła, które to omawiają? Dziękuję Ci.


title: Projektowanie ustawień konfiguracji dla wielu użytkowników

text: Projektuję elastyczny i rozszerzalny sposób przechowywania ustawień konfiguracyjnych dla użytkowników. **Projekt tabeli bazy danych:** ╔═════════════════════════════╗ Definicja elementu konfiguracji ║ ══════════════════════╣ ║ ID ║ ║ Nazwa ║ ║ Typ ║ ║ DefaultValue (varchar) ║ ║ ConfigurationItemAdapterID ║ ╚════════ | ╔═══════════════════════════════╗ ║ Element konfiguracji ║ ╠═════════════ ══════════════════╣ ║ ID ║ ║ ID użytkownika ║ ║ ConfigurationItemDefinitionID ║ ║ Wartość (varchar) ║ ╚═══════════════ ════════════════╝ **Wyjaśnienie:** Tabela `ConfigurationItemDefinition` zawiera definicję ustawień konfiguracyjnych. „Typ” to typ .NET, do którego wartość zostanie przeanalizowana/serializowana podczas zapytania w kodzie. Tabela `ConfigurationItem` to miejsce, w którym ustawiane są wartości konfiguracyjne _dla każdego użytkownika_. Jeśli nie ma jawnie ustawionej wartości dla określonego użytkownika dla jakiejś definicji elementu konfiguracji, używana jest wartość `DefaultValue` z `ConfigurationItemDefinition`. `ConfigurationItemAdapterID` określa, jaka technika ma być użyta do "pobrania" i "ustawienia" wartości konfiguracyjnej. Na przykład, wartość `int` użyłaby podstawowego Parse (od string -> int). Obiekt `CultureInfo` musiałby używać adaptera serializacji. Sposób pobierania i ustawiania wartości konfiguracyjnych jest określany przez adapter (przykłady poniżej). **Kod C#** W języku C# ustawienie zostałoby uzyskane w następujący sposób: // Spowoduje to użycie adaptera Parse int timeout = someUser.GetConfigurationValue<int>("TimeoutValue"); // Spowoduje to użycie adaptera serializacji CultureInfo cultureInfo = someUser.GetConfigurationValue<CultureInfo>("CultureInformation"); I ustaw w ten sposób: // Spowoduje to użycie adaptera Parse someUser.SetConfigurationValue<bool>("IsLive", true); Proszę o krytykę tego projektu. Czy istnieją bardziej standardowe sposoby radzenia sobie z takim problemem?


title: Testowanie jednostkowe i „dopasowanie”

text: Czytam „Uwagi o syntezie formy” Cristophera Alexandra, który opisuje rozwiązanie problemu jako dobre dopasowanie, gdy brak jest złego dopasowania; nie możemy opisać wszystkich cech dobrego dopasowania, ponieważ jest to zbyt skomplikowane, ale możemy zidentyfikować złe cechy, które się wyróżniają. Złożoność oprogramowania oznacza, że nie jesteśmy w stanie zrozumieć wszystkich możliwych relacji – cech dobrego dopasowania, ale możemy zidentyfikować, kiedy kod nie robi tego, co powinien – złe dopasowanie. Zastanawiam się zatem, czy celem testów jednostkowych jest identyfikacja „złego dopasowania” w rozwiązaniu?


title: Synchronizacja numerów wersji testowych i wydań

text: Obecnie testuję wersję beta aplikacji na iPhone'a. W tej chwili wysłałem pierwszy beta-test dla moich użytkowników i oznaczyłem to wydanie jako `1.0` dla moich testerów. Teraz, odkąd testerzy przetestowali aplikację, odkryliśmy kilka błędów, które naprawiłem i jestem gotowy do wysłania nowego beta-testu dla moich użytkowników. Czy powinienem wtedy oznaczyć wydanie jako `1.0.1`? Kolejne pytanie z tym związane jest takie, że kiedy moi testerzy przetestowali to wydanie `1.0.1` i nie znaleźli żadnych błędów, byłby to dobry moment, aby opublikować tę wersję w App Store. Pod jakim numerem wersji powinienem to udostępnić w App Store? Pierwsza myśl jest taka, że ponieważ jest to pierwsze wydanie w App Store, powinno mieć numer wersji `1.0`, ale wtedy będzie „niezsynchronizowane” z wersją, która została przetestowana (`1.0.1`).


title: Jak uzyskać podwójną licencję?

text: Chciałbym otworzyć swój projekt na licencji GPL v3. Dodatkowo chciałbym sprzedać licencję dla tych, którzy chcą wykorzystać kod w autorskiej aplikacji. Jak mam wydać swój kod źródłowy na licencji GPL v3, jednocześnie zastrzegając sobie prawo do udostępnienia go na innej, wybranej przeze mnie licencji? Czy nadal umieszczam nagłówek GPL na górze każdego z moich plików źródłowych? Jestem raczej nowy w legalnej stronie oprogramowania.


title: Sugestia potrzebna do stworzenia strony internetowej, która tworzy podcasty

text: Zamierzam stworzyć projekt, który będzie miał następujące funkcje: * Utwórz podcast audio i wideo * Utwórz i przeglądaj profil hostera podcastów * Zarządzaj profilem hostera (dodaj podcast , usuń podcast , archiwizuj podcast ) * Implementacja Paypal Payment * Bezpieczny system logowania użytkownika * Możliwość w celu udostępnienia danych jako usługi sieciowej. Czy ktoś może mi zasugerować lepszy framework PHP lub CMS (jeśli jest wymagany) oraz serwer multimediów do tego samego celu. Wszelkie inne sugestie są również mile widziane.


title: Jakie są najlepsze sposoby na profesjonalne zwiększenie obecności w Internecie?

text: Od jakiegoś czasu poluję po rynku pracy i jestem zszokowany niektórymi rzeczami, które widzę. Twórcy oprogramowania, którzy stają się bardziej „znani” w sieci, zyskują znacznie więcej możliwości kariery i znacznie lepsze pozycje niż ludzie konkurujący z nimi, którzy nie są tak dobrze „znani” w sieci. Po przeczytaniu na ten temat zdałem sobie sprawę, że właściwie nie powinienem być tym tak zszokowany. Żyjemy w najszybszej erze ludzkości, a pracodawcy chcą dowiedzieć się jak najwięcej o potencjalnym pracowniku, zanim go zatrudnią. Im łatwiej nam jako programistom sprawiamy, że jesteśmy znalezieni, tym większe stają się nasze szanse na zdobycie wymarzonej pracy. W niektórych przypadkach pracodawcy uznają nawet, że tradycyjnie decydujemy się na aplikowanie do nich. Więc jakie są najlepsze sposoby dla mnie jako programisty na zwiększenie mojej obecności w Internecie? Już teraz kręcę się po serwisach wymiany stosów, takich jak programiści i przepełnianie stosów, zwiększając moją reputację, kiedy tylko mogę. Utrzymuję wiele projektów open source, zarówno jako committer, jak i właściciel projektu w Google Code i Github. Mam konto na Twitterze, stronę internetową i bloga. Co jeszcze mogę zrobić, aby zwiększyć swoją obecność w sieci? Dodatkowo, czy są jakieś dobre nakazy i zakazy dotyczące obsługi Twojej obecności w sieci? Uderzanie pracodawcy to oczywiste, że nie, ale interesuje mnie wszystko, od najbardziej podstawowych do najbardziej subtelnych sugestii, aby zapewnić sobie bardziej atrakcyjną obecność w Internecie. Z góry bardzo dziękuję za poświęcony czas.


title: Dlaczego niektóre projekty mają gettery i settery dla zmiennych instancji publicznych?

text: Szukałem projektu open-source do gry napisanej w Javie. Ma kilka klas, które: * Posiadają publiczne zmienne instancji. * Miej getter/settery dla takich zmiennych. Ogólnie rzecz biorąc, piszę gettery/settery, gdy chcę zawrzeć pewne zachowanie, które występuje, gdy właściwość jest modyfikowana. Jednak patrząc na kod, wygląda to tak: public class Test { public int value; public void setValue(x) { wartość = x; } public void getValue() { zwraca wartość; } } Potem pomyślałem o sprawdzeniu reszty frameworka i zobaczeniu, jak modyfikują taką wartość, co może dać mi wskazówkę, dlaczego zrobili powyższe. Z tego, co widziałem, robią to tak: object.value = 100; Bez użycia getterów/setterów. Więc teraz nie jestem pewien, jaki był sens tworzenia getterów/setterów. * * * Więc moje pytanie brzmi, czy istnieje powód, dla którego chciałbym tworzyć gettery/settery dla wartości publicznej, jeśli takie gettery/settery nie implementują nawet żadnego specjalnego zachowania?


title: Mapowanie kodu w .NET (lub ogólnie)

text: Czy istnieje rozwiązanie programowe w jakiejś formie, które ma możliwość odwzorowania akcji wywołania funkcji. Mam na myśli, powiedzmy, że mamy następującą klasę. public class Foo { public Foo() { if (ta.JakaWlasciwosc) { DoCos(); } } private void DoCoś() { var Bar = new Bar(); Bar.DoCosCosElse(); } } public class Bar { public void DoSomethingElse() { //wywołaj coś innego lub cokolwiek tutaj. } } Czy byłoby coś, co generowałoby schemat blokowy (lub swego rodzaju mapę) tego, gdybym miał powiedzieć, co robi tworzenie `Foo`? Pytam o to, ponieważ większość naszego kodu została napisana w locie bez jakiejkolwiek dokumentacji, a ja po prostu próbuję pomóc w ustaleniu niektórych zachowań i upewnieniu się, że wszystko jest zrozumiałe.


title: Jaki jest ładniejszy sposób opisania procesu „Idiot Proofing” oprogramowania?

text: Dla mnie Idiot Proofing oznacza po prostu upewnienie się, że użytkownik nie może złamać oprogramowania, nawet gdyby próbował. Na przykład, jeśli wartość jest odczytywana z pola tekstowego i konwertowana na podwójną, jeśli oprogramowanie bazowe jest idiotoodporne, nie zostanie przerwane, jeśli użytkownik wpisze wartość inną niż podwójna. Niedawno napisałem harmonogram rozwoju i jeden z elementów nazywał się „Idiot proof UI”. Ludzie, dla których tworzę to oprogramowanie, żartobliwie udawali obrazę tego terminu, ale widzę, gdzie ten termin faktycznie by ludzi zdenerwował. Jaki jest lepszy sposób na powiedzenie tego?


title: Jakieś wskazówki dotyczące poprawiania innych nieścisłości technicznych?

text: Jak często poprawiasz innych, gdy mówią coś niedokładnego? Na przykład ostatnio poprawiłem kogoś, kto odnosił się do ukośnika w przód jako ukośnika odwrotnego. Kilka razy nawiązał do mnie, więc wiedziałem, że to nie przejęzyczenie. Co więcej, nie próbowałem „pokazać mojej ogromnej wiedzy”, po prostu pomyślałem, że może chcieć wiedzieć. Kilku facetów pisze kod w VB.NET, z jakiegoś powodu nietechniczni ludzie, którzy są odpowiedzialni, mają w głowach termin VBN lub VBN.NET i nikt ich nie poprawił. Więc teraz tak to nazywają. Wszyscy tutaj wiedzą, co mają na myśli, kiedy mówią VBN, więc myślę, że nie ma prawdziwej szkody. Osobiście uwielbiam się uczyć, więc z radością witam większość poprawek, abym mógł dowiedzieć się, co jest właściwe. Czuję, że inni po prostu denerwują się, gdy są poprawiani. Gdyby jakieś błędy zostały pozostawione w spokoju, czy zawsze jest w porządku, aby po prostu powiedzieć: > Właściwie nazywa się VB.NET, myślę, że być może myliłeś go z VPN. Czy po prostu jestem pedantyczny? Poprawianie błędów w czyimś kodzie jest zawsze w porządku, ale czy istnieją jakieś wytyczne dotyczące poprawiania ludzi poza przeglądami kodu? Czy istnieją różne zasady, których powinienem przestrzegać, poprawiając osoby techniczne i nietechniczne? Nie chcę być zbieraczem informacji, ale nie chcę też być irytującym pedantem.


title: Czy istnieją języki skryptów internetowych z typami statycznymi?

text: Wydaje się, że istnieją dwa główne sposoby na skonfigurowanie zaplecza serwera WWW. Możesz użyć stosu LAMP, z kodem po stronie serwera w czymś takim jak PHP lub Python (lub Ruby lub JavaScript, które nie zaczynają się na P). Te języki skryptowe są zwykle pisane dynamicznie, ze wszystkimi wadami w wydajność, poprawność i łatwość konserwacji, które zapewniają języki dynamicznie typowane, ale aktualizacja serwera jest łatwa, ponieważ cała logika generowania stron jest przechowywana w zewnętrznych skryptach. Innym popularnym stylem architektury jest ASP.NET, w którym logika generowania stron jest napisana w skompilowanym kodzie. To ma tendencję do używania statycznie wpisanych języków, więc otrzymujesz kod, który miał zalety kompilatora, ale cała logika generowania strony jest kompilowana na serwerze, co oznacza, że jeśli chcesz coś zmienić, musisz wyłączyć serwer i zastąp go nową kompilacją. Więc to mnie zastanawia. Czy istnieją jakieś języki skryptowe po stronie serwera, które używają statycznego typowania, dla najlepszych z obu światów?


title: Testowanie traci swoją skuteczność, jeśli nie używają ich wszyscy programiści

text: Załóżmy, że jesteś przekonany, że dodatkowy czas poświęcony na testowanie jednostkowe ma swoje zalety i poprawia produkcję. Czy to nadal się utrzymuje, gdy wszyscy pracujący nad tym samym kodem ich nie używają? To pytanie sprawia, że zastanawiam się, czy naprawianie testów, z których wszyscy nie korzystają, to strata czasu. Jeśli poprawisz test, aby nowy kod przeszedł, zakładasz, że nowy kod jest poprawny. Osoba aktualizująca test lepiej rozumie rozumowanie stojące za zmianą kodu i decyduje, czy test lub nowy kod wymaga naprawy. Ta duża niespójność w zespole, jeśli chodzi o testowanie, prawdopodobnie wskazuje również na inne problemy. Istnieje pewne ryzyko, że ktoś inny w zespole zmieni kod objęty testami. Czy to jest moment, w którym testowanie staje się nieproduktywne?


title: Wzorzec projektowy dla uprawnień do danych

text: Projektuję system finansowy, który powinien przyznawać dostęp do danych na podstawie ról i uprawnień. Na przykład menedżer może zobaczyć transakcje finansowe użytkowników w jego domenie, ale nie może zobaczyć informacji dotyczących innej transakcji. Chociaż możliwe jest wdrożenie ad-hoc, zastanawiałem się, czy istnieją wzorce lub wytyczne dotyczące wdrażania takiego oprzyrządowania.


title: Złożoność przestrzenna iteracyjnego pogłębiania DFS

text: Czytamy na Wikipedii > Iteracyjne pogłębianie wyszukiwania w głąb, że > Złożoność przestrzeni IDDFS wynosi O(bd), gdzie b jest współczynnikiem rozgałęzienia, a > d jest głębokością najpłytszego celu. Wikipedia podaje również przyzwoity pseudokod dla IDDFS; Zrobiłem to w Pythonie: def IDDFS(root, goal): depth = 0 solution = None while not solution: solution = DLS(root, goal, depth) depth = depth + 1 return solution def DLS (węzeł, cel, głębokość): drukuj („DLS: node=%d, cel=%d, depth=%d” % (węzeł, cel, głębokość)) if depth >= 0: if node == cel: zwraca węzeł dla dziecka w expand(node): s = DLS(dziecko, cel, głębokość-1) if s: return s return Brak Więc moje pytanie brzmi: w jaki sposób złożoność przestrzeni obejmuje czynnik rozgałęzienia? Czy to zakłada, że `expand(node)` zajmuje przestrzeń `O(b)`? Co się stanie, jeśli `rozwiń` używa generatora, który zajmuje tylko stałą przestrzeń? Czy w takim przypadku złożoność przestrzeni byłaby nadal funkcją czynnika rozgałęzienia? Czy są sytuacje, w których `expand` może być generatorem przestrzeni stałej?


title: Czy muszę nauczyć się html i javascript, aby tworzyć aplikacje internetowe?

text: Jestem doświadczonym programistą Java i chcę stworzyć złożoną aplikację internetową wymagającą dynamicznych stron, rysunków itp. (Weźmy jako przykład SO). Czy muszę nauczyć się javascript/html, żeby stworzyć taką aplikację? Nie chodzi o to, że nie chcę uczyć się innego języka (robiłem to już wcześniej), ale technologia w środowisku javascript wydaje się zmieniać tak szybko, że po zakończeniu nauki jednego frameworka jest już przestarzała. Sprawdziłem kilka frameworków java do tworzenia stron internetowych (spring, play), ale niezbyt głęboko. Czy te frameworki (lub inne możliwe frameworki java, o których nie jestem świadomy) mogą być używane bez uczenia się html/javascript? Mam też pewne doświadczenie w Pythonie. Więc jeśli mogę zrobić aplikację w Pythonie, jest to również opcja.


title: Obsługa komunikatu o błędzie dla formularza logowania Spring MVC

text: Może to dotyczyć wielu scenariuszy obsługi błędów, ale jestem ciekawy, jak to zrobić w scenariuszu logowania. Biorąc pod uwagę tę metodę kontrolera Spring: @RequestMapping(value = "/account/login", method = RequestMethod.POST) public String login(@RequestParam("username") String aUsername, @RequestParam("password") String aPassword, Model modelu ) { spróbuj { kontoUsługa.login(aNazwa użytkownika, aHasło); } catch (LoginException e) { // log e // dodaj błąd do zakresu żądania model.addAttribute("error", e.getMessage); zwróć "zaloguj się"; // powrót do strony logowania } // sukces, pokaż profil return "redirect:profile"; } I formularz login.html (używam thymeleaf, ale po prostu postępuj zgodnie z logiką, podobną do `jsp`): <!-- Oznacza to, że jeśli ustawiono ${error}, użyj go zamiast zawartości p , `Brak błędu` --> <p th:if="${error}" th:text="${error}">Brak błędu</p> <form method="post" action="#" th :action="@{/account/login}"> Nazwa użytkownika: <input name="username" type="text" /> Hasło: <input name="password" type="text" /> <input name=" login" type="submit" value="Login" /> </form> Czy w ten sposób zwykle odbywa się obsługa błędów w aplikacjach internetowych Java? Gdziekolwiek może się zdarzyć błąd, rozgałęziasz się z różnymi „jeśli”? Czy istnieje czystszy lub bardziej ogólny sposób na zrobienie tego?


title: Jak testujesz enkoder?

text: Mam coś takiego: public byte[] EncodeMyObject(MyObject obj) Testowałem jednostki w ten sposób: byte[] oczekiwaneResults = new byte[3]{ 0x01, 0x02, 0xFF }; Assert.IsEqual(oczekiwane wyniki, EncodeMyObject(myObject)); EDYCJA: Dwa sposoby, które widziałem, to: 1) Używanie zakodowanych wartości oczekiwanych, jak w powyższym przykładzie. 2) Użycie dekodera do dekodowania zakodowanej tablicy bajtów i porównanie obiektów wejścia/wyjścia. Problem, który widzę w metodzie 1, polega na tym, że jest ona bardzo krucha i wymaga wielu wartości zakodowanych na sztywno. Problem z metodą 2 polega na tym, że testowanie kodera zależy od prawidłowego działania dekodera. Jeśli koder/dekoder są zepsute w równym stopniu (w tym samym miejscu), testy mogą dawać fałszywie pozytywne wyniki. To mogą być jedyne sposoby na przetestowanie tego typu metody. Jeśli tak jest, to w porządku. Zadaję pytanie, aby sprawdzić, czy są jakieś _lepsze strategie_ do tego typu testów. Nie mogę ujawnić wnętrza konkretnego enkodera, nad którym pracuję. Pytam ogólnie, jak byś rozwiązał tego typu problem i nie czuję, że wnętrze jest ważne. Załóżmy, że dany obiekt wejściowy zawsze wygeneruje tę samą tablicę bajtów wyjściowych.


title: FxCop / Analiza kodu z VS2010 Ultimate

text: Dostaję pewne informacje na ten temat, ale nadal mogę znaleźć właściwą odpowiedź, ostatnio w mojej firmie poproszono mnie o to: "przeprowadź analizę fxcop tego kodu i powiedz mi wyniki". Ok, mam VS2010 Ultimate, który ma analizę kodu, ale przed jakimkolwiek komentarzem przeglądam go w Internecie, ponieważ chcę zaimplementować najlepszy wybór... Załóżmy więc, że użyję tych samych reguł na obu analizatorach: * Czy powinienem zalecać używanie jednego nad drugim? * Czy powinienem powiedzieć "hej, to trochę stare, użyjmy analizy kodu!" * Czy powinienem uzyskać te same wyniki na różnych komputerach? (za to, co rozumiem, fxcop daje ci trochę "punktów" i za to, co przeczytałem, czasami daje ci punkty diff na komputerach diff, nie wiem o tym z analizą kodu Dzięki, wszelka pomoc byłaby mile widziana


title: Czy w zespole Scrumowym są osoby pełniące wiele ról?

text: Oceniam niektóre metodologie w stylu Agile pod kątem ewentualnego wprowadzenia do mojego zespołu. Czy w przypadku Scrum można mieć wiele ról tej samej osoby? Mamy mały zespół czterech programistów i projektanta stron internetowych; tak naprawdę nie mamy leada (ja pełnię tę rolę), testerów QA czy analityków biznesowych, a wszystkie nasze zadania programistyczne pochodzą od CIO. Testowanie automatyczne jest postrzegane jako całkowita strata czasu, a wszystko skupia się na szybkości, a nie na jakości. Co się stanie, to CIO wymyśli zadanie programistyczne (czy to funkcja, czy błąd) i przekaże je programiście (nie całemu zespołowi, pojedynczej osobie, często prywatnie lub znienacka), który jest wtedy oczekuje się, że zostanie ukończony. CIO nie zbiera wymagań poza pierwotnym pomysłem (a to już nas gryzło, ponieważ zaimplementujemy coś tylko po to, aby dowiedzieć się, że żaden z użytkowników końcowych nie może korzystać z tej funkcji, ponieważ nie konsultowano się z nim ani nawet o tym nie poinformowano zanim ją opracowaliśmy iw panice zostaniemy poproszeni o cofnięcie zmiany), ale wymaga powiedzenia/zatwierdzenia wszystkiego, co robimy. Po pierwsze, czy warto rozważyć styl Scrum, aby wprowadzić pewne standardy i praktyki? Z lektury wynika, że Scrum wydaje się polegać na nieco większym zaufaniu i komunikacji oraz skupia się bardziej na zarządzaniu projektami niż na rozwoju, czego jesteśmy całkowicie pozbawieni, ponieważ obecnie nie mamy żadnych pozorów zarządzania projektami. Po drugie, jeśli to może działać, czy to nierozsądne, aby ktoś, powiedzmy ja, działał zarówno jako ScrumMaster, jak i programista? Czy też programista może być również Product Ownerem (chociaż są szanse, że będzie to CIO, który nie jest programistą)? Zdaję sobie sprawę, że Scrum Master i Product Owner powinni być różnymi ludźmi, ale jednocześnie nie sądzę, że mamy kogoś, kto ma cechy Product Ownera (jest szansa, że zamieniłoby się to w „Potrzebuję tych wszystkich historii, ja nie obchodzi mnie, jak to zrobić, ale zrób to "typ transakcji i / lub każde zamrożenie zostanie odmrożone z powodu kaprysu). Wydaje mi się, że być może będę musiał wybrać elementy Scrum/XP/Lean, aby zrekompensować to, jak się obecnie robi, ponieważ jest wysoce nieprawdopodobne, aby można było zmienić mentalność; na przykład programowanie w parach nigdy by nie poszło (postrzegane jako marnotrawstwo, wykonujesz połowę zadań, jeśli potrzebujesz do wszystkiego dwóch osób), TDD byłoby trudne do sprzedania, ale krótkie cykle byłyby mile widziane.


title: Czy śledzenie użytkowania jest ezoteryczne czy najnowocześniejsze?

text: Istnieje kilka produktów do śledzenia wykorzystania Twojej aplikacji. Znam co najmniej 10 ofert. Mówią ci, które funkcje były używane częściej niż inne. W ten sposób można zidentyfikować funkcje, które mogą nie zostać wprowadzone do nowych wersji. W przypadku Google Analytics lub podobnych narzędzi jest to standardowe narzędzie internetowe na „poziomie strony”. Zastanawiam się tylko, kto już korzysta z tej analizy dla aplikacji desktopowych? Oczywiście robią to duże firmy, takie jak Microsoft, ale czy ISV i mali dostawcy (być może poniżej 50 pracowników) korzystają z takich narzędzi? Obecnie nikogo nie znam, więc jestem naprawdę ciekawy: czy śledzenie użytkowania jest ezoteryczne, czy najnowocześniejsze?


title: Znajomość systemu operacyjnego podczas nauki języka programowania komputerowego

text: Jestem ciekaw, czy znajomość wewnętrznego działania systemu operacyjnego pomogła Ci w zrozumieniu języka programowania komputerowego? Być może pomogło ci to szybciej zrozumieć programowanie niż ktoś, kto ma mniejszą wiedzę na temat podstawowych koncepcji systemu operacyjnego?


title: Testowanie projektów osobistych

text: Rozwijam osobisty projekt internetowy, który, mam nadzieję, będzie używany przez tysiące. Oczywiście przed wydaniem go na wolności jako Beta zastanawiałem się, czy istnieją jakieś społeczności, które przetestują moją aplikację internetową i przekażą opinie? Wolny byłby świetny, ale jestem otwarty na sugestie.


title: Jak pogodzić wewnętrzną kreatywność z otoczeniem korporacyjnym?

text: Jako programiści, wielu (większość?) z nas ma wewnętrzną twórczą „iskrę”. Uwielbiamy myśleć o nowych, użytecznych sposobach realizacji zadań. Wielu z nas marzyło nawet o kilku pomysłach, które naszym zdaniem mogłyby być opłacalnym biznesem, a nawet zmienić sposób, w jaki ludzie radzą sobie z ich codziennymi czynnościami. Jednak wielu z nas pracuje również w środowisku korporacyjnym, w którym mówi się nam, nad jakimi projektami pracować i kiedy nad nimi pracować. Osobiście czasami może to być duszące. Jeśli masz pomysł, który według Ciebie może zmienić świat (lub przynajmniej wpłynąć na wielu ludzi), jak możesz pasjonować się pracą, która jest Ci dyktowana? Nawet jeśli nie masz kolejnego „wielkiego pomysłu”, wielu z nas nadal chce uwolnić wewnętrzną kreatywność. Jak to zrobić w środowisku, które wydaje się nieproduktywne dla tej kreatywności?


title: Jak zorganizować dużą warstwę danych w projekcie?

text: Mam warstwę danych, która ściśle współdziała z bazą danych i zwraca wynik do modelu. Mam asynchroniczne połączenie z bazą danych, więc czasami muszę łączyć wyniki, w których muszę wykonać wiele zapytań. Mam około 1000 linijek kodu w jednej klasie i robi się trudno zarządzać. Moje pytanie brzmi: w jaki sposób refaktoryzujecie/organizujecie coś takiego? Czy dzielisz to na kilka klas, może według obszaru funkcjonalnego? Czy masz jedną klasę nadrzędną, która wywołuje podklasy z zawartym w niej kodem? Ie if you have DataAccess.class with everything in it would you break it up like this: DataAccess_FunctionalAreaA_Insert.class DataAccess_FunctionalAreaA_Update.class DataAccess_FunctionalAreaA_Delete.class DataAccess_FunctionalAreaA_Read.class DataAccess_FunctionalAreaB_Insert.class DataAccess_FunctionalAreaB_Update.class DataAccess_FunctionalAreaB_Delete.class DataAccess_FunctionalAreaB_Read.class I would probably use namespaces to break wyżej, ale chciałem zilustrować, jak można to rozbić. Co byś zrobił?


title: Czy chronione metody automatycznego przesyłania są w porządku?

text: Często mam nadklasy, które zawierają bardziej abstrakcyjną formę klasy jako zmienną składową, niż potrzebują moje podklasy. Mój kod jest zaśmiecony `((NazwaKlasy)NazwaZmiennej).NazwaMetody()`. Czy najlepszym sposobem rozwiązania tego problemu jest utworzenie chronionej/prywatnej metody o nazwie „getVariableNameAsClass()”? Nie jest dużo krótszy w literach, ale IDE może to zrobić znacznie szybciej niż manewrowanie klawiszami do dodania w nawiasach. A może jest lepsze rozwiązanie? Powodem, dla którego muszę rzutować, jest to, że wszystkie podklasy `Line` używają klasy `Output`, więc umieszczam gettery i settery, które odnoszą się do klasy `Output` w klasie bazowej. Problem polega na tym, że „AudioLine” używa i „AudioOutput” i musi zdefiniować dodatkowe metody, które wykorzystują bardziej szczegółowe funkcje. **Oto cały projekt mojej klasy:** Mam klasę `Line` z dwiema podklasami, `VideoLine` i `AudioLine`, które delegują część swoich funkcji do wewnętrznej klasy `Output`. Klasa `Output` posiada podklasę `AudioOutput` i `VideoOutput`. Zdefiniowałem całą funkcjonalność dla klasy `Line`, która opiera się tylko na metodach z klasy `Output` wewnątrz klasy `Line`, zgodnie z DRY. Zarówno „AudioLine” i „VideoLine” linii `Line` zapewniają dodatkowe funkcje `AudioOutput` i `VideoOutput`. Ponieważ oboje ustawili chronioną zmienną `Output` w swoich konstruktorach (i dlatego WIEDZĄ, jaką podklasę zawiera), wydaje się sensowne jej kasowanie.


title: Dostawca roli C# dla wielu aplikacji

text: Tworzę niestandardowy RoleProvider, którego chciałbym używać w wielu aplikacjach w tej samej puli aplikacji. Do administrowania rolami (tworzenie nowej roli, dodawanie użytkowników do roli itp.) chciałbym stworzyć aplikację nadrzędną, do której będę mógł się zalogować i ustawić role dla każdej dodatkowej aplikacji. Na przykład mogę mieć AppA i AppB w mojej organizacji i muszę stworzyć aplikację o nazwie AppRoleManager, która może ustawiać role dla AppA i AppB. Mam problemy z zaimplementowaniem mojego niestandardowego RoleProvider, ponieważ używa metody inicjowania, która pobiera nazwę aplikacji z pliku konfiguracyjnego, ale potrzebuję, aby nazwa aplikacji była zmienną (tj. „AppA” lub „AppB”) i została przekazana jako parametr. Myślałem o zaimplementowaniu wymaganych metod, a następnie o dodatkowych metodach, które przekazują nazwę aplikacji jako parametr, ale wydaje się to niezgrabne. tj. public override CreateRole(string roleName) { //wykorzystuje właściwość ApplicationName tego, która jest ustawiona w web.config //tworzy rolę w db } public CreateRole(string ApplicationName, string roleName) { //tworzy rolę w db o określonej param. } Wolałbym również, aby ludzie nie mogli wywoływać funkcji CreateRole(string roleName), ponieważ bieżąca instancja klasy może mieć inną wartość applicationName niż zamierzona (co mam tutaj zrobić? wyrzucić NotImplementedException?). Próbowałem po prostu napisać klasę bez dziedziczenia RoleProvider. Ale jest to wymagane przez ramy. Jakieś ogólne pomysły dotyczące struktury tego projektu? Myślałem zrobić klasę otoki, która używa dostawcy roli i jawnie ustawia nazwę aplikacji przed (i po) i wywołuje dostawcy coś takiego: static class RoleProviderWrapper { public static CreateRole(string pApplicationName, string pRoleName) { Roles. Dostawca.NazwaAplikacji = pNazwaAplikacji; Role.Provider.CreateRole(proRoleName); Roles.Provider.ApplicationName = "Ogólny"; } } czy to mój najlepszy zakład?


title: Czy można przełączyć tabelę w czasie wykonywania przy użyciu Entity Framework?

text: Mam kod do przełączania się między bazami danych podczas korzystania z EF, ale teraz muszę również zezwolić użytkownikowi na wybranie konkretnej tabeli. (Wszystkie tabele używają tego samego schematu, ale mogą mieć różne nazwy ze względu na sposób, w jaki klient aktualizuje zestawy danych). Czy jest na to sposób? A jeśli tak się stanie, czy można to zrobić bez przerywania przez aktualizacje wprowadzane w modelu danych Entity?


title: Jaka jest różnica między Inżynierem a Technologiem?

text: Są ludzie, którzy po prostu uwielbiają używać słowa Technolog we mnie i wokół mnie. Czasami mam wrażenie, że sposób, w jaki myślałem jako Inżynier przy rozwiązywaniu problemów, jest zupełnie inny niż tak zwany pogląd Technologa. Jaka jest różnica? Czy ta różnica wynika z kultury pracy i rodzaju pracy, jaką wykonują firmy IT?


title: Jak zalogować się do aplikacji konsolowej

text: Mam prostą aplikację konsolową, która zostanie wdrożona jako zaplanowane zadanie. Poniżej znajduje się jego pseudokod Main(string[] args) { //pobierz ciąg xml z bazy danych Raporty raporty = ReportsDB.GetReport(args[0].ToString()); //Wygeneruj plik xml za pomocą xmwriter //prześlij plik na stronę sftp } Zastanawiałem się, jak włączyć funkcję rejestrowania dla tego zadania. Ponadto, czy wystarczy użyć programu do zapisywania tekstu, aby zapisywać do pliku tekstowego za każdym razem, gdy jest on uruchamiany, lub korzystać z bibliotek takich jak log4net **Edytuj** Powinienem być w stanie zarejestrować wykonanie zadania, takie jak czas rozpoczęcia, informacje o debugowaniu, itd. to będzie dla mnie.


title: Jak zarządzać zmianami schematu bazy danych w wydaniach projektów open source

text: Zarządzam aplikacją internetową PHP/MySQL o otwartym kodzie źródłowym, używaną przez kilka szkół podstawowych i średnich oraz niektóre uczelnie. Jestem też jedynym deweloperem projektu. Chociaż kiedyś było to niewiele więcej niż pobranie źródła aplikacji hostowanej przez mojego pracodawcę, przez ostatni rok pracowałem, aby przekształcić go w „prawdziwy” projekt open source, z dokumentacją, ponumerowanymi wydaniami, publicznymi dziennikami zmian itp. Zamierzam ulepszyć proces aktualizacji, a jednym z potencjalnie bolesnych obszarów (zwłaszcza dla szkół z brakiem wiedzy informatycznej) są zmiany w schemacie bazy danych między wydaniami. Nie zdarzają się często ani nie są drastycznymi zmianami, ale byłbym wdzięczny za sugestie dotyczące procesu. Obecnie prowadzę podstawowy skrypt instalacyjny SQL, aby skonfigurować bazę danych w nowej instalacji. Obejmuje to kompletny schemat dla bieżącej wersji; w przypadku nowej instalacji nie są wymagane żadne dalsze działania. Zmiany zachodzące między wydaniami są przechowywane w skryptach `upgrade-$releasever.sql` i konieczne jest stopniowe uruchamianie wszystkich skryptów aktualizujących dla wszystkich pominiętych wydań. Skrypty powłoki nie są dobrym rozwiązaniem, ponieważ wielu naszych użytkowników działa na hostach bez dostępu do powłoki. Ze względu na inne priorytety, złożony skrypt instalacji/uaktualnienia PHP oparty na przeglądarce jest mało prawdopodobny. Chciałbym jednak zrobić coś ze skryptem PHP opartym na przeglądarce, aby uprościć aktualizacje. Sugestie, jak do tego podejść?


title: Gdzie mogę znaleźć tłumaczenia licencji zatwierdzonych przez OSI?

text: Szukam witryny/strony, która zawiera tłumaczenia popularnych licencji open-source. W szczególności szukam tłumaczeń do licencji MIT. Czy istnieje witryna lub zasób, który zawiera te tłumaczenia?


title: Implementuj warstwę usług w MVC

text: Mamy zdefiniowaną warstwę usług hostowaną w WCF. Obecnie budujemy stronę internetową, która będzie musiała korzystać z funkcjonalności usług. Witryna jest pisana w ASP.NET MVC 4 i próbuję zdecydować, jak odwoływać się do usługi WCF z aplikacji MVC. To duża, złożona strona internetowa, która będzie się zmieniać co tydzień. Moją pierwszą reakcją jest wyodrębnienie odwołań do usług (około usług 7 na tym jednym hoście WCF) i utworzenie biblioteki fasady usług ref, z którą współdziała witryna internetowa. Ale nie wiem dokładnie, jak korzystać z fasady usługi w MVC. Zaczynam myśleć, że będą za to odpowiedzialne modele, ponieważ kiedy kontroler otrzyma model, ten model powinien wywołać usługę (jeśli jest to konieczne) i zwrócić to, o co poprosił kontroler. Staram się uniknąć, aby aplikacja MVC znała szczegóły odwołań do usług. Mógłbym więc mieć fabrykę modeli, która tworzy dowolny model, którego potrzebują kontrolerzy, i mogą używać fasady usługi, aby to osiągnąć. Czy to dobry plan, czy nie jestem na dobrej drodze?


title: Scrum dla zespołu podzielony na dwa języki mówione

text: Mam zespół, który nie ma jednego wspólnego języka wśród wszystkich członków zespołu. Zespół jest podzielony na dwie lokacje (choć geografia nie jest głównym problemem). Wszyscy członkowie zespołu w każdej lokalizacji mówią tym samym językiem, aw obu lokalizacjach są członkowie, którzy mówią w obu. Chciałbym przedstawić scrum, ale borykam się z logistyką radzenia sobie z problemem językowym. To nie jest zespół offshore. Wszyscy członkowie zespołu są pracownikami firmy, ale znajdują się w dwóch różnych biurach w różnych krajach. Na szczęście nie mamy żadnych problemów ze strefami czasowymi; język jest podstawową barierą. Chociaż zespół można podzielić na dwa zespoły, biorąc pod uwagę wielkość i umiejętności ludzi w każdej lokalizacji, a także inne czynniki zewnętrzne, bardziej pożądana jest integracja jako jeden zespół. Myślę, że lepiej byłoby użyć wideokonferencji, aby mieć bogatszą komunikację i pomóc zjednoczyć zespół, aby móc się widzieć i wykonywać prawdziwe podejście. Jednak obawiam się, że będzie to trudne do porozumiewania się między językami. Czy dwujęzyczni członkowie zespołu powinni tłumaczyć ustnie? Alternatywnie moglibyśmy użyć wiadomości błyskawicznych zgodnie z zaleceniami jedynego odniesienia, jakie udało mi się znaleźć, do kwestii językowych w rozproszonym scrumie. Martwi mnie „uboższa” komunikacja i być może jest to kiepskie wprowadzenie do koncepcji scrum. Od osób, które mają doświadczenie w radzeniu sobie z różnicami językowymi w zespole, w jaki sposób rozwiązałeś problem i jak dobrze to dla Ciebie zadziałało?


title: Jak poradzić sobie z potrzebą znajomości wielu języków programowania?

text: Jestem stosunkowo młodym programistą. Mam 23 lata i zawodowo programuję od około 5 lat. Jak większość programistów zacząłem od C, dla zabawy nauczyłem się assemblera x86, a potem znalazłem C++, który okazał się moją największą pasją w świecie programowania. Programowanie w językach C i C++ zmusza do poznania specyficznych dla platformy API, bibliotek i frameworków, z których każdy wymaga ciągłych badań i eksperymentów. Po pewnym czasie musiałem przejść do Javy i C#, ponieważ popyt w moim regionie dotyczy w zasadzie tych języków. Z tymi językami wkroczyłem w świat tworzenia stron internetowych, a potem musiałem nauczyć się javascriptu. Programowanie dla .NET Framework było na początku ekscytujące, ale ciągle czułem, że jestem związany przez Microsoft (i oczywiście .NET Framework odciągał mnie od Linuksa). Do tworzenia desktopów mogłem zrobić prawie wszystko, co robiłem z .NET, używając C++ z Qt, ale do tworzenia stron internetowych musiałem poszukać alternatywy. Szybko znalazłem Django i zacząłem uczyć się Pythona, aby móc korzystać z Django. Obecnie uczę się programowania na iOS z Objective-C. Do tej pory nauka wszystkich tych języków była dość łatwa (C++ dobrze mnie wyszkolił), ale obawiam się, że pewnego dnia nie będę w stanie ich wszystkich śledzić. Aby wyjaśnic. Jedyne języki, których się nauczyłem, bo musiałem to C# i Java. Wszystkich innych nauczyłem się dla zabawy, ponieważ uwielbiam programować i uczyć się nowych rzeczy. Lubię też doskonalić swoje umiejętności w programowaniu desktopowym, webowym i mobilnym. Moje pytanie brzmi: Jak śledzić wiele języków programowania? (To znaczy, śledź zmiany w tych językach i utrzymuj swoje umiejętności na wysokim poziomie) oraz: Czy jest wystarczająco dużo języków programowania?


title: Używasz kodu źródłowego na licencji LGPL w .NET, przekonwertowanego z JAVA?

text: Znalazłem jeden projekt JAVA przydatny dla naszego komercyjnego oprogramowania, które jest rozwijane w C#. Projekt JAVA jest objęty LGPL. Rozumiem (proszę mnie poprawić, jeśli się mylę), jeśli używam jednej skompilowanej biblioteki LGPL (na przykład .dll w systemie Windows), nie muszę nawet zrzekać się informacji o licencji. Ale jeśli muszę dokonać pewnych modyfikacji w kodzie źródłowym, muszę dołączyć licencję LGPL i wykonać część modyfikacji, która korzysta z biblioteki również na licencji LGPL. Ponieważ nasze oprogramowanie jest w .NET, wyraźnie muszę zmodyfikować z kodu źródłowego JAVA (zaczynając od konwersji za pomocą Sharpen w Eclipse, a następnie dokonać ręcznej modyfikacji). Więc moje pytanie brzmi, czy jeśli przekonwertuję go na projekt C# i skompiluję jako bibliotekę, i dołączę licencję podczas jej dystrybucji, czy to wystarczy? Czy muszę udostępnić kod źródłowy całego nowego projektu (na żądanie)?


title: Czy ponowne użycie oprogramowania wyklucza powtarzalność procesu?

text: ## Problem - Ponowne użycie kodu Zastanawiałem się nad tym pytaniem dotyczącym dostarczania oprogramowania i ciągle wracałem do kwestii powtarzalności i/lub odtwarzalności. Mają znaczenie, ponieważ jeśli nie powtórzysz projektu, ulepszenie procesu, którego użyłeś do zbudowania projektu, staje się trudniejsze. Inżynieria polega na ciągłym ulepszaniu procesów związanych z projektowaniem i budową w celu uzyskania projektów o wyższej jakości. Oprogramowanie może w dużym stopniu polegać na ponownym wykorzystaniu ze względu na jego formę cyfrową. Zamiast przepisywać moduł, po prostu wywołujemy go ponownie lub kopiujemy do innego systemu. Niektóre przykłady to uwierzytelnianie / logowanie lub być może funkcja logowania. Istnieje wiele dobrze znanych przykładów dla tych kategorii, a konwencjonalna mądrość polega na ponownym wykorzystaniu tego, co istnieje, zamiast rzucania własnym. ## Porównania z innymi dyscyplinami ### Budowa W przeciwieństwie do tego, budowa systemów fizycznych (budynków, mostów) nie jest tak blisko wielokrotnego użytku. To prawda, że projekt domu można wielokrotnie wykorzystać do budowy tej samej kopii domu, ale za każdym razem trzeba wykonać budowę. Wytnij i wklej nie działa w ten sposób w świecie analogowym. Plany mostów są mniej wielokrotnego użytku niż domy, ponieważ warunki na miejscu będą się różnić. Mistrzowie budowlani są ekspertami znanymi z tego, że zaprojektowali i / lub zbudowali dziesiątki, setki lub tysiące rzeczy na swoim terenie. Na przykład Frank Lloyd Wright, światowej sławy architekt i projektant „zaprojektował ponad 1000 konstrukcji i wykonał 532 prace”. Porównajmy to z Andersem Hejlsbergiem, który zaprojektował „tylko” pięć języków (Turbo Pascal; Delphi; J++; C#; maszynopis). Pod wieloma względami jest to niesprawiedliwe porównanie, ponieważ domeny są różne. Ale na szerokim poziomie wymierna produkcja dwóch bardzo inteligentnych ludzi jest zupełnie inna. ### Sztuki walki Artyści sztuk walki powiedzą, że opanowanie ruchu pochodzi tylko z tysięcy powtórzeń. Po wprowadzeniu sporej części tych powtórzeń, wielu artystów sztuk walki jest zaskoczonych tym, jak proste stało się wcześniej postrzegane jako złożone kata lub forma. Instruktorzy tych uczniów zauważą również, że ruch staje się bardziej płynny i celowy, a także ma ekonomię ruchu. Podobnie, doświadczeni mistrzowie sztuk walki są w stanie wychwycić bardziej złożone kata szybciej niż mniej doświadczeni uczniowie. Doświadczenie z powtarzania dało im ramy lub proces, który pozwala im szybciej się uczyć. ### Stolarstwo Stolarze doświadczają podobnej transformacji. Hobbystyczni stolarze zawsze odwołują się do swojego pierwszego projektu, który wymagał dużej ilości szuflad. Jeśli ukończą projekt, zyskują nowe uznanie dla wydajności wytwarzanej przez linie montażowe. Istnieją inne korzyści, takie jak lepsze zrozumienie sposobu rozmieszczenia części szuflad na blasze, aby zmaksymalizować wykorzystanie drewna. W porównaniu do hobbystów, profesjonalni stolarze są w stanie szybciej zaprojektować, uruchomić i skonstruować przedmioty, które wykonali już wiele razy. Uzyskują również zdolność dostrzegania nieodłącznych problemów w projekcie innej osoby, która popełniła ten błąd w swojej pracy. ## Czy ponowne wykorzystanie oprogramowania uniemożliwia programistom osiągnięcie większej biegłości? Pod wieloma względami projektowanie i budowa oprogramowania jest zawsze nowe. Nie powtarzamy wcześniejszych prac, ponieważ jeśli możemy ponownie wykorzystać moduł, bibliotekę lub system, to robimy. Preferencyjnie rozszerzymy istniejący system przed przepisaniem całej rzeczy od zera. Ale powtarzalność jest tym, co pozwala nam znaleźć efektywność w projektowaniu i konstrukcji. Każdy, kto uprawiał sport lub aktywność fizyczną, powie, że powtarzanie jest kluczem do zostania dobrym praktykującym. **Moje pytanie:** Czy możliwość ponownego wykorzystania oprogramowania zapobiega niezbędnej poprawie procesu i wydajności, która wynika z powtarzania projektu?


title: Jak na bieżąco informować nowych członków zespołu o projekcie?

text: Zatrudnimy 1-2 nowych inżynierów do zespołu oprogramowania (składającego się z 3 programistów, 1 testera). Jakie są kroki, aby zintegrować ich z zespołem? Moje pomysły to : * przeczytanie dokumentacji (standardy kodowania, dokumenty w stosowanych przez nas metodykach programowania) * nakłonienie ich do przeczytania istniejącego kodu * przydzielenie im kilku prostych zadań * na koniec uczynienie ich odpowiedzialnymi za część kodu Co jeszcze moglibyśmy zrobić? * * * Projekt dotyczy sektora medycznego (system ultradźwiękowy) i trwa już 5 lat. Mamy roczne wydania i niedługo skończymy jedno wydanie, kiedy chcemy dodać 1-2 inżynierów. Projekt jest w fazie utrzymania (refaktoryzacja starszego kodu oraz dodanie nowych funkcji). Wszystko przebiega zgodnie z harmonogramem (mniej więcej).


title: Wejścia i wyjścia metody zmieszanej w interfejsie użytkownika

text: Projektuję front-end aplikacji WPF przy użyciu MVVM, gdzie w zasadzie wszystko, co robimy (na razie) to wywoływanie metody z niektórymi danymi wejściowymi i wyświetlanie wyników. Istnieją dwa rodzaje wejść, będę je nazywał wejściami powszechnymi i wejściami specyficznymi, aby uprościć rzeczy. W przypadku wspólnych wejść masz jedną instancję i wszystkie wspólne wejścia są używane (nie jest to trywialne). Następnie mamy listę konkretnych danych wejściowych, z których każdy jest sparowany ze wspólnymi danymi wejściowymi i wprowadzany do metody (istnieją powody, dla których wszystkie muszą działać w tym samym czasie). To, co je wyróżnia, to to, że te same zmienne, które wprowadzasz, mogą być również danymi wyjściowymi. Ponadto nie musisz wypełniać wszystkich danych wejściowych, są takie, w których możesz wybrać podzbiór, a wszystko, czego użytkownik nie wypełni, zostanie obliczone i przekazane jako wynik. Co prowadzi nas do problemu, interfejs użytkownika będzie miał siatkę, która na początku będzie zawierała kolumny dla każdego wejścia (pozostałe kolumny będą powiązane, ale niewidoczne) oraz wiersze określające, ile konkretnych danych wejściowych znajduje się w partii. Użytkownik wypełni dane, które chce, i naciśnie duży przycisk. Metoda zostanie wywołana i wygenerowane dane wyjściowe zostaną powiązane z kolumnami wyjściowymi, które staną się widoczne. Ponadto uzyskanie wyników dla niektórych danych wejściowych może nie być możliwe, w metodzie, jeśli nie możemy uruchomić na określonej pozycji, ale możemy uruchomić na pozycję wystarczająco blisko, dane wejściowe zostaną nadpisane. Musimy zapisać zarówno dane wejściowe, jak i wyjściowe i wyświetlić pewne zachowanie przyciągające uwagę komórek. Jedyny sposób, w jaki mogę to zrobić, to mieć trzy listy, twoje dane wejściowe, wyniki i listę modelu widoku ze wszystkimi wspólnymi właściwościami i kilkoma dla widoczności oraz jeśli dane wejściowe i wyjściowe są zgodne. Ta trzecia lista byłaby powiązana z interfejsem użytkownika, a jej właściwości zostałyby przeciągnięte na listę danych wejściowych przed uruchomieniem metody, a dane wyjściowe metody zostaną do niej przekazane. Myślę, że to rozwiąże problemy, ale mam niejasne poczucie dyskomfortu w związku z robieniem tego. Po pierwsze, mieszanie właściwości wejściowych i wyjściowych w modelu widoku wydaje się powielać model, ale z pomieszaną logiką biznesową. Czy ktoś ma propozycję lepszego projektu lub powód, dla którego ten plan jest dobry/zły? Dziękuję Ci,


title: Jaka powinna być minimalna dokumentacja projektu/zakresu przed rozpoczęciem rozwoju?

text: Jestem młodszym programistą pracującym na własną rękę w programistycznym aspekcie projektów. Dostaję plik png z 5-6 zaprojektowanymi stronami, najczęściej ze szczegółowymi szczegółami. Z tego powodu zostałem poproszony o opracowanie systemu zaplecza potrzebnego do utrzymania strony internetowej, zwykle systemu katalogowania z produktami, tagami i kategoriami oraz dopasowanie frontendu do projektu. Trafiam w garść, bo kiedy podejmuję decyzje w oparciu o założenia dotyczące przepływu strony, z powodu braku zarysowania szczegółów, poprawiam się i muszę przepisać kod tak, aby pasował do tego, co faktycznie było pożądane. Ten proces odbywa się wiele razy w całym projekcie, często na tym samym szczególe, aż w końcu jest skończony, z rozbitymi oknami. Rozumiem, że projekty mają pełzający zakres i doceniam, że muszę to zaplanować, ale czuję, że w tej sytuacji nie otrzymuję wystarczającej ilości szczegółów, aby skutecznie zaplanować projekt, co powoduje zepsuty kod i zestresowany umysł . Jaka powinna być **minimalna** dokumentacja projektu/zakresu, którą otrzymam przed rozpoczęciem programowania?


title: Jak nazwać samodzielne (webowe) aplikacje JavaScript, dla których nie napisałem żadnego kodu po stronie serwera?

text: Pisałem kilka narzędzi jako samodzielnych aplikacji internetowych, dla których nie napisałem żadnego kodu po stronie serwera i wydaje mi się, że nie jestem pewien, jak ludzie nazywają takie rzeczy. Lubię je, ponieważ mogą być rozpowszechniane jako pojedynczy plik, który może uruchomić każdy z przeglądarką internetową. Zazwyczaj wszystkie zabawne rzeczy są robione przez wywołanie internetowych API AJAX, takich jak te dostarczane przez Stack Exchange, MediaWiki, Google itp. Poniższe terminy wydają się prawdopodobne, ale mogą również obejmować inne rzeczy lub nie opowiadać całej historii: * tylko klient * czysto JavaScript * samodzielna aplikacja internetowa * skrypt internetowy * narzędzie internetowe * aplikacja przeglądarki **Czy jedno z tych terminów lub coś innego jest powszechnie używane w przypadku takich aplikacji/narzędzi?** Oto linki do niektórych moich małych narzędzi na GitHubie: travel-se-airport - tags.html, travel-se-1-or-2-answers.html, travel-se-stats.html W 10k Challenge jest o wiele więcej przykładów aplikacji...


title: Dlaczego firma Microsoft stworzyła parametry, zmienne lokalne i pola prywatne o tej samej konwencji nazewnictwa?

text: Zadałem to pytanie jakiś czas temu: Jak nazywać swoje prywatne zmienne w C#? W jednej z odpowiedzi wskazano mi stronę MSDN Microsoftu, która pokazuje, że prywatne zmienne/pola powinny być nazwane w następujący sposób: private int myInteger; Ale parametr byłby taki: void SomeMethod(int myInteger), a zmienna lokalna byłaby taka: int myInteger; Więc kiedy odwołujesz się do nich w ten sposób myInteger = 10; nie masz możliwości dowiedzenia się, o którym mówisz. Rozpoczynam teraz nowy projekt, a jeden z moich współpracowników pyta mnie, dlaczego nie robimy czegoś, aby odróżnić przynajmniej niektóre z nich. Zastanawiam się nad tym samym. Dlaczego standard Microsoftu nie zachował tych różnic?


title: Obserwując MVC, czy/powinien być utworzona instancja modelu w ViewController? Czy gdzie?

text: Piszę eksperymentalną aplikację na iPhone'a, aby poznać paradygmat MVC. Tworzę moją klasę Model w klasie ViewController. Czy to głupie? Pytam, ponieważ przechowywanie id klasy Model i używanie jej działa tam, gdzie jest zainicjowana, ale odwoływanie się do niej później (w odpowiedzi na akcję interfejsu) ulega awarii. Pozornie zmienia się adres wskaźnika mojej instancji klasy Model, ale jak to możliwe? Kod, o którym mowa: @interface Soundcheck_Tone_GeneratorViewController : UIViewController { IBOutlet UIPickerView * frequencyWheel; @publiczna Sinewave_Generation * sineGenerator; } @property(nonatomic,retain) Sinewave_Generation * sineGenerator; @end @implementation Soundcheck_Tone_GeneratorViewController @synthesize sineGenerator; - (nieważne)viewDidLoad { [super viewDidLoad]; [samoustawia SineGenerator:[[przydział Sinewave_Generation] initWithFrequency:20.0]]; // użycie referencji -> fine } // obsługa pickerView jest tutaj pominięta... - (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { [[self sineGenerator] setFrequency:20.0 ]; // użycie referencji -> crash } @end // klasa Sinewave_Generation... tylko po to, żeby być dokładnym. Jak dotąd działa dobrze. @interface Sinewave_Generation : NSObject { AudioComponentInstance toneUnit; @publiczna podwójna częstotliwość,theta; } @property podwójna częstotliwość; - (Sinewave_Generation *) initWithFrequency: (int) f; @end @implementation Sinewave_Generation @częstotliwość syntezy; - (Sinewave_Generation *) initWithFrequency: (int) f { self = [super init]; if ( self ) { [self setfrequency: f]; } zwróć siebie; }          @koniec


title: Czy działy marketingu e-commerce powinny mieć własnych programistów internetowych?

text: Widziałem przykłady zespołów projektowych zajmujących się marketingiem, których rozwój odbywa się w IT. W jaki sposób inne działy IT i działy eko marketingu dzielą obciążenie pracą związane z tworzeniem stron internetowych w innych firmach, powołując się na zalety i wady różnych możliwych struktur? Osobiście posiadanie dowolnego rodzaju zasobów programistycznych poza działem IT brzmi jak zły pomysł.


title: Dlaczego miałby przeciążać operatory && i &?

text: To samo pytanie dotyczy | i ||. Po co przeciążać lub „użyć” operatora & i &&? Jedyne zastosowanie, o którym myślałem, to * bitowe Ands dla typów bazowych typu int (ale nie zmiennoprzecinkowe/dziesiętne) przy użyciu & * logicznego zwarcia dla wartości logicznych/funkcji, które zwracają wartość bool. Zwykle używa się operatora &&. Nie wyobrażam sobie klas, które używają tych operatorów. Absolutnie żaden. Wiem, że klasa może obsługiwać + (a nie „-”), które łączą ze sobą dwa ciągi. Widziałem obiekt, taki jak przeciążenie datetime '-', więc dwie daty można odjąć, aby uzyskać przedział czasu (oczywiście nie można dodać dwóch dat), ale nigdy nie widziałem &, &&, | oraz || używany. Czy ktoś wie o zastosowaniu? W jakimkolwiek języku?


title: Co robią administratorzy baz danych?

text: Tak, wiem, że administrują bazami danych. Zadałem to pytanie, ponieważ chciałbym uzyskać dokładniejszy wgląd w to, jakie codzienne obowiązki może wykonywać administrator i jakie problemy biznesowe rozwiązują w świecie rzeczywistym. Na przykład: * Zoptymalizowałem zapytanie 'products' tak, aby działało o 25% szybciej, co przyspieszyło całą aplikację. Czy to typowy obowiązek? A może bycie DBA to coś więcej niż tylko przyspieszanie pracy? W jakich sytuacjach praca DBA wiąże się z planowaniem i kreatywnością?


title: Unikaj początkowego wywołania AJAX w celu załadowania danych

text: Oto typowa sekwencja zdarzeń, gdy ktoś przechodzi do strony w mojej aplikacji: * Użytkownik przechodzi do mojej aplikacji, w tym parametry adresu URL i ciągi zapytań. * Serwer odbiera żądanie i generuje kod HTML * Na kliencie AngularJS pobiera dowolne parametry i wykonuje wywołanie AJAX * Dane wynikowe są następnie wiązane Osobiście uważam, że to trochę marnotrawne, że wymaga to dwóch trafień na serwer. Prowadzi to do opóźnienia między zwróceniem kodu HTML a wypełnieniem danych wejściowych. Czy czegoś mi brakuje? Czy istnieje sposób na uniknięcie chodzenia tam iz powrotem za pierwszym razem?


title: Algorytm denormalizacji bazy danych

text: Stworzyłem generator skryptów QlikView (QVS), który może być używany do generowania dużych plików skryptów do importu danych z SQL Server do QlikView. QlikView nie lubi „w pełni” znormalizowanych struktur baz danych (pętli między kilkoma tabelami): na przykład trzy tabele „A”, „B”, „C” w SQL Server mogą mieć trzy łącza PK/FK; w QlikView wymaga tylko dwóch. Więc teraz muszę „zdenormalizować” lub usunąć pętle między tabelami… Obecnie tworzę „tablicę wykluczeń”, którą przechodzę za pomocą poczwórnej pętli for, aby wyizolować i usunąć ograniczenia w strukturze DB przed wygenerowaniem pliku skryptu. Wydaje się, że to działa, ale zajmuje DUŻO zbyt dużo czasu, ponieważ liczba tabel może być duża. Czy jest inny sposób, w jaki mogę osiągnąć to, czego chcę, bardziej ekonomicznie?


title: Rozszerzenie przestrzeni nazw dla aplikacji Windows podobnej do Dropbox

text: Jestem zainteresowany (w celach edukacyjnych) tworzeniem rozszerzenia przestrzeni nazw dla systemu Windows, które jest podobne do Dropbox lub SkyDrive. To, co chciałbym zrobić, to zintegrować się bezpośrednio z Eksploratorem Windows, tak jak te usługi, które pojawiają się jako „podłączony dysk”: ![Skydrive](http://i.stack.imgur.com/ujHrd.png) Po kliknięciu połączony folder, będę wchodzić w interakcję z moją własną witryną, aby określić, jaką zawartość wyświetlić. Znam WebDAV i faktycznie stworzyłem coś podobnego za pomocą WebDAV, ale teraz chcę odejść od „mapowania dysków”. Chcę zainstalować aplikację, która po wstępnej konfiguracji, takiej jak SkyDrive lub Dropbox, pojawi się jako podłączony dysk i zostanie uwierzytelniona jako użytkownik. Nigdy nie stworzyłem rozszerzenia przestrzeni nazw, ale moje badania wskazują, że jest to droga do zrobienia. Czy mam rację? Czy za pomocą rozszerzenia przestrzeni nazw można utworzyć nowy obiekt „Folder”, do którego po przejściu mogę wykonać wywołania do mojego interfejsu API, który określi podfoldery do wyświetlenia?


title: Zwinny rozwój i interakcja z programistami

text: Czytałem na kilku blogach, że w ramach rozwoju zwinnego właściciel produktu ściśle współpracuje z programistami, aby określić ich wymagania i wymyślić rozwiązanie. Jednak w przypadku dużego projektu (pod względem liczby zaangażowanych aplikacji) obejmującego wiele systemów, czy jest to możliwe? Czy projekt nie powinien mieć analityka biznesowego / projektanta rozwiązań, aby właściwie uchwycić wymagania i zaproponować rozwiązanie, które określa, w jaki sposób można spełnić wymaganie i które systemy muszą wykonywać jaką czynność?