title: Nauczanie programisty poszukującego prostego statycznie i słabo typowanego języka

text: Staram się zilustrować różnice między czterema różnymi systemami typów -- statyczne vs dynamiczne pisanie i słabe vs silne pisanie. * Dynamic + słaby = JavaScript * Dynaimc + strong = Python * Statyczny + strong = Java (czy jest do tego dobry _czysto_ interpretowany język? Kompilator Javy może być irytujący bez frameworka takiego jak Ant of Maven) * Statyczny + słaby = ??? Dla statycznych + słabych najbardziej widoczny jest C++, z przeciążaniem operatorów, arytmetykami wskaźników i, szczerze mówiąc, możliwością traktowania prawie każdego typu danych jako jakiejś formy liczby, wydaje się, że byłby to bardzo wyraźny przykład pisanie statyczne i pisanie słabe. Ale jest to również _niesamowicie_ skomplikowane, zwłaszcza jeśli chcę uczyć **początkującego**. Jakie są alternatywne języki nauczania dla początkujących, które są zarówno statycznie, jak i słabo napisane? Idealnie coś, co jest łatwe do zainstalowania i uruchomienia przy minimalnym wysiłku? (A jeszcze lepiej, coś, co w jakiejś formie wspiera OOP?)


title: Demo strony offline - narzędzia do obsługi "zapisanych" linków zewnętrznych

text: Projektuję test (demo dla użytkowników) strony internetowej z mojego komputera lokalnego bez dostępu do Internetu. Witryna będzie hostowana lokalnie, ale chciałbym również, aby użytkownicy mogli śledzić linki do niektórych witryn zewnętrznych. Czy istnieją narzędzia, które mogą sprawić, że użytkownik będzie myślał, że przegląda witrynę online, podczas gdy w rzeczywistości przegląda lokalną kopię odpowiednich stron zewnętrznych? Narzędzie, które sobie wyobrażam, pozwoliłoby określić serwer proxy w przeglądarce, który przechwyciłby określone adresy URL i przekazałby je kopii offline strony. Byłby również łatwy sposób na zapisywanie i zarządzanie tymi stronami offline. Wymóg dostępu offline to kwestia rozwijającego się świata - inteligentni ludzie nie polegają na dostępie do Internetu w miejscach, w których jest mało infrastruktury i mają tylko jedną szansę, aby coś zrobić dobrze.


title: Kiedy i dlaczego używamy niezmiennych wskaźników?

text: W Javie obiekt `String` jest zarówno niezmienny, jak i wskaźnikiem (czyli typem referencyjnym). Jestem pewien, że istnieją inne typy/obiekty, które są zarówno niezmienne, jak i wskaźnikiem, i że rozciąga się to dalej niż tylko Java. Nie mogę myśleć, gdzie byłoby to pożądane, prawdopodobnie z powodu własnego doświadczenia. Użyłem tylko typów referencyjnych LUB niezmiennych typów pierwotnych. Czy ktoś mógłby mi podać sytuację, w której byłoby to przydatne, abym mógł docenić ich znaczenie/wartość/koncepcję.


title: Dlaczego serwer HTTP Apache jest tak złożony?

text: Serwer HTTP Apache to dość duży projekt — znacznie większy niż, powiedzmy, „lighthttp” lub „nginx”, a na pewno „proste serwery HTTP”, które można zobaczyć w samouczkach C/C++. Do czego służy dodatkowy kod? Czy dodaje bezpieczeństwo/stabilność (a jeśli tak, to w jaki sposób?), czy służy tylko do parsowania plików Apache `conf` files/`.htaccess` (i, jak sądzę, `VirtualHosts` itp.). Proszę nie krytykować Apache'a, ale dlatego, że interesuje mnie pisanie pewnego rodzaju serwera WWW i chciałbym wiedzieć o rzeczach, które choć być może nie są oczywiste, są ważne, aby pamiętać o bezpiecznym, stabilnym i szybkim serwerze WWW.


title: Czy kod ucieczki zapewniany przez bibliotekę Google-Gson wystarczy, aby zapewnić bezpieczny ładunek JSON?

text: Obecnie używam biblioteki Google-Gson do konwersji obiektów Java na JSON wewnątrz usługi sieciowej. Po przekonwertowaniu obiektu na JSON jest on zwracany do klienta w celu przekonwertowania na obiekt JSON za pomocą funkcji JavaScript eval(). Czy znak ucieczki zapewniany przez bibliotekę Gson wystarczy, aby zapewnić, że po uruchomieniu funkcji eval() w ładunku JSON nie wydarzy się nic nieprzyjemnego? Czy muszę kodować HTML ciągi w obiektach Java przed przekazaniem ich do biblioteki Gson? Czy są jakieś inne obawy dotyczące bezpieczeństwa, o których powinienem wiedzieć?


title: Jak zmniejszyć ścisłe sprzężenie między dwoma źródłami danych

text: Mam problem ze znalezieniem odpowiedniego rozwiązania następującego problemu z architekturą. W **naszym ustawieniu (naszkicowanym poniżej)** mamy 2 źródła danych, gdzie źródło danych A jest głównym źródłem dla elementów typu Foo. Istnieje dodatkowe źródło danych, które można wykorzystać do pobrania dodatkowych informacji o Foo; jednak ta informacja nie zawsze istnieje. Ponadto źródło danych A może służyć do pobierania elementów typu Bar. Jednak każdy Bar odnosi się do Foo. Trudność polega na tym, że każdy Bar powinien odnosić się do Foo, które, jeśli jest dostępne, zawiera również informacje rozszerzone o źródło danych B. Moje pytanie brzmi: jak usunąć ścisłe sprzężenie między SubsystemA.1 a DataSourceB? ![http://i.stack.imgur.com/Xi4aA.png](http://i.stack.imgur.com/Xi4aA.png)


title: Dlaczego ludzie mogą oczekiwać wymagań sprzętowych/programowych od aplikacji, ale nie od aplikacji internetowych?

text: Pytania dotyczą sposobów zachęcania klientów do korzystania z nowych technologii/przeglądarek internetowych, aby można było dostarczać użytkownikom końcowym lepsze oprogramowanie internetowe. Trudno zarządzać oczekiwaniami klientów. Oczekiwania takie jak: 1. Strony internetowe powinny działać na starszych przeglądarkach. (dwuznaczny). 2. Strony internetowe nie powinny wymagać specjalnego sprzętu. 3. Niedopuszczalne jest podawanie specyfikacji systemowej/komputerowej do prowadzenia strony internetowej. Tworzenie stron internetowych nie jest tak łatwe, jak wielu myśli. Tworzenie poprawnie działającej aplikacji internetowej (nie tylko strony internetowej) wymaga bardzo wiele. Rzuć okiem na Dokumenty Google lub Microsoft Office w trybie online. To coś więcej niż zwykłe strony internetowe i zmuszają użytkowników do korzystania z nowszych przeglądarek. MS Office Online nie będzie działać z IE6 i bardzo się starają, aby ludzie używali IE8 (wkrótce IE9). Google również naciska, podobnie jak wiele innych silnych podmiotów internetowych. Możesz wiele zrobić w Internecie, od grania w gry, oglądania filmów, wykonywania pracy, a nawet kodowania i skompilowania kodu na serwerze, z którym jesteś połączony. Biorąc pod uwagę wszystko, co może zrobić sieć, uważam za niesamowite, że ludzie nadal chcą stawiać nierealistyczne oczekiwania w stosunku do aplikacji internetowych tylko dlatego, że będzie to wymagało od kogoś korzystania z przeglądarki, która ma zaledwie… 2-3 lata. Rozumiem, że ludzie nie lubią zmian. A wszyscy wiemy, że wiele korporacji zapewni dni/tygodnie szkoleń, aby pomóc swoim pracownikom zrozumieć nowe przeglądarki internetowe. Zdarzają się również przypadki, w których ludzie są zmuszani do korzystania ze starych przeglądarek, ponieważ archaiczny system, którego używają do wewnętrznej pracy, działa tylko na tej przeglądarce (ActiveX+IE6). **Moje pytania** Jak możesz poinformować użytkowników końcowych, że będą musieli uaktualnić przeglądarkę, aby korzystać z najnowszej wersji Twojej witryny bez ogromnego oburzenia? Dlaczego istnieje oczekiwanie, że oprogramowanie może wymagać od użytkowników uaktualnienia wersji systemu Windows/Mac, ale witryna nie może wymagać nowej wersji przeglądarki?


title: Jaki jest rzeczywisty przypadek użycia gramatyki Chomsky Type-I (wrażliwej na kontekst)?

text: Ostatnio dobrze się bawiłem badając rozwój parserów języka w kontekście ich dopasowania do hierarchii Chomsky'ego. Jaki jest dobry rzeczywisty (tj. nie teoretyczny) przykład gramatyki kontekstowej?


title: Algorytm/Strategia lub Struktura danych do przechwytywania priorytetów podpriorytetów w aplikacji

text: Pracuję nad systemem CMS, który zaczyna trochę ewoluować. Zaczęliśmy od treści, które miały następujące priorytety (kolumna w bazie danych w tabeli treści): WYSOKI ŚREDNI NISKI. Dane zostały pobrane według priorytetu WYSOKI będącego na szczycie itp. Teraz po kilku miesiącach pojawiła się potrzeba posiadania podpriorytetów: WYSOKI [wysoki, średni , niski ], MED [wysoki, średni, niski ] itp. Mam gałąź testową z kolumna podrzędna w db. Tak więc pobieranie według priorytetu przywraca teraz najpierw WYSOKI(wysoki) WYSOKI(średni) WYSOKI(niski). Zastanawiam się, czy istnieje lepszy sposób na zrobienie tego, czego nie widzę. Istnieje aplikacja kolejowa.


title: wysyłka zrekompilowanej wtyczki pod lgpl

text: Przekompilowałem wtyczkę (wprowadzając zmiany, zanim zostaną zaakceptowane w górę) dla struktury mediów gstreamer. Nie przekompilowałem całej biblioteki - tylko wtyczka. Jeśli chcę, aby zastrzeżony kod Pythona używał tej wtyczki – czy działam niezgodnie z licencją LGPL? Mój kod nigdy _bezpośrednio_ nie łączy się ze zmodyfikowaną wtyczką. MyPythonCode [zastrzeżony] --> pygst/binary [LGPL] --> gStreamer/binary [LGPL] --> modifiedPlugin/binary(w/source)[LGPL] Kod źródłowy zmodyfikowanej wtyczki byłby dostępny dla każdej licencji LGPL.


title: Czego programista C++ powinien oczekiwać podczas rozmowy kwalifikacyjnej w firmie Railsowej?

text: Od ponad 5 lat pracuję nad aplikacjami C++ na dużą skalę. Zajmuję się TDD, używam STL i Boost itp. Zdecydowałem, że potrzebuję zmiany i około rok temu zacząłem uczyć się Rubiego, a kilka miesięcy temu zacząłem bawić się Railsami, HTML5 i CSS. Nie znam jeszcze JavaScriptu, teraz skupiam się na Railsach. Czego mogę się spodziewać podczas rozmowy kwalifikacyjnej na stanowisko programisty backendowego Ruby on Rails? Jak mogę się zaprezentować, aby skorzystać z mojego doświadczenia w C++? Jestem teraz na wyższym poziomie i nie mogę zacząć od stażysty. Uważam się za naprawdę dobrego w C++, znam też trochę Scheme, trochę Pythona i trochę Ruby. Będę miał gotową jedną małą aplikację Railsową i 1 prosty Gem opublikowany, zanim zacznę aplikować. Do tego sporo osobistych projektów w C++. Mam tytuł licencjata z elektrotechniki i kończę studia magisterskie z CS w czerwcu 2011.


title: Język PHP, strukturalny czy OOP?

text: Chciałbym omówić, dlaczego PHP nazywa się językiem strukturalnym? jakie są koncepcje OO, których nie można zaimplementować za pomocą PHP?


title: Uwierzytelnianie Facebooka i Twittera z aplikacji mobilnych

text: Być może brakuje mi czegoś w interfejsach API logowania na Facebooku i Twitterze. Coś, co uniemożliwia mi zrozumienie, w jaki sposób byłyby wykorzystywane w aplikacjach mobilnych. Wydaje się, że oba interfejsy API muszą przekierować Cię do witryny, a następnie z powrotem. Jak by to działało z aplikacji mobilnej? A może istnieje inny sposób korzystania z tych interfejsów API? Muszę napisać stronę, która ma natywny login, login Facebooka i Twittera. Następnie mam się odwrócić i otworzyć zestaw usług internetowych dla aplikacji mobilnych na Androida i iPhone'a. Pomyślałem, że to „zgubienie” pytania, które można zadać na StackOverflow. Jakie jest najlepsze podejście? Jakieś linki do wywoływania interfejsu API bez interakcji z interfejsem użytkownika?


title: Jakie są pisanki, które poszły nie tak?

text: Jakie są niektóre pisanki, które poszły nie tak i spowodowały niezamierzone konsekwencje, np. zwolnienie programistów, straty finansowe, a nawet utratę życia ludzkiego itp.? Proszę Podziel się.


title: Konwencja o nazwach modeli w rubinach na szynach

text: Robiłem mój diagram ER dla aplikacji rails, od której mam zacząć i mam encję o nazwie `Class News`, więc mam model `ClassNew`, ale nie wiem, czy będę miał problemy w przyszłość z częścią `Nową` lub jaki byłby właściwy sposób na zrobienie tego o jak powinienem nazwać model? ponieważ właściwą rzeczą byłoby `ClassNews` a tabelą `class_news`... Co jest najlepsze podczas pracy z `News` w czasie tworzenia modeli dla ActiveRecord w Ruby on Rails. Dziękuję.


title: Adaptacja części projektu open-source na własny użytek

text: Jestem w trakcie kodowania gry i prawie skończyłem z mechaniką gry do punktu, w którym jest całkiem grywalna. Później odkryłem wersję open source gry, którą tworzę, z tą samą mechaniką, podczas gdy kodowałem swoją od zera. Jednakże, w interesie późniejszej optymalizacji, mogę chcieć zaadaptować niewielką część kodu projektu open source. Projekt jest objęty licencją GNU GPL 2 i jest zakodowany w innym języku dla innego frameworka (Android/Java kontra mój na C#/XNA). Jakie są moje opcje kopiowania funkcji / procedur z projektu open source na licencji GPL, jeśli i tak musiałbym przenieść kod na język, którego używam? To nie są opatentowane algorytmy, o których mówię, tylko kod, który znalazłem, który może sprawić, że mój program będzie bardziej wydajny lub usunie błąd.


title: Jak wskazać, że słowo jest nazwą metody w Objective-C?

text: Możesz wskazać, że `XXX` to nazwa metody, pisząc `XXX()`. Ale w Objective-C nie możesz napisać `XXX()` dla metody `XXX`. Jeśli napiszesz „XXX”, nie możesz stwierdzić, czy „XXX” to nazwa metody, czy inny typ identyfikatora. Jak możesz wskazać, że `XXX` to nazwa metody klasy Objective-C? _**EDIT_** Wywołanie metody Objective-C różni się od innych języków. w Objective-C wywołanie metody to: [self XXX]; w innym języku wywołanie metody to: self->XXX(); W innym języku, na przykład, możemy napisać w stackoverflow: XXX() nie działa I możemy wiedzieć, że `XXX` to metoda dzięki `()`. Ale w Objective-C nie możemy powiedzieć: XXX nie działa Zamiast tego, aby wyjaśnić, że XXX to metoda, musimy powiedzieć: metoda XXX nie działa


title: Co to są adresy pamięci?

text: Mam mniej więcej 0 wiedzy w tematach niskiego poziomu, więc wybacz moją możliwą ignorancję. Wiem, że w językach takich jak C, wskaźniki przechowują „adresy pamięci”, tj. ciągi (lub dane binarne?) zapisane w kodzie szesnastkowym, takie jak `0x52A132F3`. Sądząc po określeniu „adres pamięci”, zakładam, że ta liczba faktycznie prowadzi do jakiegoś miejsca w pamięci. Ale trudno mi zrozumieć, czym właściwie jest „miejsce w pamięci” i jak liczba szesnastkowa może do niego „prowadzić”. (Tu programista Java..) Tak więc dwa pytania: 1. Czy adresy pamięci wskazują miejsca na samym procesorze, czy gdziekolwiek w komputerze? 2. Czy pamięć jest „uporządkowana” w sprzęcie w taki sposób, że sensowne jest odwoływanie się do niej za pomocą liczby „porządkowej”, takiej jak „0x52A132F3”? W jaki sposób pamięć jest uporządkowana sprzętowo oraz jak i dlaczego ma sens uzyskiwanie do niej dostępu za pomocą wartości liczbowej?


title: Właściwości w ARC: Zawsze czy tylko publiczne?

text: Niecałe dwa lata temu po przeczytaniu artykułu Roberta McNally’ego o skromnej nazwie „The Code Commandments: Best Practices for Objective-C Coding” przyjąłem praktykę używania właściwości dla prawie każdego elementu danych moich klas Objective-C ( III przykazanie z maja 2012 r.). McNally wymienia następujące powody (moje podkreślenie): 1. Właściwości wymuszają ograniczenia dostępu (takie jak tylko do odczytu) 2. _Właściwości wymuszają politykę zarządzania pamięcią (silna, słaba)_ 3. Właściwości zapewniają możliwość przejrzystej implementacji niestandardowych ustawiaczy i pobierających. 4. Właściwości z niestandardowymi seterami lub getterami mogą być użyte do wymuszenia strategii bezpieczeństwa wątków. 5. Posiadanie jednego sposobu dostępu do zmiennych instancji zwiększa czytelność kodu. Większość moich nieruchomości umieszczam w kategoriach prywatnych, więc numer 1 i 4 zazwyczaj nie są problemami, na które natrafiam. Argumenty 3 i 5 są bardziej „miękkie”, a przy użyciu odpowiednich narzędzi i innych spójności mogą stać się nieistotne. Więc ostatecznie, dla mnie najbardziej wpływowym z tych argumentów był numer 2, zarządzanie pamięcią. Od tamtej pory to robię. @property (nieatomowy, silny) obiekt id; // Właściwości stały się moimi przyjaciółmi. W ostatnich kilku projektach przerzuciłem się na używanie ARC, co sprawiło, że zacząłem wątpić, czy tworzenie właściwości do czegokolwiek jest nadal dobrym pomysłem, czy może trochę zbędnym. ARC zajmuje się dla mnie zarządzaniem pamięcią obiektów Objective-C, co w przypadku większości `silnych` członków działa dobrze, jeśli po prostu zadeklarujesz ivary. Typy C, którymi i tak musiałeś zarządzać ręcznie, przed i po ARC, oraz właściwości `słabe` są w większości publiczne. Oczywiście nadal używam właściwości do wszystkiego, co wymaga dostępu spoza klasy, ale są to w większości tylko garść właściwości, podczas gdy większość składowych danych jest wymieniona jako ivary pod nagłówkiem implementacji @implementation GTWeekViewController { UILongPressGestureRecognizer *_pressRecognizer; GTPagingGestureRecognizer *_pagingRecognizer; UITapGestureRecognizer *_tapRecognizer; } W ramach eksperymentu robiłem to nieco bardziej rygorystycznie, a odejście od właściwości dla wszystkiego ma pewne pozytywne skutki uboczne. 1. Wymagania dotyczące kodu elementu członkowskiego danych (`@property`/`@synthesize`) zmniejszyły się do samej deklaracji ivar. 2. Większość moich odniesień do `self.something` została wyczyszczona do samego `_something`. 3. Łatwo rozróżnić, które elementy danych są prywatne (iwary), a które publiczne (właściwości). 4. Wreszcie, „wydaje się” bardziej, jakby to był cel, dla którego Apple zaplanował właściwości, ale to subiektywna spekulacja. **Przechodząc do pytania** : Powoli przesuwam się w stronę ~~ciemnej strony,~~ używając coraz mniej właściwości na rzecz implementacji-ivarów. Czy możesz podać mi trochę uzasadnienia, dlaczego powinienem trzymać się właściwości do wszystkiego, lub potwierdzić mój obecny tok myślenia, dlaczego powinienem używać więcej iwarów, a mniej właściwości tylko tam, gdzie jest to potrzebne? Najbardziej przekonująca odpowiedź dla obu stron otrzyma moją ocenę. _EDIT:McNally wtrąca się na Twitterze, mówiąc: „Myślę, że moim głównym powodem pozostawania przy właściwościach jest: jeden sposób na zrobienie wszystkiego, który robi wszystko (w tym KVC/KVO.)”_


title: Architektura oprogramowania do uwierzytelniania/kontroli dostępu do usługi sieciowej REST

text: Konfiguruję nową usługę sieciową RESTful i muszę zapewnić model kontroli dostępu oparty na rolach. Muszę stworzyć architekturę, która pozwoli użytkownikom podać swoją nazwę użytkownika i hasło, aby uzyskać dostęp do usług, a następnie ograniczyć sposób, w jaki mogą korzystać z usług (z jakich usług mogą korzystać, odczyt vs odczyt/zapis itp.) w oparciu o role przypisane do tych użytkowników. Rozejrzałem się po innych pytaniach i znalazłem fragmenty tego, czego chcę. Na przykład istnieje kilka świetnych dyskusji na temat sposobu obsługi przekazywania poświadczeń do usług REST uwierzytelniania, najlepsze praktyki. Istnieje również kilka świetnych wskazówek na temat tego, co programiści powinni wiedzieć podczas tworzenia stron internetowych (co każdy programista powinien wiedzieć przed zbudowaniem publicznej witryny internetowej). Ale nie udało mi się znaleźć dobrego posta, artykułu, książki o najlepszych praktykach i wzorcach dla architektury oprogramowania, która implementuje te rozwiązania. W szczególności: * Jak powinny być przechowywane dane użytkownika i prawa dostępu? (model danych, lokalizacja, format) * Jakie są dobre wzorce projektowe do reprezentowania i śledzenia ich na serwerze? (sesje w pamięci, każdorazowe wyszukiwanie baz danych itp.) * Jakie są dobre wzorce mapowania tych praw do usług w bezpieczny sposób w bazie kodu? * Jakie opcje architektoniczne mogą pomóc w utrzymaniu bezpieczeństwa i niezawodności systemu? * Jakie wnioski wyciągnięto z okopów? Poszukuję wzorców projektowych i rekomendacji dotyczących architektury oprogramowania poza konkretnymi technologiami. (Jeśli technologie mają znaczenie, planuję zaimplementować to za pomocą pythona, twisted i bazy danych postgresql)


title: Dlaczego niektórzy nauczyciele często uważają złe praktyki za rzeczy, które nie są?

text: Na studiach nauczyciele często mówią, że niektóre rzeczy są złymi praktykami, podczas gdy tak nie jest. Mam na myśli niedawny Dlaczego nazywanie kolumny klucza podstawowego tabeli „Id” jest uważane za złą praktykę? pytanie lub fakt, że mój nauczyciel powiedział nam, że wczesne powroty to zła praktyka i nigdy nie wolno ich używać. Istnieje wiele innych przykładów, które pamiętają wszyscy, którzy byli na studiach. Kiedy się tego nauczysz, tych rzeczy trudno się oduczyć. Kiedy masz do czynienia ze stażystą, który nauczył się czegoś złego od swojego nauczyciela, nie zawsze jest oczywiste, aby wyjaśnić, że to, co powiedział nauczyciel, jest albo nie do końca prawdziwe, albo czasami całkowicie błędne. Co sprawia, że ci nauczyciele błędnie uważają, że rzeczy są złymi praktykami, podczas gdy w branży programistycznej większość ludzi by się z nimi nie zgodziła? Czy oni nie czytają książek o programowaniu, które my, programiści, czytamy? Czy często nie rozmawiają z programistami?


title: Szybki algorytm znajdowania wspólnych elementów dwóch posortowanych list

text: Załóżmy, że mam dwie listy N 3 na 3 wektory liczb całkowitych. Muszę znaleźć szybki sposób (powiedzmy o czasie działania najwyżej N ^ (1 + epsilon)), aby znaleźć wektory z pierwszej listy, które mają tę samą pierwszą współrzędną z wektorem z drugiej listy. Oczywiście mógłbym wykonać następujące naiwne porównanie: for u in list_1 wykonaj for v in list_2 jeśli u[1] równa się v[1] to print u;print v; koniec jeśli; koniec dla; koniec za; To jednak wymagałoby N^2 pętli. Uważam, że posortowanie dwóch list według ich pierwszej współrzędnej, a następnie wyszukanie kolizji jest prawdopodobnie szybkim sposobem. Bubbleshort itp. prawdopodobnie zajęłoby logN czasu, ale naprawdę nie wiem, jak zakodować wyszukiwanie kolizji między posortowanymi listami. Każda pomoc byłaby mile widziana.


title: Efektywny kontra wydajny kod

text: **TL;DR: Szybki i brudny kod, czy „poprawny” (wstaw swoją definicję tego terminu)?** Często występuje napięcie między „wydajnym” a „efektywnym” w tworzeniu oprogramowania. „Wydajny” często oznacza kod, który jest „poprawny” z punktu widzenia przestrzegania standardów, stosując powszechnie akceptowane wzorce/podejścia do struktur, niezależnie od wielkości projektu, budżetu itp. „Skuteczny” nie oznacza bycia „właściwym” , ale o załatwianiu spraw. To często skutkuje kodem, który wykracza poza granice powszechnie akceptowanych „poprawnych” standardów, użytkowania itp. Zazwyczaj ludzie płacący za wysiłek programistyczny dyktowali z wyprzedzeniem, co jest dla nich bardziej wartościowe. Organizacja, która żyje w przestrzeni technicznej będzie dążyła do efektywnego celu, inne będą dążyć do efektywnego. Deweloperzy często odmawiają kompromisu ze swoim ulubionym podejściem do drugiego. Z własnego doświadczenia odkryłem, że osoby z formalnym wykształceniem w zakresie tworzenia oprogramowania skłaniają się w stronę obozu Wydajności. Ci, którzy podjęli tworzenie oprogramowania mniej więcej jako narzędzie do załatwiania spraw, kierują się na obóz Efektywności. Te obozy nie za dobrze się dogadują. Zarządzanie zespołem programistów, którzy nie są wszyscy w jednym obozie, jest wyzwaniem. Z własnego doświadczenia, w którym obozie lądujesz i czy musisz uzasadnić swoje podejście do innych? Do kierownictwa? Do innych programistów?


title: Nazewnictwo dla klasy, która wykorzystuje wzorzec iteratora

text: Wzorzec iteratora jest bardzo jasno zdefiniowany. Jak nazwałbyś konsumenta iteratora?


title: Wytyczne dotyczące tworzenia referencyjnie przejrzystych callables

text: W niektórych przypadkach podczas kodowania w Pythonie chcę używać referencyjnie przejrzystych funkcji callables. Moim celem jest pomoc w obsłudze współbieżności, memoization, testach jednostkowych oraz weryfikacji poprawności kodu. Chcę spisać jasne zasady dla siebie i innych programistów, które zapewnią przejrzystość referencyjną. Nie przeszkadza mi to, że Python nie będzie narzucał żadnych reguł - ufamy, że będziemy ich przestrzegać. Zauważ, że nigdy nie modyfikujemy funkcji ani metod w miejscu (tj. przez włamanie się do kodu bajtowego). Czy poniższe miałoby sens? > Wywoływalny obiekt `c` klasy `C` będzie referencyjnie przezroczysty, jeśli: > > 1. Zawsze, gdy zwrócona wartość `c(...)` zależy od jakiejkolwiek instancji > atrybutów, zmiennych globalnych lub plików dyskowych, takich jak atrybuty, zmienne i pliki > nie mogą się zmieniać w czasie wykonywania programu; jedynym wyjątkiem jest to, że atrybuty instancji mogą zostać zmienione podczas inicjalizacji instancji. > > 2. Kiedy wykonywane jest `c(...)`, nie występują żadne modyfikacje stanu programu >, które mogą mieć wpływ na zachowanie dowolnego obiektu dostępnego przez jego interfejs "public >" (zdefiniowany przez nas). > > Jeśli nie nałożymy żadnych ograniczeń na to, co zawiera "publiczny interfejs", wtedy reguła #2 staje się: > Gdy wykonywane jest `c(...)`, żadne obiekty widoczne poza zakresem ` nie są modyfikowane c.__zadzwoń__`. Uwaga: bezskutecznie próbowałem zadać to pytanie na SO, ale mam nadzieję, że jest to bardziej odpowiednie dla tej witryny.


title: Identyfikowanie usług domenowych i usług aplikacji podczas wykonywania DDD

text: — Próbuję dowiedzieć się, jak zidentyfikować usługi aplikacji w mojej aplikacji. Myślę, że mogę zidentyfikować usługę domeny na podstawie 2 rzeczy: 1. Działa jako fasada repozytorium. 2. Zawiera logikę biznesową, której nie można zamknąć w jednej jednostce. Pomyślałem więc o tym prostym przypadku użycia, nad którym obecnie pracuję: Administrator powinien mieć możliwość zbanowania określonego użytkownika. Operacja musi być zarejestrowana, a do zbanowanego użytkownika musi zostać wysłany e-mail. Mam `UserRepository`, który ma funkcję `getUserById()`. Mam encję `User`, która ma funkcję `ban()`. Stworzę `UserService` w ten sposób: class UserService{ static void banUser(int userId){ User user= UserRepository.getUserById(userId); użytkownik.ban(); UserRepository.update(użytkownik); } } `userId` jest zmienną `POST`, którą otrzymuję w moim `Kontrolerze` z formularza internetowego. Teraz gdzie idzie rejestrowanie? Muszę dwukrotnie zalogować proces banowania przed i po operacji, np. Logger.log("Próba zablokowania użytkownika o identyfikatorze:"+userId); //użytkownik zostaje zbanowany Logger.log("użytkownik zbanowany pomyślnie."); Po drugie, muszę wysłać e-mail do użytkownika. dokąd należy zadzwonić? Myślałem o tym, aby logowanie i e-mail to sama klasa `UserService`, ale myślę, że są lepsze rozwiązania. Po trzecie, gdzie w tym wszystkim mieszczą się usługi aplikacji?


title: Zrozumienie ramki stosu wywołania funkcji w C/C++?

text: Próbuję zrozumieć, jak budowane są ramki stosu i które zmienne (params) są wypychane na stos w jakiej kolejności? Niektóre wyniki wyszukiwania wykazały, że kompilator C/C++ podejmuje decyzje na podstawie operacji wykonywanych w ramach funkcji. Na przykład, gdyby funkcja miała po prostu zwiększyć przekazaną wartość int o 1 (podobnie jak operator ++) i ją zwrócić, umieściłaby wszystkie parametry funkcji i zmienne lokalne w rejestrach. Zastanawiam się, które rejestry są używane do parametrów zwracanych lub przekazywanych przez wartość. Jak zwracane są referencje? Jak kompilator wybiera między eax, ebx,ecx i edx? Co muszę wiedzieć, aby zrozumieć, w jaki sposób rejestry, stosy i referencje sterty są używane, budowane i niszczone podczas wywołań funkcji?


title: Metody testowania bardzo dużej aplikacji

text: Mam bardzo dużą aplikację PHP. Zwykle pracuje nad tym 2-3 programistów na pełny etat i dochodzimy do punktu, w którym wprowadzamy zmiany i tworzymy błędy (funkcje kaszlu!). Oprogramowanie nie jest skomplikowane, po prostu dużo się dzieje (35~ kontrolerów, mniej więcej te same modele itp.). Nawet będąc ostrożnym, łatwo jest zmienić ten widok (poprawiając id elementu), aby zniweczyć zapytanie ajaxowe, które dzieje się w pewnych specjalnych warunkach (wylogowanie stojąc na jednej nodze). Testy jednostkowe to pierwsze rzeczy, które przychodzą mi do głowy, ale wypróbowaliśmy je w innej aplikacji i tak łatwo o nich zapomnieć / lub spędzić więcej czasu na pisaniu testów niż na ich wykonywaniu. Mamy środowisko pomostowe, w którym kod jest sprawdzany przed opublikowaniem. Może potrzebujemy osoby Q/A w niepełnym wymiarze godzin? Każdy ma jakieś sugestie/myśli.


title: Wprowadzenie nowego rozrusznika i proces indukcji

text: Pierwszy dzień w pracy dla nowego programisty. Zakładając, że firma zajęła się wszystkimi zwykłymi sprawami korporacyjnymi (korzyści, papierkowa robota, zdrowie i bezpieczeństwo itd.), ** O czym powinieneś porozmawiać z nowym programistą, aby jak najszybciej przyspieszyć i zwiększyć wydajność ?** Dodatkowo, jakie są kluczowe rzeczy, aby ten proces zakończył się sukcesem? Co działa szczególnie dobrze? (Edycja: Dodano nagrodę. Obecna najlepsza odpowiedź jest w porządku, ale nadal myślę, że można zrobić więcej, aby programiści w pierwszym tygodniu byli dla nich tak przydatni, jak to tylko możliwe. Naprawdę mam nadzieję na spostrzeżenia na temat dobrych i złych początków pracy ludzie mieli).


title: Wycena pracy zespołowej

text: Przypuszczam, że nie ma na to prostej odpowiedzi, ale jakie pomysły przychodzą do głowy, aby określić, ile każdy programista dostałby za udział we wspólnym projekcie, gdyby został sprzedany?


title: Masz do czynienia z kodem dwujęzycznym (mówionym)?

text: Muszę więc popracować z tym zestawem kodu, aby przepisać go na nowo, a jest on pisany przez ludzi mówiących zarówno po angielsku, jak i po francusku. Oto migawka tego, o czym mówię (tylko około 4000 wierszy tego) function refreshDest(FormEnCours,dest,hotel,duration) { var GateEnCours; GateEnCours = FormEnCours.gateway_dep.options[FormEnCours.gateway_dep.selectedIndex].value; if (GateEnCours == "") { FormEnCours.dest_dep.length = 0 } else if (FormEnCours.dest_dep != null && FormEnCours.dest_dep.type && FormEnCours.dest_dep.value != "ALL") { if (Cours[Gate) ] == null || Destinations[GateEnCours].length == 0) { PobierzMiejsca docelowe(FormEnCours,GateEnCours,docel,hotel,czas trwania); } else { refreshDestSuite(FormEnCours,GateEnCours,docel,hotel,czas trwania); } } } function refreshDuration(FormEnCours,GateEnCours,DestEnCours,hotel,duration) { // Czasy trwania odświeżania var FlagMoinsDe5Jours = ""; var Flag5a10jours = ""; var Flag11a16jours = ""; var FlagPlusDe16Jours = ""; ....... Czy jest jakieś podejście, które ja, jako osoba posługująca się tylko jednym z tych języków, mogę zastosować, aby cały ten proces był o wiele mniej bolesny, zarówno dla ustalenia, jak to wszystko działa, a następnie do refaktoryzacji?


title: Pojęciowo, co to znaczy, gdy mówi się, że każdy wątek ma swój własny stos?

text: Czytałem Java Concurrency in Practice Briana Goetza i wewnątrz sekcji **Stack Confinement** jest wspomniane, że każdy wątek otrzymuje swój własny stos, więc zmienne lokalne są wewnętrznie ograniczone do wykonywanego wątku; istnieją na stosie wykonywanych wątków, który nie jest dostępny dla innych wątków. Co to znaczy, że każdy wątek ma swój własny stos wykonania?


title: W którym momencie asynchroniczne odczytywanie dysków we/wy jest bardziej wydajne niż synchroniczne?

text: Zakładając, że istnieje fragment kodu, który odczytuje pliki dla wielu użytkowników, a pliki mają dowolny rozmiar: **W jakim rozmiarze asynchroniczne odczytywanie pliku staje się bardziej wydajne? Innymi słowy, jak mały musi być plik, aby był szybszy tylko do odczytu synchronicznego?** Zauważyłem (i może się mylę), że czytanie bardzo małych plików trwa dłużej je asynchronicznie niż synchronicznie (w szczególności z .NET). Zakładam, że ma to związek z czasem konfigurowania takich rzeczy, jak porty zakończenia I/O, wątki itp. Czy jest jakaś praktyczna zasada, która może tutaj pomóc? Czy jest to zależne od systemu i środowiska?


title: Rozsądna prowizja za stanowisko

text: Moja sytuacja jest taka, że zaproponowano mi pracę przy produkcie dla małej firmy. Obecnie pracuję dla dużej korporacji za przyzwoitą pensję, biorąc pod uwagę moje doświadczenie. Od dłuższego czasu jestem zainteresowany tworzeniem własnych produktów i założeniem własnej firmy. Zaproponowano mi pracę polegającą na opracowaniu produktu, który będę głównie rozwijał. Przyjrzałem się pomysłowi i myślę, że to całkiem dobry pomysł i ma realne szanse powodzenia. Powiedziałem mu, że byłbym zainteresowany uzyskaniem prowizji od sprzedaży produktu. Biorąc pod uwagę, że będę rozwijał produkt, jaki procent byłby rozsądny zapytać?


title: Co powinienem wiedzieć lub robić po sześciu latach doświadczenia w tworzeniu oprogramowania?

text: Nawet po sześciu latach doświadczeń wciąż robię to, co robiłam sześć lat temu. Pracuję nad tymi samymi przyziemnymi rzeczami CRUD. Nic nie było prawdziwym wyzwaniem. Ponieważ pracuję w małej firmie, nie mamy nawet odpowiedniego procesu rozwoju. Na przykład nie przeprowadzamy nawet testów jednostkowych. Czuję, że po prostu nie wchodzę na wyższy poziom w mojej karierze.


title: Funkcja wymagająca wielu parametrów

text: Mam problem z tym związany: Czy istnieją wytyczne, ile parametrów powinna przyjmować funkcja? W moim przypadku mam funkcję opisującą zaokrąglony prostokąt. Wołający określa * Liczbę całkowitą, która określa, w jaki sposób prostokąt powinien zostać scalony we wcześniej utworzone kształty * Kotwicę, która jest punktem używanym do wyrównania (do prawej, do lewej, do góry, do dołu itp.). (0,-1) oznacza, że pozycja (kolejny parametr) opisuje górny, środkowy punkt prostokąta. * Pozycja prostokąta * Szerokość i wysokość * Promień narożnika Czy w tym przypadku powinienem użyć wzorca obiektu Parametr? Trudno zobaczyć, jak te parametry są powiązane


title: IDE dla osób niedowidzących

text: Kolega z dysfunkcją wzroku poprosił mnie o zarekomendowanie środowiska IDE z łatwymi do znalezienia i łatwymi w użyciu kontrolkami dla: 1. rozmiaru czcionki 2. kolorów tła i pierwszego planu 3. zmiany schematu kolorów składni 4. obsługi co najmniej C/ C++ i Java Wolałby IDE, które jest albo przenośne, albo ma podobne wersje dla Linuksa, Windowsa i Maca. Preferuje ciemne tło i jasne czcionki i musi siedzieć bardzo blisko wyświetlacza.


title: Jakie jest uzasadnienie używania plików .inc do deklarowania i implementowania kodu niektórych jednostek Delphi RTL?

text: Począwszy od #Delphi #XE2 wiele nowych jednostek RTL związanych ze stylami Vcl, OSX i tak dalej, używa plików inc do deklarowania typów, klas i implementacji kodu (tak jak robi to FPC), jakie jest uzasadnienie, aby to zrobić? możesz zobaczyć, co mam na myśli, jeśli sprawdzisz jeden z tych folderów (źródło\rtl\posix, source\rtl\posix\osx, source\rtl\sys )


title: Jaki jest czas big-O cpu algorytmu Euklidesa „Największy wspólny dzielnik dwóch liczb”

text: Patrząc na algorytm Euklidesa dla "Największego wspólnego dzielnika dwóch liczb", próbuję odgadnąć czas dużego O procesora dla liczb K i N. Czy ktoś może pomóc? To jest algorytm, tak jak go rozumiem.. Gdzie: * max(A,B) = większa z A lub B taka, że: min(10,3) = 10 * min(A,B) = mniejsza z A lub B taki, że: min(10,3) = 3 * modulus(A,B) = reszta z A podzielona przez B tak, że: modulus(10, 3) = 1 Algorytm wygląda następująco: 1. r = modulus(max( K,N), min(K,N)) 2. jeśli r = 0 * to GCD to max(K,N) * w przeciwnym razie: * max(K,N) = r * przejdź do kroku 1 Wydaje mi się, że ze względu na występujący podział nie może być algorytmem liniowym, dlatego jest przydatny jako coś bardziej wydajnego niż naiwna implementacja, która po prostu próbuje wszystkich możliwości od 0 do min(K,N). Ale nie do końca potrafię rozgryźć, czym jest środowisko wykonawcze. Wszelkie wskazówki byłyby bardzo pomocne!


title: Code Base z okropnymi konwencjami kodu, przestrzegasz ich?

text: Bez czasu na refaktoryzację, kiedy pracujesz nad starszym kodem, z najokropniejszymi konwencjami, jaka jest najlepsza praktyka? Czy próba podążania za _lepszym_ stylem kodowania poprawiłaby czytelność, czy faktycznie ją zaszkodzi? Na przykład w metodzie java nazwy metod są zwykle pisane wielkością wielbłąda: > myGoodNamedMethod Ale w repozytorium jest kod z takimi metodami (nie wszystkie, ale większość) > my_c_style_method_that_looks_off_in_java


title: Alternatywy dla przesyłania typów w Twojej domenie

text: W mojej domenie mam encję `Activity`, która ma listę `ITask`s. Każda implementacja tego zadania ma swoje własne właściwości poza samą implementacją `ITask`. Teraz każda operacja encji `Activity` (np. `Execute()`) musi tylko przejść przez tę listę i wywołać metodę ITask (np. `ExecuteTask()`). Problemem jest sytuacja, w której należy zaktualizować właściwości określonego zadania, na przykład podczas konfigurowania zadania (nie w ramach metody execute). Jak uzyskać instancję tego zadania? Widzę następujące opcje: * Pobierz aktywność według identyfikatora i prześlij zadanie, którego potrzebuję. Spowoduje to dodanie do mojego kodu: * `Tasks.OfType<SpecificTask>().Single(t => t.Id == taskId)` * lub `Tasks.Single(t => t.Id == taskId) as SpecificTask` * Uczyń każde zadanie unikalnym w całym systemie (ustaw każde zadanie jako encję) i stwórz nowe repozytorium dla każdej implementacji ITask Nie podoba mi się żadna opcja, pierwsza bo nie lubię rzutowania: jestem przy użyciu NHibernate i jestem pewien, że to wróci i ugryzie mnie, gdy zacznę używać Lazy Loading (NHibernate obecnie używa serwerów proxy do zaimplementowania tego). Nie podoba mi się ta druga opcja, ponieważ są/będą dziesiątki różnego rodzaju zadań. Co oznaczałoby, że musiałbym stworzyć tyle repozytoriów. Czy brakuje mi tutaj trzeciej opcji? A może któryś z moich zastrzeżeń do tych dwóch opcji jest nieuzasadniony? Jak rozwiązałeś ten problem w przeszłości?


title: Co napędza przyjęcie lub nie, nowych języków programowania?

text: Naprawdę chciałbym się skupić na tym, dlaczego niektóre nowe języki programowania są przyjmowane w głównym nurcie, a inne pozostają stosunkowo niszowe. Chciałbym wiedzieć o konkretnych przypadkach użycia, kompatybilności wstecznej lub nowych funkcjach, prostych lub złożonych trudnościach w implementacji. Konkretne przykłady byłyby mile widziane, ale nie dajmy się wciągnąć w dokładną definicję „głównego nurtu” lub „niszy”.


title: Uzasadnienie biznesowe dla zdecentralizowanych systemów kontroli wersji

text: Szukałem i nie mogłem znaleźć żadnych _biznesowych_ powodów, dla których systemy git/mercurial/bazzr są lepsze niż systemy scentralizowane (subversion, perce). Gdybyś próbował sprzedać DVCS osobie nietechnicznej, jakie argumenty dostarczyłbyś dla DVCS **zwiększający zysk**. Niedługo przedstawię git mojemu menedżerowi, zajmie to trochę czasu przekształcenie repozytoriów subversion i trochę wydatków na zakup licencji na smartgit. **Edytuj** Próbowałem przekształcić to pytanie w ogólną dyskusję na temat scentralizowane vs zdecentralizowane, ale nieuchronnie zmieniło się w git vs subversion. Z pewnością istnieją lepsze systemy scentralizowane niż dywersja.


title: Dlaczego wieloplatformowe języki programowania nie są popularne?

text: Rozmawiałem więc z przyjacielem, który wspomniał > Używając WAC mogę napisać kod JavaScript, który będzie się kompilował i uruchamiał w iOS, > Android, BB itp. i jest ten język programowania, który pozwala pisać kod, który jest _wieloplatformowy_: http: //haxe.org/doc/intro Zastanawiałem się, dlaczego nie poświęcono im jeszcze tyle uwagi, ponieważ pomysł jest tak dobry. Więc w pewnym sensie, co prawdopodobnie jest nie tak z tymi pomysłami w perspektywie rzeczywistej (rzeczywiste projekty do wdrożenia)? **EDYTUJ:** Więc prawdopodobnie niewłaściwie użyłem niektórych terminów, więc oto kilka wyjaśnień. Chodzi o to, że na przykład piszę kod w jednym języku, potem mogę go uruchomić na urządzeniach z systemem iOS i Android, które mają swoje natywne języki programowania. Oznacza to, że mam aplikację, którą mogę uruchomić na obu urządzeniach bez konieczności kodowania Javy lub Objective C To najlepsze, co mogę zrobić, aby uzyskać wyjaśnienia, ponieważ sam jestem trochę zdezorientowany T_T


title: Jak radzisz sobie ze stałymi spóźnialskimi na spotkaniach stand-upowych?

text: Nasze codzienne spotkanie stand-up mamy o **8:45**, a dzień pracy zaczyna się o **8:30**. Nawet z 15 minutami luzu ludzie regularnie przychodzą za późno. Powoduje to, że nasze spotkania są małe, niekompletne, nieefektywne, a czasem nawet zupełnie bezużyteczne. Próbowaliśmy, aby ludzie przynieśli owoce dla zespołu następnego dnia, ale to nie zadziałało, ponieważ codziennie jedliśmy wiele śniadań (a po pewnym czasie nawet nie zawracali sobie głowy przynoszeniem żadnego). Myśleliśmy o nałożeniu kary, ale takie rozwiązania są dla nas dość dziecinne. Jak radzisz sobie z regularnymi spóźnialskimi na spotkaniach wstających? Co zadziałało, a co nie?


title: Jak reprezentować elementy złożone w bazie danych?

text: Muszę zaprojektować tabelę bazy danych zawierającą dane o godzinach pracy programistów. Problem w tym, że mam typ złożony - dwie dane należą do kategorii. W szczególności godziny pracy są podzielone na kategorie: projekt, program, test, rozwiązywanie problemów itp., a każda kategoria jest podzielona na dwa typy: godziny spędzone w pracy i godziny spędzone w domu. Jak zaprojektować typ złożony po stronie bazy danych? ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/gXob9.jpg) Myślałem o przechowywaniu dwóch typów w jednym polu, takim jak „6,2”, ale to stwarza więcej problemów do rozwiązania. Musiałbym teraz przekonwertować i podzielić dane, jednocześnie martwiąc się o problemy z lokalizacją, brakujące dane lub dodanie innej lokalizacji do kategorii. * * * Wyjaśnienie: Zadając moje pytanie w inny sposób, stosunkowo łatwo jest zaprojektować tabelę bez typów złożonych w następujący sposób: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/izuiu.jpg) Ale jak sobie z tym poradzić, gdy każda kategoria jest podzielona na dwa typy?


title: Jak nazwać wątek nadrzędny, który po prostu deleguje pracowników?

text: Mam program, w którym jeden wątek tworzy kolejkę roboczą i grupę pracowników, którzy z niej pobierają, a od czasu do czasu wykonuje pewne prace porządkowe dla pracowników. Jeśli wszystkie procesy robocze są instancjami `FooWorker`, jak nazwałbym drugą klasę? Jednym z pomysłów, jaki miałem do tej pory, jest „FooManager”, ale może jest lepszy?


title: Obliczenia w rejestrze wektorowym

text: Jak działają rejestry wektorowe w zakresie obliczeń i przypisywania do nich danych? Czy jest gdzieś dostępne szczegółowe odniesienie wyjaśniające, jak działają rejestry wektorowe i jak są z nich pobierane dane?


title: Dlaczego nie widzę wielu projektów testów jednostkowych, które uruchamiają i niszczą DB? (ASP.NET MVC)

text: Widzę wszystkie przykłady, które demonstrują kod testów jednostkowych i kpiące z wywołań do DB, ponieważ nie należy dotykać DB. Ale wydaje mi się, że mam skonfigurowane zadania, które używają rzeczywistego schematu, ładują tabele przeglądowe, a następnie wypełniają je danymi przy użyciu metod, które mają być testowane... W ten sposób jest to bardziej rzeczywiste testowanie i wszystkie procedury składowane są testowane również... Ale nigdy nie widziałem takich przykładów... Czy jest jakiś powód, dla którego nie rozumiem, dlaczego ta technika nie jest tak użyteczna, jak się wydaje? EDIT1: Przepraszam .. nie powinienem był nazywać tego testem jednostkowym .. tak. Będę miał również testy jednostkowe, które służą do testowania kodu. Ale poza tym wydaje się, że dobrym pomysłem jest wywołanie i zerwanie oraz DB i posiadanie kodu, który modyfikuje ten DB i wykonuje asercje. Ale nie chcę tego do testowania interfejsu użytkownika.. Po prostu chcę wykonać wiele funkcji CRUD i wiele asercji .. :Moje pytanie brzmi #1 czy to ma sens.. #2 jak mam to wszystko zautomatyzować w Visual Studio ? Jak powiedzieć programowi VS 2012, aby przed uruchomieniem testów uruchomił skrypt SQL? czy jest do tego jakieś specjalne API?


title: Dlaczego Python a nie Lua?

text: Dlaczego Python został wsparty przez Google i stał się tak szybko popularny, a Lua nie? Czy wiesz, dlaczego Lua pozostała w tle?


title: Czy wszystkie nowe projekty internetowe powinny budować swój backend na podstawie zestawów wyników xml/json?

text: Gdybyś tworzył nowy projekt Saas, czy byłoby sensowne zacząć od wszystkich usług backendu zwracających xml/json? Ponieważ w dzisiejszych czasach musisz budować zarówno dla urządzeń internetowych, jak i mobilnych, a także mając zaplecze, które jest kompilowane od początku, aby zwracać pliki xml i json, jesteś gotowy do przejścia na urządzenia mobilne (wszystkie usługi mają logikę biznesową, więc nie będziesz powtarzać cokolwiek). Teraz sieć byłaby MVC, więc kontroler po prostu kierowałby żądanie do zaplecza usługi i konwertował json lub xml na html. Oczywistym minusem jest to, że musisz zbudować backend, a następnie inny projekt internetowy, który wywoła twój backend. Ale to również działa na Twoją korzyść, ponieważ zmusza Cię do oddzielenia swoich obaw i uniknięcia wycieku logiki biznesowej w warstwie kontrolera/widoku. Myśli?


title: Pomysły na wydarzenia dla studentów ACM?

text: Niedawno zostałem wybrany przewodniczącym studenckiej sekcji ACM na mojej uczelni i staram się wymyślić kilka pomysłów na wydarzenia na przyszły rok. Najważniejszą rzeczą, którą robimy co roku, są mecze treningowe i próby dla ICPC. Mam nadzieję, że w tym roku zorganizuję jeszcze jedno lub dwa wydarzenia i zastanawiałem się, czy ktoś ma jakieś fajne pomysły lub doświadczenia z przeszłości, które dobrze się sprawdziły. Jednym z pomysłów, jaki mieliśmy do tej pory, jest zorganizowanie hackathonu, ale generalnie wydaje się, że trudno jest przekonać uczniów z niższych klas, że mają umiejętność uczestniczenia w takich wydarzeniach.


title: Złe nawyki powstałe w procesie uczenia się języka programowania C

text: W broszurze programowej Cambridge University Computer Science z lat 2012-13 w module zatytułowanym „Podstawy Informatyki” stwierdza się: > Głównym celem tego kursu jest przedstawienie podstawowych zasad > programowania. Jako kurs wprowadzający do Tripos Informatyki > jest przeznaczony dla studentów ze wszystkich środowisk. Dla tych, którzy nie mieli > doświadczenia w programowaniu, będzie to zrozumiałe; dla osób z doświadczeniem > w językach takich jak C, będzie to próba skorygowania wszelkich złych nawyków, > których się nauczyli. Wydają się być całkiem pewni, że osoba, która nauczyła się małego C, wykształciła w tym procesie „złe nawyki”. Chciałbym nauczyć się C, ponieważ interesuje mnie czytanie i pisanie kodu źródłowego jądra. Jak nauczyć się C bez tworzenia „złych nawyków”?


title: Reprezentowanie reguły w zestawie reguł

text: Jak reprezentować reguły silnika reguł jako obiekty? Regułą byłoby > if ( _booleanExpression(input)_ ) then _łańcuch działań ogólnych_ " else > _następna reguła_ ...gdzie działaniami ogólnymi mogą być np. przekazanie danych wejściowych do innego łańcucha reguł, zwrócenie wniosku (zakończenie analizy z wynikiem) lub zbieranie dodatkowych danych - choć prawdopodobnie inne działania też mogą okazać się konieczne.Teraz odkładając na bok problem parsowania dowolnych warunków logicznych (załóżmy, że mamy dostępną w pełni działającą klasę `booleanExpression`), jak taki obiekt Rule wyglądałby , a konkretnie, jak wyglądałby obiekt zestawu reguł zawierający uporządkowaną, połączoną siatkę tych elementów, w szczególności w strukturze, która będzie możliwa do przetworzenia przez rzeczywisty silnik (jeśli struktury danych nie wskazują na to, jak taki silnik powinien je przetworzyć, może podpowiedź? po prostu dlatego, że jest zbyt szeroki, aby można go było rozwiązać w jednej odpowiedzi, więc próbuję podzielić problem na mniejsze kawałki wielkości kęsa.


title: Utrzymywanie indeksów dla lokalizacji w posortowanej liście w wierszach bazy danych

text: Mam dość prostą strukturę danych, taką jak ta: tworzenie projektu tabeli (identyfikator int automatycznego przyrostu klucza podstawowego, tekst nazwy); utwórz element tabeli (id int auto inkrementacji klucza podstawowego, nazwa text, project_id int nie null, project_sort_index int nie null, sort_index int nie null, klucz obcy fk_project(project_id) odwołuje się do projektu(id)); „Projekt” może mieć wiele „przedmiotów”. Pozycje mają dwa różne pola do utrzymania porządku sortowania, `project_sort_index` i `sort_index`. Te pola porządku sortowania mają zastosowanie w następujący sposób. Kiedy przeglądam wszystkie elementy należące do projektu, potrzebuję kolejności sortowania określonej dla każdego projektu dla elementów. Gdy przeglądam _all_ elementy globalnie, potrzebuję dla nich porządku sortowania globalnie. Mam kilka pytań, jak najlepiej utrzymywać i modyfikować porządek sortowania dla tych elementów. Powiedzmy, że przeniosłem element z indeksu 4 do indeksu 2. Jak skutecznie propagować tę zmianę w mojej bazie danych? Na przykład, jak teraz zaktualizować wszystkie numery indeksu >= 2, aby przesunąć wszystko w dół, ale jednocześnie zamknąć lukę pozostawioną w miejscu 4? Czy istnieje lepszy sposób sortowania list w SQL?


title: Czy możliwe jest debugowanie wsteczne?

text: Wiem, że istnieje kilka produktów do odwrotnego debugowania. Zastanawiam się, czy debugowanie wsteczne oznacza cofnięcie się o jeden krok lub rozpoczęcie od początku do jednego kroku wstecz? Tutaj znalazłem wyjaśnienie.


title: Opcje licencji oprogramowania

text: Czy istnieje licencja na oprogramowanie, która umożliwia bezpłatny dostęp do kodu źródłowego, ale nie pozwala na redystrybucję jakichkolwiek plików binarnych, bezpośrednio z kodu źródłowego lub zmodyfikowanego kodu źródłowego przez ograniczony czas? Pomysł jest podobny do patentu na oprogramowanie typu open source; oryginalny programista ma wyłączne prawo do sprzedaży i dystrybucji produktu oraz uniemożliwi innym kopiowanie produktu przez ograniczony czas, a kod źródłowy zostanie ujawniony opinii publicznej. Oczywiście wadą jest egzekwowanie tej licencji, ale większe firmy (np. Microsoft) mogłyby ewentualnie czerpać korzyści z projektów open source, ale nadal zachować swoją zastrzeżoną pozycję.


title: Wzorce i praktyki dotyczące pobierania z sieci Web w .Net (C#)

text: Będę składał aplikację do automatyzacji zewnętrznej strony internetowej/aplikacji. W niektórych przypadkach będę musiał poruszać się po witrynie tak, jak zrobiłby to użytkownik (niektórych linków, którymi muszę podążać, nie można przewidzieć i muszą zostać przeanalizowane z odpowiedzi). Używam już Html Agility Pack i jestem świadomy Tidy, jeśli jest to konieczne. **Czy są jakieś inne technologie, o których powinienem wiedzieć?** **Czy są jakieś zalecane wzorce umożliwiające szybkie dostosowanie w przypadku zmian w zewnętrznej aplikacji internetowej?** Przewiduję enkapsulację walidacji odpowiedzi jako jakiś rodzaj strategii lub podobny wzorzec, który można łatwo oddzielić/podłączyć w razie potrzeby, ale wszelkie konkretne sugestie byłyby świetne.


title: Czy Quines są przydatne jako coś więcej niż łamigłówka programistyczna?

text: Quines, czyli programy generujące własny kod jako część lub całość swojego wyjścia, to zgrabny pomysł na programistyczną łamigłówkę. Jednak czy mają jakiś użytek poza tym?


title: Projektowanie wielomodelowego rozwiązania multi-DB ASP.NET MVC

text: Mam rozwiązanie ASP.NET MVC 4, które składam, wykorzystując IoC i wzorzec repozytorium przy użyciu Entity Framework 5. Mam nowe wymaganie, aby móc pobrać dane z drugiej bazy danych (z innej aplikacji wewnętrznej), którą nie mam nad nimi kontroli. Niestety dla drugiej aplikacji nie ma API, a ogólnym wzorcem w moim miejscu pracy jest przejście bezpośrednio do bazy danych. Chcę zachować spójne podejście do modelowania domeny i używać struktury encji do wyciągania danych, do tej pory używałem pierwszego podejścia do bazy danych Entity Framework, aby wygenerować model domeny i kontekst bazy danych. Jednak trochę utknąłem, jak dołączyć drugi model domeny do aplikacji. Mam ogólne repozytorium, które teraz przeniosłem do wspólnego projektu DataAccess, ale bez tworzenia dwóch odrębnych opakowań dla ogólnego repozytorium (aby każdy mógł identyfikować się z określonym kontekstem bazy danych), staram się zobaczyć, jak mogę elegancko zawierać wiele modeli?


title: Dlaczego Java wymaga kontenera serwletów dla prostej usługi RPC?

text: Mam duży kontroler bazy danych napisany w Javie. Kontroler odczytuje informacje z bazy danych i interpretuje je na struktury danych, które są następnie wyświetlane w CLI. Wybrano Javę, ponieważ pisanie w niej kodu jest szybkie i łatwe. Teraz chcę utworzyć serwer RPC na górze kontrolera (XML-RPC lub JSON-RPC dla przyszłych wywołań AJAX), ale wygląda na to, że potrzebuję kontenera serwletów dla mojej usługi RPC. Jestem zdezorientowany, ponieważ w zeszłym roku, kiedy potrzebowałem tego rodzaju możliwości dla innego projektu w Pythonie, zajęło mi mniej niż 5 minut, aby stworzyć tę samą funkcjonalność za pomocą SimpleXMLRPCServer. Ta sama łatwość tworzenia dotyczy również C#, o ile pamiętam. Ale w Javie historia jest inna; teraz potrzebuję serwletu, a zatem kontenera serwletów (tj. Tomcat, Jetty), co oznacza, że muszę zainstalować i utrzymywać serwery WWW. Z tego, co mogę powiedzieć, JSON-RPC do działania wymaga frameworka `Spring`. Spędziłem już około dwóch godzin na nauce projektowania i tego, jak działa Tomcat, nie pisząc ani jednej linijki kodu. Przeszukałem sieć i dowiedziałem się, że mam samodzielne opcje: mogę korzystać z tej biblioteki, ale wydaje się, że nie jest ona utrzymana i jest też nieco skomplikowana (szukam czegoś z dekoratorami / adnotacjami). Inną opcją, którą znalazłem, jest użycie tak zwanego „osadzonego” pomostu, a następnie próba ustawienia go i skonfigurowania za pomocą kodu, co również wydaje się żmudnym zadaniem. Dlaczego nie ma **samodzielnego** mechanizmu dla tak popularnego interfejsu? Czy coś mi tu brakuje?


title: Uczestnictwo w mojej pierwszej konferencji programistycznej - jakieś wskazówki przed wyjazdem?

text: Mój miły pracodawca pozwolił mi w czerwcu odwiedzić konferencję oprogramowania (Międzynarodowa Konferencja PHP, dla tych, którym zależy). Chcąc jak najlepiej to wykorzystać, poprosiłbym bardziej doświadczonych uczestników konferencji, aby udzielili mi wskazówek, co mogę zrobić, aby zmaksymalizować moje doświadczenie edukacyjne na konferencji i zmniejszyć błędy początkujących. Przepraszam, że to pytanie jest trochę niejednoznaczne, ale myślę, że najlepiej jest je nieco bardziej otwarte, abym mógł uzyskać szeroką gamę pomysłów i będzie bardziej przydatny dla dalszych osób szukających odpowiedzi.


title: Programowanie funkcjonalne: pisanie małego interpretera

text: Pracuję nad małą powłoką uniksową i rozważam pomysł napisania interpretera skryptów. Czytając na ten temat, nieuchronnie słyszę o programowaniu funkcjonalnym, rachunku lambda i dowiaduję się o całej fascynacji Lispem. Zanim w to wskoczę, mam kilka pytań. * Jakiego języka powinienem używać? Jestem ciekaw programowania funkcjonalnego, więc byłaby to świetna okazja do rozpoczęcia. Chcę, aby moja powłoka miała jak najmniej zależności zewnętrznych. Zastanawiam się, czy powinienem szukać skompilowanego języka. Chciałbym móc go łatwiej rozpowszechniać. Czy to prawidłowe podejście? jeśli tak, jaki język poleciłbyś? * Jak osadzić interpreter w swoim programie? Widzę to tak, że interpreter jest uruchamiany w drugim, oddzielnym procesie. O ile mi wiadomo, dwa procesy komunikujące się, albo nasłuchują potoku, albo wysyłają do siebie sygnały. Czy to realistyczne podejście? Czy istnieje jakiś konkretny język, który obsługuje tę część? Czy istnieją inne sposoby osadzenia tłumacza?


title: Jakie wzorce projektowe powinien znać każdy programista

text: Zastanawiałem się, jakie wzorce projektowe **każdy** programista, bez względu na język programisty, powinien znać i dlaczego?


title: Jak byś szukał współpracowników?

text: Wygląda na to, że mam niekończący się strumień mniej lub bardziej oryginalnych, mniej lub bardziej fajnych pomysłów na oprogramowanie/aplikacje/rzeczy, które nie zostały jeszcze zapisane w mojej głowie. Czasami decyduję się po prostu rozpocząć realizację mojego pomysłu. Kilka godzin później kończę z przyzwoitym, mniej więcej działającym prototypem tego, co próbuję zbudować. Potem dzwoni mój budzik i muszę wracać do prawdziwego świata, zmęczona jak diabli. W większości przypadków rzeczy, które zacząłem, pozostają na zawsze niedokończone. Czasami to jest w porządku. Innym razem naprawdę czuję, że to wpadka. Ale zdaję sobie sprawę, że istnieją strony takie jak GitHub i jest wielu innych programistów. Czy jest miejsce, w którym można publikować pomysły, propozycje, koncepcje lub szorstki kod w celu znalezienia osób zainteresowanych współpracą przy projektach? **Edytuj:** Zdaję sobie sprawę z „zwykłego sposobu” – rozwijaj się samodzielnie przez jakiś czas, udostępniaj kod, wspominaj o swoim projekcie na blogach deweloperów, IRC lub gdziekolwiek indziej; w końcu przyciąga innych. To, czego szukam, to miejsce do łączenia się z innymi twórcami (np. o różnych specjalizacjach) na wczesnych etapach projektu.


title: Czy rozwój międzyplatformowy może zostać przyspieszony dzięki naprawdę specyficznemu, kompletnemu projektowi wstępnego kodowania?

text: Jestem zielony w programowaniu, ale nie do końca noobiczny. Około pięć lat temu nauczyłem się trochę Javy, a ostatnio nauczyłem się Objective-C. Jakiś czas temu rozmawiałem z facetem od Uniksa, który powiedział, że jeśli zaprojektujesz i zaprojektujesz swoją architekturę obiektową bardzo dokładnie i poprawnie, rozwój międzyplatformowy stanie się naprawdę łatwy. Wystarczy, że weźmiesz opis każdego elementu i zaimplementujesz go. Ponieważ Twój projekt jest tak kompletny, każdy pojedynczy element składa się ze stosunkowo prostych zadań. Chciałbym uzyskać informację zwrotną na temat tej koncepcji. Teoretycznie ma to sens, ale w programowaniu chodzi o wykonanie. A jeśli zgadzasz się z koncepcją, czy możesz wskazać mi materiał, który pomógłby mi zrozumieć, jak budować takie kompletne, konkretne projekty?


title: Dlaczego harmonogramy oprogramowania są tak trudne do zdefiniowania?

text: Z mojego doświadczenia wynika, że zmuszanie inżynierów do dokładnego oszacowania i określenia zadań do wykonania jest jak wyrywanie zębów. Zamiast po prostu oszacować łup na 2-3 tygodnie lub 3-6 miesięcy… jaki jest najprostszy sposób zdefiniowania harmonogramów oprogramowania, aby nie były one tak bolesne do zdefiniowania? Na przykład klient A chce mieć funkcję do 02.01.2011. Jak zaplanować czas na wdrożenie tej funkcji, wiedząc, że po drodze mogą być potrzebne inne poprawki i zajmą dodatkowy czas inżynieryjny?


title: WCF i programowanie obiektowe

text: Buduję program, który miałby wsparcie WCF. Używam wzorca MVC. Dla każdego kontrolera istnieje klasa usługi WCF. np. Mam `CTRL.CTRLBooking`, `WCF.IWCFBooking` i `WCF.WCFBooking`. Dla każdego kontrolera (łącznie 10) istnieje klasa WCF i punkt końcowy. Czy to dobre podejście, czy powinienem trzymać wszystkie metody, które udostępniam w jednej klasie, np. `WCF.WCFService` (biorąc pod uwagę, że ich liczba będzie nie większa niż 25-30)?


title: Przykłady różnych metodologii architektury

text: Czy istnieje zasób lub witryna ilustrująca tworzenie tej samej aplikacji (komputerowej lub internetowej) przy użyciu kilku różnych kontrastujących architektur? Takich jak MVP kontra MVVM kontra MVC itp. Byłoby bardzo pomocne zobaczyć, jak wyglądają obok siebie przy użyciu kodu w świecie rzeczywistym, zamiast porównywać teorię pisemną z teorią pisemną. Często przekonywałem się, że coś można dobrze „opisać” w książce, ale kiedy zaczniesz to wdrażać, subtelności i słabości teorii stają się oczywiste.


title: CQRS i walidacje

text: Zaczynam przedstawiać się w koncepcjach CQRS, ale utknąłem w następującej sytuacji: Załóżmy, że masz encję, która musi mieć unikalną nazwę. Aby to zweryfikować, przed utworzeniem encji musisz wykonać zapytanie, a zatem weryfikujesz z podsystemem zapytań. Ale co się stanie, jeśli nie nastąpiła jeszcze synchronizacja między systemem poleceń a systemem zapytań? Inny klient właśnie wysłał to samo nazwisko przed tobą. Co się dzieje w takim przypadku?


title: Najlepszy sposób na przetestowanie ponownie zaimplementowanej usługi internetowej

text: W moim zespole rozpoczynamy reimplementację usługi. Jednym z ważnych kroków, które należy wykonać, aby to osiągnąć, jest upewnienie się, że robimy to we właściwy sposób i nie wprowadzamy nowych błędów. Mamy więc na myśli stworzenie zestawu testów, aby zweryfikować następujące elementy: * Zachowanie. Obie usługi powinny zachowywać się w ten sam sposób (przechowywać dane w tych samych miejscach, wysyłać to samo, powiadomienia itp.) * Wyniki. Obiekt zwracany przez wywołania usługi powinien być dokładnie taki sam. Tak więc pomyśleliśmy, że należy wykonać następujące czynności: * Utwórz zestaw testów, który weryfikuje zachowanie i wyniki starych usług. * Utwórz test jednostkowy dodawania nowej usługi i test integracji z białą skrzynką dla nowej usługi * Utwórz coś w rodzaju "testu lustrzanego", który sprawdza, czy nowa usługa działa jak stara. Czy jest na to sposób? Dzięki za wszelką pomoc. Uwaga: Żaden kod z poprzedniej wersji nie jest wielokrotnego użytku. Nie ma testu dla starszej wersji usługi [edytowano] zastąpiono oryginalne słowo „migracja” słowem „reimplement”


title: Jak elastyczny może być sprzęt?

text: Temat ten jest dla mnie tworzony od dawna i szczególnie nabrał on rozmachu, gdy badałem bootloadery do komputerów i elektroniki użytkowej, które, jak zaznaczę, różnią się drastycznie. Nauczyłem się, jak stary i nieelastyczny jest sprzęt x86 i jak bardzo ogranicza go struktura oprogramowania. Przykłady tego, o czym mówię: * Bootloadery nie mogą mieć dowolnego rozmiaru. * Wyspecjalizowane funkcje, takie jak sprzęt mapowany w pamięci. * Powiązania procesora Intel z określonym typem oprogramowania układowego. Zastanawiałem się więc nad systemami, które można by zaprojektować w ten sposób: * Pisanie tekstu na ekranie obsługiwane piksel po pikselu przez system operacyjny zamiast pośredniczącego mikrokontrolera. * Bezsektorowe dyski twarde, na których komputer po prostu zaczyna działać pod pierwszym adresem, a bootloader może mieć dowolny rozmiar. * Funkcjonalność mikrokontrolerów przeniesiona do oprogramowania. Rozumiem, że zabrałoby to dużo prostoty, ale czy takie systemy istnieją? Zgaduję, że byłoby to bardziej rozpowszechnione w systemach wbudowanych. Aby lepiej zrozumieć to pytanie, wyobraź sobie urządzenie, w którym nie ma kontrolerów ani niezależnych systemów, a wszystko jest sterowane przez procesor.


title: walidacja podpisu asercji opensaml

text: Mam odpowiedź SAML 2 z jedną asercją, która jest podpisana, a sama odpowiedź została ponownie podpisana. Używam poniższego kodu, aby zweryfikować profil podpisu odpowiedzi. SAMLSignatureProfileValidator signatureProfileValidator = new SAMLSignatureProfileValidator(); signatureProfileValidator.validate(**response**.getSignature()); A poniżej blok kodu do weryfikacji podpisu. SignatureValidator signatureValidator = nowy SignatureValidator(validatingCredential); signatureValidator.validate(**response**.getSignature()); Ale wierzę, że te rzeczy potwierdzają tylko podpis odpowiedzi i profil podpisu odpowiedzi. **Czy muszę również sprawdzać sygnaturę asercji?** Próbowałem zweryfikować sygnaturę asercji za pomocą poniższego bloku kodu. Ale daje mi ValidationException, co oznacza, że jest nieważny. Ale tak powinno być. SignatureValidator signatureValidator = nowy SignatureValidator(validatingCredential); podpisValidator.validate(**asertion**.getSignature());


title: Rozwijanie z ufnością bez prawdziwego środowiska programistycznego

text: Niedawno zostałem zatrudniony do projektu, który obejmuje pracę z kilkoma systemami „korporacyjnymi” innych firm. Ze względu na to, co wyobrażam sobie, że byłby astronomiczny koszt i wysiłek wymagany do zbudowania wystarczająco wiernej repliki środowiska produkcyjnego, perspektywa posiadania prawdziwego środowiska programistycznego wydaje się znikoma. To oczywiście nie jest idealne. Z drugiej strony, wyobrażam sobie, że muszą być ludzie, którzy bezpiecznie testują i wdrażają oprogramowanie w takich niepodrabialnych środowiskach, a ja prawdopodobnie mogę pójść w ich ślady. Jak robią to ci, którzy skutecznie radzą sobie z tego typu sytuacjami?


title: Czy naprawdę nie było jednej rzeczy w ciągu ostatnich 20 lat, która zapewniła ogromne korzyści w zakresie rozwoju oprogramowania?

text: W _No Silver Bullet_ Fred Brooks przedstawia różne prognozy dotyczące przyszłości inżynierii oprogramowania, najlepiej podsumowane przez: > Nie ma jednego rozwoju, ani w technologii, ani w technice > zarządzania, który sam w sobie obiecuje nawet ** jedno zamówienie- wielkości > poprawa** produktywności, niezawodności, prostoty. Jego argument jest bardzo przekonujący. Brooks pisał w 1986 roku: czy miał rację? Czy programiści w 2014 roku produkują oprogramowanie mniej niż 10 razy szybciej niż ich odpowiednicy w 1986 roku? Na podstawie odpowiedniej miary — jak duży był faktycznie wzrost produktywności?


title: Weryfikacja karty debetowej online – Jakie informacje są sprawdzane?

text: Chętnie dowiem się, jakie informacje sprawdzają firmy internetowe, aby potwierdzić, że karta jest Twoja? Jeśli programista musi zaimplementować tę funkcjonalność, jak może uzyskać dostęp do informacji, takich jak adres klienta, który nie jest zapisany na karcie debetowej? Dziękuję


title: ostrzeganie, że obiekt nie może zostać usunięty (ze względu na ograniczenia)

text: Załóżmy, że aplikacja z bogatym modelem domeny z wieloma klasami (np. `Szkoła`, `Klasa`, `Nauczyciel`, `Student`, `Kurs`, `Egzamin`, `Submission`, ...) łączy się ze sobą. Model i łącza są mapowane do bazy danych, która wykorzystuje odpowiednie FK i ograniczenia (bez kaskadowego usuwania). W panelu administracyjnym użytkownik ma przyciski usuwania przy każdym obiekcie. Próba usunięcia obiektu ma jeden z następujących dwóch wyników: * do obiektu nie odwołuje się żaden inny obiekt, więc jest on usuwany * do obiektu odwołuje się co najmniej jeden inny obiekt, więc nie można go usunąć. Użytkownikowi wyświetlany jest alert. Mam dwa sposoby na zaimplementowanie tego: 1. przed wykonaniem usuwania sql wykonaj wszelkie zapytania, które są konieczne, aby odkryć, czy ten obiekt może zostać usunięty. Jeśli nie, powiadom użytkownika. 2. kontynuuj i wykonaj usuwanie sql, a jeśli to się nie powiedzie (z powodu ograniczeń rdbms), przechwyć wyjątek sql i zaalarmuj użytkownika, że nie można go usunąć. Oba sposoby działają dobrze. Pierwszy sposób pozwala mi podać użytkownikowi szczegółowy powód, dla którego obiekt nie może zostać usunięty (np. odwołuje się do niego 2 „Kurs” i 1 „Klasa”). Drugi sposób pozwala mi rozwiązać cały problem, nie pisząc żadnych ograniczeń sprawdzających kod i opierając się na solidnej (i istniejącej) implementacji db. Czy jest jakiś powód, dla którego zdecydowanie powinnam wybrać jedną z nich?


title: lekkie indeksowanie dokumentów do obsługi mniej niż 250 tys. potencjalnych rekordów

text: Ostatnio zacząłem borykać się z ograniczeniami silników indeksujących dokumenty. Projektowałem małą witrynę internetową, która potrzebowała dość solidnych możliwości wyszukiwania, ale ze względu na ograniczenia sprzętowe nie mogłem wdrożyć rozwiązania w stylu Lucene (takiego jak Solr lub ElasticSearch, jak zwykle) do obsługi tej potrzeby. I nawet wtedy, gdy musiałem obsłużyć niektóre złożone dane i obliczenia, które wymagały dużej ilości danych, nie musiałem obsługiwać więcej niż 250 tysięcy potencjalnych rekordów. Wdrożenie całej instancji Solr lub ES tylko po to, by sobie z tym poradzić, wydawało się marnotrawstwem. Po zastanowieniu się wydaje mi się, że jest to dość duży problem. Większość ludzi obsługuje wymagania wyszukiwania wyłącznie za pomocą SQL. Po prostu uruchamiają zapytania SQL dla swoich danych i to wszystko. Ich możliwości wyszukiwania również stają się straszne. * Przeszukiwanie pełnego tekstu za pomocą symboli wieloznacznych może być boleśnie powolne na niektórych systemach (w szczególności na współdzielonych hostach) i ugrzęznąć w bazie danych, zwłaszcza jeśli masz skomplikowane zapytania i wiele złączeń. * W efekcie wykonujesz wiele zapytań na jedno żądanie użytkownika. Możesz obejść ten problem za pomocą coraz bardziej skomplikowanych zapytań, ale zobacz poprzedni punkt. * Brak funkcji typowych dla silników pełnotekstowych. Bazy danych miały ten sam problem z koniecznością wdrożenia jako serwer, a potem pojawił się SQLite i nagle mogliśmy wdrożyć bazę danych, która jest samodzielna w jednym pliku. Moje Googling nic nie dało — zastanawiam się, czy istnieje coś takiego do indeksowania/przeszukiwania pełnotekstowego. Jakie czynniki należy wziąć pod uwagę przy podejmowaniu decyzji o zaimplementowaniu lekkiego indeksowania dokumentów (np. jak wyjaśniono w odpowiedziach na inne pytanie) lub w dalszym używaniu SQL w takich sytuacjach?


title: Pytanie dotyczące architektury WCF/usług internetowych

text: Mam wymóg stworzenia webserwisu w celu wyeksponowania pewnych elementów z CMS jako usługi sieciowej i potrzebuję sugestii - struktura elementów jest taka: item - pole 1 - pole 2 - pole 3 - pole 4 Tak więc, można by pomyśleć, że klasą do tego będzie: public class MyItem { public string ItemName { get; ustawić; } public List<MyField> Pola { get; ustawić; } } public class MyField { public string FieldName { get; ustawić; } ciąg publiczny FieldValue { get; ustawić; } //zawsze są ciągami (z wyjątkiem - patrz poniżej) } Działa to, gdy jest zawsze o jeden poziom głębokości, ale czasami jedno z pól jest w rzeczywistości punktem do INNEGO elementu (`MyItem`) lub wielu `MyItem` (` List<MyItem>`), więc pomyślałem, że zmienię strukturę `MyField` w następujący sposób, aby `FieldValue` jako `object`; public class MyField { public string FieldName { get; ustawić; } obiekt publiczny FieldValue { get; ustawić; } //zmieniono na obiekt } Więc teraz mogę tam umieścić wszystko, co chcę. W teorii jest to świetne, ale jak klienci to konsumują? Podejrzewam, że gdy użytkownicy odwołują się do tej usługi sieciowej, nie będą wiedzieć, który obiekt jest zwracany w tym polu? Wygląda to na niezbyt dobry projekt. Czy istnieje lepsze podejście do tego?


title: Usuwanie elementu, którego aktualnie nie ma na liście: ValueError?

text: To jest coś, co przez jakiś czas mnie niepokoiło i nie potrafię zrozumieć, _dlaczego_ ktokolwiek chciałby, żeby ten język zachowywał się w ten sposób: In [1]: foo = [1, 2, 3] In [2]: foo. usuń(2) ; foo # ok Out[2]: [1, 3] In [3]: foo.remove(4) ; foo # nie w porządku? -------------------------------------------------- ------------------------- ValueError Traceback (ostatnie wywołanie ostatnie) /home/izkata/<konsola ipython> w <module>() ValueError: list.remove(x): x not in list Jeśli wartości nie ma już na liście, spodziewałbym się cichego sukcesu. Cel już osiągnięty. Czy jest jakiś prawdziwy powód, dla którego zostało to zrobione w ten sposób? Wymusza to niewygodny kod, który _powinien_ być znacznie krótszy: for item in items_to_remove: try: thingamabob.remove(item) z wyjątkiem ValueError: pass Zamiast po prostu: for item in items_to_remove: thingamabob.remove(item) * * * Na marginesie, nie , nie mogę po prostu użyć `set(thingamabob).difference(items_to_remove)` ponieważ _do_ muszę zachować zarówno kolejność, jak i duplikaty.


title: Projektowanie systemu z różnymi regułami biznesowymi dla różnych klientów

text: Moja firma przepisuje naszą autorską aplikację biznesową. Obecna architektura jest słabo wykonana i nieelastyczna. Jest kodowany bardziej proceduralnie niż obiektowo. Utrzymanie stało się trudne. Nasz system to aplikacja internetowa napisana w .Net Webforms. Rozważam ASP.Net MVC do przepisania. Zamierzamy napisać go od nowa z dobrą, solidną architekturą w celu utrzymania i klas wielokrotnego użytku dla niektórych naszych innych systemów i usług. Chcielibyśmy również, aby system można było dostosować do różnych klientów w przypadku wprowadzenia systemu na rynek. Rozważam przeprojektowanie systemu w oparciu o architekturę warstwową (warstwy prezentacji, biznesu, dostępu do danych) opisaną w przewodniku Microsoft Patterns and Practices Application Architecture Guide. http://msdn.microsoft.com/en-us/library/ff650706.aspx Mam nadzieję, że nie jest to zbyt otwarte, ale jak radzisz zezwolić na inną logikę/reguły biznesowe dla różnych klientów? Znam Windows Workflow Foundation, ale z tego, co o nim czytałem, wydaje się, że wiele reguł biznesowych może być zbyt skomplikowanych, aby można było tam obsłużyć. Czy ktoś może wskazać mi, gdzie mogę pobrać przykład rozwiązania .net opartego na Przewodniku po architekturze aplikacji? Pobrałem już wytyczne dotyczące rozwiązań w zakresie architektury warstwowej i przykład kosztów na codeplex. Szukałem czegoś nieco większego i solidniejszego, abym mógł przejrzeć kod i zobaczyć, jak to działa. Jeśli uważasz, że istnieją lepsze architektury, na których można oprzeć nasze przeprojektowanie, podziel się nimi. Doceniam twoją pomoc!


title: Czy jednostka domeny narusza zasadę pojedynczej odpowiedzialności?

text: Pojedyncza odpowiedzialność ( powód do zmiany ) podmiotu powinna polegać na jednoznacznym identyfikowaniu się, innymi słowy jego odpowiedzialności ma być wykrywalna. Książka DDD Erica Evana, s. 93: > najbardziej podstawowym obowiązkiem Jednostek jest ustanowienie ciągłości, aby > zachowanie było jasne i przewidywalne. Robią to najlepiej, jeśli są trzymane w zapasie. Zamiast skupiać się na atrybutach lub nawet zachowaniu, rozebrać > definicję obiektu bytu do najbardziej wewnętrznych cech, > szczególnie tych, które go identyfikują lub są > powszechnie używane do znajdowania lub dopasowywania go. Dodaj tylko zachowanie, które jest niezbędne dla koncepcji i atrybuty, które > są wymagane przez to zachowanie. > > Poza tym, postaraj się usunąć zachowanie i atrybuty z innych obiektów > związanych z podstawowymi encjami. Poza kwestiami tożsamości, encje mają tendencję do > wypełniania swoich obowiązków > poprzez koordynację operacji na obiektach, > które posiadają. 1. > ... ogranicz definicję obiektu CENTRUM do najbardziej nieodłącznych cech >, szczególnie tych, które go identyfikują lub są powszechnie używane do > znajdowania go lub dopasowywania. Dodaj tylko zachowanie, które jest istotne dla koncepcji ... Po przypisaniu _jednostce_ _unikalnego identyfikatora_ , jego tożsamość jest ustalana, więc zakładam, że taka encja nie potrzebuje żadnego zachowania, aby _utrzymać swoją tożsamość_ lub _pomóc jej zidentyfikować się_. W związku z tym nie rozumiem, do jakiego rodzaju zachowania odnosi się autor (oprócz `znajdź` i `dopasuj` _operacje_ ) z „ _zachowaniem, które jest istotne dla koncepcji_ ”? 2. > ... ogranicz definicję obiektu CENTRUM do najbardziej nieodłącznych cech >, szczególnie tych, które go identyfikują lub są powszechnie używane do znajdowania go lub dopasowywania. ... Poza tym postaraj się usunąć zachowanie i atrybuty > do innych obiektów powiązanych z rdzeniem ENTITY. Tak więc każde zachowanie, które nie pomaga zidentyfikować istoty, ale nadal scharakteryzowalibyśmy to zachowanie jako _wewnętrzną cechę_ tej istoty (tj. szczekanie jest nieodłączną cechą psów, latanie jest nieodłączną cechą samolotów, składanie jaj jest nieodłączną cechą ptaków… . ), należy umieścić w innych obiektach związanych z tym podmiotem (przykład: zachowanie szczekania powinniśmy umieścić w obiekcie związanym z podmiotem psa)? 3. > Poza tym postaraj się usunąć zachowanie i atrybuty z innych obiektów > powiązanych z podstawową ENTITYM. a) „MyEntity” deleguje obowiązki „A_resp” i „B_resp” odpowiednio na obiekty „a” i „b”. Mimo że większość pracy `A_resp` i `B_resp` jest wykonywana przez instancje `a` i `b`, klienci nadal są obsługiwani `A_resp` i `B_resp` przez `MyEntity`, co oznacza, że z perspektywy klienta te dwie odpowiedzialności należą do „MyEntity”. Czy nie oznacza to zatem, że „MyEntity” ma również obowiązki „A_resp” i „B_resp” i jako takie narusza **SRP**? b) Nawet jeśli założymy, że `A_resp` i `B_resp` nie należą do `MyEntity`, `MyEntity` nadal ponosi odpowiedzialność `AB_resp` za koordynację operacji obiektów `a` i `b`. Czy zatem `MyEntity` nie narusza **SRP**, ponieważ ma co najmniej _dwa obowiązki_ — jednoznaczną identyfikację siebie oraz `AB_resp`? class MyEntity { private A a = ... private B b = ... public A GetA() { ... } public B GetB() { ... } /* koordynuje operacje obiektów a i b */ public int AworkB() { ... } } /* A hermetyzuje pojedynczą odpowiedzialność odp_A*/ /* A jest obiektem wartości */ class A { ... } /* B hermetyzuje pojedynczą odpowiedzialność odp_B*/ /* B jest obiektem wartości */ class B { ... } **UPDATE:** 1. > Zachowanie w tym kontekście odnosi się do zachowania semantycznego. Na przykład właściwość > w klasie (tj. atrybut w obiekcie domeny), która jest używana do > unikatowej identyfikacji, ma zachowanie. Chociaż nie jest to reprezentowane w kodzie > bezpośrednio. Oczekiwane zachowanie jest takie, że nie będzie żadnych zduplikowanych wartości > dla tej właściwości. Tak więc w kodzie prawie nigdy nie musielibyśmy faktycznie implementować zachowania (tj. operacji ), które w jakiś sposób zachowałoby tożsamość jednostki, ponieważ jak wyjaśniłeś, takie zachowanie istnieje tylko jako pojęcie w modelu domeny (w postaci atrybutu ID encji), ale kiedy przetłumaczymy ten atrybut ID na kod, część jego semantyki zostaje utracona (tj. część, która domyślnie zapewnia, że wartość ID jest unikalna, zostaje utracona)? 2. > Co więcej, własność taka jak Wiek nie ma kontekstu poza Podmiotem Osobowym, > i jako taka nie ma sensu przenosić się do innego obiektu. unikalny identyfikator >, stąd mylące odniesienie do zachowania. Wiek może być leniwą > załadowaną wartością. a) Jeśli właściwość „Wiek” jest ładowana z opóźnieniem, możemy nazwać ją zachowaniem, nawet jeśli semantycznie „Wiek” jest tylko atrybutem? 3. > Możesz łatwo mieć operacje specyficzne dla adresu, takie jak weryfikacja > czy jest to prawidłowy adres. Być może nie wiesz o tym w czasie projektowania, ale > cała koncepcja polega na rozbiciu obiektów na najmniejsze części Chociaż zgadzam się, że stracilibyśmy kontekst, przenosząc „Wiek” do innego obiektu, kontekst nie zostałby utracony, gdybyśmy przenieśliśmy właściwość `DateOfBirth` do innego obiektu, ale zwykle jej nie przenosimy. Jaki jest główny powód, dla którego przenieśliśmy `Address` do innego obiektu, ale nie `DateOfBirth`? Ponieważ `DateOfBirth` jest bardziej nieodłączną częścią encji `Person` lub ponieważ istnieje mniejsze prawdopodobieństwo, że gdzieś w przyszłości będziemy musieli zdefiniować operacje specyficzne dla `DateOfBirth`? 4\. Muszę powiedzieć, że nadal nie wiem, czy `MyEntity` ma również obowiązki `A_resp` i `B_resp` i dlaczego `MyEntity` również posiadające `AB_resp` nie jest uważane za naruszenie **SRP** **EULERFX** 1) > Zachowania, do których odnosi się autor, są zachowaniami związanymi z > podmiotem. To są zachowania, które modyfikują stan jednostki a) Jeśli dobrze rozumiem, mówisz, że _jednostka_ powinna zawierać tylko te _zachowania_, które modyfikują jej _atrybuty_ (tj. jej _stan_)? b) A co z _zachowaniami_, które niekoniecznie modyfikują _stan bytu_ , ale nadal są uważane za _wewnętrzną_ cechę tej _jednostki_ (przykład: _szczekanie_ byłoby _wewnętrzną_ cechą istoty `Psa`, nawet gdyby nie modyfikować _stanu psa_ )? Czy powinniśmy uwzględnić te zachowania w _bycie_, czy też powinny zostać przeniesione do innych obiektów? 2) > Jeśli chodzi o przenoszenie zachowania na inne obiekty, autor odnosi się konkretnie do wartości > obiektów. Chociaż mój cytat tego nie zawiera, ale autor wspomina w tym samym akapicie, że w niektórych przypadkach _zachowania_ (i _atrybuty_ ) również zostaną przeniesione do _innych jednostek_ (chociaż rozumiem korzyści z przeniesienia _zachowań_ do VO) 3) Zakładając `MyEntity ` (patrz pytanie **3.** w moim oryginalnym poście) nie narusza SRP, czy powiedzielibyśmy, że _odpowiedzialność_ `MyEntity` obejmuje między innymi: `A_resp` **+** `B_resp` **+** `AB_resp` ( `AB_resp` koordynuje obiekty `a` i `b` ) lub b. `AB_resp` **+** delegowanie `A_resp` i `B_resp` do obiektów (`a` i `b`) powiązanych z `MyEntity`? 4) Książka DDD Erica Evana, s. 94: > IDKlienta jest jedynym identyfikatorem JEDNOSTKI Klienta ( rysunek > 5.5 ), ale numer telefonu i adres są często używane do znalezienia lub dopasowania > Klienta. Imię nie określa tożsamości osoby, ale jest często używane > jako element jej określania. > > W tym przykładzie atrybuty telefonu i adresu zostały przeniesione do klienta, ale > w prawdziwym projekcie wybór ten zależałby od tego, w jaki sposób klienci domeny > są zazwyczaj dopasowywani lub rozróżniani. Na przykład, jeśli Klient ma wiele > numerów telefonów kontaktowych do różnych celów, numer telefonu nie jest > powiązany z tożsamością i powinien pozostać przy Kontaktie ds. sprzedaży. a) > IDKlienta jest jedynym identyfikatorem JEDNOSTKI Klienta ( rysunek > 5.5 ), ale numer telefonu i adres są często używane do znalezienia lub dopasowania > Klienta. Imię nie określa tożsamości osoby, ale jest często używane > jako element jej określania. Cytat stwierdza, że tylko _atrybuty_ powiązane z _tożsamością_ powinny pozostać w _jednostce_. Zakładam, że autor ma na myśli, że _podmiot_ powinien zawierać tylko te _atrybuty_, które są często używane do _znalezienia lub dopasowania_ tej _podmiotu_, podczas gdy WSZYSTKIE inne _atrybuty_ powinny zostać przeniesione? b) Ale jak/gdzie należy przenieść inne _atrybuty_? Na przykład ( założenie jest takie, że _atrybut adresu_ nie jest używany do _znalezienia lub dopasowania_ `Klienta` i dlatego chcemy przenieść _atrybut adresu_ z `Klienta` ): jeśli zamiast mieć `Klient.Adres` ( typu `string` ) tworzymy właściwość `Customer.Address` typu `Address`, czy przenieśliśmy _atrybut adresu_ do powiązanego obiektu VO (który jest typu `Address` ) czy też powiedzielibyśmy, że `Klient` nadal zawiera _atrybut adresu_? c) > W tym przykładzie atrybuty telefonu i adresu zostały przeniesione do opcji Klient, ale > w prawdziwym projekcie wybór ten zależałby od tego, w jaki sposób klienci domeny > są zazwyczaj dopasowywani lub rozróżniani. Na przykład, jeśli Klient ma wiele > numerów telefonów kontaktowych do różnych celów, numer telefonu nie jest > powiązany z tożsamością i powinien pozostać przy Kontaktie ds. sprzedaży. Czy nie jest w błędzie autora, ponieważ jeśli założymy, że każdy z wielu _numerów telefonów kontaktowych_, które posiada „Klient” należy tylko do tego konkretnego „Klienta”, to powiedziałbym, że te _numery telefonów_ są powiązane z _tożsamością_ tak samo, jak kiedy „Klient” miał tylko _jeden numer telefonu_? 5) > Powodem, dla którego autor sugeruje usunięcie encji jest to, że gdy > początkowo tworzy się encję Klient, istnieje tendencja do wypełniania jej > dowolnym atrybutem, o którym można pomyśleć, że jest powiązany z klientem. Jest to podejście skoncentrowane na danych, które pomija zachowania, które ostatecznie prowadzą do modelu domeny anemicznej. Nie na temat, ale pomyślałem, że _anemiczny model domeny_ wynika z przeniesienia _zachowania_ z _podmiotu_ , podczas gdy twój przykład wypełnia _podmiot_ wieloma _atrybutami_ , co spowoduje, że `Klient` będzie miał zbyt wiele _zachowania_ (ponieważ prawdopodobnie uwzględnilibyśmy również `Klient` _zachowania_, które modyfikują te dodatkowe _atrybuty_ ), a tym samym naruszają SRP? Dziękuję


title: Jak negocjować z dostawcami oprogramowania, którzy nie przestrzegają standardów HL7

text: Weźmy na przykład „”, mam nadzieję, że każdy, kto kiedykolwiek zajmował się wiadomościami HL7, wie, że „” oznacza, że coś należy usunąć. "" nie jest pustym ciągiem, nie jest wypełniaczem itp... Ale czasami można spotkać sprzedawcę, który upiera się przy wysyłaniu "" zamiast po prostu wysyłać nic. Ponieważ pracuję dla małej firmy i mam niezwykle elastyczny interfejs HL7, mogę ignorować znaki „” w otrzymywanych wiadomościach. Ale te rzeczy się sumują. * Niektórzy dostawcy lubią wysyłać niestandardowe sformatowane pola z pseudokomponentami, które pozostawiają innym do samodzielnej interpretacji. * Niektórzy dostawcy wysyłają wszystkie swoje informacje w segmentach notatek i zakładają, że zamierzasz wyświetlać użytkownikom tylko te informacje, które wysyłają czcionką o stałej szerokości. * Niektórzy sprzedawcy mają nawet czelność wysyłać kanały zwrotne karetki na końcu każdej linii interfejsu pliku. * Niektórzy sprzedawcy absolutnie odmawiają wysyłania liczb dziesiętnych, a tym samym odmawiają wysyłania jakichkolwiek liczb. Tak więc, z całą tą okaleczającą ludzkością przeciwko prostemu plastikowemu człowiekowi od oprogramowania, jak można się zgiąć, nie łamiąc*? Albo jeszcze lepiej, jak można walczyć i nadal zarabiać pieniądze? *moją odpowiedzią jest zwykle stworzenie interfejsu dla interfejsu i utrzymanie czystego przetwarzania HL7, ale nie sądzę, aby to było najlepsze rozwiązanie


title: Jak odróżnić dobrych programistów od przeciętnych?

text: > **Możliwe duplikaty:** > Skąd menedżerowie wiedzą, czy dana osoba jest dobrym czy złym programistą? > Jak rozpoznać dobrego programistę? Dla twojej wiadomości, sam jestem programistą i nadal koduję. Nie tworzymy Twojej-tylko-kolejnej-CRUD-aplikacji, zamiast tego pracujemy nad aplikacjami CAD. Charakter tworzenia oprogramowania sprawia, że naprawdę trudno jest ocenić wartość programisty. Jak rozpoznać, czy programista jest dobry, czy nie tak dobry? Wszyscy programiści, którzy ze mną pracują, pracują nad różnymi częściami aplikacji, a jak trudno jest uruchomić te części, wie tylko osoba, która spędza w nich najwięcej czasu, w tym przypadku są to sami programiści; ja jako outsider nie byłbym w stanie w pełni docenić ilości potu, pomysłowości, wysiłku, jaki wkładają w rozwiązanie tych problemów właśnie dlatego, że nie mam szans na wykonanie tej samej pracy. To sprawia mi trudność, kiedy je oceniam. Skąd mam wiedzieć, że programista A jest naprawdę świetny w rozwiązywaniu problemu i dlatego mogę rzucić mu większe, trudniejsze zadanie? A skąd mam wiedzieć, że programista B po prostu ciężko pracuje, ale nie pracuje mądrze? Jak mogę uczciwie oceniać i wynagradzać programistów?


title: Jak rozpoznać dobrego programistę?

text: Nasza firma poszukuje nowych programistów. I tu pojawia się problem – jest wielu programistów, którzy naprawdę świetnie wyglądają na rozmowie kwalifikacyjnej, wydają się znać potrzebną technologię i mają dobre przygotowanie zawodowe, ale po dwóch miesiącach pracy okazuje się, że nie są w stanie pracować zespołowi, napisanie jakiegoś kodu zajmuje im bardzo dużo czasu, a ponadto wynik nie jest tak dobry, jak powinien. Czy używasz sformalizowanych testów (czy są jakieś?)? Jak rozpoznajesz dobrego programistę - i dobrą osobę? Czy są jakieś proste „dobre” pytania, które mogą ujawnić przyszłe problemy? ...a może chodzi tylko o twoje „uczucia” względem osoby (tj. głównie o twoje doświadczenie) i wypróbowanie go? Edycja: Zgodnie z odpowiedzią Manoj, oto pytanie związane z zadaniem kodowania podczas rozmowy kwalifikacyjnej.


title: Jak pisać wydajny kod pomimo napiętych terminów

text: Pracuję w środowisku, w którym mamy wiele projektów, w których terminy dostawy są ściśle określone. Rozmawiamy nawet bezpośrednio z klientami, więc szybkie wykonanie zadań jest koniecznością. Mój problem polega na tym, że zawsze piszę kod dla pierwszego rozwiązania, które przychodzi mi do głowy, co oczywiście uważałem w tym momencie za najlepsze. Zawsze jednak kończy się to brzydko i później zdaję sobie sprawę, że są lepsze sposoby na zrobienie tego, ale nie mogę sobie pozwolić na zmiany ze względu na ograniczenia czasowe. Czy są jakieś wskazówki, dzięki którym mogę sprawić, by mój kod był wydajny, a jednocześnie dostarczany na czas?


title: Zezwalaj wątkom (w c) na drukowanie wiadomości bez zakłócania wprowadzania danych przez użytkownika

text: Piszę mały serwer WWW do użytku osobistego w c (nie c++). Chcę zezwolić użytkownikowi na wprowadzanie danych w konsoli, takie jak "zamknięcie serwera" lub "zrestartowanie serwera". Aby umożliwić tego rodzaju wprowadzanie, serwer działa w osobnym wątku (pthreads), więc konsola nie jest blokowana. Chcę również, aby ten wątek drukował dane wyjściowe w konsoli, takie jak „połączony nowy klient” lub „żądanie klienta 'home.html'”. > Problem polega na tym, że: jeśli wpisuję coś w rodzaju „zamknij serwer” i > w tym samym czasie wątek wypisuje coś w rodzaju „podłączony nowy klient” > wszystko się miesza i otrzymuję coś w rodzaju „zamknij połączenie nowego klienta > serwer” Czy istnieje elegancki sposób na wydrukowanie danych wyjściowych wątku i jednoczesne umożliwienie użytkownikowi wprowadzania poleceń bez ingerencji? A może to głupi pomysł na początek? Jeśli tak: Czy istnieje standardowy sposób radzenia sobie z takimi sprawami (np. do kontrolowania serwera).


title: Dlaczego w Joel's Test brakuje programowania opartego na testach?

text: Czytałem tego bloga Joela Spolsky'ego o 12 krokach do lepszego kodu. Brak _Test Driven Development_ naprawdę mnie zaskoczył. Więc chcę rzucić to pytanie Guru. Czy TDD naprawdę nie jest warte wysiłku?


title: Jakie metody były używane do płatności online przed API i Paypal itp.

text: Jakie metody (w terminologii programistycznej/web dev) były używane do przyjmowania płatności online przed takimi rzeczami jak Paypal, Google Checkout oraz różne bramy i interfejsy API. Jak przebiegały takie transakcje?


title: Projektowanie wzorców poleceń

text: Mam tę starą implementację wzorca Command. Jest to rodzaj przekazywania Kontekstu przez całą implementację _DIOperation_, ale później zdałem sobie sprawę, w procesie uczenia się i uczenia się (który nigdy się nie kończy), że nie jest to optymalne. Myślę też, że „odwiedzanie” tutaj nie pasuje i po prostu dezorientuje. Właściwie myślę o refaktoryzacji mojego kodu, także dlatego, że Polecenie nie powinno nic wiedzieć o innych i w tej chwili wszystkie mają te same pary klucz-wartość. Naprawdę trudno jest ustalić, która klasa jest właścicielem której pary klucz-wartość, co czasami prowadzi do zduplikowanych zmiennych. Przykład przypadku użycia: powiedzmy, że **_CommandB_** wymaga **_UserName_**, która jest ustawiona przez **_CommandA_**. Czy CommandA ma ustawić klucz **_UserNameForCommandB_** = _John_? A może powinny mieć wspólną parę klucz-wartość _UserName=John_? Co się stanie, jeśli nazwa użytkownika jest używana przez trzecie polecenie? Jak mogę ulepszyć ten projekt? Dziękuję! class DIParameters { public: /** * ustawiacz parametrów. */ virtual void setParameter(std::string key, std::string value) = 0; /** * Pobieracz parametrów. */ wirtualny std::string getParameter(std::string key) const = 0; wirtualne ~DIPparametry() = 0; }; class DIOperation { public: /** * Odwiedź przed wykonaniem. */ virtual void visitBefore(DIParameters& visitee) = 0; /**          * Odgrywać. */ wirtualny int perform() = 0; /** * Wizyta po wykonaniu egzekucji. */ virtual void visitAfter(DIParameters& visitee) = 0; wirtualny ~DIOoperacja() = 0; };


title: Działania kontrybutora po odrzuceniu żądania ściągnięcia

text: Wyobraź sobie, że istnieje projekt typu open source z opiekunem i współtwórcą. Oba z nich mają swoje repozytoria wyeksportowane do jakiegoś hostingu repozytoriów (github, bitbucket, sourceforge --- cokolwiek, ale są one publiczne). Wyobraź sobie dalej, Contributor wykonał kilka zatwierdzeń, wepchnął je do swojego repozytorium i wysłał żądanie ściągnięcia do opiekuna. Opiekun dokonał przeglądu, skomentował kilka zatwierdzeń (napraw to, napraw tamto, uprość tam, blah-blah-blah) i **odrzucił** pull-request. Uwaga: 1. Dla Contributora oczywiste jest, że lepiej po prostu naprawić poprawki/commits niż przepisywać od nowa. 2. Proszę wziąć pod uwagę sytuację, w której jest wiele commitów i poprawki muszą być rozrzucone między nimi. Co Contributor powinien zrobić w tej sytuacji przed wysłaniem kolejnego żądania ściągnięcia? Usunąć nieprawidłowe repozytorium, przepisać historię i wypchnąć nowe? Zrobić zatwierdzenie poprawki w bieżącym? Czy Maintainer może zażądać, aby nadchodząca historia była czysta? Tj. czy jest to wystarczająco proste technicznie?


title: Wyświetlanie listy zależności w package.json dla aplikacji node.js na Heroku

text: Wcześniej miałem problem z moją aplikacją node.js na Heroku. Dodałem zależność do mojego package.json i teraz działa. Ale czy to najlepszy sposób na zrobienie tego? { "name": "nazwa-aplikacji", "version": "0.0.1", "private": true, "scripts": { "start": "node app.js" }, "dependencies": { " express": "3.4.4", "jade": "*", "stylus": "*", "ejs": "0.8.5" }, "engines": { "node": "0.10.1" , "npm": "1.3.14" } } Pytam, ponieważ inne zależności mają "*", które były domyślnie w mojej ekspresowej aplikacji. Co to dokładnie oznacza i czy mogę zostawić ten plik tak, jak jest?


title: Co oznacza plan refaktoryzacji krok po kroku opisujący wdrożenie projektu?

text: > Co oznacza plan refaktoryzacji krok po kroku opisujący sposób wdrożenia > określonego projektu? O ile wiem o refaktoryzacji to dotyczy ulepszania modelu projektowego (UML) i nie ma nic wspólnego z jego implementacją. Dlatego jestem zdezorientowany tym, co oznacza to pytanie. Czy ktoś wie i chce wyjaśnić? EDYCJA: W kontekście projekt odpowiada diagramowi UML z klasami, metodami i podstawowymi skojarzeniami.


title: Kompatybilność z kompilatorem Java i maszynami wirtualnymi

text: Niedawno rozmawialiśmy ze współpracownikiem o wersjach Java i JVM. Używam Javy 7, ale my używamy Javy 6 dla naszego klienta (podczas gdy on mówi, że niektórzy są nadal na 5). Natychmiast pomyślałem, dlaczego nie możemy atakować również tych maszyn wirtualnych? Maszyna wirtualna Java różni się nieco od prawdziwej maszyny, ponieważ ma wiele funkcji wykonawczych. Sprawdzanie typów, obsługa wyjątków, wyrzucanie śmieci itp. Ale to wciąż maszyna wirtualna, która ma kod bajtowy. (Dlatego możemy mieć takie rzeczy jak kompilatory C do JVM.) Dlaczego więc nie możemy celować w starsze maszyny wirtualne z nowszą wersją Javy? Dlaczego język i środowisko wykonawcze muszą być ze sobą powiązane? Poza oczywistymi spadkami wydajności wydaje się, że kompilacja kodu Javy 7 do JVM Javy 6 powinna być całkowicie możliwa. (A biorąc pod uwagę, jak niewiele zmieniło się z Javy 6 na 7, nie wyobrażam sobie, by zmiany kompilatora były tak rozległe.)


title: Jak opisać framework/funkcje aplikacji java do prezentacji dla klienta?

text: Zostałem poproszony o przedstawienie architektury i funkcji naszej aplikacji Java (więcej z punktu widzenia infrastruktury/oprogramowania). Pójdzie na prezentację Powerpoint, więc muszę podać listę. Proszę daj mi znać, jak mam się do tego zabrać.


title: Czy codzienne raporty mogą obniżyć produktywność programisty?

text: W innym pytaniu zapytałem, dlaczego programiści mogą nie lubić **codziennego scrum**. Rozmawialiśmy z programistami i postanowiliśmy przez jakiś czas nie trzymać codziennego scrum (aby spróbować i dostosować scrum w naszej pierwszej próbie). Jest to wynik bezpośrednich konsultacji z programistami. Z drugiej strony nie chcemy tracić dobrych elementów codziennego scrum, takich jak codzienna koordynacja programistów lub obserwowanie postępu prac, jak kluczowy wskaźnik wydajności, aby podjąć działania wcześnie. Jako alternatywę dla codziennego scrum, zastanawiamy się nad poproszeniem programistów o dostarczanie codziennych raportów z następującymi warunkami: 1. Nie ma potrzeby stosowania określonego formatu. Akceptowany jest każdy format. 2. Nawet jeśli praca nie jest wykonana, chcemy usłyszeć stopień postępu. 3. Nie ma potrzeby wymieniania czasu spędzonego na każdym zadaniu. 4. Należy wspomnieć o przeszkodach rozwojowych i wymogach koordynacyjnych. 5. Nie ma potrzeby mieć obsesji na punkcie codziennych raportów. To nie jest tak surowe. Czy uważasz, że może to zmniejszyć ich produktywność? Czy miałeś jakieś codzienne doświadczenia z raportami? Czy masz dla nas jakieś sugestie, abyśmy mieli pewność, że nie zarządzamy mikrozarządzaniem?


title: Czy istnieje sytuacja, w której można zainicjować usuwanie w GET?

text: Tworząc prostą aplikację internetową z funkcją usuwania bazy danych, zwykle wykonuje się następujące kroki: 1. Użytkownik inicjuje żądanie GET za pomocą łącza do usuwania 2. Użytkownik potwierdza usunięcie 3. Po potwierdzeniu przeglądarka inicjuje żądanie POST do serwera w celu wykonać usunięcie Jakie są powody tej konwencji? Rozumiem, że ustawia krok potwierdzenia, który uniemożliwiłby automatyczne wywołanie funkcji usuwania (jak w przypadku pająków itp.) - czy są inne powody?


title: Ur/Web nowy, czysto funkcjonalny język do programowania stron internetowych?

text: Na projekt Ur/Web natknąłem się podczas moich poszukiwań frameworków internetowych dla języków podobnych do Haskella. Wygląda na bardzo ciekawy projekt wykonany przez jedną osobę. Zasadniczo jest to specyficzny dla domeny, czysto funkcjonalny język do programowania stron internetowych, wykorzystujący to, co najlepsze w ML i Haskell. Składnia to ML, ale istnieją klasy typów i monady z Haskella i są one ściśle oceniane. Strona serwera jest kompilowana do kodu natywnego, klient do JavaScript. Zobacz slajdy i stronę z najczęściej zadawanymi pytaniami, aby poznać inne reklamowane zalety. Patrząc na dema i ich kod źródłowy, myślę, że projekt jest bardzo obiecujący. Najnowsza wersja to coś z 20110123, więc wydaje się, że obecnie jest aktywnie rozwijana. Moje pytanie: Czy ktoś tutaj miał już z tym jakieś doświadczenie? Czy są jakieś problemy/irytacje w porównaniu z Haskellem, poza nieco bardziej gadatliwą składnią ML? Nawet jeśli nie jest jeszcze dobrze znany, mam nadzieję, że więcej osób będzie o tym wiedziało. OMG, to dla mnie wygląda bardzo fajnie. Nie chcę, żeby ten projekt umarł!!