title: Czy można uczyć się matematyki przez programowanie, czy powinieneś uczyć się matematyki do programowania?

text: Nie jestem najlepszy w matematyce, też niezbyt okropny, ale poniżej średniej, zawsze myślałem o poprawie mojej matematyki, ale szkoły i książki nie działały, ponieważ zbyt szybko się nudzę. Jedyne, co mi się nie znudzi, to kodowanie i granie, więc pomyślałem, co jeśli napisanie programu, który rozwiązuje problemy matematyczne, pomoże mi lepiej zrozumieć matematykę, większość z tych problemów to granice (rachunek różniczkowy), funkcje, rachunek różniczkowy i niektóre inne przedmioty (już powiedziałem, że nie są tak dobre) podobne do poprzednio odnotowanych. Moje pytanie brzmi: czy jestem w stanie osiągnąć lepszą wiedzę z matematyki, jeśli wykonam określone kodowanie programu, a jeśli to możliwe, czy fizyka jest również możliwa w ten sposób? A może się mylę i matematyki należy się nauczyć przed programowaniem, aby poprawić moje kodowanie? PS: preferowanym językiem jest C++.


title: Logika budowania znaczników testów jednostkowych

text: Obecnie piszę bibliotekę funkcji pomocniczych do tworzenia pewnych powtarzalnych znaczników. Mam odniesienie do znaczników, które powinny tworzyć funkcje, ale jestem ciekaw, jak mam to zrobić? Potrzebnych jest wiele testów jednostkowych, aby uzyskać pełne pokrycie liczby różnych odmian danych wyjściowych z każdej funkcji. Obecnie mam szablon T4 dla każdej funkcji, który buduje testy jednostkowe dla każdej kombinacji danych wejściowych do tej funkcji. Każdy test jednostkowy wykonuje pojedyncze potwierdzenie względem ciągu zawierającego znacznik odwołania. Jednak ręczne zapisanie tych pojedynczych bitów znaczników zajęłoby dużo czasu, więc napisałem kolejną małą funkcję pomocniczą, która zasadniczo powiela tę samą logikę, którą testuję, ale w mniej elastyczny sposób, aby utworzyć oczekiwany ciąg. **Przychodzi mi do głowy, że to może nie być najlepszy pomysł? A może jest to dobre podejście do tego rodzaju problemu? Jakie są najlepsze praktyki w tym zakresie?** * * * Przykładowy test jednostkowy [TestMethod] public void Function_P1_P2_P3() { string markup = HelperLib.MakeMarkup(P1, P2, P3); Assert.AreEqual(this.MakeExpectedString(P1, P2, P3), znacznik); }


title: Co rozumiemy przez „projektowanie” w inżynierii oprogramowania?

text: Czytałem o różnych metodologiach oprogramowania. Każda metoda ma do pewnego stopnia, mniej więcej, fazę projektowania. Nie rozumiem, co rozumiemy przez projektowanie. Czy to oznacza pisanie swojego procesu myślowego na temat sposobu kodowania funkcji? Albo jest to sposób na powiedzenie, co zakodowałeś lub zakodujesz. Moment, w którym jestem najbardziej zdezorientowany, to prawdziwy świat, który różni się od umieszczania swoich myśli w dokumentach i mówienia, że to zadziała. Ponieważ szczegóły kodowania mogą się zmienić, nie wiem, jaki jest sens posiadania projektu przed kodowaniem.


Jak przydatne są operatory wrostkowe w języku programowania? Czy są warte dodatkowej złożoności, którą zapewniają? Czy możesz podać przykłady, w których operatory infiksowe są lepiej dopasowane do problemu, z którym nie można sobie poradzić, po prostu przeciążając normalne operatory?


title: Czy można zaimportować formularz vb.net do mieszania?

text: Stworzyłem formularz Windows przy użyciu projektu Visual Studio, czyli po prostu przeciągnij i upuść komponent do formularza z Toolbox. Czy można go zaimportować do Blenda i zmienić jego wygląd za pomocą Blenda? Otworzyłem projekt z Blenda, ale pojawia się tylko kod, a nie sam formularz. Z góry dziękuję!


title: Jak radzisz sobie z konfiguracją wielu programistów w projekcie?

text: Ostatnio myślałem o tym, jak radzę sobie ze zmianami konfiguracji między wieloma programistami w projekcie. Konkretnie tutaj o projekcie Laravel w PHP, ale myślę, że dotyczy to w dużej mierze wszystkich frameworków/języków. Ogólnie rzecz biorąc, czy powiedziałbyś, że najlepszą praktyką jest nie zatwierdzanie konfiguracji? Jeśli tak, jaka jest twoja praktyka robienia tego z kontrolą wersji, taką jak git? A może konfigurujesz każdą konfigurację jako inną konfigurację środowiska? Np. W Laravelu są konfiguracje środowiska, więc każdy programista ma katalog z własnymi różnymi ustawieniami i właśnie tego _obecnie_ używam. Następnie w kodzie możesz ustawić, w jaki sposób Laravel będzie wykrywał, na jakim środowisku się znajduje. To działa, zastanawiam się tylko, co robią inni programiści pracujący nad projektami z innymi programistami.


title: Praktyczne zastosowanie dziedziczenia generycznego i interakcji z nieogólnymi?

text: Próbowałem dowiedzieć się więcej o rodzajach i w końcu poczułem, że wpadłem w sytuację, w której bardziej przydatne byłoby używanie ich zamiast zwykłych klas. Czy poniższe byłoby praktycznym zastosowaniem generyków? Statek kosmiczny ma twarde punkty, w których można wyposażyć tylko niektóre rodzaje sprzętu. Funkcja wyposażania ma kod określający, czy punkt stały może wyposażyć element wyposażenia w oparciu o to, do czego przypisany jest parametr ogólny T. class Ekwipunek { ... } class Thruster : Ekwipunek { ... } class Statek Kosmiczny { void Ekwip<T>(Hardpoint<T> hardpoint, Ekwipunek Ekwipunek) { hardpoint.Equip(equipment); } } class Hardpoint<T> gdzie T : Equipment { void Equip(Equipment equipment) { ...(sprawdź, czy sprzęt dziedziczy lub jest typu T) } ... (jakiś inny kod wspólny dla wszystkich hardpointów) } class ThrusterHardpoint : Hardpoint<Thruster> { .... (niektóre kody specyficzne dla twardych punktów silnika) }


title: Radzenie sobie z oszacowaniami jako młodszy programista

text: Od paru miesięcy pracuję w firmie, która estymuje (dla ogółu, a nie dla juniorów) zadania, a potem dostajemy zadanie, rozwiązujemy je, przechodzi przez dwa testy i na koniec oszacowanie powinno być nieco spełnione. Jestem bardzo zestresowany, ponieważ niektóre szacunki są dla mnie po prostu niemożliwe do spełnienia. Nadal nie znam całego systemu (ponieważ jest dość istotny), więc czasami połowę czasu spędzam na ustaleniu, co muszę zrobić, gdzie i do czasu, gdy kończę, czasami oszacowanie się kończy i wciąż są testy do wykonania zrobione (i poprawianie błędów, jeśli takie były). Za drugim razem mam do czynienia z podobną funkcjonalnością wszystko działa znacznie szybciej, ale jak dotąd czuję, że jestem po prostu kiepski w programowaniu. Czy jest coś, co zrobiłeś, kiedy dopiero zaczynałeś, co pomogło ci przejść przez ten etap? Tak się denerwuję, gdy widzę, jak mało czasu mam na kodowanie, że czasami nie mogę nawet skupić się na tym, co robię, co jeszcze gorzej.


title: Jak przejść do programowania funkcjonalnego?

text: Ostatnio bardzo zaintrygował mnie F#, z którym trochę pracowałem. Pochodzący głównie z Javy i C#, podoba mi się, jak bardzo jest zwięzły i zrozumiały. Uważam jednak, że moje doświadczenie z tymi imperatywnymi językami zaburza mój sposób myślenia podczas programowania w F#. Znalazłem porównanie podejścia imperatywnego i funkcjonalnego i na pewno rozpoznaję „imperatywny sposób” programowania, ale trudno mi też zdefiniować problemy, które pasują do podejścia funkcjonalnego. Więc moje pytanie brzmi: Jak najlepiej dokonać przejścia od programowania obiektowego do programowania funkcjonalnego? Czy możesz podać jakieś wskazówki lub może dostarczyć trochę literatury, która może pomóc w ogólnym myśleniu „w funkcjach”?


title: Kompilacja wielu języków i Javascript

text: Wiele razy czytałem, że języki programowania podczas tworzenia gier lub dużego oprogramowania często używają wielu języków/skryptów jednocześnie. Zastanawiam się, jak to działa. Jak to kompilują? Jak to działa razem? Jak to działa również z projektowaniem stron internetowych, tj. Jak połączyć ich HTML/CSS z kodem JavaScript i sprawić, by działał? Wiem, że to naprawdę podstawowe pytania niskiego poziomu, ale nie mogę znaleźć informacji na ten temat w google. Prawdopodobnie po prostu nie szukam wystarczająco dobrze.


title: Czym jest agnostycyzm językowy i dlaczego jest tak nazywany?

text: Kiedy coś jest agnostyczne dla języka? Dlaczego tak się to nazywa?


title: Czy test jednostkowy/integracyjny, który może skutkować nieskończoną pętlą, powinien mieć jasne potwierdzenie?

text: Jednostka: Jednostka wielowątkowa odczytuje dane z kolejki i przetwarza je, wysyłając je do innej kolejki. Po przetworzeniu ostatniego elementu (znaleziono wartość pustą) proces zatrzymuje się. Test: Umieść zestaw znanych danych w kolejce i uruchom. Sprawdź, czy dane umieszczone w kolejce wyjściowej są poprawne. Jeśli urządzenie jest nieprawidłowo zaprogramowane, może kontynuować próby odczytu i przetwarzania wartości null kolejki. Może to spowodować wyjątek, ale nie musi (przy użyciu języka Java jako przykładowego języka). Zatem ten test mógłby spowodować nieskończoną pętlę. Czy test powinien śledzić liczbę odczytanych elementów z kolejki i zgłaszać błąd, jeśli odczytana zostanie większa liczba elementów niż określona? czy test powinien trwać dalej, wiedząc, że biegacz (człowiek) zobaczy, że się nie kończy?


title: Spróbuj znaleźć w słowniku słowo, które zawiera najwięcej liter

text: Biorąc pod uwagę kilka przypadkowych liter, Na przykład „a,e,o,g,z,k,l,j,w,n” i słownik.Spróbuj znaleźć w słowniku słowo, które ma większość podanych liter. stare pytania z wywiadu i znalazłem to pytanie, jestem nowy w algorytmach i zastanawiam się, czy może to być związane z programowaniem dynamicznym (najdłuższy wspólny podciąg) jest to rozwiązanie, które mogę wymyślić "Załóżmy, że słownik jest w próbie Zacznij od znalezienia permutacji podanych liter, tutaj możemy użyć rekurencji, możemy przyciąć drzewo rekurencji, sprawdzając litery w słowniku. I utrzymujemy zmienną, która przechowuje największy ciąg utworzony do tej pory." Próbowałem szukać w Internecie, ale nie mogłem znaleźć żadnego przykładu, który by to pasował, czy możesz podać kilka wskazówek.


title: Jak algorytmicznie dodawać notatki do istniejącego pliku midi względem pozycji istniejących notatek w Pythonie?

text: Mam plik midi, do którego chciałbym algorytmicznie dodawać notatki w stosunku do innych notatek, które już istnieją w pliku midi za pomocą Pythona, lub jeśli łatwiej jest użyć innego języka, również jestem na to otwarty. Zasadniczo mam plik midi z garścią notatek i powiedzmy, że chciałbym dodać 5 lub 6 nowych notatek otaczających każdą z istniejących notatek z losowo generowanymi różnicami czasu (na przykład różnice czasu z losową ilością milisekund różnicy między -10 a 10). Tak więc z każdą nutą już istniejącą w pliku midi dodawałbym 5 lub 6 nowych otaczających ją do nowego pliku midi, z przesunięciem o losowo określoną liczbę milisekund. Ponadto, jeśli to możliwe, chciałbym losowo zmieniać prędkości każdej nowej nuty w ten sam sposób w stosunku do nuty w oryginalnym pliku midi. Jedyną częścią, której nie jestem pewien, jak to zrobić, jest odczytywanie i zapisywanie do pliku midi w oparciu o zawartość początku notatki?


title: Rozwój oparty na testach podczas wdrażania elastycznej listy długości

text: Zgodnie z powszechnie stosowaną strategią TDD, aby coś zaimplementować, piszesz test, który najpierw kończy się niepowodzeniem kodu, piszesz najprostszy kod, refaktorujesz, a następnie powtarzasz. Próbuję sobie wyobrazić ten scenariusz z zaimplementowaniem listy o elastycznej długości (np. `List<T>` w .net. Powiedzmy, że najpierw testuję, wstawiając jeden element. Prawdopodobnie najprostszym sposobem na osiągnięcie tego jest wsparcie listy tablicą o długości 1 (która przejdzie test).Nie ma tu nic do refaktoryzacji, więc napiszę kolejny test, który wstawi 2 elementy.Po prostu zmienię długość tablicy na 2, a test przejdzie ponownie.Wtedy ja napisz test z 3 elementami, rozwiń tablicę i powtórz ponownie.Skończę to robić na zawsze, dopóki nie będę zmęczony.Czy to wyjątek od strategii „fail-test-first”?Czy brakuje mi czegoś w powyższej strategii? PS: Rzeczywista implementacja wspiera listę tablicą, która rośnie dwukrotnie za każdym razem, gdy liczba elementów przekracza długość tablicy.


title: Czy powinienem przeczytać „Wzorce projektowe z głową” jako moją pierwszą księgę wzorców projektowych?

text: Mam zamiar przeczytać książkę, aby zdobyć dobrą wiedzę na temat wzorców projektowych, dlaczego ich używamy, jak je stosować i jak wybrać najlepszy projekt dla mojego oprogramowania. Tak więc mam teraz na biurku dwie książki: "Wzorce projektowe na pierwszym miejscu" i "Wzorce projektowe: elementy oprogramowania obiektowego wielokrotnego użytku". Jak myślisz, którą książkę powinienem przeczytać jako moją pierwszą książkę o wzorcach projektowych?


title: Techniki i metody doskonalenia i przyspieszania rozwoju

text: Właśnie dostałem nowy projekt. To aplikacja WinForm. I to ciekawe, bo będę miał okazję dowiedzieć się, jak działają i są zarządzane gospodarstwa rybne. Będę musiał opracować interfejsy dotykowe i używać datasnap do komunikacji i synchronizacji danych między gospodarstwem a biurem. Rozwój będzie wykonywany w DELPHI win32, wciąż nie jestem pewien co do bazy danych, ale może SQLlite. A więc teraz nadchodzi trudna część projektu, budowanie go. Właśnie kończę jeden. Zajęło mi to dużo czasu i jestem trochę „wypalony”. Będę miał czas na relaks, niewiele, ale kilka dni. To, czego szukam, to kilka wskazówek i trików oraz ewentualnie narzędzi, aby móc przyspieszyć rozwój. Musi być gotowy do pracy za 2 miesiące. Więc jakich sztuczek używasz, aby przyspieszyć rzeczy?


title: Produkt potencjalnie nadający się do wysyłki wymaga zautomatyzowanych testów

text: Aby zawsze mieć potencjalnie możliwy do wysłania produkt na koniec każdego 2-tygodniowego sprintu, musimy ponownie przeprowadzić wiele testów regresji na koniec każdego sprintu. Jest to bardzo powtarzalne i czasochłonne, więc ostatecznie automatyzacja tych testów będzie prawdopodobnie opłacalna. Jeśli jednak nie potrzebujemy produktu potencjalnie nadającego się do wysyłki, ale planujemy kilka sprintów stabilizujących/hartujących, nie musimy ponownie przeprowadzać wszystkich naszych testów ręcznych w każdym sprintie. W takim przypadku automatyzacja naszych testów nie będzie opłacalna. Więc które podejście wolisz, aby zautomatyzować testy, zrezygnować z przewagi związanej z dostawą, czy też uważasz, że ten kompromis w rzeczywistości nie istnieje?


title: Ceny akcji na żywo dla projektu pobocznego

text: Ja i niektórzy z moich znajomych chcielibyśmy rozpocząć poboczny projekt, nad którym będziemy pracować w wolnym czasie. Oto nasze kryteria 1) Ambitny projekt, który nauczy nas umiejętności, które w przyszłości będą miały wartość biznesową. 2) Potencjał do zarabiania pieniędzy z samego projektu. Całkiem oczywiste cele. Zastanawiamy się nad możliwością stworzenia kanału cenowego na żywo. Rozumiemy, że nie możemy teraz dorównać tym na rynku. Ale zastanawiamy się nad możliwością dostarczenia kanału, który mógłby przynajmniej zapewnić przekaz „na żywo”, nawet jeśli nie może dorównać wydajności w czasie rzeczywistym zapewnianej przez szalone zasoby sprzętowe i programowe, które mogą zapewnić „duże”. Gdybyśmy mogli umieścić kanał na stronie internetowej, która może wyświetlać ceny nawet z 5 minutowym opóźnieniem, byłoby to możliwe. Obecna pula umiejętności to C++ i C#. Posiadamy umiejętności WPF, asp.net, silverlight dla UI (UI i tak nie ma większego znaczenia) Pytania 1) Jak można tanio (lub za darmo) uzyskać feedy z surowymi cenami? 2) Czy możliwe jest zrobienie tego pomysłu przynajmniej jako proof of concept (co oznacza, że może nie mieć żadnej wartości komercyjnej) w ciągu roku przez 3 programistów pracujących 20 godzin tygodniowo? 3) Czy na początek są dostępne jakieś informacje w Internecie? 4) Czy są jakieś projekty open source w tym obszarze?


title: Czy jedna próbka może wystarczyć do treningu perceptronu?

text: Muszę porównać zdjęcie i zdecydować, czy jest podobne do innego. W tym przypadku chciałbym użyć prostego perceptronu, który porównuje pixelmapy obu zdjęć. Ale mam tylko bardzo podstawową wiedzę na temat sieci neuronowych i nie jestem pewien, czy to podejście zadziała, jeśli będzie tylko jeden obraz źródłowy (do trenowania). Co mógłbym zrobić w tym przypadku?


title: Zabawne, towarzyskie pomysły na programowanie

text: Niedawno mój przyjaciel poszedł na Hackfest sponsorowany przez Quick Left. Co brzmiało jak świetna zabawa i żałuję, że nie mogłem sam w tym uczestniczyć. Więc teraz szukam pomysłów, takich jak Hackfest, które mogłyby pomóc programistom z mojego zespołu w innowacjach i szaleńczo myśleć o tym, jak robić rzeczy w sieci itp. Czy ktoś ma jakieś pomysły?


title: Czy warto dbać o wytyczne konwencji nazewnictwa?

text: Nazywam swoje zmienne używając konwencji .Net: * camelCase dla zmiennych i pól (zwykle używam _camelCase dla prywatnych pól w klasie) * PascalCase dla metod, właściwości i klas Jedyne miejsce, w którym odbiegam, to stałe i Enums, w których faktycznie preferują styl Java SCREAMING_CAPS. Baza kodu mojej firmy jest zaśmiecona pseudowęgierskim stylem notacji z VB6 i VBScript, jeśli nie pełnoprawnym węgierskim, tj. * s lub str dla Strings * i lub int dla Ints * d dla dziesiętnych (lub czasami podwójnych) * o lub obj dla każdy rodzaj obiektu, którego się wzdrygam za każdym razem, gdy widzę ten styl kodu używany w kodzie innej osoby (nawet w kodzie greenfield, a nie tylko w starszym cruft) i sam odmawiam użycia tego stylu. W przeszłości wspomniałem o standaryzacji konwencji nazewnictwa .Net i jest to po prostu ignorowane - ludzie, którzy piszą w węgierskiej notacji, nadal to robią, ci z nas, którzy mnie nie lubią, nadal używają własnego stylu; Trochę się boję, że jeśli **zrobimy** standaryzację (na co wciąż naciskam, ale nikogo to nie obchodzi), będzie to na węgierskiej notacji, a nie w zalecany sposób, i wtedy będę zmuszona do napisz taki kod. Czy pod tym względem robię górę z kretowiska? Czy nie powinno mnie to obchodzić, czy kod jest zaśmiecony zbędnymi identyfikatorami, a nie opisowymi nazwami, i nadal korzystać z własnego sposobu i naciskać, aby stało się to standardem?


title: Jak rozwiązać ogólny problem uwierzytelniania dla wielu aplikacji?

text: W mojej obecnej pracy (pracujemy w środowisku MS) mamy wiele wdrożonych aplikacji internetowych, zarówno internetowych, jak i intranetowych. Aplikacje wewnętrzne zazwyczaj korzystają z logowania Active Directory, a witryny skierowane do przodu mają własną implementację członkostwa. Niektórzy używają niestandardowego dostawcy, który napisaliśmy, inni korzystają z członkostwa w Asp.Net. Tak, stworzyliśmy sobie problem. Pytanie brzmi, jak to naprawić. Jakie byłoby najlepsze (lub przynajmniej dobre) rozwiązanie dla usługi uwierzytelniania/autoryzacji, które pozwoliłoby nam skonsolidować logowanie w jednym miejscu? Czy powinniśmy wdrożyć dostawcę oAuth/xAuth? Coś innego? Kilka pytań, nad którymi się zastanawiałem: 1. Czy role należy pozostawić do wdrożenia każdej aplikacji? Ogólnie rzecz biorąc, moglibyśmy myśleć o każdym zasobie jako posiadającym uprawnienia CRUD i być może udekorować akcje kontrolera wymaganymi uprawnieniami. 2. Mamy kilka naprawdę, naprawdę starszych aplikacji internetowych (.Net 1.1), które w większości po prostu siedzą i działają. Gdzie powinniśmy wyznaczyć granicę tego, do czego stosujemy tę nową usługę? Jeśli jest coś jeszcze, o czym powinienem pomyśleć, daj mi znać.


title: Jak odmówić dostępu do haseł klientowi, nie będąc nieprofesjonalnym lub niegrzecznym?

text: Załóżmy, że tworzysz witrynę internetową dla klienta. Ta strona internetowa ma własną rejestrację (połączoną z OpenID lub nie). Klient prosi o możliwość zobaczenia haseł wybieranych przez użytkowników, biorąc pod uwagę, że użytkownicy prawdopodobnie będą używać tego samego hasła na każdej stronie internetowej. Ogólnie mówię: * albo nie można odzyskać haseł, ponieważ nie są one przechowywane w postaci zwykłego tekstu, ale zaszyfrowane, * albo że nie mam do tego prawa, albo administratorzy nie mogą widzieć haseł użytkowników, bez podawania dodatkowych szczegółów. Pierwsza z nich jest fałszywa: nawet jeśli hasła są zahaszowane, nadal można je przechwycić i zapisać przy każdym logowaniu (na przykład wykonując dziwny rodzaj audytu, który będzie pamiętał nie tylko, któremu użytkownikowi udało się lub nie udało się zalogować, ale także jakie hasło). Drugi jest niegrzeczny. Jak odrzucić tę prośbę, nie będąc ani nieprofesjonalnym, ani niegrzecznym?


title: Zmiana sesji/kontekstu w aplikacji rails

text: Obecnie pracuję nad aplikacją w Ruby on Rails po stronie sieci społecznościowej i mam kilka różnych modeli, w tym użytkowników, grupy i strony. Chciałbym, aby użytkownicy byli administratorami grup/stron, co wydaje się stosunkowo proste, ale chciałbym również, aby użytkownicy mogli bezpośrednio wysyłać wiadomości do grup/stron, zamiast określać administratora grupy/strony. Tak się dzieje na Facebooku. Nie jestem jednak pewien, jak miałoby to być zrobione. Czy aby „przejąć” grupę/stronę, muszę zniszczyć sesję i rozpocząć nową jako grupa/strona, aby czytać wiadomości, edytować profil itp.? Inną opcją jest po prostu nadanie każdemu administratorowi dodatkowej skrzynki pocztowej i uprawnień administratora do edycji grup/stron, ale wydaje się, że może się to skomplikować, jeśli użytkownik administruje kilkoma grupami/stronami.


title: Rozróżnianie formatów wejściowych skryptów użytkownika

text: Mam projekt .NET w pracy, który udostępnia klientom kilka skryptów (Iron) Pythona, aby umożliwić im dostosowanie danych wyjściowych programu. Aplikacja generuje kod dla określonych maszyn i obsługuje kilka różnych formatów. Do niedawna dostarczaliśmy skrypt tylko dla jednego formatu. Rozszerzamy to, aby uwzględnić wsparcie dla innych. Jeśli użytkownik korzysta ze skryptu, wybiera swój skrypt wejściowy przed wygenerowaniem kodu wyjściowego. Skrypt zaprojektowany dla wyjścia „Format1” spowoduje błędy, jeśli spróbuje wygenerować wyjście „Format2”. Muszę się tym zająć. Jedną z opcji byłoby po prostu pozwolić klientom kierować się zdrowym rozsądkiem, a jeśli załadują niewłaściwy skrypt, po prostu zawiedzie lub, co gorsza, wygeneruje niedokładne dane. Jestem skłonny zapewnić trochę więcej ochrony niż to. W tej chwili rozważam umieszczenie linii komentarza w stylu shebang na górze skryptu, ala: # OUTPUT - Format1 Jeśli użytkownik spróbuje uruchomić proces `Format2` _process_ z `Format1` _script_ , zostanie on ostrzeżony. Alternatywnie mógłbym utworzyć różne rozszerzenia plików dla skryptów wejściowych, które różnią się w zależności od typu. Podejście z komentarzem typu pliku pomaga zapobiegać nieprawidłowemu ładowaniu się skryptu, kosztem nieostrzeżenia użytkownika, dopóki go nie zaznaczy, za pomocą okna dialogowego. Używanie różnych rozszerzeń plików pozwoliłoby mi zmniejszyć bałagan wizualny podczas udostępniania okna dialogowego plików, ale w rzeczywistości nie powstrzymuje ich przed załadowaniem niewłaściwego skryptu. Więc naprawdę nie jestem pewien, czy właściwym podejściem jest pozostawienie tego w spokoju, czy zapewnienie pewnych zabezpieczeń.


title: Ile ostrzeżeń w C włączyć?

text: To malutki projekt około 2000LOC. Jest kompilowany za pomocą `-Wall`. Teraz spróbowałem dodać `-Wextra`. Wydarzyły się dwie rzeczy: * Pojawiły się drobne, ale ważne ostrzeżenia, np. Porównanie podpisanego z niepodpisanym * Pojawiły się drobne, ale fałszywe ostrzeżenia, np. Nieużywany parametr funkcji. Funkcje te realizują uzgodnione prototypy. Ale na razie dodatkowe parametry naprawdę nie są potrzebne. Jednak ostrzeżenia, których nie można naprawić, zanieczyszczają dziennik kompilacji i mogą ukrywać znacznie bardziej niebezpieczne ostrzeżenia. _Czy należy zachować lub usunąć -Wextra? Jak można znaleźć kompromis w celu zapewnienia najbardziej niezawodnego rozwoju kodu w przyszłości?_


title: Jaka jest najważniejsza cecha oprogramowania wysokiej jakości?

text: To pytanie jest podobne do tego, ale zamiast mówić o jakości kodu, mówię o produkcie końcowym z perspektywy użytkownika. Gdybyś miał ograniczony czas/budżet i mógł zagwarantować tylko jeden atrybut oprogramowania (inny niż podstawowe wymagania), który przeniesie go z oprogramowania przyzwoitego do oprogramowania dobrej jakości, co uważasz za najważniejsze? Czy ma jak najmniej błędów? Intuicyjny interfejs? Pomocne komunikaty o błędach? Dobre wsparcie techniczne i dokumentacja? Jeśli nie chcemy, aby nasze oprogramowanie wyglądało dla naszych użytkowników jak tanie gówno, o czym zawsze powinniśmy pamiętać?


title: Jaką drogę obrać, aby zostać programistą systemów?

text: W przeszłości zajmowałem się kodowaniem w Javie i Pythonie. Pracowałem głównie nad aplikacjami webowymi i prostymi aplikacjami konsolowymi lub gui. Posiadam również formalne wykształcenie informatyczne. Jaką drogę powinienem obrać, aby zostać programistą systemów? Zawsze lubiłem C++, ale nigdy nie miałem okazji użyć go do czegokolwiek. Czy jednym z kroków będzie opanowanie C++? Jeśli tak, jakie zasoby możesz zaproponować? Chciałbym również wiedzieć, jak bardzo różni się praca między zwykłym starym rozwojem a rozwojem systemów. Wydaje się, że te dwa elementy zachodzą na siebie w dużym stopniu.


title: Jakie jest zaangażowanie Oracle w środowisko Java?

text: Inwestujemy dużo w Javę, ale po ostatnich doświadczeniach i przeczytaniu odpowiedzi Joonasa na to pytanie: > Gdybyś używał tych flag w Javie 6, mógłbyś doświadczyć nie tylko > awarii, ale także nieprawidłowego wykonywania pętli, czyli błędnych obliczeń, z powodu > niewielkiego uaktualnienia z 6u19 do 6u20 (w przybliżeniu). ... i powiązany wpis na blogu o znaczących problemach z Javą 7 spowodował, że martwiliśmy się o postęp w jakości Javy. Czy te problemy są rozwiązywane przez Oracle? Jakie gwarancje zapewniła firma Oracle, aby zapewnić, że Java będzie dobrze obsługiwana w przyszłości?


title: Wpływ wielu użytkowników na bazę danych Access

text: Czy ktoś może mi wyjaśnić, jak wpływa na wydajność bazy danych Access 2003, gdy jest używana przez wielu (30) użytkowników w tej samej sieci LAN? Pracuję nad projektem vb6 z tą bazą danych Access 2003, która działa dobrze na moim lokalnym komputerze, ale jest okropna, gdy jest używana przez 20-30 użytkowników. Czy jest coś, co mogę zrobić, aby poprawić wydajność? Jak mogę zrozumieć, co jest przyczyną tego pogorszenia wydajności?


title: Jako praktykujący, dlaczego miałbym dbać o Haskella? Co to jest monada i dlaczego jej potrzebuję?

text: Po prostu nie rozumiem, jaki problem rozwiązują.


title: Projekt klasy wątku?

text: Mam taką metodę w moim kodzie interfejsu użytkownika: void MyDialog::OnCommandSaveData() { std::list<MyClass*> obiekty; service_->GetAll(obiekty); dataService_->SaveObjects(obiekty); AddMessage("Zapisane dane.\n"); } Ponieważ ta metoda może zająć trochę czasu, chcę rozpocząć wątek, aby to zrobić. Używam C++ i planuję używać Boost.Thread. Więc moje pytanie brzmi, jak najlepiej to zrobić. Rozumiem, że muszę stworzyć funkcję statyczną, metodę statyczną lub funktor, który będzie zawierał powyższy kod. Gdzie to powinno żyć, w klasie dialogu? To po prostu wydaje się niewłaściwe, ale z drugiej strony może nie. A potem będę potrzebować muteksu i zablokować przynajmniej metodę SaveObjects. Gdzie powinien mieszkać mutex i gdzie umieścić blokadę? Większość przykładów wątków, podobnie jak przykłady wielu rzeczy, nie pokazuje wątków w kontekście rzeczywistej aplikacji. Pokazują główną metodę z funkcją globalną i to wszystko. Więc jeśli możesz wskazać mi przykład klasy, która zarządza wątkami dla operacji, to byłoby świetnie. Kupuję logikę w zaakceptowanej odpowiedzi na to pytanie: Czy umieszczenie wątku/pracownika w tle w klasie jest „niewłaściwe”/złe? Jednak odpowiedź mówi tylko, dlaczego to zrobić, a nie jak. **UPDATE** Dokonałem refaktoryzacji kodu przy użyciu wzorca MVP (Model View Presenter)/Humble Dialog Box: void MyDialog::OnCommandSaveData() { presenter_->SaveData(); } Więc teraz przyjrzę się dodaniu wielowątkowości w kontekście MVP. **UPDATE 2** Znalazłem ten artykuł, który mówi o tworzeniu wielowątkowych winformów za pomocą MVP. Jest w C#, więc będę musiał przetłumaczyć to na C++, ale wygląda dobrze: http://aresterline.wordpress.com/2007/04/17/multi-threaded-winforms- application-mvp/ Zasadniczo obejmuje 1) tworzenie `ThreadSafeView`, który jest opakowaniem lub serwerem proxy wokół widoku, który umożliwia aktualizację widoku z wątku roboczego. Oraz 2) utworzenie „ThreadedPresenter”, który pozwala metodom prezentera pojawiać się w nowym wątku. Naprawdę podoba mi się, jak to izoluje kod wątków z widoku i kodu prezentera.


title: jak mam powiedzieć szefowi, że nie wiem, jak mam robić to, czego chce?

text: mój szef niedawno przekazał mi szczegóły nowego programu, który chce, żebym napisał. Po tym, jak zacząłem myśleć o tym, co powiedział i przeprowadzić badania, czuję, że projekt, który dał, wykracza poza moje możliwości. Jak mam powiadomić mojego szefa?


title: Czy istnieją prywatne społeczności zajmujące się przeglądem kodu?

text: Podobnie jak w przypadku tego pytania Usługi przeglądu kodu, czy istnieją jakieś społeczności, w których mogę uzyskać przegląd mojego kodu. Najlepiej byłoby, gdyby była to prywatna sprawa między tobą a recenzentem, ponieważ byłyby to duże kawałki pełnego, komercyjnego projektu, a całość musiałaby podlegać umowie NDA lub podobnej. Wiem o codereview.stackexchange.com, ale nie jest to opłacalne, ponieważ nie chcę umieszczać kodu w domenie publicznej, a kod byłby zbyt duży dla formatu witryny pytań i odpowiedzi.


title: Jak mogę promować czyste kodowanie w moim miejscu pracy?

text: Pracuję z wieloma starszymi kodami Java i RPG w wewnętrznej aplikacji firmy. Jak można się spodziewać, wiele kodu jest napisane w wielu różnych stylach i często jest trudne do odczytania z powodu źle nazwanych zmiennych, niespójnego formatowania i sprzecznych komentarzy (jeśli w ogóle istnieją). Ponadto duża ilość kodu nie jest odporna. Wiele razy kod jest szybko wpychany do produkcji przez bardziej doświadczonych programistów, podczas gdy kod nowszych programistów jest wstrzymywany przez „przeglądy kodu”, które IMO są niezadowalające. (Zazwyczaj przybierają one formę: „To działa, musi być w porządku” niż poważna krytyka kodu). testowanie. Pracuję dla tej firmy od około 4 miesięcy i kilka razy pochwaliłem mój styl kodowania. Mój menedżer jest również fanem czystszego kodowania niż jest to normą. Czy to moja rola, aby starać się dążyć do lepszego stylu i lepszego kodowania defensywnego, czy po prostu powinienem kodować w najlepszy możliwy sposób i mam nadzieję, że mój przykład pomoże innym zobaczyć, jak czystszy, bardziej niezawodny kod (a także agresywna refaktoryzacja) spowoduje skrócenie czasu debugowania i zmiany?


title: Aplikacja punktu sprzedaży online i offline

text: Zamierzam stworzyć prosty system Point of Sales. Głównie wszystkie dane będą przechowywane w centralnej bazie danych (serwer mysql). Cała aplikacja będzie winformami. Razem każdy klient lokalny będzie miał swoją kopię bazy danych przechowywaną lokalnie, a wszystkie operacje będą oparte na lokalnej bazie danych, z wyjątkiem jednej operacji, która polega na przeniesieniu zapasów między punktami sprzedaży. Więc co pewien czas będą aktualizacje z lokalnej bazy danych do centralnej bazy danych. Powód posiadania lokalnej kopii bazy danych na każdym pulpicie klienta na wypadek problemów z łącznością z serwerem centralnym, tak aby firma mogła normalnie funkcjonować i aktualizować się po uruchomieniu. Potrzebuję pomocy w podjęciu decyzji o właściwej ścieżce do rozwiązania tego rozwiązania. Czy mój projekt jest akceptowalny, czy jest wadliwy?


title: Wieloplatformowy program mobilny?

text: Więc moje pytanie brzmi: czy jeden programista może w łatwy sposób wydać aplikację na iOS i Androida? Jestem web developerem, który gra głównie w PHP, Node, Ruby, AS i JS. Bawiłem się trochę w Objective-C i Javie. Zasadniczo szukam dobrego sposobu na wydanie dość prostej aplikacji na Androida i iOS oraz jednolitego interfejsu użytkownika, który jest dość łatwy w utrzymaniu. Głównym celem aplikacji jest dobrze zaprojektowany interfejs graficzny (z animacją pomagającą w przekazywaniu akcji) do prostego interfejsu API zaplecza. Obecnie przyglądam się użyciu Flexa, ale chcę poznać inne opcje, jeśli istnieją. Dziękuję Ci!


title: Jak przydatni są headhunterzy/rekruterzy IT w poszukiwaniu nowej pracy?

text: Ponieważ istnieją dla kilku dziedzin o różnym stopniu użyteczności, jestem ciekawa, jaka jest reputacja headhunterów/rekruterów, którzy skupiają się wyłącznie na profesjonalistach IT (np. programistach, inżynierach oprogramowania, CIO itp.), jeśli chodzi o znalezienie nowej pracy. Czy są rzeczywiście przydatne, czy też są uczciwie trafione lub chybione? Czy obowiązuje stare powiedzenie o pracy tylko z ograniczoną liczbą osób, czy możesz bezpiecznie przekazać CV/życiorys kilku z nich?


title: W jaki sposób licencje OSS są utrzymywane w projektach bez wsparcia?

text: Jeśli projekt OSS nie jest wspierany (na przykład przez Apache Foundation), w jaki sposób jest utrzymywana licencja OSS? Mój konkretny scenariusz jest następujący: jeśli tworzę aplikację mobilną na GPLd z klauzulą przekształceń niekomercyjnych, co tak naprawdę powstrzyma kogoś przed ponownym wydaniem jej jako „Pro” i pobieraniem za nią opłat? Zakładam, że właściciel sklepu (Apple/Google/MS) nie będzie podtrzymywał licencji w moim imieniu. Czy sprowadzałoby się to do mnie osobiście, że musiałbym zapłacić za prawnika (co wydaje się dużym wysiłkiem, aby chronić gest dobrej woli)?


title: Lekcja Objective-C w zakresie projektowania klas

text: Mam następujące klasy: Nauczyciel Klasa Uczeń (jak klasa szkolna) Wszystkie one wywodzą się z KObject, który ma następujący kod: - initWithKey - send - processKey Nauczyciel, Klasa Ucznia wszystkie używają funkcji processKey i initWithKey z klasy nadrzędnej KObject. Wdrażają własną wersję wysyłania. Problem, jaki mam, polega na tym, że KObject nigdy nie powinien być tworzony. Jest bardziej jak klasa abstrakcyjna, ale nie ma pojęcia klasy abstrakcyjnej w celu-c. Przydaje się tylko do umożliwienia podklasom dostępu do jednej właściwości i dwóch funkcji. Co mogę zrobić, aby nie można było utworzyć wystąpienia KObject, ale nadal umożliwiać podklasom dostęp do funkcji i właściwości KObject?


title: Niezmienniki pętli w Pythonie

text: Mam trochę doświadczenia z niezmiennikami pętli, ale nie jestem w nich zbyt jasny. Próbuję się ich nauczyć na przykładzie w Pythonie. Czy ktoś może wskazać jeden lub pomóc mi zrozumieć? Szukałem zarówno w programers.SX, jak iw Internecie, ale jedyne, co udało mi się znaleźć, to niezmienniki i projektowanie zgodnie z umową -- nic w niezmiennikach pętli.


title: Programowanie sieci asynchronicznej przy użyciu rozszerzeń reaktywnych

text: Po wykonaniu kilku lat temu (mniej więcej) „niskopoziomowego” asynchronicznego programowania „gniazdo” (w stylu asynchronicznego wzorca opartego na zdarzeniach (EAP)) i niedawnym przejściu „w górę” do „TcpListener” (model programowania asynchronicznego (APM)), a następnie próbując przejść do „async/await” (Asynchroniczny wzorzec oparty na zadaniach (TAP)) Mam to dosyć i ciągle muszę zawracać sobie głowę całą tą „hydrauliką niskiego poziomu”. Więc zastanawiałem się; dlaczego nie spróbować `RX` (Reactive Extensions), ponieważ może bardziej pasować do mojej problematycznej domeny. Wiele kodu, który piszę, musi być z wieloma klientami łączącymi się przez Tcp z moją aplikacją, która następnie rozpoczyna dwukierunkową (asynchroniczną) komunikację. Klient _lub_ serwer może w dowolnym momencie zdecydować, że wiadomość musi zostać wysłana i to zrobić, więc nie jest to klasyczna konfiguracja `żądanie/odpowiedź`, ale bardziej działająca w czasie rzeczywistym, dwukierunkowa, "linia" otwarta dla obu stron wysyłać co chcą, kiedy chcą. (Jeśli ktoś ma przyzwoitą nazwę, aby to opisać, z przyjemnością to usłyszę!). „Protokół” różni się w zależności od aplikacji (i tak naprawdę nie ma związku z moim pytaniem). Mam jednak pytanie wstępne: 1. Biorąc pod uwagę, że działa tylko jeden „serwer”, ale musi on śledzić wiele (zwykle tysiące) połączeń (np. klientów), z których każdy ma (z braku lepszego opisu) swój własny "maszyna stanów" do śledzenia ich stanów wewnętrznych itp., które podejście wolisz? EAP/TAP/APM? Czy RX byłby w ogóle uważany za opcję? Jeśli nie, dlaczego? Muszę więc pracować asynchronicznie, ponieważ a) nie jest to protokół żądania/odpowiedzi, więc nie mogę mieć wątku/klienta w wywołaniu blokującym „oczekiwanie na wiadomość” lub wywołaniu blokującym „wysyłanie wiadomości” (jednak jeśli wysłanie jest blokowanie dla tego klienta tylko mogłem z tym żyć) i b) muszę obsługiwać wiele jednoczesnych połączeń. Nie widzę sposobu na zrobienie tego (niezawodnie) za pomocą połączeń blokujących. Większość moich aplikacji jest związana z VoIP; czy to wiadomości SIP od klientów SIP, czy wiadomości PBX (powiązane) z aplikacji takich jak FreeSwitch / OpenSIPS itp., ale możesz, w najprostszej formie, spróbować wyobrazić sobie serwer "czatu" próbujący obsługiwać wielu klientów "czatu". Większość protokołów jest oparta na tekście (ASCII). Tak więc, po zaimplementowaniu wielu różnych kombinacji wyżej wymienionych technik, chciałbym uprościć moją pracę, tworząc obiekt, który mogę po prostu utworzyć, powiedzieć mu, na którym `IPEndpoint` ma nasłuchiwać i kazać mi powiedzieć, kiedy dzieje się coś interesującego ( do których zwykle używam zdarzeń, więc niektóre EAP są zwykle mieszane z pozostałymi dwiema technikami). Klasa nie powinna zawracać sobie głowy próbą „zrozumienia” protokołu; powinien jedynie obsługiwać ciągi przychodzące/wychodzące. I tak, mając na oku RX z nadzieją, że (w końcu) uprości to pracę, stworzyłem od podstaw nowe „skrzypce”: używając Systemu; za pomocą System.Collections.Concurrent; za pomocą System.Net; za pomocą System.Net.Sockets; za pomocą System.Reactive.Linq; za pomocą System.Text; class Program { static void Main(string[] args) { var f = new FiddleServer(new IPEndPoint(IPAddress.Any, 8084)); f.Start(); Konsola.KluczOdczytu(); f.Stop(); Konsola.KluczOdczytu(); } } public class FiddleServer { private TcpListener _listener; private ConcurrentDictionary<ulong, FiddleClient> _clients; prywatny ulong _currentid = 0; publiczny IPEndPoint LocalEP { get; zestaw prywatny; } public FiddleServer(IPEndPoint localEP) { this.LocalEP = localEP; _clients = new ConcurrentDictionary<ulong, FiddleClient>(); } public void Start() { _listener = new TcpListener(this.LocalEP); _słuchacz.Start(); Observable.While(() => true, Observable.FromAsync(_listener.AcceptTcpClientAsync)).Subscribe( //OnNext tcpclient => { //Utwórz nowy FSClient z unikalnym identyfikatorem var fsclient = new FiddleClient(_currentid++, tcpclient); // Śledź klientów _clients.TryAdd(fsclient.ClientId, fsclient); //Zainicjuj połączenie fsclient.Send("connect\n\n"); Console.WriteLine("Klient {0} zaakceptowany", fsclient.ClientId); } , //OnError ex => { }, //OnComplete () => { Console.WriteLine("Zainicjowano połączenie klienta"); //Zaakceptuj nowe połączenia _listener.AcceptTcpClientAsync(); } ); Console.WriteLine("Uruchomiony"); } public void Stop() { _listener.Stop(); Console.WriteLine("Zatrzymany"); } public void Send(ulong clientid, string rawmessage) { FiddleClient fsclient; if (_clients.TryGetValue(clientid, out fsclient)) { fsclient.Send(rawmessage); } } } public class FiddleClient { private TcpClient _tcpclient; public ulong ClientId { get; zestaw prywatny; } public FiddleClient(ulong id, TcpClient tcpclient) { this.ClientId = id; _tcpclient = tcpclient; } public void Send(string rawmessage) { Console.WriteLine("Wysyłanie {0}", rawmessage); var data = Encoding.ASCII.GetBytes(rawmessage); _tcpclient.GetStream().WriteAsync(dane, 0, dane.Długość); //Write a WriteAsync? } } Zdaję sobie sprawę, że w tych "skrzypcach" jest mały szczegół dotyczący implementacji; w tym przypadku pracuję z FreeSwitch ESL, więc `"connect\n\n"` w skrzypcach powinien, podczas refaktoryzacji do bardziej ogólnego podejścia, zostać usunięty. Zdaję sobie również sprawę, że muszę zmienić metody anonimowe na metody prywatnych instancji w klasie Server; Po prostu nie jestem pewien, jakiej konwencji (np. „`OnSomething`”) użyć dla nazw metod? To jest moja podstawa/punkt wyjścia/podstawa (która wymaga trochę "dokręcenia"). Mam kilka pytań na ten temat: 1. Zobacz powyżej pytanie "1" 2. Czy jestem na dobrej drodze? A może moje „projektowe” decyzje są niesprawiedliwe? 3. Pod względem współbieżności: czy poradzi sobie z tysiącami klientów (poza analizowaniem/obsługą rzeczywistych wiadomości) 4. W przypadku wyjątków: nie jestem pewien, jak uzyskać wyjątki zgłoszone w klientach „do” serwera ”); jaki byłby dobry sposób? 5. Mogę teraz pobrać dowolnego podłączonego klienta z mojej klasy serwera (używając go `ClientId`), zakładając, że narażam klientów w taki czy inny sposób i bezpośrednio wywołuję na nich metody. Mogę również wywoływać metody za pośrednictwem klasy Server (na przykład metodę `Send(clientId, rawmessage)` (podczas gdy to drugie podejście byłoby „wygodną” metodą szybkiego przekazywania wiadomości na drugą stronę). nie jestem do końca pewien, gdzie (i jak) iść stąd: * a) muszę obsługiwać przychodzące wiadomości; jak mam to ustawić? Oczywiście mogę pobrać strumień, ale _gdzie_ powinienem zająć się pobieraniem odebranych bajtów? Myślę, że potrzebuję jakiegoś "ObservableStream" - czegoś, co mogę subskrybować? Czy umieściłbym to w „FiddleClient” lub „FiddleServer”? * b) Zakładając, że chcę uniknąć używania zdarzenia, dopóki te klasy `FiddleClient`/`FiddleServer` nie zostaną zaimplementowane bardziej konkretnie, aby dostosować obsługę protokołu specyficznego dla aplikacji itp. przy użyciu bardziej szczegółowych klas `FooClient`/`FooServer`: jak bym od tego zrobił pozyskiwanie danych z bazowych klas „Fiddle” do ich bardziej szczegółowych odpowiedników? Artykuły/linki, które już przeczytałem / przejrzałem / wykorzystałem w celach informacyjnych: * Używaj gniazda za pomocą rozszerzenia reaktywnego * Tworzenie i subskrybowanie prostych obserwowalnych sekwencji * Jak dodać lub powiązać kontekst z każdym połączeniem/sesją ObservableTcpListener * Programowanie asynchroniczne z Reactive Framework i Biblioteka zadań równoległych — część 1, 2 i 3. * Czy praktyczne jest używanie rozszerzeń reaktywnych (Rx) do programowania gniazd? * Serwer sieciowy oparty na .NET Rx i serwer sieciowy oparty na .NET Rx, Take 2 * Niektóre samouczki Rx


Czy jesteś członkiem związku zawodowego? Czemu? Dlaczego nie? Jeśli tak, i nie masz nic przeciwko, aby o tym wspomnieć, który? Czy znasz programistów, którym pomogło bycie w związku, lub którym pomogłoby bycie w związku? Czy znasz jakichś programistów, którzy byliby utrudnieni lub byliby utrudnieni przez bycie w związku?


title: Dzisiaj wychodzi VS 2010 SP1. Jakieś wieści na temat planu działania dla Visual Studio 2012?

text: Dzisiaj Visual Studio 2010 SP1 wychodzi jako wersja ogólnie dostępna. To sprawiło, że zacząłem się zastanawiać nad nadchodzącą wersją programu Visual Studio 2012: Jakie są plany firmy Microsoft dotyczące programu Visual Studio 2012? Słyszałem, że co dwa lata będą pojawiać się z nową wersją. Czy są jakieś otwarte fora lub dyskusje? Kiedy podgląd będzie publicznie dostępny? Ale co najważniejsze: jakie są nowe wyróżnienia, ulepszenia w .NET i C#/F#/VB (i oczywiście C++, prośba od Stijn)?


title: Programowanie sterowane zdarzeniami: sekwencja niefortunnych zdarzeń

text: Mam bardzo podstawową pętlę gry, której głównym celem jest sprawdzenie aktualizacji i zmian na liście. Rozważałem użycie programowania sterowanego zdarzeniami, aby zastąpić ideę pętli/listy gier ObservableCollection, jednak po prostu mam tę wielką chmurę wątpliwości co do programowania sterowanego zdarzeniami. Zadaję te pytania osobom z doświadczeniem w programowaniu sterowanym zdarzeniami: 1. Jakie są dobre sposoby testowania i budowania projektu programowania sterowanego zdarzeniami? To znaczy, skąd będę wiedział, że nie mogę natknąć się na „sekwencję niefortunnych zdarzeń”? Chcę uniknąć wydarzeń, których nie planowałem. 2. Czy istnieją schematy testów jednostkowych do testowania programowania sterowanego zdarzeniami? Ponieważ w chwili zadawania tego pytania mam słabą reputację, nie mogę zamieścić więcej niż dwóch linków: Obserwowalne kolekcje można znaleźć pod adresem: http://msdn.microsoft.com/en-us/library/ms668604.aspx


title: Agile Development - Pytania dotyczące dokumentacji

text: W projekcie zwinnym - 1. Zakładam, że wymagania użytkownika są uchwycone w kategoriach user story. Czy to jest poprawne? 2. W jaki sposób dokumentowane są wymagania systemowe obejmujące wszystkie wnioski składowe (w przypadku dużego projektu)? 3. Czy są używane jakieś konkretne narzędzia? 4. Czy dobrym pomysłem jest uchwycenie wymagań systemowych jako podrzędnych historyjek użytkownika w głównej historyjce użytkownika? 5. Czy poszczególne zespoły składowe powinny sporządzić dokument SRS zawierający wymagania specyficzne dla zespołu składowego? 6. Czy powinien istnieć dokument projektowy niskiego poziomu, czy będzie on częścią dokumentu SRS?


title: Pomiar „nowości” danych

text: Mam na myśli heurystykę, która powinna pozwolić mi "punktować" dane na podstawie "nowości", nad którymi chciałbym pracować w czasie rzeczywistym. W tym przypadku mam na myśli nowość w tym sensie, że źródłem danych jest coś w rodzaju wideo i chcę wiedzieć, kiedy następuje statystycznie istotna zmiana w strumieniu. Rozważmy na przykład film przedstawiający scenę, w której kamera obraca się w prawo. Dopóki prędkość obrotu jest stała, dane należy uważać za nie-nowatorskie lub nieinteresujące. Jeśli ptak przelatuje obok w przeciwnym kierunku, wówczas te części kadru, przez które przelatuje ptak, zostaną uznane za nowe i otrzymają wysoki wynik. Gdyby wyniki były przypisane do bloku 16x16 pikseli, gdy ptak osiągnął środkową ramkę, mogłoby to wyglądać tak: 0 0 0 0 0 0 0 0 0 0 3 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 Jak rozumiem, istnieją algorytmy, które mogą wykonać część tego dla kompresji wideo, blokować kompensację ruchu i globalną kompensację ruchu, ale wynik tych algorytmów wydaje się być obrazem różnicy, który musiałbym następnie przetrawić (średnia różnic ), kiedy wszystko, czego chcę, to prosty skrót. To znaczy, biorąc pod uwagę powyższą macierz 7x4: 0x00003200 Pierwsza klatka filmu, nie mająca historii, byłaby maksymalnie nowa: 0xFFFFFFFF Fajną rzeczą byłoby przypisanie punktacji całej klatce, a następnie dla interesujących klatek rozbicie tego na mniejsze klocki, a dla interesujących klocków inny zestaw i tak dalej, jak drzewo czworokątne. Podsumowując, czy istnieje skrót, aby przejść z serii ramek do pojedynczej wartości skrótu dla każdej ramki, na podstawie najnowszych ramek? A może jest lepszy sposób na zrobienie tego, o którym nie wiem? **Dalsze udoskonalenia** Ponowne wykorzystanie przykładowej macierzy powyżej, gdzie jest _3_, próbka jest bardziej nowatorska, ponieważ blok, w którym znajduje się ptak w tej ramce, nie zawierał go wcześniej, podczas gdy próbki z _1_ nadal są nieco Powieść, bo nie ma już ptaka, ale nie tak bardzo, bo ten blok powrócił do tego, czego można by się spodziewać w tle. To prowadzi mnie do przekonania, że w rozwiązaniu powinien wystąpić jakiś efekt kumulacji, ponieważ należy wziąć pod uwagę więcej niż ostatnią klatkę.


title: Jak obsłużyć priorytet i propagację w systemie zdarzeń?

text: Załóżmy, że mam prosty system zdarzeń o następującej składni: object = new Object(); object.bind("my_trigger", function() { print "cześć"; }); object.bind("my_trigger", function() { print "hello2"; }); obiekt.trigger("mój_wyzwalacz"); Jak mogę się upewnić, że hello2 zostanie wydrukowane jako pierwsze? (Nie chcę, aby mój kod zależał od kolejności wiązania zdarzeń). Co więcej, jak mam zapobiec rozprzestrzenianiu się moich wydarzeń? (np. chcę uniemożliwić wykonanie każdego innego zdarzenia)


title: Licencjonowanie w projektach rozwidlonych

text: Rozwinąłem projekt, który od jakiegoś czasu nie jest utrzymywany. Mam wiele zmian, które chciałbym wprowadzić i chcę aktywnie utrzymywać projekt i utrzymywać go w otwartym kodzie źródłowym. Jak działa licencjonowanie w takich sytuacjach? Oryginalny projekt jest na licencji MIT i chciałbym, żeby tak pozostało. Czy będę mógł zmienić właścicieli praw autorskich do licencji, czy będzie musiała pozostać taka sama?


title: C++ Dla programistów C#

text: Muszę nauczyć się jak najwięcej C++, jestem starszym programistą C#. Czy jest na to dobry samouczek? Albo książka? A czy trudno będzie nauczyć się C++? Jeśli zapytasz, co zrobię z C++, muszę uzyskać wystarczającą zdolność do tworzenia aplikacji do przetwarzania wideo lub aplikacji do przetwarzania obrazów i jaki jest na to okres czasu?


title: Czym różni się przepływ pracy programisty zorientowanego na CLI od tego zorientowanego na GUI?

text: Wiele słyszałem o zaletach wykonywania mniej prac programistycznych w aplikacjach GUI i używania większej liczby narzędzi wiersza poleceń (zwłaszcza w odniesieniu do wydajniejszego wykonywania zadań). Ponieważ jednak nie rozumiem, jak mój przepływ pracy byłby _inny_, gdybym bardziej polegał na narzędziach wiersza poleceń, nie mogę łatwo ocenić, czy osobiście zainwestuję czas i wysiłek w naukę nowego zestawu narzędzi i zmianę mój przepływ pracy. W tej chwili: * Koduję kilka projektów pobocznych w językach takich jak C/C++/D/C#/Java/Python przy użyciu Visual Studio, Eclipse itp. i uruchamiam je, konfigurując ustawienia kompilacji i naciskając klawisz F5, aby zbudować/uruchomić. * Tworzę program internetowy w pracy, co wiąże się z użyciem Django do skonfigurowania serwera, połączenia z bazą danych itp. prawie wszystko w edytorze tekstowym SciTE. * Do uruchamiania zwykłych programów używam Launchy... nadal bez terminala. :) * Do kopiowania plików i tak dalej używam zwykłego wyszukiwania/przenoszenia w graficznym menedżerze plików (Eksplorator Windows, Nautilus). * Debugowanie: używam albo Visual Studio, albo narzędzi debugowania dla Windows (jeśli jestem w Windows). Nie robiłem dużo debugowania w Linuksie, ale do rzeczy, które zrobiłem, użyłem Eclipse (również dla Javy w Windows). * W pracy: Aby połączyć się z systemem kompilacji i skonfigurować projekt, po prostu używam narzędzi, które zostały zintegrowane z Eclipse na mój użytek — nie potrzeba terminala ani niczego (chociaż z pewnością jestem mile widziany, jeśli Naprawdę chcę) Jak to jest robić te rzeczy w CLI? Które części stają się bardziej/mniej wydajne? Które aspekty mojego przepływu pracy musiałyby zostać zmienione, aby uzyskać największą korzyść z przejścia do pracy głównie w CLI? Innymi słowy... **Jeśli magicznie przekształciłeś mnie w guru wiersza poleceń, jak mój nowy przepływ pracy w kodowaniu różniłby się od mojego obecnego, skoncentrowanego na GUI sposobu robienia rzeczy?**


title: Jakie są konkretne przykłady użycia list połączonych?

text: Połączona lista może być używana, gdy chcesz tanio wstawiać i usuwać elementy i gdy nie ma znaczenia, że elementy nie znajdują się obok siebie w pamięci. Jest to bardzo abstrakcyjne i chciałbym zobaczyć kilka konkretnych przykładów, kiedy używana jest lista połączona, a nie tablica. Nie mam dużego doświadczenia w programowaniu, więc nie mam dużego (jeśli w ogóle) doświadczenia w świecie rzeczywistym.


title: Testy end-to-end a testy jednostkowe, czy testy powinny być oddzielone?

text: W naszej firmie zazwyczaj upewniamy się, że piszemy kompleksowy test dla naszych stron/aplikacji internetowych. Oznacza to, że uzyskujemy dostęp do adresu URL, wypełniamy formularz, przesyłamy formularz pod inny adres URL i sprawdzamy wyniki strony. Robimy to, aby przetestować walidację formularzy, sprawdzić, czy szablony HTML mają prawidłowe zmienne kontekstowe itp. Używamy go również do pośredniego testowania podstawowej logiki. Współpracownik powiedział mi, że powodem tego jest to, że możemy w dowolnym momencie wyrwać i zmienić podstawową implementację, o ile przejdą testy end-to-end. Zastanawiam się, czy takie rozdzielenie ma sens, czy jest to tylko sposób na uniknięcie pisania testów dla mniejszych jednostek kodu?


title: Język programowania, który pozwala definiować nowe limity dla typów prostych

text: Wiele języków, takich jak `C++`, `C#` i `Java` umożliwia tworzenie obiektów reprezentujących proste typy, takie jak `integer` czy `float`. Korzystając z interfejsu klasy, możesz przesłonić operatory i wykonać logikę, taką jak sprawdzanie, czy wartość przekracza regułę biznesową 100. Zastanawiam się, czy w niektórych językach można zdefiniować te reguły jako adnotacje lub atrybuty zmiennej/właściwości. Na przykład w C# możesz napisać: [Range(0,100)] public int Price { get; ustawić; } A może w `C++` mógłbyś napisać: int(0,100) x = 0; Nigdy nie widziałem, aby coś takiego zostało zrobione, ale biorąc pod uwagę, jak bardzo uzależniliśmy się od sprawdzania poprawności danych przed ich przechowywaniem. Dziwne, że ta funkcja nie została dodana do języków. Czy możesz podać przykłady języków, w których jest to możliwe?


title: Czy MSDN wystarczy do przystąpienia do egzaminów MCPD?

text: Zostałem zatwierdzony przez kierownictwo do rozpoczęcia egzaminów MCPD (zwrot kosztów). Rozwijam się w .NET od 1.1, ale żeby mieć pewność, że będę przechodził przez zestawy szkoleniowe, żeby nie pominąć żadnych obszarów, których nie potrzebowałem w przeszłości. Pierwszym egzaminem, który zdam to WCF i muszę przyznać, że w przeszłości stworzyłem tylko kilka prostych usług i jest to prawdopodobnie jeden ze słabych punktów mojego repertuaru programistycznego. Obecnie nie ma również dostępnej książki dla WCF na platformie .NET 4. Poza brakiem egzaminów praktycznych, czy to: http://msdn.microsoft.com/en-us/library/dd456779.aspx byłoby wystarczające/wydajne do nauki przystąpić do egzaminu? Jeśli nie, czy mógłbyś zasugerować jakieś źródło, które mogłoby być? Mam kopię Lowy's Programming WCF Services, którą pożyczył mi znajomy, ale jest przeznaczona dla platformy .NET 3.5. Uwaga: jeśli sugerujesz zasoby, pamiętaj, że chcę się uczyć i rozumieć WCF w pełni i nie chcę _tylko_ zdać egzaminu, chociaż to ostatnie jest zdecydowanie celem/celem.


title: Czy ORM promuje denormalizację bazy danych?

text: Doctrine i Propel wykorzystują dziedziczenie pojedynczych i konkretnych tabel do mapowania relacji między obiektami. Pierwszy widzi wszystkie możliwe pola w drzewie klas odwzorowane na pojedynczą tabelę, podczas gdy drugi mapuje każdą klasę do określonej tabeli, duplikując wspólne pola w hierarchii dziedziczenia. Chociaż ułatwia to aparatowi ORM, sugeruje mi zły projekt bazy danych. Czy te złe wzorce projektowe należy wymuszać w bazie danych?


title: jak zarządzać wydaniem zarówno danych sw, jak i konfiguracyjnych

text: w moim repozytorium mam folder sw i cfg(config) pod trunkiem, myślę, że kiedy wypuszczę, rozgałęzę oba te foldery do folderu wydań, np. v1 mojej aplikacji z danymi konfiguracyjnymi w Londynie. Jeśli chcę wydać v1 mojej aplikacji również w NewYork, myślę, że rozgałęzę moje dane konfiguracyjne z głównego i dostosuję je w folderze wydania. Czy to brzmi dobrze? czy coś przegapiłem? Chcę móc powiedzieć za 12 miesięcy od teraz, które miasto ma jaką wersję aplikacji, a także móc obsługiwać ich dane konfiguracyjne. Pozdrawiam Trunk sw qweqwe.cs, asdasd.cs itp. cfg setupData.inixmlwhatever Wydania Londyn sw@v1 cfg - Dane konfiguracyjne Londynu Aplikacja NewYork... w wersji 1, aplikacja NewYork cfg Mediolan... w wersji 2, dane cfg takie same jak w Londynie ale o nazwie milan.cfg Tokyo... app w wersji 2, ale z łatką specyficzną dla Tokio, z danymi cfg takimi samymi, jak w Mediolanie, czy powinienem iść: Trunk sw cfg Releases swV1 swV2 cfgTokyo cfgLondon cfgMilan Z tym ostatnim nie wiem jaka wersja aplikacji jest zainstalowana w Londynie itp.? Mógłbym użyć tagów, aby to obejść, ale wtedy ktoś mógłby przesunąć tag. W przypadku tych pierwszych mam mnóstwo appV1 (z czym jestem w porządku, oddziały są tanie itp., ale wygląda na mniej zorganizowane). Twoje zdrowie


title: Korzyści z TOGAF lub podobnego?

text: Mogę przeczytać notkę na stronie internetowej i być pod wrażeniem rzekomych korzyści, ale nie pracowałem nigdzie ani z nikim, kto stosował architekturę TOGAF (lub jakąkolwiek alternatywę). Nasza organizacja zadeklarowała, że jest zaangażowana w przejście od dość chaotycznego modelu projektowania i rozwoju do czegoś, co zbliża się do nowoczesnego ustrukturyzowanego procesu. Rzeczy takie jak TOGAF zostały wymienione jako pomagające osiągnąć światowej klasy środowisko programistyczne dla przedsiębiorstw (!), ale jestem przekonany, że nikt tutaj tak naprawdę nie rozumie rzeczywistych korzyści, jakie może przynieść hurtowa adopcja, a co ważniejsze, wysiłku/ ból wymagany do osiągnięcia tego samego. Czy masz doświadczenie w używaniu TOGAF lub podobnego do kontroli wrestlingu w organizacji? Czy uważasz, że korzystanie z frameworka przyniosło jakieś korzyści? **Edytuj** : Dla wyjaśnienia TOGAF to „The Open Group Architecture Framework”, szczegółowa metoda i zestaw narzędzi do tworzenia architektury korporacyjnej. Zobacz: http://www.opengroup.org/architecture/togaf8-doc/arch/


title: Stare przeglądarki i wypełniacze

text: # Polyfilling, kiedy to za dużo? Podsumowałem to pytanie w jednym zdaniu. Czy praktyczne jest wypełnianie wszystkich braków IE8 jednym solidnym plikiem javascript, na przykład, czy byłyby jakieś wady (wydajność) lub blokady (niemożliwość wypełnienia niektórych funkcji)? **Wycofanie pytania: (historia)** _Pracuję z moją firmą od około pół roku i nieustannie walczymy z klientami o aktualizację ich przeglądarek. Wszyscy sądzą, że przejście na nowszą przeglądarkę przyniesie tylko więcej problemów niż rozwiązań (mają wewnętrzne, stare aplikacje webowe przeznaczone do pracy w domu)_ _Jestem w punkcie, w którym musiałem upolować i wypełnianie tak wielu rzeczy z IE8, że zastanawiam się, czy jest jakaś wada do wypełniania każdego niedoboru, który ma IE8 (lub przynajmniej robienia tego tak, aby javascript nie powodował błędów / niepowodzeń)_ Czy nierozsądne jest oczekiwać, że być w stanie wypełnić wszystkie braki w starszych przestarzałych przeglądarkach, takich jak IE6-IE8, czy to byłby zły pomysł (wydajność? stabilność?)... _Jeśli jest to możliwe, dlaczego nie ma w pełni funkcjonalnych bibliotek do wypełniania , wszyscy wskażą na „modernizr”, czyli WYKRYWANIE FUNKCJI i nie oferują własnych wypełniaczy._ _Więc, gdzie ukryta jest główna/pełna biblioteka wypełniaczy IE8, czy też będę musiał się nad tym podporządkować?_ Edycja: powód dlaczego nie wybieram tylko potrzebnych części, ponieważ mogą istnieć braki, których nie jesteśmy świadomi o f, chciałbym mieć poprawkę dla Internet Explorera, więc jeśli nie istnieje, zrobię to sam.*


title: Modelowanie użytkownika w MongoDB

text: Nasz zespół uczy się pracy z MongoDB. Musimy modelować **użytkownika** między innymi dla aplikacji opartej na OAuth. Wiemy, jak modelować w świecie relacyjnym, ale nie jesteśmy pewni, jak to zrobić w NoSQL. W naszej aplikacji **wyjątkowo** identyfikujemy użytkownika po jej **adresie e-mail**. Adresy e-mail są naturalnie unikalne, a także weryfikowalne. Adres e-mail wydaje się być dobrym kandydatem na klucz. Nie modelujemy osoby. Nie mamy możliwości identyfikacji osoby, jedynie jej adres e-mail. Oznacza to, że jeśli dana osoba ma więcej niż adres e-mail, będzie miała kilka dokumentów w bazie danych. Ponadto, jeśli zmieni adres e-mail, użyje innego dokumentu. A także, ponieważ ludzie logują się za pomocą OAuth, nie ma pojęcia, że zarządzają swoimi danymi. Nie ma hasła, a nazwę użytkownika podaje OAuth. Dlaczego nie użyć adresu e-mail jako klucza podstawowego kolekcji `_id`? Na przykład: { _id: "john.doe@example.com", name: "John Doe", provider: "example.com", komentarze: [ // wszystkie komentarze ] } Jakie są zalety i wady takiego podejścia ? **Zmienione w celu wyjaśnienia różnicy między _osobą_ a _użytkownikiem_**


title: Pierwsze kroki z AI (sztuczną inteligencją)

text: Ostatnio zainteresowałem się sztuczną inteligencją. Na co dzień jestem inżynierem oprogramowania w firmie zajmującej się tworzeniem aplikacji mobilnych. Zastanawiam się, jaki jest najlepszy sposób na zapoznanie się z AI? Czym są książki „obowiązkowe”, aby uzyskać informacje o sztucznej inteligencji?


title: Porównanie wydajności różnych samodzielnie utworzonych drzewnych struktur danych w języku C++

text: Mam dwie struktury danych drzewa, które stworzyłem w C++ i dają one odpowiedź na zapytania o zakres/zapytania o punkty w tym programie. Używam Ubuntu. Potrzebuję pomocy w zrozumieniu sposobu porównywania wydajności tych dwóch struktur danych (w celu odpowiedzi na zapytanie w tym programie) w pamięci zewnętrznej. W jaki sposób mogę to zrobić? Dużo szukałem w Internecie i nie znalazłem żadnego jasnego pomysłu, jak to się robi. Wiem, że mogę mierzyć we/wy dysku, zużycie pamięci, użycie procesora itp. za pomocą poleceń dstat i iostat systemu Ubuntu. Potrzebuję do tego celu dokładnego i profesjonalnego sposobu.


title: Jak działa GDI/+ i czy można go zastąpić moim własnym kodem?

text: Na wikipedii jest napisane, że GDI to API i główny komponent systemu operacyjnego odpowiedzialny za reprezentowanie obiektów graficznych i przesyłanie ich do urządzeń wyjściowych. Nie znajduję zbyt wiele na temat tego, co faktycznie robi GDI+, więc zastanawiam się, czy GDI+ można zastąpić frameworkami gui, takimi jak wxWidgets i GTK+, czy te frameworki są raczej zbudowane na GDI+? Podczas rysowania na ekranie za pomocą GDI+ wydaje się, że nie można rysować poza oknem aplikacji. Czy faktycznie GDI+ to robi, a jeśli nie, co to jest? Jeśli jest to GDI, to czy nie wszystko musi przechodzić przez GDI+, aby obiecać tę funkcjonalność i nie pozwolić aplikacjom na malowanie w dowolnym miejscu? Skąd bierze się w tym wszystkim bufor ramki? Wyobrażam sobie, że cokolwiek kontroluje transformacje współrzędnych, kontroluje również bufor ramki. Jednak wydaje się, że aplikacje mają dużą kontrolę nad buforami ramki i sposobem ich używania. Widzę, że OpenGL ma wiele typów buforów ramki i funkcji do generowania buforów ramki, usuwania ich itp. I czytam, że są przechowywane w pamięci wideo. Wyobrażam sobie, że frameworki gui, które nie są tak mocno zaangażowane w GPU, nie przechowują swoich w pamięci wideo. Więc jak te rzeczy działają i wchodzą w interakcję z transformacjami?


title: Poprawa wydajności kontenerów z dynamicznie alokowanymi obiektami

text: Nie jest to ściśle związane z C++, ale jego system typów służy dobrze do zilustrowania problemu. Załóżmy: * Mamy ogólny szablon `Container<T>` (taki jak `std::vector<T>`), który przechowuje nieokreśloną liczbę elementów tego samego typu `T` na stercie. Każdy element jest alokowany i zwalniany przez konstruktor i destruktor `T`. * Typ `M` przechowujący elementy `m` na stercie (więc samo `M` jest rodzajem kontenera). Jednak wartość `m` nie jest znana w czasie kompilacji, więc nie można jej użyć jako parametru szablonu `M`. Problem: * Jeśli spróbujemy użyć typu `Container<M>`, dostęp do elementów `M` wewnątrz tego kontenera wymagałby dwóch dereferencji wskaźnika, co generalnie ma gorszą wydajność niż gdyby wszystkie elementy `M` były ułożone ciągły. Nieidealne rozwiązanie: * Utwórz oddzielną klasę `ContainerFixed<T>`, która bezpośrednio zarządza pamięcią `T`, jeśli zakłada się, że `T` ma ten sam rozmiar w całym kontenerze. `T` musiałby również wymieniać informacje o swoim przechowywaniu z klasą zawierającą. Jeśli jednak zaimplementujemy inny rodzaj kontenera, to musimy ten proces powtórzyć. Problem pojawia się, ponieważ klasa kontenera jest nieświadoma wymagań `T` dotyczących przechowywania, więc odracza alokację do samego `T`; gdyby kontener wiedział, że `T` wymaga tylko stałej (choć nie znanej w czasie kompilacji) liczby elementów, można by tego uniknąć. Teraz mam wrażenie, że gdyby istniał jakiś sposób na przekazanie kontenerowi, że `M` ma określony rozmiar `m` (jak w `M<m>`, co nie jest dozwolone w C++), to z sygnatury typu z `Kontenera<M<m> >` można potencjalnie wywnioskować, że możliwy jest szybszy schemat alokacji. (W pewnym sensie jest to trochę jak typy zależne.) Oznacza to, że każdy `Kontener1<Kontener2<m> >` może być bardziej efektywnie alokowany jako „spłaszczony” kontener. Jakie byłoby bardziej ogólne rozwiązanie tego problemu? Nie sądzę, że jest to coś, co można łatwo rozwiązać w C++ (proszę udowodnić mi, że się mylę), więc z pewnością chciałbym usłyszeć, czy jest to coś, co inne języki mogą rozwiązać w znacznie prostszy sposób (być może bardziej wyrafinowany systemy typu).


title: Co to jest szybsze NSDictionaries lub właściwości obiektów?

text: Jeśli zrezygnuję z tworzenia obiektów modelu, których używam tylko do przekazywania informacji, a zamiast tego użyję NSDictionaries i będę mieć stałą dla kluczy w tym samym miejscu, w którym używam modelu, to czy ma to jakiś wpływ na wydajność? **Na przykład:** Jeśli zacznę przekazywać NSDictionaries do niestandardowych komórek zamiast tworzyć klasy Model dla komórki, czy będzie dobrze, jeśli nie podam żadnych metod w klasie tego modelu. Często widziałem to w interfejsach API iOS, takich jak NSNotifications. Rzadko widziałem to w Javie, gdzie kolekcje są używane jako integralna część API.


title: Kiedy powinniśmy przerwać pracę i zrobić narzędzie?

text: Jako inżynier oprogramowania zawsze chętnie poszukujemy skutecznych narzędzi zwiększających naszą produktywność. A w naszej codziennej pracy często nie jesteśmy zadowoleni z istniejących narzędzi i chcielibyśmy mieć lepsze sposoby, takie jak lepsza konfiguracja skryptu GDB, skrypt Vima i trochę skryptu Pythona, aby nudne rzeczy były automatyczne. Jednak w rzeczywistości jest to kompromis, ponieważ tworzenie narzędzi wymaga również czasu i energii. Nie daje natychmiastowego wzrostu produktywności. Jak zatem ocenić, czy nadszedł czas, aby przestać pracować i stworzyć narzędzia, które pomogą złagodzić przyszły ból?


title: Początki wcięcia kodu

text: Interesuje mnie, kto wprowadził wcięcia kodu oraz kiedy i gdzie zostało to wprowadzone. Wydaje się to bardzo ważne dla zrozumienia kodu, ale nie było uniwersalne. Większość kodu Fortran i Basic była (jest?) bez wcięć, to samo dotyczy Cobola. Jestem prawie pewien, że widziałem nawet stary kod Lispa napisany jako ciągły, zawinięty w linie tekst. Trzeba było policzyć nawiasy w głowie, żeby to przeanalizować, nie mówiąc już o zrozumieniu. Skąd więc wzięła się tak ogromna poprawa? Nigdy nie widziałem żadnej wzmianki o jego pochodzeniu. Oprócz oryginalnych przykładów jego użycia poszukuję również oryginalnych omówień wcięcia.


title: Jak zrelaksowany (lub nie) powinien być sprint?

text: Jaki powinien być stosunek do tworzenia historii przypisanych do sprintu? Oczywiście chcesz nadać priorytet ich wykonaniu w sprincie, ale dla mnie głównym celem agile jest bycie dynamicznym: nie chcesz celowo odwlekać lub sprawić, by było „w porządku” przegapienie ukończenia historyjek użytkownika w sprincie, ale na w tym samym czasie, gdy pojawiają się nieoczekiwane rzeczy, a te historie nie zostają ukończone i są pchane do następnego sprintu, nie chcesz mieć poczucia, że zrobiłeś coś złego. To nie powinno być przerażające ani negatywne, prawda? Czy negatywne/przerażające doświadczenia są akceptowalne w przypadku nieudanych zobowiązań sprintu? Czy programiści powinni być pociągnięci do odpowiedzialności za niewykonane zobowiązania sprintu, gdy pojawią się nieoczekiwane zadania, którymi trzeba się zająć (np. wsparcie produkcyjne)?


title: Błędy niewytłumaczalne?

text: Napotkałem błędy, które są niezwykle trudne do niezawodnego odtworzenia i/lub wyjaśnienia w sposób definitywny, ale _wydaje się_ do rozwiązania. Kiedy tak się stanie, ile czasu powinienem poświęcić na ściganie go? Przykład: to pytanie SO i powiązany post na forum jQuery, które oferują różne rozwiązania. Problem był powtarzalny sporadycznie aż do zmiany, którą omawiam w pytaniu SO, a nie w ogóle po zmianie. Jeśli nie rozumiem ostatecznie, co spowodowało błąd, czy mogę śmiało twierdzić, że nie wróci on w przyszłości z zaskoczenia?


title: Określanie kosztu wywołań API

text: _[To jest cross-post pierwotnie opublikowany przeze mnie w SO. Myślę, że to pytanie jest bardziej odpowiednie w tym miejscu.]_ Przeglądałem interfejs API AdWords i natknąłem się na jego arkusz stawek – http://code.google.com/apis/adwords/docs/ratesheet.html . Pobierają 0,25 USD za 1000 jednostek interfejsu API, aw sekcji „Koszty operacyjne” wymieniają koszt (w jednostkach interfejsu API) różnych wywołań interfejsu API. Jestem ciekaw - na podstawie jakich czynników (i inni programiści API) obliczają koszt wywołania API? Czy jest jakaś prosta formuła lub standardowy sposób, aby to określić? **Uwaga** : Kiedy mówię „koszt” wywołania API, nie mam na myśli pieniędzy, ale jednostki API. Na przykład, jak ustalić, że jedno wywołanie interfejsu API kosztuje 100 „jednostek”, a drugie 1000? * * * **Rozwijanie mojego oryginalnego postu** : Każde wywołanie API zużyje określoną ilość cykli procesora, pamięci i przepustowości na serwerze (i być może inne metryki, o których nie pomyślałem). Chciałbym w szczególności wiedzieć, jakie narzędzia / metody są dostępne do określenia tych metryk, jeśli API jest opracowywane przy użyciu (dowolnej z poniższych kombinacji): Perl, Python, PHP, .net, Ruby (lub inny język). Postgres, MySQL, MS SQL Server, Firebird, SQLite (lub inna baza danych). Apache, IIS (lub inny serwer WWW). Windows, Linux (lub inny system operacyjny).


title: Informacja o prawach autorskich w plikach CSS lub XML

text: Obecnie pracuję nad projektem open-source. Obecnie umieszczamy naszą informację o prawach autorskich na górze każdego pliku źródłowego Java. Zastanawiałem się, czy umieszczanie informacji o prawach autorskich w plikach CSS lub XML jest wskazane lub powszechną praktyką.


title: Tworzenie obiektów ze zdefiniowanymi przez użytkownika nazwami zmiennych

text: **Kontekst:** Tworzę projekt edukacyjny w XNA. To, co chciałbym zrobić, to pozwolić, aby gra była modyfikowalna, umożliwiając użytkownikom umieszczanie dowolnych wartości w pliku danych JSON, który jest wczytywany do gry. Chodzi o to, że chcę uniknąć hardcodingu, jeśli to możliwe _i_ sprawić, by automagicznie działało na wszystko, co użytkownik rzuci na silnik. **Problem:** Nie mam pojęcia, jak zaprojektować klasy, które mogą pomieścić tego rodzaju zachowanie, ponieważ rozumiem, że cokolwiek ładuje JSON, musi mapować go do istniejących zmiennych w obiekcie: public class SomeGameEntity { public pływak Siła { get; ustawić; } public bool IsStrong { get; ustawić; } } Ale to, czego chcę, to aby kod klienta mógł zrobić coś takiego: SomeGameEntity.Stats["Siła"] = 16; SomeGameEntity.Stats["IsStrong"] = prawda; **Moje rozwiązanie:** Po rozważeniu zdefiniowałbym tylko kilka prawidłowych typów danych, prawdopodobnie **float** , **bool** i **string** (inne typy, takie jak `XNA.Color` , prawdopodobnie należałoby wywnioskować z kombinacji elementów pływających RGB na obiekcie.) Dlatego sensowne jest utworzenie takiej klasy, jak poniżej: public class EntityStatComponent { private readonly Dictionary<string, float> _floatValues; private readonly Dictionary<string, string> _stringValues; private readonly Dictionary<string, bool> _boolValues; public float GetValue(string name) {} public void UstawWartość(string name, float value) {} public string GetString(string name) {} public void SetString(string name, string value) {} public bool GetFlag(string name) { } public void SetFlag(string name, bool value) { } } Wydaje się to jednak trudnym podejściem, szczególnie z _trzema słownikami na aktywny obiekt_. Prawdopodobnie powiedziałbym, że na ekranie jest mniej niż 250 obiektów na raz (postaci, pociski itp.). Niestety, nie sądzę, aby typowanie ogólne było dobrym rozwiązaniem, ponieważ dla T musiałby zaakceptować pojedynczy typ danych do słownika. Alternatywnie, gdybym zezwolił na użycie dowolnej wartości T za pomocą metody get/set, musiałbym użyć rzeczy `if(someArg is float)`, które, jak rozumiem, są mile widziane. Czy coś przeoczam, czy jest na to lepszy sposób?


title: Rozpoczęcie programowania w Pythonie

text: Obecnie jestem początkującym programistą (3 lata). Odkąd się rozwijam, zajmuję się głównie tworzeniem stron internetowych. To moja strefa komfortu, jeśli chodzi o programowanie. Lubię zarówno JavaScript, jak i PHP, ponieważ są łatwe w użyciu; jednak bardzo chciałbym poszerzyć swoją wiedzę, jeśli chodzi o programowanie. Przeprowadziłem badania nad wieloma różnymi językami, po prostu poznając wygląd i działanie innych języków. Lubię C, ponieważ ma podobną składnię do JavaScript. Lubię też Rubiego i Javę. Myślę jednak, że muszę uczyć się jednego na raz. Zdecydowałem się na Pythona ze względu na jego czystą składnię i fakt, że wiele osób uważa go za dobry język dla początkujących. ### Mój problem Pochodzę z języków, które są łatwe do nauczenia i używania (JavaScript i PHP). Na przykład dla JavaScript wszystko czego potrzebujesz to: <script type="text/javascript"> //skrypt tutaj </script> I możesz wykonać skrypt i zrobić takie rzeczy, jak manipulacja DOM. Dla PHP wszystko czego potrzebujesz to serwer z zainstalowanym PHP i możesz użyć: <?php //script here ?> Następnie możesz po prostu wykonać go przez AJAX lub żądanie w formularzu. Nie rozumiem, jak używać Pythona. Nie wierzę, że możesz po prostu wykonywać żądania AJAX z plikami `python`, tak jak z plikami `PHP`. Co mogę zrobić z Pythonem? Czy mogę go używać? Co zrobiłeś, używając tego?


title: Dlaczego najlepiej korzystać z kolekcji pierwszej klasy?

text: Zgodnie z zasadą nr 4 Object Calisthenics autorstwa Jeffa Baya (RTF) w The ThoughtWorks Anthology, zaleca się „ **Używaj najwyższej klasy kolekcji** ”. > **Zasada 4: Kolekcje pierwszej klasy** > > Zastosowanie tej reguły jest proste: każda klasa zawierająca kolekcję > nie powinna zawierać żadnych innych zmiennych składowych. Każda kolekcja jest opakowana > w swoją własną klasę, więc teraz zachowania związane z kolekcją mają swój dom. Możesz > zauważyć, że filtry staną się częścią tej nowej klasy. Ponadto twoja nowa klasa > może obsługiwać czynności, takie jak łączenie dwóch grup razem lub stosowanie reguły do > każdego elementu grupy. Z tego mogłem zrozumieć, że powinniśmy użyć oddzielnej klasy do zawijania kolekcji i metod dodawania, usuwania, modyfikowania danych tej kolekcji. Potrzebujemy tego, abyśmy byli pewni, jaki typ danych trafia do kolekcji, a co wychodzi. W przypadku korzystania z kolekcji generycznej (w językach, w których ma to zastosowanie), czy musimy przestrzegać tej zasady? Jeśli brakuje mi ważnego znaczenia, proszę o wyjaśnienie.


title: Czy istnieje nazwa dla tego wariantu drzewa?

text: Stworzyłem więc (i jestem pewien, że ktoś inny wymyślił to wcześniej - nie twierdzę, że to wymyśliłem) strukturę danych, która składa się z binarnego drzewa wyszukiwania, tylko zamiast każdego węzła mającego jeden lewy i prawe dziecko, mają dwa `Map<ciąg, Node>` dla lewej i prawej strony, a rodzic ma podobny `Map<string, Node>` dla korzeni. Tworząc drzewo, podajesz mu listę łańcuchów, które są nazwami pól obiektu, który przechowujesz w drzewie. Tworzy jeden pusty korzeń dla każdej nazwy. Kiedy wstawiasz obiekt, jest on umieszczany w każdym z drzew i sortowany na podstawie danych w tym polu. (Językiem w tym przypadku jest C#, ale można to zrobić w dowolnym języku OOP. Przechowywanie powinno być przez odniesienie, więc każdy obiekt istnieje tylko raz, ale odwołuje się do niego wiele drzew) Więc gdybym miał taki obiekt: class myObject { Mapuj<ciąg, obiekt> atrybuty; ... } A mapa ma jeden obiekt (który musi implementować `IComparable`) dla każdego łańcucha na liście kluczy używanych przez drzewo. Zaletą jest to, że mogę teraz wybrać ciąg jako mój klucz sortowania i szybko przeszukiwać moje drzewo w kolejności posortowanej na podstawie dowolnych atrybutów, które można sortować. Podobnie mogę przeprowadzić wyszukiwanie w drzewie na podstawie dowolnego z sortowalnych atrybutów w czasie O(log n). (Standardowe BST pozwoliłoby na to tylko z jednym kluczem sortowania.) Nazwałem swoje "MultiTree", ale sprawdziłem to i ma to inne znaczenie, które wydaje się być całkowicie niepowiązane. Ale nie mogę wymyślić dla niego lepszej nazwy. Czy ta struktura ma już ustaloną nazwę?


title: Jak obliczyć wykres spalania scrum, gdy projekty się nakładają?

text: W moim zespole mamy wiele projektów, zarówno krótkoterminowych, jak i długoterminowych. Zespół jest zobowiązany do dostarczenia tych projektów w różnych terminach, a wysiłek związany z ich dostarczeniem jest prowadzony równolegle z zespołem pracującym nad historiami dla więcej niż jednego projektu podczas każdego sprintu. Próbując obliczyć nasze wypalenie, nie jesteśmy pewni, co robić. Ponieważ zespół jest podzielony między projekty, prędkość może się radykalnie zmieniać z tygodnia na tydzień, ponieważ ludzie przemieszczają się do zadań najlepiej dopasowanych do ich specjalizacji w ramach projektów. Utrudnia to stworzenie wiarygodnego i znaczącego wykresu spalania dla każdego projektu. Jeśli jednak połączymy historie w jeden wykres, jak możemy śledzić wydanie, jeśli daty wydania są różne i nie jest oczywiste, które punkty pozostały dla każdego projektu. Czy istnieje dobra metoda radzenia sobie z tym?


title: Filtrowanie adresów IP na prawidłowej grupie użytkowników: czy powinniśmy uwzględnić adresy IP deweloperów?

text: Wyobraź sobie, że Twój zespół programistów został poproszony o opracowanie systemu. System powinien odpowiadać tylko niektórym określonym grupom użytkowników, takim jak „Grupa A”, „Grupa B” lub „Szef”, którzy są faktycznie użytkownikami systemu. Jeśli otrzymasz telefon od użytkownika z informacją, że system zawiesił się w określonej sytuacji/parametrach. Próbowałeś odtworzyć problem i odkryłeś, że Twój adres IP został odfiltrowany, ponieważ nie ma żadnych poprawnych grup użytkowników, które obejmują Ciebie/Twój zespół. Nie możesz nawet odtworzyć awarii i idziesz zapytać dzwoniącego, czy możesz pożyczyć jego komputer, aby natychmiast odtworzyć problem. Czy uważasz, że po tym konieczne byłoby dodanie nowej prawidłowej grupy, takiej jak „Programiści”?


title: Najbardziej wydajna instrukcja IF z wieloma warunkami

text: Używam funkcji do porównywania ponad 100 zmiennych wewnątrz klas i jestem ciekawy, czy jedna metoda porównywania wielu instrukcji warunkowych jest bardziej wydajna niż inna. Obecnie rozważam jedną z tych metod. Myślę, że „single If using And/Or” wygląda najczystsze, ale wydajność jest ważniejsza. (mój kod to VB.Net) Wiele ElseIf Jeśli nie ClassA.num = ClassB.num Then Return False ElseIf Not ClassA.str = ClassB.str Then Return False Else : Zwraca True End If Single Jeśli używasz i/lub If Not ClassA. num = ClassB.num Lub nie ClassA.str = ClassB.str Następnie zwróć False Else : Zwróć True End If Nested If If ClassA.num = ClassB.num Then If ClassA.str = ClassB.str Następnie zwróć True End If End If Return Fałszywa edycja: Zmieniono drugi fragment kodu z I na Lub Edycja 2: Zmieniono trzeci fragment kodu z Jeśli nie na Jeśli


title: Jak przechodzimy od montażu do kodu maszynowego (generowanie kodu)

text: Wiem, że to abstrakcja, ponieważ wszystko kręci się wokół sygnałów i przełącznika - (elektroniki) - pod spodem, ale czy istnieje łatwy sposób na wizualizację kroku między asemblacją kodu do kodu maszynowego. Na przykład, jeśli otworzysz plik binarny w notatniku, zobaczysz tekstowo sformatowaną reprezentację kodu maszynowego. Zakładam, że każdy bajt (symbol), który widzisz, jest odpowiednim znakiem ascii dla jego wartości binarnej? Wciąż jest jednak część układanki, której mi brakuje i nie potrafię nawet dokładnie wyjaśnić, co to jest. Widziałem kod źródłowy asemblera (napisany w C), który oczywiście wykorzystuje biblioteki C put, getc, write funkcje itp., aby faktycznie wygenerować kod maszynowy. Ale jak przejść od asemblera do binarnego, co się dzieje za kulisami? Mam na myśli, że C/C++ lub jakikolwiek inny język jest zasadniczo binarny sam w sobie, ponieważ składa się z wszystkich sygnałów i przełączników, naciśnięć klawiszy i myszy. Przypuszczam, że składanie to naprawdę organizowanie bajtów w strukturę logiczną dla sprzętu.


title: Ile studiują na najlepszych uczelniach w porównaniu z innymi uczelniami?

text: Na moim uniwersytecie całkowita wymagana tygodniowy udział (na wykładach i ćwiczeniach/podobnych) wynosi około 12 godzin. Tak było na pierwszym roku, a potem wszystko wymagało niezwykle małego wysiłku – uważam, że gdybym zainwestował tyle wysiłku, co ktoś, kto studiuje medycynę lub prawo, wszystkiego mógłbym się nauczyć przez 1-2 miesiące – jeśli nie mniej ! Teraz jestem na drugim roku i nie wygląda na to, żeby było inaczej. Martwi mnie to o ludzi, którzy studiują w Oxfordzie, Cambridge czy Imperial College. Byłoby dziwne, gdyby uczyli się tak mało i byłoby bardzo niepokojące, gdyby uczyli się bardzo ciężko, ponieważ oznaczałoby to, że pod koniec roku ich studenci pierwszego roku będą lepsi niż nasz przeciętny student trzeciego roku. Co jest dla mnie złą wiadomością, biorąc pod uwagę, że dzielę się z nimi rynkiem. Wiem, że na to pytanie nie ma absolutnie dokładnej odpowiedzi, ale nadal można na nie odpowiedzieć całkiem zdecydowanie i jest to istotne dla wielu osób.


title: Organizacja i struktura zasobów projektu w Cocos2d-X Development

text: Cocos2d-X to framework silnika gier oparty na Cocos2d-iPhone, który polega na rozszerzaniu obsługiwanych platform o wiele języków programowania, które mają tę samą strukturę API. Czym jest lepsza organizacja i struktura zasobów projektu w Cocos2d-X Development?


title: Używanie frameworka Hibernate Criteria do złożonych zapytań zamiast tworzenia widoków w DB

text: Lubię używać `Hibernacji` do zwykłych prostych operacji `CRUD`. Jednak staram się zrozumieć, dlaczego ktokolwiek miałby uciekać się do swojego frameworka „Criteria” do składania złożonych kryteriów zestawu rekordów, zamiast po prostu tworzyć widok na poziomie bazy danych. Np. oto parafrazujący fragment, z którym pracuję: Criteria tableCriteria = session .createCriteria(SomeEntity.class) .add(Restrictions.eq("someID", someID)) .add(Restrictions.gtProperty("scoreOne", "scoreTwo") ) .add(Restrictions.gt("scoreThree", scoreThreeMin)) .add(Restrictions.or(Restrictions.eq("nieaktywne", Boolean.FALSE), Restrictions.isNull("nieaktywne"))).addOrder(Zamówienie. asc("ordCol")) Z perspektywy nieuzbrojonego oka możliwe jest, ale czytelne, dostrzeżenie tego, co określa definicja filtra, niż po prostu tworzenie widoku DB, w którym te ograniczenia mogą być wyrażone w postaci prostszych klauzul `WHERE`. Czy czegoś mi brakuje? Czy istnieje korzyść z używania widoków Kryteria vs. DB, o których nie wiem? Korzystanie z widoków wydaje się znacznie czystsze. Czy Kryteria mają wyższą wydajność?


title: Jak ważna jest zaleta węzła polegająca na szkoleniu programistów tylko w jednym języku i przydzielaniu ich do zadań w stosie technologicznym?

text: Niedawno dołączyłem do startupu jako CTO/co-founder. Startup i ja zastanawialiśmy się nad przeniesieniem istniejącego kodu (który jest w PHP5.5, framework laravel) do node.js . Głównym powodem jest to, że na etapie, na którym się teraz znajdujemy, będę musiał zatrudnić utalentowanych, ale niedoświadczonych programistów i wyszkolić ich do pracy nad różnymi częściami projektu. JS jest już używany w bardzo dużej aplikacji Angular, a także będzie używany w aplikacji mobilnej (planujemy przejść na trasę przerwy w telefonie). API istnieje tylko w PHP. Osobiście mogę ponownie zaimplementować istniejące API w node.js w ciągu 3-6 tygodni optymistycznie (jestem pewien tego czasu, ponieważ sam zbudowałem backend laravel api) i mam całkiem dobre pojęcie o wymaganym zestawie funkcji. Poza tym jest to czas, na który startup może sobie pozwolić na tym etapie. Myślę, że posiadanie jednego języka w naszym stosie technologicznym może zwiększyć naszą zdolność do maksymalnego wykorzystania nowych programistów, którzy dołączają do firmy, ponieważ możemy ich szkolić tylko w JS i wykorzystywać ich umiejętności w całym stosie technologicznym, zapewniając im odpowiednie szkolenie przed wystawianie ich na nowy obszar stosu. Moje pytanie brzmi, jakie są korzyści ze szkolenia niedoświadczonych programistów w jednym stosie technologicznym? Czy moje założenia są prawidłowe na podstawie tej listy korzyści? Czy przystępne 3-6 tygodniowe zmiany stają się bardziej realistyczne, jeśli niedoświadczeni deweloperzy mogą skupić się na jednym stosie technologicznym?


Pracowałem z wieloma językami, które nie generują podpisu metody na podstawie typu zwracanego. Pracowałem też z jednym (może z kilkoma?), które to robią. Te, które nie sprawiały mi problemów w przeszłości (jak tutaj). Dlaczego języki programowania generują sygnatury metod bez względu na typ zwracany? Aktualizacja: mam na myśli konkretnie skompilowane języki statycznie typowane


title: Dobry sposób na udokumentowanie oprogramowania (produktu)?

text: Różni się od najszybszego sposobu dokumentowania architektury i projektowania oprogramowania. Chciałbym napisać podręcznik do mojego oprogramowania, który zawiera: 1. Korzystanie z wiersza poleceń 2. Poradniki/poradniki dotyczące korzystania z oprogramowania 3. Przykładowy kod do pisania wtyczek 4. Podręcznik funkcji i klas do pakietu sdk wtyczek Chciałbym zaznacz słowa do łączenia, abym mógł napisać „zobacz także FuncA, FuncB, itp.” z każdym func jako łączem. Być może przykładowy kod ma szerokość/czcionka o stałej szerokości i wcięcie, jak w wielu książkach. Jakiego oprogramowania/znaczników/formatu mogę użyć do wygenerowania instrukcji? Nie jestem pewien, jaki będzie format instrukcji, ale prawdopodobnie będzie to html, pdf lub oba. Bonus, jeśli jest to format tekstowy i dobrze współpracuje z kontrolą źródła (używam git), ale to nie ma znaczenia, ponieważ prawdopodobnie będę miał go poza kontrolą źródła.


title: czy PERT/CPM jest nadal używany?

text: Zastanawiam się, czy PERT/CPM jest nadal używany, czy może jest to starożytna metodologia dla dzisiejszego świata? Dziękuję.


title: Jak powinienem nazwać te metody?

text: Mam dwa interfejsy, jeden z parametrami typu ogólnego i jeden bez parametrów. Interfejs nieogólny jest używany wewnętrznie, dzięki czemu mogę przechowywać instancje interfejsu generycznego w kolekcji. Wszystko byłoby dobrze, z wyjątkiem faktu, że C# nie generuje sygnatur metod na podstawie zwracanego typu. W każdym interfejsie mam metodę o nazwie GetItems. Jeden zwraca IList, a drugi IList<T>. Ponieważ nie mogę nadać im obu tego samego imienia, muszę wymyślić dwie różne nazwy, które oddają to, co robią. Oto interfejsy: public interface IBatchProcessingStorage { void Enqueue(object o); void Enqueue(IEnumerowalne elementy); void Dequeue(obiekt o); void Dequeue(IEnumerowalne elementy); IList GetItems(int maxItems); } interfejs publiczny IBatchProcessingStorage<T> : IBatchProcessingStorage { void Enqueue(T item); void Enqueue(IEnumerable<T> element); void Dequeue (pozycja T); void Dequeue(IEnumerable<T> element); IList<T> GetItems(int maxItems); } Istnieje zadanie, które jest uruchamiane co jakiś czas, które pobiera elementy z magazynu przetwarzania wsadowego, przekazuje je do zasobu zewnętrznego, a jeśli są przetwarzane przez zasób zewnętrzny, są usuwane z magazynu. Zadanie wymaga nieogólnego interfejsu, to jedyny powód, dla którego istnieje. Utworzyłem klasę abstrakcyjną, która implementuje oba i przekierowuje wywołania w interfejsie niegenerycznym do ogólnych, a te ogólne są abstrakcyjne, takie jak: public abstract class BatchProcessingStorage<T> : IBatchProcessingStorage<T> , IBatchProcessingStorage { void IBatchProcessingStorage .W kolejce(obiekt o) { W kolejce((T)o); } void IBatchProcessingStorage.Enqueue(IEnumerable items) { Enqueue((IEnumerable<T>)items); } void IBatchProcessingStorage.Dequeue(obiekt o) { Dequeue((T)o); } void IBatchProcessingStorage.Dequeue(IEnumerable items) { Dequeue((IEnumerable<T>)items); } IList IBatchProcessingStorage.GetItems(int maxItems) { return this.GetItems(maxItems).ToArray(); } public abstract void Enqueue(T item); public abstract void Enqueue(IEnumerable<T> item); public abstract void Dequeue(T item); public abstract void Dequeue(IEnumerable<T> item); public abstract IList<T> GetItems(int maxItems); } To ma być klasa, z której będą dziedziczyć klienci, ale nie zamierzam wymuszać ich w naszej hierarchii dziedziczenia. Może więc będą musieli zaimplementować oba interfejsy. To jest powód mojej wielkiej troski o nazwiska. Nie chcę, aby nasz interfejs API miał nazwy metod. Jak więc powinienem nazwać GetItems w każdej klasie, która przekazuje znaczenie, nie wyglądając na to, że pracuję nad ograniczeniami językowymi? ## Aktualizacja: Dla tych z Was, którzy uważają, że przesadzam z analizą tego: W ciągu ostatnich 5 lat nauczyliśmy się wiele o naszym publicznym API. Mam jedną szansę, aby ten nowy był dobry. Potem utknęliśmy z tym, co zostało wydane. To nie jest przeciętna aplikacja wewnętrzna. Jest to platforma programowa, która jest bardzo rozszerzalna. Używają go jedne z najbardziej znanych firm na świecie. Będzie im bardzo trudno uczciwie wejść na scenę na naszych konferencjach i zachwalać przydatność naszej platformy oprogramowania, jeśli ma kiepskie API. Nie jest to zbyt skomplikowane ani zbyt abstrakcyjne. Został zaprojektowany z myślą o zaspokojeniu konkretnych potrzeb biznesowych. Nasi klienci będą tego potrzebować, a jeszcze lepiej, już robią to za pomocą bardzo źle nazwanego i nadmiernie złożonego interfejsu API, który sprawia, że możesz przeskakiwać przez obręcze, aby załatwić sprawy (z perspektywy czasu to zawsze 20/20).


title: Jak początkujący z pogranicza może wskoczyć do open source?

text: Ze wszystkimi dostępnymi opcjami i projektami, zwłaszcza rozmiarem większości z nich, Open Source może być dość zniechęcający dla nowicjusza. Moje pytanie brzmi, jak mogę zacząć pomagać i uczyć się z oprogramowania open source? Gdzie zaczynam? Które pliki czytam najpierw? Jakieś rady, które pomogą programiście powyżej poziomu początkującego zacząć wnosić wkład?


title: Czas pracy operatora Modulo

text: Czytam arkusz przeglądu dla klasy, a instruktor powiedział to o operatorze modulo: Pamiętaj, że modulus (%) ma czas działania O((logn)^2). Kontynuował wyświetlanie tego fragmentu kodu: //Zakładamy n > 1 public boolean isPrime2 (int n) { int sqrtN = (int) Math. sqrt (n) ; for(int i = 2; i < sqrtN + 1; i++) { if (n % i == 0) return false; } zwróć prawdę; } Powiedział o tym kodzie: O(n) = sqrt(n) x n^2. Jak widać, ta metoda sprawdzania, czy liczba jest liczbą pierwszą, iteruje tylko od 2 do sqrt(n). Ponieważ wykonujemy pętlę przez kwadratową operację sqrt(n) razy, środowisko wykonawcze to O(sqrt(n)). Dwie rzeczy, których nie rozumiem. Po pierwsze, dlaczego wewnątrz pętli for jest teraz operacją n^2, a nie operacją (logn)^2. Po drugie, nawet jeśli jest to tylko operacja n^2, czy całkowity czas działania nie powinien wynosić O(n)?


title: Czy programowanie przed ekranem projektora działa?

text: Zastanawiam się, czy przebywanie przed bardzo dużym ekranem (powiedzmy 106" zamiast zwykłego podwójnego 22"), z odpowiednią odległością, ma jakikolwiek pozytywny wpływ na warunki pracy. Myślę o sprawie, w której jesteś w domu. Będziesz musiał przenieść swoje biuro do dużego magazynu, jeśli pozwolisz na to wszystkim swoim pracownikom :)


title: Jak mogę użyć przepływu pracy systemu Windows do walidacji aplikacji Silverlight?

text: Chcę użyć przepływu pracy systemu Windows do świadczenia usługi sprawdzania poprawności. Weryfikacja, która zostanie dostarczona, może mieć wiele poziomów z łączeniem w łańcuchy i przekierowaniami do innych etapów walidacji. Aplikacja, która wygeneruje dane do walidacji, to aplikacja Silverlight. Wyobrażam sobie, że walidacja potrwa dłużej niż mgnienie oka, więc nie chcę wiązać użytkownika. Zamiast tego chciałbym, aby użytkownik przesyłał aktualne dane do walidacji. Jeśli weryfikacja nastąpi szybko, usługa wykona asynchroniczne wywołanie zwrotne do aplikacji. Model widoku, który wykonał wywołanie, odbierze dane wyjściowe walidacji i opublikuje je w widoku. Jeśli weryfikacja zajmuje dużo czasu, użytkownik może przejść do przodu w aplikacji Silverlight, pomijając potencjalne dane wyjściowe weryfikacji. Model, który wykonał telefon, zniknąłby. Spodziewam się, że istniałby inny model widoku, który zawierałby bieżące dane wyjściowe walidacji w swoim modelu. Wartość walidacji zmieniłaby się, powodując, że użytkownik otrzymywałby powiadomienie w mniejszym obszarze powiadomień. Widzę, jak viewmodel bieżącego widoku wywołałby walidację za pomocą viewmodelu, który zawiera dane wyjściowe walidacji, ale obawiam się, że wygaśnie limit czasu wywołania usługi. Myślę też, że użytkownik mógł już zmienić wartości z oryginalnej walidacji, unieważniając informację zwrotną. Jestem pewien, że asynchroniczna walidacja jest problemem rozwiązywanym wielokrotnie, chcę skorzystać z twojego doświadczenia w rozwiązywaniu tego rodzaju problemów. Czy to właściwe podejście do problemu, czy może istnieje lepszy sposób podejścia do tego?


title: Jak prawidłowo projektować zajęcia (wysyłanie wiadomości)

text: Próbując zaprojektować mały projekt we właściwy sposób i mieć z nim problem:\ o zadaniu: trzeba wykonać mnożenie dużych liczb za pomocą fft Najpierw mam klasy class LargeNumber{}; klasa Pole{}; -- abstrakcyjne (może interfejs byłby lepszy) class C_C:public virtual Field{}; klasa Z_p:publiczne pole wirtualne{}; Tak więc LargeNumber może używać klas Z_P(modulo P) lub C_C(complex) (bardziej poprawne: C_C i Z_P mają funkcje Mul i Sum do mnożenia obiektów LargeNumber), ale inne zadanie jest bardziej interesujące i trudniejsze. Muszę obliczyć wszystkie operacje i czas trwania każdej „dużej” operacji. A także trzeba rzucać wiadomości i tworzyć logi. Jak rozwiązać ten problem? ( co powinienem zrobić? ) Również będzie świetnie, jeśli skomentujesz wzorce i najlepsze praktyki. i tak oto klasy: class LargeNumber { private: int length; wektor <short int> liczba; public: //prototype LargeNumber clone(){ return (*to); } //pobierz int Length() const; wektor <short int> Number()const; //static static LargeNumber& GenerateOne(int);// utwórz nowy statyczny LargeNumber void Print(const LargeNumber& print); //konstruktory LargeNumber(); LargeNumber(const LargeNumber& obj); jawna DużaLiczba(int len); jawny LargeNumber (wektor <short int>); DużaLiczba(int,int); //destruktory ~DużaLiczba(); nieważne Zabij(); //operatory LargeNumber& operator= (const LargeNumber& ); Operator&wielkiej liczby--(); Operator&wielkiej liczby++(); operator logiczny<(const LargeNumber&)const; }; class Pole { private: inline int max(const int a, const int b){return (a>b?a:b);} inline int min(const int a, const int b){return (a<b?a :b);} wewn i; //potrzebujesz Mod i 2**P-1 LargeNumber& Deux (const int ); Duża liczba i mod (duża liczba;); publiczne: wirtualne ~Pole(); virtual LargeNumber& Sum (const LargeNumber& , const LargeNumber& ); wirtualny LargeNumber& Sub (const LargeNumber& , const LargeNumber& ); virtual LargeNumber& Mul (const LargeNumber& , const LargeNumber& ); virtual LargeNumber& Pow (const LargeNumber& , const LargeNumber& ); wirtualny bool Prime (LargeNumber& ); };


title: Jak mogę dostać się do biblioteki graficznej C++?

text: Programuję do tej pory od roku i znam 2 języki: C i C++. Omówiłem podstawy, napisałem funkcjonalne programy dla systemu Windows i napisałem skomplikowane fragmenty kodu. Kiedy używałem Turbo C do nauki języka C, zauważyłem bibliotekę o nazwie "Graphics.h". Sprawdziłem to i otrzymałem niesamowite przykłady manipulacji grafiką. Moje pytanie jest proste. Jak rozpocząć naukę grafiki w C++? Czy jest dobry samouczek, który to wszystko obejmuje?


title: Jakie techniki projektowania i planowania są najbardziej odpowiednie dla indywidualnych projektów?

text: Tego lata chciałbym stworzyć kilka aplikacji, wszystkie stosunkowo małe, ale ryzykowne - są złożone, nie mam doświadczenia -. Będę pracować na własną rękę, ponieważ moi koledzy z klasy lub inni informatycy, których znam, naprawdę nie interesują się programowaniem (przysięgam!). Oprócz robienia dobrego kodu, chciałbym wszystko poprawnie analizować, projektować i planować. Prawdopodobnie zastosowanie standardowych metodologii byłoby przesadą w przypadku jednoosobowego projektu, czyż nie? Jakiego cyklu życia i diagramów powinienem użyć? Na studiach uczono mnie bardzo powierzchownego podejścia do inżynierii oprogramowania.


title: Próba oceny odpowiedzi udzielonych przez szkołę technologii online

text: Rozważałem wzięcie udziału w kursach programowania związanych z Internetem w szkole technologii online (najlepiej byłoby nie wymieniać nazwisk). Kiedy przeczytałem programy nauczania różnych kursów na ich stronie internetowej (które obejmowały kursy HTML, JS, PHP, Perl, administrator DB i administrator systemu Unix/Linux), byłem trochę zaniepokojony, że niektóre treści i opisy brzmiały jak nieco przestarzały. Wysłałem e-mailem moje obawy do ich przedstawiciela, który szybko odpowiedział. Mam nadzieję, że nie jestem poza zakresem tego forum, ale na podstawie odpowiedzi przedstawiciela (poniżej), mam dwa pytania, na które myślę, że tylko doświadczeni programiści mogą odpowiedzieć: * Czy przedstawiciel ma dobry punkt, gdy mówi, że nauczanie wcześniej wersje technologii są uzasadnione, ponieważ „większość ludzi/stron/firm nie zmienia się szybko”? * Czy istnieje coś takiego jak PHP w stylu SQL? (Nic na ten temat nie mogłem znaleźć) _Dyskusja z przedstawicielem:_ Cześć, zastanawiam się, ile wysiłku wkłada się, aby te kursy były aktualne? Technologie komputerowe i najlepsze praktyki zmieniają się dość szybko i oczywiście chciałbym brać udział w kursach opartych na obecnych standardach. > Tak, masz rację, że technologia i praktyki zmieniają się szybko, > większość ludzi/stron/firm nie zmienia się szybko. Najczęściej systemy są > kilka wersji za aktualnymi aktualizacjami. Nasze kursy są aktualizowane > na ile to możliwe. Jednak uważamy, że wcześniejsze wersje są nadal w użyciu i stanowią dobrą podstawę dla większości systemów. Na przykład, czy Twój certyfikat programowania internetowego jest bardziej oparty na HTML 4 czy HTML 5? > Wciąż uczymy HTML/CSS sprzed 5 lat. Obecnie jesteśmy w trakcie > tworzenia nowego kursu HTML/CSS dla nowszej technologii, jednak > nie jest on jeszcze dostępny. Czy uczysz PHP w stylu obiektowym? > Uczymy PHP w stylu SQL. Mam nadzieję, że to odpowiada na twoje obawy. > Jeśli nie, prosimy o kontakt z bardziej szczegółowymi pytaniami. >> Życzę wszystkiego najlepszego,