title: Jak nazwać współczesnego Pascala?

text: Czy programiści tworzący programy z Delphi, FPC, Lazarus powinni zgodzić się z nazwą języka? Uderzyło mnie to, ponieważ każda możliwa wariacja nie tylko wprowadza zamieszanie dla nowych programistów, ale także kiedy piszę lub nazywam każdego z nich, czuję, że nie jest to w pełni poprawne. * Paskal. Wiemy, jak Wirth nie lubi OOP, więc to proste nazewnictwo nie jest poprawne. Były lata, w których w Pascalu nie było żadnych obiektów, więc nie jest również słuszne nazywanie go Pascal. * Delphi („proszę podać link do fragmentu kodu w Delphi”). Widząc, jak silny jest fpc/Lazarus przy zachowaniu wysokiego poziomu kompatybilności, teraz jest to również nie do końca poprawne. * Obiekt Pascal. Wydaje się, że to dobry wybór, ale jedynymi miejscami, w których korzystano z niego zauważalnie, jest pomoc Delphi i Wikipedia. I wygląda na to, że w stackexchange/stackoverflow nie ma nawet odznaki „Object Pascal”. To również mnie smuci, ponieważ deweloper innych języków nie waha się w tej chwili. Mogą wymieniać wiele kompilatorów lub dialektów, ale rzadko wahają się, jak nazwać język.


title: Model-View-Controller — gdzie idzie klasa fabryki?

text: Pracuję (powoli) nad małym projektem Flask. Jednym z moich modeli jest klasa o nazwie `Post`, która jest lekką `namedtuple`. Obiekty `Post` są tworzone przez `PostFactory`, ponieważ tworzenie `Post` wiąże się z trafieniem do bazy danych. `PostFactory` przechowuje niezbędne połączenie z bazą danych, więc obiekty `Post` mogą być serializowane. W jakiej części podziału modelu/widoku/kontrolera naturalnie mieści się obiekt fabryki? Czy jest to część modeli, ponieważ jest ściśle powiązana z obiektami „Post”? A może jest to kontroler, skoro manipuluje modelami?


title: Jak skutecznie tworzyć tę samą aplikację na wielu komputerach?

text: Czytałem już Jeśli używasz wielu komputerów, jak wszystko synchronizujesz? \- ale to było nie na temat... Konkretnie myślę o tym od strony programistycznej. Mam w domu potężne komputery stacjonarne, na których robię osobiste projekty i pracuję, gdzie oczywiście pracuję nad projektami związanymi z pracą... Mam też laptopa, którego używam do programowania, kiedy mam okazję. Do większości swojej pracy używam Dropboxa i innych narzędzi do synchronizacji, ale nie znalazłem przyzwoitego rozwiązania dla projektów programistycznych. Ostatnio zacząłem używać GIT i chociaż lubię go do kontroli źródeł, nie lubię wprowadzać drobnych zmian, ponieważ jest to marnotrawstwo, gdy nie było wielu znaczących zmian. Tak więc szukam tylko porady, ludzi, którzy pracują z wieloma komputerami - jak efektywnie rozwijać się na wielu maszynach? Obecnie myślę, że przechowywanie folderu roboczego w Dropbox może być po prostu najłatwiejszym rozwiązaniem, jednak nie mogę oprzeć się wrażeniu, że istnieje lepsze rozwiązanie.


title: Jaki sposób zakończenia pętli odczytu jest preferowanym podejściem?

text: Kiedy musisz iterować czytnik, w którym liczba pozycji do przeczytania jest nieznana, a jedynym sposobem na to jest kontynuowanie czytania, aż dotrzesz do końca. To często miejsce, w którym potrzebujesz nieskończonej pętli. 1. Istnieje zawsze „prawda”, która wskazuje, że wewnątrz bloku musi znajdować się instrukcja „break” lub „return”. przesunięcie int = 0; while(prawda) { Rekord r = Odczyt(przesunięcie); if(r == null) { przerwa; } // wykonaj przesunięcie robocze++; } 2. Istnieje metoda _double_ read for loop. Zapis r = Odczyt(0); for(int offset = 0; r!= null; offset++) { r = Read(offset); if(r != null) { // działaj } } 3. Istnieje pojedyncza pętla odczytu while. _Nie wszystkie języki obsługują tę metodę_. przesunięcie int = 0; Rekord r = null; while((r = Read(++offset)) != null) { // do work } Zastanawiam się, które podejście jest najmniej prawdopodobne, aby wprowadzić błąd, najbardziej czytelny i powszechnie używany. Za każdym razem, gdy muszę coś napisać, myślę, że „musi być lepszy sposób”.


title: Jaka jest różnica między budowaniem a kompilacją?

text: Jaka jest różnica między budowaniem a kompilacją.


title: Czy w C++ można zdefiniować kilka metod jednocześnie?

text: Przepraszamy za mylący tytuł tego pytania, ale nie potrafię wymyślić dokładnego sposobu na jego sformułowanie. Mam bardzo długą klasę z setkami podobnych metod i próbuję znaleźć sposób na jej skonstruowanie bez tylu wierszy kodu i tak wielu naruszeń DRY. Za każdym razem, gdy dodaję nową właściwość do mojej klasy, muszę napisać dwie metody i zaktualizować funkcję kopiowania. Istnieje już ponad 80 nieruchomości. Obecnie ta klasa jest napisana w Javie, ale zastanawiałem się, czy została napisana w C++, czy można to zrobić wydajniej. Myślę, że można to zrobić za pomocą preprocesora x-macros, jak opisano w wikipedii tutaj, ale nie jestem fanem makr i wolałbym to zrobić przy użyciu samego języka, jeśli to możliwe. Oto uproszczony fragment mojej klasy Java: class InMemoryPerson implementuje Person { private HashMap<String,Object> wartości = new HashMap<String,Object>(); public InMemoryPerson copyFrom(Osoba p) { setName(p.getName()); // więcej kodu do skopiowania wszystkich właściwości... } public void setName(String name) { values.put("name",name); } public String getName() { return (String)map.get("nazwa"); } // dużo więcej metod dla wszystkich różnych właściwości... // każda metoda może mieć inny typ }


title: Jak przygotować się do rozmowy kwalifikacyjnej z uniwersalnym CV?

text: Mam CV z szeroką gamą różnych technologii, z których korzystałem w poprzednich miejscach pracy. W moim doświadczeniu na tych stanowiskach używałem części tych technologii w zależności od tego, czego wymagała praca, ale nigdy na tyle, aby być mistrzem wszystkich odległych części używanych technologii. Ale kiedy przeprowadzałem rozmowy kwalifikacyjne na stanowiska, pracodawcy widzą, że mam doświadczenie w technologii i zadaję bardzo konkretne pytania techniczne, na które choć mogłem wiedzieć, kiedy z nich korzystam, nie mogę teraz odpowiedzieć. Dowiedzenie się wszystkiego o każdej z technologii w moim CV wydaje się być gigantycznym zadaniem, które byłoby przytłaczające. Jak przygotować się do rozmów kwalifikacyjnych, w których każdy potencjalny pracodawca skupia się szczegółowo na innym podzbiorze mojego doświadczenia?


title: Języki i frameworki do budowania usług REST

text: Obecnie jestem w trakcie opracowywania usługi REST, która będzie wykorzystywana przez aplikację na iPhone'a. Zasadniczo usługa obejmuje istniejącą logikę biznesową. Ta logika biznesowa jest napisana w c# i piszę usługę w c#. Z czysto ciekawego punktu widzenia (nie tego projektu) moje pytania brzmią: Jakie inne języki i frameworki istnieją do budowania usług REST? Gdyby wybór technologii był otwarty, którą byś wybrał i dlaczego? Czy można zawijać zestawy c# przy użyciu języków innych niż Microsoft? Czy kiedykolwiek to zrobisz? (Jeśli zespół programistów był w stanie to wesprzeć)


title: Jaka jest dobra licencja na przesyłanie przez społeczność komercyjnego częściowo zamkniętego oprogramowania źródłowego?

text: Utrzymuję niewielką bazę kodu, którą rozważam w sprzedaży – ale chcę umożliwić programistom, którzy jej używają, przesyłanie kodu w celu dodania go do bagażnika. W ten sposób mogą rozszerzyć ramy, a społeczność może skorzystać. Chcę, aby zachowali prawa autorskie do swojego kodu, ale abym mógł go używać w dowolny sposób, w celach komercyjnych i niekomercyjnych. Nie chcę być zobowiązany do ujawnienia żadnego przesłanego źródła (chociaż jako właściciele praw autorskich mogą). Produktem użytkownika końcowego będą dystrybucje binarne skompilowanej bazy kodu. Czy istnieje dobra licencja na projekt tego rodzaju? Mógłbym trochę pójść na kompromis, aby użyć istniejącej licencji, która nie w pełni do niej pasuje, jeśli oszczędzi mi to bólu głowy.


title: Czy należy zmienić wewnętrzne nazewnictwo (klasy, metody, tabele bazy danych itp.) encji, jeśli zmieni się nazewnictwo marketingowe i UI?

text: Mamy długowieczny produkt od około 8 lat. Z biegiem czasu zmieniają się nazwy pojęć i bytów. Czy powinniśmy włożyć pracę, aby zmienić nazwy wszystkich tabel i kolumn bazy kodu i bazy danych, tak aby pasowały do tych nowych nazw? Czy przeprowadzono na ten temat badanie lub opublikowano kilka najlepszych praktyk? Dziękuję


title: Komunikaty dotyczące pielęgnowalności kodu

text: Szukam dobrego języka lub metafor, aby omówić łatwość utrzymania kodu z osobami nietechnicznymi (PM, sponsorzy biznesowi itp.). W szczególności niedawno stworzyłem kilka jednorazowych, gotowych dziś wieczorem kawałków kodu. Wszyscy, łącznie ze sponsorem wewnętrznym, wiedzieli, że oszczędzamy kilka godzin w oparciu o założenie, że kod zostanie użyty raz, do natychmiastowej potrzeby, a nie ponownie. Potem nieuniknione: „Hej, pamiętasz to, co zrobiliśmy? Zróbmy to jeszcze raz, ale z tymi drobnymi zmianami”. Oczywiście drobne zmiany nie są tak drobne, tym bardziej, że kod został napisany jako wielka, proceduralna złośliwość opierająca się na założeniach dotyczących środowiska. [Tak, tak, wiem, przede wszystkim unikaj problemu. Nie pisz złego kodu. Napisz wszystko tak, jakby ktoś inny, albo ja, prowadził za lata. To jednak inne pytanie. To jest po tym, jak to się stało.] Więc jakie są dobre metafory dla wewnętrznego sponsora (nietechnicznego), aby szybko wyjaśnić, dlaczego kod nie jest przyjazny dla konserwacji lub drobnych zmian? Ściany na planie filmowym: Nie ma tam garażu, to tylko drzwi. -lub- W tym samochodzie drzwi są zaspawane. Jak opisujesz to kontinuum? Chcę znaleźć kilka terminów dla naszej grupy, które pomogą nam porozmawiać o tym, ile wysiłku włożono z góry i jak to poprawi łatwość utrzymania: zilustrowanie kompromisów w „Czy chcesz to dziś wieczorem, czy chcesz, aby było możliwe do utrzymania?” (Pisząc to, zdaję sobie sprawę, że może to być to samo, co zdefiniowanie „nadającego się do utrzymania” dla nietechnicznych interesariuszy. Wygląda na to, że wyjaśnienie luźnego sprzężenia z typami nietechnicznymi może nie być najlepszym wyjściem z tego. to, jak?) Zredagowałem odpowiedź: Na razie będę nadal używał metafor konstrukcyjnych. To zmieni się w rozmiar i siłę fundamentu: „Tak, możemy zbudować ten budynek na tym, ale będziemy musieli przerobić fundament, aby był większy i obejmował właściwy obszar”.


title: Jak można stworzyć rozsądnie wydajny muteks wielkości wskaźnika?

text: Mam własne pomysły na to, jak można stworzyć muteks wielkości wskaźnika: liczba całkowita jest używana jako zestaw flag, licznika, indeksu i blokady spinającej, która chroni wpis w tabeli wstępnie przydzielonych obiektów jądra, które są przekazywane tylko muteksom gdy wątki rywalizują ze sobą, a następnie są zwalniane (potrzebne są tylko co najwyżej N wpisów w tabeli dla N wątków). Obserwowanie zmiany struktury SRWLOCK MS prowadzi mnie do przekonania, że warunkowo przechowują ogon listy xor (lub indeksu tabeli?) we wskaźniku, gdy są kwestionowane. Pierwsze 4 bity to pewnego rodzaju flagi. ### Aby wyjaśnić, zastanawiałem się, czy są jakieś inne pomysły na stworzenie muteksu trybu użytkownika, który ma rozmiar wskaźnika i wymaga alokacji obiektu jądra tylko wtedy, gdy jest kwestionowany. Mój pomysł polega na spinlockingu, więc mam nadzieję, że istnieje coś, czego nie ma.


title: Projektowanie metod klas: samodzielne czy jawne wywołania?

text: Pewnie rzeźnię terminy, jeśli ktoś zna odpowiednie terminy - byłoby super. Ale moje pytanie brzmi: czy powinienem projektować moje klasy tak, aby parametry ich metod były dostępne z zewnątrz, czy wszystkie powinny być samowystarczalne? Na przykład chcę ustawić nazwę domeny dla klasy, która będzie służyła jako domena „aktywna”: function setDomain($url){ if ($this -> domainUrl = parse_url($url, PHP_URL_HOST)){ $this -> domena = $this->db->get_where('domains', array('host' => $this->domainUrl)); zwróć $to; } zwróć fałsz; } a następnie przejdź drogą: function addDomain(){ $query = "WSTAW DO domen (host) VALUES ('$this->domainUrl')"; $this->db->zapytanie($zapytanie); return $this } lub mogę porzucić całą trasę setDomain() i po prostu wywołać adres URL jawnie, na przykład: function addDomain($url){ $query = "WSTAW DO domen (host) WARTOŚCI ('$url' )"; $this->db->zapytanie($zapytanie); } Co twoim zdaniem jest lepsze i jak sądzę - od czego to zależy, ponieważ mogą zaistnieć przypadki, w których będę musiał to wyraźnie nazwać.


title: Jak mogę debugować wyciek pamięci w usłudze?

text: Mam program do obsługi systemu Windows, który działa na jednym z naszych serwerów. Ma jakiś wyciek pamięci w programie. Kiedy zaczyna działać po raz pierwszy, używa 20 000k pamięci. W ciągu kilku dni to aż 400 000 tys. pamięci. Jest to dość prosty program, który śledzi uruchomione procesy i zapisuje informacje w bazie danych. Nie jestem pewien, jak mogę debugować program uruchomiony na zdalnym komputerze, aby dowiedzieć się, skąd pochodzi przeciek pamięci. Jakich metod proponujesz użyć, aby spróbować to wyśledzić? **Aktualizacja** Program ma już wiele obsługi wyjątków. Jednak nie ma w ogóle rejestrowania. Jakie informacje powinienem rejestrować, aby wyśledzić wyciek pamięci?


title: Konwencje pakietów dla aplikacji MVC

text: Który (jeśli którykolwiek z poniższych) jest bardziej konwencjonalnym/akceptowalnym sposobem strukturyzowania pakietów w aplikacji J2EE? Usiłuję podążać za wzorcem MVC w jak największym stopniu. * foo.bar.users * foo.bar.users.servlets * foo.bar.users.DAO * foo.bar.users.Entity * foo.bar.orders * foo.bar.orders.servlets * foo.bar.orders .DAO * etc... lub * foo.bar.DAO * foo.bar.DAO.users * foo.bar.DAO.orders * ... * foo.bar.servlets * foo.bar.servlets.users * foo .bar.serwlety.zamówienia * ...


title: Dostarczanie i buforowanie plików w asp.net

text: Pytanie brzmi – jaki jest skuteczny sposób dostarczania plików użytkownikom? Rozważ aplikację asp.net, która daje możliwość przeglądania różnych plików. Rodzaj biblioteki obrazów lub katalogu plików internetowych. Kluczowe punkty to: * użytkownik może przesyłać dowolne pliki o rozmiarze <= 10Mb * pliki są przechowywane na dysku * pliki nigdy się nie zmieniają * użytkownik może usunąć plik * istnieje pewna procedura sprawdzania dostępu w celu uzyskania dostępu do pliku, więc muszę znaleźć pewna równowaga między dostępnością (tj. buforowanie) a bezpieczeństwem (tj. kontrola dostępu). Obecnie użytkownik wysyła żądanie w postaci `/attachment/{id}`, a kontroler odczytuje plik z dysku i wysyła go do klienta: if(HasAccess(user)) { var data = File.ReadAllBytes() return nowy FileResult(dane); } Podejrzewam, że nie jest to optymalny sposób: obejmuje potok aplikacji asp.net i dużo używa dysków. Czy można w ten sposób zoptymalizować? Czy mogę przechowywać takie pliki w pamięci podręcznej danych wyjściowych? Czy istnieją inne sposoby (nie wykorzystujące Kontrolera) dostarczania plików, które należy rozważyć?


title: Jakie są najlepsze praktyki zabezpieczania internetowego interfejsu API?

text: Muszę zbudować interfejs API usługi sieci Web dla naszej aplikacji mobilnej do interakcji z naszym serwerem i bazą danych (w ASP.Net MVC 4, ale to nie jest istotne). Ponieważ większość działań nie wymaga rejestracji użytkowników w naszym serwisie, chcielibyśmy ograniczyć dostęp tylko do użytkowników naszej aplikacji. Jakie są metody, aby upewnić się, że połączenia wykonane z innego miejsca (np. od kogoś, kto chce wszystkie nasze dane lub budując nieoficjalną aplikację) są odrzucane? Mój początkowy pomysł polega na tym, aby urządzenie prosiło serwer o token, który jest losowo generowany i wysyłany w takiej postaci, w jakiej jest. Wszystkie inne metody sprawdzą, czy nagłówki żądania zawierają konkretny, który będzie hashem md5 zasolonego tokenu. Serwer zna token i sól i jest w stanie obliczyć hash i porównać go z wysłanym. Dodatkowo token ma ograniczoną żywotność, a urządzenie musi dostawać kolejny co drugą godzinę. Wydaje się to dość łatwe do wdrożenia i chociaż prawdopodobnie nie jest to 100% dowodu, wydaje się to być dobrym pomysłem. Co myślisz?


title: Czy scala byłaby dobrym wyborem zamiast Javy?

text: Rozpoczynamy nowy projekt, który będzie polegał na przeszkoleniu wszystkich programistów .net w języku Java (frameworks/system ECO itp.). Mamy dużo kodu napisanego w C# i wydaje się, że wszystko to pójdzie na marne, ponieważ musimy wszystko przepisać w Javie. Problem, który widzę, polega na tym, że przez pierwszy rok (prawdopodobnie 2 lata) nie będziemy mieli nic do dostarczenia, ponieważ większość czasu spędzimy na odtwarzaniu tego, co mieliśmy wcześniej, ale teraz w Javie. Ponieważ nasz zespół jest rozmieszczony w różnych biurach na całym świecie i mamy dużą liczbę programistów Java (20 do 30) i 10 programistów korzystających z .net, chcemy, aby wszyscy programiści używali tego samego języka/platformy, abyśmy mogli zacząć ponowne wykorzystanie komponentów/modułów. Więc mogę zrozumieć punkt widzenia kierownictwa. Wczoraj natknąłem się na Scala i zastanawiałem się, czy nie byłoby lepiej użyć tego z obecnym produktem (który jest napisany w C#), a wtedy przynajmniej będziemy mieli działający produkt za rok. Również za rok mamy moduły, które mogą być używane w świecie Java, podczas gdy migrujemy inne części produktu. Czy Scala byłaby lepszym wyborem niż Java, biorąc pod uwagę to, co staramy się osiągnąć?


title: Kwestie do rozważenia podczas ładowania jQuery?

text: 1. Widziałem wiele odpowiedzi w SO dotyczących używania CDN Google do ładowania jQuery zamiast ładowania go z lokalnego serwera. W istocie rozumiem, że jest to problem związany ze zmniejszoną latencją, lepszym buforowaniem. Ale chcę poznać odpowiedź techniczną, być może przykład mówiący o tym, dlaczego nawet załadowanie pliku o rozmiarze 30 KB jest problemem. Widzimy obecnie strony internetowe z bogatymi funkcjami multimedialnymi, które pobierają znaczne ilości z serwera, więc czy w takim świetle rozmiar pliku ma znaczenie? 2. Istnieją również ogromne obawy dotyczące korzystania z tak „ciężkiej” biblioteki, jeśli wszystko, czego używasz, to tylko ułamek podzbioru funkcji? A jeśli masz zamiar w ogóle używać, zaleca się używanie wersji skompresowanej (30+ KB) zamiast nieskompresowanej (200+ KB)? Znam też zwykłe odpowiedzi na to pytanie, może jeśli ktoś może wrzucić na to więcej wglądu? Moje oba powyższe pytania zasadniczo próbują poruszyć ten sam problem. Byłbym bardzo wdzięczny za odpowiedzi, które mogą zapewnić perspektywę, a nie zwykłe odpowiedzi w SO?


title: Jakie są skuteczne sposoby konfiguracji środowiska podczas pracy w lokalizacji zdalnej?

text: Witajcie koledzy programiści, wciąż jestem stosunkowo nowym programistą i niedawno dostałem swoją pierwszą pozycję programisty na kampusie. Jestem jedynym deweloperem odpowiedzialnym za 8 domen oraz 3 niewielkie aplikacje webowe PHP. Kampus ma swoje środowisko sieciowe podzielone na serwery pomostowe i serwery live – tworzymy je na pomostach za pomocą SFTP, a następnie przesyłamy aktualizacje na serwer live przez web GUI. Obecnie używam Sublime Text 2 i wtyczki Sublime SFTP do całej mojej pracy deweloperskiej (jest to mój preferowany edytor). Jeśli po prostu edytuję stronę, otworzę ten pojedynczy plik za pomocą przeglądarki FTP. Jeśli pracuję nad projektami aplikacji internetowych PHP, mam katalog aplikacji zmapowany do folderu lokalnego, dzięki czemu po zapisaniu lokalnie plik jest automatycznie przesyłany przez Sublime SFTP. Czuję, że ten przepływ pracy jest powolny i nieoptymalny. Jak mogę poprawić przepływ pracy przy pracy z treścią zdalną? Chciałbym skonfigurować lokalne środowisko na moim komputerze, ponieważ wyeliminowałoby to ciągłe przesyłanie/pobieranie SFTP, ale jak powiedziałem, jest wiele witryn, a przestrzeń wymagana dla lokalnej kopii całej domeny byłaby dość duża i złożona ; nie wspominając o aktualizowaniu go o najnowsze informacje na serwerze pomostowym, byłoby koszmarem. Czy ktoś wie, jak mogę ulepszyć mój ogólny przepływ pracy w zakresie tworzenia stron internetowych z tego, co opisałem? Naprawdę chciałbym wyciąć ciągłą edycję przez FTP, ale nie jestem pewien, od czego zacząć, poza zgrywaniem całego katalogu i wrzucaniem go do XAMP.


title: Jak skonfigurować parowanie adresów e-mail?

text: Nasz zespół używa klejnotu Ruby do zarządzania parowaniem. Ustawiasz adres e-mail grupy (np. `dev@mycompany.com`), a następnie mówisz, kto paruje: $ hitch james tiffany Hitch ustawia twoją autorską konfigurację Git tak, aby nasze zatwierdzenia wyglądały jak commit 629dbd4739eaa91a720dd432c7a8e6e1a511cb2d Autor: James and Tiffany <dev+james+tiffany@mycompany.com> Data: Czw 31 października 13:59:05 2013 -0700 Niestety, udało nam się wymyślić tylko dwie opcje: 1. `dev@mycompany.com` nie istnieje. Minusem jest to, że jeśli Travis CI spróbuje powiadomić nas, że zepsuliśmy kompilację, nie widzimy tego. 2. `Dev@mycompany.com` istnieje i przekazuje do wszystkich programistów. Minusem jest to, że _wszyscy_ są spamowani każdą zepsutą kompilacją każdej pary. Mamy zbyt wiele możliwych par, aby wykonać jedną z następujących czynności: 1. skonfigurować rzeczywiste adresy e-mail lub grupy `pair-james-tiffany@mojafirma.com` (n^2 adresów e-mail) 2. skonfigurować reguły przekazywania dla `dev+ james+tiffany@mojafirma.com` (n^2 reguł przekierowania) 3. ustaw reguły przekierowania dla `james+tiffany@mojafirma.com` (n reguł przekierowania dla każdego z n programistów) Czy ktoś ma system, który dla niego działa ? ## EDYTUJ Oczywiście przegapiłem bardzo ważny element: używamy Gmail Business do całej naszej poczty firmowej. Możemy dodawać i usuwać użytkowników i grupy, a użytkownicy mogą tworzyć filtry, ale nie mamy kontroli nad samym MTA.


title: Skrypty Pythona łączą się z GUI za pomocą IDE

text: Uczę się Pythona. Teraz mogę do pewnego stopnia pisać skrypty (kody) Pythona. Interesuje mnie tworzenie GUI do tych napisanych programów. Lubię to robić za pomocą IDE, a nie PyGTK lub Tkinter. Czy ktoś może mi pomóc, jak zacząć od tego i połączyć moje skrypty z GUI. Pobrałem IDE o nazwie "glade". Ale nie wiem, jak korzystać z tego IDE. Potrzebuję też poradnika. Czy ktoś może mi pomóc.Proszę.Dziękuję!


title: 70-506 — Certyfikacja Silverlight

text: Patrzę na opis egzaminu 70-506 i wygląda na to, że nie liczy się on do żadnego egzaminu MCPD. Czy to jest poprawne, czy też patrzę na to niepoprawnie? Oto, na co patrzę: http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-506&locale=en-us


title: Aktualizacja z XP Pro do Win 7, czy mam się czym martwić?

text: Zajmuję się głównie pracą .NET, więc zakładam, że framework jest w porządku i to. Ale czy pojawiły się doniesienia o tym, że różne narzędzia, takie jak .NET Reflector i tym podobne, nie działają poprawnie z Win 7? Jest to sprawa obejmująca całą firmę, więc niewiele mogę z tym zrobić, ale po ponownym zainstalowaniu wszystkiego mam nadzieję, że nic nie będzie szokujące. Twoje zdrowie.


title: Losowa liczba dla HTTPS MAC

text: Niedawno odkryłem, że Netscape użył dość prostego algorytmu do generowania losowej liczby dla kodu uwierzytelniania wiadomości w celu ustanowienia połączenia HTTPS (Nestscpe używał czasu, numeru identyfikacyjnego procesu i numeru identyfikacyjnego procesu nadrzędnego). Więc teraz zastanawiam się, z jakiego źródła nasion korzystają współczesne przeglądarki, aby zagwarantować prawdziwą losowość?


title: Czy często zdarza się mieć przestój w pracy programistycznej?

text: W mojej firmie stwierdzam, że są dni, w których jest bardzo mało zadań do wykonania. W dzisiejszych czasach staram się prowadzić badania, aby dowiedzieć się nowych rzeczy o moim rzemiośle. Powiedziałbym, że średnio mam około jednego dnia w tygodniu, w którym nie ma zbyt wiele do zrobienia (lub jakaś kombinacja czasu w ciągu tygodnia). Chciałabym wiedzieć, czy jest to powszechna sytuacja w środowiskach programistycznych i czy odpowiedź na to pytanie różni się między pracą w pełnym wymiarze godzin, a pracą kontraktową.


title: Mój współpracownik jest miłym facetem, ale jego wydajność jest poniżej normy. Czy mam powiedzieć mojemu szefowi?

text: Około trzech miesięcy temu zostałem zaangażowany do projektu, który do tej pory był rozwijany przez jednego, nowo zatrudnionego dewelopera, ponieważ pozostawał w tyle. Aby być uczciwym, projekt jest interfejsem do urządzenia medycznego, który ma wiele subtelności i jest stosunkowo złożony, więc umieszczenie w projekcie jednej osoby, która nie miała doświadczenia w firmie, było prawdopodobnie złą decyzją z perspektywy menedżerskiej. W każdym razie, kiedy zacząłem nad tym pracować, zdałem sobie sprawę, że… cóż, to po prostu nie działało. Interfejs użytkownika wyglądał ładnie, ale w rzeczywistości nie robił niczego, a to, co robił, robił nieprawidłowo. Ponownie, aby być uczciwym, wiele z tego wynikało z faktu, że ten programista nie był odpowiednio przygotowany do napisania interfejsu na nasze urządzenie. Jednak szybko zdałem sobie sprawę, że kod, który był na miejscu, był kruchy i niezwykle trudny w utrzymaniu. Teraz nie twierdzę, że jestem najlepszym programistą na świecie. Pracuję z wieloma bardzo inteligentnymi ludźmi, którzy są lepszymi programistami niż ja. Jednak bardzo się staram pisać kod, który jest tak prosty, jak to tylko możliwe i solidny. Testuję moje checkins. Jeśli widzę, że mój kod staje się bałaganiarski i trudny do pracy na początku, zmieniam go. Odbyłem kilka rozmów z moim współpracownikiem, aby pomóc mu napisać lepszy kod. Jest to trochę trudne, ponieważ a) ma ponad 20 lat doświadczenia w tej dziedzinie, a ja mam tylko 5, oraz b) został zatrudniony jako tak zwany „ekspert UX”, a inni postrzegają go jako doświadczoną osobę. Powiedział, że po prostu tego nie widzę. Jest bardzo miłym facetem i jest rozsądny, ale raz za razem sprawdza kod, który jest delikatny, działa tylko w najbardziej optymistycznych przypadkach i 9 razy na 10 naprawiam błędy w jego pracy. Jego kod wydaje się po prostu amatorski i najwyraźniej nie ma takiego doświadczenia, jakie twierdził, kiedy został zatrudniony. Doszło do punktu, w którym dodatkowe godziny spędzone na refaktoryzacji jego kodu i naprawianiu jego błędów odbiły się na mnie. Z mojego punktu widzenia mam dwie opcje: 1. Nic nie rób, zrób mi biust, żeby ten produkt wyszedł na czas i był solidny i poczekaj, aż mu się nie uda w przyszłości (nie będę z nim pracował nad tym projektem po pierwszym wydaniu.) 2. Opowiedz mojemu szefowi o jego występie. Mój szef jest rozsądnym człowiekiem, ale po prostu czuję się niezręcznie przy takim podejściu. Nie lubię walić (z braku lepszego określenia) moich współpracowników i nie wiem, jak on to przyjmie. Więc to wszystko. Próbowałem rozwiązać to z moim współpracownikiem, wyjaśniając, dlaczego jego implementacja nie zadziała lub jak można sprawić, by jego kod był łatwiejszy w utrzymaniu, ale nadal popełnia te same błędy. Bardzo mnie interesuje, jak inni radzą sobie w podobnych sytuacjach, zwłaszcza osoby w zarządzaniu. Z góry dziękuję za wszelkie porady, które możesz mi zaoferować.


title: Jak odświeżyć ogólną wiedzę na temat CS?

text: Tylko uwaga: to będzie repost ze stackoverflow. Jako osoba, która niedługo kończy studia (i która nie zawsze zwracała dostatecznie uwagę na to, co mówił nauczyciel) postanowiłam odświeżyć swoją „uniwersytecką” wiedzę z CS (tzn. minęły 3 lata odkąd rozpocząłem studia operacyjne Kurs systemowy). Chciałbym powtórzyć wszystko (a przynajmniej najważniejsze rzeczy), których nauczyłem się w ciągu ostatnich 5 lat. Problem polega na tym, że tak naprawdę nie muszę przechodzić przez wszystkie prezentacje/wykłady, które wygłosiłem na moich kursach, ponieważ większość z nich już znam i są one dość długie i bardzo szczegółowe. Dlatego szukam książki/zestawu książek/prezentacji, które bardzo pokrótce zrewidowałyby wszystkie typowe problemy CS. Wiesz, zaczynając od podstaw (definicja algorytmu), a następnie przechodząc do innych tematów, takich jak algorytmy i struktury danych, programowanie, bazy danych, sieci, systemy operacyjne, analiza numeryczna, prawdopodobieństwo. Czy są tam jakieś takie materiały? Próbowałem googlować, ale zawsze trafiam na dość szczegółowe rzeczy. Oczywiście nie będzie to 10-stronicowa książeczka, ale tak naprawdę nie szukam zestawu 10 książek każda o długości 1200 stron.


title: Slugify przez pomocnika lub przechowywanie ślimaka w bazie danych?

text: Mam proste pytanie: **Slugify via helper czy przechowywanie ślimaka w bazie danych?** To znaczy, załóżmy, że mam `Guilherme Oderdenge` w bazie danych i chcę go przekształcić w czytelny dla człowieka adres URL, taki jak `http: //myapp.com/guilherme- oderdenge/`, jak najlepiej to zrobić? Przechowywanie `guilherme- oderdenge` w bazie danych czy przekształcanie `Guilherme Oderdenge` w ślimaka z pomocnikiem, takim jak `user.name.slugify`? Wiem, że jest kilka sposobów na osiągnięcie oczekiwanego rezultatu, ale który z nich jest lepszy? A przynajmniej jest lepszy sposób? ### To zależy od technologii, której używasz - używam Ruby On Rails z MySQL.


title: Jak ustrukturyzować testy jednostkowe dla aplikacji GUI za pomocą C# i NUnit

text: Poproszono mnie o wykonanie małego projektu pobocznego, aby dostarczyć prostą aplikację jednemu z naszych klientów. Normalnie pracowałbym nad kodem zaplecza, w którym mam rozpracowane wszystkie moje potrzeby testowe, a nie miałem jeszcze wątpliwej przyjemności pisania testów dla GUI, więc jest dla mnie trochę niejasne, jak powinienem skonfigurować kod testowy i narzędzia dla EXE. Moim pierwszym odruchem było po prostu dołączenie testów do kodu aplikacji, jednak wymagałoby to dostarczenia szeregu zależności specyficznych dla testów, których poinstruowano, aby nie wysyłać ich do klienta. Nie jestem też w stanie wycisnąć pieniędzy na specjalnie zbudowane narzędzie testowe, więc muszę skorzystać z narzędzi, które mam pod ręką ( ** _StoryQ_** , **_RhinoMocks_** , i **_NUnit_** ), które naprawdę powinno wystarczyć, aby przetestować zachowanie prostej aplikacji GUI. Tak więc, o ile widzę, pozostawia mi to próbę znalezienia właściwej równowagi między utrzymaniem naprawdę prostego projektu lub celowego przeprojektowania ze względu na testy. Wygląda na to, że albo buduję aplikację z logiką biznesową w osobnej bibliotece i testuję ją tak, jak zwykle, albo znajduję jakiś inny mechanizm, który pozwoli mi na plik wykonywalny bez rozbijania dodatkowych modułów, których nie ma projekt aplikacji naprawdę potrzebujesz. **Edytuj:** Zwróć uwagę, że to pytanie dotyczy struktury relacji między NUnit a moim plikiem wykonywalnym — w przeciwieństwie do biblioteki DLL — a nie tego, jak oddzielić logikę prezentacji od logiki biznesowej. **/Edytuj** Więc moje pytanie brzmi: 1. Czy istnieje konkretna/zalecana metoda konfiguracji prostej aplikacji GUI z testami jednostkowymi, aby umożliwić mi odpowiednie sprawdzenie stanu i zachowania, przy użyciu narzędzi, które mam pod ręką, i bez uciekania się do nadmiernej inżynierii? 2. Czy przegapiłem coś fundamentalnego na temat sposobu, w jaki NUnit powinien być wywoływany/konfigurowany podczas testowania EXE (w przeciwieństwie do DLL)? 3. Czy możesz podać lub wskazać mi przykłady, jak to wszystko osiągnąć? Zdaję sobie sprawę, że może być więcej niż jeden sposób, aby to zrobić, więc szukam konkretnych wskazówek dotyczących implementacji w oparciu o Twoje doświadczenie.


title: Trochę z przeszłości: czy RMI lub CORBA mogą działać przez IP?

text: Pytanie: **Czy RMI lub CORBA mogą działać przez IP?** _Nie sądzę, że RMI może - czy nie działa przez IIOP?_


title: Jak ocenić architekturę oprogramowania?

text: Omawiając różne style architektoniczne, takie jak 3-poziomowy, CQRS i spółka. słyszysz różne powody, dla których X jest lepsze niż Y. Poza faktem, że _lepsze_ nigdy nie jest absolutne, ale zależy od rzeczywistego kontekstu, argumenty często są tylko przeczuciami (lub _intuicją_, by użyć bardziej profesjonalnie brzmiącego słowa). Teraz zastanawiałem się, jak profesjonalnie ocenić architekturę oprogramowania. Myślę, że nie jestem pierwszą osobą na tej planecie, która myśli o ocenie różnych architektur i ich porównywaniu. Więc na co powinienem uważać, aby mieć poczucie, która architektura lepiej lub gorzej pasuje do mojego konkretnego przypadku? Dziś rano zastanawiałem się nad tym przez chwilę i wymyśliłem różne pytania, które mi pomagają. Do tej pory na mojej liście znalazły się następujące pozycje: * Jak testowalna jest architektura (systemy ściśle zintegrowane są trudniejsze do przetestowania niż luźno powiązane, a niektóre architektury wspierają własny styl testowania)? * W jakim stopniu odsprzęganie i kohezja sprzyja architekturze (odsprzęganie jest zwykle lepsze niż ścisłe sprzężenie, silna kohezja jest zwykle lepsza niż luźna kohezja)? * Jak dobrze się skaluje (powinien działać w małym, ale bez zmian również w dużym)? * W jaki sposób architektura wpływa na wydajność (niektóre style architektoniczne mogą wiązać się z korzyściami / karami wydajności w określonych obszarach)? * Jak duże są rzeczy, które muszę zmienić, gdy zmieniają się wymagania (im mniej muszę zmienić, tym lepiej)? * Jaka jest możliwość przedłużenia (system z możliwością przedłużenia ma wstępnie zdefiniowane punkty przedłużenia i koncepcje przedłużenia)? * Jak dobrze integruje się z oprogramowaniem innych firm (dobra architektura jest otwarta na połączenie z innym systemem)? * Jak reaguje na błędy (tolerancja błędów i obsługa błędów są w idealnym przypadku zintegrowane koncepcyjnie)? * Na ile jest niezawodny (system powinien przetrwać przestoje, awarie, …)? * Jak zachowuje się architektura w odniesieniu do twierdzenia CAP (przynajmniej jeśli jest to aplikacja rozproszona, możesz mieć różne cele)? * Na ile to zrozumiałe (im mniej muszę wyjaśniać komuś nowemu w architekturze, tym lepiej, czyli dążyć do prostoty)? * Jak dobrze jest to udokumentowane (dobrze znane i ugruntowane rozwiązanie jest lepsze niż nowicjusz)? * Jak duża jest społeczność wokół niej (duża społeczność ułatwia znalezienie osób do pracy, trenerów, …)? Co myślisz o tej liście? Czy te pytania są rozsądne? Czego brakuje? A może moje podejście jest całkowicie błędne?


title: Zmiana kodu w czasie pracy

text: Ponieważ JavaScript jest językiem interpretowanym, całe funkcje można zmieniać w czasie wykonywania. Ostatnio zastanawiałem się nad strukturą, która pozwoliłaby na dynamiczne zmiany kodu (takie jak wtyczki interfejsu użytkownika) bez konieczności ponownego ładowania strony, jednocześnie zapewniając wystarczającą ilość informacji, aby w razie potrzeby cofnąć zmianę. Zacząłem z powodzeniem testować tę koncepcję na małych przykładach, ale nie miałem okazji przetestować pomysłu pod kątem niczego użytecznego. Czy są jakieś typowe niekorzystne skutki uboczne zmiany kodu w czasie wykonywania, czy jest to uważane za złą praktykę?


title: Projekt księgi lub dziennika dla systemu punktowego?

text: Obecnie tworzymy nową usługę, która zostanie zintegrowana z istniejącą platformą naszej firmy. Usługa będzie odpowiedzialna za śledzenie „punktów”, które użytkownik może wygenerować w czasie poprzez określone działania. Jestem złapany między dwiema różnymi metodami podejścia. Nie jestem pewien, czy wybrać jedną z następujących struktur do ciągłego zarządzania punktami: 1. Utwórz „dziennik” punktów i zamiast tego zachowaj jedną bieżącą sumę w bazie danych, taką jak pole klucz/wartość, gdzie wartość jest bieżącą saldo punktów, które jest po prostu dostosowywane podczas każdej transakcji. 2. Utwórz system „księgi”, w którym za każdym razem punkty są przeliczane po spełnieniu określonego warunku, ale _cała_ księga jest oceniana w celu określenia najbardziej aktualnego salda punktów. Nie myśl, że jest to istotne, ale bazą danych zaplecza jest Riak. Który ma najmniej wad, czy jest lepszy sposób? Jak działa system punktowy StackExchange w stosunku do powyższego? Wielkie dzięki za wkład!


title: Jak pisać testy jednostkowe dla robotów (i innych urządzeń mechanicznych)?

text: Jestem członkiem klubu robotycznego w mojej szkole średniej i jestem odpowiedzialny za programowanie robota. Jedną z sugestii, którą ciągle słyszę od różnych dorosłych, jest to, że powinienem pisać testy jednostkowe, aby pomóc w walidacji mojego kodu. Baza kodu staje się nieco większa i zgadzam się, że testy jednostkowe byłyby naprawdę pomocne w szybszym wykrywaniu błędów. Jednak nie jestem do końca pewien, jak mógłbym to osiągnąć. Zgodnie z moją najlepszą wiedzą, testowanie jednostkowe odbywa się poprzez pobranie funkcji (lub podsystemu kodu) i dostarczenie jej zestawu danych wejściowych, aby upewnić się, że za każdym razem wychodzi z tym samym wyjściem. Kod, który obecnie posiadam, nie robi żadnego ciężkiego przetwarzania danych, ale raczej bezpośrednio manipuluje komponentami sprzętowymi robota. Większość złożoności polega na upewnieniu się, że elektronika jest poprawna, że kod w danej chwili pasuje do rzeczywistego sprzętu robota itp. Często widzę tylko, czy jest problem, ładując kod do samego robota, i próbuje go uruchomić. W jaki sposób można napisać testy jednostkowe dla kodu przeznaczonego do obsługi dowolnego urządzenia mechanicznego? Wydaje mi się, że błędy można wyłapać tylko fizycznie obserwując pracę maszyny. Czy po prostu nie rozumiem, jak powinny działać testy jednostkowe? ( _Jeśli to ma znaczenie, oto kod, jest napisany w C++, a ja biorę udział w FRC_)


title: Pseudokod do implementacji algorytmu Appela

text: Próbuję zaimplementować wersję algorytmu Appela do usuwania ukrytych linii wektorowych (tj. Chciałbym uniknąć jakiejkolwiek formy rasteryzacji). Znalazłem opis tego algorytmu tutaj - http://wheger.tripod.com/vhl/vhl.htm ale nie wspomina jak właściwie poradzić sobie z implementacją i mam z tym problem... dokładniej - jak mogę napisać kod (no, przynajmniej pseudokod), który w rezultacie da, że "Wszystkie ściany są podzielone na podpowierzchnie tak, że wszystkie punkty we wnętrzu tej podpowierzchni są albo skierowane do przodu, albo do tyłu"? I - "Dlatego podczas przechodzenia przez odcinek krawędzi widoczność zwiększa się przy przechodzeniu pod ciałem i maleje przy wychodzeniu spod spodu" - czy muszę symulować "przechodzenie" przez krawędź? Jaka idea we wdrożeniu się za tym kryje? I w zasadzie ten opis jest dla mnie trochę przytłaczający, ponieważ zawiera skąpe obrazy i pseudokody, więc jeśli możesz się ze mną podzielić którymkolwiek z nich, będę bardzo wdzięczny.


title: Czy możesz zmienić licencję po wybraniu jednej?

text: Pracuję nad produktem, który moim zdaniem nie jest w pełni gotowy, ale mam grupę użytkowników, którzy są bardzo zainteresowani używaniem go teraz jako testerów „alfa”. Chciałbym dać im teraz produkt za darmo jako testerzy "alfa", ale chciałbym później licencjonować oprogramowanie. czy to możliwe? Czy ktoś może wskazać mi linki/książki/artykuły/itd.? Dziękuję. **EDYTUJ:** Ze względu na brak jasności i odpowiedzi na pytanie pomyślałem, że powinienem dodać to stwierdzenie. Nie zdecydowałem jeszcze, czy zamierzam zamknąć ten projekt, czy open-source. Baza użytkowników, którzy chcą go teraz zdobyć, zaskoczyła mnie i martwiłem się, jakie są moje opcje, jeśli chodzi o możliwość udostępnienia im go teraz jako open source, a później zmiany na zamknięte źródło, lub nawet na odwrót. Dziękuję wszystkim, którzy odpowiedzieli i skomentowali. Doceniam to spostrzeżenia.


title: Jakie są zalety wyrażania informacji w możliwie najprostszym formacie?

text: Chciałbym z góry przeprosić, jeśli mój nagłówek nie jest wystarczająco konkretny, ale myślę, że jest to ogólne pytanie, chociaż mam bardzo konkretny przykład: w moim zespole utrzymujemy specyfikację testów, której używamy za każdym razem, gdy wydajemy oprogramowanie. Specyfikacja jest napisana w Wordzie i w konsekwencji czasami mamy problemy ze zgodnością, złe formatowanie w niektórych częściach dokumentu, a czasami ludzie niewłaściwie używają poziomów nagłówków. Nic poważnego, ale mimo wszystko irytuje. Ale zasadniczo nasza specyfikacja składa się z przypadków testowych, które można opisać po prostu jako nagłówek z kilkoma ponumerowanymi instrukcjami. Myślę, że bylibyśmy o wiele bardziej zadowoleni z używania lekkiego języka znaczników (np. AsciiDoc lub Markdown), ponieważ wystarczyłoby do opisania treści. Mielibyśmy inne konkretne korzyści (dodać go do git, użyć narzędzi diff, łatwo przekonwertować na inne formaty, nie potrzebując Worda). To skłoniło mnie do zastanowienia - czy są jakieś zalety, ogólnie rzecz biorąc, wyrażania informacji w możliwie najprostszym formacie?


title: Jak skonfigurować rozproszoną kontrolę wersji, która może przejść do subversion

text: Mamy konfigurację serwera trac, która działa z zatwierdzeniami svn, więc możemy robić takie rzeczy jak "fixed #183" w komunikatach o zatwierdzeniu i odwoływać się do związanych z tym zmian. W tej chwili mam eclipse z wtyczkami subclipse + trac i działa całkiem nieźle. Ale **Nie mam internetu przez cały czas** i bardzo trudno jest zobowiązać się do niedostępnego serwera svn. Chciałbym użyć jakiegoś typu lokalnego repozytorium dla zatwierdzeń, a następnie wypchnąć zatwierdzenia wszystkie na raz, ale indywidualnie na serwer. **Zmiana svn/trac nie jest obecnie możliwa**. Inni programiści mogą bezpośrednio dotknąć serwera svn. Czy istnieje sposób na buforowanie zatwierdzeń lokalnie, a następnie wysyłanie ich, gdy znów będę miał dostęp do Internetu? Pamiętaj, że nie mogę po prostu wykonać jednego dużego zatwierdzenia wszystkich moich zmian, ponieważ sprawia to, że jest to koszmar, ponieważ nie mogę selektywnie scalać. Zasadniczo, czy istnieje ** sposób na zrobienie tego, gdy git/bzr/mercurialand nadal używa svn/trac** zgodnie z przeznaczeniem? Byłbym skłonny napisać trochę skryptów, ale nie wiem od czego zacząć.


title: Wielokrotne wyświetlanie dokumentu i utrwalanie każdej zmiany przeglądarki w jednym dokumencie

text: Mam scenariusz, w którym muszę udostępnić dokument do przeglądania i edycji wielu użytkownikom, użytkownicy mogą edytować i przeglądać dokument w tym samym czasie. Teraz pojawia się problem jeśli na przykład użytkownik A i użytkownik B przeglądajądokument w tym samym czasie i jeśli obaj zmieniąstan dokumentu i użytkownik A zapisze go wx chwili a użytkownik B zapisze go w y momencie czasu, gdzie y>z w wymiarze czasu. Zmiany wprowadzone przez użytkownika A zostaną zastąpione zmianami wprowadzonymi przez użytkownika B. Ewentualne rozwiązania, które mam na myśli (1) zachowam trochę np. isViewedCurrently i zezwalaj tylko jednemu użytkownikowi na przeglądanie/edycję dokumentu, (2) zapisywanie zmian każdego użytkownika osobno, a następnie wyznaczenie roli, która połączy te zmiany (niepraktyczne) proszę zasugerować jakieś rozwiązanie, które mogę zaimplementować, czy ktoś może wyjaśnić jak google to robi, dokumenty Google są udostępniane, przeglądane i edytowane przez wielu użytkowników, a zmiany każdego użytkownika są utrwalane. Używam programu SQL Server 2008 R2 do utrwalania danych aplikacji. EDYCJA: Google zaimplementowało od podstaw powierzchnię do edycji, a także w JavaScript http://googledocs.blogspot.com/2010/05/whats-different-about-new-google-docs.html#!/2010/05/whats -different-about-new-google-docs.html http://googledocs.blogspot.com/2010/05/whats-different-about-new-google-docs.html#!/2010/05/whats-different- about-new-google-docs.html


title: Plik konfiguracyjny dla API - czy powinien to być web.config?

text: Mam zdalne wywołanie procedury API, gdzie parametry połączenia muszą być przechowywane w miejscu, do którego ma dostęp kod API. Oczekuje się, że ten interfejs API będzie używany głównie do tworzenia usług internetowych. Pierwotnie planowałem przechowywać te parametry w osobnym pliku xml i wymagać od użytkowników API zdefiniowania ścieżki do tego pliku w kodzie. Współpracownik zasugerował, że powinienem znaleźć sposób na przechowywanie tych parametrów w pliku web.config. Bez dużego doświadczenia WCF mam wrażenie, że plik web.config nie powinien być tutaj używany, ponieważ zawiera wiele ustawień niezbędnych do działania usługi internetowej lub aplikacji internetowej. Nie chcę, aby moje API zadzierało z tym plikiem. Uważam, że to zbyt ryzykowne. Jaka jest twoja opinia na ten temat? Czy web.config jest odpowiednim miejscem do przechowywania ustawień mojego API, czy też należy go pozostawić w spokoju?


title: Jak mogę rozwijać się w php i html?

text: Uczę się php z internetu na codeacademy.com. Nauczyłem się również html i css, ale problem polega na tym, że nie wiem, jak mogę wtedy zbudować kompletną stronę internetową! Studiuję wszystko po swojej stronie. Ale jak zebrać całą moją wiedzę, to bardzo trudne! jak kiedy powinienem użyć tego kodu php? Kiedy powinienem używać kodu html? Abym mógł stworzyć pełną stronę internetową.


title: języki statyczne czy języki dynamiczne?

text: Jaka jest dokładna granica między językiem statycznym a dynamicznym? Mam na myśli to, że powiedziano mi, że decydujące są następujące parametry: 1. Kompilacja lub interpretacja 2. Typowanie 3. Generowanie środowiska wykonawczego 4. Ocena dynamiczna Ale kiedy widzę te parametry, większość z nich (w dużym stopniu) mogę znaleźć w postaci statycznej języki takie jak późne wiązanie C++, odbicie w Javie i C#, typy void lub Object itp. Moje pytanie brzmi: * przy tak dużej dynamice w tych statycznych językach jest konieczne nauczenie się języków dynamicznych? * Znam C++, Javę i C#. Z drugiej strony znam PHP i Javascript. Mój nauczyciel zaleca mi naukę bardziej dynamicznych języków, takich jak Python i Ruby. Czy naprawdę jest to konieczne? * Jakie są preferencje handlowe między tymi językami? Dziękuję Ci.


title: Jak programista przyzwyczajony do języków statycznych radzi sobie z brakiem narzędzi JavaScript?

text: Przez większość swojej kariery programowałem prawie wyłącznie w językach skompilowanych, zwłaszcza w Javie. Jedną z moich ulubionych rzeczy w Javie jest to, jak bardzo możesz być produktywny i jak mało kodu musisz napisać, używając narzędzi takich jak Eclipse. Możesz: * Łatwo i automatycznie dokonać refaktoryzacji swoich metod i klas * Natychmiast wyświetlić wszystkie miejsca, w których wywoływana jest metoda lub używana jest stała (Open Call Hierarchy/Show References) * Statyczne pisanie oznacza, że możesz użyć uzupełniania kodu, aby wyświetlić wszystkie parametry/funkcje dostępne w obiekcie * Kliknij z klawiszem Control nazwę funkcji/członka/klasy, aby przejść od razu do jej definicji. Wszystkie te udogodnienia sprawiają, że czuję, że IDE jest moim najlepszym przyjacielem. Pisanie kodu Java, a zwłaszcza rozumienie programów innych ludzi, staje się znacznie łatwiejsze. Jednak coraz częściej jestem wzywany do korzystania z JavaScript, a moje dotychczasowe doświadczenia są dość negatywne. W szczególności: * Brak natychmiastowego sposobu znalezienia punktu wejścia funkcji (innego niż wyszukiwanie zwykłego tekstu, które może następnie skutkować kolejnymi wyszukiwaniami metod dalej w hierarchii wywołań, po dwóch lub trzech z których zapomniałeś, gdzie zacząłeś ) * Parametry są przekazywane do funkcji, bez możliwości sprawdzenia, jakie właściwości i funkcje są dostępne dla tego parametru (poza faktycznym uruchomieniem programu, nawigacją do punktu, w którym funkcja jest wywoływana, i używaniem console.logs do wyprowadzania wszystkich dostępne właściwości) * Częste użycie funkcji anonimowych jako wywołań zwrotnych, co często prowadzi do spaghetti mylących ścieżek kodu, po których nie można szybko nawigować. * Oczywiście, JSLint wyłapuje pewne błędy przed uruchomieniem, ale nawet to nie jest tak przydatne, jak posiadanie czerwonych falistych linii pod kodem bezpośrednio w przeglądarce. Skutek jest taki, że przez cały czas musisz mieć cały program w głowie. To znacznie zwiększa obciążenie poznawcze przy pisaniu złożonych programów. A wszystkie te dodatkowe rzeczy, którymi muszę się martwić, pozostawiają w moim mózgu mniej miejsca na rzeczywistą kreatywność i rozwiązywanie problemów. Jasne, szybciej jest po prostu połączyć obiekt, niż pisać całą formalną definicję klasy. Ale chociaż programy mogą być nieco łatwiejsze i szybsze w pisaniu, z mojego doświadczenia wynika, że są one znacznie trudniejsze do odczytania i debugowania. Moje pytanie brzmi, jak inni programiści radzą sobie z tymi problemami? JavaScript wyraźnie zyskuje na popularności, a blogi, które czytam, opowiadają o tym, jak produktywni są z nim ludzie, zamiast desperacko próbować znaleźć rozwiązania tych problemów. GWT pozwala zamiast tego pisać kod dla środowiska JavaScript w Javie, ale nie wydaje się być tak powszechnie używany, jak bym się spodziewał; wydaje się, że ludzie wolą JavaScript dla złożonych programów. czego mi brakuje?


title: Dlaczego monada używa słowa „powrót” lub „jednostka” zamiast „podnoszenia”?

text: To po części prawdziwa ciekawość, a po części sprawdzenie mojego zrozumienia. Prawdopodobnie nie rozumiem sedna. W Haskell, dlaczego monada używa operacji zwanych „return” lub „unit” do opisania wkładania typu do kontenera — podnoszenia go do przestrzeni monadycznej? Bardziej intuicyjne wydaje się nazwanie operacji „windą”. Obecnie w moim (prawdopodobnie niepoprawnym) porcie monad do własnego projektu używam (pseudokod): > MyThing. **lift** (x).bind(f)... zamiast > MyThing. **unit** (x).bind(f)... ponieważ bardziej intuicyjne jest dla mnie myślenie o podniesieniu x do przestrzeni monadycznej. Czy to jest błędne? Ciągle się palę, że nie myślę wystarczająco abstrakcyjnie i podejrzewam, że to znowu.


title: Pozwolić użytkownikom na samodzielne zebranie wymagań lub pokierować nimi?

text: Jestem pewien, że wszyscy doświadczyli czegoś takiego. Idziesz na spotkanie z klientem, który ma projekt. Nie mają na myśli żadnych/mało wymagań i niejasne rozumieją, czego chcą/potrzebują. W tym momencie wydaje się, że są dwie możliwości: 1) Powiedz użytkownikom: „Ok, więc nie mogę zbudować dla ciebie czegoś, jeśli nie potrafisz jeszcze tego opisać. Dlaczego nie spotkamy się za kilka tygodni, kiedy wiesz, czego chcesz”. 2) Spotkaj się kilka razy z użytkownikami i pomóż im dowiedzieć się, czego chcą, prowadząc ich przez starą dobrą metodę Sokratejska. „Czy musisz śledzić X?”, „A może Y?”, „Czy potrzebujesz funkcjonalności Z?” Przy pierwszej opcji nie utkniesz, wykonując czyjąś pracę lub zdobywając moce psychiczne, jednak użytkownicy mogą nigdy nie przedstawić Ci spójnej specyfikacji lub mogą trwać wiecznie, gdy termin będzie się zbliżał. W przypadku drugiej opcji tracisz mnóstwo czasu na zostanie analitykiem biznesowym i musisz wepchnąć do głowy mnóstwo wiedzy biznesowej, której prawdopodobnie nigdy więcej nie użyjesz, ale znacznie bardziej prawdopodobne jest, że wyjdziesz ze specyfikacją, która ma sens. Dla mnie jest to jeden z najtrudniejszych aspektów rozwoju i mam wrażenie, że nie jestem w tym osamotniony. Z Twojego doświadczenia wynika, że która z tych opcji działa lepiej?


title: Bezwzględne stwierdzenia w IT, które są błędne

text: Ostatnio dyskutowałem o absolutnym stwierdzeniu: „Optymalizacja oprogramowania kosztuje więcej czasu na programowanie niż rzucanie sprzętu na problem”. Ogólna myśl (z którą się zgadzam) jest taka, że jako stwierdzenie bezwzględne jest to błędne. Istnieje zbyt wiele zmiennych, aby kiedykolwiek uogólniać w taki sposób. **Jakie inne stwierdzenia dotyczące oprogramowania/programowania po prostu nie działają jako absolut i dlaczego?**


title: Jak odbywa się część „wkładu w projekt open source”?

text: Uwaga: to pytanie dotyczy ogólnego przypadku... Jak zwykle jest. OK, więc mogę pobrać kod i bawić się nim, ale w jaki sposób moje zmiany oficjalnie wprowadzają go do projektu? Kto decyduje, jakie zmiany wprowadzają go do projektu iw jaki sposób? Czy często jest lista wymaganych zmian/dodatków? A jeśli mam fajny pomysł, którego tam nie ma? Jak uzyskać zatwierdzenie? A co, jeśli dwie osoby zaimplementują tę samą funkcję. Kto wybiera, które wdrożenie włącza się do projektu? Zasadniczo, jak całość jest zarządzana (w ogólnym przypadku)?


title: Mentalność i kariera Pracownik vs Wykonawca

text: Próbuję wypracować coś, co nie jest całkowicie objęte żadnym z innych wątków „wykonawca a pracownik”. W skrócie: Czy istnieje naturalna (być może nawet wrodzona i wrodzona) tendencja, by ludzie byli przeznaczeni dla jednego lub drugiego? Trochę tła: w ciągu ostatnich kilku lat doznałem poważnego wypalenia iw tym roku biorę urlop, aby przemyśleć to wszystko. Z całą refleksją coraz bardziej dochodzę do wniosku, że po prostu nie nadaję się na stałe, płatne życie. Zasadniczo myślę, że po prostu nie mam „mentalności pracownika”. Bez względu na to, jak dobra jest praca, po prostu wydaje mi się, że mam jakąś instynktowną, głęboko zakorzenioną potrzebę poruszania się i nie przywiązywania do tej samej scenerii. Jestem świetny w pierwszym roku lub dwóch, kiedy wszystko jest świeże, ale potem zaczynam czuć się naprawdę nudno i nieprzyjemnie, gdy utknąłem w tej samej rutynie, patrzeniu na tę samą bazę kodu itp., bez względu na to, jak dobry jest praca wydaje się na papierze. Większość ludzi wydaje się popadać w rytm, w którym stabilność rekompensuje wszelką „pogardę dla znajomości” lub nudę, ale dla mnie jest prawie odwrotnie. Ta odpowiedź na jedno z moich innych pytań (szeroko związane z tym tematem) naprawdę zwróciła moją uwagę: wydaje mi się, że w zasadzie mogę być kimś, kogo nazywają typem „łowcy”, rodzajem przypadku „zwolnionego tempa ADHD”. Świetnie koncentruję się na rzeczach, które naprawdę mnie interesują i nie boję się ciężkiej pracy. Ale musi mieć początek, postęp i koniec – w krótkim lub średnim terminie. Typowe płatne środowisko, które w tworzeniu oprogramowania ogólnie oznacza otwarty „tryb konserwacji”, bardzo szybko wpada mi do głowy, po pierwszym roku lub dwóch w nowej pracy. Zaczynam tracić motywację i koncentrację, aż w końcu popadam w wypalenie. Więc zasadniczo pytam - czy uważasz, że ta teoria farmera kontra myśliwy jest prawdziwa? Niekoniecznie w formalnym klinicznym sensie psychiatrycznym, ale tylko z twoich subiektywnych doświadczeń? Szczególnie chciałbym usłyszeć od wykonawców lub ludzi, którzy zrobili jedno i drugie. Czy robisz to po prostu dlatego, że okazja jest dobra i możesz wykonywać tę samą pracę na stałe, wszystko inne jest takie samo. A może masz to uczucie/mentalność jak ja – że bycie przywiązanym do tej samej scenerii wysysałoby twoją duszę? **Pytanie pokrewne** : Czy ludzie na ogół trzymają się jednego czy drugiego? A może robią jedno i drugie? Wydaje mi się, że większość ludzi przez większość swojej kariery zawodowej jest albo pracownikami, albo wykonawcami/konsultantami, i że nakładanie się, którzy robią jedno i drugie, jest dość małe. Nie mogę znaleźć żadnych danych na poparcie tego, to tylko wrażenie, które mam – i uważam to za bardzo ciekawe – ponieważ wydaje się wspierać ten pomysł, że ludzie po prostu naturalnie / wewnętrznie wydają się mieć tendencję do świecenia jeden lub drugi „model” pracy. **EDYTUJ** : Dzięki za odpowiedzi. Myślę, że to prawda, że tym, co mnie wypala, jest poczucie niezadowolenia z pracy dla kogoś innego w typowym środowisku biznesowym „dowodzenia i kontroli”. Wszystkie prace, jakie kiedykolwiek miałem, to stałe koncerty, które w zasadzie pasują do tego wzorca - deweloperzy traktowani jak pracownicy fabryki (niektóre miejsca gorsze od innych, ale zawsze w gruncie rzeczy prawdziwe) - np. . robienie tego, co ci każą, bez większej autonomii i samorealizacji. To powiedziawszy, myślę, że nadal będę szukał kontraktów, aby zobaczyć, jak to działa dla mnie w porównaniu ze stałymi koncertami. To prawdopodobnie nie jest idealne, ale myślę, że niezależność przynajmniej utrzymałaby rzeczy interesujące - minęło dużo czasu w tej samej koleinie, zanim dotarłem do tego punktu, w którym wypaliłem się i stałem się zbyt dysfunkcyjny, by w ogóle pracować. Ciągły ruch boczny może przynajmniej utrzymać go pod kontrolą.


title: najlepsze praktyki rozwiązywania pytań dotyczących projektowania zorientowanego obiektowo podczas wywiadów technicznych

text: po otrzymaniu pytania dotyczącego projektowania zorientowanego obiektowo podczas rozmowy technicznej - na przykład zaprojektuj program wynajmu samochodu - jakie byłyby ogólne kroki (tzw. najlepsze praktyki), które osoba przeprowadzająca wywiad powinna wykonać, aby rozwiązać problem? jakie byłyby możliwe pułapki?


title: Praca z Windows Funkcje odzyskiwania Shift+Usuń pliki

text: Tworzę oprogramowanie do odzyskiwania plików Shift+Delete z systemu Windows. Wiem, że po usunięciu plików tylko łącza do nich są odcinane przez system Windows, ale rzeczywisty plik pozostaje w tym samym miejscu, więc ich odzyskanie wymagałoby ode mnie przeszukania dysku twardego, a konkretnie konkretnego dysku. Zainstalowałem kod na starym komputerze z Windows Millennium Edition i działa. Jak mogę sprawić, by działał w systemie Windows 7? Czy istnieją jakieś API lub odniesienia do tego, które będą pomocne?


title: Używanie PDO do zarządzania danymi

text: To pytanie jest bardziej pytaniem związanym z projektowaniem niż pytaniem dotyczącym kodu. Jestem nowym użytkownikiem PHP i planuję używać PDO jako warstwy dostępu do danych. Powiedzmy na przykład, że mam klasę o nazwie CITY. Teraz, jeśli muszę stworzyć instancję tej klasy, jaka jest najlepsza technika. * Powinna posiadać klasę dostępu singleton DB, która służy do zapisu i odczytu danych z warstwy db. * LUB powinienem delegować go do pojedynczego obiektu klasy. Na przykład, jeśli wywołam city.save() (miasto jest klasą), to klasa miasta obsłuży zapisanie danych obiektu miasta w bazie danych. Wybacz moją ignorancję, ale mam tło w Javie i dlatego próbuję zrozumieć, jaka jest najlepsza zasada projektowania zarządzania danymi podczas korzystania z php.


title: Maksymalna liczba elementów zmapowanych do tej samej lokalizacji w hashmapie

text: Mam pytanie dotyczące hashmap. Jeśli masz ten hashmap z m slotami i musisz zmapować do niego n elementów, a n > m. Na pewno będą kolizje. Ale zakładając, że istnieje proste, jednolite założenie haszowania, oznacza to, że maksymalna liczba kolizji w dowolnym miejscu jest współczynnikiem obciążenia, prawda? Współczynnik obciążenia wynosi n/m. Ale współczynnik obciążenia prawdopodobnie będzie ułamkiem dziesiętnym, czy to oznacza, że jest to pułap n/m? Więc jeśli n=6 i m=5, to współczynnik obciążenia wynosi 1,2, a sufit wynosi 2, co oznacza, że maksymalna liczba kolizji w jednym miejscu wynosi 2. Czy to prawda?


title: Skrypt sprawdzający minimalne wymagania dla aplikacji

text: Czy istnieje dobrze znany, zaufany skrypt open source, którego moglibyśmy użyć jako punktu wyjścia do zbudowania internetowego narzędzia analizującego dla naszej aplikacji, które byłoby podobne pod względem funkcjonalności do narzędzia sprawdzania dodatków Firefox? Na przykład sprawdź określoną wersję Javy, rozdzielczość ekranu, wersje przeglądarki itp. Dzięki, Kerrin


title: Jakiego frameworka powinienem się nauczyć, jeśli chcę tworzyć strony internetowe w Javie? Jakakolwiek rada?

text: Cóż, nie mam dużego doświadczenia w programowaniu. Znam C, C++, trochę C#, trochę vb i trochę podstawowej javy i SQL, to wszystko. Nie mam żadnego doświadczenia zawodowego w tworzeniu stron internetowych, więc potraktuj mnie jako zupełnie nowego startera. Chciałbym zajmować się tworzeniem stron internetowych i mam nadzieję, że po ukończeniu mojego obecnego programu akademickiego z łatwością znajdę pracę w tej dziedzinie. Zacząłem więc od frameworka asp.net MVC. Ale przynajmniej wydaje mi się, że wiele stanowisk wymaga programowania w javie w tworzeniu stron internetowych, więc postanawiam uczyć się javy w tym samym czasie, ucząc się .net. Cóż, istnieje wiele frameworków. Mój przyjaciel sugeruje Hibernate, niektórzy twierdzą, że play framework jest dobry dla małych aplikacji, a niektórzy polecają spring, co wydaje się być bardzo trudne. Chcę zacząć od frameworka, który jest stosunkowo łatwy do opanowania i popularny na rynku pracy. Więc od czego powinienem zacząć? A poza frameworkiem, czego jeszcze powinienem się nauczyć? Poza tym, który z nich jest bardziej popularny pod względem programowania WWW, .net czy Java? Wygląda na to, że java jest wymagana przez większość pracodawców, a nie znalazłem wielu pozycji wskazujących na doświadczenie .net. Który z nich jest w rzeczywistości bardziej popularny i co z trendem w przyszłości?


title: Czy marnuję czas na budowanie strony eCommerce?

text: Widzę wiele firm, takich jak ekmpowershop, volusion, e-sklepy, prostores itd., które dają klientom możliwość budowania i dostosowywania ich witryny (w szczegółach). Z drugiej strony widzę firmy takie jak RedTechnology (http://www.redtechnology.com/), które budują aplikacje eCommerce dla klientów. Rzuciłem okiem na Jak zdecydować między wykorzystaniem istniejącego rozwiązania eCommerce a budowaniem własnego? również. Masz również duże firmy, takie jak Amazon, NextPlc, które nigdy nie będą korzystać z powyższej usługi. Chciałbym być samozatrudnionym, być może przy opracowywaniu aplikacji eCommerce, ale jestem trochę niechętny, ponieważ widzę kilka komentarzy „Podobnie jak w przypadku większości witryn Stack Exchange rekomendacje dotyczące zakupów są uważane za nie na temat, ponieważ tak szybko stają się nieaktualne”. Nie jestem też pewien, jaka jest tam konkurencja. Czy zatem marnowałbym swój czas na budowanie aplikacji eCommerce dla klientów? Wierzę, że będzie to kosztować więcej z punktu widzenia klienta i ograniczeń czasowych. Z kolei klienci będą bardziej przychylni takim firmom jak ekmpowershop, volusion, eshops i prostores? Na koniec wracając do ekmpowershop, volusion, eshopów i prostores. Jak zbudować takie aplikacje? Jestem ze strony .NET.


title: Co sprawia, że C jest tak popularne w dobie OOP?

text: Dużo koduję zarówno w C, jak i C++, ale nie spodziewałem się, że C będzie drugim najpopularniejszym językiem, nieco za Javą. Indeks społeczności programistów TIOBE Jestem ciekaw, dlaczego w dobie OOP C jest wciąż tak popularne? Zauważ, że 4 z 5 najpopularniejszych języków programowania to „nowoczesne”, zorientowane obiektowo języki. Zgadzam się, że możesz do pewnego stopnia używać OOP w C, ale jest to trochę bolesne i nieeleganckie (przynajmniej w porównaniu z C++, jak sądzę). Co sprawia, że C jest tak popularne? Czy to wydajność; bycie na niskim poziomie; zdecydowana większość bibliotek, które już istnieją, czy coś innego?


title: Czy podczas projektowania protokołu lepiej jest, aby metoda akceptowała pojedynczy obiekt określonego typu, czy tablicę?

text: Obecnie projektuję protokół do użytku wewnętrznego, więc nie robi to wielkiej różnicy w tym konkretnym przypadku, ale zastanawiam się: czy lepiej, aby metoda akceptowała pojedynczy obiekt określonego typu lub tablicę obiektów, z dokumentacją określającą typ, który będzie zawierał? Oczywiście tablica pozwala na większą elastyczność w wywoływaniu metody, ale określenie typu daje programiście większą jasność co do tego, co będzie robiła metoda. Na przykład mój protokół ma jedną (jak dotąd) metodę o nazwie recieveDroppedItems:. Musi akceptować jeden lub wiele NSURL, które wskazują pliki upuszczone na nadawcę. Z góry dziękuję za jakąkolwiek radę! :D


title: Co to jest sekwencyjne wykonywanie kodu?

text: Rozglądałem się po internecie i nie znalazłem jeszcze dobrej odpowiedzi. Jeśli ktoś mógłby być tak miły i dostarczyć próbkę kodu, bardzo bym to docenił. Przepraszam za prostotę pytania.


title: Przykłady przepływu pracy ciągłej integracji przy użyciu git

text: Czy ktoś może przedstawić ogólny zarys swojego przepływu pracy w git, który jest zgodny z ciągłą integracją. Np. Jak oddziałujesz? Czy szybko przewijasz commity do gałęzi master? Pracuję głównie z Railsami oraz JavaScriptem po stronie klienta i serwera. Jeśli ktoś może polecić solidną technologię CI, która jest z nimi zgodna, to byłoby świetnie. Przyjrzałem się Jenkinsowi, ale chciałbym sprawdzić inne dobre alternatywy. Aby nadać temu kontekst, planuję przejście od pracy jako pojedynczy programista do pracy w zespole. Chciałbym rozpocząć standaryzację mojego osobistego przepływu pracy, aby móc szybko wprowadzać nowych programistów.


title: Czy są badania na temat foo/bar/baz i jak hamują lub ułatwiają zrozumienie?

text: **Przedmowa** `foo`,`bar`,`baz` to natychmiast rozpoznawalne oznaczenia przykładu lub pseudokodu. Ich popularność wydaje się mocną wskazówką, że społeczność programistów akceptuje je jako dobry sposób na wskazanie, że autor prezentuje niespecyficzną implementację kodu. Jak pokazuje to q+a, są one klasyfikowane jako zmienne metasyntaktyczne. Choć historia tych słów wydaje się być zakorzeniona w ponad 50-letnim używaniu, nie mogę znaleźć żadnych zasobów badających ich skuteczność. **Pytanie** Zamiast brać za dobrą monetę, że ich wszechobecność jest dowodem skuteczności, zastanawiam się, czy istnieją **dowody** dotyczące wpływu na rozumienie językowe. Aby wyjaśnić, wiem, że `foo` jest rozumiane jako oznaczenie pseudokodu, ale mam na myśli zrozumienie tego, co oznacza pseudokod. **Dlaczego** Wielokrotnie ponownie czytałem FAQ i zanim zostanę oskarżony o gadatliwość, nie staram się wywoływać dyskusji, nie szukam osobistych anegdot, zadaję istotne pytanie dla całej społeczności programistów, choć jest to na granicy naszych obaw. Zdaję sobie sprawę, że może nie być nic publikowanego w tej dziedzinie, ale jeśli tak, dobrze byłoby wiedzieć w obu przypadkach.


title: Jako programista, czy kiedykolwiek publikowałeś artykuł naukowy?

text: Moja uczelnia uznaje jedynie prace naukowe za ważne osiągnięcia intelektualne. Chciałbym się dowiedzieć, ilu architektów oprogramowania, inżynierów oprogramowania, programistów i/lub programistów zadaje sobie trud publikowania swoich wyników. A może jako programista uważasz, że Twoja produkcja powinna mieć również wartość akademicką? (ups!) Myślę, że to są dwa pytania.


title: Jakie są dobre książki o inżynierii oprogramowania dla osób, które formalnie nie studiowały informatyki lub inżynierii oprogramowania?

text: Jestem absolwentem kierunku elektronika i telekomunikacja, ale pracuję w firmie programistycznej. Chcę kontynuować w tej dziedzinie i zdobywać w niej mistrzów. Czy możesz mi polecić jedne z najlepszych książek na temat inżynierii oprogramowania, które obejmują prawie wszystkie tematy inżynierii oprogramowania. Nie szukam książek o praktykach kodowania, takich jak Code Complete, Pragmatic Programmer, ale raczej ogólnych odniesień do inżynierii oprogramowania.


title: Co jest złego w wykonywaniu testów jednostkowych w porównaniu z konkretną implementacją, jeśli Twoje frameworki się nie zmienią?

text: Najpierw trochę tła: przebudowujemy nasz pakiet produktów, który został napisany 10 lat temu i spełnił swoje zadanie. Jedyną rzeczą, której nie możemy zmienić, jest schemat bazy danych, ponieważ mamy ponad 500 klientów korzystających z tego systemu. Nasz schemat bazy danych zawiera ponad 150+ tabel. Zdecydowaliśmy się na użycie Entity Framework 4,1 jako DAL i nadal oceniamy różne struktury do przechowywania naszej logiki biznesowej. Prowadzę śledztwo, aby wprowadzić testy jednostkowe, ale jestem również zdezorientowany, jak daleko muszę się posunąć z konfiguracją pełnego środowiska TDD. Jednym z aspektów konfigurowania testów jednostkowych jest dostanie się do implementacji Repozytorium, struktur jednostek pracy i mockingu itp. Oznacza to, że będą koszty i inwestycje związane z rozrostem kodu związanym z tymi wszystkimi frameworkami. Rozumiem, że niektóre z nich mogą być generowane automatycznie, ale jeśli chodzi o takie rzeczy, jak zachowania, będą one w większości napisane ręcznie. Żeby było jasne, nie kwestionuję znaczenia testowania jednostkowego twojego kodu. Po prostu nie jestem pewien, czy potrzebujemy wszystkich jego komponentów (takich jak repozytorium, mockowanie itp.), gdy jesteśmy dość pewni mechanizmu/frameworku przechowywania (SQL Server/Entity Framework). Cały ten nadmiar kodu z ogólnymi repozytoriami ma sens, gdy potrzebujesz ogólnych warstw z możliwością zmiany tego, kiedy tylko chcesz, ale w naszym przypadku jest to bardzo prawdopodobne, że jest to YAGNI. To, czego potrzebujemy, to więcej testów integracyjnych, w których możemy testować jednostkowo nasz kod z konkretnymi obiektami repozytorium i testować dane w bazie danych. W tym scenariuszu samo uruchomienie testu integracyjnego wydaje się w naszym przypadku bardziej korzystne. Jakieś myśli, jeśli coś mi tu brakuje?


title: Alternatywny sposób tworzenia dla ASP.NET do WebForms - Masz z tym problemy?

text:
Tak więc od jakiegoś czasu rozwijam się w ASP.NET WebForms, ale często denerwują mnie wszystkie narzuty (takie jak ViewState i cały generowany przez niego JavaScript) oraz sposób, w jaki WebForms przejmuje dużą część generowania HTML. Czasami chcę po prostu mieć pełną kontrolę nad znacznikami i tworzyć własny wydajny HTML, więc eksperymentowałem z tym, co lubię nazywać **HtmlForms**. Zasadniczo jest to używanie formularzy ASP.NET WebForms, ale bez znacznika formularza `runat="server"`. Bez tego tagu ASP.NET w ogóle nie dodaje niczego do strony. Z niektórych podstawowych testów wynika, że działa dobrze i nadal masz możliwość korzystania ze stron związanych z kodem i wielu kontrolek ASP.NET, takich jak wtórniki. Oczywiście bez postaci `runat="serwer"` wiele kontrolek nie będzie działać. Post w Enterprise Software Development zawiera listę kontrolek, które wymagają tagu. Z tej listy zobaczysz, że nie można użyć wszystkich elementów formularza, takich jak TextBoxes, DropDownLists, RadioButtons itp. Zamiast tego używasz normalnych kontrolek formularza HTML. Ale jak uzyskać dostęp do tych kontrolek HTML z kodu znajdującego się za nimi? Pobieranie wartości w odesłaniu zwrotnym jest łatwe, wystarczy użyć `Request.QueryString` lub `Request.Form`. Ale przekazywanie danych do kontrolki może być trochę kłopotliwe. Czy używasz kontrolki literału ASP.NET w polu wartości, czy używasz `<%= wartość %>` na stronie znaczników? Uważam, że najlepiej jest dodać `runat="server"` do moich kontrolek HTML, a następnie możesz uzyskać dostęp do kontrolki w kodzie w następujący sposób: `((HtmlInputText)txtName).Value = "blah"`; Oto przykład pokazujący, co można zrobić za pomocą pola tekstowego i listy rozwijanej: **Default.aspx** <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits=" NoForm.Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <title></title>   <form action="" method= "post"> Nazwa: <input id="txtName" name="txtName" runat="serwer" />
 Stan : <select id="ddlState" name="ddlState" runat="server"> <option value=""></option> </select>
 <input type="submit" value ="Prześlij" /> </form>   **Default.aspx.cs** przy użyciu systemu; za pomocą System.Web.UI.HtmlControls; za pomocą System.Web.UI.WebControls; namespace NoForm { public częściowa klasa Domyślnie: System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //Domyślne wartości string name = string.Empty; stan ciągu = ciąg.Pusty; if (Request.RequestType == "POST") { //Jeśli formularz został przesłany (odsyłanie zwrotne) name = Request.Form["txtName"]; stan = Request.Form["ddlState"]; //Walidacja formularzy po stronie serwera przejdzie tutaj //i akcje przetwarzania formularza i przekierowania } ((HtmlInputText)txtName).Value = name; ((HtmlSelect)ddlState).Items.Add(nowy ListItem("ACT")); ((HtmlSelect)ddlState).Items.Add(nowy ListItem("NSW")); ((HtmlSelect)ddlState).Items.Add(nowy ListItem("NT")); ((HtmlSelect)ddlState).Items.Add(nowy ListItem("QLD")); ((HtmlSelect)ddlState).Items.Add(nowy ListItem("SA")); ((HtmlSelect)ddlState).Items.Add(nowy ListItem("TAS")); ((HtmlSelect)ddlState).Items.Add(nowy ListItem("VIC")); ((HtmlSelect)ddlState).Items.Add(nowy ListItem("WA")); if (((HtmlSelect)ddlState).Items.FindByValue(stan) != null) ((HtmlSelect)ddlState).Value = stan; } } } Jak widać, masz podobną funkcjonalność do kontrolek serwera ASP.NET, ale większą kontrolę nad końcowym znacznikiem i mniej narzutów, takich jak ViewState i wszystkie dodatki JavaScript ASP.NET. Co ciekawe, możesz również użyć HttpPostedFile do obsługi przesyłania plików za pomocą własnej kontrolki input type="file" (i niezbędnego formularza enctype="multipart/form-data"). Więc moje pytanie brzmi: czy widzisz jakieś problemy z tą metodą i jakieś przemyślenia na temat jej przydatności? Dalsze szczegóły i testy mam na moim blogu.


title: Zamieszanie związane z sigwaitem w systemie wieloprocesowym

text: Mam trudności ze zrozumieniem IPC w systemie wieloprocesowym. Mam ten system, w którym są trzy procesy potomne, które wysyłają dwa rodzaje sygnałów do swojej grupy procesów. Istnieją cztery typy procesów obsługi sygnału odpowiedzialne za określony typ sygnału. Istnieje proces monitorowania, który czeka na oba sygnały, a następnie odpowiednio je przetwarza. Kiedy uruchamiam ten program przez jakiś czas, proces monitorowania nie odbiera sygnału, jak również proces obsługi sygnału. Widziałem w dzienniku, że sygnał jest tylko generowany, ale w ogóle nie jest obsługiwany. Mój kod jest podany poniżej #include <cstdlib> #include <iostream> #include <iomanip> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include <sys/ time.h> #include <signal.h> #include <unistd.h> #include <fcntl.h> #include <cstdio> #include <stdlib.h> #include <stdio.h> #include <pthread.h > używając przestrzeni nazw std; double timestamp() { struct timeval tp; gettimeofday(&tp, NULL); powrót (podwójny)tp.tv_sec + tp.tv_usec / 1000000.; } double getinterval() { srand(time(NULL)); int r = rand()%10 + 1; podwójne s = (podwójne)r/100; } liczba int; int liczba_1; int liczba_2; podwójny czas_1[10]; podwójny czas_2[10]; pid_t nadawcy[1]; programy obsługi pid_t[4]; reporter pid_t; void catcher(int sig) { printf("Łapacz sygnału wywołany dla %d",sig); } int main(int argc, char *argv[]) { void signal_catcher_int(int); pid_t pid,w; stan int; if(sygnał(SIGUSR1, SIG_IGN) == SIG_ERR) { perror("1"); powrót 1; } if(signal(SIGUSR2 ,SIG_IGN) == SIG_ERR) { perror("2"); powrót 2; } if(signal(SIGINT,signal_catcher_int) == SIG_ERR) { perror("3"); powrót 2; } //Rejestracja obsługi sygnału for(int i=0; i<4; i++) { if((pid = fork()) == 0) { cout << i << endl; //struktura sigact sigact; sigset_t sigset; wewn sig; int wynik = 0; sigemptyset(&sigset); if(i%2 == 0) { if(sygnał(SIGUSR2, SIG_IGN) == SIG_ERR) { perror("2"); powrót 2; } sigaddset(&sigset, SIGUSR1); sigprocmask(SIG_BLOCK, &sigset, NULL); } else { if(signal(SIGUSR1, SIG_IGN) == SIG_ERR) { perror("2"); powrót 2; } sigaddset(&sigset, SIGUSR2); sigprocmask(SIG_BLOCK, &sigset, NULL); } while(true) { int wynik = sigwait(&sigset, &sig); if(result == 0) { cout << "Złapany sygnał to " << sig << endl; } } wyjście(0); } else { cout << "Zarejestruj program obsługi" << pid << endl; handlery[i] = pid; } } //Rejestracja procesu monitorowania if((pid = fork()) == 0) { sigset_t sigset; wewn sig; int wynik = 0; sigemptyset(&sigset); sigaddset(&sigset, SIGUSR1); sigaddset(&sigset, SIGUSR2); sigprocmask(SIG_BLOCK, &sigset, NULL); while(true) { int wynik = sigwait(&sigset, &sig); if(result == 0) { cout << "Monitorowany sygnał to " << sig << endl; } else { cout << "błąd" << endl; } } } else { reporter = pid; } sen(3); //Rejestracja generatora sygnału for(int i=0; i<1; i++) { if((pid = fork()) == 0) { if(signal(SIGUSR1, SIG_IGN) == SIG_ERR) { perror(" 1"); powrót 1; } if(sygnał(SIGUSR2, SIG_IGN) == SIG_ERR) { perror("2"); powrót 2; } srand(czas(0)); while(true) { volatile int id_sygnału = rand()%2 + 1; cout << "Generowanie sygnału" << signal_id << endl; if(signal_id == 1) { killpg(getpgid(getpid()), SIGUSR1); } else { killpg(getpgid(getpid()), SIGUSR2); } int r = rand()%10 + 1; podwójne s = (podwójne)r/100; sen(y); } wyjście(0); } else { cout << "Zarejestrowany nadawca" << pid << endl; nadawcy[i] = pid; } } while(w = czekaj(&status)) { cout << "Czekaj na PID" << w << endl; } } void signal_catcher_int(int the_sig) { //cout << "Obsługa sygnału Ctrl C" << endl; for(int i=0; i<1; i++) { kill(senders[i],SIGKILL); } for(int i=0; i<4; i++) { kill(handlers[i],SIGKILL); } kill(reporter,SIGKILL); wyjście(3); }      Jakieś sugestie? Oto próbka danych wyjściowych Na początku Zarejestrowano procedurę obsługi 9544 Zarejestrowano procedurę obsługi 9545 1 Zarejestrowano procedurę obsługi 9546 Zarejestrowano procedurę obsługi 9547 2 3 0 Zarejestrowano nadawcę 9550 Generowanie sygnału 1 Przechwycony sygnał 10 Monitorowany sygnał 10 Złapany sygnał to 10 Generowanie sygnału 1 Złapany sygnał to 10 Złapany sygnał to 10 Złapany sygnał to 10 Generowanie sygnału 1 Złapany sygnał to 10 Złapany sygnał to 10 Złapany sygnał to 10 Generowanie sygnału 1 Złapany sygnał to 10 Sygnał monitorowany to 10 Złapany sygnał to 10 Generowanie sygnału 2 Złapany sygnał to 12 Złapany sygnał to 12 Sygnał monitorowany to 12 Generowanie sygnału 2 Generowanie sygnału 2 Złapany sygnał 12 Złapany sygnał 12 Generowanie sygnał 1 Złapany sygnał to 12 Moni tored sygnału to 10 Monitorowany sygnał to 12 Generowanie sygnału 1 Generowanie sygnału 2 Przechwycony sygnał 12 Generowanie sygnału 1 Generowanie sygnału 2 10 Monitorowany sygnał 10 Przechwycony sygnał 12 Generowanie sygnału 1 Przechwycony sygnał 12 Monitorowany sygnał to GenZłapany sygnał to TheZłapany sygnał to 10 Generowanie sygnału 2 Później Monitorowany sygnał to GenMonitorowany sygnał to 10 Generowanie sygnału 1 Generowanie sygnału 2 Złapany sygnał to 10 Złapany sygnał to 10 Złapany sygnał to 10 10 Przechwycony sygnał 12 Generowanie sygnału 1 Generowanie sygnału 2 Generowanie sygnału 1 Generowanie sygnału 1 Generowanie sygnału 2 Generowanie sygnału 2 Generowanie sygnału 2 Generowanie sygnału 2 Generowanie sygnału 2 Generowanie sygnału 1 Przechwycony sygnał jest 12 Złapany sygnał i s 10 Przechwycony sygnał 10 Generowanie sygnału 2 Generowanie sygnału 1 Generowanie sygnału 1 Generowanie sygnału 2 Generowanie sygnału 1 Generowanie sygnału 2 Generowanie sygnału 2 Generowanie sygnału 2 Generowanie sygnału 1 Generowanie sygnału 2 Generowanie sygnału 1 Generowanie sygnału 2 Generowanie sygnału 2 Przechwycony sygnał to 10 Generowanie sygnału 2 Generowanie sygnału 1 Generowanie sygnału 1 Jak widać na początku, sygnał został wygenerowany i obsłużony zarówno przez moje programy obsługi sygnału, jak i procesy monitorowania. Ale później sygnał był generowany bardzo dużo, ale nie do końca były to procesy w tej samej wielkości co poprzednio. Co więcej, widziałem bardzo mniej przetwarzania sygnału przez proces monitorowania. Czy ktoś może podać jakieś spostrzeżenia. Co się dzieje?


title: Wewnętrzne działanie funkcji IF() — dlaczego wyrażenia nie są oceniane?

text: # Krótka wersja W jaki sposób funkcja **`IF()`** powoduje, że przekazane wyrażenia NIE są oceniane przed przekazaniem ich jako parametrów? # Wersja szczegółowa Jestem częścią komitetu normalizacyjnego i rozpoczęła się dyskusja, która generalnie próbuje **zakazać** używania funkcji **`IIF()`**. Ogólny konsensus jest taki, że jeśli chcesz wykonać przypisanie krótkiej linii, to **`IF()`** jest w porządku. A jeśli z jakiegoś powodu chcesz obliczyć dwa wyrażenia, nie próbuj robić tego w jednym wierszu, jawnie i celowo oceniaj wyrażenia w osobnych wierszach, a następnie wykonaj wywołanie **`IF()`** z wynikami w parametrach **`If True`** i **`If Else`**. Zapewniam, że przed wkroczeniem **`Function(param1, expression)`** wszystkie wyrażenia są oceniane. Następnie ich oszacowana wartość jest przekazywana jako parametr. Biorąc to pod uwagę, ma to sens: Sub Main() Dim intTest As Integer = 0 Dim blnResult As Boolean = IIf(2 = 2, Integer.TryParse("3", intTest), Integer.TryParse("4", intTest) ) 'intTest = 4 End Sub * Zgodnie z oczekiwaniami, **`blnResult`** jest **`True`**. * Ponieważ warunkiem funkcji **`IIF()`** jest **`True`** , wynikiem przypisania jest wartość wyrażenia w parametrze **`"If True"`**. * Ale **BOTH** wyrażenia **`If True` ORAZ `If Else`** zostały ocenione (w kolejności pisemnej) jeszcze przed przejściem do funkcji **`IIF()`**, więc **` intTest`** stał się **`4`**. * Jeśli o mnie chodzi, jest to programowo oczekiwane, ale nie pożądane rezultaty. Na odwrocie monety mamy to: Sub Main() Dim intTest As Integer = 0 Dim blnResult As Boolean = If(2 = 2, Integer.TryParse("3", intTest), Integer.TryParse("4 ", intTest)) 'intTest = 3 End Sub Jak odwrotność poprzedniego wydania, mamy teraz: * Zgodnie z oczekiwaniami, **`blnResult`** jest True. * Ponieważ warunkiem funkcji **`IF()`** jest **`True`** , wynikiem przypisania jest wartość wyrażenia w parametrze **`"If True"`**. * Ale **TYLKO** **`If True`** (w tym przypadku) jest oceniane, więc **`intTest`** stał się **`3`**. * Jeśli o mnie chodzi, to są wyniki pożądane, ale nie oczekiwane programowo. Chciałbym zobaczyć funkcję niestandardową, która robi to samo co **`IF()`**.


title: Strategia normalizacji i interpretacji danych lokalizacyjnych

text: Trochę utknąłem z problemem związanym z normalizacją danych wejściowych lokalizacji od użytkownika (pochodzących od strony trzeciej). ## Cel Aby logicznie podzielić i zinterpretować pole wprowadzania lokalizacji użytkownika i zrozumieć, czy zawiera jedną lub wiele lokalizacji, z jednego lub więcej krajów. * * * ## Problem Typ danych, które otrzymuję z danych wejściowych użytkownika, jest bałaganiarski i nie ma logicznej struktury ani spójności, jak pokazano poniżej. Codzienne geokody są ograniczone z Google, więc muszę ich używać oszczędnie. Chcę efektywnie przetwarzać dane o lokalizacji od użytkownika i wysyłać prawidłowe zapytanie geokodujące do Google, aby uzyskać właściwy wynik. * * * ## Źródła danych Dane są irracjonalne i nieregularne i mogą być dostarczane w niektórych z następujących formatów: Londyn, Wielka Brytania Format alternatywny Anglia, Londyn Kolejność odwrócona Londyn Lokalizacja ogólna Londyn Sheffield, Newcastle Trzy oddzielne lokalizacje w tym samym kraju bez spójnych przecinków Londyn, Sprzedaż, Asystent sprzedaży Wstawiono zawartość niezwiązaną z lokalizacją Londyn [NIE OKREŚLONO] Wstawiono inną zawartość niezwiązaną z lokalizacją za pomocą znaków spoza alfabetu, które nie są oddzielane przecinkami Londyn, Waszyngton, Brazylia, Anglia Mieszanka niepowiązanych lokalizacji, w tym miasta i kraje Waszyngton, Londyn, Kent Mix miejsc w jednym kraju * * * ## Proponowane rozwiązanie **Krok 1: Podział danych** * Umieść każde oddzielone słowo w tablicy **Krok 2: Oczyść dane** * Usuń nieprawidłowe znaki, przecinki, dodatkowe spacje s itp * Usuń wszystkie słowa z pliku stoplist.txt (np. praca, sprzedaż, w, w, itp.) **Krok 3: Określ, czy jest poprawna lokalizacja** * Sprawdź, czy każdy element tablicy był wcześniej geokodowany, jeśli nie, geokoduj i przechowuj * Rejestruj słowa, które zostały geokodowane bez rezultatu – dodaj je do pliku stoplist, aby uniknąć bezsensownych geokodów **Krok 4: Wartości powiązań** * Porównaj, jeśli wartość współrzędnych miejsc mieści się w zakresie innego elementu tablicy. Jeśli tak, wiemy, że są rodzicami i traktujemy je jako jedną pozycję * Londyn + Anglia -> Współrzędne Londynu mieszczą się w zakresie współrzędnych Anglii, więc wiemy, że jest to pojedyncza lokalizacja, a nie dwie oddzielne. * * * ## Problemy **Problem 1: Kent, Londyn, Sussex** Technicznie rzecz biorąc, w USA jest Kent i jest to pierwszy taki, który pojawia się po wpisaniu go w Google Maps. Jednak ponieważ wszystkie wyniki znajdują się w Anglii, jest bardzo mało prawdopodobne, aby pożądanym wynikiem był wynik z USA **Problem 2: Anglia, Waszyngton, Nowy Jork** W Anglii jest Waszyngton, ale wydaje się, że nie jest to ten jedyny w Anglii * * * ## Pytanie Czy zaproponowane przeze mnie rozwiązanie polegające na rozbiciu słów na oddzielne jednostki i ponownym połączeniu ich jest najbardziej logicznym rozwiązaniem? Każda pomoc lub rada byłyby bardzo mile widziane, wiem, że nie jest to łatwy problem.


title: Czy to dobry przypadek użycia?

text: Studiowałem analizę obiektową i aby zacząć to robić w praktyce, postanowiłem przede wszystkim zbudować własny system zarządzania, aby mieć dane moich klientów i tak dalej. Próba zebrania wymagań po raz pierwszy i napisania przypadków użycia po raz pierwszy doprowadziła mnie do wątpliwości. Chcę tutaj zapytać o pewne wątpliwości dotyczące przypadków użycia. Jednym z wymagań, o którym myślałem, było „zarządzanie klientami”. Z tego wymagania uzyskałem kilka przypadków użycia: 1. Zarejestruj nową osobę prawną jako klient; 2. Zarejestruj nową osobę fizyczną jako klient; 3. Aktualizuj i poprawiaj dane klienta; 4. Usuń klienta z systemu; 5. Przeczytaj podsumowanie klienta; Teraz mam wielkie wątpliwości co do tego wszystkiego. Po pierwsze, czy to prawda: weź jedno wymaganie i wyprowadź z niego wiele różnych przypadków użycia? A może powinien to być tylko _jeden_ przypadek użycia „Zarządzaj klientami” zawierający wszystko? Po drugie, podam przykład tego, co zrobiłem. Postanawiam zacząć od pierwszego. Napisałem więc następujący przypadek użycia: **Tytuł:** Zarejestruj nową osobę prawną jako klient; **Aktor:** Użytkownik; **Scenariusz:** Użytkownik decyduje się zarejestrować nową firmę jako klient. Użytkownik informuje dane firmy, a system weryfikuje poinformowane dane. Użytkownik jest następnie proszony o podanie danych osoby odpowiedzialnej za firmę, a system weryfikuje poinformowane dane. Użytkownik zostaje następnie przeniesiony do listy wszystkich klientów będących osobami prawnymi. Teraz jestem prawie pewien, że nie robię tego dobrze. Po pierwsze, wydaje się to proste, to tak, jakbyśmy powiedzieli „no cóż, użytkownik idzie i rejestruje dane”. Po drugie, wszystkie inne przypadki użycia byłyby dokładnie takie, więc nie widzę, jak to mi pomoże. Po trzecie, z tego przypadku użycia mogłem uzyskać tylko trzy możliwe obiekty „osoba prawna klient” i „odpowiedzialny za firmę”, więc naprawdę uważam, że to nie wystarczy. Poza tym zazwyczaj jest wiele wymagań typu „zarządzaj klientami”, „zarządzaj pracownikami” czy „zarządzaj dostawcami” i na pierwszy rzut oka wydaje się, że takie będą zawsze. Czy to jest poprawne? Takie wymagania zawsze kończą się tego rodzaju przypadkami użycia, które są tak proste? Czy robię to dobrze? Czy jest coś nie tak z przypadkami użycia, które odkryłem i sposobem, w jaki napisałem ten konkretny przypadek użycia? Jak pracujemy z tego rodzaju przypadkami użycia, które są tak proste, że scenariusz przypomina po prostu ponowne określenie celu przypadku użycia? Wiem, że jest tam wiele pytań, ale każda pomoc jest mile widziana. Zaczynam teraz pracować z tego rodzaju rzeczami i nie jestem pewien, czy robię wszystko dobrze. Z góry bardzo dziękuję!


title: Czy powinienem wystrzegać się podpisywania umowy o zachowaniu poufności z kimś, kogo właśnie poznałem?

text: **Aktualizacja z 22.12.12** na wypadek, gdybyś zastanawiał się, dlaczego nie przyjąłem odpowiedzi: Prawie wszystkie odpowiedzi wskazują, że praca dla niego byłaby głupia, ale żadna z nich nie wydawała się odpowiedzieć na pytanie. **tl;dr** : Jakiś facet, którego właśnie spotkałem, mówi, że chce, żebym dołączył do jego firmy. Zanim pokaże mi, co robią, chce, żebym podpisał umowę o zachowaniu poufności. Czy to dziwne? Teraz podróżuję. Ktoś, kto widział, jak koduję, pomyślał, że jestem sprytny czy coś i zaczął ze mną rozmawiać. Wyjaśnił, że jest właścicielem firmy programistycznej, opowiedział mi trochę o tym, czym się zajmuje i powiedział, że szuka programisty, który będzie pracował dla udziałów w firmie. Wyjaśnił, że produkt firmy jest rozwijany raczej potajemnie, więc niewiele może mi powiedzieć. Ale powiedział o produkcie wystarczająco dużo, aby przekonać mnie, że nie do końca to zmyśla, co jest przyzwoitą podstawą. Zasugerował, aby pokazał mi więcej tego, nad czym pracował, a po obejrzeniu tego decyduję, czy chcę dołączyć. Ze względu na tajemnicę kryjącą się za produktem chce, żebym przed rozmową podpisał umowę o zachowaniu poufności. Jestem oczywiście nieco sceptyczny ze względu na przypadkowy charakter, dzięki któremu się poznaliśmy. Na krótką metę zastanawiam się, czy powinienem się wystrzegać podpisywania takiej umowy. Powiedział, że łatwiej będzie mi pokazać produkt osobiście niż przez Internet, i że jutro wyjeżdżam z miasta, więc będę musiał to rozgryźć do jutra. Jeśli zdecyduję się z nim porozmawiać, mogę później zdecydować, czy ufam, że warto poświęcić czas na tę firmę. Koncepcja możliwości uniknięcia ujawnienia tajemnicy wydaje mi się dziwna z tego samego powodu, z którego takie rzeczy, jak niektóre aspekty praw autorskich, wydają się dziwne. Czy powinienem wystrzegać się podpisywania umowy o zachowaniu poufności? Czy to powszechna praktyka? Nie znam szczegółów umowy, o której myślał (jeśli się z nim spotkam, oczywiście przeczytam umowę, zanim zdecyduję, czy ją podpisać). aspekty umowy. Albo mógłbym po prostu rozważyć przypadek szczególnie ostrego porozumienia. To pytanie wydaje się niejasno powiązane. Czy potrzebujemy umowy o zachowaniu poufności (NDA)? Dziękuję


title: Jak bezpieczne jest wykonywanie drobnych aktualizacji JVM?

text: Pracuję nad JVM od lat i bardzo rzadko doświadczam awarii JVM… czyli do ok. 6 miesięcy temu. Od tego czasu doświadczyłem około 5 awarii JVM wynikających z 2 defektów JVM. Rozwiązaniem od Oracle było zawsze to samo… upgrade. Każde uaktualnienie jest zawsze do i od wydania punktu ... tzn. ostatnią sugestią Oracle (po potwierdzeniu, że naprawili błąd) było uaktualnienie z 1.6u20 do 1.6u26. W jakim stopniu powinienem uaktualniać mniejsze wersje JVM? Czy to duże wydarzenie, które wymaga ogromnej ilości testów regresji, czy są to bezpieczne aktualizacje, które należy przyjąć?


title: Jak oddzielić bezpłatną/płatną wersję aplikacji w subversion?

text: Mam płatną aplikację na Android Marketplace, jednak chcę wydać bezpłatną wersję z reklamami. Najłatwiejszym sposobem, w jaki pomyślałem, aby to zrobić, było utworzenie gałęzi w moim repozytorium subversion, która ma dodatkowy kod do dodawania reklam. Jednak kiedy poszedłem przesłać to do Android Marketplace, wymagały one unikalnych nazw pakietów. To rozwiązanie już nie działa dla mnie, ponieważ musiałbym zmienić pakiet każdego pliku klasy, co sprawiłoby, że połączenie trunku i gałęzi byłoby bardzo bolesne. Jaki jest najlepszy sposób, aby utrzymać te dwa projekty razem, udostępniając poprawki, ale z innym pakietem?


title: Jak wprowadzić Scrum w firmie przyzwyczajonej do Scrumbutta czy Scrumfalla?

text: Mój kolega pracuje jako konsultant. Niedawno został poproszony o pomoc firmie tworzącej oprogramowanie w usprawnieniu ich procesów. Firma zdaje sobie sprawę z niektórych problemów, takich jak liczba błędów lub fakt, że nie może wypuszczać swojego wiodącego produktu częściej niż raz w roku, ale nikt tam nie wie, co robić. Mój kolega stwierdził, że mają prymitywny wewnętrzny proces, który nazywają Scrum, ale którym nie jest. Mój kolega chce zasugerować przejście do „prawdziwego Scruma”. Jeśli to zrobi, napotka dwa problemy: * Menedżerowie odpowiedzą, że już używają Agile i że to nie było pomocne. * Byłoby szczególnie trudne¹ wyjaśnić zarówno menedżerom, jak i CEO firmy, że do tej pory nie był to prawdziwy Scrum, ale raczej mieszanka Scrumfall i Scrumbutt. Co robić? * * * ¹ W tej firmie dwóch z trzech menedżerów twierdzi, że doskonale zna Agile i Scrum i bezbłędnie stosuje je w swoich zespołach. Twierdzenie, że nic nie wiedzą o żadnym z tych dwóch tematów, stworzyłoby trudną do opanowania sytuację. Rolą mojego kolegi jest również nie tylko wyrażanie swojej opinii, ale stosowanie „dobrej” metodologii przez kolejne trzy miesiące w tej firmie. Rozpoczęcie od twierdzenia, że menedżerowie są niekompetentni w tym kontekście, nie jest rozwiązaniem.


title: Jak wykonać przegląd kodu wizualnego?

text: Ostatnio pisałem kod w SAS Enterprise Guide, który tworzy „kod”, który wygląda tak (zrzut ekranu z połączonej strony): ![Zrzut ekranu SAS Enterprise Guide](http://i.stack.imgur.com/ Vozla.jpg) Moje pytanie jest dwojakie: 1. Czy uważasz, że konieczne jest przeprowadzenie przeglądu kodu tego typu kodu? Moje przeczucie jest **tak** , biorąc pod uwagę, że (1) to wciąż kod, tylko wizualnie ułożony i (2) błędy = duże problemy. 2. Jeśli "tak" do powyższego, jak wykonać przegląd? Czy istnieją standardy kodu wizualnego? Jestem naprawdę otwarty na wszelkie pomysły, komentarze i sugestie tutaj. Dziękuję!


title: Jaki jest skuteczny sposób przekonwertowania systemu mapowanego na pamięć współużytkowaną na inny model dostępu do danych?

text: Mam bazę kodu zaprojektowaną wokół pamięci współdzielonej. Każdy proces, który potrzebuje dostępu do pamięci, mapuje ją do własnej przestrzeni adresowej. Struktury danych w pamięci współdzielonej są dostępne bezpośrednio, to znaczy nie ma API. Na przykład: Załóżmy, że: typedef struct { int x; int y; struct { int a; intb; } z; } mojaStruktura; mojaStruktura; Następnie proces może uzyskać dostęp do tej struktury jako: myStruct *s = mapGlobalMem(); I użyj go jako: int tmpX = s->x; Większość informacji w strukturze globalnej to informacje konfiguracyjne, które są ustawiane raz i odczytywane wielokrotnie. Chciałbym przechowywać te informacje w bazie danych i opracować API, aby uzyskać dostęp do bazy danych. Problem polega na tym, że te odniesienia są rozsiane po całym kodzie. Potrzebuję sposobu na przeanalizowanie kodu i zidentyfikowanie globalnych odwołań do struktur, które będą wymagały refaktoryzacji. Przyjrzałem się użyciu ANTLR do stworzenia parsera, który będzie identyfikować odniesienia do małego zestawu struktur i wprowadzać je do niestandardowej tabeli symboli. Mógłbym wtedy użyć tej tabeli symboli do zidentyfikowania, które pliki źródłowe wymagają refaktoryzacji. Wygląda na obiecujące podejście. Jakie są inne podejścia? Oczywiście szukam podejścia programistycznego. Istnieje zbyt wiele plików źródłowych, aby każdy z nich zbadać wizualnie. To wszystko jest zwykłym ANSI C. Nic więcej.


title: Biblioteka programowania równoległego? (+ kilka funkcji)

text: **Uwaga** : to jest ponowne przesłanie, ponieważ pytanie zostało uznane za nieodpowiednie dla forum Stack Overflow i powinno zostać opublikowane tutaj. Oryginalny temat jest tam. Chciałabym porozmawiać o wielowątkowości, równoległości i dostępnych dziś bibliotekach, które pozwalają to osiągnąć. Szczególnie zastanawiam się, czy łatwa w użyciu biblioteka do realizacji tego konceptu (podana poniżej) już istnieje, czy też trzeba by ją napisać i jak byłoby to trudne. **Cele biblioteki** Szukam: * dostępnej dla większości programistów, nie tylko dla inżynierów czy osób z wyższym wykształceniem (to powinno oznaczać, że programiści CHCĄ z niej korzystać, nie bojąc się) * dostępne dla programistów C++ * przenośny (zacznij od Windows, Mac OS X i Linux, potem rozszerz na urządzenia mobilne) * lekki * łatwy w użyciu (związany z dostępnością) **Najważniejsze cechy** Poszukuję: * równoległość zadań * anulowanie zadań (miękkie i nagłe) * zależności zadań **Istniejące powiązane biblioteki** : * **Wątek Building Blocks** : bardzo skomplikowana w użyciu i dość restrykcyjna licencja (GPL/komercyjna), to jedyna biblioteka które znalazłem i które zawiera wszystkie funkcje, których szukam * **Grand Central Dispatch** : obecnie nieprzenośny, niezbyt skomplikowany, bez anulowania zadań (po uruchomieniu), bez zależności między zadaniami, bez automatycznej obsługi zależności (tylko instrukcja) * **PFunc** : tylko Unix, wciąż trochę skompli cateted, bez zależności od zadań, bez anulowania * **Microsoft Task Parallel Library** : tylko platforma MS i .NET, bez twardego anulowania, ograniczonych i ręcznych zależności zadań (jedno zadanie nie może obudzić więcej niż jednego innego zadania) * ** OpenCL** : obecnie nie jest dostępny na wszystkich platformach, niewiele więcej niż biblioteka zadań równoległych GPU (nie tak wysoki, jak bym chciał) * **OpenMP** : szeroko obsługiwany z wyjątkiem darmowych wersji Visual Studio, bez anulowania zadań ani automatyczne zależności zadań Więc co sądzisz o tym wszystkim? Jak myślisz, dlaczego jest tak mało bibliotek odpowiadających na te potrzeby? A może przegapiłem jakąś świetną bibliotekę? A czy uważasz, że osiągnięcie jednego wymagałoby zbyt wiele pracy? A może nie dość interesujące? Zauważ, że braki, które napisałem, to te, które znalazłem podczas niektórych wyszukiwań, nie jestem ekspertem w żadnej z tych bibliotek. Ostatecznym celem tej biblioteki, nawet jeśli jest to raczej marzenie, byłoby programowanie w sposób równoległy tak łatwo, jak zwykle robi się to przy programowaniu sekwencyjnym. Cejloń


title: Czy naprawdę istnieje coś takiego jak „pchanie”?

text: Kiedy wyjdziesz ze sfery sygnałów elektrycznych i zajmiesz się oprogramowaniem, czy naprawdę istnieje coś takiego jak architektura „wypychania”, w której nie ma okresowego odpytywania? Nie przychodzi mi do głowy żaden projekt, w którym nie jest odpytywany na _jakiś_ poziomie. Wygląda na to, że zawsze jest tylko poziom lub dwa poniżej rzeczywistej abstrakcji/API, z którym masz do czynienia. Gniazda na końcu odbierającym większości połączeń typu „push” po prostu odpytują o przychodzące żądania itp.


title: Czy przepełnienia bufora nie są już dziś zagrożeniem?

text: Po zapoznaniu się z przykładami przepełnienia bufora i przeczytaniu ich w różnych książkach/witrynach internetowych wydaje się, że w dzisiejszych czasach istnieje wiele środków zapobiegawczych, aby się przed nimi chronić. ASLR, /GS flag security cookie, stack-protector w linux, itp.. Niektóre z przykładów, które przejrzałem, zawierają instrukcje, jak wyłączyć pewne funkcje bezpieczeństwa, aby przykłady działały. dla mnie naprawdę głupi pomysł - uruchamiając kod na prawdziwym systemie, nie będziesz miał luksusu wyłączania jego funkcji bezpieczeństwa. Więc o co chodzi z przepełnieniami buforów w dzisiejszych czasach, czy stały się one zbędne przez postęp w dziedzinie bezpieczeństwa, czy nadal są przydatne?


title: Co należy rozumieć pod pojęciem „jednostka” w testach jednostkowych?

text: Jak rozumiem teoretycznie pod "jednostką" ludzie mają na myśli metodę (w OOP). Jednak w praktyce testy, które weryfikują jakąś metodę w izolacji, są bardzo delikatnymi testami behawioralnymi (weryfikującymi nie wynik, ale fakt wywołania jakiejś metody zależności). Widzę więc wielu ludzi, którzy przez jednostkę rozumieją mały zestaw ściśle powiązanych klas. W tym przypadku tylko zewnętrzne zależności są mockowane/zastępowane, a dla zależności, które znajdują się wewnątrz jednostki, używane są rzeczywiste implementacje. W tym przypadku jest więcej testów stanowych, znaczących (zgodnie ze specyfikacją) i nie tak delikatnych. Pytanie brzmi więc, co myślisz o tych podejściach i czy zasadne jest nazywanie drugiego podejścia testowaniem jednostkowym, czy może jest to jakiś rodzaj niskopoziomowego testowania integracyjnego? Jeśli dostrzegasz konkretne rozważania dotyczące stosowania TDD za pomocą jednego z tych sposobów testowania, będę wdzięczny za Twoje przemyślenia.