title: Jak bardzo nowy programista powinien być zainteresowany różnymi licencjami (GPL, Apache itp.)

text: Jestem całkiem nowy w programowaniu i właśnie zacząłem używać GitHub do przechowywania i przechowywania mojego kodu źródłowego (ciągle tracę rzeczy przechowywane lokalnie). W tej chwili wszystko, co tam jest, to pliki kodu źródłowego, nic więcej, ale spodziewam się, że to się zmieni w miarę upływu czasu i będę w tym coraz lepszy. Biorąc pod uwagę, że wszystkie repozytoria na darmowych kontach są publiczne, jak bardzo muszę się martwić o licencjonowanie? Czy wystarczyłoby pobranie kopii GPL, umieszczenie informacji o prawach autorskich w pliku Readme i nazwanie tego dniem? Jestem w pełni świadomy, że ludzie mogą pobierać i modyfikować moje rzeczy i nie przeszkadza mi to, ale przynajmniej chcę mieć pewność, że otrzymam uznanie za moją pracę, jeśli zdecydują się to zrobić.


title: Poprawa szybkości pisania kodu w C#

text: Śmiej się, jeśli chcesz, ale kiedyś tworzyłem znaczące aplikacje biznesowe w VB6, na długo przed pojawieniem się frameworka .NET. Dlaczego, kiedy byłem w twoim wieku, szliśmy dwie mile w śniegu, pod górę. W obie strony... Uwielbiam to lub nienawidzę, VB6 miało wrażenie REPL i bardzo szybki cykl rozwojowy. Chciałbym wiedzieć, jak zbliżyć się do tego procesu w C#. W VB6 mógłbym napisać funkcję, wykonać ją, debugować i mieć ją w pełni funkcjonalną w kilka minut. Powiedziano mi, że tak działa tłum Lispów. To bardzo szybki styl programowania. W C# piszę funkcję, potem piszę test jednostkowy dla tej funkcji (co jest OK, rozumiem wartość tego), potem klikam prawym przyciskiem myszy, uruchamiam test, czekam na skompilowanie projektu (trwa to ok. 10 sekund dobrze teraz, co byłoby wiecznością dla pętli REPL) i uzyskaj wyjątek. Szczerze mówiąc, bardziej przypomina to moje czasy w college'u, kiedy wkładałem karty dziurkowane do zasobnika i czekałem na wydruk (tylko nieznacznie przesadzam, aby uzyskać efekt). Dodatkowo, moją tendencją w dzisiejszych czasach jest upublicznianie wszystkiego podczas testowania. Testowanie jednostkowe z prywatnymi akcesorami działa dobrze, ale nie możesz prześledzić kodu (chyba że robię coś złego), gdy ich używasz. Chciałbym więc wiedzieć, jakie poprawki wprowadziliście do swojego procesu rozwoju w C#, aby go usprawnić i umożliwić bardzo szybkie pisanie i weryfikację kodu?


title: Tworzenie stron internetowych dla osób, które zajmują się głównie stroną klienta

text: Okay, jestem pewien, że wielu z nas ma duże doświadczenie w tworzeniu c++/opengl/objective C na iPhonie, java na Androidzie, gry w pythona itp. (wszelkie rzeczy po stronie klienta), jednocześnie mając niewielkie lub żadne doświadczenie w rozwój sieciowy. Więc jakich umiejętności należy się nauczyć, aby móc pracować nad projektami internetowymi, powiedzmy, aby stworzyć klona Facebooka (ja dzieciak) lub może startup, który specjalizuje się w łączeniu przypadkowych fashionistek ze zdjęciami itp. Właściwie mam pewne doświadczenie z Jakiś czas temu programowanie back-endu C#/VB.net, ale jako część zespołu, miałem duże wsparcie ze strony starszych programistów. Czy C# jest uważany za przyzwoity język do tworzenia stron internetowych?


title: Pytanie dotyczące konwencji kodowania o duplikat definicji zmiennej AS3

text: AS3 ma pewne niezręczne zasady dotyczące zakresu zmiennego, ze względu na użycie podnoszenia. Nie lubię bezsensownie zostawiać wielu ostrzeżeń kompilatora, ale ważniejsze jest dla mnie, aby mój kod był czytelny i poprawnie napisany, niezależnie od tego. Daje to kilka zduplikowanych ostrzeżeń definicji zmiennej: private function scheduleElementsLine(pElementSize:Dimensions):void { if (m_eOrientation == HORIZONTAL) { for (var i:uint = 0; i < target.numElements; i++) { var layoutElement: ILayoutElement = target.getElementAt(i); layoutElement.setLayoutBoundsSize(pElementSize.x, pElementSize.y); layoutElement.setLayoutBoundsPosition(PElementSize.x * i, 0); } } else { for (var i:uint = 0; i < target.numElements; i++) { var layoutElement:ILayoutElement = target.getElementAt(i); layoutElement.setLayoutBoundsSize(pElementSize.x, pElementSize.y); layoutElement.setLayoutBoundsPosition(0, pElementSize.y * i); } } } Czy ogólnie uważa się, że lepsze i bardziej konwencjonalne jest usunięcie zbędnych składni `var` i `:<type>` dla i oraz layoutElement w drugiej pętli for, czy też bardziej właściwe jest pozostawienie ich tam ( ze względu na sposób, w jaki ich użycie jest izolowane od tych dwóch pętli for)? Dziękuję!


title: Wielowątkowy serwer Java UDP

text: Mam wiele wątków. Każdy wątek odbiera dane i wysyła do klienta pakiet potwierdzenia. Każdy wątek zajmuje około. 531ms od początku do końca. Podczas przechwytywania pakietów za pomocą Wiresharka. Spodziewałem się zobaczyć mniej niż 1 sekundę odstępu między odebraniem pakietu a wysłaniem pakietu. Problem polega na tym, że widzę pakiety z innej komunikacji między innymi urządzeniami, które komunikują się z tym samym gniazdem, ale z innym wirtualnym numerem gniazda. Z powodu tej komunikacji pomiędzy, odstęp między odbiorem i wysłaniem pakietu wynosi około 15 sekund. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/SfqCj.png) [16:44:18]No.1073 - gdy urządzenie łączy się z serwerem na porcie 7300 i wysyła dane [16:44 :27]No.7535 - po wysłaniu potwierdzenia do urządzenia, który upłynął czas = 9 sekund. W ciągu tych 9 sekund widzę w Wireshark inną komunikację z innymi urządzeniami. Zmierzyłem czas kodu wątku, który odczytuje i wysyła potwierdzenie i zajmuje to mniej niż jedną sekundę. Dlaczego zajmuje to 9 sekund, a nie tylko czas kodu wątku (milisekundy)? Inne wątki mają wpływ w tym czasie?


title: Konwencja nazewnictwa metod rozszerzeń

text: W naszej firmie stosujemy metody użytkowe, aby uprościć programowanie. Mamy więc następujące rozszerzenie ciągu: public static bool IsNoE(this string s) { return string.IsNullOrEmpty(s); } To tylko dla wygody i intencją tego pytania nie jest omawianie sensu lub bezsensu takich metod (utrzymanie, ...). Pytanie dotyczy nazewnictwa. Niektórzy uważają, że metoda powinna być nazwana w ten sposób: public static bool IsNullOrEmpty(this string s) { return string.IsNullOrEmpty(s); } Argumentem przemawiającym za pierwszym nazewnictwem jest: * Nie ma sensu robić rozszerzeń, jeśli nie są one krótsze do napisania. Argumentem przemawiającym za drugim nazewnictwem jest: * Jedynym powodem dodawania takich rozszerzeń jest po prostu obsługa przepływu programowania. (Pisanie zmiennej, a następnie ustawianie kursora z powrotem na początek, aby otoczyć zmienną `string.IsNull`) Dlaczego więc miałbym preferować jedną wersję od drugiej? Czy są jakieś konwencje nazewnictwa, do których możemy się odwołać?


title: Android Design — usługa a wątek dla sieci

text: W końcu piszę aplikację na Androida (tak, ja) i do tej aplikacji potrzebuję trwałych, ale zamykanych przez użytkownika gniazd sieciowych (tak, więcej niż jedno). Postanowiłem spróbować swoich sił w napisaniu własnej wersji klienta IRC. Moim problemem projektowym jest jednak to, że nie jestem pewien, jak uruchomić samą łączność z gniazdem. Jeśli ustawię gniazda na poziomie Aktywności, zamykają się one wkrótce po tym, jak Aktywność stanie się niewidoczna (również problem, który wymaga rozwiązania ... ale myślę, że to rozgryzłem) ... ale jeśli uruchomię " usługa łączności”, muszę się dowiedzieć, czy mogę mieć uruchomionych wiele wystąpień tej usługi (usługa, czyli… jedna na serwer/gniazdo). Albo to, albo potrzebuję sposobu na wątkowanie samych gniazd i uruchamianie wielu wątków, z którymi nadal mogę się komunikować bezpośrednio (jakiś system ID). Stąd pytanie: Czy „lepszym” lub przynajmniej bardziej „właściwym” wzorcem projektowym jest umieszczenie gniazda i sieci w usłudze, a działania zużywają tę usługę… czy też powinienem powiązać gniazda bezpośrednio z niektórymi Proces wątkowy należący do działania interfejsu użytkownika i w ogóle nie przejmuje się implementacją usługi? Wiem, że lepiej nie umieszczać sieci bezpośrednio w wątku interfejsu użytkownika, ale to tak daleko, jak udało mi się uzyskać.


title: Prawo Demeter w MVC dotyczące komunikacji Kontroler-Widok

text: Scenariusz: Posiadanie kontrolera kontrolującego widok złożony ze złożonych widoków podrzędnych. Każdy z tych podwidoków jest osobną klasą w osobnym pliku. Na przykład jeden z tych widoków podrzędnych nazywa się ButtonsView i ma kilka przycisków. Kontroler musi mieć dostęp do tych przycisków. Czy dostęp do tych przycisków wyglądałby tak: controllerMainView.buttonsView.firstButton.state(); być naruszeniem LOD? Z jednej strony może być tak, ponieważ kontroler uzyskuje dostęp do wewnętrznej hierarchii widoku. Z drugiej strony Kontroler powinien być świadomy tego, co dzieje się w widoku i jak jest skomponowany. jakieś pomysły?


title: Kiedy można pisać własne narzędzia programistyczne? (edytor do IDE)

text: Dlatego do kodowania używam przede wszystkim edytora tekstu. To bardzo prosty edytor; zapewnia głównie podświetlanie składni. Ale w rzadkich przypadkach muszę też coś debugować. I wtedy muszę uciec się do IDE (głównie Netbeans, ale mam kłopotliwe Eclipse/Aptana działające jako drugi awaryjny). Jednak do ogólnego użytku IDE _czuje_ nie działać dla mnie. Jest to rzecz wizualna, używana do konsoli interfejsów użytkownika itp. Przełączanie się między edytorem tekstu a IDE jest również nieco kłopotliwe. Dlatego rozważam rozszerzenie edytora, nie tak naprawdę do pełnoprawnego IDE - ale przynajmniej zintegrowanie funkcji debugowania. Ponieważ pracuję nad PHP, wydaje się, że nie jest to zbyt duży wysiłek. DBGp pozwala na wyeksponowanie obsługi debugowania z edytora, więc to tylko drobna integracja i wymyślenie, jak umieścić w edytorze funkcję punktu przerwania (`joe` btw). I chociaż mam na to czas, zastanawiam się, czy naprawdę warto. * W tym przypadku nie jest to potrzebne narzędzie programistyczne. To tylko dla wygody. * A powodem tego jest po prostu _nielubienie_ istniejącego rozwiązania. * Chociaż z czasem będę mógł rozszerzyć i dostosować ten debugger, początkowo będzie to tak samo przypadkowe jak Eclipse. Nieuchronnie zaczyna się jako słabe narzędzie programistyczne. * Ponadto prawdopodobnie nie będzie zbyt wiele ponownego wykorzystania. (Ok, to nie jest ważny punkt. Większość takiego oprogramowania istnieje bez wielu przypadków użycia. I oczywiście, podobne rozszerzenia już istnieją dla emacs i vim, więc nie może to być całkowicie bezcelowe.) Ale co jest ogólną wskazówką przy próbach opracować niestandardowe narzędzia programistyczne, zwłaszcza jeśli nie są one naprawdę potrzebne, ale spełniają osobiste preferencje? (Poprawa użyteczności nie jest pewna.)


title: Po co zawracać sobie głowę rozróżnianiem wymagań funkcjonalnych i niefunkcjonalnych?

text: Rozumiem różnicę między nimi, ale moi koledzy pytają mnie o korzyści wynikające z oznaczania wymagań jako funkcjonalnych lub niefunkcjonalnych (lub przejściowych). Po co się tym zawracać? Spędził to, co powiedział, na przeglądaniu listy wymagań dla jednego projektu i nie widział w tym żadnych korzyści, ponieważ efektem końcowym było przesłanie dokumentu do innego podmiotu gospodarczego z dekretem „Zrób to wszystko”. Obawiam się, że wymagania zebrane w jednym dokumencie. Próbowałem wyjaśnić korzyści w praktyce, ale nie mogłem tego sprzedać. Jak sprzedać korzyści z udokumentowania, które wymagania są funkcjonalne, a które nie.


title: Najlepszy/najskuteczniejszy sposób na naukę języka programowania jako początkujący

text: Jestem studentem i odbyłem roczny staż w firmie, która rozwija system e-commerce w C#, HTML, WPF, javascript, ASP i innych. Chociaż mam trochę wiedzy, przypisuje mi się wiele zadań, które są poza mną i nawet kiedy proszę o pomoc, odpowiedź, którą otrzymuję, jest dla mnie często zagadkowa. Wpatruję się w jak najwięcej kodu, aby po prostu spróbować _"wrzucić się w to"_, ale często po prostu gubię się w kodzie. Lubię uważać się za szybkiego ucznia i jestem cholernie zdeterminowany, aby być dobrym programistą. Chciałbym tylko zapytać, czy są dla mnie jakieś wskazówki, aby jak najszybciej nadrobić zaległości? Nie chcę być uciążliwy i siedzieć tutaj i prosić o pomoc 24/7. Po prostu chcę się rozerwać!


title: Obliczanie współczynnika skupienia ostatniego sprintu

text: Zakończyliśmy nasz sprint w połowie oczekiwanego czasu, a teraz chcemy obliczyć nasz współczynnik skupienia do wykorzystania w następnym sprincie. Chociaż, wykonując matematykę według książki, otrzymujemy okropną liczbę. Jak my to obliczamy? Proszę spojrzeć poniżej: * Skład zespołu: 3 * Długość sprintu: 2 tygodnie * Dostępność zespołu: 28 dni (zdyskontowani członkowie zespołu współdzieleni z innymi zespołami) * Szacowany współczynnik skupienia: 70% * Szacowana prędkość: 19 idealnych dni (pochodzi z: 28 dni * 0,7 współczynnika skupienia) * Rzeczywista prędkość: 9,8 dni (ukończyliśmy cały Sprint w połowie oczekiwanego czasu, wyraźnie zawyżone), co daje nam współczynnik skupienia... * Faktyczny współczynnik skupienia (do wykorzystania w następnym Sprincie ): 35% (9,8 rzeczywista prędkość / 28 dostępnych osobodni) Zgodnie ze Scrumem i XP Z Okopów obliczamy Focus Factor jako „(rzeczywista prędkość) / (dostępne osobodni)”. Jednak kończąc sprint w połowie czasu i wykonując obliczenia, uzyskujemy współczynnik skupienia wynoszący 35%! Co robimy źle?


title: Testuj dublety, mocki i stuby - kiedy nie używać i dlaczego, dla Rubiego, Rspec

text: Nauczyłem się o wyśmiewaniu i stubbingu i widziałem, jak mogą mi pomóc w tworzeniu świetnych zestawów testowych, które działają oślepiająco szybko, a tym samym znacznie przyspieszają mój proces rozwoju. Jednak widziałem również minusy, gdy występuje problem, który jest skoncentrowany na bazie danych i nie był testowany (test podwaja się lub nie). Czy powinienem więc mieć podzbiór testów, które testują przynajmniej taką łączność i kilka prostych operacji, na przykład tworzenie rekordu w podstawowej tabeli szczegółów transakcji, nawet jeśli większość kluczy obcych jest odcięta? Jakie doświadczenia znaleźli ludzie z tym problemem i jaka równowaga działała w różnych sytuacjach? Zwykle publikuję na Stack Overflow, ale wydawało się to znacznie bardziej koncepcyjne. To wciąż może być nieco subiektywne, więc może pytanie można poprawić. Najbliższe podobne pytanie, jakie udało mi się znaleźć, brzmiało: Kiedy należy używać pozorowanych obiektów? ale wydawało się, że to nie to samo pytanie, a odpowiedzi wydawały się dalsze. Być może moje pytanie dotyczy bardziej tego, kiedy NIE kpić. ...tak, więc zaktualizowałem tytuł. Pomogło mi również: TDD: Wyśmiewanie ściśle powiązanych obiektów


title: WCF połączenie Entity Framework

text: Mam ponad 100 użytkowników w aplikacji Silverlight, która używa struktury WCF i encji. Każdy ma swoją bazę danych i tu pojawia się mój problem. Jak mogę się upewnić, że tylko użytkownik uzyskuje dostęp do swojej bazy danych za pośrednictwem WCF. Czy muszę wysyłać ciąg połączeń za każdym razem, gdy dzwonię do usługi, czy?


title: Różnica między podejściem przyrostowym a iteracyjnym

text: Podejście przyrostowe to metoda tworzenia oprogramowania, w której model jest projektowany, wdrażany i testowany przyrostowo (za każdym razem jest dodawane trochę więcej) aż do ukończenia produktu. Obejmuje zarówno rozwój, jak i utrzymanie. Produkt jest zdefiniowany jako gotowy, gdy spełnia wszystkie jego wymagania. Projektowanie iteracyjne to metodologia projektowania oparta na cyklicznym procesie prototypowania, testowania, analizowania i udoskonalania produktu lub procesu. Na podstawie wyników testów najnowszej iteracji projektu wprowadzane są zmiany i udoskonalenia. Proces ten ma na celu docelową poprawę jakości i funkcjonalności projektu. W projektowaniu iteracyjnym interakcja z zaprojektowanym systemem jest wykorzystywana jako forma badań informowania i rozwijania projektu, w miarę wdrażania kolejnych wersji lub iteracji projektu. Wygląda na to, że obie metody polegają na stworzeniu części systemu, dopracowaniu jej, aby przejść wszystkie przypadki testowe, dodaniu kolejnego komponentu systemu i ponownym dopracowaniu, które są powtarzane, aż system zostanie ukończony. Jaka jest rzeczywista różnica między tymi dwoma sposobami projektowania oprogramowania Jak można połączyć te dwie metody w celu stworzenia iteracyjnego i przyrostowego podejścia do projektowania


title: Rozmiar obiektów podczas dziedziczenia wielopoziomowego

text: Poniżej znajduje się pseudodeklaracja dziedziczenia wielopoziomowego. Klasa bazowa ( chronione dane int) pochodna1 : wirtualna baza publiczna ( chronione dane int1 ) pochodna2 : wirtualna baza publiczna (chronione dane int2) pochodna3 : pochodna1,pochodna2 (prywatne dane int3 ) Main(){ baza b; pochodna1 d1; pochodna2 d2; pochodna3 d3; } sizeof(b) // 4 co jest poprawne tylko jako int (4bytes) sizeof(d1) // 12 dlaczego nie 8 -> 4(base) + 4(derived) sizeof(d2) // ??? cokolwiek dotyczy powyższego, powinno mieć zastosowanie tutaj sizeof(d3) // 24 dlaczego nie 12 -> 4(podstawa) + 4(pochodne1/pochodne2) + 4(d3). Czy rozmiar obejmuje również wirtualne stoły. Ponownie tutaj nie może być wirtualnej tabeli, ponieważ nie zdefiniowano żadnej funkcji wirtualnej. Proszę o pomoc w wyjaśnieniu moich wątpliwości. PS: Co do tej pory zrozumiałem: > O ile funkcja nie jest zadeklarowana jako wirtualna w klasie bazowej, > > > base *bptr; > pochodna d; > bptr = &d; > bptr->zabawa(); // wywoła funkcję klasy bazowej. > > > Ale jeśli fun() jest zadeklarowane jako wirtualne, to powyższy kod wywoła > class fun().


title: <!-- open --> Dlaczego tak wielu programistów robi to w swoim kodzie HTML? <!-- /zamknij -->

text:
  <form action="thankyou.php" method="POST">  </form>

   Prawie rozumiem `<!-- /wrapper -->` na końcu, ponieważ jest tak daleko od początku tagu/pary... ale poważnie, jaki jest sens otwierających wierszy komentarza? Nie zadałbym tego pytania, gdybym nie widział tego _cały czas_. Czuję, że czegoś mi brakuje. Może w grę wchodzi jakaś niepisana najlepsza praktyka, chociaż nie rozumiem, co to może być. Bardziej niż prawdopodobne jest to po prostu zachowanie obsesyjno-kompulsywne. Jak zwykle komentujecie swoje znaczniki, jeśli w ogóle?


title: Potrzebuję pomocy przy wyborze pomiędzy silverlight/silverlight out-of-browser/wpf

text: Jestem w początkowej fazie planowania projektu ponownego pisania i decyduję między silverlight/silverlight oob/wpf. TL; DR na końcu. Jest to aplikacja LOB, która obsługuje kalendarze leadów/klientów/spotkań. Niezbyt skomplikowane. Niezależnie badam te opcje gdzie indziej, ale pomyślałem, że zapytam. Niektóre wstępne wymagania/możliwe do przewidzenia problemy to: Muszę być w stanie wywołać plik exe w systemie z argumentami wiersza poleceń (telefon SIP). > Sprawia, że SL jest problemem Baza użytkowników jest rozproszona i chcę jak najbardziej ograniczyć ruch, który przechodzi przez przewód i uniknąć niektórych nieprzyjemnych problemów ze współbieżnością > Widzę, że jest to problem przy wdrażaniu/aktualizowaniu oprogramowania WPF musi być _martwe_ . Niektórzy użytkownicy są bardzo nietechniczni (patrz: 70 lat, po raz pierwszy na komputerze) > To nie jest duży problem teraz z aplikacją ClickOnce, którą zastępujemy, a ja > mam kontrolę nad maszynami, które dostaje użyty na. Jednak jest to prostsze > dla użytkowników, jeśli nie muszą nawet klikać przycisku „Zainstaluj”. Nie wiem, jak to jest obsługiwane w Silverlight OOB. Firma planuje twardą ekspansję za 12 miesięcy, więc wdrożenie sprzętu powinno być szybkie/łatwe. Chodzi o to, aby uzyskać połączenie z Internetem w nowej lokalizacji, podłączyć kilka komputerów i móc pracować bez konieczności posiadania dedykowanych informatyków lub konfiguracji serwera. > Uatrakcyjnia SL Integracja z innymi usługami (oprogramowanie finansowe, serwer asterix) nie jest celem natychmiastowym, ale celem ostatecznym jest bycie częścią systemu. Jest to znacznie prostsze/bardziej wydajne, jeśli pojedyncza usługa jest skonfigurowana do integracji z tymi usługami drugorzędnymi i nie musi przesyłać wszystkich tych danych przez sieć > Uatrakcyjnia SL Tworzenie wielu „wersji” jest nie do pomyślenia. Nie wiem, jak to jest utrzymywać wersję silverlight + silverlight oob (jeśli są jakieś problemy) > Może sprawić, że WPF będzie lepszą opcją. TL; DR: Z mojego punktu widzenia aplikacja silverlight ma najlepszy sens dla 90% użytkowników – pozostałe 10% nie może jej używać, ponieważ muszą uruchomić exe. Silverlight OOB może być szczęśliwym środkiem, ale w tej chwili nie wiem, jaki jest dla niego model wykonania (czy jest jeszcze koncepcja kodu po stronie serwera? Jeśli tak, to prawdopodobnie byłoby to idealne) i nie wiem wiedzieć, jak działa wdrażanie/aktualizacja.


title: Domyślna strona PHP o dużym ruchu

text: Mam witrynę php, która za kilka tygodni będzie miała duży ruch. Przeskalowaliśmy serwery, aby zaakceptować ruch, ale chcemy mieć jakąś stronę awaryjną na wypadek, gdyby coś się stało. Czy ktoś zna łatwy sposób na zaimplementowanie tego? Moją pierwszą myślą jest sprawdzenie nagłówków, gdy żądana jest strona, ale nie do końca rozumiem, czy to w ogóle będzie miało znaczenie. Czy użytkownik otrzymuje nawet początkowe nagłówki http, jeśli otrzyma błąd „504 Gateway Timeout”? Czy coś takiego jak sprawdzenie wyniku: `var_dump(http_response_code());` w warunku dotarłoby nawet do klienta?


title: Problem teorii grafów (nazwa nieznana)

text: Próbuję rozwiązać następujący problem. Nie wiem, czy jest już na to nazwa, czy rozwiązanie; jednak jestem gotów się założyć, że jest. Miałem nadzieję, że ktoś wskaże mi kierunek wdrożenia rozwiązania, a przynajmniej poda nazwę problemu? Załóżmy, że podróżnik ma pewną ilość złotych monet i trochę brązowych monet. Musi założyć miasto A i udać się do miasta B, następnie miasta C, a na końcu miasta D. Istnieją dwie (lub więcej) drogi, które przechodzą z A do B, oznaczone AB1 i AB2 (itd.). Droga AB1 ma żniwo 5 złotych monet, a AB2 ma żniwo 5 brązowych monet. Drogi z miasta B do C: BC1 ma opłatę w wysokości 10 monet, które mogą być dowolną walutą. BC2 wymaga 8 złotych monet. Drogi od C do D mają podobny układ. Zakładając, że wiemy, ile pieniędzy ma podróżnik i że nie ma możliwości wymiany między brązowymi i złotymi monetami: czy istnieje sposób na ustalenie, czy podróżny ma wystarczająco dużo pieniędzy, aby przejść z punktu A do B, do C i wreszcie do D? To jest rodzaj problemu, dla którego potrzebuję rozwiązania... Czy istnieje nazwa tego problemu? Czy istnieje rozwiązanie tego problemu (inne niż brutalna siła)? Zakładam, że jest to podobny problem do problemów z przepływem, ale nie bardzo wiem, jak do tego podejść.


title: Jak mogę mieć pewność, że mój kod jest bezbłędny?

text: Właśnie ukończyłem ćwiczenie z mojego podręcznika, w którym chciałem napisać program sprawdzający, czy liczba jest liczbą pierwszą, czy nie. Przetestowałem to i wydaje się, że działa dobrze, ale skąd mogę mieć pewność, że zadziała dla każdej liczby pierwszej? public boolean isPrime(int n) { dzielnik int = 2; granica int = n-1 ; if (n == 2) { zwróć prawdę; } else { int mod = 0; while (dzielnik <= granica) { mod = n % dzielnik; if (mod == 0) { return false; } dzielnik++; } if (mod > 0) { return true; } } return false; } Zwróć uwagę, że to pytanie nie jest duplikatem Teoretycznie bezbłędnych programów, ponieważ pytanie to dotyczy tego, _czy_ można pisać programy wolne od błędów w obliczu ograniczających wyników, takich jak dowód Turinga na nieobliczalność zatrzymania, twierdzenie Rice'a i twierdzenia o niezupełności Godela . To pytanie dotyczy tego, jak można pokazać, że program jest wolny od błędów.


title: Jak rozpoznać osoby z potencjałem do zostania koderem

text: Pracuję w finansach i mamy zwyczaj zatrudniać młodych ludzi po studiach, większość z nich z niewielkim lub żadnym doświadczeniem w programowaniu. Nie szukamy przyszłych ilości, tylko analityków biznesowych z nastawieniem analitycznym. Zdarza się, że mamy wiele arkuszy kalkulacyjnych z sporą ilością VBA + trochę SQL. Więc jeśli chcesz być naprawdę dobry w swojej pracy, musisz w końcu nauczyć się lubić kodować. Prawdą jest, że każdy może nauczyć się kodować. I prawdą jest, że w pewnych okolicznościach ludzie z potencjałem mogą zostać „zablokowani” z jakiegokolwiek powodu. Mimo to, to tylko moje doświadczenie, że niektórzy ludzie wydają się naturalnie wchodzić w różne rzeczy, podczas gdy inni nie. I wbrew ogólnemu założeniu, nie jest to takie proste, że jeśli ktoś kocha matematykę, powinien kochać kodować. Pracowałem z więcej niż jednym całkiem sprytnym kwantem, który po prostu czułem, że kodowanie nie było częścią, którą lubili. Moim zdaniem niektórzy ludzie po prostu czują pociąg do „budowania rzeczy” i bardzo szybko przychodzą z własnymi pomysłami na to, co chcą zbudować, inni zawsze będą się trochę bać tych wszystkich linii kodu z tyłu plików oni używają. Nie odnoszę się do ogólnych cech zawodowych ludzi, to tylko część kodu komputerowego, która ich przeraża. Czy jestem sam w tym poglądzie? Czy ktoś ma jakieś pomysły na to, jak identyfikować ludzi „z wirusem”, gdy jest jeszcze w fazie utajenia?


title: Czy to dobry pomysł na wykorzystanie humoru podczas rozmowy kwalifikacyjnej?

text: Zastanawiam się, czy podczas rozmowy kwalifikacyjnej dobrze jest być trochę śmiesznym. Nie mam na myśli próby opowiedzenia dowcipu, ale po prostu wstawienie humorystycznej myśli, związanej z pytaniem lub tematem, o którym mówimy. Często używam humoru, gdy czuję, że jest za dużo stresu lub gdy ludzie nie są „połączeni”, a atmosfera jest zamrożona. Nie wiem, czy uda mi się użyć tej sztuczki, aby sprawa poszła gładko. Czy jest to coś, czego należy unikać za wszelką cenę? _PS / To jest bardziej pytanie zadawane ankieterom „ciężkim” niż osobom poszukującym pracy._


title: Dlaczego książki .Net mówią o alokacji pamięci stosu i sterty?

text: Wygląda na to, że każda książka .net mówi o typach wartości i typach referencyjnych i wskazuje na (często niepoprawnie) stan, w którym każdy typ jest przechowywany - sterta lub stos. Zwykle jest to w pierwszych kilku rozdziałach i przedstawiane jako bardzo ważny fakt. Myślę, że jest to nawet objęte egzaminami certyfikacyjnymi. Dlaczego stos vs sterta ma znaczenie nawet dla (początkujących) programistów .Net? Przydzielasz rzeczy i to po prostu działa, prawda?


title: Pisanie leksera w C++

text: Jakie są dobre zasoby na temat pisania leksera w C++ (książki, tutoriale, dokumenty), jakie są dobre techniki i praktyki? Zajrzałem do Internetu i wszyscy mówią, żeby używać generatora lexera, takiego jak lex. Nie chcę tego robić, chcę ręcznie pisać leksera.


title: Członkowie zespołu selenowego i nietechniczni

text: Pracuję w zespole tworzącym serwis WWW o dużej liczbie stron. Facet z zespołu ds. kontroli jakości przeprowadza obecnie wszystkie testy ręcznie. Myślę o stworzeniu przez niego kilku skryptów Selenium. Nie sądzę, żeby mógł zautomatyzować wszystkie testy, ale mógłby zautomatyzować wiele z nich. Ponieważ nie ma doświadczenia w programowaniu, jak trudno będzie mu stworzyć i zarządzać partią skryptów Selenium? W jakich kwestiach będzie potrzebował pomocy?


title: Czy aplikacja stworzona dla sklepu Windows będzie obsługiwać systemy Windows, Windows 8 i Windows 8 mobile?

text: Jestem z tym bardzo zdezorientowany. Chciałbym stworzyć aplikację na Windows 8 , Windows RT i Windows Mobile. Mam zainstalowany system operacyjny Windows 8 na moim laptopie. O ile wiem, Windows RT jest przeznaczony dla urządzeń opartych na architekturze ARM. OTO MOJE PYTANIA: 1. Tworzę aplikację i umieszczam w sklepie Windows. Czy można to pobrać z urządzenia opartego na ARM, które działa w systemie Windows RT, ORAZ z laptopa z systemem Windows 8, a także z telefonu komórkowego z systemem Windows 8? A może powinny to być różne aplikacje?


title: Jak uzyskać dostęp / wysłać zapytanie do Team Foundation Server 2012 za pomocą Odata?

text: Próbowałem znaleźć rozwiązanie tego problemu od wielu godzin i w końcu otrzymuję te same wyniki, prosząc mnie o zainstalowanie wielu Azure i innych rzeczy, plus uruchomienie przykładowego projektu .sln, którego nie mogę otwórz z moją wersją programu Visual Studio 2012. Tak więc utknąłem i mam kilka prostych pytań na ten temat: 1. Czy TFS 2012 zawiera w jakikolwiek sposób usługę Odata, więc nie muszę jej instalować? 2. Jeśli nie, w jaki sposób mogę zainstalować wersję NATIVE 2012 usługi Odata dla TFS 2012? 3. Czy to możliwe, że celuję tutaj w zły cel? Szukam rozwiązania następujących problemów: Mam serwer TFS 2012, na którym muszę mieć możliwość programowego tworzenia elementów roboczych w oparciu o dane z naszego systemu Help Desk. Następnie muszę zapytać te elementy pracy o zmieniony status od czasu ich utworzenia i zaktualizować bazę danych pomocy technicznej. Czy lepiej jest używać „zwykłego” interfejsu API TFS? Trochę myślałem, że sposób Odata jest bardziej "przyszłym dowodem", ale nie jestem pewien...


title: Konfiguracja NUnit i TearDown

text: Mam pewne doświadczenie w teście MS, ale jestem nowy w NUnit. 1. Czy NUnit [Setup] odpowiada [ClassInitialize] lub [TestInitialize] w teście MS? 2. Jaki jest atrybut NUnit odpowiadający [TestInitialize]? ODNIESIENIA: 1. http://stackoverflow.com/questions/1873191/testinitialize-gets-fired-for-every-test-in-my-visual-studio-unit-tests 2. http://stackoverflow.com/questions /4602288/nunit-testcontext-currentcontext-test-nie-działający


title: Jak (szybko) powiadomić ludzi, że oprogramowanie, które udostępniam za darmo, nie jest porzuconym oprogramowaniem?

text: Jako niezależny, indywidualny programista: **Jak mogę bardzo szybko poinformować ludzi, że nie porzuciłem oprogramowania, które napisałem i rozdaję za darmo?** Że wkładam wysiłek wymagany do utrzymania i wsparcia mojego oprogramowania na profesjonalnym poziomie? Gdy oprogramowanie napisane przez jednego lub dwóch programistów jest dostępne za darmo lub oznaczone jako open-source, zwykle domyślnym założeniem jest to, że jest to porzucone oprogramowanie. Jest to zwykle bezpieczne założenie - sprawdź odpowiedzi na to pytanie, jeśli masz wątpliwości: Dlaczego programiści piszą aplikacje, a potem je udostępniają?. Jest jednak wielu programistów, którzy dostarczają darmowe i/lub open-source narzędzia, które nie są porzuconym oprogramowaniem. Jeśli mówimy o dużych firmach, tj. Google, nie ma problemu z odróżnieniem obsługiwanych, żywych narzędzi i oprogramowania od tych, które zostały porzucone lub wycofane. Żywe repozytorium git nie jest szybkie - użytkownicy będą musieli być wystarczająco doświadczeni, aby zrozumieć repozytorium i wiedzieć, gdzie go szukać. Konsekwentny marketing i zarządzanie społecznością zajmują więcej czasu i wysiłku, niż sam jestem w stanie włożyć. Ponadto, jeśli moje oprogramowanie stanie się popularne/odniesie sukces, zakładam, że rozwiną się one same i będą wspierane przez zaawansowanych użytkowników w społeczności.


title: wskaźniki funkcji są dla mnie tak skomplikowane

text: Znalazłem tę próbkę kodu w tej odpowiedzi Armen Tsirunyan. class MojaKlasa { public: typedef void (*funcPtr)(int, int); MojaKlasa(funcPtr whatToCall) { callme = whatToCall; } void mojaKlasa::callMain() { callSomeApi(callme, <niektóre argumenty>); //wskaźnik funkcji callme jest przekazywany jako argument } private: funcPtr callme; }; void f(int a, int b) {bla bla bla}; int main() { MojaKlasa mójObiekt(f); mójObiekt.callMain(); //wywoła funkcję api z f przekazanym jako argument } Chciałbym poznać zalety używania takiego wskaźnika funkcji jako elementu klasy. Jeśli jest ich więcej, powinienem być przytłoczony ich zastosowaniami i wezwaniami. Czy masz jakieś wskazówki, które pomogą mi zapamiętać jego użycie?


title: Jakie są różnice między procesem ujednoliconym a racjonalnym procesem ujednoliconym?

text: Czy są jakieś różnice między Rational Unified Process (RUP) a Unified Process (UP)? Co w tym kontekście oznacza „racjonalny”?


title: Buforowanie przez słowniki w pamięci. Czy robimy to wszystko źle?

text: Takie podejście jest w zasadzie akceptowanym sposobem na zrobienie czegokolwiek w naszej firmie. Prosty przykład: gdy część danych dla klienta jest żądana z usługi, pobieramy wszystkie dane dla tego klienta (odpowiednia część usługi) i zapisujemy je w słowniku w pamięci, a następnie udostępniamy je stamtąd przy kolejnych żądaniach (prowadzimy usługi singletonowe). Każda aktualizacja trafia do bazy danych, a następnie aktualizuje słownik w pamięci. Wydaje się to proste i nieszkodliwe, ale gdy wdrażamy bardziej skomplikowane reguły biznesowe, pamięć podręczna traci synchronizację i musimy radzić sobie z trudnymi do znalezienia błędami. Czasami odkładamy zapis do bazy danych, do tego czasu przechowując nowe dane w pamięci podręcznej. Zdarzają się przypadki, kiedy przechowujemy w pamięci miliony wierszy, ponieważ tabela ma wiele relacji z innymi tabelami i musimy szybko pokazać zagregowane dane. Cała ta obsługa pamięci podręcznej jest dużą częścią naszego kodu i czuję, że nie jest to właściwy sposób na zrobienie tego. Całe to żonglowanie dodaje zbyt wiele szumu do kodu i utrudnia zrozumienie rzeczywistej logiki biznesowej. Jednak nie sądzę, abyśmy mogli obsłużyć dane w rozsądnym czasie, jeśli musimy za każdym razem trafiać do bazy danych. Jestem niezadowolony z obecnej sytuacji, ale nie mam lepszej alternatywy. Moim jedynym rozwiązaniem byłoby użycie pamięci podręcznej drugiego poziomu NHibernate, ale nie mam z nią prawie żadnego doświadczenia. Wiem, że wiele firm używa Redis lub MemCached w celu zwiększenia wydajności, ale nie mam pojęcia, jak zintegrować je z naszym systemem. Nie wiem też, czy mogą działać lepiej niż struktury danych i zapytania w pamięci. Czy są jakieś alternatywne podejścia, którym powinienem się przyjrzeć?


title: Jak czytać konflikty redukcji/przesunięcia w LR(1) DFA?

text: Czytam wyjaśnienie (niesamowite "Techniki analizowania" autorstwa D.Grune i C.J.H.Jacobsa; s.293 w 2. wydaniu) i przeszedłem do przodu od mojego ostatniego pytania: Jak uzyskać symbol lookahead podczas konstruowania LR(1) NFA dla parsera ? Teraz mam taki "problem" (może nie problem, ale raczej potrzeba potwierdzenia od kilku bardziej znających się na rzeczy ludzi). Autorzy przedstawiają stan w LR(0), w którym występuje konflikt redukcji/przesunięcia. Następnie budują DFA dla LR(1) dla tej samej gramatyki. A teraz mówią, że **nie** ma konfliktu (patrz na koniec): S -> E . eof E -> E . - T eof E -> E . - T - i istnieje krawędź z tego stanu oznaczona jako `-`, ale nie oznaczona jako `eof`. Autorzy mówią, że na `eof` nastąpi redukcja, na `-` nastąpi przesunięcie. Jednak `eof` jest również dla zmiany (jako lookahead). Więc moje osobiste rozumienie LR(1) DFA jest takie -- możesz porzucić uprzedzenia dla zmian, ponieważ teraz nie mają one żadnego sensu -- zmiany polegają na danych wejściowych, a nie na uprzedzeniach -- a potem usuń duplikaty. S -> E . eof E -> E . - T Więc lookahead dla zmniejszenia służy tak naprawdę jako dane wejściowe, ponieważ na tym etapie (wszystkie wymagane dane wejściowe są odczytywane) to naprawdę jest teraz przychodzący symbol. W przypadku przesunięć symbole wejściowe znajdują się na krawędziach. Więc moje pytanie brzmi – czy rzeczywiście mam rację, jeśli chodzi o pomijanie lookaheadów dla zmian (po pełnym skonstruowaniu DFA)?


title: Sugestie projektowe potrzebne do stworzenia frameworka MathBuilder

text: Wyjaśnijmy, co próbuję stworzyć. Tworzę framework, pomysł polega na udostępnieniu klas bazowych do wygenerowania problemu matematycznego. Dlaczego potrzebuję tego frameworka? Ponieważ za pierwszym razem zdałem sobie sprawę, że tworząc nowy problem matematyczny zawsze wykonuję te same kroki. * **Ustawienia konfiguracyjne takie numery zakresów**. Na przykład, jeśli opracowuję mnożenie, na poziomie początkującym generuję tylko pierwszą liczbę z przedziału 2-5 lub na poziomie zaawansowanym, pierwsza liczba będzie na przykład między 6-9. * **Wygeneruj metodę problemu**. Cały czas muszę wywoływać taką metodę, aby wygenerować problem. Ten otrzymuje ustawienia konfiguracyjne i według nich generuje numer. I wygeneruj obiekt z odpowiednimi danymi. * **Zweryfikuj problem**. Czasami wygenerowany problem jest nieprawidłowy. Na przykład, zakładając, że tworzę ułamki w większości uproszczone, jeśli otrzymam 2/4, program powinien wykryć, że to nie jest poprawne i musi wygenerować inny, taki jak ten, 1/4. * **Załaduj widok**. Wszystkie z nich mają własny widok (proszę obejrzeć pod zdjęciami). * **Wszystkie problemy muszą wiedzieć, jak SPRAWDZIĆ, czy wynik użytkownika jest poprawny**. * **Wszystkie te problemy mają odpowiedzi**. Niektóre z nich wymagają tylko jednej odpowiedzi, inne mogą wymagać więcej niż jednej, więc myślę, że sposobem na zachowanie elastyczności programista jest posiadanie wszystkich odpowiedzi, których chciał użyć. * **Na początku zacząłem używać PRISM**. Pomysł na wygenerowanie modułów dla każdego zadania matematycznego i załadowanie go do głównego systemu. Myślę, że są najważniejsze rzeczy tego pomysłu. Pokażę kilka problemów, które tworzę w samodzielnym programie WPF. Tutaj mam problem matematyczny dotyczący obszarów. Kiedy wygeneruję problem ustawiam widok obiektu i go rysuję. ![tu wpisz opis obrazu](http://i.stack.imgur.com/H46YA.png) ![tu wpisz opis obrazu](http://i.stack.imgur.com/SNwLq.png) Dla początkujących poziom, ustawiłem w ustawieniach konfiguracyjnych, które po prostu ładują typy kwadratów. Ale na wyższym poziomie może losowo ładować trójkąty i kwadraty. W tym innym wygeneruj problem binarny, taki jak dodawanie, odejmowanie, mnożenie lub dzielenie. ![tu wpisz opis obrazu](http://i.stack.imgur.com/AQUzo.png) ![tu wpisz opis obrazu](http://i.stack.imgur.com/YGJgE.png) Powyżej tylko generować pojedynczy problem. Ideą tego jest pokazanie testu quizu, mam na myśli arkusz roboczy (to nazywam zbiorem problemów), w którym użytkownik może na nie odpowiedzieć. ![tutaj podaj opis obrazu](http://i.stack.imgur.com/wMiqy.png) Mam nadzieję, że wpadnie na pomysł z moim brzydkim rysunkiem. Jak załadować te problemy matematyczne? Jak wspomniałem powyżej, zacząłem używać PRISM, a każdy moduł zawiera rodzaj zadania matematycznego. To jest migawka mojego pierwszego demo. ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/toywO.png) Poniżej pokaż załadowane moduły i wyśrodkuj odpowiednie konfiguracje lub poziomy. Do tej pory nie mam pomysłu, żeby zacząć tworzyć to oprogramowanie. Po prostu wiem, że potrzebuję pytania | klasa problemu, klasa odpowiedzi, klasa użytkownika. Ale gubię się w tym, jakie właściwości powinna w nim zawierać. Proszę podać trochę tego frameworka. Włożyłem wiele wysiłku w to pytanie, więc jeśli coś jest niejasne, daj mi znać, aby to wyjaśnić.


title: Szukasz sugestii dotyczących założenia i zarządzania grupą użytkowników programistów

text: Zastanawiam się nad założeniem grupy użytkowników obszarowych, aby dyskutować i dzielić się informacjami na różne tematy technologiczne związane z praktykami programistycznymi. Jakieś sugestie dotyczące znalezienia uczestników, przestrzeni, sponsorów, prelegentów itp. – i zarządzania tym wszystkim?


title: Refaktoryzacja c++

text: Wiem, że jest kilka innych pytań dotyczących refaktoryzacji c++, ale żadne z nich nie spełnia moich potrzeb. Mam doświadczenie w programowaniu w Javie i Pythonie, ale teraz zbliżam się do C++. Czytałem (i uwielbiam) książki o zwinnym kodowaniu, tdd, refaktoryzacji itp. Pierwsza, która przychodzi mi do głowy, to „Czysty kod”. Dzięki temu nauczyłem się wielu rzeczy: zachować krótkie funkcje, krótkie klasy, spójne nazwy zmiennych/klas itp. Bardzo podoba mi się ten sposób pracy: najpierw rozwiąż problem, a następnie dokonaj refaktoryzacji w małych funkcjach ( i jedna funkcja robi tylko jedną rzecz), dodawanie podklas itp. Mocno wierzę, że ten sposób pracy jest łatwy w nowoczesnym IDE: dodaj plik, zmień nazwę funkcji, zmień nazwy klas itp. Teraz koduję w c++ za pomocą cmake wewnątrz QtCreator. Wszystkie te rzeczy są trudniejsze. Nawet dodanie pliku jest "trudniejsze" (muszę wygenerować jeden plik nagłówkowy, jeden plik źródłowy, dodać je do cmakelist.txt, ponownie uruchomić cmake itp.). Myślenie o zmianie nazw plików (muszę ręcznie zmienić wszystkie include) lub o jakichś mocnych metodach refaktoryzacji, które w Javie z Eclipse nie mają żadnych kosztów, przyprawiają mnie o ból głowy. To znaczy... to nie jest "trudne" w znaczeniu "trudne zadanie", ale ludzki umysł jest trochę leniwy: jeśli mogę zrobić inny najłatwiejszy sposób.. W Javie z jakimś nowoczesnym IDE, takim jak Eclipse.. refaktor jest zabawne części, kilka kliknięć i voilà, gotowe, robię to za każdym razem, gdy zdaję test. Jest to łatwe, przyjemne i lubię czytać mój czysty kod z małymi funkcjami i ładnymi nazwami. Teraz wszystko jest trudniejsze głównie dlatego, że nie ma narzędzi, które zrobią to bez kosztów. Obrażam się w złych postawach napędzanych lenistwem: piszę kilka klas w jednym super długim pliku .h, bo nie chcę tworzyć nowych plików, spędzam godziny na modyfikowaniu klas/funkcji/zmiennych o bardziej odpowiednich nazwach i ręcznej zmianie wszystkich zawiera, pisz długie funkcje, ponieważ kiedy automatycznie zmieniam atrybuty funkcji, które dotyczą standardowej biblioteki, QTCreator usuwa szablony, więc tego unikam i wiele innych.. To dość frustrujące.. co możesz mi doradzić? Czy muszę rozluźnić się w „zasadach” pisania czystego kodu? Czy muszę nie myśleć o tych rzeczach i myśleć tylko o tym, żeby coś działało? A może (może to jest ważniejsze pytanie) czy muszę myśleć o innym sposobie pracy? Koniec z przyrostowym / iteracyjnym / zwinnym sposobem, ale więcej wodospadu i spędzanie więcej czasu na projektowaniu przed kodowaniem w nadziei na zminimalizowanie refaktoryzacji po zdaniu testu? W każdym razie wszelkie komentarze są mile widziane, ponieważ jestem bardzo daleko, aby być dobrym programistą : )


title: czy polyglot Pythona PHP to dobry projekt?

text: W naszej aplikacji internetowej mamy warstwę pośrednią Pythona. Teraz musimy wyrenderować 3 różne kody HTML... * dla starszych przeglądarek (prosty interfejs tylko do odczytu) * dla przeglądarek HTML5 (DUŻO bardziej skomplikowany niż starsze przeglądarki) * dla strony mobilnej (prosty XHTML-MP) Teraz musimy zachować warstwa środkowa Pythona całkowicie niezależna od HTML – po prostu czysta logika biznesowa. Uważamy więc, że powinniśmy użyć warstwy PHP na wierzchu Pythona do wygenerowania tych kodów HTML. PHP komunikuje się z Pythonem przez SOA. Po pierwsze – czy to dobry pomysł? A jeśli nie, czy możesz zaproponować lepszy projekt? Po drugie, jeśli jest to wykonalny projekt – czy uważasz, że PHP+Python to dobra (możliwa do utrzymania) mieszanka. Jeśli nie, co powiesz na zastąpienie warstwy PHP kolejną warstwą Pythona. Pamiętaj tylko, że nasza warstwa pośrednia musi być CAŁKOWICIE odizolowana od wszelkich elementów HTML :) \-- **_UPDATE_** \-- Powodem, dla którego jesteśmy skłonni używać PHP jest... * Sam PHP jest tylko silnikiem szablonów osadzony w HTML - i BARDZO łatwo jest generować za jego pomocą złożony kod HTML. Z drugiej strony, Python jest bardziej językiem ogólnego przeznaczenia i generowanie za jego pomocą HTML będzie wymagało od nas użycia biblioteki innej firmy, co pociągnie za sobą kłopoty z konserwacją/aktualizacją/bezpieczeństwem. Generowanie HTML jest swego rodzaju raison d'être dla PHP. * Po drugie, obsługa Pythona dla Nginx NIE jest tak dobra jak PHP.


title: Dokument projektowy dla projektu w C

text: Mam pewne doświadczenie w dokumentowaniu projektu dla projektu opracowanego w językach OOP. Stworzyłem klasy i użyłem diagramów klas, aby pokazać ogólną strukturę projektu implementacji, gdy używałem języków OOP. **Problem :** Zaraz zaczynam projekt w języku C. Jak mam się teraz zająć pisaniem dokumentu projektowego? **P.** Czy dokument projektowy nie powinien być niezależny od języka implementacji? Ale nie jestem w stanie rozgryźć, bez klas zaangażowanych w moją implementację, jak i pomiędzy czym pokażę relacje ? **P.** Czy istnieje standardowy sposób dokumentowania projektów w C? Jestem całkowicie zdezorientowany, co dokładnie mam pokazać w dokumencie projektowym? Funkcje ? Jak je powiążę? Doceni link do dowolnego projektu open source C, który może mieć taką dokumentację w celach informacyjnych? PS : Projekt jest minimalnym rozwojem jądra w języku C.


title: Wstrzyknięcie fasolki szparagowej do ograniczenia hibernacji walidatora

text: Mam metodę kontrolera, taką jak wymieniona poniżej, której argument jest oznaczony jako `@Valid`, aby sprawdzić poprawność obiektu `PasswordChange` przy użyciu walidatora Hibernate `@Constraint`. Poniżej wymieniono zarówno „Zmiana hasła”, jak i przykładowe ograniczenie. Jak widać, wstrzykuję `loginDao` wewnątrz ograniczenia. Czy to jest antywzór? Inną alternatywą, o której myślę, jest wstrzyknięcie daos do obiektu `PasswordChange`, aby loginDao były dostępne wewnątrz implementacji `ConstraintValidator<A, V>`. Ktoś powiedział, że mieszanie danych z logiką biznesową to na wiosnę antywzór. Wszelkie sugestie są mile widziane. **Metoda kontrolera** * * * @RequestMapping(value = "/passwordChange", method = RequestMethod.POST) public @ResponseBody PasswordInfo passwordInfo(@RequestBody @Valid PasswordChange passwordChange) throws PasswordChangeException { return passwordService.changePassword(passwordChange.getLoginKey( ), zmiana hasła.getOldPassword(), zmiana hasła.getNewPassword()); } **PasswordChange Bean** * * * public class Zmiana Hasla { @LoginAttemptsExceeded private String loginKey; private String oldPassword; private String noweHasło; @Autowired private LoginDao loginDao; prywatny login LoginEntity; osoba prywatna osoba; public PasswordChange() { } public PasswordChange(String loginKey, String oldPassword, String newPassword) { this.loginKey = loginKey; this.oldPassword = stareHasło; this.newPassword = noweHasło; } @PostConstruct public void postInit() { login = loginDao.findByLogin(loginKey); osoba = login.getCorePerson(); } } **Sample Constraint** * * * @Target({ FIELD, ANNOTATION_TYPE }) @Retention(RUNTIME) @Constraint(validatedBy = LoginAttemptsExceededValidatorLoginId.class) @Documented public @interface LoginAttemptsExceeded{com String message() default " mrll.global.core.constraint.loginAttemptsExceeded}"; Class<?>[] groups() default {}; Klasa<? extends Payload>[] payload() default {}; } **Sample Constraint Validator** * * * public final class LoginAttemptsExceededValidatorLoginId implementuje ConstraintValidator<LoginAttemptsExceeded, String> { @Resource private LoginDao loginDao; private LoginPróbyPrzekroczone LoginPróbyPrzekroczone; @Override public void initialize(końcowy LoginAttemptsExceeded loginAttemptsExceeded) { this.loginAttemptsExceeded = loginAttemptsExceeded; } /** * Walidacja kończy się niepowodzeniem, jeśli próby logowania przekroczyły ustaloną liczbę. * @param loginId * @param boundValidatorContext * @return */ @Override public boolean isValid(final String loginId, final ConstraintValidatorContext boundValidatorContext) { if(StringUtility.IsEmpty(loginId)) return false; return !loginDao.findByLogin(loginId).isLoginAttemptsExceeded(); } }


title: Czy open sourcing Twojej pracy pomaga Ci?

text: Czy programiści rzeczywiście otrzymają znaczącą _pomoc_ poprzez open sourcing pracy w jej niedokończonych etapach, czy też konsumenci open source będą bardziej skłonni do czegoś gotowego do użycia? Jest to często przytaczane jako zaleta open source, ale nie byłem w stanie znaleźć na to dowodów poza już istniejącymi produktami.


title: jaka jest wewnętrzna struktura danych javascript?

text: Rozważmy podstawowy obiekt js: var obj={x:1,y:'2'}; Czy jest to przechowywane wewnętrznie jako tablica mieszająca, czy js używa innego mechanizmu dla par klucz-wartość? Jeśli są to tablice mieszające, czy ktoś wie, jak radzą sobie z kolizjami?


title: Czy są jakieś firmy używające BDD w środowisku .NET?

text: Widziałem BDD w akcji (w tym przypadku przy użyciu SpecFlow i Selenium w środowisku .NET) dla małego projektu testowego. Byłem pod ogromnym wrażeniem - głównie ze względu na to, że język użyty do określenia testów akceptacyjnych znacznie ułatwił im kontakt z właścicielem produktu. Chciałbym teraz wprowadzić to do mojej obecnej organizacji. Jednak jestem pytany „kto jeszcze tego używa?” i „pokaż mi studia przypadków”. Niestety nie mogę znaleźć żadnych „wielkich nazwisk” (a nawet „małych”!) firm, które aktywnie korzystają z BDD. Tak naprawdę mam dwa pytania: * Czy BDD jest przyswajane przez firmy? Kim oni są? * W jaki sposób można wdrożyć BDD w zwinnym środowisku .NET i czy są w tym jakieś istotne wady?


title: Przemierz macierz za pomocą wskaźnika liniowego, aby uzyskać równomiernie rozłożoną próbkę wartości

text: Szukam pomysłu na algorytm, jak przemierzać macierz za pomocą indeksu liniowego, unikając przechodzenia opartego na wierszach/kolumnach, aby uzyskać bardziej zróżnicowany rozkład wartości. Aby lepiej to zrozumieć, pomyśl o obrazie podzielonym na bloki z „N” wierszami i „M” kolumnami. Muszę przetwarzać każdy blok obrazu sekwencyjnie (od „1” do „NxM”), ale nie wiem z góry, jaki będzie czas przetwarzania dla każdego bloku (bloki, które są blisko siebie, mają zwykle podobny czas przetwarzania, z małe odmiany). Podczas przetwarzania muszę być w stanie jak najlepiej oszacować pozostały czas przetwarzania na podstawie liczby bloków, które zostały już przetworzone i związanego z nimi czasu przetwarzania. Z tego powodu przechodzenie bloków przez kolumny lub wiersze nie da dokładnego oszacowania, więc muszę znaleźć inny sposób na przechodzenie przez macierz, który wybierałby wartości z różnych stref obrazu. Ważne jest również, aby móc określić kolejność przetwarzania bloków w oparciu o **indeks liniowy** (od 1 do NxM), bez wcześniejszego obliczania ich. Algorytm zwracający „wiersz” i „kolumnę” odpowiadające indeksowi liniowemu powinien być jak najszybszy. **Krótsza wersja pytania** W przypadku indeksu liniowego o nazwie `idx` muszę uzyskać odpowiednią parę `wierszy` i `kolumn` z macierzy z `N` wierszami i `M` kolumnami, unikając wiersza/ przechodzenie na podstawie kolumn. Dla każdego `idx` między `1` a `NxM` algorytm zwróci parę `[wiersz, kolumna]`, tak aby wszystkie kombinacje wierszy i kolumn były zwracane dokładnie raz. **Przykład** (wartości w macierzy reprezentują wartość indeksu liniowego, która jest powiązana z pozycją wiersza i kolumny) ` 1 17 13 9 5 6 2 18 14 10 11 7 3 19 15 16 12 8 4 20 ` Powyższy przykład dotyczy przechodzenie po przekątnej, które zapewniłoby lepszy rozkład wartości niż przechodzenie oparte na wierszach/kolumnach. Innym możliwym rozwiązaniem byłoby podzielenie macierzy na mniejsze bloki i przechodzenie przez te bloki w wierszach/kolumnach. Na przykład macierz `4x5` może być wirtualnie podzielona na bloki `2x2`, a te mniejsze bloki mogą być przecinane przez wiersze lub kolumny (np. `idx(1) = blok1[1, 1]`, `idx(2) = blok2 [1, 1]` itd.). Przejście wyglądałoby mniej więcej tak: ` 1 13 | 3 15 | 5 7 17 | 9 18 | 11 ---+-------+--- 2 14 | 4 16 | 6 8 19 | 10 20 | 12 ` Wszelkie inne pomysły dotyczące przechodzenia są mile widziane. Idealnie, algorytm ten przełożyłby się na formułę matematyczną do obliczania wiersza i kolumny na podstawie indeksu liniowego, prawdopodobnie z kilkoma warunkami (wyrażenia „JEŻELI”) w celu skompensowania brakujących wartości itp.


title: Czy istnieje lepszy sposób ładowania obiektów?

text: Zawsze zachowywałem kod, aby załadować obiekt w samym obiekcie. W ten sposób bez względu na to, jaka metoda tworzy obiekt, zawsze ma dostęp do metody ładowania obiektu. Oznacza to jednak, że jeśli ładuję wiele obiektów, muszę utworzyć pustą kopię obiektu, aby pobrać tablicę obiektów, i nie wydaje się to najbardziej logicznym sposobem ładowania tablicy obiektów. Weźmy ten kod jako przykład, strona ładuje kilka produktów. class Product() { // zmienne produktu... public function LoadProducts($dbConn, $where) { $products = array(); $query = "SELECT * FROM produkty $gdzie"; $wyniki = $dbConn->zapytanie($zapytanie); while($row = $results->fetch_assoc()) { $products[$row['pId']] = new Product(); $products[$row['pId']]->StoreVars($row); } zwróć $produkty; } funkcja publiczna StoreVars($wiersz) { foreach($wiersz jako $klucz => $wal) { $ten->$klucz = $wal; } } } class Page() { // zmienne strony... public function DrawPage($dbConn) { $product = new Product(); $where = "Jakaś klauzula where"; $products = $product->LoadProducts($dbConn, $where); // Zrób coś z produktami, aby wyprowadzić kod HTML na stronę... } } Większość moich obiektów, takich jak `product`, ma podobny wzorzec. Czy to dobra praktyka? Czy jest inny/standardowy sposób na zrobienie tego? Czy robię to poprawnie? Po prostu wydaje mi się trochę bezcelowe, aby wywoływać pustą instancję produktu, aby załadować wszystkie produkty, ale nie wiem, gdzie jeszcze umieścić tę funkcję, więc nie muszę mieć wielu kopii tego samego zapytania.


title: Właściwa i wydajna struktura warstwy encji?

text: ## Kontekstowa aplikacja internetowa oparta na platformie .NET Framework napisana w C# i zgodna z wzorcem projektowym MVC. ## Pytanie Jaki jest najskuteczniejszy sposób ustrukturyzowania warstwy encji składającej się z różnych danych wejściowych? ## Tło Tworzę aplikację dla klienta, która wymaga odczytywania i zapisywania danych z różnych źródeł i chciałbym zbudować pojedynczą warstwę/model encji, aby wyabstrahować różne źródła danych, tak abym musiał tylko odpytywać zunifikowany model z kod. Oto przykład różnych źródeł: * Hurtownia danych MS SQL (około 200 tabel danych z całego przedsiębiorstwa * Usługi sieciowe MS Dynamics AX * Nowa baza danych MS SQL, specyficzna dla tworzonej aplikacji * MS Active Directory do uwierzytelniania użytkowników i do uzyskania informacji o profilu użytkownika i grupie.* W niektórych przypadkach usługi sieciowe SharePoint.Używałem ADO.NET sporo (pliki .edmx i tak dalej) i zasadniczo wiem, jak to zrobić, ale trochę się zmagam z solidnym, czystym podejściem. Czy tworzę dwa oddzielne pliki .edmx dla dwóch baz danych SQL, a następnie piszę klasy obiektów dla Active Directory, SharePoint i AX? Czy po prostu piszę jeden duży plik modelu? Cały oddzielny projekt tylko po to, aby zrobić abstrakcję? Wielkie dzięki!


title: Kiedy należy używać klas lokalnych w Javie?

text: Dowiedziałem się o lokalnych klasach na stronie Oracle Java Tutorial. Klasy niezagnieżdżone. Nie widzę siebie na zajęciach lokalnych. Sprawia to, że kod wygląda na bałagan i możesz łatwo zrobić to, co robią lokalne klasy, mając klasę zadeklarowaną osobno. Ale może brakuje mi kilku przypadków użycia. Czy są sytuacje, w których wolałbyś używać zajęć lokalnych od innych podejść, czy też zajęcia lokalne są tylko przestarzałą funkcją, której nikt tak naprawdę nie używa?


title: Jak zostać architektem technicznym od dewelopera

text: Programuję w .NET od 5 lat. Dużo wykorzystuję wzorce projektowe w naszych projektach. Mam pewną wiedzę domenową w żargonie finansowym. Moim ostatecznym celem jest zostać architektem technicznym. Problem polega jednak na tym, że nie mam takiej możliwości w naszej organizacji. Moje pytanie brzmi w takim razie, jak powinienem się rozwijać, aby zostać odnoszącym sukcesy architektem technicznym? Czytałem też gdzieś, że wiedza dziedzinowa ma znaczenie dla zostania architektem. Czy ktoś może wyjaśnić to stwierdzenie?


title: Testowanie aplikacji webowych napisanych w java

text: Jak testujesz aplikacje internetowe (zarówno po stronie serwera, jak i po stronie klienta)? Metoda testowania musi działać niezależnie od użytego frameworka (rozpórki, spring web mvc) itp. Używam Javy dla kodu po stronie serwera, Javascript i HTML dla kodu po stronie klienta. Oto przykładowy przypadek testowy tego, o czym mówię: 1. Po kliknięciu łącza otwiera się wyskakujące okienko. 2. Zmień jakąś wartość w wyskakującym okienku (powiedzmy wartość rozwijaną) i zostanie zapisana w bazie danych. 3. Kliknij ponownie wyskakujące okienko, otrzymasz zmienione wartości. Czy możemy zasymulować tego rodzaju rzeczy za pomocą przypadków testów jednostkowych? Czy wystarczy JUnit?


title: Jak ważny jest dobry styl kodowania dla decyzji o zatrudnieniu programisty?

text: Już jako student jestem proszony o przejrzenie kodu programistów, którzy (nie) zdali testu (utworzenie listy liczb Fibonacciego na Androidzie). Chociaż jestem bardzo surowy w stylu kodowania, przeczytałem właśnie o stylu „blokowym”, którego ktoś użył (przeczytaj komentarze!). Na swoim stanowisku radzę nie zatrudniać faceta posługującego się takim stylem. Kod jest całkowitym przeciwieństwem stylu kodowania stosowanego w mojej firmie. Szukając stylu kodowania i tego, jak sobie z nim radzić, ciekawi mnie jedno: czy powinienem zatrudnić faceta, który będzie miał ~~poważne kłopoty~~ z dostosowaniem stylu kodowania używanego w firmie? Proszę: To _nie_ powinno być dyskusją na temat stylu kodowania w ogóle i co jest lepsze. Chodzi o znaczenie stylu kodowania dla decyzji o zatrudnieniu kogoś! **Więcej informacji:** Nie jestem facetem, który podejmuje decyzje, po prostu wyrażam swoją opinię na podstawie kodu. Facet musi przejść rozmowę kwalifikacyjną, na której nasz szef wszystkiego sprawdza umiejętności miękkie. Jeśli to zdał, musiał zdać nasz mały test umiejętności i wtedy czasami proszono mnie o sprawdzenie napisanego kodu. Nie jestem w stanie powiedzieć tak lub nie. Chcę tylko wiedzieć, jak ważny powinien być styl kodowania dla mojej recenzji...


title: Potrzebujesz pomysłów na tydzień innowacji

text: Tak więc 4 razy w roku mamy tydzień innowacji (aby wyrównać nieparzyste wydania sprintów). Cały tydzień poświęcony jest eksperymentowaniu z nowymi technologiami/pomysłami, które mogą potencjalnie pomóc w rozwoju działu oprogramowania lub całej firmy i służyć jako rodzaj punktu wyjścia dla nowych pomysłów i burzy mózgów. Na przykład ostatnia zawierała wiele projektów. Jednym z nich było przeprojektowanie naszej aplikacji internetowej na wygląd i działanie Web 2.0 przy użyciu JQuery i wielu fajnych sztuczek CSS. Innym była propozycja nowego oprogramowania do śledzenia błędów, w przeciwieństwie do wyraźnie przestarzałego, którego używamy, a innym był bardzo fajny projekt JQuery/Js, który mógł wyświetlać tę samą stronę wielu użytkownikom na różnych komputerach i pozwalać każdemu z nich na " „obciążenie” strony, uniemożliwiając drugiemu robienie czegokolwiek i odwrotnie, wyświetlając wszystkie aktualizacje w czasie rzeczywistym – coś w rodzaju Netmeeting przez Js. Cóż, to jest mój pierwszy jako nowy pracownik, więc chciałem wymyślić coś fajnego. Dostajemy jeden tydzień (od 40 do 60 godzin) i zwykle łączymy się w pary lub robimy to w grupach 3-4, w zależności od tego, ile jest projektów. Projekty muszą zostać zatwierdzone, ale zazwyczaj nie jest to zbyt trudne. Jesteśmy w branży oprogramowania do analizy finansowej, jeśli domena skłaniała was do myślenia o czymś pomocnym. Obecnie pracuję głównie nad aplikacją sieci web w MVC 2 przy użyciu wielu JQuery i zaplecza C#. Czy macie jakiś pomysł na coś, co byłoby fajne/korzystne/warte tego?


title: Planowanie długoterminowe i zwinne?

text: Mój zespół niedawno przeszedł przez proces układania prawie rocznego planu naszej pracy. Plan podzieliliśmy na trzy fazy. Każda faza będzie obejmować kilka uruchomień. Zastanawiam się, ze zwinnego punktu, czy to źle? Myślę, że to nie jest zły pomysł, ponieważ nie poświęciliśmy zbyt wiele czasu na projektowanie niczego poza kilkoma pierwszymi krokami. Możemy zmienić kierunek. Jednocześnie fajnie, że nie działamy mając na uwadze tylko najbliższą przyszłość.


title: Nowy vs Clone Git w Eclipse z EGit

text: Nie jestem pewien, czy mam poprawnie skonfigurowany przepływ pracy nowego repozytorium lub klonowania repozytorium lub oba. Kiedy tworzę nowy projekt, tworzę repozytorium na github, nie mogę go sklonować, ponieważ jest puste, więc tworzę nowy projekt, który trafia do mojego obszaru roboczego, a następnie git init uruchamia się na kopii obszaru roboczego. Więc kończę ze wszystkim w obszarze roboczym\nazwa-projektu. Jednak, gdy najpierw sklonuję z github, muszę sklonować repozytorium, a to trafia do mojego domyślnego katalogu git (C: \ git) jako git \ sklonowana-nazwa-projektu, muszę następnie zaimportować to repozytorium Git jako projekt do mojego workspace i kończę z workspace\cloned-project-name skutecznie powielając folder projektu w obszarze git. Próbowałem sklonować do workspace\cloned-project-name, ale potem prosi o zaimportowanie projektu git i jeśli spróbuję ponownie użyć workspace\cloned-project-name, błąd. Co ja robię źle? Dzięki, Matt.


title: Oprogramowanie i urządzenia niskiego poziomu

text: Patrzę na nowy rozdział w mojej karierze. Jestem programistą stron internetowych, ale teraz zaczynam bawić się C, kompilatorami i rzeczami, z którymi wcześniej nie musiałem pracować. To wszystko jest bardzo intrygujące! Ponieważ coraz bardziej przechodzę na arenę „niższego poziomu”, zastanawiam się, w jaki sposób urządzenia (myszy, drukarki, kamery internetowe, mikrofony itp.) są kontrolowane, zarządzane, wykrywane lub ogólnie używane z oprogramowaniem. Pytam, ponieważ naprawdę trudno mi znaleźć w Internecie prostą dokumentację opisującą lub dającą przykłady interakcji sprzętu z oprogramowaniem. Czy ktoś zna przyzwoite strony, na których mogę zacząć się tego uczyć?


title: jaka jest różnica między poniższymi dwiema składniami?

text: 1. $(function () { function foo() { return true; } log(bar()); // otrzymanie błędu var bar = function() { return true; }; }); 2. $(function () { function foo() { return true; } log(bar()); // funkcja robocza bar() { return true; }; }); w powyższych fragmentach **log** to moja niestandardowa funkcja do rejestrowania wyniku.


title: Czy to w porządku, aby nie w pełni zrozumieć RB Trees?

text: Więc właśnie nauczyłem się czerwonych czarnych drzew w Cormen i wow! Zazwyczaj lubię rozumieć wszystkie algorytmy i struktury danych do tego stopnia, że mogę je odbudować od zera bez konieczności oszukiwania na pseudokodzie. Bardzo lubię algorytmy, więc lubię uczyć się ich działania i zwykle chodzę linia po linii i próbuję kilku przypadków, patrząc na kod i sprawdzając, czy to, co się dzieje, jest tym, co zrozumiałem, że powinno się zdarzyć. Samo zrozumienie, co się dzieje, zajęło mi DUŻO czasu dla drzewek RB. Nawet z objaśnieniami książki wciąż trudno było mi zrozumieć kod. Nie wspominając o tym, że nie mogłem zrozumieć, jak/dlaczego działają rotacje. Wcale nie wydaje mi się to intuicyjne. Mam na myśli trzy (właściwie sześć) różnych przypadków do wstawienia, a następnie 4 przypadki do usunięcia? Czy można to zrozumieć? Nie da się odbudować tego kodu bez oszukiwania. Aż do drzewa binarnego mogłem zaimplementować te rzeczy z mojej głowy, z pewnymi poprawkami zawsze działałoby, ale drzewa RB nawet nie zamierzam próbować. To znaczy, nawet nauczyciel czasami się mylił, więc przypuszczam, że to naprawdę nie jest takie proste, ale jednocześnie, czy nie powinniśmy rozumieć wszystkiego, co się dzieje, a przynajmniej dlaczego? Książka tak naprawdę nie wyjaśniała, jak ktoś wpadł na pomysł rotacji. Jak ktoś zauważył, że przy 2 obrotach można rozwiązać jakikolwiek problem z wkładaniem? To jest wspaniałe! Moje pytanie brzmi, czy naprawdę muszę w 100% rozumieć drzewa RB? Czuję się trochę źle, pomijam rzeczy, nie rozumiejąc tego w pełni. Z góry dziękuję chłopaki! (PS: nie ma tagu dla drzewa RB, właściwie nawet dla drzewa, tylko drzewo binarne, więc umieszczam tylko algorytmy)


title: Jaka jest kolejność rysowania diagramu w projekcie?

text: Jestem nowy w OOP i UML i mam tutaj pewne zamieszanie. Chciałbym wiedzieć od czego zacząć, to znaczy, ktoś przychodzi do ciebie i prosi cię o zrobienie czegoś (oczywiście chodzi o projektowanie oprogramowania), gdy już ustalisz, co ma być zrobione, w jakiej kolejności musisz uruchomić architekturę oprogramowania? Chodzi mi o to, czy jest to najpierw diagram przypadków użycia czy diagram klas? czy powinienem narysować kilka diagramów równolegle? Ale w zasadzie od czego powinienem zacząć? a jaki diagram UML idzie pierwszy? Dzięki za pomoc!!


title: Jak obliczyć sumę kontrolną?

text: Rozwijam sterownik instrumentu i chcę wiedzieć, jak obliczyć sumę kontrolną ramki. Objaśnienie: > Wyrażane znakami [0-9] i [A-F]. > > Znaki zaczynające się od znaku po [STX] do [ETB] lub [ETX] > (włącznie z [ETB] lub [ETX]) są dodawane w postaci binarnej. > > Liczby 2-cyfrowe, które reprezentują najmniej znaczących 8 bitów w > kodzie szesnastkowym, są konwertowane na znaki ASCII [0-9] i [A-F]. > > Najbardziej znacząca cyfra jest przechowywana w CHK1, a najmniej znacząca > w CHK2. To jest przykładowa ramka: <STX>2Q|1|2^1||||20011001153000<CR><ETX><CHK1><CHK2><CR><LF> i chcę wiedzieć, jaka jest wartość chk1 i chk2 i jestem w tym nowy, więc nie mam pojęcia, jak obliczyć sumę kontrolną, nie przekraczam trzeciego i czwartego punktu. Czy ktoś może dostarczyć przykładowy kod dla c#?


title: Wybieranie między słowami o różnej pisowni nazw funkcji

text: Od jakiegoś czasu dręczy mnie pytanie: przy opracowywaniu projektów międzynarodowych zdrowym rozsądkiem jest używanie angielskiego jako języka odniesienia, ponieważ jest to język, który rozumie większość ludzi. Jak jednak wybrać nazwę funkcji, która może mieć różną poprawną pisownię w języku angielskim. Na przykład, czy można nazwać funkcję `get_center` czy `get_center`? Czy są jakieś ogólne zasady do wyboru, czy wybieramy obie, czy po prostu wybieramy arbitralnie i staramy się później zachować spójność? **UWAGA:** Większość odpowiedzi zaleca używanie amerykańskiego angielskiego, co ma sens. Nie miałam jednak pojęcia, że jedna z pisowni to amerykański angielski, a druga to brytyjski angielski. Dlatego mój przykład nie jest dobry. Oczywiście użyłbym „centrum”, gdybym znał tę różnicę. Ale moje pytanie jest nadal aktualne, chociaż mój przykład jest kiepski. **UWAGA²:** Jeśli chodzi o „centrum” i „centre”, widzę, że wxWidgets używa obu.


title: Najłatwiejszy sposób wykorzystania obiektów jako filtrów dla zapytań

text: Właśnie zaczynam swój nowy mały projekt dla zwierząt. Rozpocząłem projekt od znanego wzorca używania obiektów jako "filtrów" w zapytaniach SQL. Nigdy nie byłem zbyt zadowolony z jego łatwości obsługi, ale w końcu zaakceptowałem go po wwierceniu się w moją głowę przez kolegów. Mam nadzieję, że poniższy przykład podkreśla moje obawy. Zwłaszcza jeśli chodzi o sam rozmiar. Mimo to widzę również mocne strony tego wzoru, które mogą przemawiać za dalszym użytkowaniem. Szukam opinii, czy powinienem kontynuować, tak jak zawsze, lub czy rzeczywiście jest na to łatwiejszy sposób. Albo za pomocą innego wzorca, albo w jakiś sposób „zautomatyzuj” proces. _Proszę zauważyć, że poniższe jest tylko przykładem i nie jest używane._ public static User getUser(User filter) throws UserControllerException { String sql, sqlFilter = ""; Użytkownik użytkownik = null; try { Połączenie con = DataSource.getInstance().getConnection(); if (filter.getCorp() != null) sqlFilter += " AND corp_id = ?"; if (!filter.isNew()) sqlFilter += " AND user_id = ?"; if (filter.getUsername() != null) sqlFilter += " AND nazwa użytkownika = ?"; if (filter.getPasswordHash() != null) sqlFilter += " AND password_hash = ?"; if (filter.getFirstName() != null) sqlFilter += " AND imie = ?"; if (filter.getLastName() != null) sqlFilter += " AND nazwisko = ?"; if (filter.getPhoneNumber() > 0) sqlFilter += " AND numer_telefonu = ?"; sql = "SELECT * FROM users WHERE 1 = 1 " + sqlFilter; Przygotowane oświadczenie ps = con.prepareStatement(sql); int pPoz = 0; if (filter.getCorp() != null) ps.setLong(++psPos, filter.getCorp().getCorpId());; if (!filter.isNew()) ps.setLong(++psPos, filter.getUserId()); if (filter.getUsername() != null) ps.setString(++psPos, filter.getUsername()); if (filter.getPasswordHash() != null) ps.setString(++psPos, filter.getPasswordHash()); if (filter.getFirstName() != null) ps.setString(++psPos, filter.getFirstName()); if (filter.getLastName() != null) ps.setString(++psPos, filter.getLastName()); if (filter.getPhoneNumber() > 0) ps.setLong(++psPos, filter.getPhoneNumber()); Zestaw wyników rs = ps.executeQuery(); if (rs.next()) { user = new User( rs.getLong("user_id"), new Corporation(rs.getLong("corp_id"), null), rs.getString("username"), rs.getString ("hasło_hasła"), rs.getString("imię"), rs.getString("nazwisko"), rs.getLong("numer_telefonu") ); } } catch (IOException e) { throw new UserControllerException(e.getMessage(), e); } catch (SQLException e) { throw new UserControllerException(e.getMessage(), e); } powrót użytkownika; }


title: Zmniejszenie złożoności kodu dla interfejsu między angular i d3

text: Bawię się różnymi sposobami integracji d3 i angular, w kontekście uczenia się obu tych struktur i mam nadzieję na pewne dane wejściowe: Moja aplikacja kliencka otrzymuje tablicę węzłów JSON i tablicę krawędzi z mojego serwera. Centralnym komponentem klienta jest wizualizacja wykresu zaimplementowana jako układ oparty na sile d3: dla każdego węzła w tablicy węzłów do tej wizualizacji dodawany jest element okręgu (SVG), a linie między tymi okręgami są dodawane dla każdej krawędzi w tablica krawędzi. Oczywiście `selection.data()` w d3 sprawia, że dodanie tych elementów i powiązanie każdego z danymi, które reprezentuje, jest banalne, ale wizualizacja wykresu jest tylko częścią znacznie większej aplikacji: muszę stworzyć różne typy elementów reprezentujących te elementy. te same węzły i krawędzie w różnych częściach aplikacji (z którymi d3 nie ma nic wspólnego) i chciałbym, aby wszystkie te elementy były powiązane z jednym zestawem danych. Moim głównym celem jest zminimalizowanie złożoności kodu i - chociaż zakochałem się w prostocie i elegancji funkcji wiązania danych w d3 - doszedłem do wstępnego wniosku, że używam go w jednej części aplikacji podczas korzystania z Angulara do zrobić to samo w innych częściach, tworzy niepotrzebną złożoność, a najprostszym podejściem byłoby użycie Angulara do obsługi wiązania danych/tworzenia elementu Innymi słowy, zamiast używania `selection.data().enter().append ( )` aby utworzyć elementy SVG, myślę, że powinienem to zrobić za pomocą `ng-repeat="node in nodes"`, być może tworząc każdy jako niestandardową dyrektywę, aby umożliwić niestandardową funkcjonalność. Zrobiwszy to, musiałbym następnie umieścić te elementy „w” d3, aby można je było ułożyć na ekranie i animować jego siłą- **Czy moje rozumowanie tutaj brzmi?** W szczególności martwię się że przeoczam komplikacje, które stworzą w odniesieniu do stałości obiektu, co jest ważnym wymogiem, ponieważ węzły będą stale wchodzić, wychodzić i poruszać się po ekranie i potrzebuję, aby te przejścia były płynne. Jak poleciłbyś, abym zintegrował moje elementy utworzone pod kątem w d3 (dokładniej, umieszczając je w moich tablicach `force.nodes{ }` i `force.links()`), aby uniknąć takich komplikacji? Na koniec rozważam również strategię, która, mam nadzieję, dałaby mi to, co najlepsze z obu światów: mógłbym użyć d3 do stworzenia moich elementów SVG i powiązania ich z ich odpowiednimi danymi, ale zamiast wykonywać ten kod w `link ` funkcji dyrektywy wizualizacji (tak jak robiłem i jak robią to wszystkie tutoriale ng/d3, które znalazłem), mógłbym uruchomić ją w funkcji `compile` i zrobić coś takiego: d3.select(' SVG').selectAll('.node').data('nodeDataArray') .enter( ).append('circle').attr("class", "node-icon"); //...inne atrybuty/style itp, gdzie `node-icon` jest znormalizowaną nazwą dyrektywy z właściwością `restrict`, która zawiera `C`. Jeśli to działa w metodzie kompilacji, angular powinien następnie skompilować wszystkie te dyrektywy w normalny sposób, dodając wszelkie dodatkowe funkcje / interfejsy z innymi dyrektywami (itp.), tak samo jak z każdym innym typem elementu . **_Prawda?_** Jest to opcja, która intuicyjnie mnie najbardziej pociąga - czy są jakieś pułapki, które mogę przeoczyć, a które mogą sprawić, że poprzednia strategia będzie lepsza? **UWAGA:** to pytanie zostało zamieszczone na SO. Wiem, że generalnie nie zaleca się publikowania postów krzyżowych, ale w tym przypadku nie jestem pewien, które forum jest najbardziej odpowiednim miejscem na to pytanie: odwołuje się do konkretnych implementacji, ale sedno pytania dotyczy ogólnych wzorców projektowych. Interpretując w kontekście SO, myślę, że jest to pytanie o wdrożenie. Interpretując to w tym kontekście, myślę, że to zupełnie inne pytanie, i tak właśnie uzasadniłem cross-posting. Jeśli nie zgadzasz się z tym uzasadnieniem, możesz skomentować, a ja rozważę usunięcie pytania.


title: Sprawdzanie obecności opcjonalnych właściwości obiektu

text: Projektuję klasę, która przechowuje kilka typów danych. Niektóre właściwości są opcjonalne. Załóżmy na przykład, że mam klasę reprezentującą osobę, a jedną z właściwości jest zawód. Mam inny majątek, stopień wojskowy, ale ten majątek można odzyskać tylko wtedy, gdy dana osoba zajmuje się wojskiem. Jak najlepiej sobie z tym poradzić? 1. Czy `getMilitaryRank()` rzuca `IllegalStateException` jeśli zawód nie jest wojskowy 2. `getMilitaryRank()` zwraca `Optional<Rank>`` 3. Zwraca null jeśli zawód jest nieprawidłowy (nie podoba mi się nulls) 4. Coś jeszcze? Pomysł 1 działa, ponieważ użytkownik może sprawdzić zawód przed wywołaniem tej metody, upewniając się, że nie wywoła go na nieważnej osobie. Pomysł 2 wydaje się niepotrzebny, ponieważ możesz wywnioskować, czy opcja Optional jest obecna, wywołując `getOccupation()`. Załóżmy jednak, że moja klasa Person ma inną właściwość opcjonalną, ale jej obecności nie można wywnioskować z wartości innej właściwości; na przykład drugie imię. Oczywiście najlepiej jest, gdy `getMiddleName()` zwraca puste `Optional` lub null, jeśli dana osoba nie ma drugiego imienia, ponieważ obecności drugiego imienia nie da się wywnioskować w żaden inny sposób. Ponieważ prawdopodobnie powinienem być konsekwentny w sposobie obsługi właściwości opcjonalnych, wygląda na to, że mógłbym wykonać jedną z następujących czynności: 1. Użyj `Opcjonalne` dla dowolnej właściwości, która może być nieobecna, nawet jeśli można ją wywnioskować z innej właściwości. 2. Dodaj metody, takie jak `hasMiddleName()`, aby rozwiązać rozbieżności (wygląda to na zły pomysł) „Opcjonalne”. 4. Coś jeszcze? Chociaż wartości null mogą uprościć sprawę, powodują problemy, jeśli opcjonalną właściwością jest `int`, która nie może mieć wartości null w Javie. Mógłbym użyć `Integer`, ale wydaje się to złym pomysłem. Jaki jest najlepszy sposób obsługi tych różnych typów opcjonalnych właściwości?


title: Licencja na bibliotekę stworzoną w programie komercyjnym

text: Zajmuję się tworzeniem komercyjnej aplikacji, która w dużej mierze zależy od funkcjonalności biblioteki, która będzie z nią tworzona. Chciałbym otworzyć tę bibliotekę, ponieważ oferuje ona funkcjonalność, której nie można znaleźć nigdzie indziej i może być użyteczna w innych aplikacjach. Wykorzystam go jednak również we własnej aplikacji komercyjnej. Nie chcę publikować źródła głównej aplikacji, ale zdecydowanie nie jest to praca pochodna (pomyśl o aplikacji kalkulatora korzystającej z biblioteki na licencji GPL do obliczania sinusa). A jeśli ktoś inny korzysta z biblioteki komercyjnie, chcę, aby publikował wszelkie wprowadzone zmiany. Czy licencja GPL jest do tego odpowiednia, czy może LGPL jest tym, czego potrzebuję?


title: Dobry przepływ pracy przy tworzeniu oprogramowania ze scrumem i ciągłą integracją

text: Studiuję podejście, aby lepiej zrozumieć, jak przepływ pracy ciągłej integracji lepiej pasuje do firmy zajmującej się tworzeniem oprogramowania metodą scrum. Myślę o czymś takim: ![tutaj podaj opis obrazu](http://i.stack.imgur.com/vBqTq.jpg) Czy byłby to fajny przepływ pracy?


title: Czy nadal powinienem sprawić, by moja witryna działała w przeglądarkach nieobsługujących JavaScript?

text: Najwyraźniej mniej niż 1% miało wyłączony javascript w 2010 roku: http://developer.yahoo.com/blogs/ydn/posts/2010/10/how-many-users-have- javascript-disabled/ Czy warto więc nadal wspierać przeglądanie bez javascriptu? Na przykład: **Przesyłanie formularzy.** Normalnie ustawiłbym kliknięcie lub zmianę zdarzeń na elementach formularza i po prostu zaktualizowałbym kod HTML bieżącej strony z odpowiedzi. Ale jeśli użytkownik ma wyłączoną obsługę js, formularz nie może zostać przesłany i nie będzie działał. Jeśli mam wziąć pod uwagę, że użytkownik ma wyłączone JS, muszę zawinąć moje elementy wejściowe w `<FORM>`, dodać przycisk przesyłania i dodać dodatkowe znaczniki na bieżącej stronie, aby obsłużyć wyniki przesyłania formularza. .. W każdym razie w tym przypadku jest dużo dodatkowej pracy. Kolejny przykład — zastąpienie ogólnych elementów formularzy DIVS, które stylizujesz tak, aby wyglądały jak fajniejsze elementy wejściowe i sprawiają, że zachowują się jak ogólne dane wejściowe za pośrednictwem JS. Ponownie, użytkownicy bez js nie będą mogli nic z nimi zrobić. Lub inny przykład, interfejs użytkownika utworzony przez JS podczas ładowania strony. Poza tym, że przeglądarka nie obsługująca js nie wyświetla interfejsu użytkownika, istnieje również mały problem z przeglądarkami obsługującymi JS, które będą wyświetlać brzydki interfejs użytkownika, dopóki strona nie zostanie w pełni załadowana i JS zostanie uruchomiony. Czy te wady są wystarczająco ważne, aby wziąć je pod uwagę, gdy dotyczy mniej niż 1% odwiedzających?


title: Wydajność programisty: w oparciu o lokalizację, czasy

text: Czy programiści lepiej radzą sobie z pracą z biura lub z wybranej przez siebie lokalizacji? Czy pracują lepiej w stałych terminach w porównaniu z elastycznymi godzinami?


title: Czy Quebec wymaga, aby wszystkie dane wyjściowe, w tym dzienniki wewnętrzne, były w języku francuskim?

text: Słyszałem kiedyś, jak architekt Microsoftu powiedział, że w Quebecu dane wyjściowe programu muszą być w języku francuskim, łącznie z niestandardowymi danymi wyjściowymi dzienników, które byłyby używane przez techników serwisowych w innych krajach, którzy nie mówią po francusku lub są z Quebecu. Najwyraźniej jest to w art. Konsumenci towarów i usług mają prawo do informacji i obsługi > w języku francuskim.** 1977, c. 5, ust. 5. Czy to, co mówi technik firmy Microsoft, jest poprawne? Czy ma to wpływ na wszystkie dane wyjściowe programu, czy tylko na dane wyjściowe przeznaczone dla odbiorców francuskojęzycznych (np. dzienniki w tym przypadku nie mają zastosowania)? Czy jest przeznaczony tylko dla agencji rządowych (w tym wykonywanych dla nich prac kontraktowych), czy też ma wpływ na prywatny użytek i sprzedaż?


title: Tworzenie dynamicznych atrybutów Pythona, błogosławieństwo czy przekleństwo?

text: Rozważmy następujący kod: >>> class Foo(): pass ... >>> foo = Foo() >>> foo.a = 'test' >>> foo.a 'test' Można po prostu nadpisać `__setattr__` ustawienie atrybutów tylko do odczytu i uniemożliwienie ich tworzenia w czasie wykonywania, jednak: * Dlaczego jest to _default_ zachowanie Pythona (z jakichś dobrych powodów)? * Czy jest jakaś praktyka, aby temu zapobiec bez zmiany każdej klasy? * Czy martwisz się takim zachowaniem w poważnych projektach? nie uważasz, że jest to podatne na błędy? lub możesz go po prostu zignorować (opierając się na uzupełnianiu kodu IDE)


title: Uczysz programowania komputerowego?

text: Odkryłem ideę formalnego nauczania programowania komputerowego (na poziomie college'u). Jaki stopień naukowy byłby wymagany na większości uczelni do nauczania, a także ogólne porady, gdyby ktoś pasował do takiej dziedziny?


title: Czy skompilowaną bibliotekę C++11 (lib,dll, itp.) można połączyć w starszych kompilatorach C++?

text: Czy starsze kompilatory C++ (np. VS2008 i gcc3.4) mogą łączyć się z zewnętrznymi bibliotekami napisanymi w C++11? Moim zdaniem pliki .lib C++11 są na tym etapie tylko kodem bajtowym i nie powinno to przeszkadzać starszym kompilatorom, jak został wygenerowany, o ile jest to w jakiś sposób możliwe do rozwiązania i wywołania. Zajmuję się tworzeniem małej biblioteki, której API powinno nadal obsługiwać użytkowników C++03. Tak więc, patrząc w przyszłość, zastanawiam się, czy można zaimplementować moją bibliotekę za pomocą przydatnych funkcji, takich jak `std::unique_ptr` i tym podobnych, czy też muszę po prostu trzymać się `boost::`?


title: Czy istnieje pakiet blogów/forum (open-source) oparty na ReST?

text: Strona, nad którą pracuję, jest prawie w całości w Javascript, po prostu wraca (poprzez Ajax) do serwera w celu uwierzytelnienia, dostępu do bazy danych i tym podobnych rzeczy. Mój szef chciałby, żebym dodał możliwość blogowania, forum i komentowania. Nie chcę wdrażać tego od zera i na pewno nie chcę integrować jakiegoś ohydnego kodu HTML generującego HTML. Idealnie, szukam pakietu, który wykona całą pracę zaplecza i oferuje interfejs ReST, dzięki czemu mogę napisać interfejs użytkownika oparty na Javascript, który ładnie integruje się z istniejącą witryną. Czy coś takiego istnieje?


title: Ile więcej powinienem pobierać za kod źródłowy projektu freelance?

text: Obecnie pracuję jako freelancer i po raz pierwszy spotkałem się z klientem, który również chce mieć kod źródłowy. Ten klient jest właścicielem firmy zajmującej się tworzeniem oprogramowania i chce mieć prawa do kodu źródłowego, ale ja też zachowam swoje prawa. Oznacza to, że mogą używać mojego kodu do tworzenia podobnych aplikacji wykorzystujących mój kod dla różnych klientów i to samo dotyczy mnie. Ile więcej powinienem obciążyć mojego klienta?


title: Kto powinien inicjować zależności w aplikacji TDD?

text: Próbuję nauczyć się implementacji TDD za pomocą szyderstwa/fałszywych obiektów. Jednym z pytań, które mam, jest jak zainicjować zależność w aplikacji, która implementuje TDD? Przykład z tego artykułu Beginning Mocking With Moq 3 pokazuje: public class OrderWriter { private readonly IFileWriter fileWriter; public OrderWriter(IFileWriter fileWriter) { this.fileWriter = fileWriter; } public void WriteOrder(Order Order) { fileWriter.WriteLine(String.Format("{0},{1}", order.OrderId, order.OrderTotal)); } } W tym przykładzie konstruktor przyjmuje parametr `IFileWriter`, jak przypuszczam, ponieważ chcesz podać prawdziwy program do zapisywania plików w przypadku rzeczywistej aplikacji i fałszywy do testu jednostkowego. Moje pytanie brzmi, kto w rzeczywistej aplikacji dostarczy ten parametr? Przypuszczam, że będzie to rozmówca tej aplikacji. Co jeśli ma również zależność w konstruktorze? Czy za to też będzie odpowiedzialny kod dzwoniącego? Może lepszym sposobem jest użycie fabryki. Jak miałaby działać ta fabryka? A jak będzie dystrybuowana fabryka? Czy będzie w parametrze konstruktora jak w powyższym sposobie?


title: Instalator programu Visual Studio — dlaczego Eksplorator rozwiązań jest po prawej stronie?

text: Za każdym razem, gdy instaluję VS (niezależnie od wersji sprzed lat), instaluje się z Eksploratorem rozwiązań po prawej stronie. Teraz, ponieważ większość interfejsów użytkownika ma nawigację w lewej kolumnie (i u góry okna widoku), a zawartość po prawej stronie tej nawigacji, zawsze wydaje mi się to błędne. Przeciągam więc eksplorator rozwiązań po lewej stronie ekranu i tam go zadokuję. Ale nigdy nie widziałem, żeby robił to inny programista. Biorąc pod uwagę, jak większość programistów zwykle lubi dostosowywać swoje środowisko, dodając swój ulubiony edytor tekstu, przeglądarkę, wtyczki, skrypty smarmonkey itp. **Dlaczego programiści Visual Studio nigdy nie wydają się wprowadzać tej prostej zmiany interfejsu użytkownika?** Czy ktoś inny to robi lub czy po prostu krzyczę w ciemności?


title: Czy powinienem przejść od testowania do programowania?

text: Mam 1,2 letnie doświadczenie w testowaniu w dużej firmie MNC, mam dobrą znajomość programowania w Javie (Core,Servlets). Ukończyłem certyfikację ISTQB (testowanie) i staram się o certyfikację HP QTP. Wcale nie jestem zadowolony z ręcznego testowania. Czy mogę przejść od testowania do programowania? jeśli tak, jaki rozwój powinienem przesunąć Java lub Ruby on Rails? (nie mam pojęcia o tworzeniu stron internetowych, ale moi znajomi sugerują Ruby On Rails)? Jakie wszystkie umiejętności powinienem rozwinąć, aby przejść do rozwoju? jaki będzie właściwy czas na zmianę? jeśli ROR mogę uzyskać dobre możliwości pracy? Proszę zasugeruj mi .


title: W którym momencie porzuciłbyś niektóre ze swoich zasad tworzenia oprogramowania w celu uzyskania większych pieniędzy?

text: Chciałbym rzucić to pytanie, aby ciekawie zobaczyć, gdzie jest medium. Przyznam, że w ciągu ostatnich 12 miesięcy nauczyłem się TDD i wielu wartości Agile w tworzeniu oprogramowania. Byłem tak przytłoczony tym, o ile lepszy stał się mój rozwój oprogramowania, że nigdy nie porzuciłbym ich z zasady. Dopóki… Zaoferowano mi stanowisko kontraktowe, które podwoiło moje wynagrodzenie za cały rok. Firma, do której dołączyłem, nie stosowała żadnej konkretnej metodologii, zespół nie słyszał o niczym takim jak zapachy kodu, SOLID itp., a ja z pewnością nie uszło mi na sucho spędzanie czasu na TDD, gdyby zespół nigdy nie widziałem testy jednostkowe w praktyce. Czy jestem wyprzedany? Nie, nie do końca... Kod zawsze będzie pisany „czysto” (zgodnie z naukami Wujka Boba), a zasady SOLID zawsze będą stosowane do kodu, który piszę, gdy są potrzebne. Testowanie zostało dla mnie jednak porzucone, firma nie mogła sobie pozwolić na przekazanie tak nieznanego zespołu zespołowi, który szczerze mówiąc, nawet ja tworzyłem frameworki testowe, nigdy nie używałby/utrzymywałby poprawnie frameworka testowego. Używając tego jako przykładu, w jakim punkcie, twoim zdaniem, programista nigdy nie powinien porzucać swoich zasad rzemieślniczych ze względu na pieniądze/inne korzyści dla nich osobiście? Rozumiem, że może to być bardzo osobista opinia na temat tego, jak bardzo zależy nam na własnych potrzebach, potrzebach biznesowych, dbałości o rzemiosło itp. Można jednak wziąć pod uwagę, że na przykład testowanie może zostać porzucone, jeśli firma zdecyduje, że woli mieć zespół testowy, zamiast rozumieć testowanie jednostkowe w programowaniu, czy byłoby to coś, za co mógłbyś sobie wybaczyć, tak jak ja? Tak więc, biorąc pod uwagę, że jest coś, co rzuciłbyś, zwykle powinien istnieć taki sam koszt w biznesie, który zrekompensuje to, co porzucisz - miejmy nadzieję, chyba że masz ochotę nabić własne kieszenie, a nie współpracę społecznościową/społeczną; ). Podwoić swoje pieniądze, wrócić do RAD? Albo idź dalej i poszukaj kogoś, kto robi Agile i nigdy nie oglądaj się za siebie...


title: Jak/gdzie uruchomić algorytm na dużym zbiorze danych?

text: Chciałbym uruchomić algorytm PageRank na grafie z 4 000 000 węzłów i około 45 000 000 krawędzi. Obecnie korzystam z grafowej bazy danych neo4j i klasycznej relacyjnej bazy danych (postgres), a do projektów programistycznych używam głównie C# i Javy. Czy ktoś wie, jaki byłby najlepszy sposób na wykonanie obliczenia PageRank na takim wykresie? Czy istnieje sposób na zmodyfikowanie algorytmu PageRank w celu uruchomienia go na komputerze domowym lub serwerze (48 GB RAM) lub czy jest jakaś użyteczna usługa w chmurze, która przesyła dane wzdłuż algorytmu i pobiera wyniki? Na tym etapie projekt jest na etapie badań, więc w przypadku korzystania z usługi w chmurze, jeśli to możliwe, chciałby skorzystać z takiego dostawcy, który nie wymaga dużej administracji i konfiguracji usługi, a zamiast tego skupia się tylko na jednokrotnym uruchomieniu algorytmu i uzyskaniu wyników bez większych nakładów pracy administracyjnych.


title: Czy w tym przypadku powinienem używać wydarzeń?

text: Tworzę odtwarzacz wideo, taki jak niestandardowy odtwarzacz YouTube. Wszystkie elementy GUI (pasek postępu, odtwarzacz wideo, przycisk odtwarzania, ...) są różnymi klasami, ale oczywiście potrzebuję ich do komunikacji. Po kliknięciu paska postępu lub przesunięciu suwaka należy wysłać polecenie „szukaj(x)” do odtwarzacza wideo. Podobnie odtwarzacz wideo musi aktualizować pasek postępu co klatkę. Obecnie robię to, mając prawie wszystkie elementy połączone ze sobą. Więc kiedy tworzę pasek postępu, mówię mu, gdzie jest odtwarzacz wideo. Ale po pewnym czasie staje się to coraz bardziej skomplikowane i zastanawiam się, czy wydarzenia nie byłyby lepszym sposobem na zrobienie tego. Lub główna klasa kontrolera, która ma wszystkie połączenia. Co powinienem zrobić?


title: Jaki sprzęt otrzymują nowo zatrudnieni programiści w różnych firmach?

text: Patrząc na różne zdjęcia/wycieczki po biurach firm zajmujących się oprogramowaniem (na przykład Facebook), widzę wiele tego samego sprzętu, jeśli chodzi o monitory (monitory Dell). Zastanawiałem się, kiedy firmy zatrudniają nowych programistów, czy programista ma do wyboru powiedzmy duży monitor + laptop, komputer stacjonarny + monitor 24" (2?), czy jakaś inna kombinacja? PS. Jeśli wiesz na pewno, byłoby to pomocne jest wymienienie opcji w różnych firmach, np. Microsoft, Apple, Google, chyba że informacje są poufne.


title: Akcje UML z przepływami obiektów i kontroli

text: Rozważ akcję UML zawartą w działaniu UML definiującą zachowanie klasyfikatora. Takie działanie ma trzy piny wejściowe połączone z innymi pinami wyjściowymi o różnym działaniu za pomocą krawędzi przepływu obiektu. Posiada również przychodzący przepływ sterowania. Moje pytanie brzmi: czy akcja rozpoczyna się, gdy wszystkie tokeny _ te pochodzące ze wszystkich pinów wejściowych i te pochodzące z przepływu sterowania _ są dostępne? Co zrobić, jeśli mam więcej niż jeden przepływ sterowania?


title: Czy powszechne jest wykupienie polisy ubezpieczeniowej na prace związane z opracowaniem umowy?

text: Nie jestem pewien, czy to najlepsze miejsce na to pytanie, ale nie wiem, gdzie jeszcze zadać pytanie. ## Tło Jestem programistą kontraktowym i właśnie zostałem poproszony o przedstawienie ogólnej polisy odpowiedzialności cywilnej na mój następny koncert. W ciągu 6-7 lat nigdy mnie o to nie pytano. ## Pytanie Czy to powszechne? Jeśli tak, czy ktoś może polecić dobrego underwritera, który skupia się na tym, co robimy jako deweloperzy oprogramowania kontraktowego? Zdaję sobie sprawę, że Google może mi pomóc w znalezieniu ubezpieczycieli, ale nie zapewni mi bezstronnej opinii publicznej na temat tego, które firmy faktycznie rozumieją, co robimy, i nie uwzględni tego w cenie polisy.


title: Czy auto sprawia, że kod C++ jest trudniejszy do zrozumienia?

text: Widziałem konferencję Herba Suttera, na której zachęcał każdego programistę C++ do używania `auto`. Jakiś czas temu musiałem przeczytać kod C#, w którym `var` był szeroko używany, a kod był bardzo trudny do zrozumienia — za każdym razem, gdy użyto `var`, musiałem sprawdzić typ zwracany po prawej stronie. Czasem więcej niż raz, bo po jakimś czasie zapomniałem o typie zmiennej! Wiem, że kompilator zna typ i nie muszę go pisać, ale powszechnie przyjmuje się, że powinniśmy pisać kod dla programistów, a nie dla kompilatorów. Wiem też, że łatwiej jest napisać: auto x = GetX(); Niż: someWeirdTemplate<someOtherVeryLongNameType, ...>::someOtherLongType x = GetX(); Ale jest to napisane tylko raz, a typ zwracany `GetX()` jest sprawdzany wiele razy, aby zrozumieć, jaki ma typ `x`. To sprawiło, że zacząłem się zastanawiać — czy „auto” utrudnia zrozumienie kodu C++?


title: Połącz chmurę z automatyczną synchronizacją i VCS

text: To pytanie doprowadziło mnie do kolejnego pytania: ** czy istnieje VCS/narzędzie do VCS, które automatycznie tworzy kopię zapasową kodu źródłowego między ostatnim kasą a bieżącymi zmianami**? Miałem problem z utratą niezatwierdzonych zmian w kodzie źródłowym zaledwie tydzień temu. Nie chciałem jeszcze zatwierdzać, ponieważ zmiany były niekompletne. Ale wtedy błąd podczas przenoszenia danych na pamięć USB spowodował utratę danych. Odwrotnie, co robi usługa w chmurze (taka jak Google Drive, SkyDrive, DropBox, ...): śledzi **każdą** wprowadzoną przez Ciebie zmianę! Straciłeś swoje dane? To żaden problem, ponieważ masz najnowszą wersję online. Jak więc wyglądałoby połączone rozwiązanie? Oferowałby pełną funkcjonalność VCS, w tym automatyczną synchronizację wszelkich **pośrednich zmian** między dwoma zatwierdzeniami/wykasowaniem do tymczasowej lokalizacji online.


title: Mój menedżer nie znosi dokumentacji w naszym dużym projekcie. Co powinienem zrobić?

text: Pracuję w małym zespole nad dużym złożonym projektem oprogramowania. Chcę udokumentować wszystkie wymagania, ale mój kierownik powiedział mi, że to strata czasu. Próbowałem tego samego z designem i funkcjonalnością i spotkałem się z tym samym zniechęceniem. Odpowiadam za wszystko, co się nie udaje i oczywiście nie wszystko pamiętam. Mimo to powiedziano mi, żebym nie tworzył dokumentacji. Jak mam podejść do tego problemu?


title: Klasa String oparta na grafemach?

text: Zastanawiam się, dlaczego nie mamy niektórych klas ciągów, które reprezentują ciąg klastrów grafemów Unicode zamiast punktów kodowych lub znaków. Wydaje mi się, że w większości aplikacji programistom łatwiej byłoby uzyskać dostęp do komponentów grafemu, gdy jest to konieczne, niż organizować je z punktów kodowych, co wydaje się konieczne, choćby tylko po to, by uniknąć przypadkowego zerwania łańcucha w „środkowym grafemie” (przynajmniej w teorii). Wewnętrznie klasa ciągu może używać kodowania o zmiennej długości, takiego jak UTF-8, UTF-16, lub w tym kontekście nawet UTF-32 ma zmienną długość; lub zaimplementuj podklasy dla wszystkich z nich (i opcjonalnie skonfiguruj wybór w czasie wykonywania, aby różne języki mogły używać swoich optymalnych kodowań). Ale gdyby programiści mogli „widzieć” jednostki grafemów podczas sprawdzania ciągu, czy kod obsługujący ciągi nie byłby ogólnie bliższy osiągnięcia poprawności i bez dodatkowej złożoności?


title: Czy tak dynamiczny język radzi sobie z dynamicznymi wymaganiami?

text: Pytanie jest w tytule. Chcę, aby moje myślenie zweryfikowali doświadczeni ludzie. Możesz dodać więcej lub zignorować moją opinię, ale podaj powód. Oto przykładowe wymaganie: Załóżmy, że musisz zaimplementować grę walki. Początkowo w grze występują wyłącznie wojownicy, którzy mogą atakować się nawzajem. Każdy wojownik może uderzać, kopać lub blokować nadchodzące ataki. Zawodnicy mogą mieć różne style walki: Karate, Judo, Kung Fu... To tyle, jeśli chodzi o proste uniwersum gry. W obiektach obiektowych, takich jak Java, można to zaimplementować w następujący sposób: abstract class Fighter { int hp, attack; void punch (Myśliwiec innyFighter); void kick(Fighter otherFighter); pusty blok (Figther otherFighter); }; class KarateFighter extends Fighter { //...implementacja...}; class JudoFighter extends Fighter { //...implementacja... }; class KungFuFighter extends Fighter { //...implementacja ... }; To jest w porządku, jeśli gra pozostanie taka na zawsze. Jednak w jakiś sposób projektanci gry decydują się na zmianę motywu gry: zamiast prostej bijatyki, gra ewoluuje w RPG, w której postacie mogą nie tylko walczyć, ale wykonywać inne czynności, tj. postać może być księdzem, księgowy, naukowiec itp. W tym momencie, aby uczynić to bardziej ogólnym, musimy zmienić strukturę naszego pierwotnego projektu: „Fighter” nie jest już używany w odniesieniu do osoby; odnosi się do zawodu. Wyspecjalizowane klasy Fighter (KaraterFighter, JudoFighter, KungFuFighter) . Teraz musimy stworzyć klasę generyczną o nazwie `Person`. Aby jednak dostosować tę zmianę, muszę zmienić sygnatury metod oryginalnych operacji: class Person { int hp, attack; Lista<Zawód> zestaw umiejętności; }; klasa abstrakcyjna Zawód {}; class Fighter extends Profession { void punch(Person otherFighter); void kick(Osoba innaFighter); void blok (osoba innaFighter); }; class KarateFighter extends Fighter { //...implementacja...}; class JudoFighter extends Fighter { //...implementacja... }; class KungFuFighter extends Fighter { //...implementacja ... }; class Księgowy extends Zawód { void oblicz podatek(osoba p) { //...wdrożenie...}; void obliczyćPodatek(Firma c) { //...wdrożenie...}; }; //... więcej zawodów... Oto problemy: 1. Aby dostosować się do zmian metod, muszę naprawić miejsca, w których wywoływane są zmienione metody (refaktoryzacja). 2. Za każdym razem, gdy wprowadzane jest nowe wymaganie, obecny projekt konstrukcyjny musi zostać przerwany w celu dostosowania zmian. To prowadzi do pierwszego problemu. 3. Sztywna struktura utrudnia ponowne wykorzystanie kodu. Funkcja może akceptować tylko predefiniowane typy, ale nie może akceptować przyszłych nieznanych typów. Napisana funkcja jest związana ze swoim obecnym wszechświatem i nie ma możliwości dostosowania się do nowych typów, bez modyfikacji lub przepisywania od zera. Widzę, że Java ma wiele przestarzałych metod. OO jest przypadkiem ekstremalnym, ponieważ ma dziedziczenie zwiększające złożoność, ale ogólnie dla języka statycznie typowanego typy są bardzo ścisłe. W przeciwieństwie do tego, język dynamiczny może obsłużyć powyższy przypadek w następujący sposób: ;;fighter1 punch fighter2 (defun perform-punch (fighter1 fighter2) ...implementacja... ;;fighter1 kick fighter2 (defun perform-kick (fighter1 fighter2) ...implementacja... ) ;;fighter1 blokuje ataki fighter2 (defun perform-block (fighter1 fighter2) ...implementacja... ) `fighter1` i `fighter2` mogą być dowolne, o ile mają wymagane dane do obliczeń; lub metody (typowanie kaczki). Nie musisz zmieniać typu „Wojownik” na „Osoba”. W przypadku Lispa, ponieważ Lisp ma tylko jedną strukturę danych: listę, jeszcze łatwiej jest dostosować się do zmian. Jednak inne języki dynamiczne również mogą wykazywać podobne zachowania. Pracuję głównie z językami statycznymi (głównie C i Java, ale praca z Javą była dawno temu). W tym roku zacząłem uczyć się Lispu i kilku innych dynamicznych języków. Widzę, jak to pomaga poprawić moją produktywność.


title: Lepiej wstrzyknąć kontener IoC lub użyć wzorca Service Locator?

text: Mam kontener IoC (jeśli chcesz, aby przyjrzał się konkretnym, jest bardzo podobny do Unity) i pracuję nad tym, jak chcę go zintegrować z moją aplikacją. Moim ogólnym celem tego ćwiczenia jest przekształcenie tego przerażającego kodu, który napisałem, w coś znacznie bardziej testowalnego. Potrafię tworzyć kontenery IoC i rejestrować typy i rozumiem podstawy, jak ma to osiągnąć swój cel. Moje pytanie brzmi, czy powinienem wstrzykiwać kontener do obiektów, które tego potrzebują, czy też obiekty, które tego potrzebują, powinny go wyszukiwać za pomocą wzorca lokalizatora usług? Realistycznie widzę, że muszę odwoływać się do kontenera w dwóch lub trzech warstwach mojej aplikacji.


title: Tworzenie stron internetowych w Pythonie/bazie danych

text: Chcę stworzyć własną stronę internetową, która umożliwiłaby mi dostęp do bazy danych na serwerze oraz wykonywanie wstawek i wyszukiwań w przyjazny dla użytkownika sposób. Jestem doświadczonym użytkownikiem linuxa i C/C++, a także mam doświadczenie z Pythonem i sqlite3, ale nie mam żadnego doświadczenia w tworzeniu stron internetowych, więc nie mam pojęcia, od czego zacząć. Szukałem w Internecie i najlepszym, jaki wymyśliłem, był serwer Apache/Nginx wraz z fcig lub wscgi i Django, abym miał integrację bazy danych i Pythona za pośrednictwem aplikacji Django. Czy ktoś może mi powiedzieć, czy to jest droga, czy jest jakiś łatwiejszy (lub lepszy) sposób na osiągnięcie tego, czego chcę?