title: Pytanie o nowe modne hasła dotyczące starych koncepcji

text: Jaka jest fascynacja braniem starych koncepcji, wymyślaniem dla nich modnego hasła i przedstawianiem ich jako nowej technologii wraz z 800-stronicowym tomem z nerdem na okładce? Dawno, dawno temu, powiedzmy w latach 80-tych, pisałem oprogramowanie. Został zaprojektowany dość dobrze, działał i można go było konserwować. Oddzielił różne funkcje wysokiego poziomu na różne biblioteki kodu i tak dalej. Gdzieś w ciągu ostatnich 10 lat straciłem rachubę czasu, kiedy "Wzory" stały się popularne. O wzorcach projektowych i tych wzorcach i tamtych wzorcach napisano całe encyklopedie. Robimy to od dziesięcioleci (i jestem pewien, że na długo zanim zacząłem programować), ale nagle jest to nowe i nowatorskie. Czy to tylko sztuczka do sprzedawania książek i zajęć edukacyjnych? Po co dodawać tyle hałasu do i tak już nadmiernie skomplikowanego świata programowania, skoro robienie rzeczy dobrze jest naprawdę ważne.


title: synchronizacja metodologii usług internetowych lub dokumentów

text: Tworzę usługę internetową (PHP+JSON) do synchronizacji z moją aplikacją na iPhone'a. Główne cele to: 1. Kopia zapasowa 2. Zapewnienie widoku internetowego do drukowania/sortowania, manipulowania. 3. zezwól na synchronizację grupy w górę iw dół. Zdaję sobie sprawę z problemów logicznych z wszystkimi tymi pozycjami, tj. jeśli jedna osoba coś usunie, czy upierasz się przy tej zmianie innym użytkownikom, kolizjom itp. Szukam byle jakiej książki lub pracy naukowej, a nawet słów mądrości, aby rozwiązać typowe problemy. * kiedy wykrywać zmiany danych za pomocą skrótów, vs zmodyfikowane daty lub kombinację. * jak adresować konsolidację sekwencyjnych identyfikatorów pochodzących z różnych węzłów klienckich (można to ominąć w moim kontekście, ale byłoby to interesujące.) * radzenie sobie z kolizjami (czy jest na to uniwersalnie bezpieczny sposób?). * ogólne najlepsze praktyki. * jak ustrukturyzować rzeczywistą transakcję danych (poproś o całą listę, a następnie wykryj zmiany...)


title: Łatwy sposób na serwowanie rtęci?

text: Obecnie używam TortoiseHg w systemie Windows. Chcę, aby mój serwer był dostępny automatycznie po włączeniu. Ale muszę to zrobić: 1. Kiedy konfiguruję nowy projekt, muszę wprowadzać pary localdir=URL w [web] za każdym razem, gdy konfiguruję projekt. 2. Muszę za każdym razem uruchomić serwer hg lub nakładkę Tortoise, aby je „podnieść”. Widziałem wiele samouczków dotyczących konfigurowania Apache jako serwera. Chcę czegoś, co można szybciej wdrożyć. Widziałem też kilka frontendów internetowych o wątpliwej stabilności. Czy istnieje **dojrzałe i łatwe w użyciu oprogramowanie** z funkcją push i pull, które obsługuje wszystkie repozytoria w danym folderze? Coś, co uruchamia się/zatrzymuje bez interwencji użytkownika i można je **łatwo skonfigurować**? A może powinienem trzymać się konfiguracji Apache, aby to zrobić?


title: Co oznacza „przeliczalny”?

text: Moje wykształcenie w matematyce jest bardzo słabe (tj. ostatnią odpowiednią lekcją matematyki zajętą była trygonometria w szkole średniej dwa lata temu – inna historia na inny czas). Czytam 'Javascript: The Definitive Guide' i jest to termin, który jest często używany i po prostu z nim pobiegłem. Ale dotarłem do rozdziału (Rozdział 6 - Przedmioty), w którym mój brak zrozumienia tego terminu i jego zastosowania w programowaniu/OOP zaczyna szkodzić procesowi uczenia się. Słowniki internetowe nie pomagają, więc czy ktoś ma bardziej zrozumiałą definicję i/lub przykład do pokazania?


title: Najlepszy sposób na niezawodne rozpoznawanie licencji open source?

text: Obecnie w wielu projektach większość nowego kodu składa się z kodu kleju, który pomaga łączyć dziesiątki różnych bibliotek, wtyczek i pomocników, które są licencjonowane na podstawie różnych licencji open source. W wielu przypadkach licencje są dość oczywiste, ponieważ zawierają nazwę licencji w pliku licencyjnym lub komentarzu. W innych jest to nieco trudniejsze i wymaga zapamiętania pewnych sformułowań, aby odróżnić bardziej popularne licencje. Zastanawiam się: czy istnieje łatwy sposób na rozpoznanie szczególnie bardzo podobnych licencji (powiedzmy, MIT/BSD-2/BSD-3) bez konieczności zapamiętywania pełnych tekstów licencji lub sprawdzania kopii OSI jako odniesienia?


title: Najlepsze praktyki dotyczące zarządzania wdrażaniem kodu z serwerów deweloperskich na serwery produkcyjne?

text: Mam nadzieję, że uda mi się znaleźć łatwe narzędzie lub metodę, które pozwolą zarządzać naszym wdrażaniem kodu. Oto funkcje, które mam nadzieję, że to rozwiązanie ma: 1. Plik internetowy lub wsadowy, z listą plików, będzie komunikował się z naszym serwerem produkcyjnym, aby wykonać kopię zapasową tych plików w różnych folderach, spakować je i umieścić w folder z kodem zapasowym. 2. Następnie rejestruje nazwę, datę/godzinę i cel wdrożenia. 3. Następnie przesyła pliki we właściwe miejsce na serwerze produkcyjnym. Nie chcę zbyt skomplikowanego interfejsu do wdrażania, ponieważ wtedy mogą go nigdy nie używać. A może to, o co proszę, jest zbyt nierealne? Po prostu wiem, że moja samodyscyplina nie jest idealna i wolę mieć narzędzie, na którym mogę polegać, aby zrobić to, co należy zrobić, niż własną pamięć o tym, jakie dokładnie kroki muszę podejmować za każdym razem. Jak się macie, upewnić się, że wszystko zostało poprawnie wdrożone i mieć łatwy powrót w przypadku jakichkolwiek błędów?


title: Interfejsy API do obsługi wersji

text: Załóżmy, że masz duży projekt obsługiwany przez bazę API. Projekt dostarcza również publiczne API, z którego mogą korzystać użytkownicy końcowi. Czasami musisz wprowadzić zmiany w bazie API, która obsługuje Twój projekt. Na przykład musisz dodać funkcję, która wymaga zmiany interfejsu API, nowej metody lub wymaga zmiany jednego z obiektów lub formatu jednego z tych obiektów, przekazanych do lub z interfejsu API. Zakładając, że używasz również tych obiektów w publicznym interfejsie API, obiekty publiczne również zmienią się za każdym razem, gdy to zrobisz, co jest niepożądane, ponieważ Twoi klienci mogą polegać na tym, że obiekty interfejsu API pozostają identyczne, aby ich kod analizy działał. (kaszel klientów WSDL C++...) Więc jednym z potencjalnych rozwiązań jest wersja API. Ale kiedy mówimy "wersja" API, brzmi to tak, że musi to również oznaczać wersję obiektów API, a także zapewnienie zduplikowanych wywołań metod dla każdej zmienionej sygnatury metody. Więc miałbym wtedy zwykły stary obiekt clr dla każdej wersji mojego api, co znowu wydaje się niepożądane. A nawet jeśli to zrobię, na pewno nie będę budował każdego obiektu od zera, ponieważ skończyłoby się to ogromną ilością zduplikowanego kodu. Interfejs API prawdopodobnie rozszerzy raczej prywatne obiekty, których używamy dla naszego podstawowego interfejsu API, ale wtedy napotykamy ten sam problem, ponieważ dodane właściwości byłyby również dostępne w publicznym interfejsie API, gdy nie powinny być. Więc jaki jest zdrowy rozsądek, który zwykle stosuje się w tej sytuacji? Wiem, że wiele usług publicznych, takich jak Git dla Windows, utrzymuje wersjonowany interfejs API, ale mam problem z wyobrażeniem sobie architektury, która obsługuje to bez dużej ilości zduplikowanego kodu obejmującego różne wersjonowane metody i obiekty wejścia/wyjścia. Zdaję sobie sprawę, że procesy, takie jak semantyczne wersjonowanie, próbują wprowadzić pewną rozsądek na _kiedy_ przerwy publicznego API powinny wystąpić. Problem polega na tym, że wydaje się, że wiele lub większość zmian wymaga przerwania publicznego interfejsu API, jeśli obiekty nie są bardziej odseparowane, ale nie widzę dobrego sposobu na zrobienie tego bez duplikowania kodu.


title: Jak sprawić, by aplikacja była bardziej intuicyjna?

text: W branży istnieje kilka standardowych list kontrolnych dotyczących tego, jak zwiększyć wydajność aplikacji internetowych: 1. Skalowalna 2. Łatwa do zrozumienia/utrzymania 3. Lepsza wydajność 4. Solidna itp. itd. Czy istnieją standardowe listy kontrolne dotyczące tworzenia aplikacji bardziej „intuicyjny”? To oczywiście będzie się różnić w zależności od aplikacji ... ale jestem pewien, że będzie kilka ogólnych, które mają zastosowanie do wszystkich.


title: Scrum: odprężenie „zrobione” czy używanie kolców?

text: Zastanów się, czego potrzeba, aby całkowicie zakończyć historię w naszej organizacji. * Wymagania demo zostały spełnione * Sfinalizowany projekt interfejsu użytkownika (układ, style, czcionki, kontrolki, kolory itp.) * Sfinalizowany tekst użytkownika i zabezpieczony przed błędami * Cały tekst przetłumaczony na język hiszpański, niemiecki, włoski i francuski. * Zaktualizowano instrukcję obsługi * Wszystkie błędy uznane przez PO za wymagające naprawy do wydania zostały naprawione * Zaktualizowano dokumenty dla FDA (SRS,STD,STP,STM,UFMEA, DFMEA, SDD, instalacja) * Wymagania zostały napisane i zatwierdzone przez PO * Specyfikacja interfejsu użytkownika został napisany i zatwierdzony przez operatora * Wszystkie testy (ostateczna akceptacja i integracja) zostały napisane/zaktualizowane i wykonane - zsynchronizowane i uzgodnione z kierownikiem testów * Wszystkie testy FAT zostały zatwierdzone przez QPE * Testy regresji zostały wykonane * Kod został sprawdzony i udokumentowany * Testy jednostkowe zostały napisany i wykonany - zsynchronizowany i uzgodniony z menedżerem oprogramowania. * Refaktoryzacja, w razie potrzeby, została wykonana - zsynchronizowana i uzgodniona z architektem oprogramowania. * Projekt został udokumentowany * Instalator został zaktualizowany (w razie potrzeby) Przy tak dużej ilości pracy potrzebnej do pełnego ukończenia historii, zespół przestaje być zwinny i trudniej jest szybko wypróbować nowe funkcje. O ile widzę, istnieją 3 sposoby rozwiązania tego problemu: 1. Stwórz więcej historii „Spike”, które nie spełniają definicji „Gotowe”, ale służą jako szybkie prototypy do zbierania opinii od użytkowników. 2. Otrzymuj informacje zwrotne od użytkowników przez cały czas trwania Sprintu, a nie na jego końcu. Tak więc w połowie historii możesz już ocenić, co użytkownicy myślą o historii i szybko dostosować się przed wykonaniem wszystkich ciężkich rzeczy (tłumaczeń, instrukcji obsługi itp.). 3. Złagodzenie definicji „Gotowe”, aby wymagać tylko podstawowych testów i naprawiania błędów. W ten sposób zespół nie będzie miał potencjalnie nadającego się do wysyłki produktu pod koniec sprintu, ale bardzo szybko będzie mógł wypróbować nowe funkcje i innowacje techniczne bez konieczności dokumentowania wszystkiego, pisania instrukcji obsługi, dopracowywania projektów itp. ... Którą opcję byś wybrał i dlaczego? Dziękuję Ci.


title: Dobra praktyka – zastosuj paradygmat do języka, który do niego nie pasuje

text: Na przykład, co się stanie, jeśli programista spróbuje kodować w paradygmacie czysto funkcjonalnym w języku paradygmatu OO (Java)? Czy to zadziała? A może OO natura Javy na to nie pozwoli? Ponadto, czy stosowanie niewłaściwego paradygmatu do języka, który do niego nie pasuje, jest złą praktyką, czy nie? Czy to tak, jakbym próbował jeździć odrzutowcem po drodze, zamiast nim latać?


title: Bazy danych i testy jednostkowe/integracyjne

text: Rozmawiałem z kimś na temat testów jednostkowych/integracyjnych z aplikacjami internetowymi i nie zgadzam się co do jednego podstawowego pomysłu. Problem polega na tym, że osoba, z którą rozmawiam, uważa, że baza danych, na której działają testy jednostkowe, powinna zawierać wstępnie wypełnione dane i myślę, że powinna być całkowicie pusta przed i po wykonaniu testów. Moje obawy dotyczące wstępnie wypełnionych danych w bazie danych polegają na tym, że nie ma sposobu, aby upewnić się, że dane są utrzymywane w dobrym stanie. Same testy będą tworzyć, usuwać i modyfikować dane w bazie danych, więc naprawdę nie widzę, jak dobrze jest mieć dane w bazie danych przed rozpoczęciem testów. Wydaje się, że najlepszym sposobem przetestowania funkcjonalności bazy danych byłoby posiadanie następujących ustawień: 1. W fazie "konfiguracji" przed faktycznym uruchomieniem testu, najpierw obcinasz wszystkie tabele w bazie danych 2. Następnie wstawiasz wszystkie dane potrzebne do przypadki testowe, które zamierzasz uruchomić 3. Następnie uruchamiasz i sprawdzasz przypadki testowe 4. Następnie w fazie „rozkładania” ponownie obcinasz wszystkie tabele w bazie danych Nie widzę innego lepszego sposobu na zapewnienie, że dane, na których testujesz, są dobrym testem, który można przetestować. Czy coś mi umyka? Czy nie jest to najlepszy sposób testowania funkcjonalności związanych z bazą danych? Czy istnieją jakieś korzyści z posiadania wstępnie wypełnionej bazy danych, która zawsze istnieje w bazie danych (nawet przed rozpoczęciem testów lub po ich zakończeniu)? Jakakolwiek pomoc w pomysłach na wyjaśnienie mojego procesu w inny sposób, aby lepiej przekazać mój punkt widzenia, byłaby również świetna (to znaczy, jeśli mój punkt widzenia ma zalety).


title: Zaloguj się za pomocą Twittera lub Facebooka - Jak połączyć konta

text: Zajmuję się tworzeniem witryny i staram się wymyślić metodę upewnienia się, że wszystkie konta sieci społecznościowych danego użytkownika są ze sobą połączone. Od początku miałem jeden szkopuł i może ktoś tutaj ma pomysł, co robić. To jest problem. Powiedzmy, że ktoś wchodzi na moją stronę i klika zaloguj się przez Twittera. Moja witryna * tworzy konto (dodaje użytkownika do bazy danych użytkowników) * dodaje dane uwierzytelniające użytkownika Twittera do bazy danych dla tego użytkownika * loguje użytkownika Teraz załóżmy, że ta osoba się wylogowuje i następnym razem, gdy wejdzie na moją witrynę, zaloguje się za pomocą Facebooka. Moja witryna * sprawdza bazę danych członków pod kątem użytkownika z tym samym adresem e-mail, który został wysłany z Facebooka podczas uwierzytelniania * Jeśli nie ma dopasowania, tworzę użytkownika * dodaj dane logowania do Facebooka dla tego użytkownika Tutaj pojawia się mój problem. Twitter nie wyślij wiadomość e-mail użytkownika w sprawie uwierzytelnienia. Tak więc moja baza danych i skrypt, gdy ktoś loguje się przez Facebooka po wcześniejszym zalogowaniu się przez Twittera, nie rozpoznaje kont, powinny być połączone i tworzy zupełnie nowego użytkownika. Czy jedyny możliwy sposób na śledzenie za pomocą plików cookie? Czy może po prostu brakuje mi czegoś w logice tego? Wszelkie pomysły byłyby świetne. Przy okazji to jest dla strony internetowej, używając php + mysql * * * Aktualizacja pytania * * * Hej Demian, spojrzałem na edycję loginów i zauważyłem, że nie mają opcji twitter. Mój problem nie polega na tym, że użytkownik jest już zalogowany, wszystko działa świetnie i łączy konta. To bardziej tak. Powiedzmy, że użytkownik loguje się do mojej witryny po raz pierwszy za pomocą Twittera. Daję im unikalny identyfikator użytkownika w mojej tabeli bazy danych „członkowie”, a następnie dodaję ich poświadczenia oauth dla Twittera w mojej tabeli oauth, łącząc je z ich identyfikatorem członka. \Teraz załóżmy, że mija miesiąc i użytkownik wraca. Tym razem jednak logują się przez Facebooka. Nie ma sposobu, abym mógł powiedzieć, który użytkownik znajduje się w mojej bazie danych na podstawie poprzedniego logowania na Twitterze, ponieważ nie mam tego unikalnego identyfikatora członka, z którym mógłbym go połączyć. Dlatego uważam, że przechowywanie unikalnego identyfikatora członka w pliku cookie to dobry pomysł, ale co, jeśli plik cookie zostanie usunięty?


title: Usługi sieciowe jako zaplecze

text: Zastanawiam się nad kierunkiem przyjęcia aplikacji. Aplikacja napisana jest w PHP, który implementuje framework MVC. Niektórzy z moich klientów będą wymagać usług internetowych. Myślałem nawet o zbudowaniu podstawowego interfejsu WWW PHP na bazie tych usług internetowych (SOAP) i zatrzymaniu aplikacji PHP przed dostępem do bazy danych. Chcę to zrobić, abym musiał utrzymywać tylko jeden zestaw kodu dla głównej aplikacji PHP, aby uzyskać dostęp do danych, a także wszelkich innych aplikacji opracowanych na tej usłudze sieciowej. Czy to powszechna konfiguracja? Czy bardzo spowolni to aplikację? Przyjrzałem się użyciu frameworka Django do skonfigurowania usługi sieciowej SOAP, ale potem zdałem sobie sprawę, że będzie miał problem z obsługą wielu identycznych baz danych, w zależności od tego, który klient z niej korzysta. Spojrzałem na Symfony, ale obawiałem się, że PHP jako backend może być postrzegany jako niepewny lub nieprofesjonalny przez niektórych większych przyszłych klientów i nie nadający się do użytku korporacyjnego. Myślę teraz o osi 2. Java może być szybsza jako backend i będzie dostępna na rynku dla potencjalnych klientów. Jakie inne ramy usług sieci Web należy wziąć pod uwagę? Czy ten interfejs Web Services Backend / PHP/HTML jest użytecznym rozwiązaniem?


title: Inne rzeczy, których należy się nauczyć, aby zostać administratorem/programistą bazy danych?

text: Oczywiście będę musiał dokonać pewnego wyboru, z jaką bazą danych wybrać (MS-SQL/MYSQL/etc), ale to pytanie nie dotyczy tego. Pytanie dotyczy głównie tego, jakie inne języki/narzędzia byłyby pomocne dla kogoś, kto chce wejść w programowanie/administrację baz danych. Zakładam, że PHP byłoby pomocne z MySQL wraz z XML Prawdopodobnie (lub nie?), Jednak nie jestem pewien, co jeszcze. Jestem dość biegły w C/C++, ale gdybym chciał zagłębić się w bazy danych NoSQL, prawdopodobnie musiałbym odświeżyć swoje umiejętności w Javie. Także pytanie poboczne… czy 25 lat jest za młody, żeby się w to wdawać? Wziąłem kilka zajęć z baz danych w college'u (które niedawno ukończyłem), ale nie chcę, żeby było za późno na naukę czegoś nowego.


title: Jeśli cel pojedynczego skomplikowanego LOC jest jasny, czy zadałbyś sobie trud podzielenia go na wiele linii, aby również jego metoda była jasna?

text: Biorąc pod uwagę pewien (stosunkowo) skomplikowany wiersz kodu, często byłbym skłonny podzielić go na wiele wierszy, aby jego funkcja / cel była jasna dla innych. Jednak **jeśli z kontekstu jasno wynika, co robi linia** , czy nadal robiłbyś to samo tylko po to, aby wyraźniej **jak to się robi**? A może przyjąłbyś postawę, że przyszli programiści prawdopodobnie nie wiedzą/obchodzą jak to działa, tylko że to działa? W pewnym kontekście, konkretny wiersz, który powoduje to pytanie, to kod Pythona, który pobiera ciąg znaków taki jak „1.title” i używa go do modyfikacji `self.data[1].title`: #IRL, te 2 wartości są już jakoś ustawione id = "1.title" val = "foo" setattr(self.data[int(id[:id.index(".")])], id[id.index(".")+1:], val) Ta ostatnia linia nie jest najprzyjemniejszą rzeczą na świecie do przeczytania, więc myślałem o podzieleniu jej na: index = int(id[:id.index(".")]) attrib = id[id.index( ".")+1:] setattr(self.data[index], attrib, val) Jeśli chcesz zaszaleć, możesz nawet najpierw zrobić `dotLocation = id.index(".")` i użyć tego w ustawienie indeksu i atrybutu. Jest to prawdopodobnie nieco jaśniejsze dla kogoś, kto czyta go po raz pierwszy, ale wolę, aby był ładnie i zwięzły w jednym wierszu i jest wysoce nieprawdopodobne, aby ktokolwiek musiał modyfikować tę jednowierszową funkcję użytkową. Czy naprawdę jest sens dzielić to w ten sposób? (Uwaga: jestem w pełni świadomy, że to nie jest dokładnie kwestia życia lub śmierci. Nie zamierzam z tego powodu spać, zastanawiam się tylko, co inni zrobiliby w takiej sytuacji.) (Ostatnia rzecz: ktoś może chcieć dodać do tego lepsze tagi, to moje pierwsze pytanie programistów :) )


title: Ograniczenia funkcji kopiowania/wycinania wklejania w System.IO

text: Zajmuję się tworzeniem aplikacji klasycznej (Menedżer plików) w C#. Do operacji kopiowania/wytnij i wklej będę używał domyślnych metod w .NET, takich jak System.IO.File.Copy() System.IO.File.Move() Czy są jakieś ograniczenia tych metod, o których powinienem wiedzieć? a jeśli są, jakie są alternatywy tych metod? (może być Win32 API)


title: – Działało wczoraj, przysięgam! Co możesz zrobić?

text: Kiedy przyjeżdżasz rano, okazuje się, że Twoje oprogramowanie już nie działa, mimo że zadziałało, gdy wyszedłeś wczoraj wieczorem. Co robisz? Co sprawdzasz najpierw? Co robisz, aby przestać się denerwować i zacząć pracować nad swoim problemem? Czy obwiniasz kolegów i idziesz bezpośrednio do nich? Co można zrobić, aby uniknąć takiej sytuacji?


title: Czy ktoś z was użył MEF do skonfigurowania Castle Windsor?

text: Myślę o użyciu MEF do zarządzania płynnym interfejsem na Castle Windsor. Dzięki temu mogę wymieniać różne sekcje systemu do testów i produkcji. Czy ktoś to zrobił, jeśli tak, jak dobrze to działa dla Ciebie?


title: Filmy o testach jednostkowych

text: Szukałem dobrych prezentacji (preferowane slajdy + audio lub wideo) w testach jednostkowych, ale wydaje mi się, że znajduję tylko książki i posty na blogu. Prezentacja nie powinna trwać dłużej niż 50 minut, ponieważ zostanie pokazana podczas lunchu w brązowej torebce. Pojęcia ogólne lub jak to zrobić na platformie .NET jest tym, czego szukam. Czy możesz polecić prezentację, która pasuje do tego opisu?


title: Skład zespołu programistów

text: Jestem w piętnastoosobowym zespole i po kilku zmianach w zarządzie zespół jest w fazie przejściowej. Obecna linia zarządzania naciska na zwinne podejście do tworzenia oprogramowania, ale bez zapewniania przewodnictwa. Zespół boryka się z dużym problemem komunikacyjnym zarówno wewnątrz, jak i z innymi działami w firmie, którymi są nasi klienci. Kierownictwo utworzyło ostatnio podzespół złożony ze specjalistów technicznych. Mają dużą wiedzę na temat bazy kodu, ale są w firmie od dziesięciu lat i nie są tak otwarci na zmiany. Celem jest zapewnienie technicznego kierunku. Dołączyłem do zespołu w ciągu ostatnich sześciu miesięcy. Mam dobre sześcioletnie doświadczenie w tworzeniu różnych programów, ale nie mam takiej samej wiedzy o kodzie jak inni. Posiadam dobre umiejętności komunikacyjne i organizacyjne oraz łatwo nawiązuję kontakt z klientami. Firma koncentruje się na dostarczaniu innowacyjnych nowych produktów, ale na podstawie moich obserwacji załamujemy się w organizacji projektu (wydaje się, że tracimy koncentrację na kliencie, zagrzebujemy się w kodzie i błędnie interpretujemy wymagania). Myślę, że mogę ukierunkować realizację projektów z dobrym skupieniem się na kliencie, jednak nie posiadam takiej samej wiedzy technicznej jak zespół specjalistów technicznych. Myślę też, że jestem jedyną osobą, która ma wcześniejsze doświadczenie w zwinności w zespole. Mam dwa pytania: 1. Czy w zespole deweloperskim jest miejsce dla specjalistów technicznych i tych, którzy są dobrzy w dostarczaniu i uszczęśliwianiu klienta, czyli tych dwóch pracujących w tandemie? 2. Czy musisz być specjalistą technicznym, aby kierować zespołem projektowym?


title: Jak zastosować dobre zasady projektowania zorientowanego obiektowo w systemach wbudowanych?

text: Jestem inżynierem oprogramowania sprzętowego przeniesionym z tła elektrycznego do systemów wbudowanych. Do tej pory programowałem w C i nigdy nie zawracałem sobie głowy stosowaniem zasad OO w swoim projekcie. Ostatnio zmuszony byłem zaimplementować design w C++. Zacząłem lubić zasady OO, takie jak SOLID, wzorce projektowe itp. Chciałem dowiedzieć się więcej o stosowaniu projektowania OO w moim oprogramowaniu. Wszystkie zasoby OO, które znalazłem, dotyczyły programowania aplikacji, a nie oprogramowania układowego. Uważam, że ta książka jest odpowiednia (zamówiłam ją). Byłem ciekawy, czy istnieją inne zasoby, które mogą mi pomóc w nauce zasad obiektowych z naciskiem na systemy wbudowane. Wciąż jestem nowy w świecie OO, więc proszę zasugeruj mi, czy powinienem najpierw nauczyć się zasad OO, a następnie nauczyć się ich stosowania w systemach wbudowanych, czy też zacząć uczyć się tylko rzeczy związanych z systemami wbudowanymi.


title: Czy istnieje kanoniczna książka do nauki C# od podstaw?

text: Szukałem dobrej książki C# dla początkujących, aby nauczyć się podstaw języka i podstaw OOP, jednak każda książka, którą przejrzałem, wydaje się zaczynać szybko i nie dotyka podstaw w profesjonalny sposób, a może autorzy są dobrzy w programowaniu ale nie tak dobry w nauczaniu tego przedmiotu innych. Czy istnieje książka, która jest de facto standardem opisującym najlepsze praktyki, metodologie projektowania i inne przydatne informacje na temat C#? Co w tej książce czyni ją wyjątkową?


title: Biblioteki grafów bezpieczne dla wątków

text: Szukam dobrej biblioteki Java Graph, która jest bezpieczna dla wątków dla równoczesnego dostępu. JGraphT, JUNG, JTS są bardzo dobre, ale znowu dla równoczesnego dostępu będę musiał zsynchronizować je zewnętrznie, co staje się uciążliwe. Jest to uciążliwe, ponieważ powiedzmy, że jeśli wątek A musi uzyskać dostęp do 50 wierzchołków, wątek B ma kolejne 50, a przecięcie wierzchołków wynosi 20 wierzchołków. Teraz podczas pisania kodu muszę znać te 20 wcześniej, aby móc go odpowiednio zsynchronizować. Pl sugeruję, czy istnieje jakiś framework dla wykresów, który ma wbudowaną obsługę współbieżności


title: Dlaczego Swing po wyjęciu z pudełka nie wygląda natywnie?

text: GUI Java Swing domyślnie nie wygląda na natywny (z wyjątkiem Mac OS X z jakiegoś powodu). Swing wykorzystuje swój własny wygląd i styl. Możesz sprawić, by Swing używał wyglądu i stylu systemu, umieszczając: javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName()); na początku twojej metody `main`, ale: Dlaczego nie jest to zrobione domyślnie?


title: Najczęstsze pułapki skalowalności strony internetowej

text: Projektujemy witrynę internetową/aplikację internetową, w której mamy nadzieję osiągnąć dużą liczbę użytkowników i ogólnie dużo użytkowania. Mówiąc dokładniej, na początek zamierzamy używać PHP jako języka programowania/skryptowania oraz MySQL dla potrzeb relacyjnych baz danych. Nie ustaliliśmy jeszcze, czy używać bazy danych NoSQL, czy nie. W związku z tym chcemy projektować z myślą o skalowalności. Jakie są najczęstsze pułapki skalowalności witryn internetowych? Jakie są kluczowe obszary, które musimy wziąć pod uwagę, aby system był łatwo skalowalny?


title: Jakie są dobre strategie w C radzenia sobie z tego typu błędami wskaźnika?

text: W C często natykam się na błędy z kodem takim jak ten prio_queue->head[index] = newEntry; Daje " "Nie można przypisać wpisu** do wpisu* " Jak ogólnie zapobiegać/debugować tego typu błędy?


title: Narzędzie do identyfikacji potencjalnych recenzentów dla proponowanej zmiany

text: Czy istnieje narzędzie, które przyjmuje jako dane wejściowe proponowaną poprawkę i repozytorium git, i identyfikuje, że programiści są najlepszymi kandydatami do sprawdzenia poprawki? Wykorzystałby historię git do zidentyfikowania autorów, którzy mają największe doświadczenie z plikami / sekcjami kodu, które są zmieniane. _Edycja:_ Przypadek użycia to duży projekt open source (OpenStack Compute), w którym pojawiają się propozycje scalenia i widzę propozycję scalenia fragmentu kodu, którego nie znam, i chcę dodać czyjeś imię do listę sugerowanych recenzentów, aby dana osoba otrzymała powiadomienie o zapoznaniu się z propozycją scalenia.


title: Znalezienie i/lub zostanie właścicielem produktu typu open source

text: Czy są jakieś projekty open source, które mają role, które byłyby równoważne roli właściciela produktu Scrum? Jeśli tak, w jaki sposób szukałeś tych przykładów i jak Twoim zdaniem powstały role właściciela produktu? (Aby było jasne, nie jest to wymóg, aby projekt był oparty na Scrumie, wystarczy, że jest to open source, a określone role są równoważne roli właściciela produktu Scrum. Mówię też o roli wolontariusza, a nie płatnej pozycji na non-profit.)


Jaki jest właściwy sposób sugerowania funkcji, które mają zostać dodane do języka C#? Na przykład chciałbym mieć operator podobny do „??”, ale do wybierania wartości min lub max. Poproszę „<? b` rozwiń do `a < b ? a : b` podobnie dla `>?`


title: Dlaczego pojedyncza liczba zmiennoprzecinkowa IEEE 754 ma 8 bitów na wykładnik, ale dopuszcza tylko 38-bitową wartość maksymalną o podstawie dziesięciu?

text: Dlaczego jest tak, że standard IEEE 754 zapewnia 8 bitów dla wykładnika, ale umieszcza maksymalny zakres 38 dla największego dopuszczalnego wykładnika? Wydaje się trochę śmieszne, aby mieć tam miejsce do przechowywania danych, ale nie pozwalać na jego rzeczywiste wykorzystanie. Chciałem zapakować dane do tego wykładnika w celu wykonania pewnego kodowania, ale nie mogę użyć wszystkich bitów, ponieważ nie mogę spakować wykładnika większego niż 38! Miałem nadzieję, że spakuję wartości do 256 przy użyciu wszystkich bitów (2 ^ 8).


title: Jaki jest dobry przykład pomysłu lub techniki tworzenia oprogramowania, która okazała się porażką?

text: W szczególności, jakie są przykłady tego, gdzie idee mas są po prostu błędne. Dlaczego w ogóle ludzie chwytali się pomysłów? I dlaczego pomysły zostały odrzucone? A może pomysły są wciąż żywe i mają się dobrze, a jeśli tak, to dlaczego? Na przykład mogę opisać CORBA (i inne podobne technologie) jako coś, co próbowało rozwiązać problem komunikacji między komponentami oprogramowania. Wielu uważało, że konieczne jest zdefiniowanie umów między różnymi komponentami. Ostatecznie HTTP + JSON rozwiązał problem dla mas i pojawiły się inne różne mechanizmy RPC, takie jak Thrift i Proto-bufs.


title: Visual Studio 2010 — lokalna historia plików

text: Netbeans używam od wielu lat, a ostatnio przeszedłem z PHP/Git/Netbeans na C#/TFS/VS10. Jak dotąd było bardzo dobrze, ale brakuje mi tej jednej małej funkcji, która tak bardzo podobała mi się w Netbeans, jest... **historia plików lokalnych**. Za każdym razem, gdy pracowałem nad czymś, mogłem testować różne pomysły, a następnie po prostu cofać lub nawet porównywać zmiany o różnych porach dnia lub nawet w różnych dniach. Zastanawiałem się, czy istnieje jakieś rozszerzenie VS10 lub jakaś wtyczka, która pozwoliłaby mi osiągnąć podobną funkcjonalność (coś w rodzaju wewnętrznej kontroli wersji). _Użyłbym TFS, ale możemy wprowadzać nasze zmiany tylko wtedy, gdy są one rzeczywiście odczytywane do produkcji. Nie mogę też znaleźć przycisku cofania zmian w TFS. Nie chciałbym też tworzyć oddziału._ Jestem tak zdesperowany, że chciałem umieścić hg lub git nad moim folderem TFS, aby móc to osiągnąć. Mam tylko nadzieję, że jest na to lepsze rozwiązanie.


title: Wdrożenie separacji obaw za pośrednictwem MVC

text: Tworzę pytanie, aby sprawdzić, czy moje rozumienie separacji MVC jest poprawne, nie byłem w stanie znaleźć jasnej odpowiedzi nigdzie w Internecie. Czy to jest właściwy sposób na zaimplementowanie tego (w Javie): miałbym 3 pliki .java, po jednym dla modelu, kontrolera, widoku. Umieściłbym wszystkie klasy związane z Modelem w Model.java tak: //Model.java { public class Model //class fields public Model(); public ModelClassA(); public ModelKlasaB(); public ModelClassC(); } Z ModelClasses będącymi dowolną klasą, którą uważam za należącą do Modelu. Czy poprawne jest posiadanie klas w klasie modelu, ponieważ przeczytałem, że w miarę możliwości należy unikać klas zagnieżdżonych.


title: Czy są jakieś notebooki skoncentrowane na programowaniu?

text: Wiem, że istnieje papier inżynierski, ale czy są jakieś firmy, które robią zeszyty przeznaczone dla programistów do notatek/pseudokodu/projektów? Papier jest moim ulubionym sposobem nakreślania zarysów, więc dodanie specjalistycznego bloczka do mojej listy narzędzi byłoby bardzo korzystne.


title: Skuteczne sposoby na wprowadzenie Agile do miejsca pracy?

text: Z Twojego doświadczenia (anegdotycznego lub innego), jakie są skuteczne sposoby na wprowadzenie Agile do organizacji lub firmy niebędącej Agile? AKTUALIZACJA: Czy ktoś może mówić o przypadkach, w których próbowałeś przedstawić Agile, ale zostałeś „zestrzelony”? Ponadto, czy masz teraz retrospektywne zrozumienie, dlaczego zostałeś „zestrzelony”?


title: Jak znaleźć ukryte funkcje?

text: Dzisiaj przeczytałem o tej wiadomości: http://www.karthikk.net/2013/04/google-glass-has-an-easter-egg-has-pictures-of-the-glass-team/ Ludzie znaleźli ukrytą Wielkanoc jajko w Google Glass... Ale jak mogą to znaleźć? Jeśli nie ma pracownika Google, nie znają tej ukrytej funkcji lub nie mają kodu źródłowego, w jaki sposób mogą „aktywować” tę funkcję?


Jakie są zalety i wady outsourcingu rozwoju i testowania do dwóch różnych firm? **EDYTUJ:** Dlaczego wolisz zlecać rozwój i testowanie różnym firmom lub tej samej firmie?


title: Jak osobno analizować dane pola/pliku wieloczęściowego?

text: Chcę przeanalizować formularz wieloczęściowy dwukrotnie: raz, aby pobrać pola przychodzące, a później, aby przetworzyć przesyłanie pliku. Staram się zachować odpowiednią separację problemów w mojej aplikacji Node: * Kontroler jest odpowiedzialny za obsługę pól przychodzących * Model odpowiada za logikę przesyłania pliku. Muszę przekazać dane pól do modelu, aby utworzyć nowe wystąpienie, więc dane pól muszą być dostępne _przed_ rozpoczęciem przesyłania pliku. Obecnie każda form.parse() lub równoważna funkcja _razem_ analizuje zarówno pola, jak i pliki. Przykład: req.pipe(busboy) obsługuje jednocześnie zarówno plik, jak i pola. Sprawdziłem moduły takie jak node-multiparty, groźny, busboy, multer. Wydaje się, że nikt nie ma na to rozwiązania. Oto przykład tego, co chciałbym osiągnąć: http://stackoverflow.com/questions/22336177/node-js-busboy-parse-fields-and-files-seperatly Czy to w ogóle możliwe?


title: Jak uruchomić wątek, jeśli w wielu tabelach wstawiono wiele danych?

text: Mam problem z gsoap, jeśli dwóch użytkowników rejestruje się w tym samym czasie, to baza danych jest zablokowana, myślę, że ma to problem z wątkami, jak sobie z tym poradzić, proszę mnie nalegać. Uruchamiam wiele wątków w tle. co 5 sekund wysyłanie danych do serwera.


title: Jak często należy zmieniać pary?

text: W firmie, w której aktualnie pracuję, od jakiegoś czasu zajmujemy się programowaniem w parach. W obecnym projekcie, przez ostatnie kilka dni, staraliśmy się trochę ulepszyć nasze programowanie w parach, więc mamy teraz nawet zegar, aby upewnić się, że zamiana między sterownikiem a nawigatorem zdarza się wystarczająco często. W przypadku zmiany par staraliśmy się to zrobić na kilka sposobów. Próbowaliśmy zmienić pod koniec tygodnia, ale okazało się, że jest za długo. Próbowaliśmy w połowie tygodnia, ale zapominaliśmy, więc postanowiliśmy robić to codziennie. Problem w tym, że niektóre historie zajmują kilka dni, więc robienie tego w ten sposób jest trochę kłopotliwe. Następnie zmieniliśmy parę na " _na historię_ ". Ale to jest tylko trochę nierówne, ponieważ same historie przez większość czasu również są nierówne. Tak więc proste pytanie: jak często należy zmieniać pary?


title: Programowanie WWW Cross Browser Frustracje Normalne?

text: Jestem więc stosunkowo młodszym programistą, robię to już od kilku lat, a ostatnio pracowałem nad przerobieniem strony internetowej firmy i wpadłem w pewne frustracje i zastanawiałem się, czy tak to działa, czy też… czegoś mi brakuje. W żadnym wypadku nie jestem projektantem, skupiam się na kodzie i nie zwracam zbytniej uwagi na to, jak ładnie wygląda, to dla mnie praca kogoś innego. Biorąc to pod uwagę, pracowałem nad tym, aby niektóre rzeczy działały, a problemy z różnymi przeglądarkami sprawiły, że nienawidzę tworzenia stron internetowych. Próbuję uzyskać filmy html5 i nie ma go, umieszczam kopię zapasową flasha i działa tylko w połowie. Wrzuć Google api i wygląda to jak gówno w ie i operze. Rzeczywisty kod nie działa w ie7. To po prostu wydaje się jedno po drugim. Jak powiedziałem, jestem nowy w tworzeniu stron internetowych. Czy tak właśnie jest? Wrzuć trochę podstawowego kodu, a następnie poświęć cały dzień/tydzień, aby działał wszędzie? Ochłodziłem się od czasu mojej początkowej frustracji, ale zastanawiam się, czy jest to normalna praktyka lub jak wygląda typowe programowanie internetowe, ponieważ teraz wydaje się to dość kiepskie. Dziękuję!


title: Czy Java można uznać za zarządzany język programowania?

text: Jestem ciekaw; czy Java może być określana jako język zarządzany? Myślę głównie o modelu Microsoft, jeśli chodzi o kod niezarządzany i zarządzany (powiedzmy natywny vc++ do C#). Biorąc pod uwagę podobieństwa między C# a Javą jako językami wysokiego poziomu, czy można nazywać Javę również językiem zarządzanym?


title: Czy powinienem mieszać Pythona i .NET?

text: Więc mam dobry chwyt, jak szybko rozwijać aplikację sterowaną GUI w .NET (nie tak bardzo w Pythonie, użyłem tylko Tkintera). Chcę, aby mój kod był łatwo wdrażany przy bardzo niewielu zależnościach. Musi jednak łączyć się z konkretnym pakietem oprogramowania innej firmy, który ujawnia bardzo trudny interfejs COM API lub znacznie prostszy interfejs API Pythona. Zastanawiam się nad napisaniem kilku skryptów Pythona, aby wykonać przetwarzanie, którego potrzebuję. Skrypty te będą wywoływane jako podproces z aplikacji .NET. W ten sposób wykonałbym projekt znacznie szybciej, zamiast spędzać dni pracując przez COM API. Czuję, że wynikowy kod byłby również znacznie prostszy i krótszy, unikając interfejsu API COM, ale będę mieszać dwa języki, jeśli będę kodował aplikację w ten sposób. Ponadto nie wysyłam z nim własnego interpretera Pythona, użyje on dostarczonego z oprogramowaniem dostawcy. Czy to okropny pomysł? Sprawdziłem IronPython, ale to oprogramowanie innej firmy najwyraźniej wymaga cpythona, aby wykorzystać jego API, więc nie jestem pewien, czy to zadziała, chyba że pójdę na trasę COM.


title: Dlaczego rozszerzenia przeglądarki nie zarabiają?

text: Ponieważ monetyzacja aplikacji mobilnych jest tak popularna, jestem zaskoczony, że twórcy rozszerzeń nadal polegają głównie na darowiznach jako głównej formie wynagrodzenia za swoje oprogramowanie. Chociaż nie jest to oczywiście problem, zastanawiam się, dlaczego rozszerzenia i wtyczki przeglądarki są generalnie zwolnione z monetyzacji, w przeciwieństwie do wtyczek zaprojektowanych dla oprogramowania takiego jak Visual Studio i Photoshop, które bardzo często są dostępne tylko przy zakupie. Co wyróżnia rozszerzenia przeglądarki i czy ktoś odniósł sukces w pobieraniu opłat za rozszerzenie przeglądarki? Odpowiednie: http://www.quora.com/Monetization/How-do-browser-extensions-monetize


title: Jakieś oświecenie dla zrozumienia programowania obiektowego?

text: Studiowałem informatykę pod koniec lat 80. i formalnie nie uczono mnie tego OOP. Z Pascalem lub C, kiedy rozumiem odgórne projektowanie funkcji i ideę czarnej skrzynki, to wszystko wydaje się mieć sens, jakby było „o, rozumiem!” -- jakiś rodzaj całkowitego poczucia tego i oświecenia. Ale przy OOP wszystko, co wiem, to mechanika: klasa, instancja, metoda, dziedziczenie, polimorfizm, enkapsulacja. To było tak, że znałem całe „tak to jest”, ale nigdy nie miałem uczucia „całkowicie to rozumiem”, oświeconego uczucia. Czy ktoś byłby w stanie to opisać lub wskazać rozdział w jakiejś książce lub artykule, który mówi o OOP, tak aby czytelnik poczuł: „Całkowicie to rozumiem!” na OOP?


title: Jak mogę dostać pracę w firmie, gdy nie jestem zaznajomiony z technologią?

text: _Przepraszam, jeśli wybrałem złą stronę Stackexchange dla tego pytania. Wskaż mi właściwe miejsce, jeśli w ogóle..._ Jak mogę znaleźć pracę w firmie, która ma dla mnie nieznaną mi technologię na liście wymagań stanowiskowych? Innymi słowy. Jak mogę dostać pracę w **Lucene** jeśli nie mam doświadczenia w **Lucene** , ale żeby zdobyć doświadczenie w **Lucene** muszę być zaangażowana w firmę, która potrzebuje programistów z **Lucene** doświadczenie technologiczne? To jest zamknięty dysk!


title: Czy są jakieś wady w tym projekcie języka programowania / maszyny wirtualnej?

text: Buduję maszynę wirtualną i myślę, że mam doskonały projekt programu, ale martwię się, ponieważ nie mam zbyt dużego doświadczenia w tej dziedzinie, mogą być wady. Zanim powiem ci, jak to działa, najpierw wymienię kilka rzeczy, o które chodzi w tym języku programowania i maszynie wirtualnej. * Ładowanie jako rozszerzenie (jak JNI) * Dynamiczne ładowanie rozszerzeń / wtyczek * Lepsza wydajność niż zwykłe skrypty, takie jak JavaScript / PHP * Zorientowanie obiektowe * Łatwa konfiguracja wszystkich wymagań * Bezpieczeństwo maszyny (nie można używać żadnych natywnych funkcji maszyny, menedżera bezpieczeństwa dla rozszerzone uprawnienia, takie jak zarządzanie plikami, łączenie się z siecią) * Bezpieczeństwo kodu (ludzie będą mieli trudności z odzyskaniem kodu) Cały pakiet będzie składał się z różnych części: * Kompilator do kodu bajtowego * Maszyna wirtualna (odczyt i wykonanie kodu bajtowego) * Program używający skryptów (zawiera VM do ich uruchomienia) * Program kodu bajtowego (skompilowany program do uruchomienia przez VM) Program będzie przechowywany w podstawowym archiwum .zip. Archiwum .zip będzie zawierać wszystkie pliki kodu bajtowego, a także plik zawierający interfejs. Po skompilowaniu kodu źródłowego wszystkie nazwy zmiennych i funkcji znikną. Zostaną one zastąpione/zaciemnione zwykłymi liczbami całkowitymi. Podczas kompilacji interfejs, jak wspomniano wcześniej, zostanie dodany do archiwum .zip. Interfejs będzie w zasadzie biblioteką funkcji, która może być wywołana spoza programu przez maszynę wirtualną. Ten interfejs może na przykład obejmować metodę główną. Kiedy maszyna wirtualna jest używana jako ładowarka wtyczek, może na przykład zawierać również funkcję `getName()` lub `getIcon`. Podczas ładowania w maszynie wirtualnej poprosi o interfejs do użycia. Podczas późniejszego ładowania pliku .zip do tej maszyny wirtualnej sprawdzi, czy interfejsy są zgodne. Jeśli nie, maszyna wirtualna odmówi załadowania programu. Gdy zostanie załadowany w głównym programie, będzie mógł poprosić VM o uruchomienie określonej funkcji zdefiniowanej w interfejsie. Również wykonywany program będzie mógł uruchamiać funkcje maszyny wirtualnej. Również te funkcje będą częścią interfejsu. Wykonywany program może zażądać załadowania nowych programów. Zostaną również załadowane interfejsem, a program będzie mógł korzystać z jego metody. (Zasadniczo wtyczka ładująca wtyczki) Pomysł wydaje mi się bezbłędny, ale dla pewności chciałem zapytać wszystkich tutaj, czy podczas jego tworzenia mogą wystąpić jakieś problemy lub blokady. Żeby było jasne, nie zamierzam konkurować z Javą/CLR czy czymkolwiek.


title: Dostawca ról niestandardowych w ASP.NET MVC, a w szczególności użytkownik posiadający wiele ról

text: Rozejrzałem się i nie mogę znaleźć żadnej konkretnej odpowiedzi, która odnosiłaby się do tego, o co pytam, ale bez wątpienia zostanie to już gdzieś wspomniane. Wiem, że kiedy dziedziczysz po abstrakcyjnym `System.Web.Security.RoleProvider`, zastępujesz tę metodę `public abstract string[] GetRolesForUser(string username);` i jako nazwę metody ( **GetRoles** ) i jego wartość zwracana ( **string[]** ) sugeruje, że dla jednego użytkownika może zostać zwrócona więcej niż 1 rola, ale może być również ograniczona do tablicy z jednym elementem za pośrednictwem niestandardowego dostawcy ról. W mojej sytuacji implementuję to w aplikacji internetowej .NET MVC i używam niestandardowego dostawcy ról .NET i mam decyzję, czy powinienem zezwolić użytkownikowi na bycie w więcej niż 1 roli naraz. Szukam ogólnych powodów za/przeciw temu (w szczególności powodów implementacyjnych). Większość punktów, które mogę uważać za specyficzne dla domeny aplikacji, oto kilka... * Decydowanie, które uprawnienia ról mają priorytet, tj. co zrobić, gdy jedna rola autoryzuje konkretną akcję, a inna ma jej odmówić, ale obie role są przypisane do tego samego użytkownika. * Czy zezwolić użytkownikom na włączanie i wyłączanie ich ról, czy też przypisywanie im tylko jednej roli i zmianę tego przez administratora. ale czy jest jakiś szczególnie zły powód, dla którego należy unikać przypisywania użytkownikowi wielu ról jednocześnie? Czy lepiej dać użytkownikowi tylko 1 rolę?


title: Korzystasz z zewnętrznych bibliotek - zawsze używasz wrappera?

text: Większość projektów, w które jestem zaangażowany, wykorzystuje kilka komponentów o otwartym kodzie źródłowym. Zgodnie z ogólną zasadą, czy dobrym pomysłem jest zawsze unikanie wiązania wszystkich składników kodu z bibliotekami stron trzecich i zamiast tego korzystanie z opakowania hermetyzującego, aby uniknąć bólu związanego ze zmianą? Na przykład, większość naszych projektów PHP bezpośrednio używa log4php jako frameworka do logowania, tj. tworzą instancje poprzez \Logger::getLogger(), używają metod ->info() lub ->warn() itd. W przyszłości jednak może pojawić się hipotetyczna struktura rejestrowania, która jest pod pewnymi względami lepsza. W obecnej sytuacji wszystkie projekty, które są ściśle powiązane z sygnaturami metody log4php, musiałyby się zmienić w dziesiątkach miejsc, aby dopasować nowe sygnatury. Miałoby to oczywiście duży wpływ na bazę kodu, a każda zmiana jest potencjalnym problemem. Aby zabezpieczyć na przyszłość nowe bazy kodu z tego rodzaju scenariusza, często rozważam (a czasami implementuję) klasę opakowującą, która hermetyzuje funkcjonalność rejestrowania i ułatwia, choć nie bezbłędnie, zmianę sposobu, w jaki rejestrowanie będzie działać w przyszłości przy minimalnych zmianach ; kod wywołuje opakowanie, opakowanie przekazuje wywołanie do struktury rejestrowania _du jour_. Mając na uwadze, że istnieją bardziej skomplikowane przykłady z innymi bibliotekami, czy nie przesadzam, czy w większości przypadków jest to mądry środek ostrożności? EDYCJA: Więcej rozważań - użycie iniekcji zależności i podwajania testów praktycznie wymaga abstrakcji większości interfejsów API ("Chcę sprawdzić, czy mój kod wykonuje się i aktualizuje jego stan, ale nie pisać komentarza do dziennika/dostępu do prawdziwej bazy danych"). Czy to nie jest decyzja?


title: Słownik terminów pojęć językowych?

text: Czy jest gdzieś jakiś słownik lub książka, która wyjaśnia wszystkie te nowoczesne terminy dotyczące pojęć językowych, takich jak (ale nie tylko) * currying * zamknięcie * funkcja lambda * dedukcja typu * dynamiczne metaprogramowanie * wielokrotna wysyłka * itp. ? Wiem, że książki o językach programowania, takich jak groovy, wyjaśniają niektóre z tych pojęć, ale szukam czegoś bardziej wszechstronnego i niezależnego od języka... Aktualizacja: Tak, wiem, znajdę wyjaśnienia dla każdego z tych pojedynczych pojęć w Google i Wikipedii , ale szukam przeglądu wszystkich tych terminów... słownika :-) Tło: Dopóki nie znam terminu do wyszukania, nie mogę go znaleźć w wikipedii ani w google... * *Bounty:** Ponieważ wciąż szukam dobrego przeglądu lub listy koncepcji programowania wraz z wyjaśnieniem, teraz oferuję nagrodę za najlepszą odpowiedź. Jeśli nie masz linku do przeglądu, ale znasz pewne koncepcje programowania, o których jeszcze nie wspomniano - możesz stworzyć odpowiedź i nazwać je razem z linkiem do wikipedii lub innym tekstem wyjaśniającym. Zbiorę wszystkie te odpowiedzi, a najlepszy otrzyma nagrodę. **Aktualizacja:** dzięki za wszystkie odpowiedzi. Trudno było zdecydować się na właściwą odpowiedź i nagrodę. Ponieważ wydaje się, że nie ma takiego słownika, którego szukałem, postanowiłem sam zebrać referencje na blogu: http://plconcepts.blogspot.com/


title: Kiedy kod jest uważany za ciasny i jak zwiększa wydajność kodu?

text: Czytałem wiele razy, że sortowanie przez wstawianie ma ciasny kod, a zatem ukryty stały czynnik w jego asymptotycznej złożoności jest mniejszy. Właśnie przeczytałem wczoraj, że szybkie sortowanie ma ścisły kod, podobnie jak sortowanie przez wstawianie, więc ma również mniejszy ukryty współczynnik stały. Jest to jeden z powodów, dla których jest uważany za najlepszy wśród algorytmów sortowania `O(n lg n)`. Nie rozumiem, co to znaczy, gdy ktoś mówi, że kod tego algorytmu jest napięty. Co to dokładnie oznacza i jak prowadzi do poprawy wydajności algorytmu (mniejszy ukryty stały czynnik w asymptotycznej złożoności)? PS: Nie wiem, jakie tagi można dodać do tego pytania. W razie potrzeby dodaj tagi.


title: Web Developerzy nie uczą się „tradycyjnych” technik?

text: Natknąłem się na to pytanie na SO: http://stackoverflow.com/questions/7373066/webpage-source-code-incomplete- hidden-code Bez próby wywnioskowania zbyt wiele lub rozpoczęcia dyskusji pobocznej, której SO zniechęca, Myślę, że można słusznie stwierdzić, że OP to ktoś, kto zna HTML, Javascript, CSS i podstawową architekturę sieci. Jednak to pytanie sugeruje, że nigdy nie pracowali z kodem, który wykorzystywał tradycyjny post w formie „formularza”. Czy naprawdę jest tak, że ludzie, którzy obecnie zaczynają pracować w sieci, nie dowiadują się już o tych starych, podłych rzeczach? Nie chodzi mi nawet o to, żeby to pytanie było tak zdawkowe, jak mogłoby się wydawać. Nie sugeruję, aby ludzie uczyli się o `<marquee>`, implementowali cały układ interfejsu użytkownika w tabelach, dynamiczną zawartość za pomocą `document.write` itp. Ale posty formularzy wydają się jednym z tych krytycznych elementów, które dana osoba powinna zrozumieć, szczególnie przed przejściem do Ajaks. Czy natknąłem się tutaj na anomalię lub trend? Czy się mylę?


title: Jak zaimportować obraz za pomocą openGL

text: Jestem nowy w openGL C++ i chciałem się dowiedzieć, czy w bibliotece OpenGL istniała wcześniej funkcja, która pozwoliłaby mi zaimportować model 3d lub 2d? Na przykład, jeśli zrobię obraz 3d za pomocą Photoshopa lub model 3d za pomocą 3ds max, czy mogę użyć biblioteki w przykładzie openGL (nie jest to prawdziwa funkcja): glUse3dimage(3dmodel); ? A może importowanie obrazów byłoby trudniejsze i musiałbym stworzyć własną funkcję? Nie jestem dobrym programistą, więc chciałem zobaczyć, jakie to będzie trudne. Innym pytaniem, które miałem, było to, czy byłoby to trudne, czy byłoby łatwiej używać openGL z innym językiem? Na przykład openTK z C#?


title: Statyka jest zła, ale co z wzorcem Factory?

text: Jestem w projekcie TDD, więc staram się trzymać jak najwięcej dobrych praktyk związanych z tego rodzaju rozwojem. Jednym z nich jest unikanie w jak największym stopniu statycznych i globalnych. Mam do czynienia z tym problemem: mam obiekt "artykuł", który może mieć "opcje" (dodatkowe "mikro-artykuły") z nim połączone. Nie potrafię wymyślić, jak mieć dobre podejście, które nie będzie nieskuteczne ani nie będzie generować zbyt wielu zapytań, ponieważ byłbym w sytuacji, w której wszystko jest tak oddzielone, że zasadniczo będę musiał wykonać 1 zapytanie na obiekt. Z mojej aktualnej perspektywy widzę 3 opcje: 1) Zbuduj wewnątrz artykułu: class Article { //[...] public function getArrOption(){ //Buduj tablicę instancji Options. //zwróć tablicę opcji. } } **Pro:** Prosto **Const:** Utrzymanie: Obiekt artykułu zawiera teraz logikę budowania dla obiektu Option. To prawdopodobnie doprowadzi do duplikacji kodu. 2) Używając opcjiFactory class Article { //[...] public function getArrOption(){ return OptionFactory::buildFromArticleId($this->getId()); } } **Pro:** Logika budowania nie jest poza klasą Article **Const:** Łamię zasadę „statyczny jest trudny do zakpiwania”, co utrudnia testowanie mojej klasy Article. 3) Oddziel wszystkie logiki. //Zbuduj tablicę instancji Option gdzieś w kontrolerze, używając Factory: $arrOption = OptionFactory::buildFromArticleId($article->getId()); **Pro:** Artykuł zajmuje się tylko jego własną odpowiedzialnością i nie dba o link „ojca” do opcji. Rzeczy są naprawdę oddzielone od siebie **Stała:** Będzie wymagać więcej kodu wewnątrz kontrolera za każdym razem, gdy będę potrzebować dostępu do Opcji. To znaczy, że _nigdy_ nie powinienem używać Fabryki wewnątrz obiektu, a to brzmi dla mnie trochę utopijnie... Jaka jest najlepsza droga? (Czy coś przegapiłem?) dzięki. Edycja: Nie wspominając o tym, że jeśli nie mogę wywołać fabryki wewnątrz klasy, w zasadzie nigdy nie mogę również użyć wzorca leniwej inicjalizacji...


title: W jaki sposób niektóre społeczności językowe (np. Ruby i Python) były w stanie zapobiec fragmentacji, podczas gdy inne (np. Lisp lub ML) nie?

text: Termin "Lisp" (lub "Lisp-like") jest parasolem dla wielu różnych języków, takich jak Common Lisp, Scheme i Arc. Podobne rozdrobnienie występuje w innych społecznościach językowych, jak w ML. Jednak zarówno Ruby, jak i Python zdołały uniknąć tego losu, gdzie innowacje pojawiły się bardziej w implementacji (jak PyPy lub YARV), zamiast wprowadzać zmiany w samym języku. Czy społeczności Ruby i Python zrobiły coś specjalnego, aby zapobiec fragmentacji języka?


title: Wdrożenie czatu w 2013 roku

text: Pobawiłem się trochę z WebSockets i zacząłem wdrażać mały czat. Ostatnio robiłem coś takiego, kiedy nie było czegoś takiego jak wątki, a komputery miały pojedynczy rdzeń. Zacząłem się zastanawiać, jak to zaimplementować przy użyciu dzisiejszych wzorców programistycznych, ale nie doszedłem do żadnego ostatecznego wniosku. Jak zaimplementować główną funkcjonalność czatu w dzisiejszej technice na wyższym poziomie? Mam teraz kontekst Server, Socket i User. Użytkownik ma stany Undefined, Connected, InChat, ToBeDisconnected, Disconnected, Moim głównym problemem jest utrzymanie użytkownika: * Jeśli użytkownik nie powiedział „cześć” w ciągu 5 sekund po otwarciu połączenia -> rozłącz * Użytkownik nie odpowiedział na „ping” z "pong" w ogóle lub co najmniej 2 minuty -> rozłącz * Użytkownik był połączony ponad 12 godzin -> rozłącz * Użytkownikowi nie przypisano profilu (pseudonim i/lub inne dane) po 5 minutach połączenia -> rozłącz * Wywoływana jest inna flaga specyficzna dla programu, która wyrzuca użytkownika -> rozłącz Moja obecna implementacja wygląda tak, jak w dawnych czasach. tj. Mam while(serverRunning) { foreach(socket in allSockets) { user = allUsers.findUserBySocket(socket); doMaintenance(użytkownik); } } Teraz to działa zbyt wiele razy i blokuje i blokuje wszystkich użytkowników i allSockets zbyt wiele. Jak to się dzisiaj realizuje? Jak to na przykład? * Socket łączy * Dodaj do allSockets * Dodaj do allUsers * Uruchom wątek na użytkownika, który uruchamia się co x sekund i uruchamia **user.doMaintenance()**? * Albo istnieje kolejka na użytkownika, która jest wstrzykiwana z działaniami takimi jak **doPongCheckAction** , **doProfileTimeoutCheckAction** , itp. co x sekund (wymaga również wątku na użytkownika, który stale opróżnia kolejkę użytkownika)? * Czy istnieje wątek konserwacji, który uruchamia się co x sekund po ostatnim uruchomieniu i przechodzi przez wszystkich użytkowników (trochę jak bieżąca implementacja)? * Lub jest wątek, który wstrzykuje akcje do wszystkich kolejek użytkowników, gdy trwa zbyt długo, gdy uruchomiono ten sam rodzaj akcji, i inny wątek, który iteruje przez wszystkich użytkowników i opróżnia kolejkę użytkownika? * A może coś innego lub co nie opiera się nawet na kolejkach? :)


title: Jak poprawić swoją zdolność do debugowania istniejącego kodu

text: Częstym zadaniem w świecie pracy jest radzenie sobie z istniejącym, ale błędnym kodem. Jakie są wskazówki, jak poprawić swoje umiejętności jako debugger?


title: Czy możliwe jest użycie kodu C++ w aplikacji Object-c na iPhone'a?

text: Zastanawiam się nad napisaniem aplikacji, która będzie miała wersję webową oraz wersję na iPhone'a (a może później także wersję na Androida). Ponieważ istnieje kilka algorytmów, które są takie same na iPhonie i wersjach webowych, zastanawiałem się, czy można napisać tę część w c++, zachowując resztę aplikacji w objective-c?


title: Czy doxygen obsługuje szablony dla wyjścia HTML?

text: Udokumentowałem mój kod dla `doxygen`, ale nie chcę domyślnego kodu HTML, który daje. Wiem, że mogę go dostosować, dostarczając niestandardowe CSS, nagłówki, stopki itp. (tak jak robi to GNOME) i jak mogę dodać wspólny kod PHP do plików i nakazać zapisanie go jako `.php`, ale to nie jest naprawdę to, czego chcę. To, czego chcę, to wyjście takie jak MSDN. Naprawdę nie potrafię tego opisać. Moje pytanie brzmi: czy jest to możliwe przy użyciu doxygen z czymś takim jak szablony, czy też muszę wyprowadzić XML i przeanalizować go za pomocą innego programu (który nie miałbym nic przeciwko napisaniu)?


title: Jak działa pamięć podręczna w usługach sieciowych ServiceStack

text: Jestem nowy w buforowaniu i próbuję zrozumieć, jak to działa w ogóle. Poniżej znajduje się fragment kodu ze strony ServiceStack. public object Get(CachedCustomers request) { //Utwórz ujednoliconą nazwę zasobu „urn:customers”. return base.RequestContext.ToOptimizedResultUsingCache(base.Cache, "urn:customers", () => { //Rozwiąż usługę w celu pozyskania klientów przy użyciu usługi zwrotu (var service = this.ResolveService<CustomersService>()) .Pobierz (nowych klientów (); }); } public object Get(CachedCustomerDetails request) { //Utwórz ujednoliconą nazwę zasobu "urn:customerdetails:{id}". var cacheKey = UrnId.Create<CustomerDetails>(request.Id); return base.RequestContext.ToOptimizedResultUsingCache(base.Cache, cacheKey, () => { using (var service = this.ResolveService<CustomerDetailsService>()) { return service.Get(new CustomerDetails { Id = request.Id }); } }); } Moje wątpliwości: 1. Czytałem, że buforowane dane są przechowywane na tej samej/rozproszonej pamięci RAM serwera. Tak więc, ile danych może obsłużyć, załóżmy, że w pierwszej metodzie, jeśli liczba klientów przekracza 1 milion, nie zajmuje zbyt dużo pamięci. 2. Ogólnie, czy stosujemy buforowanie tylko dla operacji GET i unieważniamy, jeśli zostanie UPDATE'd. 3. Proszę zasugerować dowolne narzędzie do sprawdzania zużycia pamięci przez buforowanie.


Zastanawiałem się, jak kodowany jest efekt przepływu okładki. Użyłem tego linku, który dał mi kod, jak to wszystko działało: http://luwes.co/labs/js-cover-flow/. Jestem zupełnie nowy w skomplikowanych programach, więc trudno mi było zrozumieć, jak to wszystko działa. Dlaczego programujemy każdy plik osobno i umieszczamy je w osobnych folderach i jak wszystkie te pliki się łączą? Dlaczego istnieją pliki kompilacji, co one robią?


title: Używasz firmy Microsoft Contoso do własnych przykładów w produktach opartych na Microsoft?

text: Obecnie planujemy utworzyć wersję „podglądową” dla jednej z naszych aplikacji asp.net mvc. Czy w takim przypadku można używać firmy takiej jak contoso firmy Microsoft (Branding itp.)?


title: Problemy z koordynacją zespołów oprogramowania i baz danych

text: Jest to w zasadzie pytanie dotyczące „procesu programowego”: gdy Twoja organizacja jest podzielona na dwa zespoły: zespół ds. oprogramowania i zespół inżynierów baz danych (organizacja jest w trybie ETL/BI/eksploracji danych, dostarczając raporty o rozmiarze terabajtów i zrzuty bazy danych dla organizacji badawczej), co jakie są najczęstsze problemy w koordynacji między takimi dwoma zespołami? i jak się z nimi obchodzisz? Dokładnie, ile autorytetu ma DBA w dyktowaniu projektu w porównaniu z inżynierem oprogramowania?


title: balansowanie starych spraw ze zwinnymi praktykami

text: Mój zespół dopiero zaczyna integrować praktyki zwinne (wybraliśmy kanban) z naszymi zespołami programistycznymi, testowymi i projektowymi, ale mamy wiele przypadków błędów i przypadków funkcji, które nie zostały zapisane w historyjkach użytkowników pozostałych po starym systemie, a my próbujemy znaleźć dobry sposób na usunięcie błędów, ale nadal utrzymujemy deweloperów, którzy muszą pozostać skupieni. na razie mamy nowszego dewelopera przypisanego do naprawy błędów, więc reszta może pracować nad nowymi funkcjami, ale szukamy właściwego sposobu na zorganizowanie zespołu. Mamy 7 programistów, 2 testerów i 2 projektantów. Z góry dziękuję za pomoc :)


title: Jak podzielić warstwę usług?

text: Obecnie mam cztery projekty w rozwiązaniu mojej witryny: **Project.Data** Zawiera obiekt EntityFramework DbContext, a także repozytoria, które wchodzą z nim w interakcję. Odwołuje się do _Project.Models_. **Project.Models** Zawiera obiekty biznesowe i nie odwołuje się do żadnego innego projektu **Project.Web** Zawiera wszystkie modele ViewModels, widoki, kontrolery i statyczną zawartość witryny. Odwołuje się do _Project.Data_ (dla repozytoriów), _Project.Models_ i _Project.Service_ A teraz przechodzę do problematycznego projektu... **Project.Service** Chcę, żeby to był projekt, którego używa _Project.Web_ jego kontrolery są cienkie, jak rozumiem, jest to pożądane. Każda z klas w tym projekcie prawdopodobnie będzie miała wstrzyknięte repozytorium, dzięki czemu będą mogli uzyskać dostęp do dowolnych danych, których potrzebują. Jednym z ich obowiązków będzie stworzenie ViewModelu dla kontrolerów w _Project.Web_ do użycia. Oznacza to, że będzie odwoływać się do _Project.Data_ w celu odniesienia do tych repozytoriów, _Project.Models_ w przypadku modeli i _Project.Web_ w celu uzyskania dostępu do ViewModels. * * * Więc kiedy mam wrażenie, że robię coś naprawdę złego przez to wszystko, dodaję moje ostatnie odniesienie do _Project.Web_ z _Project.Service_ i pojawia się błąd informujący mnie, że mam teraz okrągły zależność... Co właściwie robię nie tak? Czy istnieją wzorce, których mogę użyć, które oczyszczą niektóre zależności od innych projektów, czy też próbuję zrobić coś, co i tak nie jest przydatne?


title: Czy w dłuższej perspektywie kod outsourcingu jest droższy? Czy to szkodzi jakości kodu?

text: Znam firmę, która posiada własność intelektualną przyzwoitego oprogramowania i osiąga doskonałe dochody z licencjonowania rocznie. Jednak dyrektor (nie techniczny) skarży się na koszty utrzymania zespołu programistycznego, ponieważ pochłania on znacznie marże i rozważa outsourcing rozwoju określonych modułów do innych krajów, które pobierają niższe stawki. Osobiście nie sądzę, aby na dłuższą metę było to bardziej opłacalne rozwiązanie. Może to prowadzić do przerw w komunikacji w przypadku problemów, dodatkowo specyfikacje będą musiały być wodoszczelne, co i tak może zająć więcej czasu. Moim zdaniem w pracy w zespołach komunikacja jest kluczowa - czy istnieje skuteczny sposób, aby to zadziałało? Jakie są myśli i doświadczenia innych ludzi w tej sprawie?


title: Gdzie powinienem analizować dane uzyskane za pomocą DAO

text: Mam DAO, które dostarcza dane z usługi sieciowej, te dane są w postaci ciągu, na przykład: *NAME|John Doe *DATEOFBIRTH|1978-23-01*ID|anID123 (...) Mam DTO które chcę wypełnić przeanalizowanymi danymi (DTO ma pola takie jak imię i nazwisko, data urodzenia, id...) Więc moje pytanie brzmi, jaka jest najlepsza praktyka: * Parsowanie ciągu w DAO w celu wypełnienia DTO * Przekazywanie ciągu danych do DTO i samego DTO przeanalizuj ciąg i sam się wypełnij * Wykonaj parsowanie w klasie narzędziowej, która otrzyma ciąg i zwróci wypełnienie DTO > DAO: Data Access Object > > DTO: Data Transfer obiektu Uwaga: Utrzymałem ten język agnostyczny, więc może być przydatny dla każdego, kto używa języków obiektowych, ale w moim konkretnym przypadku używam Javy.


title: Styl kodowania - zdefiniuj pola osobno lub nie

text: Niektórzy używają tej konwencji: prywatne zdarzenie String; public getEvent() { return this.event; } public setEvent(String value) { this.event = value; } prywatny int id; ... tak samo jak powyżej ... W niektórych projektach najpierw definiują wszystkie pola, wszystkie pola statyczne po (lub przed), wszystkie zmienne publiczne/prywatne, a następnie settery, gettery, inne metody. Którego używasz i dlaczego?


title: Refaktoryzacja do fantazyjnej zmiennej globalnej?

text: Obecnie refaktoryzuję aplikację zbudowaną w JavaScript. Aplikacja wykorzystuje **godzinę początkową** i **całkowitą liczbę godzin pracy** w celu skonstruowania harmonogramu dla widoków dziennych, tygodniowych i miesięcznych. Godzina początkowa i całkowita liczba godzin pracy są takie same dla wszystkich rozkładów jazdy, które rozważałem, używając wzorca do zainicjowania harmonogramu i zacząłem czytać, jak postępować w ten sposób w JavaScript, ponieważ nie jestem zbyt zaznajomiony z językiem. Moja oryginalna funkcja inicjująca dla harmonogramu miała następujący podpis: FillTimeTable(startingTimeWeekDay, workinghourCountWeekDay ); Problem z tą metodą polega na tym, że dla innego widoku planu lekcji muszę ponownie wywołać inne widoki z tym samym podpisem. FillWeeklyTimeTable( startTimeWeekDay, workinghourCountWeekDay ); FillMonthlyTimeTable( startTimeWeekDay, workinghourCountWeekDay ); Jeśli zmienią się godziny pracy, ja lub biedny bugger utrzymujący mój kod musielibyśmy je zmienić w różnych miejscach w kodzie, a ze względu na sposób, w jaki zorganizowałem mój kod, nie są one umieszczone tak starannie, jak tutaj. Dlatego podczas refaktoryzacji rozważałem alternatywy, takie jak zmienna globalna, Singleton lub obiekt. Czytałem o obiektach, prywatnych członkach i konstruktorach i zdecydowałem, że to może być rozwiązanie po przeczytaniu o implementacjach Singleton i binningu zmiennych globalnych. Tak więc aktualnie mam następujący kod: function Timetable( beginTimeWeekDay, workinghourCountWeekday) { this.startWeekday = StartingTimeWeekDay; this.hoursWeekday = WorkinghourCountWeekday; } Timetable.prototype.startWeekday = function() { return this.startWeekday; } Timetable.prototype.hoursWeekday = function() { return this.hoursWeekday; } var mojaTablica = new Plan lekcji( 6, 8 ); Jak dotąd wszystko działa dobrze, ale myTimetable wydaje mi się po prostu bardzo wymyślnym sposobem deklarowania zmiennej globalnej. Czy tak jest? Czy właśnie zdecydowałem się na niewłaściwą strategię, czy jest to droga do zrobienia, czy też przegapiłem coś niezbędnego do pracy z JavaScriptem?


title: Architektura MVC — Ile kontrolerów potrzebuję?

text: Koduję od jakiegoś czasu, ale głównie skrypty i proste aplikacje. Przeniosłem się do nowej roli, w której chodzi o tworzenie aplikacji internetowych i używanie odpowiedniej architektury MVC, więc desperacko próbuję dowiedzieć się o tym wszystkim bardzo szybko. Mam nadzieję, że to pytanie nie jest zbyt podobne do „Najlepszych praktyk dla architektury MVC”, ale kiedy przechodzę przez kilka różnych samouczków, zauważyłem, że niektóre mają wiele kontrolerów do różnych rzeczy. **Ile kontrolerów potrzebuje jedna aplikacja webowa?** Zdaję sobie sprawę, że byłoby to trudne bez podania przykładu, więc podam jeden: Aplikacja: 1. Użytkownik loguje się. 2. Użytkownik może wykonać jedną z trzech rzeczy: **a)** Prześlij plik (przechowywany w bazie danych mongodb z metadanymi). **b)** Wyszukaj plik. **c)** Wyloguj się. Moje pytanie jest ogólne, ale podałem przykład, aby pomóc każdemu, kto próbuje odpowiedzieć.


title: Uniemożliwianie użytkownikom witryny internetowej korzystania z przycisku Wstecz w celu uzyskania dostępu do ekranów w pamięci podręcznej po wylogowaniu?

text: Mam starszą aplikację internetową Java (Spring 3.1 MVC, starszą wersję servlest i JSP). Zmodyfikowałem ją tak, aby wylogować użytkownika po kliknięciu przez niego zewnętrznego łącza w celu opuszczenia strony internetowej. Ostatnie ekrany, na których się znajdował, są zapisywane w pamięci podręcznej przeglądarki, dzięki czemu mogą zobaczyć niektóre dane po naciśnięciu przycisku Wstecz. Mógłbym umieścić na tych ekranach nagłówki bez pamięci podręcznej i to działa, ale strona była słabo zaprojektowana z wielostronicowymi formularzami, niektóre z jednym ekranem wyników wysyłającym żądania postów, aby przejść do innego ekranu. Jeśli te ekrany nie są zapisane w pamięci podręcznej, użytkownik wciskając przycisk Wstecz znajdzie się na pustej stronie, poruszając się w przód iw tył, nie pozostawiając go nigdzie bez innego wyboru niż ponowne zalogowanie. Większy bałagan. Czy poza przeprojektowaniem witryny mogę zrobić coś jeszcze, aby uniemożliwić użytkownikowi korzystanie z przycisku Wstecz po wylogowaniu się w celu uzyskania dostępu do ekranów zapisanych w pamięci podręcznej? Próbowałem skłonić użytkownika do przejścia do statycznego ekranu przekierowania po wylogowaniu w nadziei, że po prostu zostanie odesłany z powrotem do zewnętrznego adresu URL po użyciu przycisku Wstecz, ale co najmniej dwie przeglądarki nie wydają się buforować ani nawigować do takie strony. Wszelkie pomysły byłyby mile widziane. Potrafię używać javascript jak i kodu po stronie serwera. Nawet jeśli nie uda mi się rozwiązać tego problemu, mogę się czegoś nauczyć na przyszłość Dzięki Steve


title: Czy dobrze robię wydarzenia?

text: Mój problem dotyczy JavaScript w przeglądarce, ale myślę, że może to dotyczyć dowolnego środowiska sterowanego zdarzeniami. Zakodowałem widżet w mojej aplikacji. Widżet pozwala użytkownikowi wybrać element za pomocą 3 różnych pod-widżetów (tabela, mapa i galeria). Widgety podrzędne wyświetlają te same elementy, a wyboru można dokonać z dowolnego pod-widżetu, którego użytkownik woli używać. Za każdym razem, gdy wybór jest dokonywany przez użytkownika lub ustawiany w kodzie, zdarzenie „zmieniono wybór” jest wyzwalane przez subwidget. Główny widżet nasłuchuje tych zdarzeń „zmienionych w wyborze”. Działało to dobrze, dopóki nie zacząłem dalej pracować nad projektem i zdałem sobie sprawę, że muszę dostosować zaznaczenie w pozostałych 2 widżetach, gdy wybór ulegnie zmianie (jeśli użytkownik wybierze element na mapie, powinien podświetlić ten sam element w tabeli i galeria). Problem polega na tym, że kiedy ustawię zaznaczenie w pozostałych 2 sub-widgetach, z kolei uruchamiają one zdarzenie „zmieniono zaznaczenie”, co kończy się dość rekursywnym działaniem. Dzieje się tak również, gdy muszę wyczyścić zaznaczenie we wszystkich sub-widgetach (otrzymuję 3 zdarzenia „zmienione zaznaczenie” z tymi samymi pustymi danymi). Prowadzi to do kilku zbędnych telefonów dotyczących zasobów zewnętrznych i daje mi poczucie, że doprowadzi to do dalszych problemów w przyszłości. Więc moje pytanie brzmi, czy dobrze robię wydarzenia? Odpowiedź brzmi oczywiście „nie”, ponieważ tak wcześnie wpakowałem się w ogórki, ale zastanawiam się, jak inni ludzie wykorzystują wydarzenia bez wchodzenia w te problemy – jaki rodzaj architektury byłby lepszy w tej sytuacji? Może mógłbym mieć sposób na ustawienie i wyczyszczenie selekcji w pod-widżetach, który nie uruchamia zdarzenia, ale to wydaje się hackiem i może skończyć się konfliktem z frameworkiem, którego używam do obsługi moich widoków/modeli .


title: Dobra praktyka: przechowywanie zmiennych i nazw klas w bazie danych do bezpośredniego połączenia

text: Chciałbym wiedzieć, czy jest to dobra praktyka przechowywania nazw zmiennych i klas w bazie danych, aby umożliwić użytkownikom dostęp do nich. Na przykład użytkownicy mogą tworzyć wpisy w tabeli bazy danych, w których mogą wstawić nazwę funkcji programu, która zostanie wykonana, gdy program ją odczyta. Uważam, że jest to niebezpieczna praktyka, ponieważ użytkownicy mogą wykonywać lub uzyskiwać dostęp do dowolnych danych programu, ale powiedziano mi, że jest to dość powszechna praktyka w językach z introspekcją, takich jak Python. Co więcej, zasugerowano mi również, aby mieć w tabeli pole, które będzie przechowywać nazwę innego pola tabeli, aby stworzyć w jakiś sposób dynamiczny klucz obcy. Osobiście uważam, że obie praktyki są bardzo złe, ponieważ w pierwszym przypadku nie ma już rozdziału między danymi użytkownika a danymi programu, a w drugim przypadku nie ma rozdziału między strukturą a danymi w bazie danych. Czy możesz potwierdzić, że te praktyki są odradzane lub powiedzieć mi, że się mylę i zasugerować sposób, aby podejść do nich w bezpieczniejszy sposób. Dziękuję Ci.


title: Projekt graficzny pulpitu/prototyp/makieta/model szkieletowy

text: W tej chwili pracuję nad projektem i aktualnie poszukuję źródeł dotyczących tworzenia makiet GUI. W moim przypadku tworzę podstawowe diagramy z zamierzonym układem projektu, aby upewnić się, że będzie działał poprawnie i spójnie. Jak to się nazywa? Widziałem na to różne nazwy, w tym: 1. Prototypowanie GUI 2. Makiety GUI 3. Szkielety GUI Co dotyczy mojej sytuacji i czy są jakieś dobre zasoby, aby potwierdzić moją decyzję o utworzeniu tych diagramów?


title: Zasób, aby szybko zacząć korzystać z JavaScript?

text: Wcześniej chciałem szybko nauczyć się Pythona: Zasób, aby szybko zacząć z Pythonem? i odniosłem spory sukces (wystarczająco, aby napisać uproszczony interpreter LISP). Teraz muszę nauczyć się JavaScriptu do programowania stron internetowych przy użyciu Prototype i Scriptaculous z Ruby on Rails. Czy są jakieś zasoby do szybkiego i rozsądnego nauczenia się JavaScriptu? Nie jestem początkującym programistą, ale nie mam doświadczenia z JavaScriptem. Czy są jakieś dobre szybkie samouczki?


title: Dzielenie dokumentacji między docstringi i sfinks

text: Używam kombinacji docstrings i Sphinx do dokumentowania moich programów w Pythonie. Dzięki autodoc firmy Sphinx mogę napisać wiele dokumentacji w źródłach jako ciągi dokumentacyjne. Czy istnieje norma określająca, ile dokumentacji należy umieścić w każdym? Na przykład **przypadek 1** to index.rst .. automodule:: foo :members: and foo.py """dokumentacja""" class Foo: """dokumentacja"""" def bar(self, baz ): """więcej dokumentacji""" **przypadek 2** index.rst .. automodule:: foo i foo.py """dokumentacja .. autoclass:: Foo """ class Foo: """dokumentacja . . automethod:: bar """" def bar(self, baz): """więcej dokumentacji""" **case 3** index.rst .. automodule:: foo .. autoclass:: Foo .. automethod: : bar i foo.py """dokumentacja Klasy: Foo """ class Foo: """dokumentacja Metody: bar """" def bar(self, baz): """więcej dokumentacji""" **1 ** jest łatwy w utrzymaniu, ale w dokumentach w źródle brakuje informacji na. **2** umieszcza te informacje w źródłowych dokumentach, ale jest trochę trudniejsze w utrzymaniu i trochę trudniejsze do odczytania. **3** jest łatwy do odczytania i zawiera pełną dokumentację w kodzie źródłowym, ale jest bardzo trudny w utrzymaniu, a kiedy używasz sfinksa do generowania dokumentacji, niektóre informacje się powtarzają. (Będzie to wyglądać mniej więcej tak: foo: klasy dokumentacji: Foo Foo: metody dokumentacji: baz baz


title: Funkcje, które wywołują tylko inne funkcje. Czy to dobra praktyka?

text: Obecnie pracuję nad zestawem raportów, które mają wiele różnych sekcji (wszystkie wymagające innego formatowania) i próbuję znaleźć najlepszy sposób na uporządkowanie mojego kodu. Podobne raporty, które zrobiliśmy w przeszłości, mają bardzo duże (200+ wierszy) funkcje, które wykonują całą manipulację danymi i formatowanie raportu, tak że przepływ pracy wygląda mniej więcej tak: DataTable reportTable = new DataTable(); void RunReport() { reportTable = DataClass.getReportData(); funkcja przetwarzania dużych raportów(); wyjścieRaportDoUżytkownika(); } Chciałbym móc podzielić te duże funkcje na mniejsze kawałki, ale obawiam się, że skończę z dziesiątkami funkcji, których nie można ponownie użyć, i podobną funkcją „zrób wszystko tutaj”, której jedynym zadaniem jest aby wywołać wszystkie te mniejsze funkcje, takie jak: void largeReportProcessingFunction() { processSection1HeaderData(); obliczUśrednioneSekcja1Nagłówek(); formatSection1HeaderDisplay(); processSection1SummaryTableData(); obliczSection1SummaryTableTotalRow(); formatSection1SummaryTableDisplay(); processSection1FoterData(); getSection1FooterSummaryTotals(); formatSekcja1StopkaWyświetlanie(); processSection2HeaderData(); obliczUśrednioneSekcja1Nagłówek(); formatSection1HeaderDisplay(); obliczUśrednioneSekcja1Nagłówek(); ... } Lub, jeśli pójdziemy o krok dalej: void largeReportProcessingFunction() { callAllSection1Functions(); callAllSection2Functions(); callAllSection3Functions(); ... } Czy to naprawdę lepsze rozwiązanie? Z organizacyjnego punktu widzenia przypuszczam, że jest (tj. wszystko jest znacznie lepiej zorganizowane niż mogłoby być inaczej), ale nie jestem pewien co do czytelności kodu (potencjalnie duże łańcuchy funkcji, które wywołują tylko inne funkcje). Myśli?


title: Jak moja międzynarodowa firma może przejść z jednej platformy programistycznej na drugą?

text: Pracuję w dziale IT dużej, międzynarodowej firmy. Rozwijamy różne aplikacje intranetowe dla biznesu (Reklamacje, Rabaty, Service Desk itp.). Teraz zdecydowaliśmy się na migrację z platformy PHP na .NET (m.in. integracja z MS CRM Dynamics, Exchange i MS Office). Ponieważ istnieje około 20 różnych aplikacji, z których korzysta firma na obecnej platformie PHP, będziemy musieli wymyślić najlepszy sposób przeniesienia ich wszystkich na nową platformę. Nie chcę wchodzić w szczegóły, jak konwertować kod itp., ponieważ podczas migracji chcemy ulepszyć wszystkie te aplikacje. Wymyśliliśmy więc 2 główne sposoby przenoszenia tych aplikacji: 1. Obsługa tylko jednej platformy. Co by to oznaczało? Utwórz stronę główną i dosłownie zmigruj wszystkie aplikacje do .NET (bez ich ulepszania, podczas gdy my to robimy). Po uruchomieniu nowego intranetu zaczęlibyśmy przebudowywać zmigrowane aplikacje i ulepszać je. To by oszczędziło nam rozwijania intranetu w .NET przy jednoczesnym wspieraniu platformy PHP. 2. Obsługuj obie platformy przez jakiś czas. Oznaczałoby to zbudowanie tylko strony głównej i 1 lub 2 nowych aplikacji (które nie istnieją na naszej platformie PHP). Udostępnienie ich użytkownikom, ale nie zdejmowanie platformy PHP (wprowadzilibyśmy menu i linki, aby ułatwić użytkownikom poruszanie się między aplikacjami na stronie PHP i nowej). Następnie zaczęlibyśmy przepisywać aplikacje PHP, jednocześnie je ulepszając. Teraz nie jestem pewien, co byłoby lepsze, z jednej strony (opcja 1) potencjalnie ułatwimy użytkownikom wszystko, nie zmuszając ich do korzystania z dwóch różnych platform jednocześnie. Choć nie widzą poprawy z nowej platformy, poza tym, że wszystko wygląda ładniej, funkcjonalność aplikacji na nowej platformie będzie przez jakiś czas taka sama. Myślę też, że dołożylibyśmy sobie (dep IT) więcej pracy, ponieważ w zasadzie każdą aplikację pisalibyśmy dwa razy. Z drugiej strony w wariancie drugim (2) użytkownicy mieliby gorsze doświadczenia, ponieważ dwie platformy wyglądają inaczej, ale zdawaliby sobie sprawę z zalet nowej platformy w miarę przenoszenia nowych aplikacji. Czy ktoś z Was natknął się na coś takiego? Co byś wybrał? A może jest jeszcze inny, lepszy sposób niż te, które przedstawiłem? Chciałbym wiedzieć, co myślisz i jak byś do tego podszedł.


title: Czy praktykowanie medytacji jest dobre czy złe dla programistów?

text: Od kilku tygodni praktykuję uważność, popularną formę świeckiej medytacji, której konceptem jest skupienie się na **chwili obecnej**. To działa tak świetnie, że nie rozumiem, dlaczego nie więcej ludzi rzuca się na tę praktykę. Jest to dla mnie przydatne, ponieważ mam ważne obowiązki w kilku firmach i muszę radzić sobie z dużą presją. Programowanie to wciąż duża część mojego codziennego zajęcia, ale większość tego, co robię i będę robić w przyszłości, to praca z programistami, a nie samo programowanie. „O to właśnie kwestionuję”. Jako programista cały czas bardzo aktywnie korzystamy z przeszłości i planujemy przyszłość. Bycie w pokoju z pewnością pomoże w interakcjach interpersonalnych i komunikacji, ale tak specyficzne programowanie zadań intelektualnych jest? Czy medytacja zmniejsza naszą **zdolność** do robienia tego, na korzyść spokojniejszego i szczęśliwszego życia? **Czy medytacja jest dobra czy zła dla naszych zdolności programowania?** Bardzo mnie też zainteresuje sposób wykonywania medytacji. Na przykład używam oddychania. **AKTUALIZACJA 8 KWIETNIA 2011** : właśnie ukończyłem 8-tygodniowe szkolenie Jon Kabat Zinn (MBSR). Chociaż jest za wcześnie, aby zmierzyć korzyści z moich umiejętności programowania, mogę powiedzieć, że znacznie zmniejszyło to ogólny niepokój. Gorąco polecam program.


title: Czym różni się MVC od warstw?

text: W oparciu o tę książkę, odwołując się do stron od 156 do 159, omawia ona dwa różne typy modeli architektury oprogramowania: MVC i warstwowy. Istnieją wzorce architektury systemów rozproszonych, takie jak: Master-Slave, 2 warstwy klient-serwer, wielowarstwowy serwer kliencki, P2P. Oto moje pytania: 1) W MVC jest Model, Widok, Kontroler, który w istocie jest trójką Architektura warstwowa z Widokiem na górze, Kontrolerem pośrodku, Modelem na dole i wszystkimi trzema warstwami są w stanie komunikować się tylko z warstwami powyżej i poniżej, co jest dokładnie tym samym co architektura warstwowa. Jaka jest rzeczywista różnica między nimi? 2) Czy MVC nie jest formą architektury klient-serwer? 3) Master-Slave wygląda dokładnie jak 2-poziomowy klient-serwer, gdzie serwer jest Master, a klient jest niewolnikiem, nie rozumiem, jak Master-Slave różni się od Client-Server


title: czy obiekt w diagramie sekwencji może wysłać wywołanie komunikatu do użytkownika?

text: Muszę zrobić diagram sekwencji i nie jestem pewien, jak reprezentować dane wejściowe użytkownika. Czy prawidłowe jest wysyłanie wiadomości od obiektu do użytkownika z prośbą o wprowadzenie danych przez użytkownika, czy też wszystkie obiekty powinny być pasywne i obsługiwane tylko przez użytkownika?


title: Dobry język tłumaczony dla małego projektu osadzonego

text: Mam mikrokontroler mbed z małym ARM Cortex M3. Zasadniczo, moje efektywne zasoby dla projektu to ~25 KB RAM i ~400 KB Flash. Dla I/O będę miał klawiaturę PS/2, bufor ramki VGA (z wyjściem znakowym) i kartę SD do zapisywania/ładowania programów (może do kilku MB). Pytam, ponieważ próbuję dowiedzieć się, jaki język programowania zaimplementować na rzeczy. Szukam języka tłumaczonego, który będzie dla mnie łatwy do wdrożenia i nie nadwyręży moich zasobów. Zamierzam również, aby to było przynajmniej możliwe do pisania na samym urządzeniu, chociaż edytor może być interpretowany (tak, bootstrapping). W każdym razie przyjrzałem się kilku prostym językom. Kilku fajnych kandydatów: * Czwarty * PODSTAWOWY * Schemat? Czy ktoś zrobił coś takiego lub zna jakieś języki, które pasują do tej ustawy lub ma do tej pory uwagi na temat moich trzech kandydatów?


title: Zrozumienie makroaspektów struktur danych

text: Obecnie studiuję struktury danych, ale nadal muszę znaleźć nauczyciela/stronę/książkę z jasnym wyjaśnieniem makroaspektów tego tematu. Mam na myśli to, że większość lekcji/podręczników łączy wszystko razem, bez logicznej struktury. Zaczynają od połączonych list, potem mówią o stosach, kolejkach, priorytetach sterty i tak dalej. Ale o ile wiem, połączona lista i stos nie należą do tej samej kategorii. W końcu możesz użyć połączonej listy, aby zaimplementować różne typy struktur danych (np. stos, kolejka itp.). Czy zatem słuszne byłoby stwierdzenie, że typy struktur danych to: stos, kolejka, tablica mieszająca, sterta i drzewo; podczas gdy tablice (statyczne) i połączone listy (dynamiczne) to narzędzia, których będziesz używać do implementacji tych struktur danych? Jeśli powyższe stwierdzenie nie jest całkowicie poprawne, być może połączona lista jest rzeczywiście strukturą danych samą w sobie i dlatego użyjemy jednej struktury danych (np. połączonej listy) do zbudowania na niej innych struktur danych (np. stos)?


title: Szybkie programowe porównywanie danych „rozkładu jazdy”

text: Rozważmy dane rozkładu jazdy pociągów, gdzie każda usługa (lub „uruchomienie”) ma taką strukturę danych: public class TimeTable { public int Id {get;set;} public List<Run> Runs {get;set;} } public class Run { public List<Stop> Zatrzymuje {get;set;} public int RunId {get;set;} } public class Stop { public int StationId {get;set;} public TimeSpan? StopTime {get;set;} public bool IsStop {get;set;} } Mamy listę uruchomień, które działają na określonej linii (klasa `TimeTable`). Ponadto, chociaż mamy zestaw stacji, które są na linii, nie wszystkie przebiegi zatrzymują się na wszystkich stacjach (to znaczy, `IsStop` byłoby `false`, a `StopTime` byłoby `null`). Teraz wyobraź sobie, że otrzymaliśmy początkowy plan lekcji, przetworzyliśmy go i załadowaliśmy do powyższej struktury danych. Po zakończeniu ładowania początkowego jest ono utrwalane w bazie danych — struktura danych służy tylko do załadowania harmonogramu ze źródła i utrwalenia go w bazie danych. **Otrzymujemy teraz zaktualizowany rozkład jazdy.** Zaktualizowany rozkład jazdy może, ale nie musi zawierać żadnych zmian - nie wiemy i nie otrzymujemy informacji, czy zmiany są obecne. To, co chciałbym zrobić, to przeprowadzić porównanie dla każdego biegu w efektywny sposób. Nie chcę po prostu zamieniać każdego biegu. Zamiast tego chcę mieć zadanie w tle, które jest uruchamiane okresowo, które pobiera zaktualizowany zestaw danych harmonogramu, a następnie porównuje go z bieżącym harmonogramem. Jeśli zostaną znalezione różnice, zostaną podjęte pewne działania (nie związane z pytaniem). Początkowo myślałem o jakimś procesie sum kontrolnych, w którym mógłbym na przykład załadować oba przebiegi (czyli ten z otrzymanego nowego harmonogramu i ten, który został utrwalony w bazie danych) do struktury danych, a następnie dodać w górę wszystkich składników godzinowych `StopTime` i wszystkich składników minutowych `StopTime` i porównaj wyniki (tj. suma godzin i suma minut byłyby takie same, a różnice wprowadzone w przypadku zmiany czasu zatrzymania , przystanek usunięty lub dodany nowy). Czy byłby to prawidłowy sposób sprawdzenia różnic, czy też istnieje lepszy sposób podejścia do tego problemu? Widzę problem polegający na tym, że na przykład jeden przystanek jest zmieniony na 2 minuty wcześniej, a inny zmieniony na 2 minuty później miałby zmianę zerową netto. Czy też nad tym się zastanawiam i czy prościej byłoby brutalnie sprawdzić wszystkie przystanki, aby upewnić się, że 1. Zaktualizowany przebieg zatrzymuje się na tych samych stacjach; i 2. Każdy przystanek jest w tym samym czasie


title: Czy istnieje standard dla czytelnych maszynowo opisów usług RESTful?

text: Współdziałałem z kilkoma RESTful API, które dostarczały doskonałej dokumentacji dla ludzi i opisowych identyfikatorów URI, ale żaden z nich nie wydaje się zwracać czytelnych dla maszyn opisów siebie. Pisanie własnych metod, które łączą właściwe ścieżki, nie jest zbyt trudne, a wiele bibliotek API specyficznych dla języka jest już tylko otoczkami wokół żądań RESTful. Ale następny poziom abstrakcji wydaje się naprawdę przydatny: biblioteka, która może czytać własną dokumentację API, która może być odczytywana maszynowo i automatycznie generować opakowania, być może z wywołaniem jakiegoś standardowego URI, takiego jak `base_url + '/documentation'` Czy istnieją jakieś standardy dokumentacja API do odczytu maszynowego? Czy robię REST źle? Jestem stosunkowo nowym programistą, ale wydaje mi się to dobrym pomysłem.


title: Co mam zrobić z tym instalatorem, używając narzędzi takich jak Wise, InstallShield i InstallAnywhere?

text: Muszę znaleźć narzędzie instalacyjne, które może wykonać następujące czynności w systemie Windows 7, Windows Server 2008 lub Windows Vista (wersja 32-bitowa i 64-bitowa): 1. Zainstaluj IIS 7, jeśli nie jest zainstalowany 2. Zainstaluj .NET 4.0, jeśli nie zainstalowany 3. Zarejestruj ASP.NET 4.0, jeśli to konieczne 4. Zainstaluj SQL Server 2008 Express Edition, jeśli nie jest zainstalowany 5. Zainstaluj moją aplikację internetową w IIS c:\inetpub\wwwroot\ poprzez rozpakowanie pliku ZIP 6. Utwórz bazę danych, zaloguj się i uruchom skrypty 7 Zaktualizuj plik _web.config_ aplikacji internetowej o informacje z bazy danych 8. Uruchom dwie inne instalacje MSI w trybie cichym (ta powinna być łatwa) Używałem już wcześniej InstallShield z aplikacją Delphi, którą napisałem, ale to o wiele więcej skomplikowany. Nigdy nie „wdrażałem” aplikacji internetowej na komputerach klienckich i potrzebujemy, aby ta instalacja była kuloodporna, ponieważ większość klientów, którzy instalują, nie ma dużej wiedzy informatycznej. Jakie jest doświadczenie korzystania z tych narzędzi? Kupimy narzędzie, które uznamy za najlepsze - ale kiedy już to zrobimy, nie będzie już odwrotu - więc naprawdę chcę podjąć świadomą decyzję.


title: Co należy umieścić w atom:author w przypadku treści generowanych automatycznie w kanale Atom?

text: Niedawno zacząłem zagłębiać się w kanały dystrybucji Atom i planuję migrację niektórych usług internetowych, które uruchamiamy, do bardziej znormalizowanego modelu przy użyciu Syndication Atom i protokołu publikowania Atom. Treść większości kanałów dystrybucji nie jest jednak tworzona przez konkretnego użytkownika, ale raczej automatycznie generowana przy użyciu danych z różnych baz danych. Pewnie teraz trochę utknąłem w głowie, ale po prostu nie mogę się zdecydować, co powinno znaleźć się w obowiązkowych polach `atom:author`. W specyfikacji stwierdza się: Konstrukcja Person to element opisujący osobę, korporację lub podobny podmiot(...) Zatem pole autora powinno zawierać nazwę naszej firmy, programistów, którzy napisali/zarządzają generatorem, lub coś zupełnie innego? Co byłoby najbardziej poprawne semantycznie?


title: Wybór projektu podczas wykonywania wielowątkowości w C++

text: OK, więc **background**: Mam małą aplikację/moduł "serwerowy" napisany w C++. Jest to rodzaj aplikacji tunelującej, która zapewnia ustandaryzowane API przez TCP/IP[a], az drugiej strony komunikuje się z "prawdziwym" serwerem przez TCP/IP[a] przez swój własny interfejs. Nawet oficjalnie nie obsługuje wielu klientów, ale ze względu na z natury wielowątkowy charakter przetwarzania, które jest wykonywane przez serwer i klienta (plus asynchroniczne wywołania zwrotne), sama aplikacja tunelująca jest wielowątkowa i działa całkiem dobrze podczas normalnych operacji. Aplikacja wykorzystuje kilka prostych muteksów (Win32 CRITICAL_SECTIONS) do blokowania ścieżek kodu, które przy jednoczesnym wykonywaniu mogą powodować problemy i działa to całkiem dobrze w praktyce. Mały obrazek: [serwer zastrzeżony] [aplikacja do tunelowania] [klient] <--1- <--1- (wywołania) |<--2- <--3- <--3- | -2--> --1-> (zwroty) -1--> --3-> -3--> -a--> (wywołania zwrotne) -a1-> -b--> | -a2-> Więc prawie wszystko idzie w odniesieniu do łańcuchów wywołań. * * * Zidentyfikowaliśmy teraz szereg problemów w skrajnych przypadkach, takich jak wywołania podczas inicjowania lub zamykania serwera i/lub aplikacji tunelującej, i mam problem z ich prawidłowym naprawieniem, ponieważ są one w większości związane z okresami istnienia obiektów i wątków wielowątkowych i po prostu rzucenie większej liczby muteksów lub większej liczby blokad na problem naprawdę go nie rozwiązuje. * * * Jeśli chodzi o **Pytanie** : _Czego szukam_ to porady i wskazówki dotyczące _jak napisać kod wielowątkowy (C++), który będzie działał we wszystkich przypadkach od samego początku_ i nie będzie wymagał tylko blokowania wszystkiego. Ewentualnie ze szczególnym naciskiem na kontekst intensywnej wielowątkowości w scenariuszu komunikacji sieciowej. Wszelkie spostrzeżenia mile widziane. * * * Uwagi: [a] : Jest to interfejs komunikacyjny CORBA. Ale problemy, które widzę, tak naprawdę nie są związane z używanym mechanizmem przesyłania wiadomości, ponieważ część przesyłania wiadomości na przewodzie działa bardzo dobrze.


title: Owijając mój umysł wokół notacji prefiksowej?

text: Czytam o LISP-ie. Rozumiem, jak działa notacja prefiksowa na pewnym poziomie, ale zastanawiałem się, czy istnieją jakieś sztuczki, aby była intuicyjna.


title: Dobre wprowadzenie do metaprogramowania w Prologu?

text: Chciałbym na przykład tworzyć programy imperatywne jako wyjście Prologa (shadery karty graficznej), a także programy sterowane zdarzeniami (logika gry) ... także chciałbym się ogólnie nauczyć metaprogramowania w Prologu. Wierzę, że mogą być jakieś spostrzeżenia lub rady, jak to zrobić; Nie chcę skakać do tego nie przygotowany i hackować, dopóki nie stworzę działających programów. Zastanawiam się, jakie jest dobre wprowadzenie do metaprogramowania w Prologu? Dziękuję :)


title: Potrzebujesz wzorca OOP lub strategii dla właściwości „podłączanej”

text: Używam OOP i MVVM w aplikacji c# WPF. Celem jest, aby wynikowy obiekt (powiązany z danymi z interfejsem użytkownika) dokładnie reprezentował produkt. Konkretny obszar produktu jest wysoce konfigurowalny. Dla celów koncepcyjnych wyobraźmy sobie łódź, która może mieć różne środki napędu. Zanurzony silnik śmigła lub silnik wentylatora nawodnego mogą być zamocowane na rufie i będą miały bardzo różne właściwości. Na poziomie modelu mógłbym mieć wpisaną właściwość interfejsu dla tego `PropulsionDevice`, z interfejsem definiującym wszystkie wymagane informacje potrzebne do wyceny i ważenia gotowego produktu. Jak przypisać tę właściwość na podstawie danych wejściowych użytkownika, nie jestem pewien, co zrobić. Tworzenie wyliczenia z elementem dla każdej klasy implementującej mój interfejs i prezentowanie go w 'ComboBox' wydaje się niezgrabne i naiwne (rozłączenie między elementem wyliczenia a klasą wydaje się błędne). Ale nie jestem pewien, czy metaprogramowanie z niestandardowymi atrybutami lub używanie odbicia byłoby lepszym rozwiązaniem. Może jest inna opcja? Jakieś sugestie, jak pozwolić na elastyczność w moich klasach c#, a także jak to przedstawić w interfejsie użytkownika?


title: Uzasadnij wyjście poza IE7

text: Pracuję w zamkniętym środowisku, które definiuje obsługiwane przeglądarki w całej organizacji. Innymi słowy: nie możesz go używać, chyba że jest to zatwierdzona instalacja. Biorąc pod uwagę, że (niebawem wcześniej) Twitter Bootstrap i jQuery planują zrezygnować z obsługi IE7, a sam IE jest od jakiegoś czasu w wersji 9, chciałbym przedstawić przemyślany argument za przesunięciem mojej organizacji poza IE7 . Nasze środowisko ma Chrome, ale jego przyjęcie jeszcze się nie rozpaliło, a w każdym razie wszystko, czego potrzebujemy do zbudowania, na zawsze będzie zgodne z oczekiwaniami IE, na dobre i na złe. Jakie są inne zasoby (w szczególności związane z bezpieczeństwem), które mogą mi pomóc w przejściu poza IE7? ‡ – być może lepszym określeniem byłoby „wycofanie obsługi IE7”


title: Dlaczego powinienem używać Bowera?

text: Mogę w pełni docenić zalety menedżera pakietów, takiego jak Python PIP, Node npm lub Ruby Gems, ponieważ robią znacznie więcej niż dodawanie plików do ścieżki aplikacji. Może brakuje mi sensu lub jestem tępy, ale oto **negatywy**, które widzę: * Oddzielny krok podczas budowania projektu * Oddzielna zależność do zainstalowania przez innego menedżera pakietów (yo swa) * Więcej bałagan w projektach root z `bower.json` i / lub `.bowerrc` * Poleganie na tym, że rejestr jest aktualny, poprawny i dostępny * Niektóre importy / odniesienia do takich rzeczy jak obrazy nie będą działać **Pozytywy* * Widzę, że są to: * Nie muszę ręcznie pobierać zależności * Opcjonalnie instaluj pakiety w ramach rusztowania na podstawie monitów użytkownika lub podobnych. Naprawdę chciałbym poznać korzyści, których nie jestem świadomy, oraz Powinienem powiedzieć, że nie próbuję być prowokacyjny, naprawdę chcę wiedzieć.


title: Wymagania funkcjonalne / specyfikacja i związek z DEV i QA

text: Stan wymagań funkcjonalnych „CO” należy zrobić z punktu widzenia użytkownika Specyfikacja funkcjonalna określa „JAK” należy to zrobić z technicznego punktu widzenia. Czy zespoły QA koncentrują się na wymaganiach funkcjonalnych, podczas gdy zespół programistów skupia się głównie na specyfikacji funkcjonalnej, chociaż muszą rozumieć wymagania funkcjonalne? Zakładam, że kontrola jakości zatwierdzi produkt, o ile spełnione zostaną wymagania funkcjonalne, niezależnie od tego, czy przestrzegana jest specyfikacja funkcjonalna, czy nie. Czy moje założenie jest prawidłowe?


title: Czy niedoświadczony programista potrzebuje IDE?

text: Czytając to drugie pytanie, zastanawiam się, czy powinienem (jako absolutnie początkujący programista PHP) trzymać się WAMP i Notepad++, czy też przełączyć się na jakieś IDE, takie jak Eclipse. To zrozumiałe, że wykwalifikowani programiści skorzystają na dużym, błyszczącym środowisku IDE. Ale **dlaczego absolutnie początkujący powinien używać IDE?** Czy korzyści przeważają nad dodatkowym wyzwaniem związanym z nauką IDE poza nauką rozwoju? **Aktualizacja wyjaśniająca:** Moim celem jest zdobycie podstawowego doświadczenia w programowaniu. Wybierając PHP i WAMP (oraz FogBugz i Kiln) mam nadzieję uniknąć konieczności poruszania się po skomplikowanych / niechlujnych szczegółach systemu operacyjnego, kompilacji itp. i skoncentrować się na podstawowych funkcjach, takich jak formularz rejestracji użytkownika online. Mam dużo wiedzy teoretycznej na uniwersytecie dziesięć lat temu, ale żadnego praktycznego doświadczenia. Chcę temu zaradzić za pomocą projektu hobbystycznego, który byłby podobny do aplikacji internetowej, którą można sprzedawać w prawdziwym świecie. Jest tyle pytań, które można zadać. Tak wiele pułapek, w które prawdopodobnie muszę wpaść. To pytanie to tylko jeden element (moje pierwsze!) tej układanki.


title: Programowanie obiektowe a programowanie wektorowe

text: Jestem rozdarty między projektowaniem obiektowym a wektorowym. Uwielbiam zdolności, strukturę i bezpieczeństwo, jakie przedmioty nadają całej architekturze. Ale jednocześnie szybkość jest dla mnie bardzo ważna, a posiadanie prostych zmiennych pływających w tablicy naprawdę pomaga w językach/bibliotekach opartych na wektorach, takich jak Matlab lub numpy w Pythonie. Oto fragment kodu, który napisałem, aby zilustrować mój punkt Problem: Dodawanie liczb zmienności Tow. Jeśli x i y są dwiema liczbami zmienności, suma zmienności wynosi (x^2 + y^2)^0,5 (przy założeniu pewnego warunku matematycznego, ale to nie jest tutaj ważne). Chcę wykonać tę operację bardzo szybko, a jednocześnie muszę się upewnić, że ludzie nie dodają zmienności w niewłaściwy sposób (x+y). Oba są ważne. Projekt oparty na obiektach obiektowych mógłby wyglądać mniej więcej tak: from datetime import datetime from pandy import * class Zmienność: def __init__(self,wartość): self.value = wartość def __str__(self): return "Zmienność: "+ str(self. value) def __add__(self,other): return Volatility(pow(self.value*self.value + other.value*other.value, 0.5)) (Poza tym: dla tych, którzy są nowicjuszami w Pythonie, **add** to tylko funkcja, która zastępuje operator „+”) Powiedzmy, że dodaję listy wartości zmienności n = 1000000 vs1 = Series(map(lambda x: Volatility(2*x-1.0), range(0,n))) vs2 = Series(map(lambda x: Volatility(2*x+1,0)), range(0,n))) (Poza tym: Seria w Pythonie jest rodzajem listy z indeksem) Teraz chcę dodać dwa: t1 = datetime.now() vs3 = vs1 + vs2 t2 = datetime.now() print t2-t1 Tylko dodawanie działa w 3,8 sekundy na moim komputerze, wyniki mam podane nie zawiera w ogóle czasu inicjalizacji obiektu, jest to tylko kod dodawania, który został zmierzony czasowo. Jeśli uruchomię to samo używając numpy arrays: nv1 = Series(map(lambda x: 2.0*x-1.0, range(0,n)))) nv2 = Series(map(lambda x: 2.0*x+1.0, range( 0,n))) t3 = datetime.now() nv3 = numpy.sqrt((nv1*nv1+nv2*nv2)) t4 = datetime.now() print t4-t3 Działa za 0,03 sekundy. To ponad 100 razy szybciej! Jak widać, metoda OOP daje mi dużo pewności, że ludzie nie będą dodawać Zmienności w niewłaściwy sposób, ale metoda wektorowa jest po prostu szalenie szybka! Czy istnieje projekt, w którym mogę uzyskać jedno i drugie? Jestem pewien, że wielu z was spotkało się z podobnymi wyborami projektowymi, jak to wypracowaliście? Wybór języka jest tutaj nieistotny. Wiem, że wielu z was radziłoby używać C++ lub Javy, a kod i tak może działać szybciej niż języki wektorowe. Ale nie o to chodzi. Muszę używać Pythona, ponieważ mam wiele bibliotek niedostępnych w innych językach. To moje ograniczenie. Muszę w nim zoptymalizować. I wiem, że wiele osób sugerowałoby zrównoleglenie, gpgpu itp. Ale najpierw chcę zmaksymalizować wydajność pojedynczego rdzenia, a potem mogę zrównoleglić obie wersje kodu. Z góry dziękuję!