title: Unikanie pułapek obiektowych, migracja z C, co zadziałało dla Ciebie?

text: Od dłuższego czasu programuję w językach proceduralnych i moją pierwszą reakcją na problem jest rozpoczęcie dzielenia go na zadania do wykonania, a nie rozważanie różnych encji (obiektów), które istnieją i ich relacji. Ukończyłem kurs OOP na uniwersytecie i rozumiem podstawy enkapsulacji, abstrakcji danych, polimorfizmu, modularności i dziedziczenia. Przeczytałem Uczenie się myślenia w sposób zorientowany obiektowo i Uczenie się myślenia obiektowego i będę zapoznawał się z niektórymi książkami wskazanymi w tych odpowiedziach. Myślę, że kilka z moich średnich i dużych projektów skorzysta na efektywnym wykorzystaniu OOP, ale jako nowicjusz chciałbym uniknąć czasochłonnych, typowych błędów. W oparciu o twoje doświadczenia, jakie są te pułapki i jakie są rozsądne sposoby ich obejścia? Gdybyś mógł wyjaśnić, dlaczego są to pułapki i jak Twoja sugestia jest skuteczna w rozwiązaniu problemu, byłaby to mile widziana. Mam na myśli coś w stylu „Czy powszechne jest posiadanie sporej liczby metod obserwatora i modyfikatorów oraz używanie zmiennych prywatnych, czy też istnieją techniki ich konsolidacji/redukcji?” Nie martwię się o używanie C++ jako czystego języka OO, jeśli istnieją dobre powody do mieszania metod. (Przypomina powody używania GOTO, choć oszczędnie.) Dziękuję!


title: Jaka jest dobra strategia testowania UserControls?

text: UserControl nie można przeciągać i upuszczać na winform. Zamiast tego muszę skompilować zestaw, dodać go do mojego przybornika, a następnie przeciągnąć go na formularz. Stosowanie tego podejścia z zestawem narzędzi tylko po to, aby przetestować kontrolkę, a następnie „podrasować” ją wielokrotnie, jest dość kłopotliwe. W tej chwili planuję po prostu mieć ten element przybornika wskazujący na zestaw bin/debug, który będzie wielokrotnie przebudowywany. Wyobrażam sobie, że będzie to miało swój własny zestaw problemów. Jaka jest więc dobra strategia testowania UserControls?


title: Zasoby dla popularnych modeli domen

text: Spotkałem się z wieloma sytuacjami, w których musiałem zbudować system dla biblioteki, przychodni lub innych popularnych dziedzin. Rzecz w tym, że model domeny dla biblioteki został prawdopodobnie zrobiony już 1000 razy z różnym poziomem szczegółowości oczywiście. Oto przykład. Czy istnieje popularna strona internetowa lub społeczność, w której można znaleźć gotowe modele domen dla popularnych systemów? Cały cel, który staram się osiągnąć, to szybkie zrozumienie domeny, którą modeluję i dostosowanie jej do moich potrzeb. Ponowne wynalezienie koła wydaje się naprawdę absurdalne, gdy ten sam system mógł być wcześniej odpowiednio wymodelowany. **Uwaga** Wiem, że Google może brzmieć jak idealne źródło, ale będzie lepiej, jeśli będzie tam repozytorium, w którym ludzie będą mogli publikować modele, aby inni mogli je udostępniać.


title: Czy mogę usunąć reklamy z kanału w mojej aplikacji czytnika wiadomości?

text: Tworzę aplikację czytnika wiadomości na tablety i komputery PC. Moja aplikacja pobiera dane ze źródeł wiadomości przez **kanał RSS** witryn internetowych (po stronie serwera). Ale niektóre z tych witryn wyświetlają banery reklamowe na końcu każdego artykułu. Czy powinienem usunąć te banery z kanału? Czy prawnie/etycznie wolno mi to robić? A co jeśli chcę umieścić inne ogłoszenia w mojej aplikacji? (Zaraz na końcu każdego artykułu) Mam na myśli to, że jeśli chcę mieć własną usługę reklamową... _Aktualizacja:_ A co jeśli **używam kanału dla tytułów treści i streszczeń** , ale używam **innej rzeczy* * , np. Readability API **aby pokazać cały artykuł** , a następnie umieścić własne reklamy pod treścią? (Czytelność pobiera stronę HTML i zapewnia czystą stronę bez żadnych reklam itp.)


title: Modele domen (PHP)

text: Od kilku lat zajmuję się programowaniem w PHP i w przeszłości zaadoptowałem własne metody do obsługi danych w swoich aplikacjach. Zbudowałem swój własny MVC w przeszłości i mam rozsądne zrozumienie `OOP` w php, ale wiem, że moja implementacja wymaga poważnej pracy. W przeszłości używałem relacji `is-a` między modelem a tabelą bazy danych. Teraz wiem, po przeprowadzeniu pewnych badań, że nie jest to naprawdę najlepsza droga naprzód. O ile rozumiem, powinienem tworzyć modele, które tak naprawdę nie dbają o podstawową bazę danych (lub jakikolwiek mechanizm przechowywania, który ma być używany), ale dbają tylko o ich działania i dane. Na tej podstawie ustaliłem, że mogę tworzyć modele, powiedzmy na przykład Person, obiekt tej osoby może mieć kilka Children (ludzkich dzieci), które są również obiektami Person przechowywanymi w tablicy (za pomocą metod addPerson i removePerson, akceptując obiekt Person) . Mógłbym wtedy stworzyć PersonMappera, którego mógłbym użyć, aby uzyskać Osobę o określonym „identyfikatorze” lub zapisać Osobę. Może to następnie wyszukać dane relacji w tabeli przeglądowej i utworzyć powiązane obiekty podrzędne dla żądanej osoby (jeśli takie istnieją), a także zapisać dane w tabeli przeglądowej za pomocą komendy save. To teraz przesuwa granice mojej wiedzy… A gdybym chciał wymodelować budynek z różnymi poziomami i różnymi pokojami na tych poziomach? A gdybym chciał umieścić jakieś przedmioty w tych pokojach? Czy utworzyłbym klasę dla budynku, poziomu, pomieszczenia i przedmiotu o następującej strukturze. budynek może mieć 1 lub wiele obiektów poziomu przechowywanych na poziomie tablicy może mieć 1 lub wiele obiektów pomieszczeń przechowywanych w tablicy pokój może mieć 1 lub wiele obiektów pozycji przechowywanych w tablicy i mapery dla każdej klasy z mapowaniami wyższego poziomu używającymi maperów podrzędnych do zapełnij tablice (albo na żądanie obiektu najwyższego poziomu, albo leniwy ładunek na żądanie) To wydaje się ściśle łączyć różne obiekty, chociaż w jednym kierunku (tj. podłoga nie musi być w budynku, ale budynek może mieć poziomy) Czy to właściwy sposób postępowania? W tym widoku chcę pokazać budynek z opcją wyboru poziomu, a następnie pokazać poziom z opcją wyboru pokoju itp., ale mogę również chcieć pokazać strukturę przypominającą drzewo elementów w budynku i co poziom i pokój, w którym się znajdują. Mam nadzieję, że to ma sens. Po prostu zmagam się z koncepcją zagnieżdżania obiektów w sobie nawzajem, podczas gdy ogólna koncepcja oop wydaje się oddzielać rzeczy. Jeśli ktoś mógłby pomóc, byłoby to naprawdę przydatne. Wielkie dzięki


title: pomoc w wyborze metody szyfrowania dla kolumny bazy danych

text: W bazie danych przechowuję kilka numerów telefonów, które powinny być całkowicie tajne (powinny być dostępne przez internet). BTW, ze względu na pozycję tych ludzi muszę zapobiec wyciekowi ich numerów. Tak więc jedynym rozwiązaniem, o którym mogłem pomyśleć, jest szyfrowanie. Ponieważ baza danych może zawierać mnóstwo danych, nie będę jej całkowicie szyfrować. Poza tym wolę używać innego klucza dla każdej osoby do szyfrowania swoich numerów telefonów, więc w przypadku wycieku jednego klucza, pozostałe numery telefonów powinny być przynajmniej bezpieczne. Problem polega na tym, że inne osoby również muszą wysyłać wiadomości SMS za pośrednictwem aplikacji przez interfejs sieciowy, a także niektóre bardziej uprzywilejowane osoby muszą widzieć te numery, więc przy okazji muszę również udostępnić te numery innym uprzywilejowanym osobom. Zastanawiam się nad czymś w rodzaju struktury klucza publicznego/prywatnego, ale to za dużo jak na szyfrowanie numeru telefonu na osobę, a także byłby problem dla nowych użytkowników, ponieważ poprzednie numery nie były szyfrowane ich klucze publiczne. Czy jest więc jakieś rozwiązanie, które mógłbyś mi polecić? może powinienem poprawić lub zaktualizować strukturę tego, jak próbuję to zrobić, co?


title: Dostęp do funkcji z kontroli użytkownika bez zdarzeń?

text: W przypadku niektórych funkcji ogólnych wydaje się, że dostęp do funkcji na głównym informacie bezpośrednio z kontrolki użytkownika jest łatwiejszy niż wywołanie zdarzenia. Na przykład: Funkcja w głównym formularzu, która wyświetla jedną pożądaną kontrolę użytkownika, wyśrodkowaną i dostosowaną. Uczynienie tej funkcji statyczną lub uzyskanie dostępu do tej funkcji przez odwołanie z kontrolki użytkownika do jej elementu nadrzędnego, a nie wywoływanie zdarzenia, wydaje się bardzo wygodne. Tak: usercontrol_A uc_a = new usercontrol_A(); MainForm mainform_functions = (Form Główny) Rodzic; main_functions.DisplayControl(uc_a); Podnoszenie zdarzenia wydaje się bardziej skomplikowane w takich przypadkach - muszę zadeklarować wszystkie nowe zdarzenia userControl_B (co obejmuje również inicjowanie usercontrol_C i wyświetlanie go) wewnątrz zdarzenia, które pokazuje (i inicjuje) userControl_B: userControl_A.ShowUserControl_B+= (s,e) => { kontrola_użytkownika_B uc_b = nowa kontrola_użytkownika_B(); DisplayControl(uc_b); uc_b.show_uc_c += (s2,e2) => {usercontrol_C uc_c = new usercontrol_C(); DisplayControl(uc_c); } } _za dużo bałaganu_. Trudno to zakodować i przeczytać później. (Ponadto, przekazywanie parametrów do innego usercontrol to taki koszmar - muszę sztucznie zapisać parametr w klasie usercontrol nadawcy, a następnie przerzucić go z powrotem w zdarzeniu) **Jaka jest Twoja opinia? Czy kodowanie w ten sposób jest całkowicie „zakazane”, przynajmniej w przypadku funkcji ogólnych, o których wspomniałem? Czy nie jest lepszy kod, który wymaga drobnych poprawek w celu ponownego wykorzystania?**


title: Jaka jest różnica między obiektem ostatecznym a niezmiennym w javie?

text: final String str = "nie zmieniaj mnie"; str = "dlaczego nie?"; //spowoduje to błąd czasu kompilacji mówiący, że końcowe pola nie mogą być ponownie przypisane po utworzeniu, tj. referencji nie można zmienić String str1 = "hello world"; System.out.println(str1.replaceAll("h", "q")); słowo1 = słowo1.replaceAll("h", "q"); System.out.println(str1); //Z drugiej strony obiekt niezmienny oznacza, że nie ma możliwości zmiany obiektu lub jego zawartości poza zmianą referencji. Czy powyższe rozumienie definicji **obiektu końcowego** i **niezmiennego** obiektu jest poprawne?


title: Czy walidacja serwera jest konieczna w przypadku walidatorów po stronie klienta?

text: Niedawno stworzyłem aplikację internetową .net, która używała ponad 200 niestandardowych walidatorów na jednej stronie. Napisałem kod zarówno dla `ClientValidationFunction` jak i `OnServerValidate`, co skutkuje mnóstwem powtarzalnego kodu. Moje instrukcje sql są sparametryzowane, mam funkcje, które pobierają dane z pól wejściowych i weryfikują je przed przekazaniem do instrukcji sql lub procedur składowanych. A javascript sprawdza poprawność pól przed przesłaniem strony. Zasadniczo dane są czyste i prawidłowe, zanim trafią nawet do `OnServerValidate`, a mimo to są po nim, dzięki wyżej wymienionym krokom. To sprawia, że zastanawiam się, czy „OnServerValidate” jest naprawdę potrzebny, gdy przeprowadzam walidację po stronie klienta? **Edycja:** Moje `OnServerValidate`s robią proste rzeczy, takie jak upewnienie się, że wzorzec pomijania jest wymuszany lub że w tekście pojawia się skrót (co i tak jest wymuszane przez mój kod, który pobiera dane z pól tekstowych do parametrów, np. GetShort() ). A te są umieszczane w ankietach pacjentów, które przez większość czasu są wypełniane przez pracowników. Wygląda więc na to, że gdybym nie miał `OnServerValidate` dla tych podstawowych kontroli i tylko po stronie klienta, następujące sytuacje są następujące: 1. Użytkownik wyłącza javascript i nie może przesłać formularza, co jest oczekiwane, ponieważ przyciski są sterowane javascriptem do ogłaszania zwrotnego . 2. Użytkownik wymusza post. Co jeśli tak się stanie, mój „OnServerValidate” zrobi jacka, aby zatrzymać to, co próbuje zrobić, ponieważ po prostu patrzy na wzorce pomijania, czy też? Sytuacja 2 to sytuacja, w której się gubię. Wygląda na to, że użytkownik wymuszający post najprawdopodobniej nie zostanie złapany przez te proste funkcje `OnServerValidate`s


title: Ochrona przed kradzieżą intelektualną

text: Pracuję nad projektem od około 6 miesięcy i jest w końcu _ukończone_. Gotowe, co oznacza, że szkielet oprogramowania, wszystkie serwery są na miejscu, testy beta są gotowe do rozpoczęcia w prawdziwym świecie. Projekt No Free Time jest gotowy, aby uzyskać **prawdziwe imię** _(przerażające prawo)_. Domeny trzeba kupić... masz pomysł. Gdzie się teraz udać, kiedy rozwijam oprogramowanie dla zysku, takie jak aplikacja internetowa, jest wiele problemów, a ja nawet nie znam pierwszego. Są problemy z własnością intelektualną, są znaki towarowe, są sprawy prawnicze. Wszystkie te rzeczy są drogie i prawdopodobnie nie muszą się dziać od razu. Czy to pierwszy krok i które z tych kroków są najważniejsze. Jak bezpiecznie uruchomić aplikację internetową lub oprogramowanie? Jak zacząć tworzyć i chronić swoje oprogramowanie/stronę internetową/własność intelektualną, jakie są tanie pierwsze kroki, jakie kroki można odłożyć, a co należy bezwzględnie wykonać, zanim oprogramowanie trafi do opinii publicznej?


title: Szybkie nauczanie programowania dla dorosłych, którzy nie programowali

text: Chcę być bardzo konkretny w moim pytaniu, aby uniknąć powielania pytania. Mam nadzieję, że to jest odpowiednie. Pracuję nad projektem z nie-programistami. Są dorośli i zajmują się informatyką, ale mogą nie mieć wykształcenia matematycznego, programowania lub ciężkiego doświadczenia komputerowego. Jakie są najszybsze sposoby nauczenia ich koncepcji programowania. Tylko koncepcje, aby szybko uzyskać programowanie (na tyle, na ile mogą). Załóżmy, że masz 2 tygodnie na zrozumienie technologii zorientowanej na język programowania X. A to są dorośli, a nie studenci. Jakie są najlepsze sposoby na zrozumienie niektórych z tych pojęć? Jakie są solidne techniki, które naprawdę pomagają nie-programistom szybko uzyskać pełny obraz? I starałem się unikać mówienia o konkretnych implementacjach językowych. **Uwagi:** Widzę dwie główne przeszkody dla nie-programistów: (1) Nie rozumieją, czym tak naprawdę jest komputer. Dla nich może się to wydawać magicznym urządzeniem. (2) Nie mają czasu na hakowanie lub nawet naukę programowania. Istnieją tylko niektóre koncepcje, takie jak rekurencja lub zrozumienie struktur danych, które mogą zająć co najmniej jedną noc. Nie mają czasu na debugowanie i testowanie rozwiązania. Pracowałem z ludźmi i przeszedłem przez zadanie programistyczne (edycja właściwości) i przeszedłem przez to zadanie krok po kroku i poprosiłem ich, aby dokładnie powtórzyli te kroki. To działa, ale gdy przegapią krok, nie mogą się zregenerować. Zasadniczo nie rozumieją, co się dzieje.


title: Czy w przypadku sourcingu zdarzeń można wprowadzić zależność w mojej klasie komunikatów?

text: Zgodnie z wyjaśnieniem Martina Fowlera dotyczącym pozyskiwania zdarzeń, mam klasę wiadomości, która wygląda mniej więcej tak: ShippingEvent { Process(Ship ship) {} } Jednak w moim przypadku muszę porozmawiać z innym komponentem w metodzie `Process`. Dokładniej, muszę uzyskać dostęp do repozytorium, aby uzyskać podstawowe dane. Czy można dodać to repozytorium do metody, tj.: ShippingEvent { Process(Ship ship, IBasicDataRepository repo) {} } Oczywiście mógłbym też umieścić je w konstruktorze mojej wiadomości. Nie mogę jednak przekazać podstawowych danych, ponieważ repozytorium będzie wywoływane wielokrotnie z różnymi parametrami, w zależności od tego, co znajduje się w obiekcie 'ship'. Czy można wprowadzić zależności zewnętrzne w klasie zdarzenia/komunikatu, czy może jest lepszy sposób?


title: Scrum to metodologia czy framework?

text: Jestem zdezorientowany co do scrum .to jest metodologia czy Framework?. Chcę używać Scrum do programowania, ale chcę opracować narzędzie scrum, ale nie wiem, czy scrum jest metodologią czy frameworkiem?


title: Algorytm indeksowania ciągów w "liście"

text: Wyobraź sobie, że mam plik o nazwie `strings.dat`. Wewnątrz tego pliku jest dużo napisów, na przykład: milion. **Ciąg są posortowane**. Teraz chcę znaleźć określony ciąg, więc mogę napisać metodę w ten sposób: public long FindByName (string text) { // ... } Ta metoda może zwrócić mi pozycję w pliku, w której występuje ten ciąg. Ale iteracja dużej ilości danych nie jest wydajna. Mogę zrobić jakiś system indeksowania, taki jak `Dictionary<znak, long>`, który mówi o tym, w jakiej pozycji w pliku znajduje się pierwszy ciąg znaków, którego wartość zaczyna się od podanego znaku. Przykład: jeśli mam 5 napisów: hello2 world world2 Zzz Więc mój słownik będzie wyglądał tak: h 0 w 2 z 4 Ale to nie będzie wydajne, jeśli będę miał 1000 stringów z "d" char jako pierwszą literą i 10 milionów z " litera r". Czy wiesz, że jakieś dobre algorytmy osiągają to, o co proszę?


title: Zmieniasz CSS, aby używał potoku zasobów w Railsach?

text: Mam wiele starszych plików CSS z aplikacji Rails 2.x, która została uaktualniona do Rails 3.2.8 i chcę przełączyć się na używanie potoku zasobów Rails dla arkuszy stylów. Problem polega na tym, że CSS jest bałaganiarski pod względem ogromnych linii kodu, zduplikowanych nazw plików i niezorganizowanej struktury folderów. Po przejrzeniu poszczególnych stron i próbie dodania pojedynczych arkuszy stylów i folderów do potoku zasobów oraz spędzeniu kilku cykli na debugowaniu, zdałem sobie sprawę, że prawdopodobnie jest lepsze podejście. Czy istnieje sposób na sprawdzenie, czy stary kod CSS jest zgodny z kodem CSS potoku zasobów? Jakie są dobre narzędzia do testowania i debugowania CSS?


title: Jak przekonwertować repozytorium Bazaar na repozytorium GIT?

text: Mamy duże bazarowe repozytorium i chcemy je przekonwertować na repozytorium git. Bazarowe repozytorium zawiera foldery każdego ze stażystów. Każda dokumentacja/kod przygotowany przez stażystów jest umieszczana w ich katalogu, więc istnieje ogromna liczba zatwierdzeń. Jakie kroki należy wykonać, aby bezpiecznie przekonwertować repozytorium bazarowe na repozytorium git, abyśmy nie stracili żadnych informacji o zatwierdzeniu. Najpierw musimy stworzyć kopię zapasową istniejącego bazarowego repozytorium, a następnie ją przekonwertować. Edycja: poszedłem na ten link: http://librelist.com/browser//cville/2010/2/9/migrate-repository-bzr-to-git/ Działa dobrze na moim systemie z Ubuntu. Ale kiedy próbuję uruchomić go na rzeczywistym serwerze, pojawia się błąd EOF i zawiesza się Rozpoczęcie eksportu 1036 wersji ... fatalne: EOF w danych (pozostało 1825 bajtów) fast-import: zrzucanie raportu o awariach do .git/fast_import_crash_11804 Edytuj 2 : Próbowałem go również na nowym systemie CentOS i otrzymałem następujący błąd krytyczny: niejednoznaczny argument 'HEAD': nieznana wersja lub ścieżka nie w drzewie roboczym. Użyj „--”, aby oddzielić ścieżki od wersji


title: Jakie korzyści odniosę z dobrej metodologii?

text: Jeden z moich znajomych pracował od prawie 10 lat, zapytał mnie, dlaczego musi uczyć się nowych rzeczy, takich jak testowanie jednostek, MVC, architektura wielowarstwowa (tworzy aplikację 3-warstwową, ale projektuje jak 2-warstwowa), zorientowana obiektowo programowanie lub itp.? Pracował przez dekadę bez testów jednostkowych, używa programowania kodowego i strukturalnego i to działa dla niego. Potrafi dostarczyć produkt do klienta i ma wysokie dochody. Jakie korzyści odniesie z tych metodologii?


title: Jakie było pierwsze rozwiązanie sprzętowo-programowe zorientowane na klienta?

text: Wszyscy znamy historię komputera osobistego jako produktu zorientowanego na konsumenta. Ale po prostu pomyślałem, że prawdziwe rozwiązanie dla użytkownika końcowego powinno pojawić się przed tym czasem. Czyli produkt, który prawdopodobnie był drogi, ale pozwalał na korzystanie z niego jako za usługę płatną, na przykład komputer-terminal dostępu do rozkładu jazdy czy automat do gier. Z drugiej strony terminale wideo, jakie znamy, pojawiły się nie tak dawno temu. Więc jeśli było coś takiego, może to być sprzęt/oprogramowanie najprawdopodobniej nie oferujące interaktywności, ale prawdopodobnie wyświetlające pewne informacje na podstawie działań użytkownika.


title: Czy akustyczny odcisk palca jest zbyt szeroki dla jednego pliku audio?

text: Szukaliśmy tematów związanych z analizą dźwięku i znaleźliśmy akustyczne odciski palców. Wydaje się, że najbardziej znaną aplikacją jest identyfikacja muzyki. Wpisz naszego menedżera, który poprosił nas o zbadanie i ewentualne znalezienie algorytmu lub istniejącego kodu, którego możemy użyć w tym bardzo prostym podejściu (jak to proste, kody źródłowe nie pojawiają się jak grzyby po deszczu): 1. Zawsze włączona aplikacja do słuchania 2. Porównaj wzorce dźwiękowe z pojedynczym plikiem dźwiękowym (załóżmy, że dźwięk to zwykły sygnał dźwiękowy lub „pip-bip”) 3. Jeśli zostanie wykryty dźwięk, wyślij powiadomienie do serwera? posługiwać się? Czy powinniśmy się zatrzymać i przyjąć inne podejście? Od czego najlepiej zacząć? Nie rozpoczęliśmy jeszcze niczego (po stronie rozwoju) w tym zakresie, więc chcę uzyskać inną opinię, czy jest to dążenie do tego warte, czy dyskusyjne.


title: Strategia zarządzania akcjami i kontrolerami w aplikacjach MVC

text: Czy ktoś może wymienić jakąś użyteczną strategię/wzór architektoniczny do alokacji akcji pomiędzy różnymi kontrolerami przy wykorzystaniu wzorca MVC do tworzenia aplikacji webowych? Zajmuję się teraz tworzeniem aplikacji sieci Web przy użyciu frameworka asp.net Mvc3 i nadal nie mogę dowiedzieć się, jak zarządzać akcjami i kontrolerami. Jednym z podejść jest utworzenie pojedynczego kontrolera akcji dla każdego adresu URL, ale nie jest to najlepszy wybór, ponieważ trzeba utworzyć zbyt wiele kontrolerów. Czy powinienem wymienić wszystkie dostępne adresy URL obsługiwane przez moją aplikację webową, podzielić je na grupy i utworzyć osobny kontroler dla każdej grupy, czy też zachowywać się w inny sposób? Wygląda na to, że stanę twarzą w twarz z jakimś bałaganem bez spójnego podejścia do zarządzania akcjami i kontrolerami.


title: Jak najlepiej zaktualizować moje umiejętności programistyczne?

text: Przez 10 lat pracowałem na wysoce wyspecjalizowanym stanowisku, które obejmuje programowanie RPG, CLP na AS400, głównie w celu uzupełnienia słabo napisanej aplikacji EDI. Moja firma nie zatrudnia wystarczającej liczby osób, więc nosiłem również inne czapki, włącznie z help desk. Praca jest tak wymagająca i frustrująca, że wstydzę się przyznać, że straciłem część umiejętności w innych językach programowania i nie miałem czasu ani pieniędzy na opłacenie kursów doszkalających. W rzeczywistości nawet nie wiedziałbym, od czego zacząć. Jaki jest najłatwiejszy sposób dla osoby takiej jak ja, aby przejść od robienia czegoś, czego nienawidzę, do czegoś bardziej zabawnego lub przynajmniej zmiany tempa... jak tworzenie stron internetowych? Zamierzam wziąć udział w kursie szkoleniowym i ostatecznie uzyskać certyfikat MCPD… czy to wystarczy? Ponadto, czy naprawdę musisz mieć jakieś praktyczne doświadczenie z tymi językami, aby uzyskać certyfikat, czy wystarczy 10 lat programowania w innym języku? Każda rada byłaby pomocna, ponieważ jestem bardzo niezadowolona z mojego obecnego życia zawodowego.


title: Czy pewne oczekiwania dotyczące zachowania mogą być częścią umowy interfejsu?

text: Podany kod: public interface IUserDataProvider { ICollection<SomeClass> getSomeClassRecordsForUser(int idUser); } Czy można zdefiniować (poprzez dokumentację) oczekiwanie, że jakakolwiek klasa implementująca zwróci wartość null zamiast pustej kolekcji (lub odwrotnie), gdy nie zostaną znalezione żadne rekordy? Zdaję sobie sprawę, że interfejsy nie mają wyraźnej kontroli nad tym, jak są wdrażane, ale biorąc pod uwagę, że interfejsy mają określać umowę, zastanawiam się, jak daleko może się rozciągać jurysdykcja tej umowy. Z góry dziękuję za odpowiedzi.


title: Organizowanie repozytorium git z kilkoma projektami udostępniającymi kod

text: Mam kilka małych projektów działających na różnym sprzęcie wbudowanym, a około 50% ich kodu jest identyczne (zazwyczaj niektóre sterowniki, ich system operacyjny i niektóre biblioteki). Chcę scalić te małe projekty w jedno repozytorium git, aby łatwiej było je centralnie utrzymywać, na przykład aktualizować sterownik. Jednak podczas modyfikowania kodu współdzielonego między różnymi projektami, powiedzmy sterownik, nie chcę go testować na każdej platformie sprzętowej przed wypchnięciem do repozytorium git. W ogóle nie skalowałoby się do testowania kodu dla danego projektu. Muszę go przetestować na konkretnym sprzęcie dla projektu i jeśli to konieczne, poprawić błędy specyficzne dla projektu, które mogą zostać wprowadzone przez modyfikację współdzielonego kodu. O wiele lepiej jest opóźnić testowanie modyfikacji współdzielonego kodu na danym projekcie, gdy następnym razem będę chciał zmodyfikować ten projekt. W tej chwili oto rozwiązanie, z którym przyszedłem: struktura katalogów wyglądałaby następująco: > > . > |--shared_code > |--projects > |--projectA > |--projectB > |--projectC > Dla każdego projektu utworzyłbym gałąź git, która będzie reprezentować tylko do jakiego zatwierdzenia testowany był kod dla danego projektu . Dlatego wypychałbym kod tylko do gałęzi master, a po przetestowaniu na tej platformie scaliłbym kod z gałęzi master do gałęzi projektu. W ten sposób gałąź projektu zawsze byłaby w stanie stabilnym (przetestowanym). W przypadku większości projektów gałąź główna byłaby niestabilna. struktura git: > > master > | > zatwierdzenia: 1 <-- 2 <-- 3 <-- 4 <-- 5 <-- 6 <-- 7 > ^ ^ ^ > | | | > gałęzie: A B C > Czy to właściwy sposób rozwiązania tego problemu? Czy jest lepsze rozwiązanie?


title: Czy dobrzy kierownicy projektów potrzebują przygotowania programistycznego?

text: Czasami nie mogę znieść, gdy kierownicy projektów proszą mnie o oszacowanie czasu na wykonanie różnych zadań. Szacunek jest zgadywaniem, a domysły mogą być błędne. Ogólnie rzecz biorąc, złe wymagania i dokumentacja prowadzą do błędnych domysłów. Dlatego często zastanawiam się, czy kierownicy projektów byli kiedyś na moim miejscu, próbując odgadnąć, ile czasu zajmie zadanie X i Y i jak trudno jest nadać mu numer na podstawie tego, co wiadomo i zebrano od klienta. Moje pytanie brzmi zatem: **Czy dobrzy kierownicy projektów muszą mieć wykształcenie programistyczne?** A może pytanie powinno brzmieć: **czy dobrzy kierownicy projektów musieli być wcześniej _dobrym_ programistą?** Czy istnieje jakaś korelacja?


title: Czy Apple wychodzi z branży platform programistycznych ogólnego przeznaczenia?

text: Od około dziesięciu lat zajmuję się ogólnym rozwojem ANSI C/Console C++/Java/Web na sprzęcie Mac. Nie twierdzę o obiektywnej wyższości nad innymi platformami, po prostu zaspokaja to moje osobiste gusta. Wraz z sukcesem iPhone'a i związanego z nim App Store pojawiły się spekulacje, że Apple wyjdzie z rynku komputerów ogólnego przeznaczenia i stanie się zamkniętym ekosystemem oprogramowania, skupiającym się na urządzeniach konsumenckich. Wyśmiewałem wtedy te spekulacje, ale w tym tygodniu Apple ogłosił, że a) otwierają App Store dla Maca, b) Aplikacje Java nie będą kwalifikować się do App Store, c) Apple JVM jest przestarzałe i może nie być dostępny dla przyszłych wersji OS X. Nie jestem programistą Java per se, ale pracuję w laboratorium badawczym, które od czasu do czasu pisze aplikacje Java, a także zależy od narzędzi napisanych w Javie. To może być dla nas ogromnym bólem w tyłku. W tej chwili nie ma innej JVM dla OS X, do której moglibyśmy skierować naszych użytkowników końcowych. Soy Latte i OpenJDK mogą być odpowiednie dla programistów, ale złożoność instalacji czyni je nieodpowiednimi dla użytkowników końcowych. Spodziewam się, że w końcu Oracle/SUN wyprodukuje zastępczą JVM dla OS X. Bardziej niepokojące jest dla mnie to, że Apple specjalnie reklamowało, że jest to doskonała platforma do rozwoju naukowego, ponieważ obsługuje wszystkie główne platformy językowe. Czy deprecjonowanie ich JVM to znak, że ten rynek już ich nie interesuje?


title: Czy powinniśmy wywołać Web API z aplikacji MVC w tym samym rozwiązaniu?

text: Pracuję nad projektem w MVC, który ma aplikację mobilną, więc jedno jest jasne, że musimy użyć Web API, aby można go było używać w aplikacji mobilnej. Po stworzeniu API, kiedy zaczęliśmy tworzyć witrynę internetową, byliśmy zdezorientowani i dyskutowaliśmy, czy użyć API, czy też bezpośredniego dostępu do obiektu biznesowego. Skończyło się na tym, że po uzyskaniu opinii od bardziej doświadczonego programisty skorzystaliśmy z Web API zamiast bezpośrednio korzystać z obiektu biznesowego. Mam zamieszanie dotyczące tej struktury rozwiązania. 1) Dlaczego powinniśmy użyć Web API i wykonać żądanie HTTP (co jest czasochłonne), aby uzyskać lub umieścić dane zamiast bezpośrednio obiektu biznesowego, który jest w tym samym rozwiązaniu. 2) Po argumentach powiedzieli, co jeśli klient chce hostować API i sieć na innym serwerze w chmurze i stosować skalowanie tylko na API lub może chcieć mieć inny adres URL do dostępu do API i sieci (co jest trochę logiczne). Czy w takim razie powinniśmy wywołać Web API z aplikacji MVC w tym samym rozwiązaniu? 3) Jeśli hostujemy API i Web na innym hostingu, oznacza to, że nasza sieć będzie korzystać z WebClient i mieć wywołanie HTTP przy każdej nawigacji. Czy to jest poprawne? 4) Jeśli obiekt biznesowy będzie tworzył zarówno API, jak i hosting na innym serwerze, to jeśli coś się zmieni w BL, będzie trzeba zaktualizować build na obu serwerach. 5) Albo powinniśmy stworzyć tylko jeden projekt dla API i możemy dodawać widoki lub strony html do tworzenia interfejsu WWW, tak aby w ten sposób móc bezpośrednio wywołać API z ajax. Zgodnie z moją wiedzą #5 jest najlepszym rozwiązaniem lub API jest tylko dla dostępu stron trzecich. Jeśli mamy DB, EF, warstwę danych i warstwę biznesową w tym samym rozwiązaniu, nie powinniśmy używać API do wykonywania wywołań HTTP i bezpośredniego dostępu do obiektu biznesowego. (popraw mnie, jeśli się mylę) API jest potrzebne, gdy aplikacja mobilna, komputerowa lub ktokolwiek chce uzyskać dostęp do aplikacji, dzięki czemu możemy mieć to samo repozytorium i warstwę danych. W moim scenariuszu muszę stworzyć API, ponieważ mamy również aplikację mobilną, a po stronie API projektu nazwaliśmy warstwę biznesową (osobny projekt) i warstwę biznesową komunikującą się z warstwą dostępu do danych (osobny projekt). Więc moje pytanie brzmi: jeśli hostujemy nasze API i sieć na różnych serwerach, to wywołanie API, które jest żądaniem HTTP, może potrwać dłużej, zamiast używać metody z warstwy biznesowej, gdy tworzymy projekt i mamy .dll warstwy biznesowej. W kontrolerze API po prostu konwertujemy wyjście naszej firmy do formatu json. Szukałem w Internecie, ale nie otrzymałem przekonującej odpowiedzi. Znalazłem blog http://odetocode.com/blogs/scott/archive/2013/07/01/on-the-coexistence-of-asp-net-mvc-and-webapi.aspx omawiający ten sam punkt, ale znowu na tym blogu moje pytanie brzmi: dlaczego musimy rozważyć scenariusz nr 3? Aktualizacja: Możemy mieć inny projekt API i projekt MVC i możemy wywołać API z sieci za pomocą jvascript lub możemy użyć wzorca MVVM.


title: Zostań ekspertem a nuda

text: Jestem studentem i uwielbiam programować, kropka. Koduję różne rzeczy w różnych językach. Chociaż lubię programować, to bardzo trudno mi się długo trzymać przy jednym projekcie. Ten brak przypisuję mojemu wysokiemu poziomowi ciekawości, poznawania różnych technologii, języków, bibliotek itp. Co byłoby najlepsze? Czy powinienem się bardziej ustatkować i poświęcić czas na stanie się ekspertem w jednej lub dwóch dziedzinach programowania, czy powinienem być bardziej specjalistą od wszystkich zawodów, wypróbowując wszelkiego rodzaju nowe technologie, języki, metody programowania itp.? Zgaduję, że najlepiej byłoby gdzieś pośrodku. Zawsze zdumiewa mnie, jak wielu programistów jest w stanie stworzyć jeden lub dwa projekty i rozwijać się na nich przez lata. Jakie techniki stosujecie, aby pomóc wam skupić się na projekcie?


title: Jak koordynujesz współpracę ze współpracownikami, aby udzielić wyważonej rozmowy kwalifikacyjnej?

text: Moja firma przeprowadziła ostatnio wiele rozmów kwalifikacyjnych z kandydatami o różnym poziomie doświadczenia, od stażystów po starszych kandydatów. Przeprowadzamy z naszymi kandydatami pięć 45-minutowych rozmów kwalifikacyjnych, podczas których staramy się zadać szereg pytań. Jedna osoba zawsze zadaje te same pytania, które sprawdzają logikę i komunikację. Reszta zwykle dzieli czas między pytanie o kodowanie tablicy i omówienie poprzednich projektów, technologii, z którymi rozmawiał, i tego, czego szuka pracy. Generalnie znamy zakres pytań, które zadają inne osoby w pętli. Czasami zmieniamy rzeczy i kończymy na zwolnieniu. Dzisiaj 3 ankieterów zadało pytania dotyczące drzew. Innym razem wszyscy pracowaliśmy nad tym samym projektem na podstawie CV, a rozmówca rozmawiał o tym ze wszystkimi. Myślę, że płynny proces rozmowy kwalifikacyjnej pomógłby nam dowiedzieć się więcej o kandydacie, jednocześnie dając wrażenie, że działamy razem jako zespół. **Jak koordynujesz rozmowę z innymi osobami, aby udzielić zrównoważonej rozmowy kwalifikacyjnej?**


title: O czym powinienem wiedzieć, przygotowując dokument strony internetowej do późniejszego wykorzystania?

text: Zespół programistów ukończył stronę internetową, a moim obowiązkiem jest przygotowanie dokumentu, aby inni programiści mogli z łatwością serwisować. Nie mam w tym żadnego doświadczenia i chciałbym zapytać, o czym należy wspomnieć (struktura dokumentu) w tym raporcie? Na razie moim pomysłem jest tylko przygotowanie diagramu ERD dla bazy danych i schematu blokowego dla każdej funkcji. Wszelkie inne sugestie, np. jakie pliki cookie są przechowywane?


title: Co wziąć pod uwagę przy wyborze frameworka dla zespołu programistycznego?

text: Ponieważ kończę kurs tworzenia stron internetowych z kilkoma przyjaciółmi, z którymi pracowałem przy wielu projektach, zamierzamy stworzyć profesjonalny zespół programistów. Funkcje są dobrze zdefiniowane między programistami, analitykami i projektantami, a zespół nie powinien mieć znacznie większej liczby niż sześciu członków. Aby przyspieszyć rozwój i zapobiec nakładaniu się pracy każdego programisty na pracę innych, grupa rozważyła framework MVC. Deweloperzy front-endu nie powinni mieć nic przeciwko temu, który z nich jest wybrany, ponieważ jest on oparty na standardach internetowych dla nich, ale ja i inni programiści rozważaliśmy kilka opcji. Ponieważ pytanie staje się naprawdę rozwlekłe, po prostu podsumuję, o co chciałbym zapytać bardziej doświadczonych programistów: * Co należy wziąć pod uwagę przy wyborze frameworka webowego? W przypadku małych projektów wydajność nie powinna być czynnikiem zabójczym, ale czy nadal rozsądne byłoby usunięcie systemów Ruby/Python z konkurencji? * Czy umiejętność pracy nad więcej niż jednym językiem programowania lub więcej niż jednym frameworkiem w danym języku jest czymś ważnym? * Czy nauka jednego lub więcej frameworków powinna odbywać się w grupie, czy na własną rękę, a następnie zbierać opinie na ich temat?


title: Czy w C++11 można użyć Auto do obejścia błędnego rzutowania parametrów void * w funkcjach?

text: Jeśli mam ogólną funkcję, która przyjmuje void* jako parametr, czy Auto w C++11 może pomóc zatrzymać złe rzutowanie tego parametru? Na przykład możemy mieć system zdarzeń, który wysyła zdarzenia i wskaźnik do niektórych danych, które są istotne dla wysyłanego zdarzenia. void EventClass::SendEvent (eventTypeEnum eventType, void* eventData) { int* castEventData = static_cast<int*> (eventData); //.. Zrób coś } W powyższym przykładzie jeden eventType może być wysłany z eventData jako float* a drugi jako wskaźnik do struktury. static_cast tam będzie błędnie rzucał i powodował problemy. Czy istnieje sposób na użycie auto, aby uniknąć tego problemu. Pamiętaj, że to tylko przykład (nie jest świetny, choć przepraszam), aby pomóc mi zrozumieć możliwości auto, a nie rzeczywisty problem, który mam.


title: Jak zrównoleglić algorytm sekwencyjny?

text: Jaki proces myślowy należy wykonać, aby przekształcić algorytm sekwencyjny w algorytm równoległy? Czy istnieje jakiś konkretny wzorzec kodu, który można zrównoleglać. Niektóre wzorce, których zwykle używam, to: * Szukanie pętli, które można zrównoleglić. * Spróbuj złamać algorytm w jakiejś formie formatu Map-reduce. * Poszukuję wzorca producent-konsument.


title: Jakie innowacyjne niepieniężne korzyści finansowe oferuję moim programistom, aby je zatrzymać wraz z konkurencyjnym wynagrodzeniem?

text: Opcje na akcje nie mają większego sensu, ponieważ firma jest prywatna. [Nadal tak jest, jeśli jesteś swego rodzaju facebookiem ORAZ system regulacyjny zezwala na strony takie jak wtórny rynek, ale robię dygresję.] Mogę pomyśleć o niektórych: 1. Korzyści zdrowotne dla rodziców i teściów 2. Sponsorowanie paliwa- oszczędzanie roweru na przejazd do biura 3. Karty podarunkowe na okazje takie jak ukończenie 1, 3, 5 lat służby Naprawdę przydałoby mi się więcej sugestii tutaj. **EDYTUJ:** Dziękuję wszystkim za odpowiedź. Podsumowując, oto dodatkowe rzeczy, które mój dział HR może zrobić: 1. Dopasowanie składki do pracowniczego funduszu emerytalnego pod warunkiem, że pracownik wniesie wkład 2. Finansowanie kształcenia ustawicznego, kursów zawodowych itp. 3. Subskrypcja firmowa do ACM, IEEE, Safari Books itp. 4. Bony na posiłki 5. Członkostwo na siłownie 6. Prowadzenie świetlicy w biurze 7. Premie punktowe 8. Czas wolny na skoki kodu w uznaniu indywidualnego wkładu 9. Sabaty


title: Jak zaprojektować, aby umożliwić przyszłą rewizję logiki?

text: Typowa metoda projektowania programowania, której używam, wygląda następująco: 1. Zidentyfikuj problem i to, co jest wymagane 2. Spraw, aby twój program zrobił coś prostego 3. Przetestuj go 4. Spraw, aby twój program zrobił trochę więcej 5. Powtórz 2 dopóki wszystkie mikroproblemy nie zostaną rozwiązane przez program jako całość. Zasadniczo projektowanie przyrostowe. Tak więc wszystkie części można rozdzielić, a każdy mikroproblem jest rozwiązywany za pomocą funkcji mikroproblemu; wykonuje świetną robotę ze spójnością i zmniejsza sprzężenie. Następnie, w przyszłości, program napotka problem, który jest podobny do problemu, na którym jest zbudowany, ale wymaga trochę więcej. Powiedziałbym więc, że dodaj funkcjonalność do programu, aby to nadrobić. Jeśli podczas dodawania tej funkcji należy edytować już ustaloną logikę działania, aby nowa funkcja działała, nagle wydaje się, że mieszasz się z czymś, czego nie powinieneś. Czy istnieje więc metoda projektowania, w której każdy opracowany przy jej użyciu program może być dodany bez narażania logiki działania? Przykład: słowo = tak,nie,"może,więc" staryCSVSplit(słowo, ",") -> {"tak", "nie", "\"może", "tak\""} nowyCSVSplit(słowo, ", ") -> {"tak", "nie", "może więc"}; Funkcja oldCSVSplit robi to, co powinna, podzielona na ",". Następnie, w przyszłości, przecinki w cudzysłowie muszą zostać zignorowane, aby poprawnie uzyskać wpisy. Dodanie funkcji ignorowania pojedynczych/podwójnych cudzysłowów poważnie zmieniłoby logikę, z większą liczbą if i checks, a nawet stosem do śledzenia początkowych cudzysłowów. Czy takiego scenariusza można uniknąć? Jaka metoda może sprawić, że takie dodatki będą bezbolesne i mniej kompromitujące logikę działania?


title: Projekt bazy danych grupujący wiele tabel wraz z ich wspólnymi polami

text: Czy to prawidłowy projekt DB? Użytkownik może utworzyć organizację, połączyć z nią dowolną liczbę biur, mieć inwentarz zawierający elementy powiązane z organizacją lub biurem, mieć klientów dla swojej firmy itp. | użytkownicy | |taksonomia| |ustawienia| |-------| |--------| |--------| | identyfikator | | identyfikator | | identyfikator_podatku | | logowanie | | identyfikator_użytkownika| | tytuł | | itd.. | | rodzic | | wartość | | wpisz | | nazwa | | wpisz | Mam 3 tabele: 1. **Użytkownicy** zawierają wszystkie osoby, niezależnie od tego, czy są to „użytkownicy” czy „klienci”, ponieważ 2 typy to ludzie, _nawet jeśli klient nie ma dostępu do aplikacji_ \- ale jest człowiek i używa dokładnie tych samych pól, co użytkownik aplikacji (imię, nazwisko, adres, numer telefonu, numer SS itp.), a pola, których klient nie używa (login, hasło) i tak nie powinny zaszkodzić. 2. **Taksonomia** to większa sprawa, ponieważ w zasadzie wszystko, co użytkownik może stworzyć na stronie, jest zdefiniowane w tej tabeli. Typ jest ograniczony do wartości „organizacja, biuro, usługa, stan magazynowy, blog”. 3. **Ustawienia** to miejsce, w którym przechowywane są rozszerzone informacje o powyższych definicjach. Na przykład „taksonomia biura ma 3 inne wiersze w tytule ustawień: adres, godzina_otwarcia, godzina_zamknięcia itp.” więc za każdym razem, gdy pobieram biuro, obracam je wokół jego ustawień, aby utworzyć kompletną tabelę pakietu Office — „przestaw w kodzie, a nie sql” Tak więc w zasadzie taksonomia i ustawienia są DEFINICJAMI środowiska, które użytkownik tworzy dla siebie, jest o wiele więcej tabel, które zawierają elementy takie jak tabela "blog_posts", która zawiera posty dla taksonomii Post, lub "spotkania" dla spotkań użytkownika/klienta w taksonomii "biuro". itp... Powodem, dla którego wymyśliłem taki schemat, było 1. Lenistwo (po co tworzyć tabele dla każdej taksonomii, skoro mogę je wszystkie pogrupować?) Lubię mieć otwarte opcje. Ta baza danych działa dla mnie dobrze _na razie_. Czy jest to prawidłowy sposób projektowania DB? Czy istnieje jakiś wzorzec, który działa jak ten, czy jest coś, czego nie uwzględniłem i będzie mnie prześladować w najbliższej przyszłości, jeśli będę nadal używać tego schematu?


title: Typy obsługi dla rzeczywistych i złożonych macierzy w BLAS Wrapper

text: Pochodzę ze środowiska C i teraz uczę się OOP z C++. _Jako ćwiczenie_ (więc proszę nie mówić "to już istnieje"), chcę zaimplementować wrapper dla BLAS, który pozwoli użytkownikowi pisać algebrę macierzową w sposób intuicyjny (np. podobny do MATLAB) np.: A = B* C*D.Inverse() + E.Transpose(); Mój problem polega na tym, jak poradzić sobie z rzeczywistymi (R) i złożonymi (C) macierzami, z powodu „przekleństwa” C++, które pozwala robić to samo na N różnych sposobów. **Mam** jasne wyobrażenie o tym, jak to powinno wyglądać dla użytkownika: powinien być w stanie zdefiniować dwa oddzielnie, ale operacje zwracają typ zależny od typów operandów (R*R = R, C*C = C, R*C = C*R = C). Dodatkowo R można zamienić w C i na odwrót (po prostu ustawiając części urojone na 0). Rozważałem następujące opcje: * Ponieważ liczba rzeczywista jest szczególnym przypadkiem liczby zespolonej, odziedzicz `CMatrix` z `RMatrix`. Szybko to odrzuciłem, ponieważ oba musiałyby zwrócić różne typy dla tej samej funkcji pobierającej. * Dziedziczy `RMatrix` i `CMatrix` z `Matrix`. Jednak tak naprawdę nie mogę wymyślić żadnego wspólnego kodu, który zostałby umieszczony w `Matrix` (z powodu różnych typów zwracanych). * Szablony. Zadeklaruj `Matrix<T>` i zadeklaruj funkcję pobierającą jako `T Get(int i, int j)`, a funkcje operatorskie jako `Matrix *(Matrix RHS)`. Następnie wyspecjalizuj `Matrix<double>` i `Matrix<complex>` i przeciąż te funkcje. * Wtedy tak naprawdę nie widziałem, co bym zyskał dzięki szablonom, więc dlaczego nie zdefiniować „RMatrix” i „CMatrix” oddzielnie od siebie, a następnie przeciążyć funkcje w razie potrzeby? Chociaż ta ostatnia opcja ma dla mnie sens, w mojej głowie pojawia się denerwujący głos, który mówi, że to nie jest eleganckie, ponieważ są one wyraźnie powiązane. Może brakuje mi odpowiedniego wzorca projektowego? Więc myślę, że to, czego szukam, to albo rozgrzeszenie za zrobienie tego, albo porada, jak zrobić to lepiej.


title: Pliki .properties w zwykłym folderze src, dobrze?

text: Pracuję nad projektem Java o sugerowanej strukturze (osobne foldery src na pliki java i pliki zasobów). Po przeniesieniu plików właściwości związanych z wiadomościami / tekstem do tego folderu mechanizm uzewnętrzniania ciągów w środowisku Eclipse nie działa jak wcześniej. Zwykle po najechaniu kursorem na ciąg klucza w wywołaniu getString(""), podpowiedź pokazywała zawartość pliku właściwości z domyślnymi ustawieniami narodowymi. To było bardzo pomocne dla mnie osobiście. Wygląda na to, że ta funkcja działa tylko wtedy, gdy plik właściwości znajduje się w tym samym folderze źródłowym, co kod Java, który zarządza elementami BUNDLE_NAME. Czy mogę mocno argumentować za przeniesieniem pliku właściwości z powrotem do folderu src-, czy też powinny one być trzymane oddzielnie od plików źródłowych java? Cokolwiek jeszcze mogę spróbować, aby funkcja ponownie działała z nową strukturą?


title: importuj istniejący plik PDF za pomocą biblioteki TCPDF

text: Próbuję zaimportować istniejący plik pdf, aby podpisać go cyfrowo przy użyciu biblioteki TCPDF> $pdf = nowy TCPDF_IMPORT; $pdf -> importPDF('przykład.pdf'); kiedy to robię, otrzymuję coś takiego! [tutaj wprowadź opis obrazu](http://i.stack.imgur.com/Vn0xD.png) Jaki jest najlepszy sposób na zaimportowanie pliku PDF pod TCPDF


title: Do czego konkretnie odnosi się siła wyrazu?

text: Ekspresyjna moc jest zdefiniowana przez Wikipedię jako: > ..szerokość idei, które mogą być reprezentowane i komunikowane w tym > języku. Czy „idee” odnoszą się do rzeczy (operacji, struktur, algorytmów itp.?), które możemy zakomunikować _maszynie_? A może odnosi się do „ludzkich” pojęć, które można uchwycić i przekazać innym ludziom za pomocą języka? Jak ocenia się i mierzy siłę ekspresji? Na przykład, gdybyśmy wzięli język taki jak JavaScript i nałożyli dziwne ograniczenie na nazwy zmiennych, takie jak _zmienna musi być 8-cyfrową liczbą poprzedzoną podkreśleniem, dopasowując `/^_[0-9]{8}$/` _, czy stracilibyśmy siłę wyrazu? A może byłoby to tylko absurdalne i denerwujące? * * * **Aby wyjaśnić:** Czy moc wyrazu jest mierzona przez _ogólne_ pomysły właściwe dla języka: * liczby całkowite i łańcuchy * pętle * warunki warunkowe Czy liczba _specyficznych_ unikalnych pomysłów, które język może reprezentować: * liczby całkowite 1, 2 ... 2^32 * ciągi zawierające "co mówi lis?" i "wha pah pah pah pah pah pow" * dla każdej _żaby_ w _mojej kolekcji żab_ * jeśli _żaba_ jest _zielona czy coś_ to _zrób coś_


title: Czy mogę utworzyć zapytanie, które mi to umożliwi?

text: Mam tabelę, która przechowuje informacje o użytkowniku, jedna kolumna przechowuje ich identyfikator. Zaimplementowałem cztery różne atrybuty w tej samej tabeli, która przechowywała bit wskazujący, jakie operacje na plikach może wykonać użytkownik (odczyt, tworzenie, aktualizacja, usuwanie). Na szczęście zdałem sobie sprawę, że to straszna implementacja i zamiast tego utworzyłem cztery różne tabele z jedną kolumną (identyfikator użytkownika), która wskazywała, jakie działania mogą wykonać. Naprawdę chodzi o to, że denerwuje mnie przytłaczająca liczba zer. Oszczędza miejsce, nawet jeśli jest to znikome. Jednak ta baza danych jest również odpytywana przez aplikację w języku OOP, a jednym z często tworzonych obiektów jest Użytkownik. Ta klasa naturalnie przechowuje, jakie operacje na plikach może wykonać Użytkownik. W starej implementacji te pola obiektów (o wartościach logicznych) mogły być szybko wypełniane z tabeli użytkownika, ale nie teraz. Teraz jestem zdezorientowany, jak powinienem wypełnić te pola obiektów. Czuję, że powinienem być w stanie wykonać pojedyncze zapytanie informujące mnie, do których tabel uprawnień należy użytkownik, ale nie mogę znaleźć składni zapisu (jeśli w ogóle istnieje). Więc moje pytanie brzmi: czy istnieje sposób na wykonanie pojedynczego zapytania, aby dowiedzieć się, w których tabelach (które składają się tylko z jednej kolumny) występuje wartość? Czy też muszę odpytywać każdą tabelę niezależnie, aby wypełnić te pola obiektów?


title: Przechowywanie pojedynczej wartości do odczytu/zapisu dla usługi internetowej

text: Piszę serwis internetowy dla niektórych fizycznych wizualizacji danych, które zbieramy i pokazujemy w ramach projektu, który prowadzimy lokalnie http://tenisonroad.com/ Niektóre wizualizacje będą oparte na ekranie, a niektóre będą fizyczne (np. strona 25 tej prezentacji z Resonate 2014). Jedną z rzeczy, które zrobi moja usługa sieciowa, będzie sygnalizowanie wizualizacjom, kiedy należy zmienić zestaw danych. Aby to zrobić, mam jedną liczbę całkowitą, `DemoDataSetsDwellTime`. Zacząłem od myślenia SQL, aby dodać tę wartość do moich istniejących deklaracji tabel, np. CREATE TABLE ActiveDemoDwells (secondsDwell INT NOT NULL) Ale to wydaje się błędne - po co tworzyć tabelę, która będzie przechowywać tylko jedną liczbę, jeden rekord. Pomyślałem więc o użyciu ustawień aplikacji w pliku Web.config [Route("api/getdemodwelltime/")] [AcceptVerbs("GET", "POST")] public int GetDemoDwellTime() { return Int32.Parse(ConfigurationManager. AppSettings["DemoDataSetsDwellTimes"]); } z odpowiednim wpisem <appSettings> <add key="DemoDataSetsDwellTimes" value="20"/> </appSettings> Ale zdałem sobie sprawę (z tej odpowiedzi), że plik ustawień nie powinien być używany do zapisu danych, to więcej odpowiedni / przeznaczony do ustawień tylko do odczytu. Więc w końcu pomyślałem o użyciu prostego płaskiego pliku, tj. czegoś takiego [Route("api/getdemodwelltime/")] [AcceptVerbs("GET", "POST")] public int GetDemoDwellTime() { var lines = File.ReadAllLines ("ustawienia.txt"); var mieszkaCzasLinia = lines.TakeWhile(line => line.StartsWith("dwellTime=")).FirstOrDefault(); int wynik; return (dwellTimeLine != null && Int32.TryParse(dwellTimeLine.Remove(0, "dwellTime=".Length), wynik wyjściowy)) ? wynik : -1; } Ale może to spowodować bałagan w (mało prawdopodobne) zdarzeniu, w którym metody get i set są wywoływane jednocześnie (myślę, że nie jestem pewien, jak serwery WWW zarządzają dostępem do lokalnego systemu plików). Więc, które z nich jest „właściwym” podejściem, czy jest inne rozwiązanie, które przeoczyłem? 1. Przechowuj pojedynczą odczytywalną i zapisywalną wartość we własnej tabeli w bazie danych, 2. Przechowuj ją jako ustawienie aplikacji w pliku Web.config lub 3. Przechowuj w pliku tekstowym.


title: Diagram wyrażający równoległość w przebiegu procesu

text: Modeluję część architektury oprogramowania, w której kilka procesów działa jako przepływ pracy. Architektura obejmuje równoległość danych, w której pewien proces szeregowy wytwarza N fragmentów danych, które należy rozdzielić do N procesów, które muszą działać równolegle. Szukam dobrego sposobu wyrażenia równoległości na diagramie. Celem tego diagramu jest charakter informacyjny i zostanie uwzględniony w artykule o architekturze systemu. Nie musi to być model formalny ani ściśle przestrzegać UML. Narysowałem 3 sposoby reprezentowania równoległości, z których jeden (2) zasadniczo jest zgodny z diagramem aktywności UML 2.0. Chciałbym wiedzieć, który z nich, jeśli w ogóle, lepiej odda paralelizm. Jakie inne informacje powinien zawierać tego rodzaju diagram? ![Schemat równoległości](http://i.stack.imgur.com/Rkc7U.png)


title: Jaki jest dobry sposób na uporządkowanie moich klas interfejsu użytkownika?

text: Mam więc program, który ma swingowy GUI. (Java - duh!) Naprawdę, naprawdę nie sądzę, że sposób, w jaki teraz organizuję moje zajęcia, jest dobry, więc reorganizuję się od podstaw, aby postępować zgodnie z najlepszymi praktykami. **Zajęcia:** **UI** \- Wielki tatuś. Jego zamierzonym zastosowaniem jest najpierw stworzenie zawierającej JFrame, wywołanie konstrukcji wszystkich podkomponentów interfejsu użytkownika, a następnie dodanie ich w układzie obramowania do JFrame (czy byłoby mądrze utworzyć strukturę jako singleton? W końcu ja nie chcesz dwóch interfejsów użytkownika?) **RightPanel** , **LeftPanel** , **BottomPanel** , **TopPanel** , **CenterPanel**. Różne panele podkomponentów interfejsu użytkownika. Dla każdego z tych paneli mam klasę. **Menu** \- Pasek menu. Oddzielna klasa służąca do oddzielenia obowiązków menu od reszty kodu interfejsu użytkownika. Nie jestem do końca pewien, jak je ustrukturyzować w odniesieniu do siebie. Kilka możliwych opcji, o których myślałem (tylko to, co wymyśliłem, prawdopodobnie jest lepszy sposób na zrobienie tego wszystkiego): * Uczyń wszystkie klasy wewnętrzną klasą interfejsu użytkownika. Nie podoba mi się ta opcja z oczywistych powodów rozrostu kodu. * Spraw, aby każda klasa była niezależna od interfejsu użytkownika. Być może nawet sprawić, by każda klasa była singletonem, ponieważ zawsze potrzebowałbym tylko jednego interfejsu użytkownika wraz ze wszystkimi jego składnikami. * Miliony lepszych pomysłów, które nawet nie przyszły mi do głowy. Jaki jest dobry sposób, aby to zrobić? Nie jestem jeszcze ekspertem od wzorców projektowych. Nadal próbuję uzyskać wyjątkowo solidne zrozumienie koncepcji OOP. _(Niepotrzebne dodatkowe obawy):_ Dodatkowo, oczywiście potrzebuję sposobu na interakcję mojego programu z interfejsem użytkownika, aktualizowanie wyświetlanych informacji na wielu komponentach z jednego zdarzenia oraz na przyciski w różnych podkomponentach do wysłania do handlera, wysyłanie danych to sposób i być może nawet modyfikowanie innych rzeczy związanych z interfejsem użytkownika. Gdybyś mógł wymyślić skuteczny sposób na uporządkowanie tego, kochałbym cię jeszcze bardziej


title: Prawdziwe pułapki związane z wprowadzeniem F# do dużej bazy kodu i zespołu inżynierów

text: Jestem CTO w firmie programistycznej z dużą istniejącą bazą kodu (cały C#) i sporym zespołem inżynierskim. Widzę, że niektóre części kodu byłyby znacznie łatwiejsze do napisania w F#, co skutkowałoby szybszym czasem rozwoju, mniejszą liczbą błędów, prostszymi implementacjami równoległymi itp., w zasadzie ogólnym wzrostem produktywności mojego zespołu. Widzę jednak również kilka pułapek produktywności związanych z wprowadzeniem F#, a mianowicie: 1) Każdy musi nauczyć się F# i nie jest to tak trywialne, jak przejście z, powiedzmy, Javy na C#. Członkowie zespołu, którzy nie nauczyli się języka F#, nie będą mogli pracować na częściach F# bazy kodu. 2) Na chwilę obecną (grudzień 2010) pula programistów F# do wynajęcia nie istnieje. Przeszukuj różne bazy danych CV inżynierów oprogramowania pod kątem „F#”, ponieważ mniej niż 1% CV zawiera słowo kluczowe. 3) Wsparcie Wspólnoty od teraz (grudzień 2010) jest mniej dostępne. Możesz wygooglować prawie każdy problem w C# i znaleźć kogoś, kto już się tym zajął, nie tak jest z F#. Obsługa narzędzi innych firm (NUnit, Resharper itp.) jest również pobieżna. Zdaję sobie sprawę, że to jest trochę paragraf 22, tj. jeśli ludzie tacy jak ja nie używają F#, to społeczność i narzędzia nigdy się nie zmaterializują itp. Ale mam firmę do prowadzenia i mogę być nowatorski, ale nie krwawiąca krawędź. Jakieś inne pułapki, których nie rozważam? A może ktoś chce obalić pułapki, o których wspomniałem? Myślę, że jest to ważna dyskusja i chciałbym usłyszeć Twoje kontrargumenty na tym publicznym forum, które mogą znacznie przyczynić się do zwiększenia adopcji języka F# przez branżę. Dziękuję.


title: Dlaczego książki o programowaniu mają tak zwariowaną okładkę?

text: Wszystkie tytuły O'reilly i wiele innych książek o programowaniu zwykle mają typową ikonę dla swojej tajnej grafiki. Czasami są to minstrele lub postacie średniowieczne, a czasami wielbłądy i dziwne zwierzęta. Jest to jednak zjawisko stałe. Jak myślisz, dlaczego książki o programowaniu mają takie dziwne (interesujące) motywy na okładki?


title: Interpreter lub maszyna wirtualna, która nie wykonuje kodu bajtowego

text: Twórcy języka Dart twierdzą, że istnieje maszyna wirtualna, która wykonuje polecenia napisane w języku Dart. Jaka jest różnica między interpreterem a maszyną wirtualną, która wykonuje język? Do tej pory maszyny wirtualne, które znałem, takie jak Java Virtual Machine, Common Language Runtime i Dalvik, wszystkie wykonują kod bajtowy, który został wcześniej skompilowany z języka programowania. Jak działa maszyna wirtualna, która bezpośrednio wykonuje język programowania?


title: Jak zarządzać problemami github dla (priorytet itp.)?

text: Jestem nowy na github i szukam porady, jak radzić sobie z problemami. Jestem przyzwyczajony do priorytetów i innych opcji zamawiania, ale widzę, że żadne nie istnieją. Jak inni radzą sobie z problemami podczas cyklu życia błędu/funkcji? Z góry dziękuję.


title: Czy zespół jednoosobowy powinien stosować model procesu?

text: Zaraz zaczynam pracę nad moim największym projektem (około 6 miesięcy pracy w pełnym wymiarze godzin). W przypadku poprzednich projektów, ponieważ były krótkie, nigdy celowo nie używałem modelu, może to zrobiłem, ale nie zamierzałem tego robić. Czyli... Czy przed rozpoczęciem tego projektu warto wypróbować jakiś model? A jeśli tak, to jak myślisz, co przydałoby się zespołowi 1-osobowemu?


title: Oprogramowanie do kamer internetowych dla systemów Windows i Linux – możliwe?

text: moja niedowidząca siostra używa kamery internetowej z podstawką DIY jako cyfrowej lupy do czytania drukowanych tekstów. Chcieliśmy zainicjować projekt stworzenia oprogramowania - właściwie tylko zmodyfikowanej przeglądarki kamery internetowej (jak Cheese w Linuksie). Czy możliwe jest posiadanie jednego oprogramowania dla obu platform (Windows i Linux) = prawie ten sam kod, te same filtry i GUI, a także użycie strumienia wideo przy użyciu jakiegoś standardowego protokołu? Ponieważ większość ludzi używa Win, ale chcielibyśmy przede wszystkim wspierać Linuksa. Nie jestem pewien, czy jest to możliwe w oknach. Potrzebujemy oprogramowania, aby pobrać strumień wideo i zastosować niektóre kolory i inne efekty, takie jak te opisane w tym artykule. Pomysł polega na utrzymywaniu tylko jednej aplikacji (najlepiej open-source) z niewielkimi różnicami dla obu platform. W przypadku GUI, GTK wydaje się być optymalny, ponieważ jest dostępny dla oprogramowania ScreenReader. Taka aplikacja pomogłaby nie tylko osobom niedowidzącym, ale także starszym. Czy to możliwe, czy ten pomysł jest naprawdę głupi? dzięki: D


title: Czy używanie zagnieżdżonych bloków try-catch jest antywzorcem?

text: Czy to jest antywzór? Czy to dopuszczalna praktyka? try { //zrób coś } catch (wyjątek e) { spróbuj { //zrób coś w tej samej linii, ale będąc mniej ambitnym } catch (wyjątek ex) { spróbuj { //zrób minimum dopuszczalne } catch (wyjątek e1) { //Więcej próbnych chwytów? } } }


title: Narzędzie do analizy wykresów na dużą skalę

text: Jakie są najlepsze dostępne narzędzia/frameworki/biblioteki do implementacji i uruchamiania algorytmów na grafach? W szczególności potrzebuję narzędzia, które może wczytać zestaw węzłów, krawędzi i wartości przypisanych do tych krawędzi, a następnie wykonać na nich operacje. Znalazłem już R, ale zastanawiam się, czy jest dostępne narzędzie bardziej „przyjazne programistom”?


title: Darmowy język do tworzenia gier?

text: Więc staram się nauczyć mojego dużo młodszego kuzyna trochę programowania. Moją pierwszą myślą było coś w stylu Scratch lub Alice, ale było to kilka wad. * Wydaje się, że wszyscy są naprawdę zainteresowani programowaniem gier i tworzeniem gier wideo (ponieważ wszyscy uwielbiają grać w gry wideo, a jeśli chodzi o granie w gry wideo, granie we własne może być najbardziej satysfakcjonujące) — ale ani Alice, ani Scratch nie wydają się zaspokajać tworzenie gier * Alice i Scratch wydają się zbyt dziecinne, podczas gdy jestem pewien, że mój kuzyn z przyjemnością by się tym bawił, myślę, że szybko by się tym znudził * Chcę języka, który można wykorzystać do opracowania naprawdę fajnych rzeczy, które zrobią na nim wrażenie przyjaciele. Pamiętam, jak kiedyś pisałem BASIC i zapraszałem wszystkich moich przyjaciół i popisywałem się moim dziełem, i po prostu czuję, że Alice i Scratch po prostu nie przemawiają w ten sam sposób * Chcę języka, który wymaga od mojego kuzyna pisania kodu. To nie tylko dlatego, że uważam, że pisanie kodu jest dobrym przygotowaniem do innych języków programowania, ale dlatego, że daje mu możliwość poćwiczenia pisania i być może przyzwyczajenia się do niektórych nieco bardziej ezoterycznych znaków na klawiaturze. , dlatego nie chcę wybierać Alice lub Scratch. Nie chcę też wybierać języka takiego jak C czy Java, ani nawet Pythona czy Ruby. Mój kuzyn już mi powiedział, że lubi grać w gry wideo i chce tworzyć własne oraz że lubi używać komputerów. Moim zdaniem nawet prosty język, taki jak Python czy Ruby, po prostu zajmuje zbyt dużo czasu, aby zbudować fajne rzeczy. Najlepiej byłoby, gdyby usiadł, spędził dzień lub dwa (a może nawet tydzień, ale miejmy nadzieję, że mniej) i miał działającą, dwuwymiarową grę. Nie mówię, że nie możesz tego zrobić w Pythonie lub Ruby, ale mówię tylko, że byłoby to trudne dla początkującego programisty. Poza tym nie chcę nękać go całą informatyką, bo to może przyjść później. Chcę tylko pomóc mu stworzyć iskrę, a potem pozwolić mu kontynuować resztę ognia. Spojrzałem na języki takie jak Lua i chociaż wydaje się to powszechne w programowaniu gier, nie jestem pewien, czy jest to najlepszy wybór - ale jeśli myślicie inaczej, daj mi znać. Spojrzałem też na język taki jak Blitz i wygląda on naprawdę obiecująco (plus wypróbowałem go kilka lat temu i był naprawdę całkiem fajny). Minusem jest to, że muszę zapłacić, czemu zdecydowanie jestem przeciwny. Spojrzałem na SmallBasic, który wydaje się obiecujący i będę się nim zajmował. Ale niewiele zrobiłem (w rzeczywistości uruchamiam instalator podczas pisania tego, więc wkrótce zgłoszę swoje przemyślenia na ten temat). AKTUALIZACJA: Szybko spróbowałem SmallBasic i wydaje się to intrygujące, ale wydaje się też zupełnie inne w porównaniu z innymi językami - to nie jest zła rzecz, ale jest po prostu niezwykła. Z rzeczy, na które patrzyłem, Blitz jest nadal moim ulubionym, ale odmawiam tam pójścia ze względu na koszty. Ale w zasadzie, co myślicie o tym, co powiedziałem do tej pory, o językach, na które patrzyłem i czy znacie jakieś inne, dobre alternatywy? * * * AKTUALIZACJA: Oto, co zdecydowałem się zrobić... Zdałem sobie sprawę, że chociaż bardzo chciałbym pomóc mojemu kuzynowi, nie mogę być z nim przez cały czas i nie mogę mu pomagać za każdym razem on potrzebuje pomocy. Chciałem więc wybrać coś, co ma dobrą dokumentację, dobrą społeczność i dobrą książkę, którą może śledzić. W każdym razie wybrałem Pythona i Pygame. Python to język, który dobrze znam, a ponadto wiem, że wokół Pythona jest całkiem dobra (i całkiem duża) społeczność. Ponadto wiem, że dokumentacja Pythona jest dość kompletna i łatwa w nawigacji. Pygame posiada również doskonałą dokumentację i zestaw samouczków. Każę mu też używać/śledzić _Wymyśl własne gry komputerowe za pomocą Pythona_ , co wydaje się bardzo dobrą książką, kupiłem mu wersję papierową jako prezent na Boże Narodzenie, a dodatkowo wiem, że jego monitor nie jest wielki, a byłby niewygodne jest ciągłe przełączanie się między tekstem a edytorem. Myślę, że powinno iść dobrze! EDIT: Nie chcę sugerować, że mój wybór jest ostateczny lub poprawny. Myślę, że to najlepiej pasuje do tej sytuacji. Myślę, że każda osoba, która chce uczyć kogoś młodszego, powinna przejrzeć selekcję i znaleźć najlepsze rozwiązanie dla danej osoby, biorąc pod uwagę takie rzeczy jak wiek, poziom umiejętności i zainteresowania.


title: Dynamicznie zmieniaj interfejs użytkownika przy zmianach wartości w polu listy

text: Mam pole listy z kilkoma elementami, niech to będą serwery WWW (tomcat, iis itp.). Dla każdej wartości pola listy interfejs użytkownika musi mieć różne widoki. Na przykład, jeśli wybierzemy IIS, pojawią się pola nazwy użytkownika i hasła. Jeśli wybierzemy tomcat, pojawią się dodatkowe pola w zależności od systemu operacyjnego użytkownika - IP i port dla linuxa oraz ścieżka dla systemu Windows. Moje obecne podejście jest następujące: \- Utworzyłem dwa wyliczenia. Pierwsza dla różnych systemów operacyjnych (windows, linux, mac os x. Druga dla serwerów: iis, nginx, tomcat itp. \- Mam metodę, która zwraca wartość wyliczenia systemu operacyjnego. \- Kiedy użytkownik dokonuje wyboru, ja ustalam i na podstawie tego wyboru sprawdzam system operacyjny użytkownika.A potem ustalam, jakie elementy UI ukryć/dodać.Oto jakiś pseudo-kod do tego, co mam: //OS enum public enum OS { WINDOWS, LINUX, MAC_OS_X ; } //Serwery enum public enum SERWERY { TOMCAT, IIS, NGINX; } //Server Listbox Handler private void chooseServer() { //...pobierz wartość z listy switch(server) { case TOMCAT: changeUI(getOS( )); //getOS() zwraca wartość wyliczenia systemu operacyjnego break; case IIS: //IIS jest tylko dla systemu Windows changeUI(OS.WINDOWS); break; case NGNIX: //tymczasowa obsługa włączona ly linux changeUI(OS.LINUX); przerwanie; } } //UI zmienia się tutaj private void changeUI(OS) { switch (os) { case WINDOWS: userNameField.setEnabled(true); userPasswordField.setEnabled(prawda); ipField.setVisible(false); portField.setVisible(false); serverPathField.setVisible(prawda); przerwanie; case LINUX: userNameField.setEnabled(true); userPasswordField.setEnabled(prawda); ipField.setVisible(prawda); portField.setVisible(prawda); serverPathField.setVisible(false); przerwanie; przypadek MAC_OS_X: userNameField.setEnabled(false); userPasswordField.setEnabled(false); ipField.setVisible(false); portField.setVisible(false); serverPathField.setVisible(false); przerwanie; } } Nie podoba mi się moment, w którym zostaną dodane inne systemy operacyjne lub nowe serwery. Te operatory przełączników będą rosły coraz bardziej i stawały się bardziej skomplikowane, nie mówię o pielęgnowalności tego kodu. Czy istnieją jakieś standardowe podejścia (wzorce) do takich zadań, które pomagają uniknąć zmiany/jeżeli... w innym przypadku wzrostu i uczynić kod bardziej ogólnym, rozszerzalnym, czytelnym i możliwym do obsługi? * * * Próbowałem zaimplementować wzorzec Adaptera sugerowany przez Neila i uruchomiłem się w jakimś niejasnym momencie. Oto kilka pseudokodów: public abstract class EditorAdapter { protected boolean firstInit = true; public abstract void adapt (panel panelu); } //-------- public class IISWindowsEditorAdapter extends EditorAdapter { @Override public void adapt(Panel panelu) { if(firstInit) { firstInit = false; panel.add(Pole NazwaUżytkownika); //dodaj inne elementy } } } //----------- public class TomcatEditorAdapter extends EditorAdapter { private OS os = getOS(); @Zastąp public void adapt(panel panelu) { if(firstInit) { firstInit = false; if(OS == OS.LINUX) { panel.add(userNameField); //dodaj inne elementy } else if (OS == OS.WINDOWS) { //dodaj elementy } //... else if } } } //----------- public class Editor rozszerza DialogEditor { // rozszerza okno dialogowe z chronionym polem Panelu (podPanelem) public Editor() { initialize(); } public void zainicjuj() { //... main.add(createPanel()); //zabezpieczony VerticalPanel main; //... } public void utwórzPanel() { //Inicjalizacja listBox commonPanel.add(listBox); //panel ze wspólnymi elementami listBox.addClickHandler(new ChangeHandler() { @Override public void onChange(ChangeEvent event) { selectServer(); }); } //... dodaj inne wspólne elementy } private void selectServer() { //... get selection switch(server) { //Tutaj należy coś zrobić, aby kontrolować różne układy. //W tej chwili każdy wybór dodaje więcej elementów oprócz już istniejących //Wariantem jest możliwość tworzenia pól klas dla każdego adaptera i manipulowania nimi za pomocą leniwej inicjalizacji IIS: new WindowsEditorAdapter().adapt(subpanel); przerwanie; case TOMCAT: nowy TomcatEditorAdapter().adapt(podpanel); przerwanie; } } } Problem polega na tym, że w edytorze mam kilka tabel/paneli, które na końcu są dodawane do panelu głównego. Ogólnie wygląda to tak: * otwieramy okno dialogowe * wybieramy serwer WWW * niektóre elementy zmieniają się w oknie dialogowym zgodnie z naszym wyborem (a niektóre opcje mają wpływ na użytkownika systemu operacyjnego). Dlatego pierwsza inicjalizacja interfejsu użytkownika za pomocą adaptera nie działa tutaj. Przynajmniej nie zrozumiałem, jak zaimplementować ten adapter dla logiki powyżej.


title: Pytanie dotyczące refaktoryzacji i projektowania kodu

text: Załóżmy, że mam klasę ze stałym, statycznym polem końcowym. Wtedy chcę, aby w pewnych sytuacjach to pole było inne. Nadal może być ostateczna, ponieważ powinna zostać zainicjowana w konstruktorze. Moje pytanie brzmi, jakiej strategii powinienem użyć: 1. dodać tę wartość pola do konstruktora 2. utworzyć 2 podklasy, zastąpić oryginalne użycie pola jakąś chronioną metodą i nadpisać ją w podklasach 3. Albo utworzyć klasę złożoną, która będzie przechowywać instancję moja klasa w środku i jakoś zmienić tę wartość? Które podejście powinienem zastosować i dlaczego?


title: Najlepsze (najgorsze) logicznie niemożliwe zadanie przypisane do Ciebie?

text: Czym był projekt lub specyfikacja, który został umieszczony na twoim biurku, a którego nie można było zrobić? Jak wyjaśniłeś dylemat „zgłaszającemu”? Co ważniejsze, czy zrozumieli po tym, jak wyjaśniłeś podstawową kwestię?


title: Centralna obsługa wyjątków

text: Ostatnio myślałem o ogólnym ExceptionHandlerze, który mógłbym zainicjować raz w kontekście mojej aplikacji i wstrzyknąć go wszędzie. Pomysł, że będzie miał dość prosty interfejs z po prostu `public void handle(Exception ex)`, a następnie zgodnie z typem wyjątku powinien zdecydować, co zrobić, może po prostu go zalogować lub wyświetlić komunikat ostrzegawczy dla użytkownika, a może zabić całą aplikację. Pytanie brzmi, jaki jest najładniejszy sposób napisania takiego handlera bez wielu „instancji”? Niestety google daje mi tylko domyślny program obsługi wyjątków dla `RuntimeException`, który został wprowadzony w Javie 5. Moim pierwszym pomysłem jest stworzenie wyliczenia, które będzie miało pole Class dla typu wyjątku i zwróci odpowiedni punkt wykonania, na przykład konkretny procedura obsługi wyjątków, która również implementuje interfejs `public void handle(Exception ex)`, ale już z wymaganym rzutowaniem. **UPD** @alex Myślałem o tej opcji i był powód, dla którego nie czułem się z nią dobrze. Załóżmy, że mamy kod, który używa jcifs do dostępu do pliku. Prosta kopia do magazynu lokalnego będzie wymagać trzech opakowań wyjątków: _SMBException_ , _MalformedUrlException_ i _IOException_. Jeśli nie używam Javy 7, złapanie ich może spowodować trzykrotne powtórzenie _CenralExceptionHandler.handle(e);_ co nie jest tak czytelne. W każdym razie, kiedy o tym myślę, to moja wina, że nie mogę korzystać z Javy 7, więc może twoja sugestia jest najlepsza. Ale wciąż mam wątpliwości.


title: Generowanie losowego wyrażenia matematycznego

text: Mam w głowie ten pomysł, aby generować i oceniać losowe wyrażenia matematyczne. Postanowiłem więc spróbować i opracować algorytm, zanim go zakodowałem, aby go przetestować. ## Przykład: Oto kilka przykładowych wyrażeń, które chcę wygenerować losowo: 4 + 2 [łatwe] 3 * 6 - 7 + 2 [średnie] 6 * 2 + (5 - 3) * 3 - 8 [trudne] (3 + 4) + 7 * 2 - 1 - 9 [twarde] 5 - 2 + 4 * (8 - (5 + 1)) + 9 [twardsze] (8 - 1 + 3) * 6 - ((3 + 7) * 2) [trudniejsze] Te _łatwe_ i _średnie_ są dość proste. Losowe `int` są oddzielone losowymi operatorami, tu nic szalonego. Ale mam pewne problemy z rozpoczęciem pracy z czymś, co może stworzyć jeden z _trudnych_ i _trudniejszych_ przykładów. Nie jestem nawet pewien, czy jeden algorytm mógłby dać mi ostatnie dwa. ## Co rozważam: nie mogę powiedzieć, że _próbowałem_ te pomysły, bo tak naprawdę nie chciałem marnować dużo czasu na podążanie w kierunku, w którym od początku nie było szans na działanie. Ale mimo to pomyślałem o kilku rozwiązaniach: * Używając drzew * Używając wyrażeń regularnych * Używając szalonej pętli "for-type" (z pewnością najgorsze) ## Czego szukam: Chciałbym wiedzieć, w którą stronę Wierzę, że najlepiej jest iść między rozwiązaniami, które rozważałem, a własnymi pomysłami. Jeśli widzisz dobry sposób na rozpoczęcie, będę wdzięczny za prowadzenie we właściwym kierunku, np. z początkiem algorytmu lub jego ogólną strukturą. Zauważ też, że będę musiał ocenić te wyrażenia. Można to zrobić po wygenerowaniu wyrażenia lub podczas jego tworzenia. Jeśli weźmiesz to pod uwagę w swojej odpowiedzi, to świetnie. Nie szukam niczego związanego z językiem, ale dla przypomnienia, myślę o zaimplementowaniu go w Objective-C, ponieważ jest to język, z którym ostatnio najczęściej pracuję. Te przykłady nie zawierały operatora `:`, ponieważ chcę tylko manipulować `int`, a ten operator dodaje wiele weryfikacji. Jeśli twoja odpowiedź daje rozwiązanie obsługujące to, to świetnie. Jeśli moje pytanie wymaga wyjaśnienia, proszę pytać w komentarzach. Dzięki za pomoc.


title: Które kwestionuje programistę/sr. Programista (inny niż DBA, inżynier w bazie danych) powinien być w stanie odpowiedzieć na temat baz danych?

text: Jestem programistą Java i większość mojego doświadczenia dotyczy Java. Ale czasami podczas wywiadów spotykam się z pytaniami związanymi z bazą danych. Dlatego chciałem zapytać o to z punktu widzenia wywiadu, który kwestionuje programistę / seniora. Programista (inny niż DBA, non-Database Enigneer) powinien być w stanie odpowiedzieć na temat baz danych? Wiem, że to bardzo subiektywne pytanie, na które nie ma jednoznacznej odpowiedzi. Ale natknąłem się na podobne pytanie dotyczące J2EE z kilkoma naprawdę świetnymi odpowiedziami. W związku z tym niektóre konstruktywne sugestie, takie jak określone tematy, obszary, pytania, a nawet linki do zasobów, będą bardzo mile widziane.


title: Jakie są skuteczne sposoby na zdynamizowanie scrum na wcześniejszym etapie sprintu?

text: Mój zespół wykonuje dwutygodniowe sprinty, a zidentyfikowany przez nas trend (od którego chcemy odejść) polega na tym, że nasze codzienne scrumy w stójce są stosunkowo proste na początku sprintu, ale później przekształcają się w bardziej szaloną szamotaninę pod koniec. W pierwszym tygodniu programiści zajmują się kodowaniem, analitycy opracowują plany testów i odpowiadają na pytania programistów, a testerzy dopracowują istniejące testy i identyfikują obszary do przetestowania (ale niekoniecznie jeszcze do testowania, ponieważ nie ma jeszcze tak wielu gotowych do test). Blokery i pełzanie zasięgu pojawiają się zwykle w drugim tygodniu, a potem, gdy widzimy, jak blisko zbliżamy się do końca, zmuszamy się do podejmowania trudnych wyborów i bycia bardziej komunikatywnymi. Jak możemy „rozłożyć bogactwo” i zwiększyć ogólne „tempo” (chyba?) naszych scrumów od początku sprintu do końca?


title: Co szukać/badać, aby dowiedzieć się więcej o tym sposobie kodowania Javy?

text: Co powinienem szukać/badać, jeśli szukam sposobu na rozpoczęcie tłumaczenia tabel bazy danych na kod Java? Na przykład, jeśli mam relację jeden-wiele w bazie danych i chcę ją przetłumaczyć na kod java... jak nazywa się ten proces? Naprawdę szukam tylko zwykłego przykładu kodu Java, a nie żadnych narzędzi w tej chwili.


title: Jak wyświetlić listę właścicieli licencji open source

text: Udostępniam oprogramowanie opracowane na uniwersytecie na licencji Apache 2.0. Proszę o radę, kogo należy wymienić jako właściciela licencji. Czy wymienię tylko mojego szefa, który jest współautorem oprogramowania i utrzymuje bazę kodu, czy też mojego szefa i instytucję, czy tylko instytucję? Jestem skłonny podać nazwisko i instytucję mojego szefa, ale chciałem się dowiedzieć, że jest to dopuszczalna praktyka. Czy wiesz również, czy wiele osób jest kiedykolwiek wymienianych jako właściciele licencji?


title: Ponowna nauka programowania - jakie jest moje podejście?

text: Chcę poprzedzić to pytanie, mówiąc, że przeczytałem mnóstwo pytań na temat programistów prowadzących do tego. Byłem/jestem szczególnie dotknięty twierdzeniem, że PHP jako język cierpi z powodu słabego kodowania i swobody, jaką zapewnia. Od dawna zajmuję się kodowaniem PHP - wiele się nauczyłem jako praktykant starszego, ale głównie ograniczałem się do tworzenia stron internetowych. Mam wystarczającą wiedzę, aby szybko reagować na wyzwania i dostarczać bezpieczne rozwiązania internetowe. Zaczynam nieco bardziej zaznajomić się z MVC i OOP w ogóle, ale nie jest to dla mnie mocna strona. Obawiam się, że należę do kategorii ludzi, którzy dają PHP złą reputację - nie dla próżności, ale dlatego, że naprawdę chciałbym być najlepszym możliwym programistą/deweloperem. Mam zamiłowanie do nauki i myślę, że nadszedł czas, aby "ukończyć" głębsze zrozumienie programowania i ogólnie programowania, abym mógł doskonalić swoje umiejętności i _stać się lepszym programistą._ Myślę, że zaczyna się od nauki nowego język i budowanie projektu hobby z pewnym doświadczeniem znalezionym w literaturze - książki takie jak Code Complete, Clean Code i odniesienia do algorytmów. Chciałbym zintegrować ich najlepsze praktyki i porady. Są też kursy społecznościowe, ale obawiam się, że mogę wyjść poza niektóre zajęcia - są bardzo wprowadzające. Szukam sugestii i wskazówek, jak osiągnąć swój cel. Chciałbym otrzymać opinie od społeczności, abym mógł dowiedzieć się więcej i (mam nadzieję) być świetny. Edycja: rozważam zagłębienie się w Pythona lub Rubiego, ale _myślę_, że język nieskryptowy pomógłby mi bardziej. Jeśli masz tam jakąś sugestię, uwzględnij ją w swojej odpowiedzi :)


title: Strategia wersjonowania interfejsów usług JAR

text: Buduję architekturę zorientowaną na usługi złożoną (w większości) z usług opartych na Javie, z których każdy jest projektem Maven (w indywidualnym repozytorium) z dwoma podmodułami: wspólnym i serwerowym. Moduł `common` zawiera interfejsy usługi, które klienci mogą włączyć do swojego projektu w celu wykonywania wywołań usług. Podmoduł `server` zawiera kod, który faktycznie obsługuje usługę. Teraz próbuję wymyślić odpowiednią strategię wersjonowania interfejsów, tak aby każda zmiana interfejsu skutkowała nowym wspólnym jarem, ale zmiany na serwerze (o ile nie wpływają na kontrakt interfejsów) otrzymują ten sam wspólny słoik. Wiem, że jest to dość proste do zrobienia ręcznie (po prostu zwiększ wersję serwera i nie dotykaj zwykłej), ale ten projekt zostanie zbudowany i wdrożony przez serwer CI i chciałbym wymyślić strategię dla automatyczne ich wersjonowanie. Jedyne, co do tej pory udało mi się wymyślić, to interfejsy usługowe serwera CI `md5`.


title: MVC Czy modelka może wiedzieć COŚ o widoku?

text: Pracuję nad grą i bez wchodzenia w szczegóły używam "wzorców", "reguł" MVC lub jakkolwiek chcesz to nazwać, aby stworzyć grę. Widok zawiera wszystko, co potrzebne do rysowania rzeczy na ekranie, kontroler przekazuje dane wejściowe do modelu. A Model zawiera logikę gry. Oto mój problem, gra jest tworzona na urządzenia mobilne, które różnią się rozmiarami ekranu. Uważam, że mój model musi znać rozmiar widoku, aby mógł odpowiednio się do niego dostosować. Myślałem o tym przez chwilę, że mógłbym umieścić wszystkie korekty w widoku, ale wydaje się po prostu nieefektywne, aby za każdym razem przekładać pozycjonowanie modelu na wymagane pozycjonowanie widoku. Jeśli modelka zna rozmiar, wystarczy, że dopasuje się tylko raz. Więc moje pytanie brzmi, czy mogę przekazać rozmiar widoku do modelu bez „złamania” MVC? Osobiście uważam, że nadal są w ten sposób oddzielone, ponieważ rozmiar to tylko liczba, nadal mogę zmienić widok w dowolnym momencie, o ile ma rozmiar. Ale chciałem uzyskać odpowiedź społeczności na ten temat, ponieważ nie widziałem wielu dyskusji na temat MVC używanego w grze. (A żeby było jasne, nie chcę odpowiedzi, dlaczego nie powinienem używać go w grze, ale czy łamię MVC, informując go o rozmiarze widoku) EDYCJA - Więcej szczegółów na temat potrzeb gry i dlaczego chciałem przekazać widok. Niektóre pozycje obiektów muszą być ustawione względem krawędzi ekranu (takie jak elementy interfejsu użytkownika), aby pojawiały się względnie w tym samym miejscu. Rozmiary duszków nie są rozciągane, jeśli rozmiar okna jest szerszy, na przykład ekran iPhone'a 5. Zostaną one po prostu umieszczone w stosunku do krawędzi ekranu. .Jeżeli dałem to widokowi, aby to obsłużyć, będę potrzebował flagi mówiącej, że ten element jest pozycjonowany powiedzmy x liczba pikseli od GÓRA DOLNA PRAWO LEWA. Następnie pozwól, aby widok narysował go z tymi informacjami. Jest to do zaakceptowania, chciałem tylko wiedzieć, czy jest lepszy sposób, pozostając nadal MVC, ponieważ wydaje się, że w ten sposób będzie powtarzać logikę w kółko, gdzie tak jakbym znał rozmiar widoku w modelu, mógłbym przekonwertować wszystkie względne pozycje na pozycje bezwzględne w jednym przebiegu, ale z tym muszę przekonwertować przy każdej aktualizacji na ekran.


title: Jak powinienem nauczyć się Pythona do tworzenia stron internetowych?

text: Chcę dowiedzieć się o tworzeniu stron internetowych w Pythonie; jak mam się do tego zabrać? Nie jestem nowy w programowaniu, ponieważ mam wiedzę w C#, ASP.NET, HTML i CSS. Jakie zasoby powinienem zbadać? Jakiś czas temu rzuciłem okiem na dokumentację Pythona i Dive Into Python, chociaż ta, którą przeczytałem, była nowszą wersją hostowaną na stronie .org, która wydaje się być niedostępna w tej chwili. Dlatego znam pewną składnię Pythona, operatory, listy itp. Najważniejsze jest to, że chcę uczyć się o tworzeniu stron internetowych, a jednocześnie uczyć się Pythona ogólnie; Nie chcę wracać do dokumentacji czy innych rzeczy. **UWAGA: Możesz założyć, że nie mam żadnej wiedzy w Pythonie, ponieważ to, co wiem, nie jest takie wspaniałe.**


title: Znajdowanie wszystkich punktów, które znajdują się w jednej linii w układzie współrzędnych 2D

text: Mam tablicę punktów. Każdy punkt ma dwa człony - x i y. Chcę uzyskać dowolne 3 punkty i sprawdzić, czy znajdują się one w jednej linii w układzie współrzędnych 2D. Na przykład - 1x2, 2x3, 5x6: ![Obraz](http://i.stack.imgur.com/CvUsI.png) Jeśli tak, chcę wyszukać inny punkt w mojej tablicy, który znajduje się w tej linii ( linia nie ma początku ani końca). I tak dalej, chociaż nie sprawdziłem wszystkich pozostałych punktów. Następnie chcę sprawdzić następną kombinację 3 punktów i powtórzyć, podczas gdy wszystkie 3-punktowe permutacje nie są sprawdzane. Dla każdej z tych permutacji chcę powiedzieć, ile punktów znajduje się w jednej linii (0 - jeśli te 3 punkty nie są położone w jednej linii, 3 - jeśli są, 4 - jeśli są i to jest inny punkt, który również znajduje się w tej linii itp.). Czy istnieje skuteczny algorytm, który może to zrobić w złożoności równej lub mniejszej niż O(n3)?


title: Karanie niewystarczających pracowników, jak tego uniknąć?

text: Kierownictwo mojej firmy chce potrącać z pensji pracowników o niższych wynikach. Jestem członkiem Komitetu ds. Strategii Podstawowej i oni również chcą mojej opinii. Uważam, że przepustowość pracownika zależy od wielu rzeczy, takich jak przydzielona mu konkretna praca, inni członkowie jego zespołu, inne powody itp. Takie kary będą demoralizujące dla ludzi. Jak mogę przekonać kierownictwo, żeby tego nie robiło?


title: Jak możemy dystrybuować aplikację kliencką do innych firm spoza USA?

text: Pracuję nad aplikacją, która działa jako klient naszego serwisu internetowego. Sprzedajemy tę usługę firmom i chcemy bezpłatnie rozpowszechniać aplikację wśród ich pracowników. Aplikacja zostanie dostosowana do każdego klienta. Gdybyśmy byli w Stanach Zjednoczonych, rozumiem, że poprosilibyśmy ich o zapisanie się do programu zakupów zbiorczych i przesłanie wersji naszej aplikacji dla każdej firmy do dystrybucji w przedsiębiorstwach po bezpłatnej cenie. Jednak firmy nie są wszyscy w USA, więc nie mogą zapisać się do programu VPP. Mają tysiące pracowników, więc kody promocyjne nie wystarczą. Jakie są nasze alternatywy?


title: Jak nazwać coś, co może być zarówno użytkownikiem, jak i grupą użytkowników?

text: Moim pomysłem jest stworzenie abstrakcyjnej klasy/interfejsu, który można rozszerzyć na użytkownika i grupę użytkowników. W rzeczywistości istnieje dobry powód, dla którego ten interfejs łączy grupy z użytkownikami, ponieważ jedyną różnicą między użytkownikiem a grupą jest to, że możesz zalogować się jako użytkownik, a nie możesz jako grupa, oraz że grupa może zawierać wielu użytkowników lub grup. Uprawnienia i inne rzeczy są obsługiwane bez zwracania uwagi na to, że jest to użytkownik lub grupa.


title: Jak zaprojektować przypadki testowe, aby pokryć kod oparty na zdarzeniach losowych?

text: Na przykład, jeśli kod generuje losową wartość int od 0 do 10 i przyjmuje inną gałąź dla każdego wyniku, w jaki sposób można zaprojektować zestaw testów, aby zagwarantować 100% pokrycie instrukcji w takim kodzie? W Javie kod może wyglądać następująco: int i = new Random().nextInt(10); switch(i) { //11 opis przypadku }


title: Uniwersytet uczy C++ w stylu DOS, jak sobie z tym radzić

text: Programowałem przez wiele lat, ale chciałem uzyskać dyplom, aby stać się bardziej zdolnym do pracy. Będąc już raz na uniwersytecie, nie wybrałem pełnego 5-letniego kierunku informatyki, ale krótszy, bardziej praktyczny program _inżynierii oprogramowania_. Spodziewałem się, że może koncentrować się bardziej na konkretnych umiejętnościach niż na teorii, ale nadal uważałem, że uniwersytety i profesorowie lubią, aby rzeczy były poprawne, formalne, akademickie. To wciąż nauka, prawda? Źle - byłem zaskoczony tym, jak niechlujnie było wiele kursów informatycznych. Na wstępnym kursie C++ zostaliśmy przetestowani na frazesach, takich jak „dlaczego globalne są złe” i „dlaczego stałe są dobre”, po napisaniu 1-2 programów. Przypadkowe anegdoty bez odpowiedniego kontekstu. Materiały informacyjne zawierały `system(pause/cls)`, `getch` i nagłówki takie jak `conio.h` i `iodos.h`. Jednym z zadań było wydrukowanie "znaków ASCII" od 32 do **255** , ze zrzutem ekranu pokazującym taką tabelę wydrukowaną przy użyciu strony kodowej Windows-1252, ale bez wzmianki o kodowaniu. **Pytanie** : kiedy wydaje się, że uniwersytet/profesor używa gorszych i/lub przestarzałych narzędzi i metod, a nauczane treści są niepoprawne, jak sobie z tym radzisz, jeśli w ogóle, konstruktywnie i z szacunkiem? Niektóre odpowiedzi wskazują, że należy wyjść poza programowanie, ponieważ jest to tylko narzędzie do nauki takich tematów, jak struktury danych i algorytmy. Zgadzam się z tym pomysłem, ale w tym przypadku za kiepskim stylem tak naprawdę nie było takiego planu. Większość kursów po prostu uczyłaby innego „narzędzia” bez zbytniej teorii lub „dużego obrazu”. Często wydawało się, że zostały szybko zebrane tylko po to, by zaoferować taki kurs. * * * Zostałem z tym i w końcu ukończyłem szkołę. Jakość pozostała dość niska przez cały czas (z kilkoma wspaniałymi wyjątkami), a kilku innych uczniów narzekało na nią. Zgodnie z oczekiwaniami nauczyłem się znacznie więcej z projektów osobistych i pracy w niepełnym wymiarze godzin niż ze szkoły, _jednak_ proces kończenia szkoły i etykietka „uczeń oprogramowania” wydają się same w sobie tajemniczo przydatne!


title: Najlepszy sposób na załadowanie ustawień aplikacji

text: Prostym sposobem zachowania ustawień aplikacji Java jest plik tekstowy z rozszerzeniem ".properties" zawierający identyfikator każdego ustawienia związanego z określoną wartością (ta wartość może być liczbą, ciągiem, datą itp.) . C# używa podobnego podejścia, ale plik tekstowy musi mieć nazwę „App.config”. W obu przypadkach w kodzie źródłowym należy zainicjować określoną klasę do odczytu ustawień: ta klasa ma metodę, która zwraca wartość (jako ciąg) skojarzoną z określonym identyfikatorem ustawienia. // Przykład Java Properties config = new Properties(); config.load(...); String valueStr = config.getProperty("port nasłuchiwania"); // ... // Przykład C# NameValueCollection setting = ConfigurationManager.AppSettings; string valueStr = ustawienie["port-nasłuchiwania"]; // ... W obu przypadkach powinniśmy parsować ciągi wczytane z pliku konfiguracyjnego i przypisać przekonwertowane wartości do powiązanych wpisanych obiektów (w tej fazie mogą wystąpić błędy parsowania). Po kroku parsowania musimy sprawdzić, czy wartości ustawień należą do określonej domeny ważności: np. maksymalna wielkość kolejki powinna być wartością dodatnią, niektóre wartości mogą być powiązane (przykład: min < max ), i tak dalej. Załóżmy, że aplikacja powinna załadować ustawienia zaraz po uruchomieniu: innymi słowy, pierwszą operacją wykonywaną przez aplikację jest załadowanie ustawień. Wszelkie nieprawidłowe wartości ustawień muszą zostać automatycznie zastąpione wartościami domyślnymi: jeśli tak się stanie z grupą powiązanych ustawień, wszystkie te ustawienia mają wartości domyślne. Najłatwiejszym sposobem wykonania tych operacji jest stworzenie metody, która najpierw analizuje wszystkie ustawienia, następnie sprawdza załadowane wartości, a na końcu ustawia dowolne wartości domyślne. Jednak konserwacja jest trudna, jeśli zastosujesz takie podejście: wraz ze wzrostem liczby ustawień podczas tworzenia aplikacji, coraz trudniej jest zaktualizować kod. Aby rozwiązać ten problem, pomyślałem o użyciu wzorca _Metoda szablonu_ w następujący sposób. public abstract class Setting { protected abstract bool TryParseValues(); chronione abstrakcyjne bool CheckValues(); public abstract void SetDefaultValues(); /// <summary> /// Metoda szablonu /// </summary> public bool TrySetValuesOrDefault() { if (!TryParseValues() || !CheckValues()) { // błąd parsowania lub błąd domeny SetDefaultValues(); zwróć fałsz; } zwróć prawdę; } } public class RangeSetting : Setting { private string minStr, maxStr; bajt prywatny min, max; public RangeSetting(string minStr, maxStr) { this.minStr = minStr; this.maxStr = maxStr; } protected override bool TryParseValues() { return (byte.TryParse(minStr, out min) && byte.TryParse(maxStr, out max)); } protected override bool CheckValues() { return (0 < min && min < max); } publiczne nadpisanie void SetDefaultValues() { min = 5; maks. = 10; } } Problem polega na tym, że w ten sposób musimy stworzyć nową klasę dla każdego ustawienia, nawet dla pojedynczej wartości. Czy istnieją inne rozwiązania tego rodzaju problemu? Podsumowując: 1. Łatwa konserwacja: na przykład dodanie jednego lub więcej parametrów. 2. Rozszerzalność: pierwsza wersja aplikacji mogła odczytać pojedynczy plik konfiguracyjny, ale późniejsze wersje mogą dawać możliwość konfiguracji wielu użytkowników (administrator ustawia podstawową konfigurację, użytkownicy mogą ustawiać tylko niektóre ustawienia, itp.). 3. Projektowanie obiektowe.


title: Abstrakcyjna klasa bazowa z interfejsami jako zachowaniami?

text: Muszę zaprojektować hierarchię klas dla mojego projektu C#. Zasadniczo funkcje klas są podobne do klas WinForm, więc weźmy jako przykład zestaw narzędzi WinForms. (Nie mogę jednak używać WinForm ani WPF). Istnieje kilka podstawowych właściwości i funkcji, które każda klasa musi zapewnić. Wymiary, pozycja, kolor, widoczność (true/false), metoda Draw itp. Potrzebuję porady projektowej Użyłem projektu z abstrakcyjną klasą bazową i interfejsami, które tak naprawdę nie są typami, ale bardziej przypominają zachowania. Czy to dobry projekt? Jeśli nie, jaki byłby lepszy projekt. Kod wygląda tak: abstract class Control { public int Width { get; ustawić; } public int Wzrost { get; ustawić; } public int BackColor { get; ustawić; } public int X { get; ustawić; } public int Y { get; ustawić; } public int BorderWidth { get; ustawić; } public int BorderColor { get; ustawić; } public bool Widoczny { get; ustawić; } public Rectangle ClipRectangle { get; zestaw chroniony; } streszczenie public void Draw(); } Niektóre kontrolki mogą zawierać inne kontrolki, niektóre mogą być zawarte tylko (jako dzieci), więc myślę o stworzeniu dwóch interfejsów dla tych funkcji: interface IChild { IContainer Parent { get; ustawić; } } interfejs wewnętrzny IContainer { void AddChild<T>(T dziecko) gdzie T : IChild; void RemoveChild<T>(T dziecko) gdzie T : IChild; IChild GetChild (indeks int); } WinForms kontroluje wyświetlanie tekstu, więc to również trafia do interfejsu: interface ITextHolder { string Text { get; ustawić; } int TextPositionX { get; ustawić; } int PozycjaTekstY { get; ustawić; } int Szerokośćtekstu { get; } int WysokośćTekstu { get; } void DrawText(); } Niektóre kontrolki mogą być zadokowane wewnątrz kontrolki nadrzędnej, więc: enum Dokowanie { Brak, Lewo, Prawo, Góra, Dół, Wypełnienie } interface IDockable { Dokowanie { get; ustawić; } } ...a teraz utwórzmy kilka konkretnych klas: class Panel : Control, IDockable, IContainer, IChild {} class Label : Control, IDockable, IChild, ITextHolder {} class Przycisk : Control, IChild, ITextHolder, IDockable {} class Window : Control, IContainer, IDockable {} Pierwszym "problemem", jaki przychodzi mi do głowy, jest to, że interfejsy są w zasadzie nieodwracalne po opublikowaniu. Załóżmy jednak, że będę w stanie sprawić, by moje interfejsy były wystarczająco dobre, aby uniknąć konieczności wprowadzania w nich zmian w przyszłości. Kolejną kwestią, którą widzę w tym projekcie, jest to, że każda z tych klas musiałaby zaimplementować swoje interfejsy i szybko nastąpi powielenie kodu. Na przykład w Label i Button metoda DrawText() pochodzi z interfejsu ITextHolder lub w każdej klasie pochodzącej z zarządzania dziećmi przez IContainer. Moim rozwiązaniem tego problemu jest zaimplementowanie tej "duplikowanej" funkcjonalności w dedykowanych adapterach i przekazywanie do nich połączeń. Tak więc zarówno Label, jak i Button miałyby element TextHolderAdapter, który byłby wywoływany wewnątrz metod dziedziczonych z interfejsu ITextHolder. Myślę, że ten projekt powinien uchronić mnie przed posiadaniem wielu wspólnych funkcjonalności w klasie bazowej, które mogłyby szybko zostać rozdęte wirtualnymi metodami i niepotrzebnym „kodem szumu”. Zmiany zachowania zostałyby osiągnięte przez rozszerzenie adapterów, a nie klas pochodnych Control. Myślę, że nazywa się to schematem „Strategia” i choć na ten temat są miliony pytań i odpowiedzi, to chciałbym prosić o opinie na temat tego, co biorę pod uwagę przy tym projekcie i jakie wady można w nim wymyślić. moje podejście. Dodam, że istnieje prawie 100% szansa, że przyszłe wymagania będą wymagać nowych klas i nowych funkcjonalności.


title: Jakie problemy skłaniają ludzi do używania kodowań specyficznych dla języka japońskiego zamiast Unicode?

text: W pracy natykam się na wiele japońskich plików tekstowych w Shift-JIS i innych kodowaniach. Powoduje wiele problemów z mojibake (nieczytelnymi znakami) dla wszystkich użytkowników komputerów. Unicode miał rozwiązać ten problem poprzez zdefiniowanie pojedynczego zestawu znaków dla wszystkich języków, a serializacja UTF-8 jest zalecana do użycia w Internecie. Dlaczego więc nie wszyscy przechodzą z kodowania specyficznego dla języka japońskiego na UTF-8? Jakie problemy lub wady UTF-8 powstrzymują ludzi? EDYCJA: W3C wymienia niektóre znane problemy z Unicode, czy to też może być powód?


title: Gdzie jest problem z wyjściem formularzy internetowych?

text: Większość z Was już wie, że dane wyjściowe formularzy internetowych ASP.NET są dość brzydkie w porównaniu z danymi wyjściowymi ASP.NET MVC. Moje pytanie brzmi, co może powodować problemy z danymi wyjściowymi formularzy sieci Web ASP.NET dla użytkowników końcowych? Czy to powolne przeglądanie i czas wczytywania?, ale czy uważasz, że może to stanowić problem w dzisiejszych szybkich połączeniach? Chcę wybrać łatwy sposób tworzenia stron internetowych i uważam, że formularze internetowe ASP.NET są łatwiejsze niż ASP.NET MVC i zastanawiam się, czy problemy z wyjściem (brzydki HTML itp.) mogą być dla mnie prawdziwym problemem?


title: Certyfikacja Sun Java

text: > **Możliwy duplikat:** > Co sądzisz o egzaminie Oracle Master (stary Sun Certified Java > Developer)? Jestem absolwentem. Nie mam doświadczenia zawodowego, więc zastanawiałem się nad uzyskaniem certyfikatu Sun **Java**, aby wzmocnić swój profil. Kosztuje to chyba około 200 $. Zastanawiałem się więc, czy warto uzyskać certyfikat i czy dodaje wartość. Dziękuję Ci


title: architektura aplikacji z jednym lub kilkoma plikami PDF

text: Piszę aplikację na iPada. Głównym widokiem aplikacji będzie plik PDF. Poczyniłem znaczne postępy w analizowaniu zawartości pliku PDF. Aplikacja będzie miała również co najmniej dwa „widoki z boku”. Te widoki boczne mogą, ale nie muszą, być sterowane przez pliki PDF. To jest część tego, co próbuję rozgryźć. Główny plik PDF będzie zawierał ukryte przyciski, które powodują, że widok z boku pokazuje pewne rzeczy. Na przykład nad nazwą „Lincoln” może znajdować się przycisk, który wyświetla widok z boku na temat Abe Lincolna, inny przycisk nad nazwą „Waszyngton”, który wyświetla widok z boku na temat Jerzego Waszyngtona i tak dalej. Tworzenie tych ukrytych przycisków powinno opierać się na danych w głównym pliku PDF. Myślę, że to oznacza adnotacje. Dwa pytania: 1) Czy istnieje jeden rodzaj adnotacji, który wolę od innego? Widzę opcje, które obejmują akcje, identyfikatory URI i może linki – ale ostatnia z nich może być skomplikowana przez liczne wewnętrzne linki w pliku PDF. 2) Czy do widoków z boku powinienem używać plików PDF? Jakie są argumenty, za i przeciw? Rozważania: A) Łatwość późniejszego przeniesienia aplikacji na inne platformy B) Piractwo. Wolałbym, aby ktoś, kto dostał moje pliki PDF, nie mógł odtworzyć aplikacji bez pracy. EDYCJA: odpowiadanie na pytania postawione w odpowiedzi: Przez „akcję” mam na myśli „akcję PDF”. Zobacz sekcję 12.6 [http://www.adobe.com/devnet/pdf/pdf_reference.html](specyfikacja PDF). Główny widok to plik PDF, ponieważ jest to format, który autor treści wygodnie tworzy. Ale ponieważ ten plik PDF zostanie osadzony w aplikacji, muszę założyć, że może uciec „na wolność”.


title: Firma odchodzi od rozwiązania IBM Rational… jakieś dobre alternatywy?

text: Odchodzimy od produktów IBM Rational ze względu na naprawdę wysokie koszty. Staram się znaleźć alternatywne rozwiązania, które z grubsza pokryją wszystkie funkcjonalności linii produktów IBM Rational. Dołączyłem listę wszystkich aktualnie używanych produktów: 1. IBM Rational ClearCase MultiSite 2. IBM Rational ClearQuest 3. IBM Rational Performance Tester 4. IBM Rational Requistite Pro 5. IBM Rational SoDA 6. IBM Rational Purify dla systemów Linux i UNIX Do tej pory Powiedziano mi, że SVN / Team Foundation Server / Serena PVCS to przyzwoita alternatywa, ale podejrzewam, że mogę potrzebować więcej narzędzi, aby obsłużyć prawie wszystko, co oferuje IBM. Wszelkie zalecenia / opinie byłyby bardzo mile widziane.


title: Postępowanie z listami uaktualnień

text: Jestem ciekawy, jak inni radzą sobie z listami uaktualnień i sugestiami dotyczącymi rozwoju (np. popularne witryny społecznościowe) W tej chwili, gdy użytkownik zgłasza sugestie dotyczące uaktualnienia/funkcji, umieszczamy je na liście „niezaplanowanych” zweryfikowane w przyszłości, gdy zaczniemy ustalać kolejny zestaw harmonogramu.


title: Czy struktura używana na tych stronach internetowych jest wzorcem projektowym?

text: Chcę wiedzieć, czy struktura witryny ASP.NET, nad którą pracuję, używa wzorca projektowego dla jego stron sieci Web. Jeśli jest to wzorzec projektowy, jak się nazywa? Strony internetowe mają następującą strukturę: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/yW8BF.png) Strona UserDetails (UserDetails.aspx) - zawiera kontrolkę użytkownika UserDetailsController.ascx. UserDetailsController.ascx zawiera kontrolki użytkownika podrzędnego, takie jak UserAccountDetails.ascx i UserLoginDetails.ascx itp. Każda kontrolka użytkownika podrzędnego zawiera niewielką ilość kodu/logiki, kontrolki użytkownika „kontrolera”, które obsługują te kontrolki użytkownika podrzędnego (tj. UserDetailsController.ascx) wydają się wywoływać kod reguł biznesowych i przekaż dane do kontroli użytkownika podrzędnego. Czy to jest wzorzec projektowy? Jak to jest nazywane?