title: Jeśli model sprawdza poprawność danych, czy nie powinien zgłaszać wyjątków w przypadku złych danych wejściowych?

text: Czytając to pytanie SO, wydaje się, że zgłaszanie wyjątków w celu walidacji danych wejściowych użytkownika jest mile widziane. Ale kto powinien weryfikować te dane? W moich aplikacjach wszystkie walidacje są wykonywane w warstwie biznesowej, ponieważ tylko sama klasa tak naprawdę wie, które wartości są prawidłowe dla każdej z jej właściwości. Gdybym miał skopiować reguły walidacji właściwości do kontrolera, możliwe, że zmienią się reguły walidacji i teraz są dwa miejsca, w których należy dokonać modyfikacji. Czy moje założenie, że walidację należy przeprowadzać w warstwie biznesowej, jest błędne? # Co robię Więc mój kod zwykle kończy się tak: <?php class Osoba { private $name; prywatny $wiek; funkcja publiczna setName($n) { $n = trim($n); if (mb_strlen($n) == 0) { wyrzuć nowy ValidationException("Nazwa nie może być pusta"); } $to->nazwa = $n; } public function setAge($a) { if (!is_int($a)) { if (!ctype_digit(trim($a))) { wyrzuć nowy ValidationException("Wiek $a jest nieprawidłowy"); } $a = (int)$a; } if ($a < 0 || $a > 150) { throw new ValidationException("Wiek $a jest poza granicami"); } $ten->wiek = $a; } // inne pobierające, ustawiające i metody } W kontrolerze po prostu przekazuję dane wejściowe do modelu i łapię wyrzucone wyjątki, aby pokazać błąd(y) użytkownikowi: <?php $person = new Person(); $błędy = tablica(); // globalne try dla wszystkich wyjątków innych niż ValidationException try { // walidacja i proces (jeśli wszystko ok) try { $person->setAge($_POST['age']); } catch (ValidationException $e) { $errors['wiek'] = $e->getMessage(); } spróbuj { $person->setName($_POST['name']); } catch (ValidationException $e) { $errors['name'] = $e->getMessage(); } ... } catch (Exception $e) { // zarejestruj błąd, wyślij 500 wewnętrzny błąd serwera do klienta // i zakończ żądanie } if (count($errors) == 0) { // process } else { showErrorsToUser($errors); } Czy to zła metodologia? # Alternatywna metoda Czy może powinienem utworzyć metody dla `isValidAge($a)`, które zwracają prawdę/fałsz, a następnie wywoływać je z kontrolera? <?php class Osoba { private $name; prywatny $wiek; funkcja publiczna setName($n) { $n = trim($n); if ($this->isValidName($n)) { $this->name = $n; } else { wyrzuć nowy wyjątek("Nieprawidłowa nazwa"); } } public function setAge($a) { if ($this->isValidAge($a)) { $this->age = $a; } else { wyrzuć nowy wyjątek("Nieprawidłowy wiek"); } } funkcja publiczna isValidName($n) { $n = trim($n); if (mb_strlen($n) == 0) { return false; } zwróć prawdę; } funkcja publiczna isValidAge($a) { if (!is_int($a)) { if (!ctype_digit(trim($a))) { return false; } $a = (int)$a; } if ($a < 0 || $a > 150) { return false; } zwróć prawdę; } // inne gettery, settery i metody } A kontroler będzie w zasadzie taki sam, tylko zamiast try/catch są teraz if/else: <?php $person = new Person(); $błędy = tablica(); if ($osoba->isValidAge($wiek)) { $osoba->setAge($wiek); } catch (Wyjątek $e) { $errors['wiek'] = "Nieprawidłowy wiek"; } if ($person->isValidName($name)) { $person->setName($name); } catch (Wyjątek $e) { $errors['name'] = "Nieprawidłowa nazwa"; } ... if (count($errors) == 0) { // proces } else { showErrorsToUser($errors); }      # Więc co powinienem zrobić? Jestem bardzo zadowolony z mojej oryginalnej metody, a moim kolegom, którym ją pokazałem, ogólnie się spodobała. Mimo to, czy powinienem zmienić metodę na alternatywną? A może robię to strasznie źle i powinienem poszukać innej drogi?


title: system głosowania do wyboru kolejnego zestawu cech produktu

text: Mój produkt właśnie wdrożył 2.0. Teraz jest wiele rzeczy do zaplanowania na kolejny sprint. Z listy 5-10 pozycji musimy poprosić wszystkich naszych pracowników o zamówienie tych 10 pozycji w zależności od ich ważności. Wszystko powinno być jednogłosowe i anonimowe. Czy jest jakaś strona oferująca tę usługę? Można to zrobić w godzinę, ale personelowi nie będzie wyglądał anonimowo, bez względu na to, co powiem. (Przepraszam, jeśli to niewłaściwe miejsce, aby zapytać. Nie mogłem znaleźć innego.)


title: Tworzenie witryny tylko do przekierowywania adresów URL (.NET MVC) ze względu na zmieniające się domeny i adresy URL

text: Chciałbym tylko usłyszeć o jakichkolwiek doświadczeniach z tworzeniem (prostej) witryny do przekierowywania żądań. Zasadniczo mamy wiele domen, ale gdy dodajemy więcej domen i zmieniamy adresy URL, pojawia się ogromny problem z utrzymaniem starych linków. Omawiając to, rozważamy użycie jednej stałej witryny do określenia, gdzie znajduje się obecny adres URL. Pomysł byłby dość prosty, np. `links.url.com` a następnie parametr do znalezienia wiersza bazy danych zawierającego m.in. domenę, parametry i wszelkie inne pola niezbędne do pomyślnego przekierowania. na przykład: `links.url.com/id=12345` odczytałoby nową domenę, np. `url2.com` i `parameters id=324324324&id2=34234`, aby kontroler po prostu przekierował do `url2.com/id=324324324&id2=34234`. Czy to dobry sposób na radzenie sobie ze zmieniającymi się adresami URL, gdy zmieniają się domeny i adresy URL? Czy istnieją wady tego podejścia lub lepsze sposoby na zmianę adresu URL?


title: Co to jest programowanie oparte na wzorcach?

text: Czy ktoś może wyjaśnić obsesję na punkcie wzorców i antywzorców w programowaniu? Pytam, bo absolutnie nie mam pojęcia, co oznaczają te wzory. W obliczu zadania programistycznego zastanawiam się trochę nad problemem, zapisuję kilka struktur danych, które moim zdaniem będą istotne, prototypuję rozwiązanie, oddzielam niektóre moduły i iteruję. Nigdzie w trakcie nie myślę „Och, potrzebuję tutaj wzoru FunkyLookyTastic”.


title: Java kontra C# — perspektywa produktywności

text: Jeśli masz kilkuletnie doświadczenie w pracy z Javą i kilkuletnie doświadczenie w pracy z C# i .NET, cenię Twoją opinię na temat różnic w produktywności tworzenia oprogramowania między tymi dwoma środowiskami. Jeden z naszych klientów rozważa wymianę istniejącego oprogramowania. Ponieważ wymiana będzie wymagała ok. 10-15 osoboletnia praca, wybór dla Java lub .NET, w oparciu o różnice w wydajności między nimi, może znacząco wpłynąć na wymaganą inwestycję i czas wprowadzenia produktu na rynek. Czy byłbyś w stanie podać nam informację o różnicach w produktywności tworzenia oprogramowania między Javą a C#/.NET? Wolałbym otrzymać odpowiedź w następujący sposób: > Moje doświadczenie opiera się na X-letnim doświadczeniu w pracy z Javą i X-letnim doświadczeniu w pracy z C#/.NET. Java jest X% bardziej wydajna niż C#.NET lub > C#/.NET jest X% bardziej wydajna niż Java, jeśli weźmiesz pod uwagę następujące >.


title: Zatrudnianie w start-upach vs. firmy o ugruntowanej pozycji

text: Zawsze się nad tym zastanawiałem i być może doświadczeni ludzie mogą to komentować. Zawsze czytam, że duże firmy programistyczne o ustalonej pozycji, takie jak Google, Microsoft itp., zawsze obawiają się zatrudniania inżynierów oprogramowania/(lub innych pokrewnych specjalistów), którzy nie spełniają dokładnie wymagań dotyczących stanowiska i woleliby odrzucić zamknięcie „Tak/Może " decyzja. Istnieje również ogólne przekonanie, że start-upy są generalnie bardziej skłonne do zatrudniania takich „niedoskonałych” pracowników. Ale wydaje mi się to sprzeczne z intuicją: start-upy są na ogół znacznie mniejsze i mają ograniczone zasoby, więc faktycznie potrzebowałyby zatrudnienia „10/10”, podczas gdy firmy o ugruntowanej pozycji z większymi zespołami i większymi zasobami byłyby skłonne podjąć (niewielkie) ryzyko na wynajem. Czy ktoś ma jakieś uwagi na ten temat z własnego doświadczenia? Dziękuję,


title: Jak zweryfikować kod, którego kompilacja może zająć dużo czasu?

text: Kontynuacja mojego poprzedniego pytania: Jakie jest najlepsze podejście do kodowania w środowisku powolnej kompilacji Podsumowując: utknąłem w dużym systemie oprogramowania, z którym ideologia TDD „testuj często” nie działa. A co gorsza, funkcje takie jak prekompilowane nagłówki/wielowątkowa kompilacja/linkowanie przyrostowe itp. nie są dla mnie dostępne - stąd myślę, że najlepszym wyjściem byłoby dodanie rozbudowanego logowania do systemu i rozpoczęcie "kodowanie w dużych kawałkach", które rozumiem jako kod najpierw przez dwie-trzy godziny (w przeciwieństwie do 15-20 minut w TDD) - dokładnie obejrzyj kod przez 15 minut i dopiero potem wykonaj kompilację i uruchom testy. Ponieważ zajmuję się TDD od dłuższego czasu, moje umiejętności sprawdzania kodu / weryfikacji kodu stały się zardzewiałe (tak naprawdę nie potrzebujesz tego aż tak bardzo, jeśli możesz szybko zweryfikować, co zrobiłeś w 5 sekund, uruchamiając test lub dwa ) - więc jestem po zaleceniach, jak ponownie nauczyć się umiejętności weryfikacji kodu źródłowego/wykrywania błędów. Wiem, że mogłem to zrobić z łatwością jakieś 5-10 lat temu, kiedy nie miałem zbyt dużego wsparcia ze strony kompilatorów/narzędzi do testowania jednostek, które miałem do niedawna, więc powinien być sposób na powrót do podstaw.


title: Jak ważne są codzienne kompilacje?

text: Jednym z kryteriów testu Joela są codzienne kompilacje. Chodzi o to, że jeśli kompilacja jest zepsuta, ktokolwiek ją zepsuł, jest w pobliżu, aby to naprawić. Jeśli kompilacji nie da się naprawić, wszyscy będą musieli sprawdzić starą wersję i nad nią popracować. Rozumiem, że może to być bardzo złe w przypadku scentralizowanej kontroli wersji, gdzie ważne jest unikanie łączenia i rozgałęziania w jak największym stopniu, ale brzmi to tylko jak niewielka uciążliwość dla rozproszonej kontroli wersji. Czy zgadzasz się z tym? Czy istnieją inne powody, dla których codzienne budowanie jest ważne?


title: Czy Objective-C jest językiem interpretowanym czy kompilowanym?

text: Chcę wiedzieć, czy Objective-C jest językiem interpretowanym, czy kompilowanym.


title: Przejście z C# do C++ i wskazówki?

text: Używam `C#` już od jakiegoś czasu i w celu dalszego rozwoju mojej kariery i poszerzenia mojej wiedzy programistycznej chciałbym przejść do `C++`. `C#` jest bardzo przydatny i szybki w obsłudze, ale ponieważ mój zespół i ja będziemy tworzyć projekty na dużą skalę, muszę rozważyć pracę na niższym poziomie języka z kilku powodów. Większość firm komercyjnych używa języka C/C++ ze względu na wysoką wydajność i przenośność. Oczywiście, `C#` niekoniecznie jest zły w porównaniu do `C` czy `C++`, ale ja po prostu wolę mieć inne narzędzie do każdego zadania. Więc czytam, że C++ jest trudniejsze, ponieważ jest to język niskiego poziomu, kod maszynowy i nie ma zarządzania pamięcią. Ale fakt, że jest to kod maszynowy, zmniejsza również ilość zużywanej pamięci. Język jest trudny do pracy, ale w pewnym sensie trudność sprawia, że jest to potężny język. Został stworzony, aby był szybki i wydajny, kod maszynowy, ale to utrudnia zrozumienie i naukę „ponieważ jest bliżej maszyny”. * * * Podjąłem decyzję i chcę się nauczyć `C++`, więc o jakich wskazówkach należy pamiętać podczas nauki? Najlepiej unikać nabierania złych nawyków, zamiast próbować je później łamać, bezpieczniej niż żałować. Planuję skorzystać z podanych tutaj zasobów, ale wolałbym wszelkie osobiste rekomendacje, książki lub przewodniki online, być może takie, które mogą być łatwo zrozumiane przez kogoś, kto ma rzetelną wiedzę na temat `C#`.


title: co to jest rozmowa telefoniczna?

text: Więc... jutro mam zamiar przeprowadzić telefoniczną rozmowę z firmą. Nigdy wcześniej nie miałem rozmowy telefonicznej, więc nic o tym nie wiem poza tym, że zamierzam z kimś porozmawiać przez telefon. To jest stanowisko programisty PHP. Czy będzie zadawać tylko pytania dotyczące PHP? czy będzie zadawał inne pytania? Proszę doradź mi!


title: Co muszę wiedzieć, aby opracować aplikację bez papieru przy użyciu platformy .NET?

text: Chcę opracować aplikację bez papieru w .NET, aby zmniejszyć zużycie papieru na mojej uczelni. Będzie zawierał dane i raportowanie Exchange. Czego muszę się uczyć, zanim zacznę?


title: Możliwe następstwa włamania

text: Po zhakowaniu firmy często podają liczby i szczegóły dotyczące tego, jaka część ich danych została naruszona, np. „13 tys. użytkowników i haseł”. Skąd wiesz, co haker zrobił na twoim serwerze po możliwym włamaniu?


title: Która z nich jest lepsza metoda offline dla aplikacji na dużą skalę?

text: Mamy witrynę do zarządzania dużymi danymi, z której korzysta kilka usług. Niektórzy z naszych klientów mają przestoje (nie mają dostępu do sieci przez godzinę lub dwie). Chcemy, aby nasza witryna obsługiwała przeglądanie danych offline i zarządzanie inwentarzem (typowe wyszukiwanie danych oraz dodawanie/usuwanie), a gdy użytkownik przejdzie do trybu online, możemy zsynchronizować zmiany z powrotem do naszej centralnej bazy danych. Klienci korzystają z kilku platform, takich jak Windows, iOS itp. Przyglądaliśmy się kilku różnym opcjom, oto główne opcje - Twórz aplikacje internetowe offline obsługiwane w HTML5. Opracuj mechanizm „zastępczy” i wchodź w interakcję z danymi z pamięci podręcznej aplikacji, jak wyjaśniono tutaj (http://www.htmlgoodies.com/html5/tutorials/introduction-to-offline-web- applications-using-) rozwiązanie wieloplatformowe. Pamiętam stare MONO, które było popularne. Oto post (Co sugerujesz dla aplikacji wieloplatformowych, w tym internetowych aplikacji wieloplatformowych, w tym internetowych) i inny (Wybór technologii do rozwoju międzyplatformowego (komputer stacjonarny i telefon)? ?rq=1) Zdaję sobie sprawę, że rozwiązanie desktopowe może być trudne w utrzymaniu i powodować pewne problemy ze zgodnością oraz wymagające środowisk testowych. Czy HTML5 może obsłużyć złożoność i przepływ danych na średnim lub wysokim poziomie? A może lepiej polegać na aplikacji komputerowej, aby uzyskać lepszą skalowalność i wydajność?


title: Czy możliwe jest automatyczne sprawdzanie jakości kodu za pomocą metryk?

text: Od kilku lat jestem wielkim fanem wykorzystywania narzędzi statycznej analizy kodu do sprawdzania jakości kodu źródłowego. Zajmujemy się głównie tworzeniem C#, więc NDepend było dla mnie najlepszym sposobem. Najczęściej analizę wykonuję ręcznie, np. raz na dwa tygodnie. Ostatnio rozmawiałem z uczelnią, czy powinniśmy włączyć NDepend do naszego procesu ciągłej integracji, aby kompilacja automatycznie zmieniała kolor na czerwony, jeśli na przykład metoda ma zbyt dużą złożoność. Uważam, że nie da się zdefiniować metryk, które są ważne dla całego kodu. Myślę, że albo dostaniesz drogę do wielu „fałszywych skarg” - kod, który ogólnie jest w porządku, ale nie pasuje do metryk. Poniższy kod na przykład ma bardzo dużą złożoność, nawet jeśli myślę, że czasami nie można temu zapobiec. if (remoteResult == RemoteResult.Dummy1 || remoteResult == RemoteResult.Dummy2 || remoteResult == RemoteResult.Dummy3 || remoteResult == RemoteResult.Dummy4 || ... Oczywiście zadziałałoby również zwiększenie progów metryk , ale w tym przypadku straciłbym cenne informacje.Innym przykładem jest np. maksymalna liczba członków dla klasy.Chciałbym, aby ta była mniejsza niż 10 dla klas z dużą ilością logiki.Ale z drugiej strony jest ich wiele” modeli domeny” z więcej niż 10 właściwościami. Nie chciałbym wyodrębniać kolejnej klasy tylko ze względu na metrykę - ponieważ obniżyłoby to czytelność, a nie poprawiłoby jej, co powinno być celem metryk jakości kodu. Czy uważasz, że automatyczne sprawdzanie jakość kodu za pomocą metryk jest możliwa? Jeśli tak, dla wszystkich lub tylko dla określonych metryk? (Lista typowych metryk NDepend znajduje się pod adresem http://www.ndepend.com/Metrics.aspx )


title: synchronizacja kodu z repozytorium/kopią zapasową

text: Robię mały projekt oprogramowania na moim lokalnym komputerze. Jestem jedyną osobą, która nad tym pracuje. Chciałbym codziennie tworzyć kopie zapasowe w chmurze, aby gdyby coś się stało z moim dyskiem twardym, miałem różne kopie cofające się w czasie. Mam konto pudełkowe, chociaż wydaje się, że chce się synchronizować w sposób ciągły i przy ciągłych zmianach plików z kodem, tak naprawdę tego nie chcę. Czy ktoś może polecić jakąkolwiek witrynę lub oprogramowanie, które umożliwi mi tworzenie kopii zapasowych w zewnętrznej lokalizacji online? Cieszę się, że mogę ręcznie rozpocząć ten proces pod koniec każdego dnia.


title: Dlaczego pliki binarne ładują się szybciej niż alfanumeryczne pliki tekstowe?

text: Zauważyłem, że kiedy ładuję/przechowuję duże pliki danych w formacie binarnym, program działa znacznie szybciej niż gdybym ładował dane z pliku zakodowanego w ASCII. Dlaczego tak jest? Dane w moim przypadku są proste, z ograniczonym przetwarzaniem innym niż `read()` lub `fscanf()`.


title: Jak zrozumieć piękno UNIX-a?

text: Niektórzy z moich znajomych mówią, że UNIX jest piękny i prosty. Ale naprawdę nie wiem, co mają na myśli. Dlaczego tak mówią? Dla mnie UNIX to po prostu nudny wiersz poleceń z różnymi powłokami. Jak mogę doświadczyć piękna systemu UNIX? Czy możesz podzielić się jakimkolwiek doświadczeniem?


title: Przypisanie zmiennych globalnych w stylu Pythona

text: Projektuję język ze składnią Pythona, w tym swobodne tworzenie zmiennych według przypisania. Zastanawiam się w tej chwili dokładnie, jak poradzić sobie z przypisaniem do zmiennych globalnych (i zmiennych obiektowych/klasowych, skoro implementuję klasy jako zakresy). W samym Pythonie domyślnie próba utworzy zamiast tego zmienną lokalną: x = 1 def f(): x = 2 # tworzy zmienną lokalną, ale można to zastąpić deklaracją `global`: x = 1 def f() : global x x = 2 # aktualizuje zmienną globalną Zamierzam zaimplementować prefiks `.` do odwoływania się do zmiennych w zewnętrznych zakresach (trochę podobny do prefiksu `::` w C++, ale prawdopodobnie przeskoczy jeden zakres zamiast wszystkich) , więc można to zapisać jako: x = 1 def f(): .x = 2 # aktualizuje zmienną globalną Czy lepiej byłoby mieć tylko ten jeden sposób działania, czy też byłoby jaśniejsze lub wygodniejsze mechanizm deklarowania zmiennych jako globalnych tak, jak robi to Python?


title: Współpraca ze zdalnym programistą

text: Moja firma zamierza zatrudnić zewnętrznego programistę do napisania kilku prostych modułów PHP i kilku drobnych poprawek w naszym oprogramowaniu. Nigdy wcześniej nie zatrudnialiśmy zewnętrznego programisty na godzinę wcześniej. Jak możemy mierzyć produktywność zewnętrznych deweloperów i koordynować z nimi? Myślałem o użyciu kombinacji http://worksnaps.net/ i https://github.com/. Jakieś lepsze pomysły?


title: Kroki po wykryciu wstrzyknięcia SQL

text: Natknąłem się na luki SQL injection na stronie e-commerce mojej firmy. To było dość kiepsko złożone. Wierzę, że zapobiegłem przyszłym próbom, jednak otrzymujemy telefony dotyczące nieuczciwych obciążeń kart kredytowych w naszej witrynie i innych. To prowadzi mnie do przekonania, że ktoś był w stanie uzyskać listę naszych numerów kart kredytowych. Nie ma sensu to, że nie przechowujemy tych informacji i używamy Authorize.net do transakcji. Jeśli komuś udało się zdobyć CC#, co powinienem zrobić dalej? Poinformować WSZYSTKICH naszych klientów, że ktoś włamał się do naszego systemu i ukradł ich informacje? Mam przeczucie, że to źle wpłynie na biznes.


title: Jak znaleźć lokalnych kolegów programistów?

text: Jestem programistą-samoukiem mieszkającym w małym miasteczku. Poza okazjonalnymi spotkaniami na drugim końcu kraju rzadko rozmawiam twarzą w twarz z innymi programistami. Doskonale zdaję sobie sprawę z zalet programowania w parach, opinii, dyskusji z innymi programistami i wszystkiego... Co robisz, aby nawiązać kontakt z innymi lokalnymi programistami? p.s. Jeśli mieszkasz niedaleko Loenen (gld), Holandia, chciałbym mieć kontakt ;)


title: Jaki jest najdokładniejszy/najczęstszy raport na temat korzystania z przeglądarki w Internecie?

text: Określam, które przeglądarki powinna obsługiwać nowa witryna. Szukam szanowanego i dokładnego (w miarę możliwości) raportu na temat aktualnie używanych wersji przeglądarek. Ten raport powinien obejmować co najmniej % osób korzystających z jakich przeglądarek i wersji tej przeglądarki. Czy istnieje powszechnie akceptowane źródło tego rodzaju raportu? Jeśli tak, to czy są one regularnie wydawane i dostępne za darmo? Dodatkowe punkty za inne wskaźniki, takie jak podział na systemy operacyjne, wersje Flash, wersje JS itp.


title: funkcja działa dobrze bez zwracania wartości w c++

text: Zapomniałem napisać `return 'a';` w funkcji i `return 0;` w funkcji main, ale działa dobrze w Code::Blocks. #include <iostream> używając przestrzeni nazw std; char show() { cout<<"to jest funkcja show"<<endl; } int main() { show(); } używam Code::Blocks 10.05 w Ubuntu 12.04. Dlaczego tak się dzieje i dlaczego to samo powoduje błąd w TURBO C++?


title: Układ widoków matematycznych (iOS)

text: Staram się wymyślić właściwy sposób enkapsulacji informacji graficznych o obiektach matematycznych. To nie jest proste. Na przykład macierz może zawierać nawiasy kwadratowe wokół swoich wpisów lub nie. Niektóre rzeczy sprowadzają się do podobiektów — na przykład macierz może śledzić rozmiar czcionki, który ma być używany przez jej wpisy. Podobnie kolor czcionki i kolor tła zostaną przeniesione do wpisów. Inne rzeczy nie znoszą się. Na przykład wpisy macierzy nie muszą wiedzieć, czy macierz ma te nawiasy kwadratowe. W oparciu o wszystkie powyższe, muszę obliczyć rozmiary dla wszystkiego, a następnie ramki. Wszystko to może zależeć od właściwości zapisanych powyżej. Rozmiar macierzy zależy od rozmiarów jej wpisów, a także od tego, czy ma te nawiasy. To, z czym mam trudności, to nie indywidualne sposoby obliczania sensownych ramek dla tego czy tamtego. Jest to ogólna struktura organizacyjna całości. Jak mogę to wszystko śledzić bez szaleństwa. Warto wspomnieć o jednej szczególnej przeszkodzie — z powodów, o których nie chcę tutaj wchodzić, muszę obliczyć rozmiary i klatki dla wszystkiego, zanim stworzę rzeczywiste widoki. Na przykład, jeśli mam obiekt Matrix, muszę obliczyć jego rozmiar przed wykonaniem MatrixView. Jeśli mam równanie, muszę obliczyć rozmiar widoku dla równania przed utworzeniem rzeczywistego widoku. Więc wyraźnie potrzebuję oddzielnych obiektów do tych obliczeń. Ale nie potrafię wymyślić sensownej struktury klas dla tych obiektów. Jeśli umieszczę je wszystkie w jednej klasie, uzyskuję pewne korzyści, ponieważ kopiowanie staje się wtedy łatwe. Ale kończę też z nadętą klasą, która zawiera informacje, które są nieistotne dla niektórych obiektów - na przykład, czy uwzględnić te nawiasy wokół macierzy. Ale jeśli używam wielu różnych klas, kopiowanie właściwości staje się prawdziwym bólem. Jeśli ma to znaczenie, to wszystko jest w Objective C, dla środowiska iOS. Wszelkie wskazówki byłyby bardzo mile widziane. EDYCJA: Aby wyjaśnić: Mam obiekty modelu, które zawierają informacje matematyczne i potrafią obliczyć tekst, który zostanie wyświetlony. Myślę też, że sensowne będzie posiadanie obiektów arkusza stylów, które będą znały rozmiar czcionki. Dlatego między nimi mogę wszystko obliczyć. To wciąż pozostawia problem, jak śledzić uzyskane informacje. Nie chcę nazywać metod "oblicz swój rozmiar" bardziej niż to konieczne, ponieważ są drogie. Więc muszę buforować niektóre rzeczy. Ale gdzie? A jak zarządzać tym buforowaniem?


title: Backbone/JQuery, ExtJs 4.... czy jest jeszcze coś, na co warto zwrócić uwagę?

text: Obecnie oceniam architekturę front-endową dla dużej aplikacji, która zostanie opracowana przez zespół około 6 programistów + 1 projektanta stron internetowych, więc posiadanie solidnej architektury przyjaznej dla SVN jest koniecznością. Do tej pory oceniam te dwie opcje: * Mieszanka JQuery/UI/Mobile + Backbone/Undercore + Require JS + Twitter-Bootstrap * ExtJS 4 To są wymagania, które musi spełnić architektura: * SVN Fiendly (lub Friendly w zależności na poprzednich doświadczeniach) * Aktywna społeczność i obszerna dokumentacja * Rozszerzalność * Łatwy do nauczenia i utrzymania (miło mieć) * Obsługa wielu przeglądarek (przynajmniej przez większość czasu) * Obsługa urządzeń mobilnych * Łatwy w utrzymaniu (MVC, MVVM) * OpenSource (miło mieć) Wspomniane wcześniej spełniają większość wymagań na różnych poziomach i jak dotąd są jedynymi, o których się dowiedziałem, czy brakuje mi innych?


title: jakie języki programowania i umiejętności są niezbędne do nauki programowania hiperwizorów?

text: Chciałbym poznać umiejętności i języki programowania niezbędne do nauki programowania hiperwizorów oraz jakieś dobre źródło do rozpoczęcia nauki?


title: Dlaczego pętle JavaScript for/in są tak szczegółowe?

text: Próbuję zrozumieć powody, dla których projektanci języków robili tak gadatliwe pętle `for (.. in ..)`. Na przykład: for (var x in Drupal.settings.module.stuff) { alert("Indeks: " + x + "\nWartość: " + Drupal.settings.module.stuff[x]); } Sprawia to, że próba zapętlenia czegokolwiek półzłożonego, takiego jak powyżej, jest prawdziwym problemem, ponieważ albo musisz samodzielnie aliasować wartość wewnątrz pętli, albo radzić sobie z wywołaniami o długim dostępie. Jest to szczególnie bolesne, jeśli masz dwie do trzech zagnieżdżonych pętli. Zakładam, że istnieje powód, dla którego zrobiliby to w ten sposób, ale zmagam się z rozumowaniem.


title: Czego nauczyłeś się z błędów, które pomogłeś odkryć i naprawić?

text: Podobał mi się sedno tego pytania i chciałem zadać je ponownie w taki sposób, aby było mniej „zabawne”, a bardziej „Co te błędy z przeszłości mówią nam o tym, jak możemy lepiej pisać i testować oprogramowanie?”. Jako SDET zawsze szukam anegdot o nowych i interesujących sposobach, w jakie programy mogą zawieść. Wiele się nauczyłem z tych opowieści w przeszłości i chciałbym to również uzyskać od inteligentnych ludzi w tej społeczności. Chciałbym usłyszeć, na czym polegał problem, w jaki sposób został wykryty, jeśli uważasz, że można było zrobić coś, co można było racjonalnie zrobić, aby wykryć go wcześniej lub uniknąć tego samego problemu w późniejszych projektach, a także wszelkie inne interesujące lekcje, które wyciągnąłeś z tego błędu. Proszę pisać tylko o błędach, w które _osobiście_ byłeś zaangażowany, najlepiej w projekcie, nad którym pracowałeś (np. bez odpowiedzi „10 lat przed moimi narodzinami, to się wydarzyło i to było ZABAWNE!”). Prosimy o głosowanie odpowiedzi, które prowokują do myślenia lub mogą w jakiś sposób zmienić sposób opracowywania lub testowania, więc nie jest to tylko „zabawa towarzyska”. Staraj się unikać głosowania na coś tylko dlatego, że było to zabawne. Edycja: Skoncentruj się również na konkretnych przykładach błędów lub klasach błędów, a nie na ogólnej dyskusji na temat tego, czego się ogólnie nauczyłeś. Nie musiały być bardzo trudne ani bardzo dziwne, po prostu coś, co sprawiło, że poszedłeś „huh”.


title: Projekt i układ biura dla sprawnego rozwoju

text: (przeniesiono z stackoverflow) Znalazłem tutaj wiele dyskusji na temat tego, która klawiatura, biurko, jasne lub kolorowe tło są najlepsze - ale nie mogę znaleźć takiej, która dotyczyłaby układu całego biura. Jesteśmy firmą, w której około 20 pracowników przenosi się do nowego miejsca, czegoś większego. Istnieją dwie główne praktyki programistyczne, które mają miejsce w regularnych kombinacjach, osoby zaplecza często muszą współpracować z osobami mobilnymi w celu zaaranżowania usług internetowych. Zaplecza jest około dwa razy więcej niż osób mobilnych. Około połowa programistów zaplecza pracuje na miejscu w dowolnym momencie i chociaż prawie nigdy nie są wszyscy naraz w biurze, należy zapewnić co najmniej 5-10 miejsc - więc w większości przypadków te dwie grupy są mniej więcej równe. Mamy możliwość zaaranżowania biurek, ścianek działowych, a może nawet ścian, aby przestrzeń była dobra. Nie będzie gotówki na drobiazgi typu dot-com, takie jak catering czy masaże, ale nadszedł czas, aby zaplanować, aby nie skończyć z mnóstwem biurek w długiej kolejce. Joel on Software’s Bionic Office to artykuł, który zapamiętałem z dawnych czasów i zawiera kilka dobrych pomysłów, ale ja* (a co ważniejsze właściciele firmy) nie są całkowicie przekonani do idei prywatności w środowisku, w którym mamy współpracować . To jest kolejny świetny link – Układ Ostatecznego Biura Rozwoju Oprogramowania – nawet nie pamiętałem zamkniętych sal konferencyjnych, dopóki tego nie przeczytałem. Czy prywatne biuro stoi na drodze do zwinnego rozwoju? Czy scrum jest wystarczająco wymuszonym kontaktem i jeśli chcesz kogoś podsłuchiwać, powinieneś wstać i zapukać do jego drzwi? Na jakie układy projektowe możesz wskazać i dlaczego je polecasz? *W ogóle nie jestem przeciwny zamkniętym biurom, ale byłbym szczęśliwy, gdyby inne rozwiązanie sprawdziło się równie dobrze. Jeśli nie może... cóż, o to chodzi w tym pytaniu. * * * Dwie aktualizacje - kwiecień 2013. Pierwsza przeprowadzka do biura, które było "funky". Zasadniczo otwarty, ale z dziwnymi cechami, takimi jak wykładzina na jednej ścianie, połowa podłogi wyłożona wykładziną, połowa polerowanego betonu. Każdy siedzący na betonie chciał być na dywanie. Wyglądało to dobrze, ale w praktyce polecam nie wykładać tylko połowy biura, ludzie, którzy odczuwali zimno, naprawdę go nienawidzili. Na stojąco było dobrze - wielkie tablice zajmowały jedną ścianę, dużo miejsca do rozmowy i wyrwania się. Potem przeniosłem się do bardzo zatłoczonego miejsca, wmieszanego w inną firmę (ci sami właściciele), której zadaniem była współpraca, projektowanie, rozmowy telefoniczne, konserwacja i instalacja fizycznych rzeczy. To było do dupy. Potem przenieśliśmy się do nowej siedziby i ktoś uznał, że magazyn/przemysł jest fajny. Wszędzie twarde powierzchnie, szkło i polerowany beton. Deweloperzy dzielą jeden duży stół pośrodku obszaru o największym natężeniu ruchu, tuż obok aneksu kuchennego i zmywarki, nawet we wnęce, tylko tam. Obok ludzi, którzy cały dzień spędzali na telefonie. Ssał i nadal ssał pomimo bandaży, takich jak panele dźwiękochłonne. Zwinność była do bani, ponieważ nie było miejsca na deskę ani na stójkę, a charakterystyka akustyczna tego miejsca sprawiała, że słyszenie jakiejkolwiek osoby ponad stukotem było bardzo trudne - a także to uczucie, w cichych chwilach, krzyczenia w katedra. Nikt nigdy nie słuchał skarg. Zrezygnowałem i kilka innych zrobiło. Och, nie pomogło to, że osoba, która upierała się, że jest „właścicielem produktu”, nigdy nie zawracała sobie głowy pojawieniem się.


title: Algorytm kompresji słownika (słowa i definicje)

text: Sytuacja teoretyczna jest następująca: Załóżmy, że mamy słownik cyfrowy (przez co rozumiem tradycyjną listę słów i definicji, a nie tablicę asocjacyjną). Dla uproszczenia załóżmy również, że każde słowo można zastąpić jego dokładną definicją, a mimo to mieć sens w zdaniu; na przykład, jeśli ten słownik zawiera definicję słowa „ocean” jako „duży zbiornik słonej wody”, to następujący fragment: „Sami czujemy, że to, co robimy, jest tylko kroplą w oceanie”. można zmodyfikować do: „Sami czujemy, że to, co robimy, jest tylko kroplą w dużym zbiorniku słonej wody”. bez utraty logiki i znaczenia. Teraz moje pytanie brzmi: mając słownik ze wszystkimi słowami w języku angielskim, jaki jest algorytm, który można zastosować do kompresji słownika, poprzez zastąpienie wszystkich wystąpień danego słowa jego definicją, a przy tym więc znaleźć podstawowy zestaw słów, za pomocą których można by wyrazić wszystkie znaczenia oryginalnego języka? Aby wyjaśnić jeszcze więcej; jeśli „smutek” zostanie zdefiniowany jako „nieszczęśliwa emocja”, to słowo smutek można całkowicie usunąć ze słownika, zastępując wszystkie wystąpienia słowa „smutek”, które występują w definicjach innych słów, jego definicją. Na przykład definicja „depresji” może zmienić się z „trwającego okresu smutku” na „utrzymującego się okresu nieszczęśliwych emocji”. W ten sposób algorytm ostatecznie doszedłby do podstawowego zestawu słów, z którego można by reprezentować wszystkie inne słowa. Czy istnieją jakieś algorytmy, które mogą to zrobić lub coś podobnego? Jak można to zrobić programowo, bez użycia brutalnej siły? Każdy wgląd jest doceniany.


title: Jaka licencja jest do tego najlepsza: Oprogramowanie jest open source i jest bezpłatne, o ile nie obciążasz klientów

text: Udostępniam wtyczkę jQuery o otwartym kodzie źródłowym, którą można bezpłatnie używać, modyfikować i rozpowszechniać, o ile nie obciążasz bezpośrednio lub pośrednio swoich klientów. Twoje oprogramowanie nie musi być open-source, po prostu musi być darmowe. Jeśli pobierasz opłaty od swoich klientów, potrzebujesz licencji komercyjnej. Nie jestem pewien co do licencji. http://www.turnjs.com/ to wtyczka, która jest podobnie licencjonowana i jest to `Niekomercyjna licencja BSD`. Ale nie mogę znaleźć definicji tej licencji w Internecie. Czy ktoś może mi pomóc w określeniu najlepszej dla mnie licencji na podstawie mojego opisu? Dziękuję.


title: Zamieszanie związane z licencjonowaniem MorphAdorner

text: Chcę korzystać z biblioteki MorphAdorner dostępnej bezpłatnie do użytku komercyjnego. Ale używa kilku innych bibliotek, które ograniczają wykorzystanie komercyjne (takich jak Gate itp.). Czy mogę używać tej biblioteki w mojej aplikacji?


title: Dlaczego pustka w C oznacza nie pustkę?

text: W językach silnie typizowanych, takich jak Java i C#, `void` (lub `Void`) jako typ zwracany dla metody wydaje się oznaczać: > Ta metoda niczego nie zwraca. Nic. Bez powrotu. Nie otrzymasz niczego > tą metodą. Naprawdę dziwne jest to, że w C, `void` jako typ zwracany lub nawet jako typ parametru metody oznacza: > To może być naprawdę cokolwiek. Aby się dowiedzieć, musiałbyś przeczytać kod źródłowy. > Powodzenia. Jeśli to wskaźnik, powinieneś naprawdę wiedzieć, co robisz. Rozważ następujące przykłady w C: void opisz(void *thing) { Obiekt *obj = rzecz; printf("%s.\n", obj->opis); } void *move(void *lokalizacja, kierunek) { void *next = NULL; // logika! wróć dalej; } Oczywiście druga metoda zwraca wskaźnik, którym z definicji może być cokolwiek. Skoro C jest starszy niż Java i C#, dlaczego te języki przyjęły słowo „void” jako „nic”, podczas gdy C używało go jako „nic lub cokolwiek (kiedy wskaźnik)”?


title: Pytania dotyczące programowania w Excelu

text: Zawsze słyszałem o potężnych możliwościach programistycznych Microsoft Excel (nie VBA, mam na myśli formuły samego Excela), ale nigdy tego nie widziałem. * Czy naprawdę ma tyle mocy w formułach, czy źle zrozumiałem? * Jeśli tak, jaki jest zakres możliwości programistycznych programu Excel? * Jak to się robi (jak wygląda poważne, złożone programowanie pod względem składni, wzorców, stylów itp.)? * Czy dotyczy paradygmatu (powiedzmy programowania funkcjonalnego)? * Czy istnieją programiści Excela? * Do czego służy głównie?


title: Przyszłość SOAP z REST?

text: Biorąc pod uwagę, że coraz więcej Web Services implementuje interfejs RESTful, zastanawiam się, jaka będzie przyszłość SOAP? Poszukuję wszelkiego rodzaju artykułów, statystyk, artykułów lub publikacji z oficjalnych źródeł (np. książek, artykułów i czasopism), które dostarczają informacji o przyszłości SOAP. Z góry dziękuję!


title: Czy istnieje jakiś problem prawny z kopiowaniem kodu javascript na stronę internetową?

text: Tworzę jedną stronę internetową i chcę skorzystać z kalkulatora spłaty kredytu hipotecznego. Widziałem wiele witryn z nieruchomościami, które tego używają. Chcę wiedzieć, że kopiuję ich kod `kalkulatora javascript` i inaczej stylizuję formularz , czy będzie to problem prawny


title: Jak RDBMS można uznać za modę?

text: Ukończywszy mój poziom Computing A-level w 2003 r. i uzyskując stopień naukowy w dziedzinie Computing w 2007 oraz ucząc się zawodu w firmie intensywnie korzystającej z SQL, wpadłem na pomysł wykorzystania relacyjnych baz danych do przechowywania. Tak więc, mimo że jestem stosunkowo nowy w rozwoju, byłem zaskoczony, gdy przeczytałem komentarz (na stronie Czy cytat ze strony LinqPad „Zmęczony zapytaniami w przestarzałym SQL?” że on i RDBMS są modą Oczywiście kompetentny programista użyje odpowiedniego narzędzia do właściwej pracy i nie stworzy relacyjnej bazy danych, gdy np. płaski plik lub inne rozwiązanie do przechowywania danych są odpowiednie, ale RDBM są przydatne w ogromnej liczbie okoliczności, więc jak można je uznać za modę?


title: Czy mój DFD jest dokładny?

text: To mój pierwszy w historii DFD, który zrobiłem po moim uczciwym udziale w nauce, ale nie mam możliwości sprawdzenia, czy jest poprawny, czy nie. Chociaż dołożyłem wszelkich starań, aby upewnić się, że jest w porządku, mogę się mylić. **Oto scenariusz:** Bebop Records to firma zajmująca się sprzedażą wysyłkową, która dystrybuuje płyty CD i taśmy po obniżonych cenach wśród członków klubu nagrań. Kiedy pracownik obsługi zamówień otrzyma formularz zamówienia, sprawdza, czy nadawca jest członkiem klubu, sprawdzając Kartotekę Członka. Jeżeli nadawca nie jest członkiem, urzędnik zwraca zamówienie wraz z wnioskiem o członkostwo. Jeśli klient jest członkiem, urzędnik weryfikuje dane pozycji zamówienia, sprawdzając plik pozycji. Następnie urzędnik wprowadza dane zamówienia i zapisuje je w pliku Zamówienia dziennego. Urzędnik drukuje również fakturę i listę wysyłkową dla każdego zamówienia, które są przekazywane do realizacji zamówienia. **A oto mój schemat:** ![tu wstaw opis obrazu](http://i.stack.imgur.com/FnD6D.png)


title: Ile kosztów wiążą się z trwałymi połączeniami?

text: Ok, więc zastanawiam się nad małym pobocznym projektem, który chcę zacząć. Zasadniczo jest to wielosesyjny klient FTP oparty na sieci WWW. Wielosesyjna, w której możesz zalogować się na kilka serwerów FTP jednocześnie i wykonywać operacje, takie jak przenoszenie pliku z jednego serwera FTP na drugi. Robię to głównie po to, by odświeżyć nowe technologie webdev, w szczególności websockets. Używam node.js + socket.io, aby utrzymać trwałe dwukierunkowe połączenie między przeglądarką internetową a serwerem sieciowym. Serwer sieciowy będzie miał również trwałe połączenia z każdym serwerem FTP, do którego zalogował się użytkownik. Jeśli więc 100 równoczesnych użytkowników jest zalogowanych na 5 kont FTP, serwer sieciowy będzie miał 100 połączeń websocket + 500 połączeń FTP. Czy obsługa 600 połączeń to dużo? Wiem, że to zależy od zasobów sprzętowych serwera, ale czy coś takiego jest wykonalne przy ograniczonym budżecie? Czy istnieją bardziej efektywne sposoby na zrobienie czegoś takiego? Wiem, że jest mało prawdopodobne, aby ten projekt naprawdę stał się popularny, ale chcę, aby niezależnie od tego skalował się dobrze. Dzięki za pomoc, muszę się jeszcze wiele nauczyć.


title: co to jest struktura „bazująca na serwerach proxy”?

text: Właśnie zacząłem czytać o wiośnie, a książka wspominała "Spring AOP to framework oparty na proxy" . Co należy rozumieć przez ramy „oparte na proxy”.


title: Czy to dobry pomysł, aby zbudować bibliotekę na bibliotece kogoś innego?

text: Czy dobrym pomysłem jest wykorzystanie czyjejś biblioteki jako bazy i zbudowanie na tym własnej biblioteki. Chcę utworzyć ramy JavaScript Canvas dla odtwarzacza animacji na górze KineticJS. Czy powinienem to zrobić? Czy potrzebuję pozwolenia od autora KineticJS? Czy mam po prostu powiedzieć użytkownikom, aby pobrali KineticJS przed moją biblioteką, czy po prostu skopiować i wkleić kod kineticJS do mojej biblioteki?


title: Dlaczego prawie wszystkie oferty pracy w Javie (posty i od rekruterów) mówią o J2EE, a nie o nowszych wersjach JEE?

text: Nadal jestem całkiem nowy w Javie, ale mam pewien komfort pracy teraz w ramach, do którego jestem przyzwyczajony, który skupiałby się głównie na Spring, Hibernate i JEE 6. Wygląda na to, że za każdym razem, gdy rozmawiam z rekruterem, wszystko, co robią, to rzucanie słowo kluczowe „J2EE”, potrzebują kogoś z doświadczeniem w J2EE itp. Zdaję sobie sprawę, że starsze systemy nadal będą używać J2EE, ale wygląda na to, że przynajmniej niektóre stanowiska będą teraz reklamować JEE. Po prostu ciekawi, czy po prostu utknęli z jakimś słowem kluczowym, którego nie mogą ogarnąć, mając nowszą wersję, czy co. Ponieważ nie zajmowałem się Javą tak długo, nie używałem specjalnie J2EE, ale czy nie byłoby dość łatwo dostosować się do nowszej edycji Enterprise? Po prostu chciałem usłyszeć coś na ten temat od kogoś z większym doświadczeniem.


title: Najlepsze/złe praktyki dotyczące udostępniania kodu?

text: Im więcej eksploruję Github, tym bardziej mi się podoba. Naprawdę podoba mi się to, że kodowanie staje się bardziej społeczne. Jestem ciekaw, czy istnieją _jakiekolwiek złe praktyki_, których programiści powinni unikać, dzieląc się swoim kodem. A nazywając złe praktyki, **jakie są najlepsze praktyki udostępniania kodu**? Na przykład: Czy złą praktyką jest posiadanie w jednym repozytorium wielu skryptów/projektów o nazwie **'MiscProjects'**? Gdzie to repozytorium, jak sama nazwa wskazuje, jest zbiorem różnych małych skryptów i projektów. Może to przypominać sposób, w jaki programista organizuje projekty w swojej lokalnej pamięci, ale prawdopodobnie nie jest to optymalne do udostępniania kodu? Może jak zrobi się dobre README/dokumentacja, to byłoby lepiej? Albo jeśli jest dobrze udokumentowane, coś się udaje?


title: W jaki sposób komunikujesz usprawnienia narzędzi i procesów zespołowi programistycznemu?

text: Mój zespół wykonuje wiele wewnętrznych prac związanych z narzędziami i infrastrukturą - możesz myśleć o nas jako o małej wersji zespołów Facebook, Etsy, Netflix itp., które budują całą infrastrukturę do skalowania swoich usług do tysięcy/dziesiątek tysięcy serwery i wspieranie milionów użytkowników. Ostatnio pracowaliśmy pełną parą, ulepszając wiele narzędzi, których używamy wewnętrznie, takich jak narzędzia do automatycznego tworzenia nowych serwerów, konfigurowania nowych instancji aplikacji itp. Efektem końcowym tego jest zmniejszenie frustracji programistów, ale zwiększenie „niewiedzy” ” przez większość zespołu programistów o tym, jak prawidłowo i skutecznie korzystać z naszych narzędzi. Najczęściej mój zespół będzie proszony przez inne zespoły o pomoc w korzystaniu z narzędzi. Rozwiązania, które wymyśliliśmy lub rzeczy już wdrożone: * * * **Cały nasz kod jest stosunkowo prosty i zrozumiały, w razie potrzeby z dobrymi komentarzami, aby programiści mogli przeczytać skrypty.** Kontrargument: Możesz się domyślić, że tak jest nie jest to szczególnie dobry pomysł, zachęcanie ludzi do czytania kodu naszych narzędzi, aby dowiedzieć się, jak z niego korzystać. * * * **Cały nasz kod jest przeznaczony do Subversion z bardzo szczegółowymi komunikatami o zmianach, programiści mogą przeczytać e-maile dotyczące zmian.** Kontrargument: Oczekiwać, że programiści przeczytają wszystkie nasze zmiany? Śmieszny. * * * **Wiki - mamy wewnętrzną firmową wiki, którą staramy się utrzymywać z aktualnymi informacjami, ale ponieważ poruszamy się tak szybko, wiki również musi dotrzymywać kroku.** Kontrargument: Jak wspomniano, my szybko się poruszam w moim zespole, ponieważ codziennie dodawane są kolejne ulepszenia naszych narzędzi. Znowu nadal polega na tym, że ludzie czytają coś, co może się ciągle zmieniać. * * * **Wyślij e-mail do zespołu? Możemy wysłać wiadomość e-mail do zespołu, gdy będziemy mieli nadmiar ulepszeń do komunikacji.** * * * Jak wszyscy widzicie, staramy się znaleźć nowe pomysły i zbadać opcje, o których jeszcze nie pomyśleliśmy. Czy ktoś inny był kiedyś w podobnej sytuacji i ma jakieś wskazówki?


title: Czy można zastąpić zoptymalizowany kod kodem czytelnym?

text: Czasami natrafiasz na sytuację, w której musisz rozszerzyć/ulepszyć jakiś istniejący kod. Widzisz, że stary kod jest bardzo ubogi, ale jest też trudny do rozszerzenia, a jego przeczytanie wymaga czasu. Czy dobrym pomysłem jest zastąpienie go nowoczesnym kodem? Jakiś czas temu podobało mi się podejście lean, ale teraz wydaje mi się, że lepiej poświęcić wiele optymalizacji na rzecz wyższych abstrakcji, lepszych interfejsów i bardziej czytelnego, rozszerzalnego kodu. Wygląda na to, że kompilatory są coraz lepsze, więc takie rzeczy jak `struct abc = {}` są po cichu zamieniane na `memset`, `shared_ptr`s dają prawie taki sam kod jak twiddling surowego wskaźnika, szablony działają super dobrze ponieważ tworzą bardzo szczupły kod i tak dalej. Jednak czasami widzisz tablice oparte na stosie i stare funkcje C z pewną niejasną logiką i zwykle nie znajdują się one na ścieżce krytycznej. Czy dobrym pomysłem jest zmiana takiego kodu, jeśli tak czy inaczej musisz dotknąć jego małego kawałka?


title: Zaprojektuj wzorzec do obsługi zapytań przy użyciu wielu modeli

text: Staję przed dylematem podczas próby przeprojektowania struktury klas dla mojej aplikacji PHP/MySQL, aby była bardziej elegancka i dostosowana do zasady SOLID. Problem wygląda następująco: Załóżmy, że istnieje abstrakcyjna klasa o nazwie „osoba”, która ma pewne właściwości definiujące ogólną osobę, takie jak „imię”, „wiek”, „data urodzenia” itp. Istnieją dwie klasy , `student` i `teacher`, które implementują tę klasę abstrakcyjną. Dodają do tego swoje unikalne właściwości. Zaprojektowałem wszystkie trzy klasy tak, aby zawierały całą logikę operacyjną (której szczegóły nie są istotne w kontekście pytania). Teraz muszę utworzyć widoki/raporty/siatki danych, które zawierają szczegóły z wielu klas, na przykład listę wszystkich uczniów realizujących projekty z chemii pod opieką nauczyciela, którego imię jest parametrem zapytania. To tylko jeden przykład widoku, istnieje wiele różnych widoków w aplikacji, która wykorzystuje dane z 3-4 tabel, a każda z nich ma wiele parametrów wejściowych do ich generowania. Biorąc pod uwagę ten konkretny przykład, napisałem odpowiednie zapytanie za pomocą JOIN i wyniki są zgodne z oczekiwaniami i właściwe, teraz pojawia się dylemat: Pamiętając o zasadzie pojedynczej odpowiedzialności, gdzie powinienem przechowywać to zapytanie? Nie należy do klasy „Student”, ani do klasy „Teacher” ani do żadnych innych aktualnie obecnych klas. a) Czy powinienem utworzyć nową klasę, powiedzmy `dataView` i zaprojektować ją jako wzorzec MVC i zachować tam zapytanie? A co z innymi poglądami? jak wpisują się w tę architekturę? b) Czy nie powinienem w ogóle zachować zapytania w kodzie i uczynić go DB View ? c) Czy całkowicie się mylę w podejściu? Jeśli tak, jakie jest właściwe podejście? Moje rozważania są następujące: a) powinno być łatwe dodawanie nowych widoków później, jeśli pojawią się wymagania, bez konieczności kopiowania, wklejania i modyfikowania kodu b) chciałbym, aby był on tak luźno powiązany, jak to możliwe, aby w przypadku drobnych zmian w strukturze bazy danych , to się nie psuje. Szukałem w Google projektu raportu i generatorów raportów OOP, ale wszystkie wyniki wydają się skupiać na wizualnym projekcie raportu, a nie na pobieraniu danych. O oprawę wizualną raportu zadbałem już za pomocą MVC z szablonami html. Jestem pewien, że jest to bardzo podstawowy problem ze znanym rozwiązaniem, ale jakoś nie jestem w stanie go znaleźć (może szukam z niewłaściwym słowem kluczowym). **Edit1: Zmodyfikowałem tytuł, aby był bardziej odpowiedni** **Edit2: Przyjęta odpowiedź skłoniła mnie do myślenia we właściwym kierunku i zidentyfikowania moich wad projektowych, co ostatecznie doprowadziło mnie do znalezienia tego pytania i rozwiązania w Stack Overflow, które dało mi szczegółowa odpowiedź, aby wyjaśnić zamieszanie.**


title: Czy są jakieś dowody na to, że jeden z obecnych alternatywnych języków JVM może się zastosować?

text: Wiele entuzjazmu wzbudziły JRuby, Jython, Groovy, a teraz Scala i Clojure jako język, który ma być następcą Javy na JVM. Ale obecnie tylko Groovy i Scala znajdują się w pierwszej setce TIOBE, a żaden z nich nie znajduje się w pierwszej pięćdziesiątce. Czy jest jakiś powód, by sądzić, że którykolwiek z tej grupy kiedykolwiek zyska znaczącą adopcję? Moje pytanie nie dotyczy przede wszystkim TIOBE, ale wszelkich dowodów, które możesz zobaczyć, które mogą wskazywać, że jeden z tych języków może uzyskać znaczące poparcie, wykraczające poza entuzjastów.


title: DI/IoC w Javie dla .NET'era używanego do Castle.Windsor

text: Czy istnieje kontener Java DI, który działa podobnie do najdoskonalszego kontenera Castle.Windsor po stronie .NET? Kontenery Java, które przeglądałem, wydają się polegać na adnotacjach (wskazówkach) w moich usługach, których nie kopię za bardzo - chciałbym przejść do POJO, jeśli to możliwe. Z drugiej strony Spring może obejść się bez adnotacji, ale wymaga dużej ilości XML. Konfiguracja XML != łatwość utrzymania. Jedną z naprawdę fajnych rzeczy w Castle.Windsor jest okablowanie, które możesz skonfigurować w kodzie z instalatorami, automatyczne okablowanie oparte na konwencjach nazewnictwa i tak dalej. W idealnym przypadku kontener powinien również obsługiwać zarządzanie cyklem życia i konfigurację; tj. rejestrowanie komponentów jako przejściowych, pojedynczych, połączonych itp. Kolejnym bonusem byłoby wsparcie dla przechwytywaczy. Wszelkie wskazówki byłyby bardzo mile widziane.


title: Opisywanie kodu źródłowego za pomocą diagramów jako komentarzy

text: Piszę dużo kodu (głównie w c++ i javascript), który porusza geometrię obliczeniową, grafikę i tego rodzaju tematy, więc odkryłem, że diagramy wizualne są nieodzowną częścią procesu rozwiązywania problemów. Przed chwilą ustaliłem, że „och, czy nie byłoby po prostu **fantastycznie**, gdybym mógł jakoś _dołączyć_ ręcznie rysowany diagram do fragmentu kodu jako komentarz”, a to pozwoliłoby mi wrócić do czegoś Pracowałem dni, tygodnie, miesiące wcześniej i znacznie szybciej przerabiałem moje algorytmy. Jako wizualny uczeń czuję, że może to poprawić moją produktywność przy prawie każdym typie programowania, ponieważ proste diagramy mogą pomóc w zrozumieniu i wnioskowaniu na temat każdego rodzaju nietrywialnej struktury danych. Na przykład wykresy. Podczas zajęć z teorii grafów na uniwersytecie byłem w stanie naprawdę zrozumieć zależności grafowe tylko wtedy, gdy mogłem narysować ich diagramowe reprezentacje. Więc... Żadne IDE według mojej wiedzy nie pozwala na zapisanie obrazu jako komentarza do kodu. Myślałem, że ja lub ktoś inny mógłbym wymyślić jakieś dość łatwe w użyciu narzędzie, które może przekonwertować obraz na ciąg binarny base64, który mogę następnie wstawić do mojego kodu. Jeśli proces konwersji/wstawiania może być wystarczająco usprawniony, pozwoliłoby to na znacznie lepsze połączenie między diagramem a rzeczywistym kodem, więc nie muszę już chronograficznie przeszukiwać moich notatników. Jeszcze bardziej niesamowite: wtyczki do IDE do automatycznego analizowania i wyświetlania obrazu. Z teoretycznego punktu widzenia nie ma w tym absolutnie nic trudnego. Domyślam się, że zajęłoby mi trochę więcej czasu, aby dowiedzieć się, jak rozszerzyć moje ulubione IDE i utrzymać te wtyczki, więc byłbym całkowicie zadowolony z pewnego rodzaju postprocesora kodu, który wykonałby to samo analizowanie i renderowanie obrazów i pokazywanie ich obok kodu, wewnątrz przeglądarki lub czegoś takiego. Ponieważ z zawodu jestem programistą javascript. Co myślą ludzie? Czy ktoś za to zapłaci? Ja bym.


title: Projektowanie w językach „mieszanych”: projektowanie obiektowe czy programowanie funkcjonalne?

text: W ciągu ostatnich kilku lat języki, których lubię używać, stają się coraz bardziej „funkcjonalne”. Teraz używam języków, które są swego rodzaju „hybrydą”: C#, F#, Scala. Lubię projektować swoją aplikację przy użyciu klas, które odpowiadają obiektom domeny i używać funkcji funkcjonalnych, które sprawiają, że kodowanie jest łatwiejsze, bardziej zwięzłe i bezpieczniejsze (szczególnie podczas pracy na kolekcjach lub podczas przekazywania funkcji). Jednak te dwa światy „zderzają się” przy projektowaniu wzorców projektowych. Konkretnym przykładem, z jakim ostatnio miałem do czynienia, jest wzór Obserwator. Chcę, aby producent powiadamiał inny kod ("konsumenci/obserwatorzy", powiedzmy magazyn DB, rejestrator itd.), kiedy element jest tworzony lub zmieniany. Początkowo zrobiłem to "funkcjonalnie" w ten sposób: producent.foo(item => { updateItemInDb(item); insertLog(item)}) // wywołuje funkcję przekazaną jako argument, gdy element jest przetwarzany Ale teraz zastanawiam się, czy ja powinien użyć bardziej "OO" podejścia: interface IItemObserver { onNotify(Item) } class DBObserver : IItemObserver ... class LogObserver: IItemObserver ... produce.addObserver(nowy DBObserver) produce.addObserver(nowy LogObserver) produce.foo() //wywołuje obserwatora w pętli Jakie są zalety i wady tych dwóch podejść? Kiedyś słyszałem, jak guru FP powiedział, że wzorce projektowe istnieją tylko z powodu ograniczeń języka i dlatego jest ich tak mało w językach funkcjonalnych. Może to może być tego przykład? EDIT: W moim konkretnym scenariuszu nie potrzebuję tego, ale... jak zaimplementowałbyś usuwanie i dodawanie "obserwatorów" w sposób funkcjonalny? (Tj. jak zaimplementowałbyś wszystkie funkcjonalności we wzorcu?) Na przykład po prostu przekazanie nowej funkcji?


title: Czy dobrym pomysłem byłoby umożliwienie ludziom dodawania tablic liczb w javascript?

text: Jestem bardzo zorientowanym matematycznie programistą i ostatnio robię dużo skryptów java. Jestem naprawdę rozczarowany matematycznymi aspektami JavaScript: * obiekt Math to prawie żart, ponieważ ma tak mało metod * nie możesz użyć ^ do potęgowania * operator + jest bardzo ograniczony, nie możesz dodać tablicy liczb ani zrobić mnożenie przez skalar na tablicach Napisałem teraz kilka całkiem podstawowych rozszerzeń do obiektu Math i rozważałem napisanie biblioteki zaawansowanych funkcji matematycznych, co zadziwiające, wydaje się, że nie ma już żadnej standardowej biblioteki, nawet dla rachunku różniczkowego, chociaż jest jedna dla wektorów i macierzy udało mi się znaleźć. Notacja do pracy z wektorami i macierzami jest naprawdę zła, gdy nie możesz użyć operatora + na tablicach i nie możesz wykonać mnożenia przez skalar. Na przykład, oto ohydne wyrażenie do odejmowania dwóch wektorów, A - B: Math.vectorAddition(A,Math.scalarMultiplication(-1,B)); Od jakiegoś czasu szukałem jakiegoś projektu open-source, do którego mógłbym się przyczynić, i chociaż mój C++ jest trochę zardzewiały, bardzo chciałbym dostać się do kodu silnika V8 i rozszerzyć operator + do pracy na tablicach, aby mnożenie przez skalar działało i ewentualnie aby operator ^ działał dla potęgowania. Te rzeczy znacznie poprawiłyby użyteczność wszelkich matematycznych frameworków javascript. Naprawdę nie wiem, jak zaangażować się w coś takiego jak silnik V8, poza pobraniem kodu i rozpoczęciem pracy nad nim. Oczywiście obawiam się, że skoro V8 jest specyficzne dla Chrome, to bez kompatybilności między przeglądarkami fundamentalna zmiana tego typu prawdopodobnie zostanie odrzucona dla V8. Miałem nadzieję, że ktoś może mi powiedzieć, dlaczego to zły pomysł, albo udzielić mi wskazówek, jak postępować w tym momencie, aby uzyskać zgodę na dodanie tych funkcji. Dziękuję!


title: Rozszerzanie istniejącej Wiki DVCS

text: Częścią mojej pracy jest prowadzenie dokumentacji technicznej dla szybko rozwijającej się firmy produkcyjnej. Ponieważ jest to tylko część mojej pracy, a linia produktów firmy rozwija się tak szybko, nie mogę być na bieżąco z dokumentacją. W rezultacie tęskniłem za systemem zarządzania informacją z kilkoma specyficznymi funkcjami. Znalazłem wiele produktów, które mają podzbiór, ale żaden nie ma wszystkich funkcji, których szukam. Jestem w momencie, gdy wybieram istniejący produkt i rozszerzam go, aby obejmował pożądany zestaw funkcji, jednak będzie to projekt dla zwierząt domowych i będę się uczyć podstawowego języka w miarę postępów. Tak więc głównym pytaniem jest, który istniejący produkt będzie najłatwiej rozszerzyć, aby objąć pełny zestaw funkcji i ma stosunkowo łatwy do nauczenia język? Ewentualnie, czy przegapiłem inny istniejący program, który obejmie zestaw funkcji, czy powinien znajdować się na mojej liście „zamknięte, ale nie całkiem tam”? ### Zestaw funkcji * interfejs sieciowy * oparty na rozproszonym systemie kontroli wersji (np. git) * łatwy do edycji przez zalogowanych nowicjuszy (np. wiki, multimarkdown) * dane wyjściowe w bardziej tradycyjnych formatach (np. doc, odt, pdf) * zmiany w kolejce do zatwierdzenia przez redaktora/inżyniera/menedżera (np. edycja w MS Word) [to naprawdę duży słoń na liście - sugestie, od czego zacząć, mile widziane] * zmiany w kolejce specjalnie do zatwierdzenia przez inżyniera [dodatkowy element słonia na liście] * dobrze wspierane w społeczności open source ### Najbliższe, ale nie całkiem tam ikiwiki - http://ikiwiki.info (php) * mnóstwo niesamowitych funkcji i rozszerzeń, w tym łatwe do edycji i oparte na DVCS * brak recenzji/przesyłania do kolejki recenzji * wydaje się być dobrze obsługiwany przez społeczność OSS gitit - http://gitit.net/ (haskell) * łatwy do edycji i oparty na DVCS * wiele danych wyjściowych w tradycyjnych formatach * świetny internetowy interfejs gui diff * brak recenzji/przesyłania do rev iew kolejka * wydaje się być utrzymywana głównie przez jedną osobę


title: Czy powinienem utworzyć osobną tabelę dla każdego typu pochodnego?

text: Prowadzimy debatę i staram się zdecydować, po której stronie się sprzeciwić. Zasadniczo mamy typ zdarzenia, powiedzmy tak (przykład uproszczony). public class Event { public virtual int EventId { get; ustawić; } publiczny wirtualny DateTime DateTimeOccurred { get; ustawić; } } Wiele różnych zdarzeń w naszym systemie może dziedziczyć z tego, więc możemy mieć: public class UserUpdatedEvent : Event { public virtual User User { get; ustawić; } } Tak więc w zasadzie każde zdarzenie może dziedziczyć ze zdarzenia bazowego, a następnie możemy śledzić, co dzieje się w naszym systemie, co musimy zrobić, gdy zadania pojawiają się po tych zdarzeniach itp. Moje pytanie brzmi, czy powinniśmy mieć tabelę w bazie danych dla każdego zdarzenia, dzięki czemu w tym przykładzie możemy wymusić klucze obce użytkownikowi przy użyciu tabeli na typ, przy czym każdy podtyp odwołuje się do podstawowej tabeli Zdarzenia. A może powinniśmy mieć pojedynczą tabelę i kolumnę, może linkującą do wyliczenia mówiącego, co to jest zdarzenie, a następnie inną kolumnę zawierającą klucz podstawowy do tego obiektu, ale nie będziemy w stanie wymusić integralności referencyjnej (może z wyzwalaczem, ale nie idealny, a nie pełny dowód). Zaletami pojedynczej tabeli są szybkość, brak łączeń, prostsze budowanie/utrzymanie itp. Wady to brak integralności referencyjnej, używamy EF, a tabela według typu działa bardzo dobrze, z drugiej strony tworzymy wiele raportów i są to bezpośrednie sprocsy SQL zwiększające szybkość, a łączenia staną się dość ciężkie. Jak ludzie zwykle radzą sobie z taką sytuacją? Serdecznie dziękujemy za wgląd w istniejące systemy z podobnymi problemami i pomoc w podjęciu decyzji.


title: Czy Extreme Programming (XP) jest niekompatybilny z ideami wyrażonymi w Peopleware?

text: Właśnie skończyłem czytać Peopleware (DeMarco, Lister) i trochę wcześniej szukałem informacji na temat Extreme Programming (XP). Jak teraz widzę, te dwa podejścia prawie się wykluczają. Peopleware sugeruje odizolowanie programistów od wszelkich zakłóceń i nadaje priorytet nieprzerwanej pracy, aby pomóc programistom w osiągnięciu przepływu. Z drugiej strony XP proponuje zapewnienie jak największej komunikacji, nawet sugerując programistom "siedzenie razem", kodowanie w parach i generalnie pracę w tym samym pomieszczeniu (generując dużo hałasu). Czy te dwie konkurujące ze sobą szkoły myślenia, może jedna z nich okazała się słuszna/zła, czy też istnieje skuteczny kompromis? Widzę argumenty obu stron, ale nie widzę żadnego rozsądnego kompromisu. Jestem bardzo nowy w studiowaniu zarządzania rozwojem oprogramowania, więc możliwe, że po prostu coś źle zrozumiałem. Wszystkie komentarze mile widziane. PS Jako dodatkowe mini-pytanie, jako programista, co uważasz za bardziej produktywne?


title: Jak radzić sobie z tautologią w komentarzach?

text: Czasami znajduję się w sytuacji, gdy pisana przeze mnie część kodu jest (lub _wydaje się_) tak oczywista, że jej nazwa zostałaby w zasadzie powtórzona jako komentarz: class Przykład { /// <podsumowanie> /// lokalizacja aktualizacji. /// </summary> public Uri UpdateLocation { get; ustawić; }; } (przykład w języku C#, ale proszę odnieść się do pytania jako niezależnego od języka). Taki komentarz jest bezużyteczny; Co ja robię źle? Czy wybór nazwy jest zły? Jak mógłbym lepiej komentować takie części? Czy powinienem po prostu pominąć komentarz dla takich rzeczy?


title: Jak wdrożyć grę liderów Facebooka na telefon komórkowy?

text: Jestem w końcowej fazie tworzenia niezależnej gry mobilnej C#, którą wdrożę na iPhone'y i Androidy przy użyciu Mono. Chcę dodać do gry powiadomienia push i funkcję tablicy wyników na Facebooku, dzięki czemu użytkownik będzie miał na głównym ekranie listę wszystkich swoich znajomych, którzy grają w tę grę, oraz ich tygodniowe wyniki. Mam **ZERO** doświadczenia z tworzeniem stron internetowych/sieciami/bazami danych. Niedawno zacząłem badać tę dziedzinę i ukształtowałem podstawowe zrozumienie. Facebook ma pakiety SDK w PHP, JavaScript, obj-c i java, ale czytanie przykładów dokumentacji nadal wydaje mi się tajemnicze, ponieważ obejmuje technologię sieciową/serwerową. Po dokładniejszym zbadaniu zrozumiałem, że moje opcje po stronie serwera to w zasadzie PHP lub ASP.Net. Wygląda na to, że ASP.Net jest w moim przypadku bardziej korzystny, ponieważ jestem już biegły w C# (ale nie ma SDK ASP.net z Facebooka... Nie jestem pewien, czy to oznacza, że nie mogę wchodzić w interakcje z Facebookiem za pomocą ASP.Net ). Z drugiej strony niektórzy wspomnieli o wyższych kosztach ASP.Net, chociaż nie zagłębiłem się jeszcze w ten aspekt. Zrozumiałem też, że JavaScript to technologia po stronie klienta. Zacząłem przeglądać samouczki ASP.Net, myślałem, że ASP.Net jest językiem zarządzania wyłącznie po stronie serwera, ale zaczął się bardziej przypominać WPF, gdy te samouczki zaczęły wdawać się w bardzo długie dyskusje na temat tworzenia interfejsów i stylów witryn internetowych. Nie interesuje mnie to, po prostu chcę mieć serwer WWW, z którym moja aplikacja może się jakoś komunikować i zdobywać znajomych / wyniki. Czy uczę się technologii odpowiednich do mojego celu? czy powinienem się uczyć czegoś innego? Publikuję to w nadziei, że ktoś, kto dobrze zna tę dziedzinę, może przejrzeć mój problem i pomóc mi poprowadzić, w przeciwnym razie mógłbym spędzić miesiące na studiowaniu czegoś, co może nie być właściwym rozwiązaniem mojego celu. Dziękuję.


title: Najlepsza biblioteka Ruby Git?

text: Jaka jest najlepsza biblioteka Git w Rubim do użycia? Git, Grit, Rugged, Inny? Tło: Jestem obecnym opiekunem TicGit-ng, który jest rozproszonym systemem biletów offline zbudowanym na git, i czytałem i słyszałem w kółko, że Grit jest tym, którego powinienem używać, ponieważ zastępuje klejnot Git, ale wydaje się, że brakuje dokumentacji lub funkcji, ponieważ mnie i innym nie udało się przejść z przestarzałego, ale funkcjonalnego Gita na nowszy klejnot Grit.


title: IntelliJ Idea - czy robię to źle? (były użytkownik Eclipse)

text: Jestem użytkownikiem Eclipse odkąd pamiętam i zawsze byłem zadowolony z tego, co oferuje. Jak wiecie, Idea jest teraz darmowa, a jedną z moich głównych wymówek, aby nie używać Idei, było „Jestem pewien, że jest bardzo, bardzo dobry, ale Eclipse jest darmowy i z łatwością wystarcza na to, czego potrzebuję”. Więc teraz, gdy Idea jest darmowa, aby ją wypróbować, postanowiłem rozpocząć nowy projekt Play Framework i zamiast wpisywać `play eclipsify` wpisałem `play idealize` i postępowałem zgodnie z instrukcjami importowania projektu do Idea. Działało to dobrze iw pewnym momencie po drodze dostałem możliwość wyboru mapowania układu klucza, więc wybrałem Eclipse. Poczyniłem duże postępy i jestem pod wrażeniem doskonałej refaktoryzacji i sugestii zmiennych nazw. Jednocześnie jednak brakuje mi kilku kluczowych funkcji Eclipse, których zdziwiłbym się, gdy nie znalazłbym ich w Idea: * W Eclipse mogę wpisać `CTRL`+`Shift`+`O`, aby zorganizować importy. Wszystkie importy są dla mnie uporządkowane i pyta o wszystko, co niejednoznaczne. W Idea wydaje mi się, że muszę przejść do dowolnych niejednoznacznych za pomocą kursora i nacisnąć `Alt`+`Enter` dla każdego z nich, aby móc wybrać import do wykonania. * W metodach z błędnie napisanymi nazwami, niepoprawnymi podpisami itp. w Eclipse mogę nacisnąć `CTRL`+`1`, a rozwijane menu daje mi sugestie. Wydaje mi się, że nie jestem w stanie tego zrobić w Idea. * `CTRL`+`O` daje mi szybki zarys, który jest ładnym wyskakującym okienkiem pokazującym ogólny zarys bieżącej klasy. Wydaje mi się, że nie jestem w stanie tego zrobić w Idea. * `CTRL`+`Shift`+`T` w środowisku Eclipse wyświetla okno dialogowe, w którym należy wpisać nazwę klasy do otwarcia. Najczęściej Idea wydaje się przestać odpowiadać w tym momencie, a ja muszę przynajmniej przesunąć koncentrację z powrotem i z powrotem, aby ponownie zaczął odpowiadać. * jak u licha mogę rozwinąć zwinięte oświadczenie importu bez uciekania się do myszy? W Eclipse po prostu przesunąłbym do niego kursor i wcisnąłem enter. W Idea najlepsze co mogę zrobić to `CTRL`+`D` a potem `CTRL`+`Shift`+`O` :) Zgaduję, że są to funkcje, których po prostu nie znalazłem z powodu mapowania klawiatury Idea nie jest dopasowaniem 1:1 z Eclipse, lub że funkcjonalność nie może być idealnie dopasowana do konkretnej kombinacji klawiszy skrótu, ponieważ Idea idzie dalej w tym, co oferuje. Problem, w którym Idea przestaje odpowiadać, wydaje mi się bardziej błędem. Naprawdę chcę, żeby mój „związek” z Ideą się układał. Czuję, że to bardzo dobre IDE, ale te małe drobiazgi wchodzą mi w drogę. Czy najnowsze darmowe wydanie zawiera błąd, czy po prostu nie dałem sobie wystarczająco dużo czasu, aby zmienić swoje nawyki i oczekiwania w porównaniu z Eclipse (używam go dopiero od tygodnia)?


title: Jaki jest dobry algorytm do śledzenia wokół krawędzi polilinii 2D?

text: Jeśli mam polilinię złożoną z dowolnej liczby wierzchołków, jaki jest wydajny algorytm śledzenia wokół granicy tej polilinii? Należy wziąć pod uwagę 4 sytuacje: 1. Polilinia nie przecina się sama i nie ma krawędzi współliniowych. 2. Polilinia nie przecina się sama, ale posiada wewnętrzną lub zewnętrzną pętlę. 3. Polilinia ma samoprzecięcia w kształcie muszki. 4. Polilinia posiada własne przecięcia, które tworzą wewnętrzne pętle. Przykład każdego (wszystkie są zamknięte): 1. Lista wierzchołków = (5,3) (10,3) (10,7) (5,7) 2. Lista wierzchołków = (0,0) (3,0) (3,3) (1,3) (1,2) (2,2) (2,3) (0,3) 3. Lista wierzchołków = (5,3) (10,7) (10,3) (5,7) 4. Lista wierzchołków = (0,0) (3,0) (3,4) (1,4) (1,2) (2,2) (2,3) (0,3) Wizualnie: ![Kształty do narysowania konturu.](http://i.stack.imgur.com/NYUSy.png) W tym przypadku algorytm łuskania wypukłego naprawdę nie jest odpowiedni, ponieważ chcę zachować wszelkie wklęsłości w kształt. Wyniki: Dla wyjaśnienia, kształt muszki nie powinien być skrzyżowany, a proste obliczenie powierzchni powinno dać obszar dla tego kształtu (tj. dwa trójkąty są logicznie zwinięte w tym samym kierunku). ![Tak powinny wyglądać wynikowe kształty](http://i.stack.imgur.com/KUJv7.png) Ten algorytm nie tylko musi działać (co jest priorytetem), ale powinien być wystarczająco szybki, aby uruchomić na setkach tysięcy polilinii w kilka sekund. Ponadto algorytm musi być w stanie obsłużyć dowolną kombinację tych czterech przypadków.


title: Wzorce projektowe: przenoszenie odniesień do obiektów wokół aplikacji

text: Jestem nowym programistą i chcę poszerzyć swoją wiedzę z zakresu programowania. Ostatnio użytkownik Stack Overflow powiedział mi, że używanie singletonów to zły pomysł, że zachęcają one do ścisłego łączenia i utrudniają testowanie. To, co skłoniło tę dyskusję, to fakt, że każda klasa, którą kiedykolwiek napisałem, miała dostęp do dowolnego rodzaju danych za pośrednictwem singletona. Na przykład klasa, która obsługuje dane stanu dla gry. Gdyby jakakolwiek inna klasa chciała uzyskać dostęp do tych danych, wszystko, co musiałaby zrobić, to pobrać instancję singletonów i tam by była. W szczególności utworzenie instancji klasy w AppDelegate, a następnie uzyskanie do niej dostępu przez: delegata [[[[UIApplication sharedApplication]] gameObject] getScore]. Użytkownik SO powiedział mi, że powinienem utworzyć wystąpienie 'gameObject' tam, gdzie najpierw go potrzebuję, a następnie przekazać ten obiekt do każdej innej klasy, która go potrzebuje, za pomocą metody jako argumentu lub właściwości. Omawiałem te punkty, gdy ktoś inny zwrócił uwagę, że ta informacja jest całkowicie błędna, że singletony nie są związane ze sprzęganiem i w ogóle nie wpływają na testowanie. Jestem teraz całkowicie zdezorientowany, która osoba ma rację. Czy ktoś mógłby wyjaśnić, która technika jest najlepsza, aby obiekt utrzymywał się przez cały okres istnienia aplikacji i był dostępny dla innych klas, a także zachował luźne sprzężenie. Dla mnie obiekt przechodzący przez metodę lub właściwość do każdej klasy wydaje się najbardziej logiczny, ale nie wiem! Z góry dziękuję za wszelką pomoc!


title: Jak mogę przetestować kod wielowątkowy?

text: Czy istnieją sposoby na testowanie jednostkowe kodu wielowątkowego pod kątem warunków wyścigu i zakleszczeń? Aby sprawdzić, czy zachowują się tak, jak powinni...


title: Logika wymagana do rozwiązania problemu związanego z lokalizacją obiektów

text: Zadałem pytanie na dba.stackexchange.com, ale ponieważ sedno mojego pytania jest w rzeczywistości związane z logiką, podniosłem tutaj bardziej ogólną reprezentację mojego problemu. Myślę, że to właściwe miejsce, przepraszam, jeśli nie. Mam kilka obiektów, które są odczytywane i zapisywane w określonej kolejności. Mam też cztery lokalizacje, w których mogę przechowywać te przedmioty. Obiekty te różnią się wielkością, ale dla uproszczenia oceniłem je od 1 do 3, przy czym 3 to największe. Lokalizacja obiektów jest stała m.in. obiekty nie mogą być przenoszone pomiędzy krokami sekwencji Mam tabelę, która szczegółowo opisuje kolejność procesu. Ma trzy kolumny: Sekwencja, Źródło, Miejsce docelowe. Procesy mogą i działają równolegle, dlatego sekwencja nie jest unikalnym identyfikatorem, jednak jeśli jest to wymagane, można ją uznać za istniejącą. W idealnym świecie żaden obiekt nie powinien być umiejscowiony w taki sposób, aby żaden obiekt wymagany do kroku sekwencji nie znajdował się w tym samym miejscu. Oczywiście jest to wysoce nieprawdopodobne i zamiast tego szukam najlepszego rozwiązania, a nie idealnego. W związku z tym uznałem, że potencjalne lokalizacje mogą być najlepiej uszeregowane w następujący sposób. 1. Wszystkie obiekty dla sekwencji zlokalizowane osobno. 2. Obiekty źródłowe i docelowe dla sekwencji zlokalizowane oddzielnie. 3. Obiekty zlokalizowane w dowolnym miejscu Biorąc pod uwagę, że każdy obiekt ma rozmiar, rozważyłem być może pomnożenie rangi lokalizacji przez rozmiar, a tym samym przyznanie lokalizacji punktacji. Następnie na tej podstawie mogłem znaleźć najlepsze rozwiązanie, patrząc na jego łączny wynik. Czy ktoś ma jakieś sugestie, a może zajmował się podobnym problemem w przeszłości? Każdy wkład pomocy jest bardzo mile widziany.


title: Jak wytłumaczyć „piękny kod” nie-programiście?

text: Rozmawiając z koleżanką, która nie jest programistą, wspomniałem o koncepcji „pięknego kodu” i chciała zrozumieć, co to znaczy, ale trochę nie wiedziałem, jak to wytłumaczyć komuś, kto nie miałby w jakimkolwiek kontekście. Skoro cały kod i tak wydaje się komuś bełkotem, jak możesz wyjaśnić, co sprawia, że jeden fragment kodu jest ładniejszy od drugiego? Przydałyby się też analogie.


title: Pytanie o typy statyczne

text: Jak statycznie wpisać następujący program JavaScript function c(str) { c = eval(str); zwróć c(str); } Nie próbuję wszczynać wojny, ale jestem naprawdę ciekawa. Zawsze zakładałem, że języki dynamiczne pozwalają na napisanie większej liczby programów z powodu przykładów takich jak powyżej. Ale jeśli statycznie typowany język jest kompletny pod względem Turinga, powinien być w stanie wyrazić odpowiednik powyższego programu. Więc gdzie dokładnie załamuje się moje rozumowanie, ponieważ wydaje mi się to paradoksalne? Moje rozumowanie jest takie, że jest to oczywiście funkcja, której nie można wpisać w statycznie typowanym języku i nadal pozwala na ogólność, na którą pozwala powyższy kod.


Buduję aplikację, która będzie modułowa, w taki sposób, że będzie zbiorem osobnych systemów komunikujących się ze sobą. Używa Hadoop we wszystkich systemach, a HBase w 3 z 4. Skalowanie będzie problemem tylko w systemie innym niż Hbase, używa własnego systemu podobnego do NoSQL. Będzie to system skierowany do klienta i wymaga dużej ilości pamięci, więc każdy serwer może obsłużyć ograniczoną liczbę użytkowników, zanim drastycznie spadnie wydajność. Wszystkie 4 systemy mają wbudowane procedury i opcje Zookeeper. Czy mądrze jest zaprojektować serwer dowodzenia i kontroli, który będzie monitorował zasoby systemowe i włączał/wyłączał serwery w godzinach szczytu? Czy to naraziłoby mnie na awarię, skoro w przypadku awarii cały system może zawieść? Jak trudno byłoby zautomatyzować takie zadanie dla Hadoop?


title: Chcę sprzedać aplikację, ale także udostępnić kod źródłowy

text: Przepraszam, jeśli tytuł jest niejasny, nie mam pojęcia o licencjach... Rzecz w tym, że stworzyłem małą aplikację na Androida skierowaną do developerów. Chcę otrzymać zapłatę za aplikację, ale chcę również udostępnić kod, aby inni mogli go modyfikować, aby go ulepszyć lub dostosować do swoich potrzeb. Myślę, że jest to trochę zbliżone do sposobu Minecrafta (sprzedaj i oczekuj, że wszyscy zapłacisz, ale nie masz problemu z ludźmi modyfikującymi źródła, budującymi mody, itp.) i jest całkiem zbliżone do http://livereload.com/ sposobu dystrybucji i licencjonowania . Może powinienem sprzedać aplikację i dać dostęp do prywatnego repozytorium z samej aplikacji (więc, gdy ją kupisz, uzyskasz dostęp do źródła). Czy mam rację? czy to moja najlepsza opcja?


title: Strony zewnętrzne w ramkach I w rozszerzeniach do Chrome

text: Napisałem (super) proste rozszerzenie Chrome dla Telerik Code Converter, które po prostu umieszcza swoją stronę w ramce w wyskakującym okienku przeglądarki. Było to bardzo pomocne, ponieważ używam tego narzędzia przez cały czas, gdy muszę przenieść część mojego bardziej złożonego kodu C# do VB. Zastanawiałem się, czy przesyłanie tego rozszerzenia do sklepu Chrome Web Store, aby inni programiści mogli z niego korzystać, byłoby **etyczne**? Oczywiście nigdy nie pobierałbym z tego żadnych opłat ani w żaden sposób nie czerpał z tego korzyści.


title: Czy funkcja wewnętrzna jest uzasadniona w tej sytuacji?

text: Jestem nowy w koncepcjach programowania funkcjonalnego w C#, ale mam pewne doświadczenie z funkcjami wyższego rzędu za pośrednictwem Haskell, Scala, Python i Ruby. Obecnie przechodzę przez starą bazę kodu .NET 2.0 z dużą ilością duplikacji. Większość z nich to proste "kopiuj/wklej" z kilkoma zmienionymi zmiennymi. Staram się to maksymalnie skondensować. ** Fragment kodu w ramach procedury, nad którą pracuję, wygląda teraz trochę tak, na przykład:** if (PostProcess.UsesFirstPass) { w.WriteLine(V1 + " = 0" + " !! SET FOO" ); w.WriteLine(V2 + " = 0" + " !! USTAW PASEK"); w.WriteLine(V3 + " = 0" + " !! USTAW BAZ"); if (PostProcess.IsSpecial){ w.WriteLine(V3 + " = 20" + " !! ZWIĘKSZ BAZ"); } w.WriteLine(V4 + " = 0" + " !! USTAW QuUX"); } if (PostProcess.UsesSecondPass) { w.WriteLine(V5 + " = 0" + " !! SET FOO"); w.WriteLine(V6 + " = 0" + " !! USTAW PASEK"); w.WriteLine(V7 + " = 0" + " !! USTAW BAZ"); if (PostProcess.IsSpecial){ w.WriteLine(V7 + " = 20" + " !! ZWIĘKSZ BAZ"); } w.WriteLine(V8 + " = 0" + " !! USTAW QuUX"); } if (PostProcess.UsesFinalPass) { w.WriteLine(V9 + " = 0" + " !! SET FOO"); w.WriteLine(V10 + " = 0" + " !! USTAW PASEK"); w.WriteLine(V11 + " = 0" + " !! USTAW BAZ"); if (PostProcess.IsSpecial){ w.WriteLine(V11 + " = 20" + " !! ZWIĘKSZ BAZ"); } w.WriteLine(V12 + " = 0" + " !! USTAW QuUX"); } Tam, gdzie którekolwiek z „V”, które widzisz, znajduje się zmienna łańcuchowa zdefiniowana wcześniej. To część dość dużej metody. Mógłbym napisać inną metodę o nazwie, powiedzmy, `WriteVariables()` i przekazać wymagane informacje i wywołać ją trzy razy, ale dotyczy to tylko tej sekcji metody. Myślę, że byłoby to miejsce, w którym pisanie anonimowej funkcji wewnętrznej miałoby sens. Zrobiłem to, aby to przetestować i wydaje się, że działa dobrze. **Teraz mam jednego delegata, który wygląda jak:** prywatny delegat void WriteCutVars(ciąg V1, ciąg V2, ciąg V3, ciąg V4, CuttingParameters cutParam); // wycinek // WriteCutVars WriteVars = (Va, Vb, Vc, Vd) => { w.WriteLine(Va + " = 0" + " !! SET FOO"); w.WriteLine(Vb + " = 0" + " !! USTAW PASEK"); w.WriteLine(Vc + " = 0" + " !! USTAW BAZ"); if (PostProcess.IsSpecial){ w.WriteLine(Vc + " = 20" + " !! ZWIĘKSZ BAZ"); } w.WriteLine(Vd + " = 0" + " !! SET QuUX"); } if (Process.UsesFirstPass) WriteVars(V1, V2, V3, V4); if (Process.UsesSecondPass) WriteVars(V5, V6, V7, V8); if (Process.UsesFinalPass) WriteVars(V9, V10, V11, V12); **Moje główne pytania:** * Czy to jest właściwe wykorzystanie funkcji wewnętrznych? * Czy jest to akceptowalne, kiedy jestem jedynym absolwentem CS w zespole złożonym głównie z inżynierów mechaników?


title: Czy język specyficzny dla domeny może być używany do reprezentowania Open SRD?

text: Jestem na wczesnym etapie tworzenia biblioteki C# o otwartym kodzie źródłowym, która pozwoliłaby programistom wrzucić otwarty SRD (http://www.d20srd.org/) do istniejącego projektu. W skrócie jest to złożony zestaw ściśle powiązanych reguł biznesowych. Pracując wcześniej nad projektem adaptacyjnego modelu obiektowego do zarządzania ryzykiem w opiece zdrowotnej, zacząłem od tego wzorca. Ze względu na wysokie sprzężenie zasad staje się oczywiste, że projekt może wymagać pewnego rodzaju skryptu. Rozpocząłem badania nad implementacją DSL, teraz rozważam złomowanie adaptacyjnego modelu obiektowego dla języka specyficznego dla domeny. Nie pracuję z językami specyficznymi dla domeny, więc moje pytanie, czy rozsądne jest założenie, że język specyficzny dla domeny może być użyty do reprezentowania otwartego SRD?


title: Rozwój WPF w biznesie

text: Przepraszam, jeśli to zbyt szerokie pytanie (lub niewłaściwe SE, aby je zadać), ale coś, nad czym zastanawiałem się od jakiegoś czasu. Bardzo lubię WPF i myślę, że jestem dość kompetentny w pracy z nim i rozwijam się dla niego, a także rozważam możliwość dalszego rozwoju mojej kariery w tym kierunku (obecnie w sieci, chciałbym bardziej skupić się na desktopie / wpf ). Ale nigdy nie widziałem reklamy stanowiska projektanta front-end WPF (lub stanowiska projektanta FED z aspektami WPF), czy to w branży, że od deweloperów WPF oczekuje się, że będą obsługiwać zarówno projektowanie, jak i implementację interfejsu użytkownika, obok za kodem. Tylko o to pytam, ponieważ jestem kiepski w projektowaniu i jeśli jest to kluczowa część bycia programistą WPF, to będzie to dość duża przeszkoda do pokonania. To nie znaczy, że nie mogę pracować z danym projektem. Wiem, że może to być kwestia zależna od firmy, niektóre wymagają, aby programiści WPF mieli obie strony, niektóre firmy wymagają od nich tylko umiejętności C#/VB, ale chciałyby usłyszeć od obecnych programistów w branży, jakie są ich doświadczenia. Dziękuję


title: Dane zarządzania użytkownikami - potrzeba nazwy użytkownika i hasła

text: Zapytałbym o to na StackOverflow, gdyby miał kod, ale chodzi bardziej o pomysł/koncepcję, więc zapytałem tutaj. Pracuję nad interfejsem użytkownika naszego systemu inwentaryzacji, gdy dowiedziałem się, że podczas rejestracji użytkownika w systemie nazwa użytkownika i hasło użytkownika _jest opcjonalne_. Zapytałem naszego przełożonego, dlaczego tak jest. Powiedział, że w systemie są „koszy z aktywami” (pomyśl o pudłach z zabawkami), gdzie za pośrednictwem systemu przydzielamy pracowników do obsługi tych koszy. Pracownicy muszą być zarejestrowani w systemie, ale część z nich nie ma dostępu do systemu, dlatego _nie ma sensu nadawać im nazw użytkowników i haseł_. Ale myślę, że jego argument jest błędny, naprawdę błędny, ponieważ za każdym razem, gdy słyszę „bez nazwy użytkownika, bez hasła”, wzdrygam się, ponieważ jest to najbardziej synonimem konta bez hasła, z bezpłatnym dostępem. I tak pytam: * **Jaki byłby właściwy projekt bazy danych, aby oddzielić tego pracownika-użytkownika systemu i pracownika nie-użytkownika systemu, który tego nie używa bez nazwy użytkownika, bez schematu haseł?** Obecnie, jak sugeruje opis, mamy jedną tabelę z identyfikatorem użytkownika, nazwą użytkownika, haszowanym hasłem i innymi polami z dodatkowymi danymi użytkownika. * Aby udowodnić mu rację, chciałbym wiedzieć **dlaczego przechowywanie pustej nazwy użytkownika i hasła do konta jest całkowicie niewłaściwe dla zarejestrowanego pracownika niebędącego użytkownikiem systemu**. * **Jakie są alternatywy dla tego systemu?** Wiem, że najlepiej jest trzymać zarejestrowanych użytkowników w jednej tabeli, ale nigdy nie spotkałem się z taką sytuacją, w której są zarejestrowani użytkownicy, którzy nie mają dostępu do systemu. To tak, jakbyś otrzymał konto na Facebooku, profile i wszystko, ale nie masz do tego nazwy użytkownika i hasła (lub w tym przypadku puste)


title: Jeśli python skompiluje się do asemblera i zostanie w nim napisany system operacyjny, czy będzie korzystnie konkurował z C w testach porównawczych?

text: Ok, użyłem słowa _python_ w pytaniu, ale może to być agnostyka językowa w tym sensie, że: jeśli język X ma dobrze zoptymalizowany zestaw docelowy kompilatora, a system operacyjny jest napisany w tym języku, to czy będzie on korzystnie konkurował z C w benchmarki? Wynika to z dwóch koncepcji, które mam (mogę się mylić): * Języki są definiowane przez reguły gramatyczne (składnia-semantyka); oni sami są niezależni od wydajności. Wydajność jest funkcją implementacji. * C jest często wydajny, ponieważ są w nim napisane najpopularniejsze systemy operacyjne - tak ograniczone zawijanie i rozpakowywanie - i kompiluje się (w dzisiejszych czasach) do dobrze zoptymalizowanego kodu asemblera. I tak, zanim niektórzy z nas wyciągną broń, rozumiem i doceniam, że w pewnych sytuacjach niektóre języki mogą przewyższać C, ale ogólnie C radzi sobie lepiej niż większość języków w większości sytuacji.


title: Kompatybilność strony ze starymi systemami operacyjnymi

text: Jestem programistą stron internetowych. Najczęściej spotykam się z tą krytyczną sytuacją, gdy układ strony pasuje do projektu na Windows 7 lub 8 oraz Mobilnych Systemach Operacyjnych (Android, iOS, Windows 8). Ale kiedy strona jest odwiedzana przez stare systemy operacyjne, takie jak Windows XP i Windows 1998, cały układ bardzo się zawala. A zwłaszcza podczas odwiedzania w starych systemach operacyjnych z Internet Explorerem. Jeśli weźmiemy pod uwagę stare systemy operacyjne (i/lub IE na nich), tworzy to dla nas spustoszenie. Czasami nawet dobrze obsługiwane frameworki front-end, takie jak Twitter Bootstrap, poddają się i nie będą obsługiwać starszych przeglądarek. Kiedy klienci lub kierownictwo żądają, aby witryna była kompatybilna ze wszystkimi dostępnymi systemami operacyjnymi, w tym Win XP, jak temu zaradzić?


title: Czy wiele wywołań bazy danych jest naprawdę istotnych w przypadku wywołania sieciowego dla internetowego interfejsu API?

text: U jednego z moich pracodawców pracowaliśmy nad API REST (ale dotyczy to również SOAP). Klient, który jest interfejsem użytkownika aplikacji, może wywołać interfejs API przez sieć (LAN w typowych wdrożeniach produkcyjnych). API wykona wywołania do bazy danych. Jednym z tematów powracających w naszych dyskusjach jest wydajność: niektórzy członkowie zespołu uważają, że nie powinno się mieć wielu wywołań bazy danych (zwykle odczytów) z jednego wywołania API ze względu na wydajność; należy je zoptymalizować tak, aby każde wywołanie API miało tylko (dokładnie) jedno wywołanie bazy danych. Ale czy to naprawdę ważne? Weź pod uwagę, że interfejs użytkownika musi wykonać wywołanie sieciowe do interfejsu API; to dość duże (rząd wielkości milisekund). Bazy danych są zoptymalizowane pod kątem przechowywania rzeczy w pamięci i wykonywania odczytów bardzo, bardzo szybko (np. SQL Server ładuje i przechowuje wszystko w pamięci RAM i zużywa prawie całą wolną pamięć RAM, jeśli może). **TLDR: Czy to naprawdę ważne, aby martwić się wieloma połączeniami z bazą danych, kiedy już wykonujemy połączenie sieciowe przez LAN?** Jeśli tak, to dlaczego? Aby było jasne, mówię o rzędzie wielkości -- wiem, że zależy to od specyfiki (sprzętu maszyny, wyboru API i DB itp.) Jeśli mam wywołanie, które zajmuje O (milisekundy), czy optymalizuję pod kątem DB rozmowy, które zajmują o rząd wielkości mniej, czy rzeczywiście mają znaczenie? Czy może jest coś więcej niż ten problem? **Edytuj:** dla potomności uważam, że twierdzenie, że musimy poprawić wydajność poprzez łączenie wywołań baz danych w takich okolicznościach, jest dość śmieszne — zwłaszcza przy braku profilowania. Jednak to nie moja decyzja, czy to zrobimy, czy nie; Chcę wiedzieć, jakie jest uzasadnienie myślenia, że jest to poprawny sposób optymalizacji wywołań internetowego interfejsu API.


title: Walidacja i generowanie błędów podczas korzystania z wzorca mapowania danych

text: Pracuję nad zapisywaniem stanu obiektu do bazy danych przy użyciu wzorca mapowania danych, ale szukam sugestii/wskazówek dotyczących kroku walidacji i generowania komunikatów o błędach (krok 4 poniżej). Oto ogólne kroki, jakie widzę, aby to zrobić: (1) Maper danych służy do uzyskiwania bieżących informacji (tablicy asocjacyjnej) o obiekcie w db: +============== =======================================+ | person_id | nazwa | ulubiony_kolor | wiek | +========================================================== ====+ | 1 | Andy | Zielony | 24 | +------------------------------------------------- ----+ mapper zwraca tablicę asocjacyjną, np. Person_Mapper::getPersonById($id) : $person_row = array( 'person_id' => 1, 'name' => 'Andy', 'favorite_color' => 'Zielony', 'wiek' => '24', ); (2) Konstruktor obiektu Person przyjmuje tę tablicę jako argument, wypełniając jej pola. class Osoba { protected $person_id; chronione $nazwa; chroniony $ulubiony_kolor; chroniony wiek; function __construct(array $person_row) { $this->person_id = $person_row['person_id']; $this->name = $person_row['name']; $this->favorite_color = $person_row['favorite_color']; $ten->wiek = $osoba_wiersz['wiek']; } // pobierające i ustawiające... public function toArray() { return array( 'person_id' => $this->person_id, 'name' => $this->name, 'favorite_color' => $this->favorite_color , 'wiek' => $ten->wiek, ); } } (3a) (żądanie GET) Dane wejściowe formularza HTML, który jest używany do zmiany informacji o osobie, są wypełniane za pomocą Person::getters <form> <input type="text" name="name" value="<? =$person->getName()?>" /> <input type="tekst" name="ulubiony_kolor" value="<?=$person->getFavColor()?>" /> <input type="text" name="age" value="<?=$person->getAge()?>" /> </form> (3b) (żądanie POST) Obiekt Person jest zmieniany z danymi POST przy użyciu Person::setters $person- >setName($_POST['nazwa']); $person->setFavColor($_POST['favorite_color']); $osoba->ustawWiek($_POST['wiek']); *(4) Walidacja i generowanie komunikatów o błędach na podstawie poszczególnych pól - Czy powinno to mieć miejsce w obiekcie person, czy w obiekcie mapowania osoby? - Czy dane powinny być walidowane PRZED umieszczeniem w polach obiektu osoby? (5) Data mapper zapisuje obiekt person (wiersz aktualizacji w bazie danych): $person_mapper->savePerson($person); // metoda savePerson używa $person->toArray() // w celu uzyskania danych w bardziej przystępnym formacie // dla bramy bazy danych używanej przez person_mapper Wszelkie wskazówki, sugestie, krytyka lub przezwiska będą mile widziane.


title: Jak bardzo restrykcyjne są ograniczenia dotyczące linków na licencji GPL?

text: W moim podstawowym rozumieniu licencje na oprogramowanie mają zastosowanie tylko w przypadku redystrybucji oprogramowania. Nawet jeśli ogólnie się mylę, GPL stwierdza, że nie musisz zgadzać się na GPL, aby otrzymać lub uruchomić program objęty GPL. Powiedzmy, że istnieje Program X. Program X wymaga do działania Biblioteki L. Program X jest objęty licencją niezgodną z GPL (np. Licencją Publiczną Eclipse lub licencją własnościową). Biblioteka L jest objęta GPLv3. Program X nie może być rozpowszechniany razem z Biblioteką L - kombinacja musiałaby być objęta GPL, co naruszałoby EPL. 1. Co uniemożliwia użytkownikom oddzielne instalowanie programu X i biblioteki L, a następnie używanie programu X? 2. Być może bardziej istotne we współczesnym świecie automatycznych aktualizacji, co uniemożliwia Programowi X włączenie opakowania, które pobiera Bibliotekę L z Internetu (powiedzmy, z oficjalnej strony internetowej Biblioteki L), a następnie uruchamia Program X? W obu tych przypadkach nic z Biblioteki L nie jest rozpowszechniane przez autorów Programu X, więc licencja Biblioteki L nie powinna mieć zastosowania. 3. Co, jeśli w ogóle, zmieni się, jeśli Program X zamiast tego wymaga Biblioteki L', rozwidlenia Biblioteki L autorstwa autorów Programu X, który jest dostępny tylko na tej samej stronie internetowej co Program X i można go używać tylko z Programem X, ale jest nigdy nie dystrybuowane w tym samym pakiecie co Program X? 4. Co jeśli to wszystko jest w dynamicznym języku i żadna część Biblioteki L nie jest wymagana do skompilowania Programu X? 5. Co jeśli Program X jest rozpowszechniany w formie kodu źródłowego, tak że dystrybucja nie została skompilowana z nagłówków Biblioteki L?


title: Zacieranie linii między funkcjami asynchronicznymi i zwykłymi w C# 5.0

text: Ostatnio wydaje mi się, że nie mam dość niesamowitego wzorca asynchronicznego oczekiwania w C# 5.0. Gdzie byłeś całe moje życie? Jestem absolutnie zachwycony prostą składnią, ale mam jedną małą trudność. Mój problem polega na tym, że funkcje asynchroniczne mają zupełnie inną deklarację niż zwykłe funkcje. Ponieważ tylko funkcje asynchroniczne mogą czekać na inne funkcje asynchroniczne, kiedy próbuję przenieść stary kod blokujący do asynchronicznego, mam efekt domina funkcji, które muszę przekonwertować. Ludzie nazywają to _infestacją zombie_. Kiedy async dostanie kęs w twoim kodzie, będzie się stawał coraz większy. Proces przenoszenia nie jest trudny, polega po prostu na wrzuceniu `async` w deklaracji i opakowaniu zwracanej wartości za pomocą `Task<>`. Ale denerwujące jest robienie tego w kółko podczas przenoszenia starego kodu synchronicznego. Wydaje mi się, że będzie to znacznie bardziej naturalne, jeśli oba typy funkcji (async i zwykła stara synchronizacja) mają dokładnie tę samą składnię. Gdyby tak było, przeniesienie nie wymagałoby żadnego wysiłku i mógłbym bezboleśnie przełączać się między tymi dwiema formami. Myślę, że może to zadziałać, jeśli zastosujemy się do tych zasad: 1. Funkcje asynchroniczne nie będą już wymagały deklaracji `async`. Ich typy zwracane nie musiałyby być opakowane w `Zadanie<>`. Kompilator sam zidentyfikuje funkcję asynchroniczną podczas kompilacji i automatycznie wykona zawijanie Task<> w razie potrzeby. 2. Nigdy więcej wywołań funkcji „uruchom i zapomnij” do funkcji asynchronicznych. Jeśli chcesz wywołać funkcję asynchroniczną, musisz na nią poczekać. Zresztą prawie nie używam ognia i zapomnij, a wszystkie przykłady szalonych warunków wyścigowych lub impasów zawsze wydają się być na nich oparte. Myślę, że są zbyt zagmatwane i nie mają kontaktu z synchronicznym sposobem myślenia, który staramy się wykorzystać. 3. Jeśli naprawdę nie możesz żyć bez ognia i zapomnij, będzie na to specjalna składnia. W każdym razie nie będzie to część prostej ujednoliconej składni, o której mówię. 4. Jedyne słowo kluczowe, którego potrzebujesz do oznaczenia wywołania asynchronicznego to `await`. Jeśli masz await, połączenie jest asynchroniczne. Jeśli tego nie zrobisz, wywołanie jest po prostu stare synchroniczne (pamiętaj, że nie mamy już opcji „uruchom i zapomnij”). 5. Kompilator automatycznie zidentyfikuje funkcje asynchroniczne (ponieważ nie mają już specjalnej deklaracji). Zasada 4 czyni to bardzo prostym - jeśli funkcja ma wewnątrz wywołanie `await`, jest to asynchroniczne. Czy to zadziała? czy czegoś mi brakuje? Ta ujednolicona składnia jest znacznie bardziej płynna i może całkowicie rozwiązać problem inwazji zombie. **Kilka przykładów:** // załóżmy, że jest to funkcja asynchroniczna (w środku nie ma wywołań await) int CalcRemoteBalanceAsync() { ... } // załóżmy, że jest to zwykła funkcja synchronizacji (w środku nie ma wywołań await) int CalcRemoteBalance() { ... } // teraz wypróbujmy wszystkie kombinacje i zobaczmy, co robią: // to jest wspólny przypadek synchroniczny - zablokuje int b1 = CalcRemoteBalance(); // to jest typowy przypadek asynchroniczny - nie zablokuje int b2 = await CalcRemoteBalanceAsync(); // wybranie wywołania funkcji asynchronicznej w sposób synchroniczny - blokuje // ta składnia była używana wcześniej do asynchronicznego uruchamiania i zapominania, ale teraz jest to tylko synchroniczne int b3 = CalcRemoteBalanceAsync(); // dziwna kombinacja - zablokuje się, ponieważ wywołuje funkcję synchroniczną // prawdopodobnie powinna pokazać ostrzeżenie o kompilacji int b4 = await CalcRemoteBalance(); Uwaga: jest to kontynuacja interesującej dyskusji pokrewnej w SO


title: Program Java, który powiadamia o dostępie do kamery

text: Próbuję znaleźć programistę, który napisze mi całkiem prosty program. Jestem również programistą, ale nie mam wystarczająco dużo czasu, aby sam to napisać. Ten program ma dość podstawową funkcję. Poinformuje użytkowników za pomocą okna dialogowego (lub alertu), że jakiś program ma zamiar uzyskać dostęp do _wbudowanej kamery komputera stacjonarnego/laptopa_. Może to być skype lub facetime, lub cokolwiek to jest, program powinien być świadomy, kiedy kamera systemu operacyjnego będzie dostępna i powiadomić użytkownika. Tak, nawet jeśli użytkownik sam inicjuje kamerę przez Skype, powiadomienie nadal będzie się pojawiać. Moje pytanie jest takie. Jeśli potrzebuję tego programu napisanego w Javie, czy jest to możliwe? Oczywiście staram się to zrobić w Javie, aby działał na Windows _i_ Mac. Jeśli nie jest to możliwe, to wygląda na to, że musiałbym napisać 2 oddzielne programy na Windows i Mac. Przyszedłem tutaj, aby uzyskać sugestie, dzięki którym mogę skontaktować się z odpowiednimi programistami. Jeśli masz jakieś sugestie, chętnie je wysłucham. Dziękuję!


title: Co muszę zrobić, aby nauczyć się zapewniania jakości?

text: Jestem studentką biologii, która zmieniła swoją karierę na informatykę i pracuję w branży oprogramowania przez ostatnie 4 cztery w ramach **QA (procesy audytu dla celów ISO9001)**. Teraz jestem Software QA Execute i postanowiłem poszerzyć swoją wiedzę na temat QA. Jakie są następne kroki, których mogę szukać? Czy są jakieś **certyfikaty**, które mogę wykonać w ramach kontroli jakości, które będą bardzo przydatne? (Zrobiłem już certyfikację na IQA). Słyszałem o certyfikatach **CSQA** dotyczących kontroli jakości, czy oprócz tych są jeszcze jakieś inne certyfikaty? Lub jak zawsze, czy są jakieś książki, które poszerzą moją wiedzę na temat QA?


title: Koder PHP typu open source

text: Czy są jakieś zalecenia dotyczące systemów Open Source lub Free **Koder PHP**? Czy coś jest dostępne?


title: Jak mam przeprowadzić test jednostkowy klasy, która opiera się na realistycznych danych?

text: Mam klasę, która zawiera wyniki pomiaru naukowego. Buduję w testach jednostkowych od samego początku, ale nie mam dużego doświadczenia z testowaniem jednostkowym i nie jestem pewien, jakie zachowania powinienem testować i jak. Moja klasa robi trzy rodzaje rzeczy: 1. Wczytuje dane pomiarowe z pliku (lub ciągu znaków) do swoich zmiennych instancji 2. Zapisuje dane pomiarowe do pliku lub ciągu znaków 3. Wykonuje obliczenia na swoich danych (np. pobiera średnią zbioru liczb) Obecnie podchodzę do tego, aby umieścić znany dobry przykładowy plik danych w moim katalogu `test`. Jeden test odczytuje dane z pliku, przekazuje je do mojej klasy i upewnia się, że spełnia kilka podstawowych testów poprawności. Inny test przekazuje plik _nazwa_pliku_ do mojej klasy, pozwala klasie go odczytać i uruchamia te same testy. Pozostałe testy odczytują dane z pliku, przekazują je do mojej klasy i sprawdzają, czy wyniki metod przetwarzania danych są poprawne, biorąc pod uwagę to, co wiem o tym zestawie danych. Wydaje się to jednak dość zagmatwane. Testy sprawdzające (3) domyślnie zakładają, że zachowania (1) są poprawne, ponieważ to funkcje z (1) są używane do wypełniania klasy w pierwszej kolejności. A testy (1) mogłyby skorzystać z obszernych kontroli przeprowadzonych przez testy (3). Czy źle ustrukturyzuję swoje testy jednostkowe, czy jest to po prostu naturalny wynik tego, że muszę używać określonego zestawu danych w moich testach?


title: Czy istnieje narzędzie, które wizualnie przedstawia wszystkie potencjalne ścieżki do określonego fragmentu kodu?

text: Jako przykład tego, czego potrzebuję i dlaczego tego chcę, próbuję określić, w jaki sposób (błędnie) ustawiana jest określona wartość (CurTotal). Wymyśliłem sobie te notatki, aby spróbować zrozumieć, co się dzieje: **CurTotal jest zadeklarowane w frmEntry.SetTotalControlsProperties(). CurTotal pobiera swoją wartość w ramach tej metody z wrkFile.getAmount(), a txtCurTot jest ostatecznie przypisywana do tej wartości. SetTotalControlsProperties() jest wywoływana:** 0) Z metody openfrmUPC() formularza głównego (frmCentral) 1) Z przeładowanego konstruktora frmEntry: public frmEntry(string DSDtablename, string recType, int QOne, int sDesc, int sList) 2) Warunkowo z w DoSave(), który jest wywoływany z btnSave_Click() i PrepareForPrinting() 3) Z saveDSD() frmEntry, który jest wywoływany z DoSave(), który jest wywoływany przez btnSave_Click i PrepareForPrinting() 4) Z saveINV() frmEntry, który jest wywoływana z DoSave(), która jest wywoływana przez btnSave_Click i PrepareForPrinting() 5) Z btnClear_Click() frmEntry **Więc najbardziej "interesujące" są 0, 2 i 3 (nie sądzę, że zaobserwowana fałszywa aktywność miejsce w saveINV(), jestem prawie pewien, że nie ma go w konstruktorze i wiem, że nie ma go w btnclearclick()).** Więc moja głowa płynie lepiej niż Mark Spitz (albo, dla was, młodzi whippersnapperzy, Michael Phelps) kiedykolwiek marzył o tym, żeby się przeciąć chlorowany akwa. Sprawiając, że sprawy są dla mnie bardziej złowrogie, nie mogę przejść przez ten kod (Windows CE, działający w trybie Windows XP, bez emulatora), z wyjątkiem mojego przesiąkniętego wodą mózgu*. Pytam więc: czy istnieje narzędzie, które wizualnie reprezentuje wszystkie potencjalne trasy, z których wywoływana jest funkcja SetTotalControlsProperties()/ustawiona jest opcja CurTotal? Najlepszym rozwiązaniem byłoby narzędzie, które podałoby listę tras, którymi obrał kod, aby dostać się do wyznaczonego miejsca. Pytanie poboczne: Dlaczego nie ma tagu „spaghetti”? W komunistycznej Rosji za mniej niż ten aresztowano ludzi. * Wskazówka (czy jest to "kolejka"?) "Over the Hill" TYA tutaj. ## UPDATE Świeży dowód na to, że naprawdę istnieje potrzeba takiego narzędzia: Metoda, która ustawia kwotę CurTot, mianowicie _wrkFile.getAmount()_ , robi to: public double getAmount() { if (tAmount < 0) { SetTotalItemsAndTotalAmt( ); } return kwota; } SetTotalItemsAndTotalAmt() przypisuje wartości na podstawie tego zapytania: string dynSQL = "SELECT * FROM workTables WHERE name = '" + name + "'"; ..i "nazwa" tutaj nie jest przekazywana do SetTotalItemsAndTotalAmt, ani nie jest to lokalna var. Arggghhhhhhhhh!!!