title: Testowanie JUnit w aplikacji wielowątkowej

text: To jest problem, z którym borykam się ja i mój zespół w prawie wszystkich projektach. Testowanie niektórych części aplikacji za pomocą JUnit nie jest łatwe i trzeba zacząć wcześnie i się tego trzymać, ale to nie jest pytanie, które zadaję. Rzeczywisty problem polega na tym, że w przypadku n-wątków, blokowania, możliwych wyjątków w obrębie wątków i współdzielonych obiektów zadanie testowania nie jest tak proste, jak testowanie klasy, ale testowanie ich w nieskończonych możliwych sytuacjach w ramach wątków. Mówiąc dokładniej, opowiem o budowie jednej z naszych aplikacji: Gdy użytkownik zgłasza żądanie, uruchamianych jest kilka wątków, z których każdy analizuje część danych w celu zakończenia analizy, wątki te działają przez określony czas w zależności od rozmiar porcji danych (które są nieskończone i mają niepewną jakość) do analizy lub mogą się nie powieść, jeśli dane były niewystarczające/brakowały jakości. Po każdej zakończonej analizie odwołują się do handlera, który po zakończeniu każdego wątku decyduje, czy zebrane dane analityczne są wystarczające do udzielenia odpowiedzi na żądanie. Wszystkie te analizatory współdzielą pewne części aplikacji (niektóre części, ponieważ instancje są bardzo duże i tylko określona liczba może być załadowana do pamięci i te instancje są wielokrotnego użytku, niektóre części dlatego, że mają stałe połączenie, gdzie połączenie wymaga czasu, np. .gr. sql), więc blokowanie jest bardzo powszechne (wykonywane za pomocą blokad wklęsłych). Chociaż aplikacje działają bardzo wydajnie i szybko, nie jest łatwo przetestować je w rzeczywistych warunkach. To, co teraz robimy, to testowanie każdej klasy i predefiniowanych warunków, ale nie ma automatycznych testów dla blokad i synchronizacji, co moim zdaniem nie jest zbyt dobre dla ubezpieczeń jakościowych. Biorąc pod uwagę ten przykład, jak poradziłbyś sobie z testowaniem wątków, blokad i synchronizacji?


title: Jak założyć firmę programistyczną

text: Zawsze interesowało mnie, jak powstają firmy programistyczne. Uważam, że jest to niezwykle trudne, kiedy jesteś związany samochodem, domem, życiem itp. Finansowanie jest zawsze największym problemem. Aby to uściślić, widzę dwa typy. Osoby oferujące _produkt/usługę_ lub oferujące firmę _doradztwo_. Jedną z rzeczy, która mnie denerwuje w rodzaju produktu/usługi, jest to, że wszyscy wiemy, jak bardzo wyczerpujące jest palenie świecy na obu końcach. Kodowanie przez 8-10 godzin dziennie, a potem kodowanie wieczorami na własnych rzeczach, nie trwa długo. Bez względu na to, jak bardzo pasjonujesz się swoim pomysłem, po prostu kodowanie dzień i noc jest receptą na wypalenie. Czy to jednak postawa defetystyczna? Czy można to zrównoważyć? Moim uczciwym zdaniem rodzaj doradztwa nie jest tak trudny. Myślę, że kiedy spędzisz wiele lat w branży, budując relacje, kontakty z kontraktów lub poruszania się i oczywiście, będąc zaangażowanym w społeczność, wtedy trafienie pierwszego projektu jako konsultanta jest z pewnością łatwiejsze niż produkt /rodzaj usługi. Wyobrażam sobie, że znajomi mogliby wtedy do Ciebie dołączyć, gdy podejmujesz większe projekty firmowe, takie jak wdrożenie Agile lub szkolenie TDD, a następnie zdobywasz większe rzeczy. Czy mógłbyś określić rodzaj firmy, na którą odpowiadasz, jeśli nie możesz przyczynić się do obu. Chciałbym usłyszeć doświadczenia lub pomysły wszystkich na każdym poziomie dla start-upów firm programistycznych.


title: cel roczny dla programistów w firmie IT

text: Jako kierownik IT, jakie cele wyznaczyłbyś swoim programistom w swoim zespole. Cele te zostaną wykorzystane w rocznym przeglądzie wyników. Jakieś zalecenia? Jak stworzyć cele, które faktycznie mierzą umiejętności techniczne programistów.


title: Zaksięgowanie wysokiej pensji w ogłoszeniu o pracę dla programisty

text: Czy umieszczenie wysokiej pensji w ogłoszeniu o pracy programisty zachęciłoby silnych kandydatów i wyeliminowałoby słabszych? Wynagrodzenie byłoby zależne od stanowiska. Edycja: Może nie zmieniłoby to twojej aplikacji, ale czy miałbyś jakieś obawy lub czy to wzbudziłoby jakieś czerwone flagi? To nie sprawiłoby, że wydaliby się zdesperowani?


title: Jaki jest najlepszy sposób skalowania systemu CQRS?

text: W poprzednich miesiącach zadawałem wiele pytań dotyczących architektury aplikacji, nad którą pracuję. Dzięki odpowiedziom projekt architektoniczny uległ zmianie - w rzeczywistości został uproszczony, jak pokazano na poniższym wykresie: ![architektura](http://i.stack.imgur.com/ELCA8.png) Wewnętrznie mam dwie usługi ( **NOT WCF!** ), które są zgodne z zasadami CQS. Oznacza to, że usługa zapytań po prostu zwraca widoki bazy danych; podczas gdy usługa poleceń ma pełny model domeny, który zawiera całą logikę biznesową i repozytoria umożliwiające dostęp do bazy danych (bez mechanizmu zdarzeń lub innego złożonego wzorca). Obie usługi korzystają z tej samej bazy danych. Te usługi to biblioteki klas, BEZ usług WCF, ponieważ są używane tylko wewnętrznie, więc nie potrzebuję narzutu WCF (nie rozpowszechniaj swoich obiektów, pierwsze prawo Martina Fowlera). Te operacje wewnętrzne są używane przez witrynę ASP.NET MVC i usługę PartnerService. Ta usługa PartnerService jest usługą WCF, która udostępnia funkcjonalność, którą chcę udostępnić partnerom. Jeśli kiedykolwiek będę musiał skalować z powodu dużego ruchu, mógłbym dodać serwery internetowe i/lub przenieść części do pełnego systemu CQRS (moje umowy są już na to zaprojektowane). Czy ktoś widzi z tym jakieś problemy? Jedną z rzeczy, które widzę, jest to, że jeśli zmieni się usługa zapytania lub polecenia, ma to bezpośredni wpływ zarówno na witrynę internetową, jak i usługę partnera, więc muszę wdrożyć zmiany w obu. Ale nie wiem, czy to jest problem...? Wszelkie opinie są mile widziane! Dziękuję!


title: Jak zarządzać wieloma relacjami z perspektywy projektowania oprogramowania?

text: Jak mam zarządzać projektami, gdy trzeba utrzymać dwie podstawowe relacje? Najbardziej oczywistym przykładem, jaki przychodzi mi do głowy, jest firma zajmująca się doradztwem w zakresie lokalizacji. Zastanawiałem się, jak to wyjaśnić, w istocie jest to wersja punktowa: * Każdy klient, który ma wiele lokalizacji * Istnieje kilka projektów, które odnoszą się do określonych lokalizacji klientów * Istnieją produkty dostarczane dla tych projektów * Każdy do dostarczenia odnosi się tylko do kilku lokalizacji, z którymi projekt jest powiązany. System wydaje się załamywać, gdy nałożysz te dwie główne zależności; klient z wieloma lokalizacjami, do których przypisane są projekty, oraz produkty, które łączą się z poszczególnymi lokalizacjami. Po prostu kończysz ze zbyt wieloma relacjami wiele-do-wielu, którymi trudno jest zarządzać. Problem polega na wizualizacji tego w systemie. Masz rekord klienta z podrekordami lokalizacji. Z każdym rekordem lokalizacji jest powiązanych wiele rekordów projektu. Każdy rekord Projektu zawiera rekordy elementów dostawy, które następnie odnoszą się do określonych lokalizacji. Zdaję sobie sprawę, że wydaje się to trochę estoeryczne, ale czy istnieje sposób na uproszczenie tego, aby było to wizualnie zrozumiałe?


title: clojure/erlang/go dla serwera o dużej objętości

text: Mam projekt, który będzie musiał obsłużyć tysiące żądań na sekundę z przyzwoitą ilością przetwarzania dla każdego. W większości przetwarzanie będzie odbywać się na liście elementów, zasadniczo filtrując ją i zwracając mniejszą listę. Ten proces można wykonać równolegle dość łatwo i powinienem również powiedzieć, że szybkość jest ważna. Zawęziłem mój wybrany język projektu do clojure, erlang i go, i zbadałem je wszystkie w umiarkowanym stopniu. Moje pytanie brzmi, na jakie czynniki powinienem zwrócić uwagę przy podejmowaniu decyzji? Jaki język jest lepszy do czego (przykłady byłyby świetne)? Ponieważ jest mi trochę trudno powiedzieć.


title: Cheerp -- C++ dla sieci web: postęp czy regresja?

text: Ostatnio natknąłem się na Cheerp, kompilator C++ na Javascript, który używa zmodyfikowanej wersji clang do generowania kodu JavaScript ze źródeł C++. Zastanawiam się, dlaczego w siedmiu królestwach ktoś miałby to robić przy zdrowych zmysłach? Mam na myśli: dlaczego miałbyś brać język, który w ogóle nie jest przeznaczony do sieci, który jest znacznie bardziej zawiły i biurokratyczny, pisać swój kod, a następnie kompilować go w sam Javascript? Czy ktoś widzi w tym korzyści? Z pewnością możemy odrzucić wydajność jako powód, ponieważ w końcu generuje czysty kod JavaScript. Czy jest tu ktoś, kto ma z tym prawdziwe doświadczenie? P.S.: Nie jestem pewien, czy jest to pytanie na temat, ale jest to najbardziej ogólne forum o programowaniu, jakie udało mi się znaleźć w sieci StackExchange. ## Edytuj Chociaż wydaje się to subiektywne pytanie, tak nie jest. Proszę o powody, dla których to narzędzie mogłoby się przydać. Na początku zainteresowałem się, ale zacząłem się zastanawiać, po co ktoś miałby go używać.


Jestem samotnym programistą pracującym nad przyzwoicie małym projektem z około 3 innymi osobami (nie programistami). Te inne osoby są zaangażowane w projekt w sposób nierozwojowy i jedna z nich jest również moim menedżerem. Wszyscy są również bardzo otwarci na dyskusje ad hoc. Mój menedżer właśnie dał mi coś, co wydaje się spełnieniem marzeń – miałem za zadanie określić, jaka struktura spotkań najlepiej sprawdzi się w projekcie. Wydaje się to wspaniałym sposobem radzenia sobie z przeciążeniem spotkań i/lub bezcelowymi spotkaniami. Z wielką mocą wiąże się wielka odpowiedzialność, tak jak teraz, jeśli proponuję coś, co ostatecznie skutkuje stratą czasu, to moja wina. Nigdy nie miałem takiej pustej karty, żeby pomyśleć, jak zaplanowałbym spotkania. Moje przemyślenia to: * Codzienne spotkanie „baza kontaktów/aktualizacja statusu” trwające 15 minut lub mniej (podobnie jak w przypadku spotkań standup) w celu komunikowania codziennych celów i przeglądu poprzedniego dnia. Lub wydaje mi się, że mógłbym po prostu wziąć tablicę i położyć ją na biurku, aby przekazać te informacje. * W razie potrzeby spotkania w celu podjęcia konkretnych decyzji lub odpowiedzi na pytania dowolnego zespołu ... Nie widzę potrzeby cotygodniowego spotkania projektu „statusowego”. Nie jestem też pewien, czy drugi punkt będzie wymagał wielu formalnie zaplanowanych spotkań. Obawiam się, że „skoncentrowani na programistach” (tj. ja) mogą powodować alienację z innymi lub sprawić, że mój menedżer poczuje utratę kontroli nad projektem, ponieważ ta struktura byłaby znacznie inna niż większość prowadzonych projektów. Jaką strukturę spotkań projektowych powinien wybrać jeden deweloper? * * * Adresowanie komentarzy: > Jaki wkład wnoszą inne osoby? Czy są zamierzonymi użytkownikami tego > projektu? Pracujesz nad aspektami nierozwojowymi (takimi jak motywy witryny i > obrazy lub DBA lub testy QA)? Inne poziomy zarządzania/administracji? Są to niektórzy z ostatecznych użytkowników i są zainteresowani ogólnym przepływem pracy. Wnoszą również wkład w kilka obszarów formularzy/dokumentów (których format nie będzie miał wpływu na prace rozwojowe). > Czy jesteś w stanie uzyskać informacje zwrotne od pozostałych dwóch członków? Niektórzy menedżerowie muszą > mieć regularne zaplanowane spotkania, w przeciwnym razie nigdy nie będą w stanie dopasować go > do swojego harmonogramu. Czas nie wydaje się być problemem w przyszłości.


title: Jak złagodzić zagrożenia bezpieczeństwa podczas wdrażania bazy danych w sieci za pomocą automatycznych migracji?

text: Patrzę na korzystanie z wbudowanych struktur migracji bazy danych (takich jak struktura migracji zawarta w EF Code First lub migratordotnet), ale mam obawy dotyczące konsekwencji zezwolenia produkcyjnej witrynie sieci Web na uprawnienia do wykonywania instrukcji DDL. W przeszłości podczas pracy z aplikacjami webowymi migrowałem obiekty bazodanowe ręcznie, co pozwalało mi ograniczyć uprawnienia przyznane użytkownikowi bazy danych aplikacji webowej. Oznacza to, że nawet w przypadku ataku SQL Injection, kradzieży pliku web.config lub innego ataku na witrynę atakujący miałby większe trudności z wyrządzeniem poważnych szkód (choć oczywiście nie jest to niemożliwe). Wydaje mi się, że wykonując migracje za pośrednictwem aplikacji (co wydaje się prawie wymagane w przypadku korzystania z PaaS, takiego jak AppHarbor), Twoja aplikacja może sprostać większej liczbie zagrożeń. Tak więc sedno mojego pytania brzmi: 1. Czy moje obawy są nieuzasadnione? 2. Czy mogę podjąć jakieś kroki, aby złagodzić te zagrożenia, nadal korzystając z automatycznych wdrożeń?


title: Uśpiony serwer WWW?

text: Czy są jakieś języki, a nawet serwery, które zamiast uruchamiać skrypt przy ładowaniu strony (Apache/PHP, Ruby on Rails, ...) faktycznie utrzymują kod ładowany i działający w nieskończoność, a kiedy otrzymuje połączenie, wywołuje funkcję ten kod? (Jak w zasadzie zdarzenie PageLoad?) Tak naprawdę nie wiedziałem, jak to nazwać, więc wybrałem pasywny serwer sieciowy, ponieważ kod w zasadzie śpi do momentu wystąpienia zdarzenia, a nie całkowicie rozładowany lub po prostu zbuforowany.


title: Czy zsynchronizowane słowo kluczowe jest nadal używane/potrzebne w java?

text: Czy zsynchronizowane słowo kluczowe jest nadal wymagane (ignoruj kompatybilność wsteczną, myślę w kategoriach pisania nowego kodu, dzisiaj) czy wszyscy powinniśmy korzystać z funkcji dostępnych w pakietach Concurrent i Collection?


Co oznacza „rozgałęzianie jest bezpłatne” w Git? Często słyszę to, gdy wspomina się o Git w porównaniu z innymi systemami kontroli wersji. Nie miałem okazji (?) zajmować się innymi (SVN itp.), więc jak rozgałęzianie jest "kosztowne" u innych?


title: API, które zajmują się logowaniem

text: Zostałem poproszony o stworzenie aplikacji mobilnej na stronę znajomych. Witryna jest wielopoziomową witryną marketingową, która sprzedaje produkty i franczyzy. Klient loguje się do serwisu i może przeglądać swój dashboard (użytkownik może przeglądać członków zespołu, wielkość biznesu, prowizje, faktury itp.) Aplikacja ma za zadanie przenieść dashboard na urządzenia mobilne użytkownika (z dodatkowymi funkcjami ). Firma nie ma żadnych interfejsów API, które zajmują się interakcją lub uwierzytelnianiem, a ja jestem nowy w zakresie bezpiecznego logowania do tworzenia aplikacji. Moje pytanie brzmi: w jaki sposób mogę umożliwić użytkownikom dostęp do ich informacji za pośrednictwem mojej aplikacji z bezpiecznej witryny internetowej, gdy nie ma interfejsu API?


title: Dlaczego parser http nginx nie używa wyrażeń regularnych?

text: Widzę parser http napisany przez Igora Sysoeva dla nginx nie używa wyrażeń regularnych https://github.com/joyent/http-parser Jaki może być główny powód takiej decyzji projektowej? Myślę, że mógłbym napisać kilka wyrażeń regularnych do parsowania wymagań HTTP i res, byłoby to o wiele mniej skomplikowane niż wersja parsera Igora. Czego mi tu brakuje?


title: co to jest sharding w MongoDB

text: właśnie czytałem MongoDB. natknąłem się na sharding, ale nie dostałem, co to dokładnie jest .waever zrozumiałem, że lepiej mieć więcej małych serwerów niż ogromny do przechowywania danych, a gdy dane przekraczają pojemność jednego serwera, możesz użyć innego komputera do przechowywania data.czy ktoś może dać więcej pomysłu na sharding?


title: SOA: czy zawsze powinienem to brać pod uwagę?

text: Chociaż myślę, jak pokierować przyszłym rozwojem: ### Mini-wprowadzenie Zgodnie z ustaloną zasadą zaczynam od SOA (i REST jako protokołu), a następnie pracuję nad interfejsami (a ten interfejs jest klientem mojej usługi i zwykle jest osobnym projektem). Zakładam, że moje _odchylenie_ wynika z tego, że przede wszystkim jestem back-end developerem ( _ze słabymi umiejętnościami rysowania_ ). ### Biorąc pod uwagę: 1. WIELKICH firm dokłada wszelkich starań, aby stworzyć szybkie i łatwe w użyciu narzędzia do tworzenia interfejsów. _(Mam na myśli projekty typu bootstrap, angular, android studio i wiele innych)_ ; To ulga dla tych, którzy rozwijają platformy, otwiera drzwi do wielu nowych aplikacji dla swoich platform. 2. MV*, JSON, Javascript stają się standardem w budowaniu (nawet) złożonych aplikacji; Nie ma znaczenia, czy wszystkie interfejsy są takie same, dziś boilerplate osiągnął poziom, który można uznać za wirusowy. 3. Coraz powszechniejsze repozytorium modułów (np. NPM), umożliwia nawet początkującym programistom _używanie_ i _implementację_ zewnętrznych API z dużą łatwością. 4. _los_ zawsze może pocałować nasze produkty i to może stać się nowym facebookiem (mam na myśli to, że produkt, nawet jeśli jest potrzebny jako samodzielny, może łatwo przyciągnąć zainteresowanie wielu i jest bardzo prawdopodobne, że nowe interfejsy są wymagane od wstępnego planowania). ### Pytania: 1. Czy SOA jest podejściem, do którego architekci (i programiści) powinni **zachęcać** i **rozważyć** rozpoczęcie nowego projektu? 2. Czy SOA jest **najbardziej odpowiednią architekturą** do reagowania na **nieplanowaną rozbudowę**?


title: Czy używasz nazw kodowych w swoich projektach?

text: Prawie każdy procesor ma jakąś wewnętrzną nazwę kodową, zanim zostanie udostępniony publicznie (a nawet po zawieszeniu się). Ale co z projektami oprogramowania? Czy są to zazwyczaj kodowane nazwy? Czy nazywasz swoje projekty kodem?


title: Czy doświadczenie programistyczne jest przydatne, aby zostać analitykiem biznesowym?

text: Czy doświadczenie programistyczne jest ważne, aby zostać licencjatem? Mam możliwość przejścia z programowania na BA w IT, ale nie wiem co robić. W przyszłości chcę kontynuować tylko jako BA. Czy doświadczenie programistyczne naprawdę ma znaczenie w takiej roli? Skończyłem informatykę, ale mam zaledwie 6 miesięcy doświadczenia w programowaniu


title: Poza podświetlaniem składni — jakie inne reprezentacje kodu są obecnie możliwe?

text: Pomimo tego, że aplikacje GUI istnieją już od 30 lat, oprogramowanie jest nadal pisane jako wiersze instrukcji tekstowych, z różnych ważnych powodów. Ale odkryliśmy również, że manipulowanie tymi instrukcjami tekstowymi jest niesamowicie trudne, chyba że zastosujemy warstwę kolorowania na różnych słowach, aby przedstawić ich składnię, co pozwala nam szybko analizować te pliki tekstowe bez konieczności czytania całych słów. Ale oprócz funkcji minimapy Sublime Text, nie widziałem jeszcze żadnych innowacji w wizualnej reprezentacji kodu, ponieważ kolory pojawiły się na monitorach CRT. Przychodzi mi do głowy jedna oczywiście niezbędna reprezentacja, na którą pozwala współczesna technologia graficzna: wizualne hierarchie struktur zagnieżdżonych. Jeśli zagnieżdżony tekst zmniejszymy nieco w stosunku do jego zewnętrznego kontekstu i przybliżymy go, gdy kursor jest skupiony na wierszu, będziemy mogli bardzo szybko przeglądać ogromne pliki zagnieżdżonych instrukcji. Staje się to tym bardziej istotne, że języki oparte na domknięciach i funkcjach anonimowych wypełniają się głębokimi stwierdzeniami. Czy ktoś próbował zaimplementować to w edytorze tekstu? Czy znasz jakieś inne przydatne ulepszenia w graficznej reprezentacji tekstu kodu?


title: Jak powinienem nazwać tę klasę pomocniczą?

text: Zwykle podczas pisania testów jednostkowych tworzę klasę pomocniczą z metodami rozszerzającymi. Używam tych metod wyłącznie do generowania ogólnych danych dla rzeczy, których jestem zbyt leniwy, aby je pisać. Zazwyczaj nazywam te klasy czymś, co ma związek z testowaną klasą - na przykład będę podążał za wzorcem takim jak TestHelper.cs. Czytałem, że klasy pomocnicze nie promują dobrego projektowania; jednak znam zasady SOLID dość dobrze i nie widzę, aby używanie "pomocników" w opisany sposób naruszało jakiekolwiek zasady. Myślę, że problem, który mam, dotyczy nazwy mojego „TestHelpera”… Czy powinienem po prostu wymyślić nowy schemat nazewnictwa, czy naprawdę naruszam zasadę SOLID, korzystając z tych pomocników?


title: Platforma internetowa dla iPada i popularnych przeglądarek komputerowych?

text: Tworzymy internetową, komercyjną aplikację POS. Chcielibyśmy, aby ta sama witryna internetowa działała dobrze na iPadzie, a także w przeglądarkach komputerowych. Szukamy struktury internetowej, która sprawi, że witryna będzie dobrze wyglądać na iPadzie, ale także będzie dobrze działać w przeglądarkach komputerowych, takich jak Chrome, IE lub Firefox w systemie Windows lub Mac. Znalazłem sporo z 18 mobilnych frameworków i narzędzi programistycznych do tworzenia aplikacji na iPhone'a. Większość z nich, takich jak jQTouch, pomaga stronie internetowej wyglądać i działać bardziej jak natywna aplikacja na iPhone'a, ale nie kładzie nacisku na wieloplatformowe/przeglądarki. Wyjątkiem wydaje się być Sproutcore, który wydaje się być pełnoprawnym frameworkiem aplikacyjnym JavaScript MVC. Miałem problem z uruchomieniem niektórych wersji demonstracyjnych pod Chrome, ale to, co działało, wygląda dobrze. Jakich struktur używałeś do tworzenia witryn internetowych do pracy na iPadzie i przeglądarce na komputerze? Jeśli nie używałeś frameworka, jak sprawiłeś, by działał dobrze w obu środowiskach?


title: Analiza wyników grupowych i indywidualnych członków -RUP

text: Piszę raport, który wymaga analizy pracy każdego członka zespołu z osobna. Dotyczy to projektu rozwoju oprogramowania opracowanego przy użyciu ujednoliconego procesu (UP). Zastanawiałem się tylko, czy istnieją jakiekolwiek istniejące metryki oceny grupowej i indywidualnej, więc nie muszę na nowo wymyślać koła ... EDYTUJ To w żadnym wypadku nie jest poprawne, ale coś takiego: Wkład indywidualny (IC) = czas spędzony (indywidualny) / czas spędzony (ogółem) => Wydajność = ? (powinien użyć indywidualnego wkładu (IC) w połączeniu z czymś, aby uzyskać miarę ogólnej wydajności).... Może mówię o pełnym hashu i ogólnie wiem, że naprawdę trudno jest analizować wydajność za pomocą liczb, ale każdy matematyk, który może pożyczyć ręcznie lub zna nieco dokładniejszą metodę analizy wyników niż arbitralne oznaczanie (np. 8 na 10)


title: Czy istnieje jakakolwiek sztuczna inteligencja? zasoby wyjaśniające pojęcia i prezentujące kod źródłowy?

text: Czy istnieje jakakolwiek sztuczna inteligencja? zasoby wyjaśniające pojęcia i prezentujące kod źródłowy, podobnie jak AI Horizon? Czytałem książki i artykuły naukowe, ale generalnie prezentują one podejście koncepcyjne, bez zagłębiania się w ich kod źródłowy.


title: Nauka funkcji i parametrów Pythona

text: def printMax(a, b): if a > b: print(a, 'maksimum') elif a == b: print(a, 'równe', b) else: print(b, 'maksimum' ) printMax(3, 4) # bezpośrednio podaj wartości dosłowne x = 5 y = 7 printMax(x, y) # podaj zmienne jako argumenty Uczę się Pythona poprzez bajt książki o Pythonie, a autor używa tego przykładu, aby nas przedstawić do funkcji. Kiedy autor wywołuje funkcję printMax, nie używa cudzysłowu dla liczb 3,4, tj. nie używa printMax("3","4"), co moim zdaniem było w porządku. Jednak później definiuje funkcję taką jak so def say(wiadomość, razy = 1) print(wiadomość * razy) say("cześć", 3) dlaczego używa cytatów do wiadomości (tj. dlaczego używa say( "cześć", 3) zamiast powiedzieć (cześć, 3)? Jak python zauważa różnicę?


title: Jak ocenić, czy warto napisać książkę, artykuł lub wygłosić prezentację na konferencji?

text: Staram się zrozumieć, jak powinienem oceniać pisanie książki, artykułu lub prezentacji konferencyjnej. Pisanie książki to dużo pracy. To samo dotyczy pisania artykułu w czasopiśmie lub prezentacji na konferencji. Potrzebują czasu, a ty możesz nawet popełnić błąd tu i tam, który odpala się (złe recenzje, ludzie nazywają cię idiotą..) Również robisz to za darmo (przynajmniej w przypadku artykułów w czasopismach i prezentacji konferencyjnych. Za książki dostajesz coś w stylu depozyt w wysokości 5 000 USD, a po tym rzadko otrzymujesz dodatkowe tantiemy ze sprzedaży). Jak więc ocenić korzyści? Byłbym wdzięczny za odpowiedzi, jeśli zrobiłeś to wcześniej. Mogę nie napisać książki, ponieważ wykracza poza to, co chciałbym poświęcić czasowo, ale czy powinienem zawracać sobie głowę wygłaszaniem prezentacji konferencyjnych lub pisaniem krótszych artykułów w czasopismach?


title: Jak wyjść ze wspierania martwych boisk sprzedażowych?

text: W ramach bycia programistą często jesteś proszony o przedstawienie szacunków / wykonanie slajdów / wykonanie demonstracji technicznych dla zespołów sprzedaży do zaprezentowania klientom końcowym. Czasami idziemy na „techniczne” dyskusje, „strategiczne planowanie zdolności” lub podobne bzdury. Czasami wiesz, które z nich całkowicie zakończą się niepowodzeniem i nie warto ich ścigać, ale sprzedawcy prezentują fałszywy optymizm i wyciągają z ciebie „kilka dodatkowych slajdów” lub „ostatniej telekonferencji”. Nie prowadzą one donikąd i są po prostu stratą czasu na inne zadania na tydzień. Moje pytanie brzmi, jak wyjść z tych sytuacji, nie sprawiając wrażenia, że nie chcecie współpracować. **Zaktualizowano odpowiedź Kate Gregory:** Problem jest związany z projektami, o których wiemy, że są skazane na niepowodzenie (z otrzymanych przez nas opinii technicznych) Ale sprzedaż nie jest przekonana, ponieważ właśnie otrzymali telefon na wyższym szczeblu zarządzania - więc to zdecydowanie się rozwija!


title: Preferowany styl kodu Scala dla kilku osadzonych zestawów nawiasów klamrowych

text: Zastanawiałem się nad prawidłowym sposobem formatowania sytuacji takiej jak ta, w której mam zagnieżdżone klauzule def, foreach i if, wymagające nawiasów klamrowych. Obecnie trudno mi to czytać i nie ma oczywistego miejsca na umieszczenie bitu 'x =>'. Dziękuję Ci. def getAnswer(): String = { var sum = 0 (0 do 1000).foreach { x => if (x % 3 == 0 || x % 5 == 0) { sum += x } } sum.toString }


title: Jak dostać się na drabinę - zadania Java Development

text: Ok, więc skończyłem studia od 7 lat i pracuję na tym samym stanowisku, co programista aplikacji dla firmy, która używa własnych języków/produktów programistycznych. Dużo się tutaj nauczyłem, ale zdecydowanie powinienem już iść! W moim czasie zajmowałem się praktycznym wsparciem, instalacją na miejscu, szkoleniem klientów, rozwojem POC (musiałem używać mieszanki technologii, w tym Java i Python) i wieloma innymi zadaniami. Jednak moja główna praca NIE jest zorientowana na Javę, chociaż powiedziałbym, że mam w tym spore doświadczenie z moich osobistych projektów. Zdaję sobie sprawę, że może to źle odbić się na moim CV, więc spędziłem kilka miesięcy na dodawaniu certyfikatów zawodowych do mojego CV, w tym. * Sun Certified Java Programmer 6 * Oracle Certified Expert, Java EE 6 JSP and Servlets Developer * Oracle Certified Exper, Java EE 6 Enterprise JavaBeans Developer Planuję również przystąpić do podstawowego szkolenia wiosennego, a wkrótce potem do profesjonalnego egzaminu wiosennego z certyfikatem springsource. Nie jestem do końca pewien, jak ułożyć swoje CV? Ograniczenie się do dwóch stron jest dość trudne, zwłaszcza że wzmianka o mojej historii kariery jest oczywiście dużą częścią (obecnie mam 3/4 strony, która wspomina, tytuł stanowiska, krótki opis firmy, w której pracuję, jakie są moje obowiązki i trochę moich osiągnięć, Java ma krótką wzmiankę). Jakieś porady dotyczące tego, co powinienem zrobić? Idealnie, gdybym postawiła stopę w drzwiach na rozmowę kwalifikacyjną, szukałabym na początek pensji około 35 tysięcy (jestem w Wielkiej Brytanii), czyli tylko kilka tysięcy więcej niż obecnie zarabiam. Publikuję to jako anon, ponieważ zdaję sobie sprawę, że zostawiam ślad potencjalnym pracodawcom, a dodatkowo jestem rozczarowany sobą, że zostaję tutaj tak długo. EDYCJA: Zapomniałem wspomnieć, że byłem w Wielkiej Brytanii, więc to 35 000 GBP, a nie 35 000 USD, więc w USD jest bliżej 55 000 USD Edit2: Nie w Londynie, Bristolu


title: Bezpieczne przechowywanie kodu w chmurze i synchronizacja na wielu komputerach

text: Ostatnio myślałem o tym, jak i gdzie przechowuję swój kod - pracuję w wielu lokalizacjach, z co najmniej trzema różnymi komputerami i zastanawiam się, jak zarządzać moim kodem na tych komputerach. Mam konto Dropbox, którego używam. W przypadku niewrażliwych plików jest to w porządku i trzymam tam kilka wrażliwych plików, ale w pliku VeraCrypt - to nie będzie działać na dużą skalę, ponieważ cały plik VeraCrypt musiałby zostać przesłany do jakichkolwiek zmian. Nie czuję się bezpiecznie umieszczając kod mój lub moich pracodawców w DropBox z powodu kilku problemów z bezpieczeństwem i wiadomości, że mogą uzyskać dostęp do plików wszystkich. Mam konto na githubie, na którym przechowuję mój kod (źródło otwarte i zamknięte), ale nie chcę ciągle przepychać się na GitHub, też dużo pracuję w pociągu, więc nie mogę tak pchać Nie mam stabilnego połączenia danych i są szanse, że w którymś momencie zapomnę przesłać lub pobrać dane, a wtedy utknę! Mając to na uwadze, chciałbym porozmawiać o przechowywaniu kodu w chmurze: 1. Czy przechowywanie kodu źródłowego w chmurze jest niebezpieczne? * Rozumiem konsekwencje utrzymywania kodu pracodawców w chmurze, ale czy istnieją alternatywy, biorąc pod uwagę, że duża liczba rozwiązań VPN/RDC, z których korzystałem, jest powolna do tego stopnia, że nie nadaje się do użytku? (może to być argumentem przeciwko prędkości sieci mojego/moiego pracodawcy, a nie rzeczywistym programom – ale jest to przeszkoda) 2. Czy istnieje dobra usługa oparta na chmurze z dobrym szyfrowaniem, dobrym czasem pracy, różnicą, automatyczną synchronizacją? * Czy jest taki, który jest skierowany wyłącznie do programistów? Jeśli nie, czy ktoś chce ze mną zacząć? (żart, ale jednocześnie może to być dobre przedsięwzięcie biznesowe - daj mi znać, jeśli jesteś zainteresowany) 3. Czego używasz? Czy to działa? jak byś to zmienić?


title: Skąd metoda, która zwraca bool/int i ma rzeczywisty obiekt jako parametr wyjściowy?

text: Widzę następujący wzorzec kodu w całym miejscu w bazie kodu mojej firmy (aplikacja .NET 3.5): bool Foo(int barID, out Baz bazObject) { try { // do stuff bazObject = someResponseObject; zwróć prawdę; } catch (wyjątek ex) { // błąd dziennika return false; } } // wywołanie kodu BazObject baz = new BazObject(); fooObject.Foo(barID, out baz); if (baz != null) { // rób rzeczy z baz } Próbuję zrozumieć, dlaczego miałbyś to zrobić zamiast metody `Foo`, po prostu pobierz identyfikator i zwróć obiekt `Baz`, zamiast tego zwracania wartości, która nie jest używana i posiadania rzeczywistego obiektu jako parametru referencyjnego lub wyjściowego. Czy jest jakaś ukryta korzyść z tego stylu kodowania, której mi brakuje?


title: Jak pobrać komunikaty o commitach z bitbucket, aby kierownik projektu mógł je zobaczyć

text: Czy możliwe jest pobieranie komunikatów commit z bitbucket przez json lub coś takiego, aby kierownik projektu mógł zobaczyć, jakie są zmiany, bez konieczności patrzenia na kod. Jeśli to możliwe, możesz dać mi kilka pomysłów, jak to zrobić.


title: Dobre praktyki dotyczące pakowania programów w Pythonie

text: Pythona używam już od jakiegoś czasu, zarówno w kontekście projektów osobistych, jak i zawodowych. Ostatnio przyszło mi do głowy, że nigdy nie myślałem o dobrym sposobie wdrażania programów w Pythonie. Zasadniczo, ponieważ jest to w większości kilka skryptów, zwykle po prostu kopiuję je na komputer, na którym chcę je wdrożyć i _voila_ ! Uważam jednak, że powinny istnieć dobre praktyki dotyczące wdrażania projektów w Pythonie. Słyszałem o Python Eggs, ale nie znam go na tyle, aby sprawdzić, czy to dobry wybór. Albo zwykły stary _tarball_ z mnóstwem skryptów powłoki do uruchamiania skryptów modułu podstawowego? Zasadniczo chciałbym móc wykonać ładne, eleganckie i samodzielne wdrożenie, a nie tylko kopiować pliki tu i tam, ponieważ nie pozwala to na łatwe śledzenie wersji i jest dość niechlujne.


title: Jak działa zwinny przy wymianie działającego systemu?

text: W idealnym świecie Agile szybko budujesz mały, ale użyteczny podzbiór pożądanego systemu końcowego i przekazujesz go użytkownikom. Są podekscytowani, bo to przydatne, zaczynają z niego korzystać i przekazują opinie. Następnie wymyślasz, co do niego dodać, budujesz to i powtarzasz, aż skończy ci się czas. Miałem ostatnio kilka projektów, które polegały na wymianie jakiegoś działającego systemu. Powyższy model po prostu w ogóle nie działał: dopóki nie zbudowałeś systemu, który zawierałby praktycznie wszystkie funkcje istniejącego systemu, użytkownicy nie byli w ogóle zainteresowani. Nie użyliby tego. Jak zastosować Agile, kiedy „najmniejszy użyteczny podzbiór” to „wszystko”?


title: Muszę uruchomić określoną liczbę instrukcji (które wykonują .exe) w pętli

text: Muszę uruchomić pewną liczbę instrukcji (które wykonują .exe) w pętli. ForEach(object obj in ListOfVersions) { Krok 1: wywołanie Exe1 Args=obj.somevalues Log Krok 1 zakończony dla obj Krok 2: call Exe2 Args=obj.somevalues Log Krok 2 zakończony dla obj Krok 3: call Exe3 Args=obj.somevalues Zarejestruj krok 3 zakończony dla obj } Krok 4: wywołaj Exe4 Czy istnieje jakiś konkretny wzorzec projektowy dostępny do użycia w powyższej sytuacji.


title: Typowe umowy dotyczące rozwoju freelancera?

text: Dopiero zaczynam karierę programisty i mam szansę ubiegać się o pracę jako freelancer. Przejrzałem specyfikacje aplikacji i wierzę, że jestem w stanie w zadowalający sposób spełnić wymagania. Pracowałem w zespole opracowującym 2 różne aplikacje na tę samą platformę, a także jedną aplikację, którą napisałem dla firmy znajomych (za wynagrodzeniem, ale to było nieformalne) i wszystkie rzeczy, które zrobiłem do użytku osobistego / w szkole, więc wierzę Mogę dość dokładnie oszacować, ile mi to zajmie. Jednak nie mam pojęcia, jak te rzeczy działają w prawdziwym świecie. Ukończyłem szkołę niecały rok i miałem tylko 2 krótkoterminowe umowy deweloperskie. W szczególności: 1. Płatność: co zwykle? Płatność przy odbiorze? Płatność z góry? Procent z góry? 2. Kod źródłowy: Rozumiem, że musiałbym podać im kod źródłowy, ale co z poprzednimi bibliotekami, które stworzyłem. Czy gdybym ich użył w projekcie, to również należałyby do klienta? 3. Jak szczegółowa powinna być umowa wstępna? Co się stanie, jeśli klient zmieni zdanie na temat szczegółów. 4. Nie jestem do końca pewien, jak ustalić cenę (byłem wdzięczny za propozycje formuł). Zakładam, że muszą istnieć jakieś standardy branżowe dla tego typu rzeczy. Po prostu nie jestem pewien, czym one są/gdzie je znaleźć? Naprawdę byłbym wdzięczny za wszelkie porady na ten temat, nawet jeśli są to tylko linki do innych zasobów. Jeśli ma to znaczenie zarówno ja, jak i potencjalny klient znajdujemy się w Kanadzie.


title: Dobre praktyki pisania tagów w SVN

text: Tagi są istotną częścią kontroli wersji, na przykład SVN. * Kiedy powinienem pisać Tagi w SVN? * Jakie informacje powinny mieć Tagi?


title: Jak wykryć nakładające się na siebie dwa ruchome kształty?

text: Mając listę okręgów wraz ze współrzędnymi (x i y), które poruszają się co sekundę w innym kierunku (południowy wschód, południowy zachód, północny wschód i północny zachód), okrąg zmieni kierunek, jeśli uderzy w ścianę trochę jak podskakiwanie, więc jak wykryć, czy któryś z nich koliduje lub nakłada się na siebie? Nie jestem pewien, czy możemy użyć niektórych struktur danych, takich jak `Drzewo wyszukiwania binarnego`, ponieważ ponieważ wszystkie współrzędne zmieniają się co sekundę, drzewo będzie musiało zostać odpowiednio przebudowane. Czy za każdym razem możemy użyć algorytmu pionowego przeciągnięcia linii? Jakieś pomysły, jak to zrobić w efektywny sposób?


title: Jak łatwo jest zmienić odcisk palca przeglądarki?

text: Badam to pytanie dla ewentualnego artykułu. Biorąc pod uwagę wykorzystywanie tożsamości użytkowników do zarządzania ryzykiem i śledzenia rynku, jak łatwo jest zmienić przeglądarkę na tyle, aby odrzucić techniki pobierania odcisków palców? Moje aktualne źródła to: * Projekt EFF Panopticlick * Kontynuacja prezentacji Petera Eckersly'ego na Def Con 18.


title: Ściągawki do rozmowy telefonicznej (.NET /DBs, OO)

text: Przygotowuję się do rozmowy telefonicznej. Myślę, że zamiast próbować zapamiętać na przykład SOLID lub ACID, mógłbym mieć gotowe notatki. A więc: 1. Jakieś wskazówki, jak je zorganizować? 2. Gdzie znaleźć materiały dla .NET, OO, DB (zarówno Oracle, jak i SQL Server). Powinno być łatwo znaleźć/odczytać informacje, patrząc na kartkę/ekran, również potrzebuję sposobu, aby to sprawdzić. (Ściągawki w kontekście IT wydają się zwykle być czymś innym - jak skondensowane informacje, które możesz mieć przy sobie podczas pracy.)


title: Czy można uzyskać formalne uznanie wiedzy samouka?

text: Podobnie jak wielu innych, spędziłem kilka lat w szkole średniej, ucząc się tworzenia oprogramowania i różnych języków. * Biegle posługuję się C++/C# * Mam dość solidną wiedzę z zakresu informatyki i technik komputerowych. * _nie_ mam żadnych wartościowych projektów do pokazania, ponieważ mam zły nawyk powstrzymywania ich, zanim będą się prezentować w pogoni za nowszymi, bardziej ekscytującymi projektami; **Ale jeśli poprosisz mnie, abym usiadł i rozwiązał problem, zrobiłbym to łatwo.** * * * **Czy jest jakiś sposób na formalne uznanie całego czasu spędzonego na oglądaniu wykładów / tutoriali online kodowanie i wyszukiwanie?** * * * Byłoby miło mieć coś, co mogę umieścić na mojej aplikacji na studia! _Chcę tylko pokazać, że nie siedziałem cały dzień i nie grałem w gry wideo._


title: Polimorfizm i przemijanie

text: Piszę tekstową grę RPG i mam trzy klasy, które dziedziczą po superklasie, wszystkie mają specjalne ataki, które mogą wykonać, jednocześnie mam klasę, która pełni funkcję, która obsługuje bitwy w mojej grze. Jak mogę uzyskać unikalne funkcje zdolności specjalnych dla dowolnej roli, jaką gracz wybierze w funkcji bitwy? Również używam metody vector.push_back do obsługi jak odwołuje się do moich klas podrzędnych.


title: Jakie jest dobre oprogramowanie do zarządzania Scrumem dla początkującego Scrum?

text: Chcę ćwiczyć Scrum na osobistym projekcie i szukam oprogramowania do zarządzania Scrumem. Próbowałem Jira + GreenHopper, ale ma pewne ograniczenia - w szczególności ograniczone zagnieżdżanie historyjek użytkownika. Jest to także narzędzie do śledzenia błędów. Szukam czegoś zbudowanego od podstaw dla Scruma, żeby nie schodzić za dużo ślepych uliczek. Jako nowicjusz w Scrum i jako ćwiczenie edukacyjne, jakie oprogramowanie poleciłbyś?


title: Najlepsze praktyki zarządzania długotrwałymi zadaniami asynchronicznymi

text: Jestem w fazie projektowania projektu, w którym użytkownik końcowy prześle żądanie ze strony internetowej, która odrodzi długo działające zadanie przetworzone asynchronicznie. Czy istnieje „najlepsza praktyka” dla tego problemu? Czy usługi internetowe i brokerzy usług to dobra droga? Czy kolejka wiadomości Microsoft ma tutaj zastosowanie?


title: instrukcja switch - obsługa domyślnego przypadku, gdy nie można go osiągnąć

text: Jeśli używam instrukcji switch do obsługi wartości z wyliczenia (które jest własnością mojej klasy) i mam przypadek dla każdej możliwej wartości - czy warto dodać kod do obsługi przypadku "domyślnego"? wyliczenie MojeWyliczenie { MojeWyliczenie, MójPasek, MójNietoperz } MojeWyliczenie mojeWyliczenie = GetMyEnum(); switch (myEnum) { case MyFoo: DoFoo(); przerwanie; case MyBar: DoBar(); przerwanie; sprawa MyBat: DoBat(); przerwanie; domyślnie: Log("Nieoczekiwana wartość"); throw new ArgumentException() } Nie sądzę, że jest tak, ponieważ ten kod nigdy nie może zostać osiągnięty (nawet z testami jednostkowymi). Mój współpracownik się z tym nie zgadza i uważa, że chroni to nas przed nieoczekiwanym zachowaniem spowodowanym dodaniem nowych wartości do MyEnum. Co powiesz, społeczność?


title: Co chcesz zobaczyć w ofercie pracy?

text: Jakie informacje chcesz zobaczyć w ofercie pracy dla programistów? W jakiej kolejności? Jakie są dla Ciebie najważniejsze punkty?


title: Czy za pomocą JRuby można uzyskać dostęp do interfejsów API .NET?

text: Wiem, że JRuby może uzyskać dostęp do interfejsów API COM, ale czy może współpracować z .NET?


title: Jaki proces rozwoju zachęca do częstych wydań (rolling code do działającej witryny), a także indywidualności programistów?

text: Trochę szybkiego tła - nie mamy PMów ani wyższego kierownictwa, które depczą nam po szyjach stan funkcji itp., Ponieważ prawie zawsze dostarczamy z wyprzedzeniem i zbudowaliśmy z nimi wysoki poziom zaufania. Innymi słowy, mamy ogromną elastyczność, jeśli chodzi o proces. Bardzo dobrze sobie radzimy z naszym obecnym procesem, ale uważamy, że można coś poprawić. Mamy mały zespół (3 programistów, 1 tester) i wszyscy w zespole są na wyższym poziomie i mogą dostarczać duże elementy funkcjonalności, i zwykle robią to indywidualnie. Czasami dwie osoby pracują nad tą samą historią/zadaniem, ale ponieważ wszyscy dobrze znamy kod(y), zazwyczaj zajmujemy się sprawami samodzielnie i konsultujemy się/współpracujemy w razie potrzeby. Przechodzimy do działającej witryny i mamy możliwość codziennego przewijania, co zwykle robi ktoś z naszego zespołu. Powiedziałbym, że przeciętnie indywidualny programista rzuca swój własny kod 3 razy w tygodniu. Robiliśmy scrum z 2-tygodniowymi sprintami, ale z mojego doświadczenia wynikało, że scrum był bardziej korzystny, gdy potrzebowaliśmy większości zespołu do pracy nad tymi samymi funkcjami w tym samym czasie (rzeczy typu swarm) i gdy potrzebowaliśmy komunikować się z zespoły zewnętrzne. Obecnie nie mamy żadnej z tych potrzeb, więc ponownie oceniamy nasz proces. Wygląda na to, że zmierzamy do modelu, w którym każdy członek zespołu istnieje we własnym sprincie (z rzadszymi opcjonalnymi kolegami), który trwa od 1 do 3 dni. Nie mamy wymogu, aby wszystkie sprinty kończyły się w tych samych dniach itd., więc teoretycznie możemy to zrealizować. Moje pytanie brzmi, czy jest coś lepszego niż scrum, które modeluje tego typu proces rozwojowy? Oh, prawie zapomniałem. Odchodzimy od TFS, aby używać Git, i chociaż mam doświadczenie z Git, większość członków zespołu nie. Ponieważ dla niektórych członków zespołu jest to zmiana paradygmatu, zastanawiam się, czy możemy wykorzystać tę zmianę na naszą korzyść w jakiś sposób z punktu widzenia procesu. Myśli?


title: Czy klasy z tej samej przestrzeni nazw powinny być przechowywane w tym samym zestawie?

text: Na przykład atrybut „ISerializable” i „Serializable” znajdują się w przestrzeni nazw „System.Runtime.Serialization”, ale nie w zestawie o tej samej nazwie. Z drugiej strony atrybuty `DataContract` znajdują się w przestrzeni nazw/zestawu `System.Runtime.Serialization`. Powoduje to zamieszanie, gdy klasa może mieć „using System.Runtime.Serialization”, ale nadal nie ma odwołania do zestawu „System.Runtime.Serialization”, co oznacza, że nie można znaleźć „DataContract”. Czy należy tego unikać w praktyce, czy często zdarza się, że przestrzenie nazw są dzielone na wiele zestawów? Na jakie inne kwestie należy uważać, robiąc to?


title: Aplikacja udostępniająca unikalne klucze do wielu wątków

text: Dzięki wszystkim za twoją pomoc wcześniej. Tak więc do tej pory wymyśliłem, wymagania są takie, że aplikacja ma dwa lub więcej wątków, a każdy wątek wymaga unikalnego identyfikatora sesji/transakcji. czy poniższy wątek jest uważany za bezpieczny? wątek 1 zarejestruje się z get_id, wysyłając swój numer pid wątek 2 zrobi to samo, a następnie wątek 1 i 2 wywoła funkcję, aby uzyskać unikalny identyfikator funkcja get_id(bool choice/*zarejestruj wątek lub pobierz id*/, pid_t pid) { static int pid[15][1]={0};//nie jestem pewien, czy to działa, w każdym razie rozważ, czy zostało ustawione na 0 w inny sposób niż ten statyczny int total_threads = 0; statyczny int i = 0; int x=0,y=0; if (wybór) // część rejestracji wątku { for(x=0;x<15;x++) { if (pid[x][0]==0); { pid[x][0] = (int) pid; pid[x][1] = (x & pidx[x][1]) << 24;//zainicjuj licznik dla tego PID, przesuwając x na 25 bit, może to być dowolny inny bit, wystarczy ustawić zasięg. //więc zakres będzie pomiędzy 0x0000000 a 0x0ffffff, drugi będzie 0x1000000 i 0x1ffffff, break; } suma_wątków++; } } //szukaj czy pid istnieje czy nie, jeśli tak zwróć id transakcji for(x=0;x<15;x++) { if (pid[x][0]==pid); { pid[x][1]++;//umieść tutaj jakiś test, aby zresetować liczbę do 0, jeśli osiągnie 0x0ffffff return pid[x][1]; przerwanie; } } }


title: Czy były próby stworzenia kontenerów obiektów, które wyszukują poprawne programy przez automatyczne okablowanie kompatybilnych komponentów?

text: Mam nadzieję, że ten post nie jest zbyt „frędzlowy” - jestem pewien, że ktoś go po prostu zabije, jeśli jest :) Trzy rzeczy sprawiły, że chciałem się teraz o tym dowiedzieć: 1. Oddzielenie jest tak w czołówce designu. 2. TDD inspiruje ideę, że nie ma znaczenia, w jaki sposób program powstaje, o ile działa. 3. Widząc, jak często stosuje się wzór adaptera, aby osiągnąć (1). Jestem prawie pewien, że wypróbowano to na podstawie wspomnień, gdy czytałem o tym około 2000 roku. Jeśli miałbym zgadywać, to może chodziło o wcześniejszą wersję frameworka Java Spring. W tamtym czasie nie byliśmy tak daleko od czasów, kiedy wierzono, że programy komputerowe mogą wykazywać pożyteczne nowe zachowania. Myślę, że artykuł powiedział, że to nie zadziałało, ale nie powiedział, że to niemożliwe. Zastanawiam się, czy od tego czasu uznano to za niemożliwe, czy po prostu złudzenie z powodu fałszywego założenia podobieństwa między mózgiem a procesorem. Wiem, że ta iluzja istniała, ponieważ odbyłem staż w 1996 roku, gdzie programowałem sieci neuronowe, które rzekomo miały wykazywać "uszkodzenie mózgu". NADAL, po tym wszystkim, siedzę dziś rano i nie jestem w stanie pozbyć się myśli, że _powinno_ istnieć taka metoda programowania, aby umożliwić autonomicznym komponentom odnalezienie się nawzajem, próbę współpracy i ocenę ich wyników względem zestawu pożądane wyniki.


title: W kolejce, który koniec to „głowa”?

text: Zawsze uważałem, że „głowa” kolejki jest kolejnym elementem do odczytania i nigdy tak naprawdę nie kwestionowałem tego użycia. Tak więc napisana przeze mnie biblioteka list połączonych, która jest używana do obsługi kolejek, skodyfikowała tę terminologię: mamy makro `list1_head`, które pobiera pierwszy element; podczas korzystania z tej biblioteki w kolejce, będzie to pierwszy element do usunięcia. Ale nowy programista w zespole był przyzwyczajony do wprowadzania kolejek na odwrót. Opisał kolejkę jako zachowującą się jak pies: wkłada się za głowę, a usuwa za ogon. Jest to na tyle sprytny opis, że wydaje mi się, że jego użycie musi być bardziej rozpowszechnione, a nie mam podobnie sugestywnego opisu mojego preferowanego użycia. Tak więc, jak sądzę, są dwa powiązane pytania: 1, co oznacza dla ciebie „głowa” kolejki? i 2, dlaczego używamy słowa „głowa” do opisania tego pojęcia?


title: Wszelkie historie sukcesu dotyczące używania narzędzi do wycinania w celu ułatwienia debugowania

text: Krojenie programów to jedna z tych technologii oprogramowania, w przypadku których społeczność naukowa jest bardziej aktywna niż społeczność branżowa. Czy ktoś spoza społeczności naukowej używa narzędzi do wycinania kodu produkcyjnego, aby pomóc w debugowaniu lub innych zadaniach? Jeśli tak, jakich narzędzi używałeś?


title: WPF bardziej dynamiczne widoki i adnotacje danych

text: Porównując WPF i Asp.Net Razor/HtmlHelper Uważam, że WPF/Xaml trochę brakuje w tworzeniu widoków. Dzięki HtmlHelpers możesz zdefiniować w jednym miejscu, w jaki sposób nie chcesz reprezentować określonego typu danych i dołączać elementy ustawione z DataAnnotations właściwości. W WPF można również zdefiniować DataTemplates dla danych, ale wydaje się to znacznie bardziej ograniczone niż EditorTemplates. Nie używa informacji z adnotacji danych. Kłopotliwy może być również układ elementów. Nienawidzę konieczności ciągłego dodawania RowDefinitions i aktualizowania atrybutu Grid.Row wielu elementów, gdy dodam nową właściwość gdzieś w linii. Rozumiem, że programowanie GUI może być bardzo pracochłonne, ale jak pokazał Asp.Net MVC, istnieją sposoby na obejście tego. Jakie rozwiązania są dostępne, aby tworzenie widoków w WPF było nieco czystsze, łatwe w utrzymaniu i bardziej dynamiczne?


title: Tworzenie kanału informacyjnego z odpowiednimi danymi dla aplikacji

text: Tworzę aplikację, która obecnie umożliwia użytkownikom tworzenie tematów, głosowanie w tematach, obserwowanie tematów i czatowanie w tematach. Obecnie pracuje nad utworzeniem kanału informacyjnego, takiego jak Facebook lub Twitter, który dostarcza użytkownikom tematy związane z tym, z czym wchodzili w interakcję w przeszłości. Rozumiem, że jest to złożony temat, ale byłbym wdzięczny za wszelkie odpowiedzi, jakie każdy może mieć do pracy nad rozwiązaniem. Aktualne rozwiązanie: System punktowy, w którym tematy będą dodawane od +1 do +1000 punktów za aktywność użytkownika. Na przykład: > Jeśli użytkownik utworzy temat, dodaj +50 punktów do tematu. Bardziej prawdopodobne jest, że temat > pojawi się w kanale wiadomości użytkownika. Inny przykład: > Jeśli użytkownik „śledzi” temat, dodaj do niego +25 punktów. Bardziej prawdopodobne jest, że temat > pojawi się w kanale wiadomości użytkownika. Inny przykład: > Jeśli temat został utworzony w ciągu ostatnich 24 godzin, dodaj +24 -(liczba godzin od > utworzenia) do tematu. Mam nadzieję, że dowiem się, czy istnieje bardziej praktyczne podejście do rozwiązania tego problemu.


title: Wzorce wersjonowania danych relacyjnych w bazie danych MySQL?

text: Próbuję znaleźć podejście do projektu, w którym użytkownik może edytować rekordy i wyświetlać poprzednie wersje tych rekordów. Oto uproszczony przykładowy schemat, używający listy: TABLE list ( id int auto_increment klucz podstawowy, user_id int, tytuł varchar(255) ); TABLE list_tasks ( id int auto_increment klucz podstawowy, list_id int, tytuł varchar (255), int zamówienia, is_complete tinyint ); Tak więc użytkownik może wejść i dokonać kilku zmian na liście (tj. dodać lub usunąć zadania, zmienić kolejność zadań, oznaczyć niektóre jako kompletne, zmienić nazwy niektórych itp.), Następnie je zapisać. W tym momencie chciałbym wygenerować „wersję 2” listy i zadań i umożliwić im przeglądanie poprzednich wersji, ale gdy uzyskują dostęp do listy, zawsze otrzymują najnowszą wersję. Czy istnieje wspólne podejście / wzorzec projektowy do radzenia sobie z wersjonowaniem danych w ten sposób w bazie danych MySQL?


title: Pochodzący z tła klawiatury Windows i nadal używający ogólnej klawiatury, jak mogę przejść na Maca w celu programowania?

text: Jakiś czas temu dostałem nowego MacMini, ponieważ miałem już monitor, klawiaturę, mysz itp., Więc chciałem po prostu coś taniego, z czym mógłbym bawić się w rozwoju Apple, gdzie mógłbym po prostu zmienić wtyczki do komputera, którego chcę używać. Największym problemem jest to, że moja klawiatura jest standardową (lub nie tak standardową jak DasKeyboard) klawiaturą w odniesieniu do konfiguracji klawiszy Control-Windows-Alt. Jak wszyscy dobrzy programiści powinni, wytrenowałem pamięć mięśniową palców, aby dobrze współpracowała z popularnymi skrótami klawiaturowymi Windows (i Linux). Właściwie to instynktownie nacisnąłem klawisze 'Control-Shift-B', aby "skompilować" dokument Worda wcześniej (/facepalm). Próbowałem zmienić przypisanie klawisza `Command` do klawisza `Control` na mojej klawiaturze, i to samo w sobie rozwiązuje większość moich problemów. Innym problemem są przyciski „End” i „Home”, a próba wyróżnienia słów za pomocą „Control” (inaczej „Command”) również powoduje frustrację. Rozważałem po prostu zdobycie bezprzewodowej klawiatury Apple tylko dla MacMini i zmuszenie się do uczenia się na swój sposób. Lub może zresetowanie moich obecnych mapowań klawiszy i próba wymuszenia uczenia się wszystkiego w sposób Apple na mojej standardowej klawiaturze (więc po prostu muszę przyzwyczaić się do używania `Alt` zamiast `Control`). Czy ktoś jeszcze napotkał ten problem? Jak sobie poradziłeś z jego rozwiązaniem?


title: Czy każdy programista musi nauczyć się wyrażeń regularnych?

text: Jestem nowy w programowaniu, a podczas rozmowy kwalifikacyjnej dostałem pytanie dotyczące wyrażeń regularnych; nie trzeba dodawać, że nie mogłem odpowiedzieć. Zastanawiałem się więc, czy powinienem nauczyć się wyrażeń regularnych? Czy jest to pozycja obowiązkowa dla każdego programisty wszystkich dziedzin? Czy jest to konieczność przy programowaniu dla niektórych dziedzin? Powiązane pytania: * Dlaczego wyrażenia regularne są tak chorobliwie atrakcyjne? * Kiedy NIE należy używać wyrażeń regularnych?


title: normalna ocena zamówienia - vs- ocena zamówienia aplikacyjnego

text: Przechodzę przez Abelsona i Sussmana (Struktura i interpretacja programów komputerowych) i jestem trochę zdezorientowany, kiedy używana jest normalna ocena kolejności, a kiedy stosowana jest ocena kolejności. To zdanie mnie zniechęca: > _**Lisp używa oceny w kolejności aplikacji_** częściowo z powodu > dodatkowej wydajności uzyskanej dzięki unikaniu wielokrotnych ocen > wyrażeń, takich jak te zilustrowane powyżej (+5 1) i (*5 2) i, > co ważniejsze, ponieważ ewaluacja normalnego rzędu staje się o wiele bardziej > skomplikowana, gdy wychodzimy ze sfery procedur, które mogą być > modelowane przez podstawienie. [podkreślenie dodane] na stronie 17 paragraf 1. Jednak w ćwiczeniu 1.6 implikacja jest taka, że Lisp używa normalnej oceny kolejności dla prymitywów, ale aplikacyjnej oceny kolejności dla złożonych procedur. Czy ktoś mógłby wyjaśnić?


title: Jak płacić za publikacje pracowników?

text: Załóżmy, że firma chce zachęcić pracowników do publikowania artykułów, wpisów na blogu, udziału w dyskusjach społecznościowych. Nie zastanawiajmy się nad czysto retorycznymi sposobami zachęty („Chłopaki, będziecie tak szanowani!”). Jaka może być rozsądna strategia zachęcania do publikacji za pieniądze? Przychodzi mi na myśl wiele rzeczy, takich jak „płatność za liczbę słów”, „płatność za wielkość odbiorców”, „płatność za liczbę wyświetleń”, „płatność za liczbę reakcji lub cytowań publikacji” itp., ale większość z nich rozpada się w miarę niesprawiedliwe w trywialnych narożnych sprawach.


title: Architektura trybów interakcji („narzędzia do malowania”) dla programu do malowania 3D

text: Opracowujemy aplikację opartą na Qt, aby nawigować i malować na objętości traktowanej jako grafika pikselowa 3D. Układ aplikacji składa się z trzech prostopadłych widoków plasterków, na których użytkownik może malować rzeczy, takie jak kropki, koła itp., a także usuwać już pomalowane piksele. Pomyśl o 3D Gimp lub MS Paint. _Jak zaprojektowałbyś architekturę dla różnych trybów interakcji (np. narzędzia do malowania)?_ Mój pomysł to: * użyć wzorca MVC * mieć osobny kontroler dla każdego trybu interakcji * zainstalować filtr zdarzeń na wszystkich trzech widokach wycinka, aby zebrać wszystkie przychodzące zdarzenia interakcji użytkownika (mysz, klawiatura) * przekieruj zdarzenia do aktualnie aktywnego kontrolera interakcji Będę wdzięczny za krytyczne uwagi dotyczące tego pomysłu.


title: Efektywna obsługa zmiennych w programowaniu nieobiektowym

text: Jaka jest najlepsza metoda używania i współdzielenia zmiennych między funkcjami w językach programowania nie zorientowanych obiektowo? Załóżmy, że używam 10 parametrów z DB, ID i 9 innych powiązanych z nim wartości. Muszę pracować ze wszystkimi 10 parametrami w wielu funkcjach. Mogę to zrobić kolejnymi sposobami: **1\. wywołuj funkcje tylko z użyciem identyfikatora i w każdej funkcji pobierz inne parametry z DB.** Zaleta: zmienne lokalne są wyraźnie widoczne, do funkcji jest tylko jeden parametr wejściowy Wada: jest powolny i w każdym są te same wiersze do pobierania parametrów funkcja, która sprawia, że funkcja jest dłuższa i mniej przejrzysta **2\. wywoływanie funkcji ze wszystkimi 10 parametrami** Zaleta: praca ze zmiennymi lokalnymi, czytelny kod funkcji Wada: wiele parametrów wejściowych, co nie jest miłe **3\. jednokrotne pobieranie parametrów jako zmiennych globalnych i używanie ich wszędzie** Zaleta - jaśniejszy kod, krótsze funkcje, szybsze przetwarzanie Wady - zmienne globalne - utrata kontroli nad nimi, możliwość niepożądanego nadpisania (szczególnie gdy niektóre funkcje powinny zmienić swoje wartości) Może jest jakaś inny sposób, jak to zaimplementować i sprawić, by program był czystszy i bardziej efektywny. Czy możesz powiedzieć, w jaki sposób najlepiej rozwiązać ten problem?


title: Coś podobnego do kategorii Objective-C w innych językach?

text: Rozumiem kategorie Objective-C i jak się przydają, ale zawsze mam trudności z wyjaśnieniem tej koncepcji innym programistom, którzy nie są zaznajomieni z Objective C. Może po prostu kiepsko mi się tłumaczy, ale myślałem w inny sposób wyjaśnić to poprzez porównanie z podobnymi funkcjami oferowanymi przez inne (bardziej popularne) języki. (np. mogę wyjaśnić podobieństwa między protokołami Objective C a interfejsami Java) Jakieś przykłady podobne do kategorii ?


title: Czy licencja Creative-Commons jest zgodna z licencją Apache?

text: Na przykład, jeśli mam kod, który zawiera fragmenty kodu przepisane z kodu znalezionego tutaj lub na Stack Overflow lub innym kodzie na licencji Creative-Commons, czy mój ostateczny kod może być objęty licencją Apache?


title: Dlaczego (Ogg) Vorbis nie jest automatycznie obsługiwany przez system Windows?

text: 1. Vorbis nigdy nie był zagrożony przez MPEG LA, więc bez wątpienia jest całkowicie wolny od patentów. (MPEG LA nigdy nie traci szansy na rozpowszechnianie patentowego FUD) 2. Windows obsługuje mp3, więc nie dlatego, że chcą wypychać swoje gówniane wma. 3. GPL pozwala na dystrybucję wraz z produktami komercyjnymi i 4. Nawet jeśli obawiają się wysyłać oprogramowanie na GPL, nadal mogą je ładować automatycznie, tak jak robią to z XviD Dlaczego więc klient Windows nie może po prostu wrzucić pliku ogg vorbis do swoją bibliotekę muzyczną i słuchać jej przez WMP? PS: Aby przeciwdziałać nieporozumieniom: już pobierają na żądanie kodek XviD na licencji GPL, więc mają już 99% tego, czego potrzeba, aby zrobić to samo z Vorbis. Zajęłoby mi to około 5 minut, gdybym był zaznajomiony z bazą kodu WMP i systemem filtrów directshow. PSS: Powiedziano mi, żebym zapytał o to tutaj, a nie na stackoverflow, więc tak robię.


title: Jak zweryfikować zasadę substytucji Liskov w hierarchii dziedziczenia?

text: Zainspirowana tą odpowiedzią: > Zasada substytucji Liskov wymaga, aby > > * Warunki wstępne nie mogły być wzmocnione w podtypie. > * Warunki końcowe nie mogą być osłabione w podtypie. > * Niezmienniki nadtypu muszą być zachowane w podtypie. > * Ograniczenie historii („reguła historii”). Obiekty są uważane za nadające się > do modyfikacji tylko poprzez ich metody (enkapsulacja). Ponieważ podtypy mogą > wprowadzać metody, które nie są obecne w nadtypie, wprowadzenie > tych metod może pozwolić na zmiany stanu w podtypie, które nie są > dozwolone w nadtypie. Ograniczenie historii zabrania tego. > Miałem nadzieję, że ktoś opublikuje hierarchię klas, która narusza te 4 punkty i jak je odpowiednio rozwiązać. Szukam szczegółowego wyjaśnienia do celów edukacyjnych, jak zidentyfikować każdy z 4 punktów w hierarchii i jak najlepiej to naprawić. **Uwaga:** miałem nadzieję opublikować próbkę kodu, nad którą ludzie będą pracować, ale samo pytanie dotyczy tego, jak zidentyfikować wadliwe hierarchie :)


title: Czy wymaganie atrybucji jest zgodne z GPL?

text: Może kodować na licencji na podstawie klauzuli takiej jak ta: Redystrybucja tego dzieła, z modyfikacją lub bez, jest dozwolona, jeśli Bob Joe jest uznawany za oryginalnego autora lub licencjodawcę tego dzieła, ale nie w żaden sposób, który sugeruje, że Bob Joe popiera Ciebie lub Twoją korzystanie z pracy. być używane w projekcie korzystającym z GPL, czy to czyni go niekompatybilnym z GPL?


title: Ulepszenia wzorca projektowego Joshua Blocha?

text: W 2007 roku przeczytałem artykuł o tym, jak Joshua Blochs przyjmuje „wzorzec konstruktora” i jak można go zmodyfikować, aby poprawić nadużywanie konstruktorów i seterów, zwłaszcza gdy obiekt ma dużą liczbę właściwości, z których większość jest opcjonalna. Krótkie podsumowanie tego wzorca projektowego znajduje się tutaj. Podobał mi się ten pomysł i od tamtej pory go używam. Problem z tym, choć jest bardzo czysty i przyjemny w użyciu z perspektywy klienta, wdrożenie go może być uciążliwe! W obiekcie jest tak wiele różnych miejsc, w których pojedyncza właściwość jest odniesieniem, a zatem utworzenie obiektu i dodanie nowej właściwości zajmuje dużo czasu. Więc... miałem pomysł. Najpierw przykładowy obiekt w stylu Joshua Blocha: Josh Bloch Style: public class OptionsJoshBlochStyle { private final String opcja1; prywatne ostateczna int opcja2; // ...inne opcje tutaj <<<< public String getOption1() { return opcja1; } public int getOption2() { return opcja2; } public static class Builder { private String opcja1; prywatne int opcja2; // inne opcje tutaj <<<<< public Builder opcja1(String opcja1) { this.option1 = opcja1; zwróć to; } public Builder opcja2(int opcja2) { this.opcja2 = opcja2; zwróć to; } public OptionsJoshBlochStyle build() { return new OptionsJoshBlochStyle(this); } } private OptionsJoshBlochStyle(Builder builder) { this.option1 = builder.option1; this.opcja2 = budowniczy.opcja2; // inne opcje tutaj <<<<<< } public static void main(String[] args) { OptionsJoshBlochStyle optionsVariation1 = new OptionsJoshBlochStyle.Builder().option1("firefox").option2(1).build(); OptionsJoshBlochStyle optionsVariation2 = new OptionsJoshBlochStyle.Builder().option1("chrome").option2(2).build(); } } Teraz moja "ulepszona" wersja: public class Options { // zauważ, że nie są to ostateczne prywatne opcje String option1; prywatne int opcja2; // ...inne opcje tutaj public String getOption1() { return opcja1; } public int getOption2() { return opcja2; } public static class Builder { private final Options options = new Options(); public Builder opcja1(String opcja1) { this.options.option1 = opcja1; zwróć to; } public Builder opcja2(int opcja2) { this.options.option2 = opcja2; zwróć to; } public Opcje build() { return opcje; } } private Options() { } public static void main(String[] args) { Opcje optionsVariation1 = new Options.Builder().option1("firefox").option2(1).build(); Options optionsVariation2 = new Options.Builder().option1("chrome").option2(2).build(); } } Jak widać w mojej "ulepszonej wersji", jest o 2 mniej miejsc, w których musimy dodać kod o dowolnych właściwościach dodawania (lub w tym przypadku opcjach)! Jedynym minusem, jaki widzę, jest to, że zmienne instancji klasy zewnętrznej nie mogą być ostateczne. Ale klasa jest nadal niezmienna bez tego. Czy naprawdę ma jakieś wady tej poprawy w utrzymaniu? Musi być jakiś powód, dla którego powtórzył właściwości w zagnieżdżonej klasie, której nie widzę?


title: Ładowanie za Open Source

text: **Czy opłaca się pobierać opłaty za produkt typu open source?** Zarówno pod względem prawnym, jak i finansowym wydaje się to bardzo dziwne. Jednak wciąż słyszę, jak ludzie mówią, że to możliwe. Czy są jakieś przykłady z prawdziwego świata na tego typu rzeczy?


title: Czy na podstawie tego, co przeczytałem w „Inside the Machine”, takie podejście do oddziałów jest bardziej optymalne?

text: Więc czytałem Inside the Machine Jona Stokesa. To FANTASTYCZNA książka, która skłoniła mnie do myślenia o wpływie programowania na procesory... Biorąc pod uwagę jednostkę rozgałęzienia w CPU i złożoną instrukcję warunkową, która obejmuje wywołanie procedury (If IsTodayAHoliday( Now ) > 0 Then), czy szybciej jest umieścić wyniki tego wywołania procedury w zmiennej tuż przed instrukcją IF? Pod względem statycznego i dynamicznego przewidywania rozgałęzień wydaje się logiczne, że posiadanie wartości decyzji przed oceną jednostki rozgałęzienia powoduje, że algorytmy predykcji działają bezbłędnie. Czy to prawda?


title: Czy możliwe jest posiadanie efektywnego środowiska VIM zarówno dla C++, jak i Pythona?

text: Niedawno przeniosłem się do środowiska VIM do programowania w Pythonie. Nauczyłem się konfiguracji z wybitnej strony internetowej Johna Andersona na ten temat. Mam zamiar spróbować skonfigurować inne środowisko VIM dla C++. Czy można to w ogóle zrobić skutecznie? Czy naprawdę powinienem mieć dwa konta na moim Linuksie, jedno dla Pythona, a drugie dla programowania C++? Jeśli ktokolwiek mógłby nakreślić ich konfigurację, tak czy inaczej, bardzo bym to docenił. Aby dokładniej wyjaśnić pytanie, nie pytam „jaki jest najlepszy sposób?” na co nie ma odpowiedzi. Pytam tych użytkowników VIM, którzy programują zarówno C++, jak i Pythona, czy używają jednego lub dwóch środowisk VIM (być może na różnych kontach) i jak osiągają to w dowolny sposób. (W przypadku Javy trzymam się NetBeans i jestem prawie pewien, że jest to właściwa decyzja ze względu na to, jak dobrze są w nią wbudowane narzędzia programistyczne do budowania i Swing, ale jestem otwarty na ideę środowiska VIM dla wszystkich 3 języków, jeśli ktoś ma odniosło sukces.) Dziękuję bardzo


title: Jaka jest intencja pytania o wagę samolotu?

text: W wywiadzie zadano mi pytanie "Jak oceniłbyś wagę samolotu" i nie jestem pewien, dlaczego to pytanie było jednym z dwóch pytań zadawanych w wywiadzie. Próbowałem odpowiedzieć na wszystkie możliwe sposoby, ale nie mogłem udzielić prawidłowej odpowiedzi.(Znalazłem poprawną odpowiedź po wyszukiwaniu w Google) Jak bardzo takie pytania decydują o twoim wyborze w rozmowie kwalifikacyjnej? Oto moje podejście: 1\. Jeśli podany jest pomiar samolotu, obliczę objętość i pomnożę przez gęstość, uwzględnię masę paliwa plus inną masę własną. 2\. Stosując metodę wypierania wody, jeśli mogę umieścić samolot w wodzie i jakoś zmierzyć, ile wody się przemieściło. Ale znalezione za pomocą wyszukiwarki Google, że właściwym podejściem było umieszczenie miejsca na statku i oznaczenie poziomu wody na kadłubie, a następnie usunięcie samolotu, a następnie statek wzniesie się. I zacznij obciążać statek, aż oznaczony kadłub osiągnie poziom wody.


title: Jaki jest najlepszy sposób na przejście na linuksa z systemu Windows do tworzenia stron internetowych?

text: Jestem przede wszystkim programistą rozwijającym się na systemie operacyjnym Windows, używając C# jako mojego podstawowego języka. Oceniam Ubuntu Linux jako alternatywną platformę i chciałbym poznać najlepszy stos do tworzenia stron internetowych na tej platformie. Przeszedłem przez ten wątek, ale nie odpowiada on w pełni na moje pytania. Niektóre z punktów, które mnie interesują, to: * PHP/Ruby/Python (co byś polecił?) * Czy Mono jest wystarczająco dojrzały do rozwoju na dużą skalę? Czy ktoś ma jakiekolwiek doświadczenie w korzystaniu z Mono. * IDE (w tym obsługa debugowania, intellisense, integracja kontroli źródła, testowanie jednostkowe) * Struktura testów jednostkowych oparta na zalecanym języku * Struktura sieciowa, jeśli taka istnieje. * Narzędzia do testowania obciążenia * Serwer WWW (wiem, że jest wiele serwerów WWW, ale chciałbym wiedzieć, który jest używany głównie przez większość ludzi)


title: Jaki standard zastąpił 830-1998?

text: Zastanawiałem się, jak dokumentować projekty oprogramowania w sposób bardziej formalny, i dowiedziałem się o IEEE 830-1998: Zalecana praktyka w zakresie specyfikacji wymagań oprogramowania. Jednak, jak widać z tego linku, został on zastąpiony. Wiem, że 830-1998, a prawdopodobnie nawet 830-1993, prawdopodobnie nadają się do użytku. Jednak jeśli nic więcej, chciałbym wiedzieć, jaki standard go zastąpił. W tym przypadku może to nie mieć znaczenia, ale jeśli inne standardy są zastępowane ze względu na bardziej techniczne kwestie, myślę, że dobrym pomysłem byłoby powiązanie gdzieś, który standard zastąpił inny (jeśli nie jest to inny w tym samym wierszu (830, w tym walizka)). Warto wspomnieć, że: 1. Najnowsza norma podczas wyszukiwania „Specyfikacji wymagań oprogramowania” lub „Wymagań oprogramowania” na stronie IEEE Standards Association to 830-1993, 2. Wersje SWEBOK z 2004 r. (obecna) odnoszą się do 830-1993 (paragraf 2.5), 3. Artykuł w Wikipedii dokumentu nie wspomina, że standard został zastąpiony. TLDR: Jak znaleźć, który standard zastąpił inny, a który zajął miejsce 830-1998?


title: Co powoduje złą wydajność aplikacji konsumenckich?

text: Mój Comcast DVR potrzebuje co najmniej trzech sekund, aby zareagować na każde naciśnięcie klawisza na pilocie, co sprawia, że proste zadanie oglądania telewizji staje się frustrującym doświadczeniem. Mój iPhone wyświetla wiadomości tekstowe w ciągu co najmniej piętnastu sekund i ulega awarii w ¼ przypadków, gdy próbuję uruchomić aplikację iPod; samo odebranie i przeczytanie wiadomości e-mail często zajmuje dużo ponad minutę. Nawet navcom w moim samochodzie ma bzdurne i niereagujące elementy sterujące, często połykając kolejne sygnały wejściowe, jeśli oddzielę je mniej niż kilka sekund. Są to wszystkie urządzenia dla użytkowników końcowych ze stałym sprzętem, dla których użyteczność powinna być najważniejsza, a mimo to wszystkie zawodzą przy podstawowym czasie reakcji i opóźnieniu. Ich oprogramowanie jest po prostu _za wolne_. Co za tym stoi? Czy to problem techniczny, czy społeczny? Kto lub co jest odpowiedzialne? Czy to dlatego, że wszystkie zostały napisane w zarządzanych językach, a nie w natywnym kodzie? Czy to indywidualni programiści, którzy napisali oprogramowanie do tych urządzeń? We wszystkich tych przypadkach twórcy aplikacji dokładnie wiedzieli, na jaką platformę sprzętową celują i jakie są jej możliwości; czy nie wzięli tego pod uwagę? Czy to facet, który krąży i powtarza „optymalizacja jest źródłem wszelkiego zła”, czy sprowadził ich na manowce? Czy była to mentalność „och, to tylko dodatkowe 100 ms” za każdym razem, aż te wszystkie milisekundy zsumują się w minuty? Czy to moja wina, że kupiłem te produkty w pierwszej kolejności? To jest subiektywne pytanie, bez jednej odpowiedzi, ale często jestem sfrustrowany, widząc tak wiele odpowiedzi mówiących „och, nie martw się o szybkość kodu, wydajność nie ma znaczenia”, kiedy wyraźnie w pewnym momencie _ma_ to znaczenie dla użytkownik końcowy, który utknął z powolnym, niereagującym, okropnym doświadczeniem. Więc w którym momencie coś poszło nie tak w przypadku tych produktów? Co my, programiści, możemy zrobić, aby nie zadać tego bólu naszym własnym klientom?


title: Równoważenie pracy w pełnym wymiarze godzin i projektów związanych z kodowaniem osobistym

text: Zbliżam się do końca tworzenia głównych elementów mojej strony internetowej, nad którymi pracowałem w wolnym czasie przez ostatnie 3 miesiące. Moim celem jest wydanie go pod koniec przyszłego miesiąca i mam nadzieję, że zaczniemy na nim zarabiać. Niestety następnym krokiem będzie napisanie dużej ilości specyficznej obsługi danych i kodu interfejsu użytkownika, który staje się bardzo nużący i nudny. Kiedy po raz pierwszy zacząłem projekt, mogłem łatwo znaleźć czas na pracę nad nim, było to interesujące, a pisanie back-endu było nowe. Kiedy zacząłem pisać rzeczy, które znam i robię w pracy (ui), coraz trudniej było zmusić się do pracy nad projektem, czasami ostatnią rzeczą, którą chcę zrobić, gdy wracam do domu z pracy, jest ponowne kodowanie . Ktoś w tej samej sytuacji? Jakieś wskazówki, jak znaleźć czas i wysiłek na poboczne projekty bez wypalania się? Jakieś wskazówki, jak pozostać na właściwej drodze? EDYCJA-Aktualizacja Dzięki za wszystkie dane wejściowe, naprawdę to doceniam. Mój i inny znajomy są razem na tej stronie, zajmuję się całym kodowaniem, on zajmuje się projektowaniem, marketingiem itp. Oczywiście nie mam ścisłych terminów, ale naszym celem było wydanie go pod koniec lipca. Nie planuję wydzierżawić pracy związanej z kodowaniem komuś innemu. Używam frameworka ui i back-end, kod będzie nużący, ale frameworki są zarówno głównymi oszczędzającymi czas. Mój plan działania to traktować to jak pracę i naprawdę zmuszać się do poświęcenia godzin. Mam nadzieję, że za kilka miesięcy będę mógł to edytować i promować moją stronę :)


title: wstępne agregowanie dokumentów mongodb

text: W naszej obecnej konfiguracji większość naszych wywołań baz danych to aktualizacje, w których zwiększamy klucz o 1. Jeśli wszystko, co robimy, to zwiększanie pewnych kluczy w dokumencie (dużo) w mongodb, a kilka serwerów aplikacji robi to jednocześnie, czy kiedykolwiek ma sens agregowanie tych przyrostów w warstwie aplikacji, a następnie wysyłanie wstępnie zagregowanych dokumentów do głównej bazy danych mongodb co określony czas? Rozumiem, że może to być ryzykowne, ponieważ jeśli w jakiś sposób stracisz jeden z tych wstępnie zagregowanych dokumentów, możesz potencjalnie stracić więcej danych, ale czy ta technika jest kiedykolwiek używana? Rozumiem również, że sharding jest akceptowanym sposobem skalowania zapisów, ale byłem po prostu ciekawy, czy ta technika jest kiedykolwiek używana, ponieważ wydaje się, że może potencjalnie pomóc w skalowaniu, jeśli zostanie wykonana prawidłowo, jednak mogę się tutaj całkowicie mylić.


title: Czy język programowania o zamkniętym kodzie źródłowym może przetrwać?

text: Znajomy napisał język programowania. Ma składnię przypominającą SGML. Napisał do tego tłumacza i IDE. On i jego koledzy używają go we własnym zakresie jako języka po stronie serwera. Może być również używany do pisania narzędzi wiersza poleceń. Chce udostępnić go publicznie, w oczekiwaniu, że ludzie kupią licencję na jego używanie. Chce zachować dla siebie kod wyrażający implementację języka, ponieważ wiąże się z nim sporo własności intelektualnej. Ciągle mu powtarzam, że czas języków programowania o zamkniętym kodzie źródłowym minął. Mówię: „Spójrz na wszystkie główne języki: zdecydowana większość to open-source. Będziesz musiał również przejść na open source, jeśli chcesz, aby ktokolwiek spoza firmy zwracał jakąkolwiek uwagę na to, co zbudowałeś”. Czy daję mu dobrą radę, czy jest jeszcze miejsce na języki zastrzeżone, za które płacisz? **PÓŹNIEJ** Den zapytał: „… czy mógłbyś również wyjaśnić, w jaki sposób język może być zamkniętym źródłem?” Powiedziałem: „@Den masz rację. Przypuszczam, że mój przyjaciel chce uniknąć sytuacji, w której Microsoft przygotowuje język podobny do Javy, nazywa go J++, a następnie wdaje się w spór z Sunem o jego . Jak chronić składnię i metodologię programowania przed przejęciem przez firmę, której wdrożenie może spowodować, że wypadniesz z biznesu?”


title: Jaki diagram zbudować przy zapoznawaniu się z nowym kodem?

text: Kiedy po raz pierwszy spotykam się z nową bazą kodu, często konstruuję schemat blokowy-rzeczy na papierze, przechodząc przez kod — czytając go lub korzystając z debuggera. Innym podejściem, o którym słyszałem tutaj na SE, jest dodanie wszędzie `const` i zobaczenie, gdzie kompilacja zacznie się psuć. Jestem trochę zaznajomiony z różnymi rodzinami diagramów UML i 1) tak naprawdę ich nie lubię 2) czuję, że są przeznaczone na czas projektowania, a nie czas analizy systemu. _Więc, co byłoby dobrym narzędziem pomagającym w zrozumieniu istniejącego kodu, który widzi się po raz pierwszy? Czy tworzenie diagramu ścieżek wykonania jest powszechną praktyką, a który dokładnie diagram? A może bardziej odpowiednim narzędziem jest diagram hierarchii dziedziczenia (lub funkcja plik-zawiera-do programowania proceduralnego). Albo coś innego?_


title: Czym różni się wielowątkowość w aplikacji internetowej opartej na Javie w porównaniu z samodzielną aplikacją Java?

text: Jestem dość nowy w Javie i moje doświadczenie ogranicza się do aplikacji internetowych działających na kontenerze internetowym (w moim przypadku Jboss). Czy mam rację mówiąc, że w przypadku aplikacji internetowych kontener sieciowy obsługuje wielowątkowość? Jeśli tak, czy mogę wprowadzić nowe bieżniki w aplikacjach internetowych? Czy jest to jakaś korzyść i w jakim scenariuszu należałoby to zrobić?


title: Jak sprawnie przeglądać projekt open source?

text: To naprawdę frustrujące, gdy okazuje się, że kod źródłowy i dokumentacja każdego innego projektu open source, itp., ma nieco lub bardzo inną strukturę katalogów i konwencje nazewnictwa. 1. Jak szybko zorientować się w konwencji katalogów/nazewnictwa? 2. Dostać się do ogólnej architektury aplikacji bez przechodzenia przez mnóstwo plików kodu źródłowego? 3. Jak przyspieszyć dotarcie do odpowiedniego kodu (który mnie interesuje)?


title: Jakie są zalety ścisłego utrzymywania oddzielnych danych | algorytm | warstwy interfejsu?

text: Zawsze oddzielam interfejs użytkownika od innych funkcji w moich programach — tak mnie uczono i ma to oczywiste zalety, ponieważ można zmienić interfejs, ale zachować tę samą funkcjonalność. Spotkałem jednak programistów, którzy ściśle oddzielają dane, algorytmy i interfejs. Tak więc obiekty danych, które przechowują dane w pamięci ulotnej, mają _tylko_ pola/właściwości oraz ich gettery i settery. Wszelkie algorytmy są przechowywane w osobnej klasie. Moim zdaniem główną wadą jest to, że klasy algorytmów zwykle potrzebują pełnego dostępu do danych w klasach danych. Możesz chcieć mieć bardziej funkcjonalną klasę, którą tworzysz z dużą ilością danych, ale wtedy obiekty z innych klas mogą uzyskać te dane tylko w wyspecjalizowany sposób.


title: Gdzie jest używany java3d?

text: Pomysł na java3d jest bardzo interesujący, ale nie widzę żadnych aplikacji desktopowych ani webowych zbudowanych przy użyciu java3d. Gdzie jest używany i jakie ma perspektywy?


title: Jaki jest najlepszy sposób na dołączenie pliku JavaScript za pomocą tagu skryptu?

text: Zazwyczaj dołączam pliki JavaScript za pomocą tagu skryptu, jak poniżej. <script type="text/javascript" src="somefile.js"></script> Widziałem też kilka osób używających atrybutu języka. Obecnie wiele osób pomija atrybut type. Zacząłem odnosić wrażenie, że jeśli JavaScript jest domyślnym językiem skryptowym, to nawet powinienem pominąć atrybut type. Czy dobrze byłoby pominąć atrybut type? Czy spowoduje to jakieś problemy?


title: W jaki sposób interfejs REST API powinien obsługiwać żądania PUT do zasobów częściowo modyfikowalnych?

text: Załóżmy, że REST API, w odpowiedzi na żądanie HTTP `GET`, zwraca dodatkowe dane w podobiekcie `owner`: { id: 'xyz', ... jakieś inne dane ... owner: { name: ' Jo Bloggs', rola: 'Programmer' } } Oczywiście nie chcemy, aby ktokolwiek mógł `PUT` z powrotem { id: 'xyz', ... jakieś inne dane ... właściciel: { name: 'Jo Blogi', rola: 'CEO' } } i niech to się uda. Rzeczywiście, prawdopodobnie nie zamierzamy nawet _wdrożyć_ sposobu, aby to nawet potencjalnie odniosło sukces, w tym przypadku. Ale to pytanie nie dotyczy tylko podobiektów: co ogólnie należy zrobić z danymi, których nie można modyfikować w żądaniu PUT? Czy powinno być wymagane, aby nie było go we wniosku PUT? Czy powinien być po cichu odrzucony? Czy należy go sprawdzać, a jeśli różni się od starej wartości tego atrybutu, zwrócić w odpowiedzi kod błędu HTTP? A może powinniśmy użyć łatek RFC 6902 JSON zamiast wysyłać cały JSON?


title: Czy istnieje sposób, aby nie używać wzorca Observer podczas tworzenia systemów GUI?

text: W Javie biblioteka Swing implementuje wzorzec projektowy Observer/Subscriber-Publisher, aby zaprojektować sposób, w jaki program reaguje na zdarzenia w GUI (kliknięcia przycisków itp.). Programista rejestruje obiekty `ActionListener` (obserwatorów) w elemencie GUI (temat/observable/publisher), a obiekty te są powiadamiane przez element GUI, gdy ich stan się zmienia, i odpowiednio coś robią. Wydaje się to rozsądnym sposobem zaprojektowania systemu GUI i nie wyobrażam sobie innego sposobu, w jaki framework mógłby to zrobić. Czy istnieje inny sposób zaprojektowania systemu reagowania na zdarzenia w GUI? **Czy istnieją jakieś imperatywne frameworki lub biblioteki z systemem GUI reakcji na zdarzenia, który nie został zaprojektowany w ten sposób?** Czy system reakcji na zdarzenia w najczęstszej bibliotece C# GUI implementuje problemy z odpowiedzią na zdarzenia za pomocą Observera, czy czegoś innego? A co z bibliotekami dla Pythona itp.


title: Jak mogę użyć UML do modelowania relacji między dwiema klasami, z których jedna ma funkcje widoczne jako zaprzyjaźnione z drugą?

text: Mam dwie klasy: ------------ --------------- X Y ------------ ---- ----------- relacja ------------ ------------------ -------- ------- A() C() B() D() E() ------------ --------------- I chcesz dziedziczyć tylko te dwie funkcje z klasy X, gdzie są one zdefiniowane za pomocą modyfikatora dostępu do znajomych. Moja klasa będzie: --------------- T --------------- -------------- - C() A() D() --------------- Klasa Y używa niektórych funkcji klasy X, a mianowicie A i D. Jak mogę zamodelować tę relację na diagramie klas UML?


title: Rest Design dotyczący logowania użytkownika

text: Aby być jak najbardziej spokojnym, czy logowanie użytkownika jest lepiej zaprojektowane za pomocą GET lub POST w serwisie internetowym REST? I dlaczego?


title: Jak działają referencje w R?

text: Uważam, że R jest mylące, ponieważ ma tak inne pojęcie odniesienia niż w językach takich jak C, Java, Javascript... Ruby, Python, C++, właściwie w każdym języku, w jakim kiedykolwiek programowałem. Jedną z rzeczy, które zauważyłem, jest to, że nazwy zmiennych nie są nieistotne przy przekazywaniu ich do czegoś innego. Odwołanie może być częścią danych. np. według tego samouczka a <- współczynnik(c("A","A","B","A","B","B","C","A","C")) wyniki <- table(a) Prowadzi do `$a` wyświetlanego jako atrybut jako `$dimnames$a`. Widzieliśmy również, że wywołanie funkcji takiej jak `a <- foo(alpha=1, beta=2)` może tworzyć atrybuty w `a` o nazwach `alfa` i `beta`, lub może przypisywać lub w inny sposób obliczać 1 i 2 do nieruchomości już istniejących. (Nie chodzi o to, że istnieje tu rozróżnienie informatyczne — to po prostu nie ma miejsca w czymś takim jak JavaScript, chyba że chcesz go emulować, przekazując obiekt i używając tam klucza=wartość). Funkcje takie jak `names(...) ` zwracają lwartości, które będą miały wpływ na ich wejście. A najbardziej dopadł mnie ten. x <- c(3, 5, 1, 10, 12, 6) y = x[x <= 5] x[y] <- 0 różni się od x <- c(3, 5, 1, 10, 12 , 6) x[x <= 5] <- 0 Pokoloruj mnie zdezorientowany. Czy istnieje spójna teoria tego, co się tutaj dzieje?


title: Czy w startupie zaleca się używanie więcej niż jednego języka?

text: Pracuję dla mobilnego startupu, w którym ze względów historycznych wybranym przez nas językiem był C#. Niedawno zostałem przydzielony do małego projektu, aby zbudować narzędzie, które będzie używane przez nas wewnętrznie. Kiedy wyjaśniłem swój zamiar użycia Pythona do zbudowania tego narzędzia, byłem za to mocno krytykowany, ponieważ wprowadzenie nowych języków i technologii (Debian, Apache, Python i Django) do naszego ekosystemu utrudniłoby innym programistom utrzymanie (ponieważ tylko dwa inne osoby znają więcej niż jeden język poza C#). Sprzeciwiłem się, że opracowanie tego projektu w C# zajęłoby znacznie więcej czasu (co moim zdaniem jest nieodłącznym problemem z frameworkiem language/.NET) i że projekt jest mały i przeznaczony do rozwiązania bardzo konkretnego problemu. Oczywiście konieczne jest, aby ekosystem był jak najbardziej jednorodny, ale jeśli tworzysz narzędzia, infrastrukturę i systemy wewnętrzne, gdy są lepsze rzeczy do zbudowania niż C#, powinieneś rozważyć ich użycie. Używając jednego języka, wykluczasz wiele innych świetnych bibliotek i frameworków, a w tym przypadku była to różnica między poświęceniem tygodnia na budowanie w Pythonie a miesiąca w C#. Czy uważasz, że w startupie lub nawet w większej firmie dopuszczalne jest rozumienie i używanie tylko jednego języka? Czy może jestem naiwny?


title: Dlaczego programowanie jest czasami postrzegane jako drugorzędna rola?

text: Przez większość życia jestem programistą. Niedawno przeprowadziłem rozmowę kwalifikacyjną na stanowisko kierownicze w firmie, a osoba przeprowadzająca rozmowę kwalifikacyjną spojrzała na moje CV i zapytała mnie: „Skąd wiemy, że nie jesteś tylko programistą”. Co moim zdaniem jest dość niegrzeczne, ale nie jest to odosobniony incydent i słyszałem inne podobne rzeczy w innych ustawieniach. Wydaje się, że z jakiegoś powodu bycie programistą jest postrzegane jako niższe stanowisko, zwłaszcza w miejscach, w których mają osobny dział IT, który jest postrzegany jako rola wsparcia. Czy kariera w tworzeniu oprogramowania jest skazana na bycie drugorzędnym obywatelem wsparcia?


title: Parsowanie wyrażeń matematycznych z dwiema wartościami, które mają nawiasy i znaki minus

text: Próbuję przeanalizować równania takie jak te poniżej, które mają tylko dwie wartości lub pierwiastek kwadratowy określonej wartości, z pliku tekstowego: 100+100 -100-100 -(100)+(-100) sqrt(100 ) za pomocą znaków minus, nawiasów i symbolu operatora w środku i pierwiastka kwadratowego, i nie mam pojęcia, jak zacząć... Mam już skończoną część pliku i proste części obliczeniowe, z wyjątkiem tego, że nie mogłem uzyskać mojego program do rozwiązywania równań ww. #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> main(){ PLIK *fp; znak buff[255], sym,sym2,del1,del2,del3,del4; podwójna liczba1, liczba2; int ret; fp = fopen("wejście.txt","r"); while(fgets(buff,sizeof(buff),fp)!=NULL){ char *tok = buff; sscanf(tok,"%lf%c%lf",&num1,&sym,&num2); switch(sym){ case '+': printf("%lf\n", num1+num2); przerwanie; przypadek '-': printf("%lf\n", num1-num2); przerwanie; przypadek '*': printf("%lf\n", num1*num2); przerwanie; przypadek '/': printf("%lf\n", num1/num2); przerwanie; default: printf("Wartość wejściowa jest nieprawidłowa\n"); przerwanie; } } fclose(fp); } Tak napisałem dla innych podstawowych operacji bez nawiasów i znaku minusa dla drugiej wartości i działa świetnie dla prostych. Używam instrukcji switch do obliczania operacji add, sub, mul i div, ale nie jestem pewien, jak prawidłowo używać funkcji `sscanf` (jeśli nie używam jej poprawnie) lub czy istnieje inny sposób, taki jak użycie funkcji takiej jak `strtok` do poprawnej analizy nawiasów i znaków minus. Jakakolwiek pomoc?


title: Najlepsze praktyki dotyczące metod testowania jednostek, które intensywnie korzystają z pamięci podręcznej?

text: Mam wiele metod logiki biznesowej, które przechowują i pobierają (z filtrowaniem) obiekty i listy obiektów z pamięci podręcznej. Rozważ IList<TObject> AllFromCache() { ... } TObject FetchById(guid id) { ... } IList<TObject> FilterByPropertry(int property) { ... } `Fetch..` i `Filter..` wywołaj `AllFromCache`, które wypełnią pamięć podręczną i zwrócą, jeśli jej tam nie ma, i po prostu wróci z niej, jeśli jest. Generalnie unikam testów jednostkowych. Jakie są najlepsze praktyki testowania jednostkowego w przypadku tego typu konstrukcji? Rozważałem wypełnienie pamięci podręcznej w TestInitialize i usunięcie w TestCleanup, ale to nie wydaje mi się właściwe (choć może tak być).


title: Jak zaplanować zadania optymalizacyjne w Scrum?

text: Ostatnio mój zespół Scrumowy otrzymał kilka próśb o zoptymalizowanie niektórych części naszego kodu. Patrząc na oprogramowanie z profilerem, znalazłem kilka miejsc, w których kod można poprawić. Zgodziliśmy się, że planujemy głównie w oparciu o historyjki użytkowników, aby upewnić się, że wszystko, co robimy, przynosi rzeczywiste korzyści użytkownikowi końcowemu, ale jak ta historia zostałaby sformułowana? Nie potrafię wymyślić dla nich dobrego sformułowania. Jak najlepiej zaplanować taki wysiłek? czy istnieje dobry sposób na mówienie o optymalizacji wydajności w kontekście historyjek użytkownika?


title: Czy zawijanie kolekcji w Javie jest dobrą praktyką?

text: Natknąłem się na taki fragment i stwierdziłem, że to przesadna inżynieria. Czy to dobra praktyka? public class SchoolList extends ArrayList<School> { } public class School extends ArrayList<StudentList> { } public class StudentList extends ArrayList<Student> { } public class Student { } Właściwie wolę prostą opcję: List<List<List<Student> >> szkołaLista;


title: Jak i kiedy zaprojektować prosty parser języka znaczników?

text: Chcę napisać prosty język znaczników z jego silnikiem renderującym. Po pierwsze, nie jestem do końca pewien **_kiedy_** powinienem tego spróbować... Mam tylko 12 lat... Ale jestem kompetentny w C++, ucząc się przez Internet i książki. Jestem również dobry w JavaScript, PHP i HTML. Obecnie dla odmiany uczę się Rubiego i Haskella. Rozumiem wszystkie pojęcia nisko- i wysokopoziomowe. Ale jedyną rzeczą, która zawsze mnie dezorientowała, było to, jak ludzie projektują te parsery, aby rozumieć i kompilować lub interpretować takie rzeczy, jak języki znaczników i języki programowania. Moje pytanie brzmi, kiedy powinienem zacząć pisać prosty silnik renderujący dla jeszcze prostszego języka znaczników? Bardziej przypomina niestandardowe struktury języków niestandardowych podobnych do xml, których używają dla swojego interfejsu (Qt używa pliku .ui, który jest podobny do XML do definiowania ich formularzy). Czy jestem w stanie zaprojektować coś takiego? Jakieś dobre artykuły, artykuły lub książki do przeczytania? _Preferowane języki_: C++, JavaScript, Haskell, Ruby


title: modelowanie etapowego procesu biznesowego

text: _wyobraź sobie_ biorąc pod uwagę obiekt biznesowy `projekt` i takie (uproszczone) zasady: * jego cykl życia jest podzielony na kilka `etapów oceny`; * etapy przebiegają liniowo i reprezentują łańcuch oceny; * każdy etap zapewnia własną „wartość nagrody”/algorytm; * promocja projektu jest kontrolowana decyzją innego użytkownika; * wynikowa nagroda jest przekazywana inicjatorowi projektu. _prawdopodobnie zbyt naiwny)_ Pierwsza myśl, jaka przychodzi mi do głowy, to użycie `wzoru dekoratora`; ze względu na swoją strukturę wygląda dość adekwatnie. Ale co, jeśli musisz zachować dodatkowe szczegóły dostarczone z obecnym „dekorowanym” „stanem” projektu? _Potrzebuję dodatkowego zachowania na każdym etapie_ Natknąłem się na artykuł o `jBPM`. Uważam, że ma wiele wspólnego z „WF”. Z pewnością ma najwięcej tego, co jest potrzebne, a jednocześnie ma (przesadnie) dużą infrastrukturę. _ale czy można go zaprojektować bez uwzględniania tak dużej złożoności?_ Co byś zaproponował?


title: Dlaczego dziedziczenie jest definiowane tylko w czasie kompilacji?

text: Wydało mi się to stwierdzenie ze strony „Wzorców Projektowych” czwórki jako szczególnie dziwne; w pewnym kontekście autorzy porównują dziedziczenie z kompozycją jako mechanizmy ponownego wykorzystania [str. 19]: > "...nie możesz zmienić implementacji odziedziczonych z klas nadrzędnych > w czasie wykonywania, ponieważ dziedziczenie jest zdefiniowane w czasie kompilacji." Dalej mówią o kompozycji: > „Kompozycja obiektu jest definiowana dynamicznie w czasie wykonywania przez obiekty > pozyskiwanie odniesień do innych obiektów”. Nie jestem pewien, dlaczego to rozróżnienie faz jest ważne. Jestem zaznajomiony z kompilacją i dziedziczeniem, ale pracuję jako programista JavaScript, więc może brakuje mi czegoś podstawowego.


title: Jak ocenić zdolność osoby do pisania zapytań SQL?

text: Jeśli jestem programistą z certyfikatem Java, widząc ten certyfikat, ludzie mogą w mgnieniu oka stwierdzić, że mam dobrą znajomość Java. Czy istnieje podobny certyfikat, aby wiedzieć, czy dana osoba może pisać dobre zapytania SQL? Nie mówię o administrowaniu bazami danych. Przyglądam się konkretnie MS SQL Server.


title: Dobra praktyka z wykorzystaniem sygnałów i systemu sterowanego zdarzeniami

text: Używam sygnałów (w szczególności Boost `signals2`) do tworzenia interfejsu API i modelu protokołu opartego na zdarzeniach. Większość elementów ma swoje własne sygnały i zwykle jest ich wiele. Rozważmy podstawową jednostkę, `użytkownika`; między innymi użytkownik może opuścić system, więc muszę mieć sygnał opuszczenia. Pytanie brzmi, czy sam obiekt użytkownika powinien zostać przekazany do obsługi sygnału? Np.: class user { sygnały<void(user&)> on_leave; //... }; Gdyby istniały `std::bind` i lambda, to ta decyzja byłaby łatwiejsza do podjęcia, ale przy przekazywaniu użytkownika z powrotem wydaje się raczej zbędna, tj.: user.connect_on_leave( [](user& u) { //no już mógłbym odwoływać się do użytkownika, jeśli chcę } ); I to samo z wiązaniem, mógłbym zrobić coś takiego user.connect_on_leave(std::bind(my_hander, std::ref(usr));Ponadto, ogólnie rzecz biorąc, czy lepiej, aby każdy sygnał po prostu przekazywał użytkownikowi cokolwiek to jest zaniepokojony lub ma jakiś rodzaj „wiadomości”, z którym działają wszystkie sygnały?I moje ostatnie pytanie: w którym momencie powinienem przestać normalizować dane?Jeśli kilka sygnałów ma ten sam „ładunek”, czy lepiej mieć oddzielne sygnały, takie jak , on_change_name(str) on_msg_sent(str) on_leave(str) lub on_action(action, str)


title: Jak szybko cicha aktualizacja IE może się rozprzestrzenić na użytkowników końcowych? A co z zarządzaną korporacyjną infrastrukturą IT?

text: Zgodnie z tym artykułem z BBC i tym postem na blogu Exploring IE firmy Microsoft, Microsoft zaplanował automatyczną aktualizację Windows XP, Windows Vista i Windows 7 IE do najnowszej wersji. Firma Microsoft oświadczyła, że umożliwi także użytkownikom rezygnację z tej aktualizacji za pomocą _zestawów narzędzi do blokowania aktualizacji automatycznych Internet Explorer 8 i Internet Explorer 9_ i będzie respektować wszelkie wcześniejsze odrzucone aktualizacje automatyczne. Zakładam, że zarządzani korporacyjni menedżerowie IE mogą również blokować, co chcą. W poście na blogu Microsoftu stwierdza się, że wydanie rozpocznie się w Australii i Brazylii, aby „z biegiem czasu rozwijać się w miarę upływu czasu”. Zastanawiam się, z perspektywy projektanta stron internetowych, jak szybko te aktualizacje będą prawdopodobnie rozpowszechniane wśród przeciętnych użytkowników końcowych, ale także szczególnie tych w ściśle regulowanych korporacyjnych infrastrukturach IT. Biorąc pod uwagę najlepsze (lub powszechne ;) praktyki w świecie korporacji, a także przeciętne zachowanie użytkownika końcowego, jak szybko mogę przestać inwestować znaczną ilość czasu we wsteczną kompatybilność z IE6 i 7?


title: Co to jest obiekt wartości w projektowaniu opartym na domenie?

text: Mam podmiot i zdałem sobie sprawę, że istnieje grupa właściwości, które ze sobą współpracują. Tak więc przeniosłem je do obiektu wartości (wraz z ich zachowaniem) i teraz mam odwołanie z mojej encji do tego obiektu wartości. Przeczytałem "Domain Driven Design Quickly" (PDF) i podczas wyjaśniania obiektów Value natknąłem się na następujące stwierdzenie: > Jeśli Klient jest obiektem encji, to jedno wystąpienie tego obiektu, > reprezentujące określonego klienta banku, nie może być ponownie użyte dla operacji na rachunku > odpowiadające innym klientom. W efekcie taka instancja musi być > utworzona dla każdego klienta. Może to spowodować > pogorszenie wydajności systemu w przypadku tysięcy wystąpień. Ale nadal nie wiem dokładnie, co to oznacza. Czy mój nowy obiekt jest obiektem wartości, czy powinien być encją? Mam problem z rozumowaniem, czy rzeczywiście powinien to być podmiot. Innymi słowy, jakie pytania powinienem zadać w mojej domenie, aby zapewnić mnie, że powinien to być obiekt wartości?


title: Udostępnianie bufora między wieloma wątkami część 2

text: To jest kontynuacja mojego poprzedniego pytania, na które nie udzielono odpowiedzi, więc staram się wyjaśnić: ostatnie pytanie. Mam bufor o rozmiarze n, który jest wypełniony z zewnętrznego źródła, ma 2 główne metody get() i add(), bloki get() (przez wait()), jeśli bufor jest pusty i bloki add(), jeśli bufor jest pełne. To odwołanie do obiektu bufora jest dostępne dla wielu konsumentów (wątków). Każdy konsument odczytuje dane z bufora niezależnie od innych konsumentów. Wszyscy konsumenci muszą **odczytać WSZYSTKIE dane** z bufora. Jak ktoś zasugerował, stworzyłem hashmap, w którym klucz jest identyfikatorem konsumenta, a wartość jest indeksem w buforze, który został odczytany przez tego konsumenta. Problem polega na tym, że każdy konsument nadal żąda danych z bufora. Muszę go jakoś zablokować, dopóki następny element danych nie będzie dostępny w buforze. Gdzie i jak mam to zablokować? (Nie mogę użyć wait() w obiekcie konsumentów, ponieważ producent nie może wywołać notyfikacji(), ponieważ producent i konsument są różnymi obiektami)


title: Testowanie oprogramowania dla programistów

text: Jestem programistą. Co muszę wiedzieć o testowaniu oprogramowania (oprócz TDD, testów jednostkowych i innych), aby moje oprogramowanie działało tak, jak powinno? Na przykład istnieją przypadki, w których TDD nie ma zastosowania. Dlatego muszę przeprowadzać proste testy dymne mojego kodu za każdym razem, gdy jest wdrażany/zmieniany. Aby uniknąć głupich błędów, prawdopodobnie powinienem mieć kilka prostych przypadków testowych i sprawdzić ręcznie, czy wszystko działa poprawnie. Lepiej unikać błędów niż je naprawiać, prawda? I to jest czas, kiedy podstawowe umiejętności testowania oprogramowania mogą się przydać. Jakie są te podstawy, które muszę znać?


title: Emulowanie komunikacji między Androidem a mikrokontrolerem za pomocą wątków lub usług czy… innych?

text: Nie jestem pewien, jaki jest najlepszy sposób na poniższe zadania: wątki, AsyncTasks, Loopery, usługi? Czemu? Czy są inni kandydaci? Potrzebuję wątków/Zadań/Usług/innych do: * Wykreślania danych, (odświeżanie należy wykonać dopiero po odczytaniu określonej ilości danych) * Generowania danych, (musi być wykonywane przez cały czas działania aplikacji w nieskończoność) * Odczytywania danych, ( jak wyżej) * Zapisywanie danych na karcie SD / robienie logów * Interakcja z UX **Bardziej szczegółowy scenariusz** Muszę emulować komunikację między urządzeniem zewnętrznym a Androidem. Urządzenie zewnętrzne (od jakiegoś czasu nie mam dostępu do tego urządzenia - czekam na jego przybycie, dlatego chcę emulować komunikację - czyli płyta systemowa kontrolno-pomiarowa z mikroprocesorem ARM) generuje pewne dane spakowane w ramki w formacie ASCII. Android musi łączyć się? (Może jest sposób, aby powiedzieć: „Hej, wygenerowałem dla ciebie dane. Weź to!”? - Jeśli tak, czy możesz mi doradzić?) zewnętrzne urządzenie odczytuje dane.