title: Wyjaśnienie fałszywych wybudzeń brzmi jak błąd, którego po prostu nie warto naprawiać, prawda?

text: Zgodnie z artykułem Wikipedii na temat fałszywych przebudzeń > „wątek może zostać wybudzony ze stanu oczekiwania, mimo że żaden wątek > nie sygnalizował zmiennej warunku”. Chociaż wiedziałem o tej 'cesze', nigdy nie wiedziałem, co ją właściwie spowodowało, dopóki w tym samym artykule > „Nieprawdziwe wybudzenia mogą brzmieć dziwnie, ale w niektórych systemach wieloprocesorowych > uczynienie wybudzenia warunkowego całkowicie przewidywalnym może znacznie spowolnić > zmienną warunku operacji." Brzmi jak błąd, którego po prostu nie warto naprawiać, prawda?


title: Kiedy rezygnujesz ze wsparcia dla starej wersji programu?

text: .NET 1.1. IE6. Java 1.1. Wszystko to są stare, starożytne wersje oprogramowania, które z jakiegoś powodu nadal istnieją w organizacjach, które zbyt boją się uaktualniać, nie lubią zmian lub przestrzegają zasady „Jeśli nie jest zepsute, nie naprawiaj tego”. Ale kiedy rezygnujesz ze wsparcia dla tak starych wersji oprogramowania? Co decyduje o tym, kiedy platforma jest za stara?


title: Formatowanie „złożonej” matematyki

text: **Uwaga:** przez „złożoną” matematykę rozumiem równanie z wieloma etapami i szeroką mieszanką operatorów. Programista _powinien_ znać kolejność, w jakiej operatory są oceniane w równaniu. Jednak przyjrzenie się równaniu takiemu jak: wynik = wartość_1 + wartość_2 * wartość_1 + wartość_3 / wartość_4 % wartość_5 może być kłopotliwe; Jedną z opcji jest zapisanie równania w wielu krokach, takich jak: część1 = wartość_2 * wartość_1; część1 += wartość_1; część2 = wartość_4 % wartość_5; część2 = wartość_3 / część2; wynik = część1 + część2; Inną opcją jest sformatowanie oryginalnego równania w nawiasach, takich jak: wynik = (wartość_1 + (wartość_2 * wartość_1)) + (wartość_3 / (wartość_4 % wartość_5)); Kiedy masz do czynienia ze złożoną matematyką w kodzie, jak zwykle formatujesz ją, aby zmaksymalizować czytelność?


title: Kiedy jest odpowiedni czas na zmianę języka programowania?

text: Wcześniej pracowałem jako Java Developer, a teraz skończyłem umowę z poprzednim pracodawcą. Ale teraz, gdy szukam nowej pracy, wydaje się, że wiele możliwości nie obejmuje Javy tak bardzo, jak inne języki. Bardzo lubię Javę i używam jej od czasów studiów. Ale wygląda na to, że muszę nauczyć się nowego języka, żeby mieć nową pracę. Kiedy jest właściwy czas, aby rozważyć zmianę języka, którego używam?


title: Jak radzić sobie z powtarzalnym kodem zajmującym się właściwościami obiektów?

text: Co jakiś czas wpadam w sytuację, w której muszę zmapować zestaw właściwości z jednego obiektu na inny obiekt innej, niepowiązanej klasy. Zestaw właściwości jest na tyle duży, że ręczne wpisywanie kodu jest uciążliwe. Taki kod zasady anty-DRY jest wynikiem: if (objectOfType1.getPropertyA() != null){objectOfType2.setSimilarlyNamedPropertyA(someMethod(objectOfType1.getPropertyA()));} if (objectOfType1.getPropertyB() != null){ objectOfType2.setSimilarlyNamedPropertyB(someMethod(objectOfType1.getPropertyB()));} ...pomijam niektóre wiersze... if (objectOfType1.getPropertyZ() != null){objectOfType2.setSimilarlyNamedPropertyZ(someMethod(objectOfTypeZ())); } Pisanie, a nawet patrzenie na kod w ten sposób, jest ogromnym irytującym zwierzakiem, ale mam ochotę używać biblioteki introspekcji, takiej jak BeanUtils, aby uniknąć posiadania kilku takich metod, które irytowałyby moich współpracowników. Zająłem się pisaniem jednorazowych skryptów do generowania takiego kodu dla mnie. Jak inni programiści rozwiązali ten problem? **Edytuj** : Oto kod przetłumaczony na użycie refleksji/introspekcji. Pewnie, że jest SUCHY, ale może zrobić wroga z następnego programisty w projekcie, a ja mogę być tak samo produktywny jak generowanie kodu jak powyżej za pomocą skryptu. To powiedziawszy, jeśli jest to bardziej powszechne niż podejrzewam, proszę wypełnij mnie: //Czy to naprawdę powszechna technika, gdy istnieje prostsza metoda? String[] propertyNamePartsArr = {"A","B", ...pomijanie niektórych części..., "Z"}; List<String> propertyNameParts = new ArrayList<String> (Arrays.asList(propertyNamePartsArr)); for (String propertyNamePart : propertyNameParts) { spróbuj { obiekt originalValue = BeanUtils.getProperty(objectOfType1, "property" + propertyNamePart); if (originalValue != null) { BeanUtils.setProperty(objectOfType2, "podobnie nazwanaProperty" + propertyNamePart, someMethod(originalValue)); } } catch (IllegalAccessException e) { handleIllegalAccessException(e); } catch (InvocationTargetException e) { handleInvocationTargetException(e); } catch (NoSuchMethodException e) { handleNoSuchMethodException(e); } }


title: Kolejność parametrów: rozmiar, liczba lub na odwrót

text: Mam nadzieję, że jest to właściwe forum do tego... Cóż, w C, standardowa biblioteka używa zwykle `(void* buffer, int size)' w odniesieniu do jakiegoś bufora danych. Zastanawiam się, czy istnieje uzasadnienie dla tej kolejności zamiast `(int size, void* buffer)`. Nie mogłem wymyślić żadnego dobrego powodu i wydaje się, że jest to arbitralny wybór, ale jestem ciekaw, czy za tym porządkiem kryje się jakieś głębsze znaczenie.


title: Programista solo a programista zespołowy: czy powinienem przejść dalej?

text: Pracuję jako samodzielny programista w małej firmie. Pracy jest aż nadto, ale to samo nie dotyczy pieniędzy. Dlatego w najbliższej przyszłości nie będę widywał nowych kolegów. Odpowiadam absolutnie za wszystko, co ma związek z operacjami IT. Obejmuje to rozwój i utrzymanie oprogramowania używanego we własnym zakresie, rozwój i utrzymanie różnych stron internetowych, z których korzystają nasi klienci, infrastrukturę stron internetowych, infrastrukturę sieci lokalnej, w tym utrzymanie kilku serwerów oraz wsparcie wewnętrzne, aby wspomnieć o najpilniejszych rzeczach. Naprawdę lubię 95% tego, co robię, i mam dużą elastyczność w swojej pracy. Mogę decydować, co zrobić i kiedy, i nikt tak naprawdę nie mówi mi, co mam zrobić, z wyjątkiem tego, że od czasu do czasu siadam z kolegami, aby stworzyć plan działań, który muszę zrobić. Uważam, że mam wysoką etykę pracy i jestem ponadprzeciętnie skoncentrowany na tym, co robię, więc wszystko się robi. Jednak doszedłem do punktu, w którym naprawdę tęsknię za innymi ludźmi wokół mnie, którzy pracują z tym samym. Chociaż muszę zapoznać się z szeroką gamą technologii, ponieważ jestem samodzielnym programistą, mam wrażenie, że brakuje mi jednej z „dzielenia się wiedzą”, w której biorą udział inni „podobnie myślący” ludzie pracujący w większych firmach w. Tak naprawdę nie mam z kim dyskutować o przeszkodach programistycznych i decyzjach projektowych - i zaczynam za tym tęsknić. Poza tym martwię się, co przyszli pracodawcy mogą pomyśleć o tym „pustelniku”, który zbyt długo pracował sam, by móc pracować w zespole. Jednak z drugiej strony myślę, że nie uzyskam mojej obecnej elastyczności w większej firmie. Będę widział o wiele bardziej rygorystyczne terminy, późne godziny i wyspecjalizowane obszary pracy. Również; Nie jestem pewien, czy ten pomysł „dzielenia się wiedzą” kiedykolwiek będzie miał miejsce? Czy ktoś jeszcze był w tej sytuacji? Czy to dobry pomysł z perspektywy kariery i rozwoju osobistego? Czy powinienem rozważyć przeniesienie się do większego miejsca, aby (być może) stać się częścią większej grupy programistów i ludzi „podobnie myślących”? Innymi słowy, czy po drugiej stronie trawa będzie bardziej zielona?


W mojej bazie danych mam wiele tabel. Niektóre tabele są powiązane z innymi, a niektóre nie. Mój przyjaciel powiedział mi, że nie jest wskazane mieć stół, który nie jest związany z innymi. Czy to poniżej normy, jeśli w mojej bazie danych mam wiele tabel, ale nie ma żadnego związku? Czy istnieją wytyczne dotyczące relacji między tabelami w bazie danych? A także, jakie są wytyczne w stołach kaskadowych? Dziękuję.


title: Analiza wymagań Komunikacja

text: Jak mogę przekonwertować to wymaganie na jedno wymaganie: W przypadku kolumn, w których są tylko liczby, zostanie użyte sortowanie numeryczne. W przypadku kolumn zawierających cyfry i litery zostanie użyte sortowanie alfanumeryczne. W przypadku kolumn Data zostanie zastosowane sortowanie według czasu. Całe sortowanie będzie miało właściwości rosnąco i malejąco.


title: Jaka jest idealna długość metody?

text: W programowaniu obiektowym nie ma dokładnej reguły dotyczącej maksymalnej długości metody, ale nadal uważam, że te dwa pytania są nieco sprzeczne, więc chciałbym usłyszeć, co myślisz. W _Clean Code: A Handbook of Agile Software Craftsmanship_ Robert Martin mówi: > Pierwszą zasadą funkcji jest to, że powinny być małe. Drugą zasadą funkcji > jest to, że powinny być mniejsze. Funkcje nie powinny mieć więcej niż 100 linii. Funkcje nie powinny mieć nigdy 20 długości. i podaje przykład z kodu Java, który widzi u Kenta Becka: > Każda funkcja w jego programie miała tylko dwa, trzy lub cztery wiersze. > Każdy był wyraźnie oczywisty. Każdy opowiadał historię. I każdy z nich poprowadził cię do > następnego w przekonującej kolejności. Tak krótkie powinny być Twoje funkcje! Brzmi to świetnie, ale z drugiej strony, w _Code Complete_ Steve McConnell mówi coś zupełnie innego: > rutyna powinna rosnąć organicznie do 100-200 linii, > dekady dowodów mówią, że procedury o takiej długości nie mają już więcej błędów skłonność > niż krótsze rutyny. I podaje odniesienie do badania, które mówi, że procedury o długości 65 linii są tańsze w opracowaniu. Więc chociaż istnieją rozbieżne opinie na ten temat, czy istnieje funkcjonalna najlepsza praktyka w celu określenia idealnej długości metody dla Ciebie?


title: Jak skonfigurować użytkowników dla aplikacji klasycznej z SQL Azure jako zapleczem?

text: Rozważam SQL Azure jako DB dla nowej aplikacji, którą rozwijam. Powodem, dla którego chcę korzystać z platformy Azure, jest to, że nie chcę utrzymywać jeszcze innych baz danych i chcę, aby moi użytkownicy mieli dostęp do danych z dowolnego miejsca. Problem polega na tym, że nie wiem, jak użytkownicy będą się łączyć. Aplikacja jest podstawową aplikacją typu CRUD dla systemu Windows. Czytałem, że musisz dodać swój adres IP do zapory SQL Azure, aby się z nią połączyć, ale nie wiem, czy jest to tylko do celów administracyjnych. Czy ktoś może wyjaśnić, czy ktokolwiek (gdziekolwiek) może uzyskać dostęp do danych z odpowiednimi danymi uwierzytelniającymi? Który z poniższych scenariuszy sprawdziłby się najlepiej (jeśli w ogóle)? A) Dodaj każdego użytkownika do SQL Azure i pozwól aplikacji połączyć się bezpośrednio z Azure, tak jakby łączyła się z SQL Server B) Dodaj anonimowego użytkownika SQL Azure i przekaż hasło/hasz prawdziwego użytkownika przy każdym wywołaniu, aby baza danych Azure mogła obsłużyć żąda odpowiednio. C) Umieść usługę WCF pomiędzy, aby obsługiwała rzeczy związane z uwierzytelnianiem. Usługa będzie dostarczać użytkownikowi tylko odpowiednie informacje, pod warunkiem jego uwierzytelnienia, a SQL Azure będzie dostępna wyłącznie dla usługi. D) - pomysły są mile widziane - jest to mylące, ponieważ wszystkie przykłady Azure, które widzę, dotyczą stron internetowych. Trudno mi uwierzyć, że SQL Azure nie poradzi sobie z podłączaniem się do niego aplikacji desktopowych. Więc jaka jest najlepsza praktyka?


title: Konwencje nazewnictwa funkcji Erlang

text: Rozumiem, że ogólne konwencje Erlanga dla funkcji używają przypadku węża lub przypadku wielbłąda, ale co z funkcjami eksportowanymi? Na przykład, powiedzmy, że mam moduł gen_server, który definiuje sprawdzanie, czy nazwa użytkownika jest używana: * Mam wywołanie wzdłuż linii `handle_function(is_username_in_use, UserName)`. * Mam również wyeksportowaną funkcję o nazwie `is_username_in_use`, która wywołuje `gen_server:call/2`. Ale wewnętrznie definiuję również metodę sprawdzającą bazę danych. Tak więc otrzymujemy coś w stylu `check_if_username_is_in_use_in_db` do użytku wewnętrznego. Szybko wymyka się to spod kontroli i kończę z niewygodnie długimi imionami. Czy istnieje wspólna konwencja używana do nazywania funkcji takich jak te? Myślałem o czymś w stylu `is_username_in_use_internal`


title: Procent lub piksele HTML/CSS

text: Kodowanie nowej strony internetowej. Zasadniczo, dla elementów pozycjonujących za pomocą CSS, użyłbym procentów i stwierdziłem, że to najlepsza rzecz, ponieważ każdy monitor ma inny rozmiar. Ale zauważyłem, że wiele dużych witryn używa pikseli. Nie rozumiem, jak można używać pikseli do pozycjonowania rzeczy, skoro wszyscy mamy inny rozmiar ekranu?


title: 2 lata doświadczenia zawodowego, czy powinienem traktować to jak absolwenta college'u?

text: Więc właśnie zostałem zwolniony z firmy po 2 latach, bez mojej winy. Była to duża, dość znana firma, która przez cały rok robiła cięcia (prawie 75% naszego działu zostało wyciętych). Dotrwałem do samego końca, zanim w końcu dokonali ostatecznego cięcia budżetu. Zdaję sobie sprawę, że to prawdopodobnie pomijam porady dotyczące kariery, ale kiedy szukam pracy, bardziej interesuje mnie sam rozwój. Kiedy czegoś szukam, czy powinienem traktować moje 2 lata jako prawdziwe doświadczenie? Albo skoro jest tak krótki, czy powinienem wyglądać, jakbym właśnie skończył studia (ponieważ to była moja pierwsza „prawdziwa” praca po studiach).


title: Najlepsze praktyki w tworzeniu API stylizacji JavaScript: Równoważenie CSS i JavaScript

text: Napisałem kilka komponentów dla Durandala — DatePicker Widget, Tabs Widget, Radio Widget, itd. Mam trochę trudności koncepcyjnych, jak najlepiej zrównoważyć stylowanie API z CSS. Na przykład w widżecie Tabs ustawiłem domyślne klasy CSS dla różnych stylowych funkcji widżetu. Te domyślne klasy mają oczywiście domyślną stylizację. Ale można zmienić ich styl, a także zmienić ich nazwę za pośrednictwem interfejsu API stylów. Używam tego wzoru we wszystkich komponentach. Teraz, jeśli użytkownik końcowy (na razie ja) chce przycisków zakładek o stałej szerokości, musi tylko odpowiednio dostosować swój CSS (np. min-width: 90px, width: 90px itp.). Ale początkowo czułem się zmuszony do włączenia właściwości konfiguracyjnych o nazwach isTabsFixedWidth i fixedWidth. Kiedy użytkownik przechodzi przez obiekt konfiguracyjny, za pomocą JavaScript modyfikuję CSS zgodnie z właściwościami ustawionymi w tym obiekcie konfiguracyjnym. Dołączona jest również funkcja w widżecie Tabs o nazwie #setWidthPolicy(policy, [width]). Ale wydaje mi się to zbędne. Jakie są tutaj najlepsze praktyki? Czy konieczne jest, aby cała obsługa stylów zawierała obsługę surowego CSS, obsługę konfigurowalnego CSS za pomocą obiektu konfiguracyjnego oraz obsługę dynamicznego modyfikowania CSS za pomocą funkcji członkowskich? Czy ktoś ma tu jakieś zalecenia? Dziękuję Ci.


title: Nazwy parametrów funkcji

text: Właśnie znalazłem następujący kod w naszej bazie kodu: public String identityArchitectureName(String platformName, String input) ... Moim zdaniem `input` jest jedną z najbardziej bezsensownych nazw dla zmiennej, która może być. Czy to tylko ja? Mogę to zmienić po cichu, ale czy powinienem zwrócić się do kolegi programisty, który to zrobił?


title: Czy powinienem uczyć się JavaScript przed studiowaniem informatyki?

text: Zrobiłem więc wiele badań i odkryłem, że Codecademy było wymieniane kilka razy na innych forach. Utknąłem i wybrałem JavaScript przez Codecademy, prawdopodobnie myśląc, że to „Java” i teraz trochę się martwię, że dokonałem złego wyboru.. ze względu na to, że widzę posty, w których wspomina się, że JavaScript uczy złych nawyków i tak dalej. .. Czy powinienem zatrzymać się i nauczyć innych języków oferowanych w „Codecademy”? Czy powinienem całkowicie przestać używać Codecademy? A może powinienem po prostu poczekać, aż zacznę studia i pozować jako puste płótno? Wszystkie opinie potrzebne, dziękuję. P.s Nie jestem do końca pewien, o jaką pracę będę się ubiegać w przyszłości, ale aby dać pewne wskazówki, nie wierzę, że będzie to tworzenie stron internetowych, a tym bardziej od strony projektowania gier lub aplikacji


title: Pytania dotyczące polimorfizmu

text: Rozumiem więc znaczenie polimorfizmu, w tym jego istotność. Ale coś, czego nie do końca rozumiem, to co z „Konstruktorem” i jakąkolwiek odziedziczoną „Klasą” może mieć początkowa „Klasa bazowa”. Na przykład mam klasę do testowania niektórych kryteriów — poziom konta, wersję systemu Windows i kilka innych kontroli. // Klasa bazowa public class CheckInstalled : CheckUserLevel { public CheckInstalled() { // Sprawdź sprawdź, czy token CheckUserLevel jest prawdziwy, jeśli nie zgłasza wyjątku i nie zamyka. if (!(_level == true)) { // Powyższa implementacja technicznie byłaby tutaj. } } public virtual void IsInstalled() { // Implementacja wstępnego sprawdzania oprogramowania ogólnego. } } Tak więc teoretycznie byłaby to `klasa bazowa`, która wykona sprawdzenie ogólne; ale są też inne aplikacje, które muszę sprawdzić, czy są zainstalowane. Więc teraz utworzyłbym `Klasę` dla: 1. Sql 2. IIs 3. Dnn Lub cokolwiek, co możesz potrzebować, aby upewnić się, że jest zaznaczone. Tak więc dla każdej z tych `klas` odziedziczyłbym `klasę CheckInstalled`. W każdym z nich miałbym to: public override void IsInstalled() { // Implementacja do sprawdzenia, czy jest zainstalowany konkretny element klasy. } Widzę więc, jak polimorfizm naprawdę uprości i zachowa każdą z tych `klas` oddzielnie. Ale zapewni elastyczność w orientacji na obiekt. ** Korzeń mojego pytania, `Konstruktor klasy bazowej` zawiera tę odziedziczoną wartość tokena. Ale czy wszystkie inne „Klasy”, które dziedziczą tę wartość? Zasadniczo, że „Konstruktor klas bazowych” jest konsekwentnie wykonywany? A może token `_level` musi być wywoływany w każdym z nich?** Mam nadzieję, że to ma sens. Jeśli nie, daj mi znać, a postaram się to przeformułować. * * * **Update:** Poziom _ jest wywoływany tutaj: class CheckUserLevel { // Token Bool: private bool _level = false; #region Konstruktor: protected CheckUserLevel() { // Wywołaj metodę przy tworzeniu: Elevate(); } #endregion public void Elevate() { // Pobranie tożsamości: użytkownik WindowsIdentity = WindowsIdentity.GetCurrent(); // Ustaw Principal WindowsPrincipal role = new WindowsPrincipal(user); #region Przetestuj system operacyjny dla kontroli konta użytkownika: if (Environment.OSVersion.Platform != PlatformID.Win32NT || Environment.OSVersion.Version.Major < 6) { // False: _level = false; // Todo: Wyjątek/ Dziennik wyjątków } #endregion else { #region Tożsamość testu nie zerowa: if (user == null) { // False: _level = false; // Todo: "Dziennik wyjątków / wyjątek" } #endregion else { #region Zapewnienie roli zabezpieczeń: if (!(role.IsInRole(WindowsBuiltInRole.Administrator))) { // False: _level = false; // Todo: "Dziennik wyjątków / Wyjątek" } else { // True: _level = true; } #endregion } // Nested Else 'Close' } // Initial Else 'Close' } // Koniec klasy. } Oddzielna klasa faktycznie generuje wartość logiczną; ponieważ za każdym razem, gdy ta klasa jest wywoływana, przypisze jej wartość. Nie chciałem zbyt wiele ujawniać z tą klasą, głównie ze względu na jej rolę w testowaniu dla Administracji. Problem: > Kilka metod wymaga uprawnień administratora; myślałem, aby > odziedziczyć w bazie `CheckInstalled`. Który w swojej kreacji > automatycznie sprawdzi stan logiczny `_level`. Następnie od tego momentu; > to `CheckInstalled` może być dziedziczone do innych klas; wtedy mogę po prostu > `zastąpić IsInstalled`, aby zgiąć się do żądanego zadania dla tego elementu. Czy to zła myśl z mojej strony?


title: Renderowanie JavaScript po stronie serwera

text: Mam pytanie o „najlepszą praktykę”, które dręczy mnie od jakiegoś czasu. Kiedy używam bibliotek JavaScript i interfejsów API, takich jak JQGrid lub Google Maps, często tworzym biblioteki po stronie serwera, aby renderować JavaScript dla mnie. Na przykład mogę mieć: $map->setZoom(10); $map->setDimensions(200,250); w PHP, który wewnętrznie wyrenderuje odpowiedni JS, gdy wywołam `$map->render();`, na przykład. Oznacza to, że mogę łatwo generować JavaScript na podstawie stanu moich aplikacji. Łatwiej mi też pracować z danymi, które już mam w swoich kontrolerach itp. Czy jest to odpowiedni sposób na wykorzystanie wspólnej funkcjonalności w ramach biblioteki JavaScript, czy lepiej byłoby napisać JS jako standard?


title: Jak połączyć obiekt domeny w pamięci z jego rekordami bazy danych bez zaśmiecania domeny problemami z bazą danych?

text: Twój model domeny zawiera zestaw obiektów. Przedstawiam tutaj projekt poboczny, ale mam dużo bardziej skomplikowany projekt pracy, który pada na kolana, ponieważ nie zrobiłem dobrego rozdzielenia bazy danych i domeny. W tym przypadku obiekt nazywa się CyclingRecord. Zgodnie z architekturą Onion, obiekty domeny nie wiedzą nic o ich trwałości. Jednak każdy z tych obiektów odpowiada wpisowi w magazynie danych (potencjalnie bazie danych, potencjalnie plikowi). Identyfikator wiersza absolutnie nie jest częścią obiektu domeny i dlatego nie jest przechowywany w obiekcie domeny. data CyclingRecord = CyclingRecord { data :: Dzień, odległość :: Float, czas :: Integer, opis :: Może String } W języku, który wymusza silną niezmienność (takim jak Haskell i Clojure), tożsamość i wartość są synonimami. Co więcej, nie ma powodu, dla którego nie można było nagrać więcej niż jednej jazdy dziennie. Tak więc cały zapis w pełni opisuje jazdę. Tak więc, jeśli edytuję rekord w domenie, kiedy przekazuję edytowane obiekty z powrotem do infrastruktury bazy danych, jak mam powiadomić bazę danych, że musi zaktualizować konkretny rekord zamiast usuwać istniejący rekord? (ten sam pomysł musiałby być rozszerzalny, abym mógł mieć aplikację potencjalnie manipulować wieloma rekordami naraz, a następnie wysyłać je z powrotem do bazy danych. Operacja offline lub synchronizacja lub po prostu unikanie nadmiernej aktywności na dysku) Chyba że poprawną odpowiedzią jest faktycznie stwórz coś w rodzaju unikalnego identyfikatora dla każdej przejażdżki. Być może UUID. Być może dodać do rekordu „licznik dni”. Uczyń go nieodłącznym elementem jazdy rowerem, a baza danych będzie od niego zależna zamiast oddzielnego identyfikatora wiersza.


title: Czy musisz zmienić nazwę oprogramowania podczas forkowania repo?

text: Jakiś czas temu rozwinąłem repozytorium i stworzyłem kilka pull requestów, które pozostały bez odpowiedzi. Teraz oprogramowanie jest licencjonowane przez MIT i zachowałem tam informację o prawach autorskich. Czy muszę zmienić nazwę oprogramowania, czy ktokolwiek rozwidla repozytorium, może nadal odwoływać się do niego pod tą samą nazwą? Dziękuję!


title: Jak mogę mieć oko na zdalnego freelancera?

text: Zatrudniłem kilku programistów z różnych miejsc na całym świecie. Wszystko idzie dobrze, ale widzę, że niektórzy z nich ostatnio zbyt często nadużywają mojego uprzejmego przeoczenia. Wszyscy są zatrudnieni na cały dzień. Widzę jednak, że po 5 godzinach dziennie niewiele zostało zrobione. Zastanawiam się nad stworzeniem oprogramowania, które co 1-5 minut będzie robiło zrzut ekranu komputera i przesyłało go do mojego systemu. To jednak prowadzi do skrajności. Jak ludzie zwykle zarządzają zdalnymi programistami?


title: Eliminowanie zależności a eliminowanie nadmiarowości

text: Podczas mojego przydziału do projektu odkryłem, że wiele klas wiadomości zostało odebranych, a następnie zachowanych w nienaruszonym stanie i przekazanych wewnątrz aplikacji odbierającej. Gdy te komunikaty uległy zmianie, kod w całej aplikacji musiał zostać zmieniony. Od czasu tego problemu przyzwyczaiłem się konwertować wiadomości do nowego formatu po ich odebraniu. Jednak wydaje mi się, że bezpośrednio naruszam DRY (nie powtarzaj się): mam te prawie identyczne klasy wewnętrzne, które tworzę z wiadomości zewnętrznych. Gdzie przebiega granica między eliminacją zależności a eliminacją nadmiarowości? Czy każdy moduł powinien mieć własne formaty danych?


title: Jak zacząć zdobywać doświadczenie w zarządzaniu projektem

text: Istnieją pewne wymagania związane z doświadczeniem w zarządzaniu projektami dla programisty, takie jak: > kandydat musi mieć pewne doświadczenie w zarządzaniu projektem, niekoniecznie z podwładnymi, ale raczej pracować nad projektem przez całą drogę od projektu do testowania . Zastanawiałem się 1. co tu oznaczają "podwładni"? 2. jeśli istnieją książki, strony internetowe lub inne miejsca zawierające zarówno **ogólne wytyczne**, jak i **proste praktyczne przykładowe projekty**, aby pomóc w zdobyciu podstaw dotyczących całego procesu projektu. Szczególnie interesują mnie projekty zarówno dla Linuxa jak i Windowsa, w C, C++, Python, Java. Rozważam zacząć od grania na własną rękę, nie mam ochoty na znalezienie firmy. Moim specjalistą nie był CS, więc może brakować mi podstaw.


title: Czy startup obracający się wokół aplikacji internetowej jest nadal opłacalny?

text: Mam pomysł na startup, który obraca się wokół aplikacji webowej. Planuję w przyszłości włączyć aplikację mobilną, ale w przeciwieństwie do czegoś takiego jak instagram, użytkownicy będą częściej uzyskiwać dostęp za pomocą komputera stacjonarnego. Obecnie uczę się Ruby On Rails, ale zastanawiam się, czy od czwartego kwartału 2012 roku koncentruję się na technologii (programowaniu stron internetowych), która staje się przestarzała. Czy powinienem porzucić pomysł na coś, co kręci się wokół technologii mobilnych i zamiast tego poświęcić swój czas na naukę czegoś takiego jak programowanie na iOS?


title: Jak automatycznie renderować interfejs graficzny (za kulisami)

text: Próbuję napisać program, który automatycznie wyświetla obrazy GUI aplikacji Java (tj. bez budowania, uruchamiania, a następnie robienia zrzutów ekranu interfejsu). Wiem, że WindowBuilder jest projektantem GUI z edytorem WYSIWYG, ale to nie jest to, czego chcę. Na przykład, jeśli jako dane wejściowe zostanie podany kod źródłowy (lub jar) aplikacji, która ma 4 ramki (okna), moje narzędzie wyświetli 4 obrazy różnych ramek. Musi działać tylko na prymitywnych i prostych interfejsach. Jakieś pomysły, jak się do tego zabrać? **EDYTUJ:** Chciałbym wbudować to we wtyczkę Eclipse, która dostarcza programistom informacje o GUI. Istnieje wiele wtyczek do wyświetlania wykresu połączeń na różne sposoby, fajnie byłoby pokazać wykres ramek.


title: Czy obiekt powinien znać swój własny identyfikator?

text: `obj.id` wydaje się dość powszechny i wydaje się również mieścić w zakresie czegoś, co obiekt może wiedzieć o sobie. Zastanawiam się, dlaczego mój obiekt powinien znać swój identyfikator? Wydaje się, że nie ma powodu, aby to mieć? Jednym z głównych powodów, dla którego istnieje, jest jego pobranie, więc moje **repozytoria** muszą go znać, a tym samym używać go do interakcji z bazą danych. Kiedyś napotkałem również problem polegający na tym, że chciałem serializować obiekt do formatu JSON dla interfejsu API RESTful, w którym identyfikator nie pasował do ładunku, ale tylko identyfikator URI i uwzględnienie go w obiekcie utrudniło to. Czy obiekt powinien wiedzieć, że ma swój identyfikator? dlaczego lub dlaczego nie? _update_ : **Warunki** 1. id: Atrybut identyfikatora obiektu. w kategoriach bazy danych klucz zastępczy, a nie klucz naturalny. 2. Obiekt: podmiot lub w inny sposób jednoznacznie identyfikowalny obiekt w systemie.


title: czy istnieje sposób na skopiowanie diagramu „Typ elementu roboczego” w TFS?

text: Użyłem edytora procesów (z TFS Power Tools) do aktualizacji **Diagramu przepływu pracy** określonego typu elementu roboczego (tzn. typu „Problem”). Na naszym serwerze jest kilkanaście innych projektów, które współdzielą typ Issue i chciałbym przenieść do nich wszystkie moje zmiany. Niestety, chociaż Edytor procesów umożliwia eksportowanie/importowanie typów elementów roboczych do/z serwera, zawiera tylko plik `.xml` (definicja), który nie zawiera diagramu przepływu pracy. (Diagram jest przechowywany w plikach `.wit` i `.wit.diagram`, które nie są importowane z `.xml`). Czy istnieje sposób skopiowania diagramu do wszystkich projektów? (Uwaga: ostatecznie zamierzam wprowadzić podobne zmiany w kilku typach elementów roboczych, więc zautomatyzowane rozwiązanie do propagowania tych zmian we wszystkich projektach byłoby bardzo mile widziane!) Uruchamianie TFS 2010.


title: Czy możliwe jest osiągnięcie stanu zera bezwzględnego błędu w przypadku oprogramowania na dużą skalę?

text: Mówię o 20-30+ milionach linii kodu, oprogramowaniu w skali i złożoności na przykład Autodesk Maya. Jeśli zamrozisz rozwój tak długo, jak to konieczne, czy możesz rzeczywiście naprawić wszystkie błędy, aż po prostu nie będzie ani jednego błędu, jeśli coś takiego może zostać zweryfikowane przez komputery? Jakie są argumenty za i przeciw istnieniu systemu wolnego od błędów? Ponieważ istnieje przekonanie, że każda poprawka, którą wprowadzasz, tworzy więcej błędów, ale nie sądzę, aby to była prawda. EDYCJA: Przez błędy miałem na myśli od najprostszych literówek w interfejsie użytkownika do poważniejszych błędów zapobiegawczych, które nie mają obejścia. Na przykład określona funkcja skryptowa niepoprawnie oblicza normalne. Nawet jeśli istnieją obejścia, problem nadal musi zostać naprawiony. Możesz więc powiedzieć, że możesz zrobić tę konkretną rzecz ręcznie zamiast korzystać z dostarczonej funkcji, ale ta funkcja nadal musi zostać naprawiona.


title: Jakich specyfikacji powinien szukać programista przy zakupie komputera? Lub jaki komputer powinienem kupić?

text: Chciałbym nabyć nowy komputer specjalnie zaprojektowany do programowania. Chciałbym sam zbudować go dla doświadczenia edukacyjnego, ale chętnie kupię go również jako wykonaną. Zasadniczo ściągnąłem tak wiele plików poświęconych programowaniu, które są tak duże, że a) mój komputer jest prawie wydajny i b) mój 4-letni komputer jest bardzo wolny. W szczególności interesuję się bazami danych (Oracle/PostGreSQL, Mongo, Hadoop) i javą, ale uwielbiam uczyć się wszystkich możliwych języków.


title: Czy istnieje równoważny termin dla Desktop Monitoring Recorder, takiego jak NVR lub DVR?

text: Podobnie jak NVR (Network Video Recorder) i DVR (Digital Video Recorder), zastanawiałem się, czy istnieje termin / akronim dla Desktop Monitoring Recorder? Może DMR? Nie mogę znaleźć żadnych standardowych warunków dla tego typu systemu. Piszę system, który jest jak NVR, ale zamiast tego nagrywa/monitoruje pulpity komputerów. Nie jest to „złodziej ekranu” ani „szpieg pulpitu” ani żaden rodzaj złośliwego oprogramowania – to system nadzoru, tylko dla komputerów, a nie kamer. W końcu będzie robił takie rzeczy, jak przede wszystkim monitorowanie/nagrywanie ekranów, obserwowanie ruchu myszy, gdy użytkownik komputera nie powinien tam być i wiele więcej. Istnieją również inne polecenia, takie jak przejęcie kontroli nad ekranem, wykonanie zdalnego wyłączenia / ponownego uruchomienia, wysyłanie wiadomości na ekran użytkownika i inne. Czy istnieje jakiś standardowy termin lub akronim określający stronę oprogramowania do nagrywania?


title: 65.000.000.000 testów do uruchomienia

text: Zapytano mnie, jak przeprowadzić pakiet 65.000.000.000 testów i zastanawiam się, czy to normalne mieć projekt z tak dużą ilością testów. Pracowałeś przy projektach o tej charakterystyce?


title: Narzędzia, które mogą wyłapać „fałszywe pokrycie”?

text: Scenariusz hipotetyczny: baza kodu jest wykonywana przez testy jednostkowe uruchamiane przez bota budującego TeamCity, który również używa wbudowanego narzędzia dotCover w celu zapewnienia metryk pokrycia. Kompilacja nie powiedzie się, jeśli zostanie objętych mniej niż X% kodu. Pozbawiony skrupułów programista uruchamiający NCrunch (lub wstępnie przetestowany zatwierdzenie w TC) widzi, że jego następne checkin spowoduje spadek procentu pokrycia poniżej progu i zepsuje kompilację, ponieważ nie napisał dobrych testów jednostkowych (TDD lub inne). Tak więc pisze nowy test, który uruchamia kilka wierszy kodu, które NCrunch pokazuje, że nie są objęte, ale nie stwierdza ich zachowania. Testy przechodzą domyślnie (ponieważ wykonywany kod nie zgłasza wyjątków), pokrycie pozostaje powyżej X%, a aby znaleźć problem, ktoś musi odkryć test, sprawdzić go i zobaczyć, że podczas jego wykonywania nie ma żadnych asercji (lub żadnych znaczących asercji) . Ponieważ obecnie nie mamy procesu przeglądu kodu, a wykonywanie przeglądów przed każdym zatwierdzeniem byłoby szkodliwe dla produktywności, chcę, aby to zachowanie przerwało kompilację. Jeśli program uruchamiający test uruchomi metodę oznaczoną atrybutem [Test] (używamy NUnit) i po zakończeniu zobaczy, że kod nie wykonał żadnych wywołań metod Assert NUnit ani nie zgłosił ExpectedException, TC powinien podnieść wartość Cain. Idealnie byłoby, gdyby narzędzie było wystarczająco inteligentne, aby odkryć, że wszystkie asercje będą z definicji prawdziwe, takie jak `Assert.AreEqual(1,1);` i zakończyć kompilację w podobny sposób. Czy jest coś „gotowego”, co mogę podłączyć do TeamCity, lub sposób, w jaki mogę skonfigurować jego wbudowane metryki dotyczące biegaczy/pokrycia, aby znaleźć tego typu złe zachowanie, bez przeprowadzania niestandardowej analizy kodu statycznego? Oczywiście _w końcu_ go znajdziemy, ale w naszym środowisku (mały, wewnętrzny zespół programistów) może być tylko jeden lub dwóch programistów znających pełną bazę kodu danej aplikacji, więc to rażące zakończenie kontroli jakości testów może nie wydarzy się, dopóki odpowiedzialny człowiek już dawno nie odejdzie, a ktoś inny przejmie główną własność bazy kodu.


title: Wersjonowanie i wdrażanie systemów zależnych

text: Potrzebuję dobrych praktyk lub doświadczeń zespołów programistycznych, które musiały zająć się tymi samymi problemami, co ja w tej chwili =) Nasza firma od lat zajmuje się tworzeniem oprogramowania klienckiego. Jedyną zależnością było posiadanie odpowiedniej bazy danych. Z każdym wydaniem (aktualizacją) aktualizujemy również (przyrostowo) bazę danych, jeśli to konieczne. Schemat wersjonowania jest ugruntowany i pasuje do naszej ideologii. Teraz rozpoczęliśmy tworzenie aplikacji mobilnych (działamy jako klient zewnętrzny). Kilka wstępnych uwag do naszej architektury: Interfejs pomiędzy klientem mobilnym a bazą danych (taka sama jak w przypadku klienta stacjonarnego) to webservice RESTful. Wersjonowanie obu klientów jest niezależne. Jedna aplikacja jest utrzymywana przez zespół programistów desktopowych, a część mobilna jest utrzymywana przez inny zespół. Ale nie wiem jak obsłużyć webservice. Czy powinien być również niezależny (własne wersjonowanie) pomimo tego, że korzysta z wielu bibliotek współdzielonych, które są utrzymywane przez zespół programistów desktopów? Jak to działa: Klient mobilny synchronizuje swoje dane referencyjne z usługą sieciową, która na żywo współdziała z bazą danych (dostęp tylko do odczytu do bazy danych). Dane użytkownika, które są tworzone w aplikacji mobilnej, również są synchronizowane z usługą sieciową, ale są zapisywane w niektórych trwałych tabelach tymczasowych. Zostanie uruchomione zadanie asynchroniczne, aby spróbować importu do bazy danych (może się nie powieść w przypadku problemów z blokowaniem, uprawnieniami, ....). Jeśli import się nie powiedzie, tę samą procedurę importu można również uruchomić na kliencie stacjonarnym (używają tej samej biblioteki do importowania z tabel tymczasowych do konkretnych) Ogólnie każda z tych trzech części może ulec zmianie (np. poprawka błędów, funkcje, ulepszenia wydajności) bez wpływu na pozostałe dwa. Dlatego potrzebuję strategii, aby wdrożyć każdy z osobna. Niemniej jednak najprawdopodobniej dotknie to dwóch z trzech. Gdzie/kiedy należy sprawdzić, czy wszystkie trzy systemy są kompatybilne? Jak mam to sprawdzić? Posiadasz tabelę w bazie danych z każdą możliwą kombinacją wersji, które ze sobą współpracują? Jeśli nie rozumiesz mojego pytania, ponieważ jest ono całkowicie niejednoznaczne, daj mi znać. Nie jest łatwo opisać =)


title: Czy ktoś ma doświadczenie w branży gier/hazardów?

text: Czy są jakieś problemy prawne, gdy pracujesz w tego rodzaju branży kasynowej? Dostaję ofertę pracy i lubię ją dzięki sprytnym algorytmom i wielowątkowemu środowisku. Przed skorzystaniem z oferty potrzebuję porady w kwestiach prawnych. *Ok, nie zamierzam pozywać nikogo z was za złą radę. Chciałem tylko wiedzieć, czy ludzie mają jakieś doświadczenie w takich sprawach. I wcale nie szukam porady prawnika, staram się poznać ogólne trendy w branży gier i co tamtejsi programiści mają do powiedzenia na temat swojej pracy, jeśli chodzi o hazard. A skąd prawnik miałby wiedzieć, co dzieje się w branży programowania kasyn? *


title: Zmiana parametrów systemu operacyjnego z kodu źródłowego Java

text: Czy mogę zaprojektować program tak, aby automatycznie zmieniał parametry skrótów klawiszowych systemu operacyjnego? Chodzi mi o to, że podczas instalowania programu ustawi skrót systemu operacyjnego, aby po ich naciśnięciu uruchomił się sam program. (Linux/Windows)


title: Dokąd idzie `this` w tym wywołaniu x64?

text: Rozumiem więc, że `to wywołanie` tak naprawdę nie istnieje w programowaniu x64. Jednak tak naprawdę nie mogę znaleźć żadnego ostatecznego wyjaśnienia, _gdzie_ wskaźnik `ten` ma być przekazany do wywoływanego. Czy `thiscall` x64 jest jak prawdziwe wywołanie `cdecl`, gdzie `this` jest umieszczane na ostatnim `stosie' (zarówno w kompilatorach GCC jak i MSVC)? **EDYTUJ:** Działa przez GDB, wygląda na to, że tak. `rdi` zawierał `this` wskaźnik, a `rsi` zawierał jeden parametr, który miała konkretna metoda. Czy tak to zawsze działa?


title: Jakie szczególne względy należy wziąć pod uwagę przy projektowaniu baz danych do przechowywania dokumentacji finansowej?

text: Mam nadzieję, że to pytanie nie jest zbyt szerokie. W przyszłości być może będę musiał dodać systemy księgowe i finansowo-śledzące do niektórych aplikacji (głównie aplikacji internetowych, ale moje pytania dotyczą również aplikacji desktopowych). Teraz stworzenie prostego rejestru transakcji finansowych jest teoretycznie łatwe. Wystarczy jedna tabela bazy danych z kilkoma kolumnami. Nawet MS Access, Excel, a nawet zwykły plik tekstowy ASCII mogą być używane do przechowywania dat transakcji, identyfikatorów kont i kwot w dolarach. Uważam jednak, że nawet często tworzona kopia zapasowa tabeli SQL z integralnością transakcyjną może nie być wystarczająco solidna do poważnego śledzenia finansów. Słyszę terminy takie jak „podwójne księgowanie” i mam wrażenie, że większość aplikacji do śledzenia finansów (na przykład Mint.com lub GnuCash) ma znacznie bardziej skomplikowaną strukturę danych lub proces, który zapewnia podwójną pewność, że wszystko sumuje się idealnie, dokładnie tak, jak powinno, i że żadne dane nigdy nie zostaną utracone ani uszkodzone. Moje pytanie brzmi: **Jakie szczególne względy projektowe należy wziąć pod uwagę podczas projektowania aplikacji do śledzenia transakcji finansowych?** Wygląda na to, że potencjalnych problemów może być tak wiele... proces, specjalne kopie zapasowe, bezpieczeństwo/szyfrowanie, dodatkowe sposoby ochrony danych w przypadku awarii w trakcie wprowadzania danych.... Naprawdę nie wiem, o co konkretnie powinienem zapytać, ale mam wrażenie, że branża programistyczna ma zestaw najlepszych praktyk, o których nic nie wiem. Czym oni są? **Edytuj:** Wygląda na to, że otworzyłem większą puszkę robaków, niż się spodziewałem. Aby wyjaśnić, myślę konkretnie o dwóch typach aplikacji: 1. Aplikacje typu "Sprawdź rejestr", takie jak GnuCash lub Quicken, które przechowują rejestr transakcji poszczególnych osób na własny użytek. 2. Aplikacje śledzące fakturowanie/kredyt/lub „punkty” dla dostawców i klientów, którzy mają do czynienia z firmą. Prawdopodobnie nie będę robił żadnej bankowości bezpośredniej ani (AFAIK) niczego, z czym wiąże się tona rządowych regulacji związanych z finansami.


title: Powiązanie opcji modułowej z programem bez tworzenia zależności

text: Chciałbym, aby moje programy były znacznie mniej kłopotliwe przy rozszerzaniu lub tworzeniu, wyobrażam sobie scenariusz, w którym użytkownik końcowy ma wiele opcji pól wyboru, które wpływają na interakcję programu. Coś jak w edytorze tekstu, w którym mówisz podkreślenie lub pogrubienie, lub w grze, w której mówisz, włącz tę funkcję, wyklucz tę. Tylko opcje w ogóle. Jak stworzyć dynamiczne opcje, które modyfikują zachowanie programu bez uzależniania go od tej funkcji, jeśli ktoś zdecyduje się całkowicie usunąć tę opcję? A jak nazywa się ten rodzaj programowania? Czy używa się zmiennych globalnych (pomimo niektórych języków sugerujących inaczej) Myślę, że może alternatywnym (metaforycznym) sposobem sformułowania tego pytania byłoby: Jak sprawić, by mój kod wyglądał bardziej jak klocki lego, a mniej jak jedna z tych drewnianych trójwymiarowych puzzli ? Przykład, którego możesz użyć: Talia kart, opcje usunięcia wszystkich waletów lub wszystkich króli.


title: Jak zaprojektować aplikację, jeśli nie wyobrażasz sobie do końca jej wyglądu?

text: Oto problem, entuzjastyczny mężczyzna chce zbudować aplikację, ale wie tylko z grubsza, jak aplikacja powinna działać. Jest wiele szczegółów, których nie znał. Jak projektuje swoją aplikację? -Opcja 1: Nie projektuj, ale najpierw zakoduj najważniejsze i przetestuj, aby zobaczyć, jak to idzie, a następnie modyfikuj stopniowo. Po zakończeniu funkcji o najwyższym priorytecie może przejść do funkcji o kolejnym priorytecie. Podejście oddolne. -Opcja 2: Zastanów się, aż zrozumie wszystkie szczegóły, a następnie zaprojektuj kompletną aplikację, zanim zaczniesz kodować. Podejście odgórne. -Opcja3 Połącz obie opcje 1 i 2, tzn. może najpierw zaprojektować podstawową funkcję, a następnie zacząć kodować, nawet jeśli nie zdał sobie sprawy ze wszystkich szczegółów, a następnie odpowiednio zmodyfikować. Na początku bardzo trudno jest poznać wszystkie szczegóły, ponieważ jesteśmy ludźmi i nie możemy przewidzieć przyszłości. Więc głosuję na opcję 1 lub 3. Ale jest to trochę bolesne, jeśli musisz zmienić kod, jeśli brakuje ci szczegółów. Wiele rzeczy trzeba zmienić. Mój wykładowca na uniwersytecie mówi, że zawsze woli podejście odgórne, bo wierzył w to lepiej. Myślę jednak, że zbuduj oprogramowanie tak, jak prowadzisz życie, nigdy nie wiesz z góry, co stanie się w przyszłości, więc opcja 1,3 może być lepsza. Jakie jest Twoje rozwiązanie?


title: Robisz konwerter plików sldprt na PDB?

text: Chciałem stworzyć parser, który potrafi odczytać plik solidworks i przekształcić go w plik banku danych białek. Zostało to już zrobione w programie o nazwie DiamondCAD. http://www.zyvex.com/Research/DiamondCAD.html Chcę stworzyć parser, który może analizować dane, a następnie wizualizować je w taki sam sposób jak DiamondCAD. Wcześniej pobierałem i otwierałem pliki solidworks i nie mają dla mnie sensu z nigdy wcześniej nie widzianymi symbolami i wyglądają jak starożytne pismo. Czy ktoś wie, jak sldprt. plik ma strukturę i jak można go przeanalizować do pliku PDB? (Oprogramowanie o nazwie VMD konwertuje plik PDB do pliku Obj., więc jest to dowód koncepcji)


title: Czy do tworzenia aplikacji J2EE wymagany jest pakiet Spring Source Tool?

text: Śledzę samouczek. Facet ciągle dodaje różne wtyczki, takie jak subclipse, maven, spring source tool suite itp. po skonfigurowaniu jdk, eclipse, tomcat. Instalując sprężynę mówił, że sprężyna utrudnia debugowanie programu. To mnie nie uszczęśliwiło. Dodał też, że od Ciebie zależy, czy chcesz go zainstalować. Skoro nie znam tego, chcę tylko wiedzieć, czy to w porządku, że w ogóle nie ma wiosny? Czy naprawdę warto mieć te wszystkie wtyczki?


title: Jaki jest cykl życia ładowania środowiska pulpitu Linux?

text: Zastanawiam się nad zagłębieniem się w niestandardową pracę nad systemem operacyjnym (i tak, rozumiem, że tworzenie dowolnego rozwoju na poziomie DE lub niższym w systemie operacyjnym jest niezwykle złożone i nie jest rzeczą lekką do podjęcia, ale ciekawość to napędza), ja Jestem teraz w fazie badań, grzebię i uczę się na przykładach z kodu źródłowego projektów takich jak GNOME, KDE i XFCE. Nie mogę znaleźć naprawdę dobrego zasobu lub zasobów opisujących, w jaki sposób „środowisko pulpitu” jest inicjowane, tworzone i wyświetlane na ekranie użytkownika (tj. jego cykl życia). Wiem, że Xorg/X11 gdzieś tam siedzi, działając jako serwer, a ekran użytkownika jest klientem, a twój pulpit znajduje się nad tym klientem. Wiele zasobów po prostu zaczyna mówić o przestawianiu kombinacji już opracowanych menedżerów okien, aplikacji itp., aby dostosować wrażenia na pulpicie, ale myślę o tym, co gdybym chciał uproszczonego systemu operacyjnego, który składałby się tylko z ekranu z trzema przyciski, które wykonały jakieś akcje i to było to? Nie potrzebuję zarządzania oknami, aplikacji ani innych elementów GUI, tylko możliwość narysowania pulpitu i trzech przycisków... (hipotetycznie) Mój problem jest na poziomie dystrybucji, w jaki sposób DE zostaje zarejestrowany jako dostępne środowisko pulpitu , jak to jest przypięte do startu dystrybucji, co dzieje się po zalogowaniu, co jest uruchamiane, jaka jest topografia DE? Na przykład w Ubuntu możesz mieć zainstalowane KDE, XFCE i GNOME na jednej dystrybucji i przełączać się między nimi, wylogowując się, zmieniając aktywne DE i logując się ponownie, więc w jaki sposób DE informuje system operacyjny o jego istnieniu? Naprawdę potrzebuję tutaj tylko wysokiego poziomu, chcę zrobić coś dość prostego, ponieważ chcę udostępnić DE w dystrybucji takiej jak Ubuntu Desktop (nie otwarcie, mam na myśli tylko dla siebie) i zainicjować na pustym pulpicie (bez paska zadań , aplikacje, menedżer okien itp.; po prostu najbardziej podstawowy możliwy stan) w celu zrozumienia, co jest wymagane do uruchomienia DE. Nie potrzebuję konkretnych odpowiedzi na kod (gdzie jest w tym wyzwanie?), ale wskazuje na dobre zasoby na temat tego, jak działa ten proces. Wezmę dobrze sformułowaną odpowiedź tekstową nad fragmentem kodu, ponieważ chcę zrozumieć, jak to wszystko działa, ścieżkę dotarcia do DE, a nie specyfikę implementacji. Wynik tego nie zostanie technicznie opublikowany (pod względem kodu), ale zamierzam zrobić kilka postów na blogu, które opisują proces uczenia się tego wszystkiego i pisania warstwy DE w celu uruchomienia i działania „surowego” pulpitu w istniejącym/ustalonym systemie operacyjnym, takim jak Ubuntu, Mint, Gentoo lub inna dystrybucja.


title: Jak prawidłowo radzić sobie z zarządzaniem diagramami ER i UML

text: Ucząc się o tych narzędziach, pomyślałem (naiwnie), że mapowanie przestrzeni biznesowej może być obciążone z góry, robiąc to tylko raz i odwołując się do tych diagramów dla każdego projektu w ramach jednej jednostki biznesowej. Jednak stwierdzam, że każda sytuacja wymaga własnego zestawu diagramów, aby właściwie komunikować, co się dzieje. Uważam, że mam do czynienia z tymi samymi przedmiotami, ale relacje się zmieniają. Moją pierwszą myślą o tych różnych sytuacjach było to, że były to rodzaje _jednorazowych_ * diagramów, ponieważ dotyczą one tylko bardzo wąskiego zakresu w firmie, ale szybko wycofałem tę myśl, gdy zacząłem szukać tego samego diagramu ER, który usunąłem 3 miesiące temu w zupełnie innej sytuacji. Więc teraz mam wrażenie, że nie są jednorazowe i należy je zachować, ale chcę uniknąć stosu pozornie sprzecznych diagramów UML i ER, aby ktoś za mną mógł to wszystko zrozumieć. Jakieś sugestie?


title: Struktura pulpitu z bogatym interfejsem HTML/CSS i dziwną „obsługą natywnego języka pulpitu”

text: Nie jestem pewien, czy to, czego szukam, w ogóle istnieje, czy też szukam niewłaściwej rzeczy. Szukam frameworka/aplikacji/SDK, który pozwala mi zbudować aplikację desktopową z interfejsem opartym na HTML/CSS/JavaScript, ale nadal pozwala na bardziej złożoną interakcję z systemem operacyjnym z językiem programowania takim jak Python (jestem również zaznajomiony z Ruby, ale jako jest to projekt hobby, w razie potrzeby nie mam nic przeciwko szukaniu w innych językach). Przez złożoną interakcję z systemem mam na myśli coś więcej niż zwykłe zapisywanie plików na dysku twardym, możliwość korzystania z bibliotek Pythona byłaby dużym bonusem. Do tej pory udało mi się znaleźć tideSDK http://www.tidesdk.org, ale wydaje się, że nie oferuje wiele poza własnym interfejsem API do interakcji z systemem operacyjnym.


title: Tworzenie wielu platform lub stron internetowych za pomocą .NET

text: Wraz z rosnącą popularnością systemów iOS i Android na urządzeniach mobilnych, które stają się coraz bardziej wszechobecne, a co drugi rok jest „rokiem Linuksa na komputerach stacjonarnych” – co jest nieco sprośne, ale dochodzą do tego – OSX wciąż trzyma się mocno, czas, w którym jeden może po prostu powiedzieć „działa w systemie Windows, a jeśli nie używasz systemu Windows, cóż, bycie tobą jest do bani”. Jestem programistą .NET, a aplikacje, które tworzę, są dość zorientowane na usługi, dzięki czemu mogę łatwo udostępnić logikę zaplecza na różnych frontendach na różnych platformach. Jestem naprawdę kiepski w interfejsach użytkownika, ale w końcu aplikacje muszą kończyć się z użytkownikiem końcowym. A żeby zaprezentować aplikację użytkownikowi końcowemu, potrzebuje GUI. Wyglądało na to, że XAML/WPF był krainą nagród, w której jeszcze nie było, ale dążyli do stworzenia międzyplatformowej warstwy prezentacji. Ostatnio jednak na froncie WPF było bardzo cicho. Silverlight prawie nie żyje. Mam połowiczną nadzieję, że wydarzy się tutaj „właściwa rzecz”, z jakąś czarną magią, pixiedustem i latającymi jednorożcami, które robią kupę tęczy, przekształcając mój kod + XAML w aplikacje HTML5/CSS3, winform, metro lub jakąkolwiek inną formę, którą wybiorę budować dla. To może być trochę optymistyczne. Do jakich form prezentacji powinienem zwracać uwagę? Chciałbym nadal używać platformy .NET jako podstawowego ekosystemu. Czy powinienem po prostu przejść do asp.net + html5 i zrobić front-end ręcznie w html5/js/css? Czy istnieją jakieś ramy, które wyglądają na obiecujące, że będą w stanie zrobić coś w nieco ujednoliconym języku?


title: Projekt GPLv3 z biblioteką BSD

text: Pracuję w projekcie Pythona, który chcę wydać na licencji GPL3. Ten projekt ma jeden plik, który używa biblioteki lxml BSD. Naprawdę muszę umieścić odniesienie do licencji BSD w pliku, w którym korzystam z biblioteki? Lub po prostu GPLv3 mojego projektu obejmuje ograniczenia licencji. Biblioteka: http://lxml.de Licencje: https://github.com/lxml/lxml/blob/master/doc/licenses/BSD.txt http://www.gnu.org/licenses/gpl.txt [ Edytuj] Myślę, że nie rozumiemy, że nie umieszczę kodu źródłowego biblioteki lxml w moim projekcie. Umieszczę odniesienie do funkcji biblioteki. Jeśli ktoś chce skorzystać z mojego projektu, musi osobno pobrać bibliotekę lxml. import lxml # rób rzeczy z lxml... # rób rzeczy # mój kod Licencję na bibliotekę należy umieścić tylko wtedy, gdy rozpowszechniam kod źródłowy lxml z moim projektem. Czy mam rację?


title: Ogólny sposób obsługi wyjątków w Windows Phone?

text: Mam na myśli niektóre ze sposobów, w jakie inni programiści radzą sobie z wyjątkami, na przykład, gdy pojawia się błąd podczas uzyskiwania dostępu do usługi sieciowej, powiedzmy. Jeśli przykładu nie można podać dla telefonu z systemem Windows, podaj najbliższy, jaki możesz.


title: Problem z licencjonowaniem nazw aplikacji

text: Zacząłem pisać aplikację dla Windows Phone Marketplace, upewniając się wówczas tylko, że nazwa, którą jej nadałem, nie jest używana przez żadną inną aplikację na rynku. Właśnie dowiedziałem się, że ta sama nazwa jest używana przez pozornie popularny projekt SourceForge. Czy to problem? Nie wydałem jeszcze mojej aplikacji, więc mogę zmienić jej nazwę, ale naprawdę lubię tę nazwę i wolałbym tego nie robić, chyba że jest to problem.


title: Segregowanie interfejsów/obaw do drzewa

text: Podczas pracy z pojedynczym obiektem istnieje kilka sposobów segregowania interfejsów do niego. * Rozbicie go na mniejsze składniki, które można traktować niezależnie. * Podział na prostsze interfejsy. Oba te wydają się trudne do zrobienia z drzewem. Myślę, że byłoby miło móc wykonać następujące czynności. class Node : INodeData, INodePresentation { ... } class Program { static void Main() { var node = new Node(); ManipulateNode(węzeł); PresentNode(węzeł); } void ManipulateNode(INodeData nodeData) { foreach (INodeData element potomny w nodeData.GetChildren()) nodeData.AddVertices(...); nodeData.Rotate(...); } void PresentNode(INodePresentation nodePresentation) { nodePresentation.Color = Color.Blue; nodePresentation.Size = 15; nodePresentation.Paint(); foreach (potomek INodePresentation w nodePresentation.GetChildren()) PresentNode(child); } } W ten sposób różne części programu mogą korzystać z węzła zgodnie ze zwięzłym interfejsem. Ale każdy dodany przeze mnie interfejs będzie wymagał większej liczby metod w klasie Node, co może być niemożliwe do utrzymania. Wygląda na to, że prezentacja i dane powinny być zdefiniowane w osobnych klasach, ale nie mogę wymyślić dobrego sposobu, aby to zrobić, zachowując możliwość przechodzenia przez drzewo. Jakieś sugestie?


title: Śledzenie poprawnych szczegółów zamówienia w bazie danych handlowych podczas modyfikacji „produktów”

text: Wdrażam bazę danych e-commerce. Jest to nieco inne niż większość, ponieważ „produkty”, które są na sprzedaż, dotyczą świadczonych usług. Na przykład użytkownik (sprzedawca) systemu może zdefiniować usługę „mycia samochodu”. Tabela: Usługi ------------------------------------------------------------ --- | ID (pk) | Tytuł | Opis | -------------------------------------------------- 1 Home Services umyj samochód Pominąłem kilka rubryk, ale nadal powinienem być w stanie wyrazić swoją opinię. Klient może następnie zakupić „Usługi dla domu”. Mam więc tabelę „zamówienia” z FK do tabeli „Usługi”. Standardowe rzeczy e-commerce. Mam problem z tym, co się stanie, jeśli sprzedawca zdecyduje się nieznacznie zaktualizować opis, a nawet tytuł? Może to mieć wpływ na zmianę całej usługi. W przypadku zwykłej witryny handlowej dodaj oddzielny produkt. Gdyby ten produkt się zmienił, stworzyłbyś nowy produkt i zaprzestał produkcji starego. W przypadku pakietów musimy zezwolić na aktualizacje, ponieważ opis dotyczy produktu i sprzedaży (może to jednak mój problem - może rozdzielić te dwa?), więc muszę zezwolić na zmiany. Na przykład mogą zmienić opis na „umyj samochód i posprzątaj dom”. Oczywistym problemem jest to, że istniejące zamówienia nadal będą odwoływać się do tego samego PK w tabeli usług, ale usługa jest teraz inna. Zastanawiam się, jakie jest najlepsze rozwiązanie, aby umożliwić dodawanie zmian, ale zachować prawidłowe dane dla istniejących zamówień. Jednym z rozwiązań, o którym pomyślałem, jest nie aktualizowanie wiersza, ale dodanie nowego i numeru wersji Tabela: Usługi -------------------------- -------------------------------------------------- -- | ID (pk) | Tytuł | Opis | Wersja | -------------------------------------------------- ---------------------------- 1 Usługi domowe umyj samochód 1 2 Usługi domowe umyj samochód i posprzątaj dom 2 Teraz możemy uzyskać dostęp prawidłowe informacje o poprzednich zamówieniach, a obecni klienci mogą zakupić nową opcję usług domowych. Wydaje się to rozsądnym sposobem, ale chcesz sprawdzić, czy ktoś znał inne rozwiązania? Innym rozwiązaniem jest umożliwienie aktualizacji w tabeli usług, ale następnie dla każdego zamówienia zapisz opis i tytuł (podobnie jak czasami w schematach handlowych ostateczna cena jest zapisywana bezpośrednio w zamówieniu). Problem, który mam z tym, to zapisywanie wielu zduplikowanych danych.


title: Porady dotyczące rozmowy kwalifikacyjnej – stanowisko Google Developer Advocate

text: Czy to stanowisko (Adwokat programisty) może być uważane za stanowisko Inżyniera Oprogramowania pod względem pytań do rozmowy kwalifikacyjnej, które prawdopodobnie mi zadają? Czy ktoś jeszcze był przesłuchiwany na to stanowisko? Próbuję tylko ocenić, o co poproszą mnie o stanowisko rzecznika programistów. Dziękuję. **EDYTUJ:** To tylko pierwsza rozmowa telefoniczna.


title: Jaka jest idealna mieszanka starszych i młodszych programistów w zespole?

text: W każdym zespole będziesz potrzebować więcej siwych i siwych programistów oraz kilku młodych szczeniąt. Niektóre powody to: * Pieniądze. Często zdarzają się zadania, których wykonanie nie wymaga tego samego poziomu doświadczenia, więc nie ma sensu przepłacać za ich wykonanie. * Energia. Jest energia i entuzjazm, które nowi ludzie mogą wnieść do zespołu, który powstrzymuje go od zbytniego stania się i blokowania jego dróg. Jest też spokój i mądrość, które mogą wnieść starsi ludzie. * Transfer wiedzy i rozwój kariery. Zarówno pod względem projektu, jak i umiejętności, przydatne i często zabawne jest uczyć ludzi i uczyć się nowych rzeczy. To satysfakcjonująca pomoc w „pozyskiwaniu” nowych członków zespołu. Zdaję sobie sprawę, że są pewne nowatorskie projekty, w których może być ważne, aby było więcej osób starszych niż młodszych, ale ogólnie, czy istnieje idealna mieszanka doświadczeń w zespole, czy jest to całkowicie zależne od projektu?


title: Czy mogę rozpowszechniać oprogramowanie korzystające z Microsoft Visual Basic 2010 Express Edition?

text: Czy przysługują mi prawa do pisania i rozpowszechniania oprogramowania w formie skompilowanej i źródłowej przy użyciu, częściowo, Microsoft Visual Basic 2010 Express Edition? Mam tylko darmową, ekspresową wersję. Jeśli ma to coś wspólnego z licencją, której używam, to licencja CC BY-NC-SA 3.0.


title: Czy istnieje sposób wprowadzania wartości w polu tekstowym witryny sieci Web przy użyciu wartości tabeli bazy danych?

text: Mam tabelę z nazwą użytkownika i hasłami, które chcę wprowadzić w polu nazwy użytkownika i hasła Hotmaila. Czy istnieje sposób na zaprogramowanie tego? Czy możesz manipulować polami tekstowymi na czyjejś stronie internetowej? Nie do nielegalnych celów, tylko po to, aby ułatwić sobie pracę i nie musieć ręcznie wprowadzać wartości jeden po drugim. Hotmail to tylko przykład.


title: Jaka licencja dotyczy aplikacji opartej na CodeIgniter?

text: Próbuję rozwidlić aplikację opartą na CodeIgniterze. Według strony GoogleCode licencja to GPLv3. Jednak sprawdzenie pliku license.txt w katalogu głównym aplikacji wyraźnie nie jest objęte GPL (nie zawiera preambuły itp.) i wygląda jak nieco zmodyfikowana wersja Licencji BSD określająca, że kopia licencji i wszystkie prawa autorskie muszą być dołączone do dziennika zmian, a także niektóre klauzule o odszkodowaniu. Mylące jest to, że w kilku rzeczywistych plikach php zawierają one inną licencję w komentarzach. Ta licencja jest dosłowną kopią 2-klauzulowej licencji BSD, ale poniżej tej licencji BSD znajduje się seria @tagów, a @license zawiera link do GPL 2.0, więc nie jest dla mnie jasne, jaka licencja ma do niej zastosowanie aplikacja. Wreszcie, nigdzie nie znalazłem wzmianki o tym, że projekt jest podwójna/wielolicencjonowana. Ponadto projekt nie był aktywnie rozwijany od ponad 2 lat. Czy ktoś może rzucić na to jakieś światło (lub skierować mnie w stronę zasobów, które mogłyby)? Dziękuję.


title: Jakie jest twoje ulubione pytanie podczas rozmowy kwalifikacyjnej?

text: Jakie pytanie znalazłeś szczególnie cenne podczas wywiadów z twórcami oprogramowania? Co takiego jest w pytaniu, że jest ono szczególnie przydatne? Szukam konkretnego pytania, które lubisz zadać, a nie tylko podejścia do rozmowy kwalifikacyjnej, takiego jak „spraw, by napisali kod”.


title: Zarządzanie wydaniami/zmianami – najlepsze podejście

text: Zadałem to pytanie rok temu w StackOverflow i nigdy nie otrzymałem dobrej odpowiedzi. Ponieważ programiści wydają się być lepszym miejscem do zadawania pytań, spróbuję... Jaki jest lepszy sposób pracy z zarządzaniem wydaniami? A dokładniej, jaki byłby najlepszy sposób na wydanie pakietów? Na przykład zakładając, że masz stosunkowo stabilny system, dobry proces zapewniania jakości (QA) itp. Jak wolisz wydawać nowe wersje? Załóżmy, że mówimy o średnio-dużym „scentralizowanym” systemie internetowym (bez klientów), wewnętrznym rozwoju. System ten można uznać za „niezbędny” dla działalności korporacyjnej. Zwykle wolę to robić, wypuszczając pakiety w regularnych odstępach czasu, nie dłuższych niż 1 do 3 miesięcy. W tym okresie będę włączał do pakietu poprawki i usprawnienia oraz dokonywał wdrożenia w środowisku produkcyjnym tylko raz. Ale widziałem ludzi, którzy wolą wprowadzać małe zmiany w produkcji, ale z większą częstotliwością. Twierdzą oni, że robiąc to, łatwiej jest zidentyfikować błędy, które przeszły przez proces kontroli jakości: w pakiecie z 10 zmianami i innym z tylko 1, znacznie łatwiej jest dowiedzieć się, co spowodowało problem w pakiet z jedną zmianą... Jaka jest opinia od Ciebie?


title: Jak zarządzać pełzaniem zakresu?

text: Często otrzymujemy od firmy prośby w ostatniej chwili z prośbą o zaimplementowanie dodatkowej funkcji. Kierownik projektu jest zwykle odpowiedzialny za odfiltrowanie tych żądań jako „must have” lub „miło mieć”, ale zdarzają się przypadki, w których firma chce wycisnąć wszystkie te funkcje w wydaniu. Czy istnieje dobry sposób na powiedzenie firmie NIE? Jakie kroki można podjąć, aby zatrzymać lub zminimalizować pełzanie zakresu?


title: Czy istnieje standardowy sposób ustrukturyzowania strony internetowej?

text: Kiedy po raz pierwszy nauczyłem się tworzyć strony internetowe (html/css), używałem dokładnej szerokości i wysokości w pikselach dla wszystkich elementów div. Ćwiczyłem również tworzenie stron internetowych, których szerokość i wysokość w procentach są jedynie procentami. Mogę dość łatwo użyć dowolnej techniki, ale chciałem wiedzieć, czy istnieje standardowa technika lub struktura do budowania podstawowego układu witryny? Moim ostatnim faworytem jest, aby mój główny kontener div miał dokładną szerokość w pikselach z automatyczną wysokością (wyśrodkowany na stronie), a następnie wszystkie elementy div w środku ustawione na procentową szerokość i automatyczną wysokość. To działa dobrze dla mnie, ale jeśli istnieje powszechnie uznawany standard tworzenia strony internetowej od podstaw, chciałbym wiedzieć.


title: Czy słuszne jest używanie Node.JS jako serwera TCP?

text: **Część I - Historia:** Stworzyłem wysokowydajny serwer TCP w `C#` (w oparciu o _SocketAsyncEventArgs_), który działa znakomicie (dla mojej sprawy). Mam ponad 7000 klientów, wysyłają mi wiadomość co 30 sekund - 1 min. W ostatnich dniach studiowałem **_Node.JS_** (dla innego, zupełnie niezwiązanego projektu) i dowiedziałem się, że _Node.JS_ może być używany jako serwer TCP. Pomyślałem więc: „Hej… Zobaczmy, czy może konkurować z moim „najnowocześniejszym” serwerem TCP”. Zadziwiające było to, że Node.JS był (jest) bardziej wydajny (w niektórych przypadkach znacznie bardziej wydajny) niż „najnowocześniejszy serwer TCP”, a także był znacznie prostszy i zużywał znacznie mniej zasobów. **Część II – Pytanie:** Czy dobrze jest używać Node.JS tylko do implementacji serwera TCP, a nie aplikacji internetowej? Czy uważa się to za nadużycie Node.JS? A jeśli ktoś to zrobił, jakie były plusy i minusy na dłuższą metę? Uwaga (ważna): nie zaimplementowałem jeszcze części parsowania wiadomości w Node.JS. Muszę więc znaleźć skuteczny sposób na wdrożenie podnoszenia ciężarów w sposób asynchroniczny.


title: Zautomatyzowane kompilacje, narzędzia do budowania i systemy wbudowane

text: Pochodzę ze świata systemów wbudowanych, w którym używamy C/C++ do programowania i używamy IDE do generowania pliku binarnego, który jest następnie programowany na płycie sprzętowej, którą można następnie przetestować. Czy na tym tle ktoś może wskazać mi przykładowy przepływ pracy dla zautomatyzowanych kompilacji, który ma wyraźną przewagę nad obecnym przepływem pracy -build( using IDE)->Flash do sprzętu->test. Innymi słowy, czy jest sposób na skorzystanie z zalet CI w domenie, w której działam?


title: Oceń wszystkie kombinacje par w tablicy pod kątem warunku w złożoności czasowej n log n

text: Zadanie — Rozważ tablicę n elementów. Policz liczbę par spełniających warunek X (suma dwóch elementów < dowolna liczba, k) . Podstawowe podejście, o którym mógłbym pomyśleć, to O(n^2), gdzie oceniam wszystkie pary n*(n-1)/2. Jak mogę rozwiązać problem w lepszych ramach czasowych, tj. O(n log n) lub mniej? Najlepszym podejściem do tej pory było posortowanie tablicy, znalezienie gdzie a+b jest mniejsze niż k, a następnie dodanie indeksu a do rozwiązania. Ale proces nadal musi przejść przez n-1 'b, aby sprawdzić dla każdego z nich. Jest lepiej, ale nadal nie poprawia się w najgorszym przypadku. Poza tym to nie jest praca domowa. Natknąłem się na to przygotowując się do zawodów.


title: Czy istnieją ustalone algorytmy rozmieszczania obiektów o nierównych rozmiarach?

text: Pracuję nad wizualizacją hierarchii. Pojawią się skupiska obiektów, z których każdy będzie zawierał prostokąty o stałej szerokości, ale zmiennej wysokości. Chciałbym rozmieścić je w prostokątnej przestrzeni, aby mieć równe odstępy wizualne między nimi, coś takiego: ![mockup](http://i.stack.imgur.com/SapuH.png) pobierz źródło bmml - Szkielety stworzone za pomocą Balsamiq Mockups Zanim spędzę dzień na wymyślaniu koła, czy istnieją standardowe algorytmy dla tego rodzaju dystrybucji i wypełniania przestrzeni? Gdyby wszystkie obiekty miały ten sam rozmiar, użyłbym po prostu siatki. Użyję tego algorytmu na dwóch poziomach: raz do rozmieszczenia klastrów i ponownie do rozmieszczenia obiektów w każdym klastrze. Te ostatnie wyglądałyby najlepiej, gdyby były ułożone w mniej więcej okrągłej przestrzeni, ale jeśli to zbytnio komplikuje sprawę, nie mam nic przeciwko prostokątowi. Nie będę pokazywał relacji między tymi obiektami, więc minimalizacja odległości nie jest konieczna. Istnieje podobne pytanie (Jaki byłby najlepszy sposób na wypełnienie „przestrzeni” w interfejsie użytkownika dla galerii o nieregularnych rozmiarach obrazów?) o układaniu prostokątnych obrazów przy jednoczesnym eliminowaniu lub minimalizowaniu białych przestrzeni. W moim przypadku chcę wyrównać białą przestrzeń, gromady będą okrągłe, a niektóre gromady będą znacznie większe od innych.


title: dlaczego reszta z dzielenia pomnożona przez dzielnik ? przy użyciu operatora %

text: Zacząłem uczyć się Javascript. Z książki http://eloquentjavascript.net: > Jest jeszcze jeden operator arytmetyczny, który prawdopodobnie jest ci > mniej znany. Symbol `%` jest używany do reprezentowania pozostałej operacji. `X % Y` to > reszta z dzielenia `X` przez `Y`. Na przykład „314% 100” to „14”, „10% > 3” to „1”, a „144% 12” to „0”. Reszta ma takie samo pierwszeństwo jak > mnożenie i dzielenie. Nie rozumiem, dlaczego mnoży resztę ułamka przez dzielnik (po dzieleniu). Jest bardziej skomplikowany lub mniej dokładny. 10/3 = 3,3333 (cykliczna liczba dziesiętna). 10 % 3 = 1 (0,333 * 3 = 0,999 (nie 1 ) Jaki jest cel tych dziwnych reszt ?Dzięki


title: Jakie problemy pojawiają się podczas pracy z komunikatami HL7?

text: Testuję produkt dla firm zajmujących się opieką zdrowotną i pracujemy z komunikatami HL7. Widziałem ludzi jęczących na inne pytanie dotyczące problemów z HL7, ale nie wspominając o szczegółach. Czy ktoś może mi podać kilka pomysłów na to, jakich problemów lub klas problemów powinniśmy konkretnie szukać? Do parsowania używamy kilku dobrze używanych bibliotek. Jeśli konkrety na ten temat lub to, co robimy, byłyby pomocne, daj mi znać w komentarzach, a jeśli mogę, dodam do pytania.


title: Które języki programowania są wieloplatformowe, szybkie i zorientowane obiektowo z nieograniczającym dostępem do systemu operacyjnego niskiego poziomu?

text: Od kilku lat jestem programistą stron internetowych i chcę zająć się tworzeniem programów komputerowych. Szukam języka, który pozwoli mi pisać programy, które są: * Wieloplatformowe, obsługujące Windows, Mac i Linux, domyślnie lub przy niewielkim nakładzie pracy. * Twórz programy, które są szybkie. * Jest zorientowany obiektowo. * Nie ma żadnych ograniczeń, jeśli chodzi o rodzaj programów, które można za jego pomocą zbudować (np. Może być używany do uzyskiwania dostępu do funkcji systemu operacyjnego niższego poziomu, np. Pokazywanie ikony na pasku zadań lub ponowne uruchamianie komputera) * (Bonus, ale nie konieczne) Ma jakieś narzędzie do tworzenia GUI * (Bonus, ale nie jest konieczny) Domyślnie jest wyposażony w narzędzia do dostępu do bazy danych, takie jak MySQL lub SQLite Jestem na Linuksie i wolałbym nie używać C#, ponieważ nie ma dla niego dobrego IDE na Linuksie. Jeśli jednak jest to najlepszy wybór, mogę być przekonany, aby się na niego przestawić. Z góry dziękuję.


title: Czy warto uczyć się/używać frameworka Play (dla Scali lub Java), jeśli nie używam w nim MVC

text: Wolę aplikację Single Page Application od HTML generowanego po stronie serwera. Jestem wyczulony na ton „wysokiej produktywności” dostarczany przez Play. Teraz, jeśli nie używam części generującej HTML, czy nadal jest ona cenna? Czy warto się tego nauczyć? Dla kontrolera (REST lub innego), logika biznesowa, trwałość. Czy pomaga w generowaniu testów jednostkowych? Jak tego używasz? Dziękuję Ci


title: Decyzje platformy aplikacji intranetowych wamp vs node

text: Mam aplikację java klient/serwer z backendem firebirdsql. Jest to uciążliwe, ponieważ muszę zainstalować javę i klienta na każdej stacji roboczej itp. Nadszedł więc czas, aby przepisać aplikację i zdecydować, jakiej technologii użyć. Moje mocne strony to php/js/C# Aplikacja może być jednego użytkownika lub wielu użytkowników (nie chcę jednak zmuszać użytkowników do instalacji pełnej usługi bazy danych dla wielu użytkowników, jeśli to możliwe) Musi działać poza siecią (niektóre lokalizacje będzie używany bez dostępu do Internetu) Będzie przede wszystkim wdrożony na komputerach stacjonarnych z systemem Windows i będzie dostępny zdalnie za pośrednictwem ipadów/laptopów. Chciałbym móc uruchomić całą aplikację z klucza USB, bez konieczności instalacji. Moje początkowe przemyślenia to po prostu stos wampów, chociaż nie jestem pewien, jak łatwo będzie połączyć go w łatwą do wdrożenia aplikację. Muszę również mieć zadanie w tle działające "aka cronjob" i nie jestem pewien, jak to wywołać z samej aplikacji, bez napisania usługi systemu Windows. Moją drugą myślą jest spojrzenie na węzeł + baza danych (której bazy danych nie jestem pewien, najlepiej osadzonej lub samodzielnej). Dobrą rzeczą, jaką tu widzę, jest to, że stosunkowo łatwo radzę sobie z zadaniami typu cronjob. Bit, w którym utknąłem, znajduje się w wyborze bazy danych. Spojrzałem na sqlite, ale sterowniki nie wydają się aż tak solidne. Tak naprawdę 3 pytania. 1. co to jest dobre wbudowane/samodzielne (nieserwerowe) relacyjne bazy danych, które mogą być używane z węzłem. 2. czy ktoś ma doświadczenie w wykonywaniu podobnego projektu i wszelkie problemy, które napotkał ze stosami węzłów lub wampów 3. Czy istnieją lepsze stosy technologiczne, których mógłbym użyć w tym scenariuszu? localhost i nie udało mi się określić problemu.


title: „/*@null@*//*@out@*/” w deklaracji funkcji C

text: W `alloc.h` djbdns-1.05 jest następujący kod: > `extern /*@null@*//*@out@*/char *alloc();` Moje pytanie dotyczy głupkowatego `/* @null@*//*@out*` „dekorator”. Zakładam, że jest to „tylko komentarz” mający pewne znaczenie dla systemu budowania djbdns. Ale w innych plikach nie mogę znaleźć niczego, co by do niego odwoływało się. Czy ktoś wie co to jest?


title: Test techniczny dla starszego programisty

text: Mam dylemat. Mam kandydata na stanowisko starszego programisty. Facet wydaje się kompetentny w pierwszej rozmowie z nim i dokładnie odpowiadał na zadawane pytania i dawał mi dowody swojej pracy. Co więcej, został bardzo rekomendowany przez niektórych zaufanych kolegów. W tym przypadku kusi mnie, aby pominąć test techniczny wymagany przez HR, ponieważ muszę jak najszybciej wypełnić wakat. Podziel się swoim doświadczeniem. **EDYTUJ:** Wbrew lepszemu osądowi dałem test. Najlepsze wyniki w prawie wszystkich pytaniach, nawet w temacie, którym się nie chwalił. Ale tak bardzo popierałem trochę ironii z jego strony, kiedy zobaczył pytania egzaminu - które wyraźnie nie były dla seniora. Więc złożyliśmy ofertę. Dzięki wszystkim za spostrzeżenia.


title: Czy testerzy muszą patrzeć na kod źródłowy?

text: Jak konieczne jest, aby testerzy przeprowadzali testy białoskrzynkowe oprócz testów czarnoskrzynkowych? Jako programista dostrzegam wartość w tym, aby osoba nastawiona na kontrolę jakości przejrzała mój kod i szukała słabych punktów, ale wygląda na to, że jeśli nietechniczny tester jest wystarczająco dokładny i metodyczny, może dobrze objąć aplikację. Testowanie białoskrzynkowe może ujawnić ważne przypadki testowe, które nie byłyby oczywiste, patrząc tylko na aplikację z perspektywy użytkownika, ale wyłącznie testowanie czarnoskrzynkowe może zająć mniej czasu i znacznie zwiększyć liczbę osób, które są w stanie wykonać tę pracę . Ponadto programista powinien przeprowadzić nietrywialną ilość testów białoskrzynkowych, zanim dotrze do testera, mam rację?


title: Jak najlepiej ustrukturyzować Gita dla naszego zespołu

text: Rozpoczynamy tworzenie wielu małych projektów internetowych w naszej firmie, w których większość będzie miała jeden wspólny zasób z kilkoma fragmentami kodu (SDK, narzędzia itp.) Nasz zespół jest mały (~5), ale rośnie i jest oczekiwany rosnąć x2-x3 w ciągu kilku miesięcy. Dyskutujemy, jaki byłby właściwy sposób na zbudowanie naszej kontroli kodu źródłowego i wpadliśmy na 2 główne pomysły: 1. Umieść cały kod w jednym repozytorium, które zostanie zsynchronizowane z Github. Każdy będzie miał kopię wszystkich projektów i będzie miał również folder zasobów udostępnionych - dzięki temu będzie mógł pobrać/wysłać udostępniony kod i kod projektu za pomocą tylko jednej akcji. Ponadto nie będzie potrzeby śledzenia wielu repozytoriów. Z drugiej strony może to spowodować zamieszanie i błędy - ponieważ cały kod został ściągnięty/wypchnięty, nawet jeśli działa tylko w jednym projekcie. 2. Umieść każdy projekt we własnym repozytorium i umieść projekt zasobów współdzielonych we własnym repozytorium. W ten sposób każdy, kto pracuje nad projektem, będzie pracował tylko na tym repo i nie będzie musiał wypychać / ściągać innych repozytoriów. Spowoduje to usprawnienie pracy - ale sprawi, że każdy będzie pracował z co najmniej 2 repozytoriami (zasoby współdzielone i jego projekt), co może spowodować zamieszanie. Chętnie dowiem się, czy jedna z opcji jest złym pomysłem, czy istnieje lepszy sposób. Dziękuję!


title: Szukasz ofert pracy poza tymi, które dotyczą tylko określonego języka programowania?

text: Obecnie uważam się za programistę języka X (po prostu używam tutaj zmiennej, ponieważ nie chodzi o język), zainwestowałem czas w naukę platformy i lubię z nią pracować. Któregoś dnia coś mi zaświtało w tym, że kiedy idę szukać ofert pracy (powiedzmy w wyszukiwarce ofert pracy), po prostu wpisuję „język X”, „moje miasto” i przeglądam je. Zacząłem jednak myśleć, że mam również doświadczenie w pracy z infrastrukturą chmurową, na przykład, i być może istnieją firmy, które chcą kogoś z doświadczeniem w chmurze, ale które nie zdecydowały się jeszcze na konkretny język / platformę, aby mogły sortować ofert „otwartych”, w których nie ma wzmianki o „języku X”, mimo że mogą być otwarci na jego używanie, jeśli znajdą odpowiedniego programistę, który chciałby pracować na tej platformie. Próbowałem tej metody wyszukiwania otworów i do tej pory znalazłem kilka, które wydają się pasować do tego, o czym myślałem (że nie wymienili konkretnych języków lub zrobili to w sposób, który wydawał się niezobowiązujący / otwarty ), jestem po prostu ciekawa, jakie są doświadczenia innych co do tego, czy istnieje wiele firm, które mogą to zrobić, gdy szukają programisty, który może zbudować konkretną aplikację, a nie koniecznie już zdecydował (i wymienił) platforma, z której korzystają. Obecna praca, którą znalazłem, polegała na tym, że facet do mnie zadzwonił i ostatecznie wpłynęłam na platformę, z której korzystamy (ponieważ był to projekt od podstaw), więc czasami zastanawiam się, czy nie jestem wystarczająco otwarty podczas wyszukiwania. **Wyjaśnienie:** Myślę, że powodem, dla którego o to pytam, jest to, że w kontaktach z rekruterami mają tendencję do obsesyjnego skupiania się przede wszystkim na języku, więc jeśli powiem, że mam podstawowe doświadczenie w platformie X, a oni chcą Y, to zazwyczaj po prostu zakładają, że to nie pasuje i mówią, że poinformują Cię, gdy będą mieli dostępnych X miejsc pracy


title: Książki Mary Poppendieck o szczupłym tworzeniu oprogramowania: który z nich można polecić?

text: Czy ktoś przeczytał wszystkie trzy książki Mary Poppendieck na temat Lean Software Development? Ona i jej mąż Tom napisali: * w 2003: Lean Software Development * w 2006: Implementing Lean Software Development * w 2009: Leading Lean Software Development Mary i Tom Poppendieck są wysoko cenionymi ekspertami _lean_, więc powinienem był przeczytać jedną z ich książek , ale nie czytałem żadnego z nich. Od którego powinienem zacząć?


title: Zwróć strukturę złożoną z metody gettera w DTO

text: Załóżmy, że następująca klasa DTO. Który z dwóch getterów najmniej łamie enkapsulację? class Foo { public: /*Zwraca najbardziej prymitywny typ. Wywołujący nie musi się martwić, czym jest tablica*/ const RecType* dataBeginGet() const; const RecType* dataEndGet() const; /*Zwróć referencję do tablicy. Wywołujący nie musi wywoływać dwóch metod przed iteracją */ const Array<RecType>& dataGet() const {return m_data;} private: Array<RecType> m_data; };


title: Utworzenie komitetu wytycznych etycznych dla ochrony deweloperów?

text: Robiąc ostatnio kontrakty dla dość dużej firmy, która zajmuje się swoim IT wewnętrznie (głównie z młodszym personelem technicznym, który nie ma doświadczenia w zajmowaniu się hierarchią), natknąłem się na to, co musi być częstą sytuacją na poziomie zarządu, a nie naprawdę rozumieją etyczne aspekty niektórych rzeczy, których wymagają od działu technicznego. Na przykład członkowie zarządu widzą oprogramowanie, które „byłoby fajnie włączyć do naszej platformy” bez należytego rozważenia licencjonowania („no cóż, dlaczego po prostu nie usuniemy licencji i nie wyślemy jej – kto będzie wiedział?” itp.) oraz sprzedawcy obiecujące wysoce problematyczne funkcje i terminy, których zespół techniczny musi teraz dotrzymać, ponieważ klient jest duży. Standardowe problemy w dużych firmach… Jako „jednorazowy” wykonawca zgłosiłem to dyrektorowi, który mnie zaprosił, a on zapytał mnie, jak najlepiej rozwiązać te problemy bez powodowania poważnych bitew między różnymi zaangażowanymi osobami ... Tak więc jedno doprowadziło do drugiego i ku mojemu zdziwieniu stwierdziłem, że moja propozycja powołania wewnętrznego ciała doradczego z puli generalnych pracowników została przyjęta przez zarząd - i dostałam zadanie jej realizacji. Zarząd zobowiązał się do posiadania jednego przedstawiciela z tego komitetu na każdym posiedzeniu zarządu (ze specjalnym zezwoleniem na poufne dyskusje) na następny rok, jako środek próbny - przedstawiciel ma notować bieżące dyskusje i składać sprawozdanie komitetowi, i sporządzać notatki doradcze dla zarządu. Czy ktoś jeszcze to robił? Jakie rady mogą dać ludzie? Czy jest na co uważać? Mój pomysł zyskał szerokie poparcie wśród ogólnych pracowników firmy, a wiele osób chce się do niego zgłosić, więc akceptacja nie wydaje się być problemem.


title: Licencja CPOL. Czy mogę go używać w mojej komercyjnej aplikacji bez rozpowszechniania kodu źródłowego?

text: Rozważam użycie projektu z http://www.codeproject.com, który korzysta z licencji CPOL. Sekcja 5e mówi: „Możesz rozpowszechniać Pliki Wykonywalne i Kod Źródłowy tylko na warunkach niniejszej Licencji i musisz dołączyć kopię lub Jednolity Identyfikator Zasobów dla tej Licencji do każdej kopii Plików Wykonywalnych lub Kodu Źródłowego, rozpowszechniać i zapewniać, że ktokolwiek otrzymujący takie Pliki Wykonywalne i Kod Źródłowy zgadza się, że warunki niniejszej Licencji mają zastosowanie do takich Plików Wykonywalnych i/lub Kodu Źródłowego.Nie możesz oferować ani nakładać na Dzieło żadnych warunków, które zmieniają lub ograniczają warunki niniejszej Licencji lub skorzystanie przez odbiorców z praw przyznanych na mocy niniejszej Licencji. Nie możesz udzielać sublicencji na Dzieło. Musisz zachować nienaruszone wszystkie powiadomienia, które odnoszą się do niniejszej Licencji i zrzeczenia się gwarancji. Nie możesz rozpowszechniać Plików Wykonywalnych lub Kodu Źródłowego za pomocą jakichkolwiek środków technologicznych które kontrolują dostęp lub korzystanie z Dzieła w sposób niezgodny z warunkami niniejszej Licencji." Nie jest dla mnie jasne, czy powinienem dołączyć ich kod źródłowy do mojego pliku wykonywalnego, czy nie. Albo jeszcze gorzej, gdybym udostępnił swój własny kod źródłowy, na przykład na licencji GPL. Powód, dla którego nie jest dla mnie jasny, jest taki, że nie jestem pewien, czy kompilując ich kod źródłowy razem z moim, „dystrybuuję” ich „Kod źródłowy” czy „Pliki wykonywalne”?


title: Jak przenieść mały zespół rozwijający się na zdalnym serwerze testowym z svn na git

text: W firmie, w której pracuję, używamy SVN. Repozytorium SVN znajduje się na serwerze lokalnym. Podczas opracowywania wprowadzamy zmiany do SVN na lokalnym serwerze, który przesyła zmiany przez ftp na zdalny serwer testowy. Cały zespół korzysta z tej samej strony testowej. Używamy zdalnego serwera testowego, dzięki czemu nie musimy niczego konfigurować na naszych lokalnych maszynach. Jeśli programista A chce zobaczyć zmiany programisty B na komputerze lokalnym, musi po prostu zaktualizować swoją kopię roboczą. Przez większość czasu jesteśmy bardzo zadowoleni z takiego podejścia: * to proste * svn jest dobrze zintegrowany z Netbeans Rzeczy, które nas niepokoją to: * zmiany są przesyłane przez ftp. Przy przesyłaniu dużej ilości plików może to być dość powolne * chcielibyśmy mieć repozytorium „w chmurze”, abyśmy mogli rozwijać się nie tylko z naszego biura, ale z dowolnego miejsca (i bez konieczności konfigurowania VPN) Czy nasz przepływ pracy jest możliwy, jeśli mieliśmy użyć github do hostowania naszego repozytorium? Te rzeczy są dla nas ważne: * nie zamierzamy rozwijać się lokalnie, nadal chcielibyśmy korzystać z testsite na testserverze, który jest współdzielony przez cały zespół * ponieważ robimy wiele drobnych zmian, wypychając zmiany na testsite powinno być bardzo prostym * mamy wiele małych witryn, więc konfiguracja, którą programista powinien wykonać dla każdej witryny, powinna być minimalna


title: Opracowanie podstawowego narzędzia do rysowania obejmującego linie, krzywe

text: Zajmuję się tworzeniem oprogramowania CAD - rysunki do kodu maszynowego CNC. Te CNC mają coś w rodzaju zestawu instrukcji, które odbierają parametry itp., aby wykonać jakąś bla bla bla. Jestem całkiem zadowolony ze strony CNC; ale nagle poproszono mnie o stworzenie oprogramowania, które pozwoliłoby ci "rysować" plus przekonwertuje rysunek na kod maszynowy. NAPRAWDĘ martwię się o część „remisową”. Czy pójdę na rozwój OpenGL? czy istnieje bardziej uproszczony sposób robienia rzeczy? Podsumowując, mój problem : Stworzenie platformy mini CAD (to wszystko 2D i nie muszę zawracać sobie głowy skomplikowanymi kształtami poza liniami, kilkoma krzywymi) Ale muszę zapewnić użytkownikowi narzędzia do wykonania tych "prostych rysunków" Proszę podać Doradztwo techniczne i start.


title: Konwertuj wyrażenie algebraiczne bezpośrednio na strukturę drzewa binarnego (bez prefiksu / postfiksu)

text: Szukam w całym Internecie, aby znaleźć logikę konwersji wyrażenia algebraicznego na drzewo binarne. Mogłem znaleźć tylko takie, w których najpierw konwertujesz wyrażenie algebry na przyrostek lub przedrostek, a następnie konwertujesz je na drzewo binarne. Jestem tylko ciekaw, czy to możliwe. Jakieś wskazówki do zewnętrznych linków lub logiczne odpowiedzi, które poprowadzą mnie we właściwym kierunku? * * * yes Drzewo składni Zatem to wyrażenie A+(B-C)*D+E*F powinno zostać przetłumaczone na |-(+)-| | | |---(*)---| |---(*)---| | | | | |---(+)---| DE F | | | | A |--(-)--| | | PNE


title: Czy moja aplikacja jest podatna na iniekcję SQL, jeśli nie określę każdego typu w Doctrine2?

text: Myślałem, że przygotowane instrukcje Doctrine 2 DBAL są bezpieczne od SQLi. Ale znalazłem ten mylący fragment w dokumentacji: > Domyślnie Doctrine DBAL nie wykonuje ucieczki. Ucieczka jest bardzo trudna > do zrobienia automatycznie, dlatego domyślnie jej nie ma. Kiedy używasz Doctrine DBAL jako samodzielnego > musisz się tym zająć. Co to dokładnie oznacza? Jeśli ktoś spróbuje wstrzyknąć złośliwy kod, czy zapytanie się nie powiedzie (w przeciwieństwie do wstawienia ucieczki), ponieważ RDBMS mnie chroni? Czy w ogóle nie jestem chroniony? Używam PostgreSQL jako mojego RDBMS.


title: Czy można zaprojektować język, który nie zawiera błędów składniowych?

text: Innymi słowy, język, w którym każdy możliwy ciąg jest prawidłową składnią? **EDYTUJ** : To jest pytanie teoretyczne. nie interesuje mnie używanie takiego języka; Pytam tylko, czy to możliwe.


title: Zagadnienia prawa Demeter ze złożonym projektowaniem klas

text: Opublikowałem wcześniej pytania dotyczące tego problemu, ale wszystkie dotyczyły różnych aspektów problemu (abyś wiedział, że nie zamieszczam tego samego pytania, aby uzyskać więcej odpowiedzi). Krótko mówiąc, oto mój problem: mam klasę `Timeline`, która ma zmienną składową interfejsu `Content`. Oś czasu zarządza KIEDY zawartość zostanie aktywowana. Istnieje również klasa `Trigger`, która pobiera odniesienie do klasy `Timeline` i wywołuje metody `play()` `Timeline` w określonych momentach (np. gdy użytkownik naciśnie spację). Aby zorganizować „Wyzwalacze” i „Oś czasu” razem, są one połączone w klasę o nazwie „Cue” (która jest jedyną klasą, o którą dba reszta programu). To prowadzi mnie do problemu projektowego, ponieważ ta klasa `Cue` jest tak często używana w moim kodzie, że później byłoby ciężko ją zmienić. Ze względu na Prawo Demeter, czy nie powinienem tworzyć getterów i seterów dla zmiennych składowych `timeline` i `triggers`, a zamiast tego kopiować wiele ich funkcji do `Cue` (i po prostu wywoływać funkcje zmiennych składowych po kolei) . W ten sposób inne klasy nie będą wiedziały, jak to działa?


title: Czy to jest monada w Javie? (część 2)

text: Moja pierwsza próba była na stackoverflow. Wybieram tam odpowiedź, aby ulepszyć moją monadę: StackOverflow - Czy to jest monada w Javie? Moim celem jest napisanie przykładu monady. Nie próbuję rozwiązywać ogólnej sprawy, po prostu wymyśl jeden, aby zobaczyć, jak to działa. Jeśli mam rację, to bardzo podoba mi się ten wzór. Użyłem go już do przerobienia kodu, nad którym pracuję. Więc mam nadzieję, że to prawda. Byłem dość surowy jeśli chodzi o podpisy i nie chodzenie na skróty, na które pozwala OO. Przykładem (wymyślonym) jest zapewnienie semantyki do reprezentowania relacji przyjaciela między dwoma użytkownikami. Jeśli wystąpi błąd lub przyjaźń jest zablokowana, przetwarzanie zostanie zatrzymane. Mam przykładowy kod, który "podnosi" Boolean, String i niestandardową klasę Friend do przestrzeni monadycznej, więc myślę, że to znak, że jestem na dobrej drodze. Przykładowy kod podnoszący String dołączyłem do przestrzeni monadycznej. Moje pytanie brzmi, czy udało mi się poprawnie wdrożyć monadę? Proszę zawołać miejsca, w których przeskoczyłem szyny! public class FriendSpace<A> { public boolean odrzucona = false; public String Błędy = ""; publiczny Oryginał; interfejs publiczny Funkcja<B, MA> { MA zastosowanie(B b, MA a); } public FriendSpace<A> unit(A a) { FriendSpace<A> that = new FriendSpace<A>(); ten.oryginał = a; zwróć to; } public <B> FriendSpace<A> bind(B b, Function<B, FriendSpace<A>> f) { if (! error.isEmpty()) { // mamy błędy; pomiń resztę zwróć to; } if (odrzucone) { // Nie oznacza, że nie zwracaj tego; } FriendSpace<A> next = f.apply(b, this); wróć dalej; } @SuppressWarnings("niezaznaczone") public <B> FriendSpace<A> potok (wartość B, FriendSpace.Function<B, FriendSpace<A>>... funkcje) { FriendSpace<A> space = this; for (FriendSpace.Function<B, FriendSpace<A>> f : functions) { spacja = spacja.bind(wartość, f); } zwróć spację; } // toString pominięto w celu zaoszczędzenia miejsca } A oto przykład, w którym (dowolnym) wejściem jest klasa People, a (dowolną) klasą reprezentującą stan przyjaźni jest String public class People { public People(String from, String to) { this.from = z; this.to = do; } public Ciąg z; publiczne Ciąg do; } @SuppressWarnings("unchecked") public static void main(String[] args) { FriendSpace<Ciąg> proto = new FriendSpace<Ciąg>(); People people0 = new People("Bob", "Fred"); FriendSpace<Ciąg> spacja0 = proto.unit(""); FriendSpace<Ciąg> friends0 = spacja0.pipeline(ludzie0, ZWERYFIKUJ, ZAPROŚ, AKCEPTUJ); System.err.println(przyjaciele0); People people1 = new People("Bob", "Jenny"); FriendSpace<String> spacja1 = proto.unit(""); FriendSpace<Ciąg> friends1 = spacja1.pipeline(osoby1, ZWERYFIKUJ, ZAPROŚ, AKCEPTUJ); System.err.println(przyjaciele1); People people2 = new People("Fred", "Jenny"); FriendSpace<Ciąg> spacja2 = proto.unit(""); FriendSpace<Ciąg> friends2 = space2.pipeline(ludzie2, ZWERYFIKUJ, ZAPROŚ, ZABLOKUJ); System.err.println(przyjaciele2); Ludzie ludzie3 = nowi Ludzie("Bob", "Tomek"); FriendSpace<Ciąg> spacja3 = proto.unit(""); FriendSpace<Ciąg> friends3 = spacja3.pipeline(ludzie3, ZWERYFIKUJ, ZAPROŚ, AKCEPTUJ); System.err.println(przyjaciele3); } publiczny interfejs StringFunction extends FriendSpace.Function<People, FriendSpace<String>> { } static StringFunction VERIFY = new StringFunction() { public FriendSpace<String> Apply(Ludzie z, FriendSpace<String> do) { String KNOWN_USERS = "Bob Fred Przędzarka"; if (! KNOWN_USERS.contains(from.from)) { to.errors += "Nieznany z: " + from.from; } if (! KNOWN_USERS.contains(from.to)) { to.errors += "Nieznany: " + from.to; }                      wrócić do; } }; static StringFunction INVITE = new StringFunction() { public FriendSpace<String> apply(People from, FriendSpace<String> to) { // Jenny zablokowała Boba if ("Jenny.equals(from.to) && "Bob".equals (from.from)) { to.errors = "Jenny zablokowała Boba"; }                 wrócić do; } }; static StringFunction ACCEPT = new StringFunction() { public FriendSpace<Ciąg> Apply(Osoby z, FriendSpace<Ciąg> do) { // Dobrze iść! to.original = "TAK"; wrócić do; } }; static StringFunction BLOK = new StringFunction() { public FriendSpace<Ciąg> Apply(Osoby z, FriendSpace<Ciąg> do) { to.original = "BLOK"; to.odrzucone = prawda; wrócić do; } };


title: Aplikacja konsolowa a GUI?

text: Staram się stworzyć minimalny odtwarzacz MP3 z kilkoma fajnymi, ale lekkimi funkcjami. Jest tak prosty, że nie ma znaczenia, czy jest to aplikacja konsolowa, czy nie. Skoro moim celem jest jak najmniejsze zużycie źródeł, które z nich powinienem wybrać? Dodatkowe informacje: Będę używał pojedynczego pola tekstowego, jeśli ma to być aplikacja z GUI. Ponadto używam VS 2010 C++


title: Czy lepiej eksponować kolekcję lub interfejs API w kolekcji?

text: Weźmy na przykład następujące: interfejs publiczny IManager { void AddItem(CollectionItem item); void RemoveItem(CollectionItem item); } interfejs publiczny IManagerCustomCollection { ManagerCollection Systems; } Czy zazwyczaj lepiej jest utworzyć kolekcję i pozwolić konsumentowi na bezpośrednie działanie na kolekcji?


title: Ustaw datę modyfikacji = datę utworzenia czy null przy tworzeniu rekordu?

text: Stosuję konwencję dodawania utworzonych i zmodyfikowanych kolumn do większości moich tabel bazy danych. Pozostawiam również zmodyfikowaną kolumnę jako null przy tworzeniu rekordu i ustawiam wartość tylko przy rzeczywistej modyfikacji. Inną alternatywą jest ustawienie daty modyfikacji tak, aby była równa dacie utworzenia przy tworzeniu rekordu. Robiłem to w poprzedni sposób, ale ostatnio natknąłem się na jedną wadę, która poważnie skłania mnie do zmiany. Musiałem ustawić zależność pamięci podręcznej bazy danych, aby dowiedzieć się, czy jakiekolwiek istniejące dane zostały zmienione lub dodane nowe. Zamiast móc wykonać następujące czynności: `SELECT MAX(zmodyfikowany) FROM klient` Muszę to zrobić: `SELECT GREATEST(MAX(utworzony), MAX(zmodyfikowany)) FROM klient` Negatywnym jest to, że jest to bardziej skomplikowane zapytanie i wolniej. Inną rzeczą jest to, że systemy plików, jak sądzę, zwykle stosują drugą konwencję ustawiania daty modyfikacji = data utworzenia przy tworzeniu. Jakie są zalety i wady różnych metod? To znaczy, jakie kwestie należy wziąć pod uwagę? **AKTUALIZACJA** Wierzę, że biorąc pod uwagę widoczne kompromisy, zamierzam zastosować zmodyfikowaną = stworzoną strategię. Dodatkowo byłem ciekaw, jak poradziły sobie z tym inne internetowe bazy danych i zauważyłem, że drupal wydaje się podążać za konwencją modyfikacji = również tworzony.


title: Różne sposoby zarządzania dokumentacją kodu Java

text: Jakie są dobre alternatywy dla wbudowanej dokumentacji Java, tj. czy można mieć osobny plik docs w jakiś sposób zmapowany do pliku źródłowego Java? Nigdy nie lubiłem dużych sekcji komentarzy zaśmieconych w kodzie, więc szukałem tylko opcji. Czy są dostępne dobre narzędzia do zarządzania takimi dokumentami?


title: Czy powinienem pominąć parametr "e" podczas korzystania z EventHandler<EventArgs>?

text: Ilekroć definiuję własne zdarzenia, używam wzorca takiego jak następujący (w którym _wierzę_, że jest to zalecane przez MSDN): public class MyEventClass { private bool _value; // Zmienna zapasowa public bool Value { get { return _value; } set { if (wartość != _wartość) // Podnieś zdarzenie tylko wtedy, gdy wartość zostanie zmieniona/inna { _wartość = wartość; OnValueChanged(EventArgs.Empty); } } } zdarzenie publiczne EventHandler ValueChanged; // Wszystko może subskrybować zdarzenie chronione void OnValueChanged(EventArgs e) // Tylko to i elementy potomne mogą wywoływać zdarzenie { if (ValueChanged != null) ValueChanged(this, e); } } Tak więc kod klienta wystarczy zasubskrybować zdarzenie i działa automagicznie. Jednak przekazywanie parametru `EventArgs e` wydaje się kłopotliwe, w szczególności w przypadku klasy, która używa EventHandler do zgłaszania swoich zdarzeń, ponieważ podstawowa EventArgs nie zawiera żadnych danych, a jedynie `EventArgs.Empty`. Czy zmiana na to nie byłaby uważana za faux pas? protected void OnValueChanged() { if (ValueChanged != null) ValueChanged(this, EventArgs.Empty); }


title: Zmniejszające się zyski z dodatkowych programistów

text: Czy istnieje termin opisujący moment, w którym dodanie większej liczby programistów do projektu oprogramowania przyniesie malejące zyski? Zdaję sobie sprawę, że na wysokim poziomie jest to bardziej skomplikowane niż tylko liczba programistów, u których projekt będzie miał zdolność produkcyjną (były/stan projektu, jakość dodanego programisty), ale staram się wymyślić sposób powiązania tego z zarządzaniem nietechnicznym poprzez powtarzanie. Zasadniczo szukam terminu, który wywołuje silny obraz mentalny, jak "prędkość końcowa", z wyjątkiem prawa Brooka.


title: Jaka jest najskuteczniejsza kolejność uczenia się SQL Server, LINQ i Entity Framework?

text: Próbuję uzyskać porady dotyczące kolejności, w jakiej należy się dowiedzieć o SQL Server, LINQ i Entity Framework, aby móc lepiej pracować z formularzami sieci Web ASP.NET i MVC. Z tego, co do tej pory udało mi się dowiedzieć, wielu zaleca naukę LINQ lub Entity Framework przed poznaniem SQL Server. Wydaje się również, że wiele firm poszukuje osób z wiedzą na temat LINQ-to-SQL i Entity Framework, nie wspominając o SQL Server. Rozumiem jednak, że LINQ-to-SQL i Entity Framework tłumaczą kod na zapytania SQL Server, co sprawia, że jest to słabe podejście. Czy istnieje poprawna lub najlepsza kolejność uczenia się tych technologii?


title: Czy powinienem używać stylu C w C++?

text: Wypracowując swoje stanowisko na temat tego, jak należy rozwijać oprogramowanie w firmie, w której pracuję, doszedłem do pewnego wniosku, którego nie jestem do końca pewien. Wydaje mi się, że jeśli programujesz w C++, nie powinieneś używać niczego w stylu C, jeśli można w tym pomóc i nie potrzebujesz absolutnie poprawy wydajności. W ten sposób ludzie są powstrzymywani przed robieniem takich rzeczy jak arytmetyka wskaźników lub tworzenie zasobów z nowymi bez żadnego RAII, itp. Jeśli ten pomysł zostałby wymuszony, zobaczenie znaku* prawdopodobnie należałoby do przeszłości. Zastanawiam się, czy taki wniosek wyciągnęli inni? A może jestem zbyt purytański?


title: Jak zaprojektować obiekty warstwy modelu i dostępu do danych w witrynie?

text: Dostałem zadanie zaprojektowania warstwy danych dla strony internetowej w pracy i bardzo interesuje mnie architektura kodu, aby zapewnić najlepszą elastyczność, łatwość konserwacji i czytelność. Ogólnie jestem dogłębnie świadomy wartości całkowitego oddzielenia moich rzeczywistych modeli od warstwy dostępu do danych, tak że modele są całkowicie naiwne, jeśli chodzi o dostęp do danych. W tym przypadku jest to szczególnie przydatne, ponieważ modele mogą być budowane z bazy danych lub mogą być budowane z usługi sieciowej Soap. Wydaje mi się więc, że sensowne jest posiadanie w warstwie dostępu do danych fabryk, które tworzą obiekty modelu. Oto, co mam do tej pory (w moim wymyślonym pseudokodzie): class DataAccess.ProductsFromXml extends DataAccess.ProductFactory {} class DataAccess.ProductsFromDatabase extends DataAccess.ProductFactory {} Następnie są używane w kontrolerze w sposób podobny do poniższego : var xmlProductCreator = DataAccess.ProductsFromXml(xmlDataProvider); var databaseProductCreator = DataAccess.ProductsFromXml(xmlDataProvider); // Zwraca tablicę obiektów modelu produktu var XmlProducts = databaseProductCreator.Products(); // Zwraca tablicę obiektów modelu produktu var DbProducts = xmlProductCreator.Products(); Moje pytanie brzmi, czy jest to dobra struktura dla mojej warstwy dostępu do danych? Czy dobrym pomysłem jest użycie Factory do budowania moich obiektów Model z danych? Myślisz, że coś źle zrozumiałem? I czy są jakieś ogólne wzorce, o których powinienem przeczytać, jak pisać moje obiekty dostępu do danych, aby utworzyć moje obiekty Model?


title: Jakie są obowiązki budowania zespołu z punktu widzenia dewelopera?

text: Załóżmy, że pracujesz dla korporacji zajmującej się rozwojem IT. Jak myślisz, jakie powinno być obowiązki budowania zespołu, który wykonuje „usługi” dla programistów? Czego oczekujecie od siebie i jakie zadania chętnie byście podjęli?


title: Czy statyczny jest powszechnie „zły” w testowaniu jednostkowym, a jeśli tak, dlaczego zaleca go resharper?

text: Odkryłem, że istnieją tylko 3 sposoby testowania jednostkowego (mock/stub) zależności, które są statyczne w C#.NET: * Moles * TypeMock * JustMock Biorąc pod uwagę, że dwa z nich nie są darmowe, a jeden nie trafił na wydanie 1.0, mockowanie statyczne sprawy nie są zbyt łatwe. Czy to sprawia, że metody statyczne i takie „złe” (w sensie testów jednostkowych)? A jeśli tak, to dlaczego resharper chce, żebym zrobił wszystko, co może być statyczne, statyczne? (Zakładając, że resharper nie jest również "zły".) **Wyjaśnienie:** Mówię o scenariuszu, w którym chcesz przetestować metodę, a ta metoda wywołuje metodę statyczną w _innej_ jednostce/klasie. Według większości definicji testów jednostkowych, jeśli po prostu pozwolisz testowanej metodzie wywołać metodę statyczną w innej jednostce/klasie, to **nie** przeprowadzasz testów jednostkowych, jesteś testowaniem _integracyjnym_. (Przydatne, ale nie test jednostkowy).