title: C++ Korzystanie z funkcji wewnętrznych w sposób wieloplatformowy

text: Mam wieloplatformową bibliotekę matematyczną, nad którą pracuję i chcę się upewnić, że niektóre typowe operacje są wykonywane w zoptymalizowany sposób, więc chcę użyć niektórych wewnętrznych funkcji opakowanych w funkcje wbudowane do obliczania takich rzeczy, jak sqrt(float/ podwójnie). Powinienem wspomnieć, że w tym momencie planuję celować tylko w kilka wybranych platform, które są wymienione w poniższym źródle. Uruchomiłem pojedynczy prototyp funkcji sqrt(), ale zanim przejdę dalej, chcę wiedzieć, czy robię coś rażąco złego. Śledzę dokumentację pod adresem: http://msdn.microsoft.com/en-us/library/windows/desktop/ff471376%28v=vs.85%29.aspx http://gcc.gnu.org/onlinedocs/ gcc/Other-Builtins.html Zauważysz też, że pod funtem zdefiniowanym dla macintosha mam pustą linię. Wiem, że nowsze wersje używają clang/llvm. Jak uzyskać dostęp do wewnętrznych funkcji w nowszych wersjach systemu Mac OS i powiązanych z nim kompilatorów? #ifndef INTRINSICS_H_INCLUDED #define INTRINSICS_H_INCLUDED #if defined(_WIN32) #elif defined(__gnu_linux__) || define(__linux__) #elif defined(__ANDROID__) #elifdefined(__CYGWIN__) #elifdefined(macintosh) #else #include <cmath> #endif #ifdefined(_WIN32) #funkcja pragma( sqrt ) #endif template<typename T> inline float sqrt(T &val) { #jeśli zdefiniowano(_WIN32) return sqrt(val); #zdefiniowano elif(__gnu_linux__) || define(__linux__) return __builtin_sqrt(val); #elif define(__ANDROID__) return __builtin_sqrt(val); #elif define(__CYGWIN__) return __builtin_sqrt(val); #elif define(macintosh) // Jak to zrobić #else return std::sqrt(val); #endif } #jeśli zdefiniowano(_WIN32) #funkcja pragma( sqrt ) #endif #endif


title: Jakiego poziomu zapytań powinienem oczekiwać od ankietera w związku z moimi oficjalnymi zadaniami związanymi z oprogramowaniem?

text: _**Założenie:_** Stanowisko, na które aplikuję: _Programista_ Doświadczenie w latach: _5_ _**Tło:_** > Pracuję w firmie zajmującej się robotyką i nie jestem robotykiem. > Nie zajmowałem się jeszcze „projektem” sam. Tak więc, rodzaj pracy, którą zajmowałem się do tej pory, to "małe" elementy związane z programowaniem w C++ w projektach. > > _Małe przykłady:_ > 1\. Ktoś już stworzył klasy i napisał programowanie gniazd dla tego oprogramowania X z UDP. Moim zadaniem było dodanie kodu TCP za pomocą Qt API. > 2\. Z jakiegoś powodu musiałem dodać funkcję "callback" (za pomocą szablonów C++) gdzieś > w projekcie. > > _Kolejny nieco większy przykład:_ > Musiałem ustawić funkcjonalność wymiany wiadomości pomiędzy dwoma > komponentami (zgodnie ze standardowym protokołem) w C++. Oba te przykładowe zadania dotyczą autorskiego oprogramowania tej firmy. _**Jakiego rodzaju pytań (na jakiej głębokości) powinienem oczekiwać od ankietera w związku z tymi przykładowymi zadaniami?_**


title: Czy analityk powinien zdefiniować programistów i ich staż pracy potrzebny w projekcie?

text: To może być oczywiste, ale nie jestem pewien. Czy analityk, który przeprowadza wywiad z klientem, zbiera i analizuje wymagania, a następnie podaje oszacowanie, określa również ile i z jakim doświadczeniem programiści powinni go opracować? Może nie jestem pewien, jak zabieram się za alokację, może to po prostu nie moja praca.


title: Czy powinienem „walczyć”, aby użyć środowiska programistycznego, którego chcę używać i jak?

text: W niektórych projektach jestem jedynym programistą. Kiedyś wybierałem środowisko, które lubię, podobnie jak C# i C++. Ale tym razem nowe zadanie może przyjść od innego kierownika działu, który pisał programy około 20 lat temu. Ta osoba odrzuca wszystkie nowe technologie, takie jak .net, a nawet C++ bez rozsądnego powodu. Jasne, wszystko dałoby się napisać w C i mogłoby to być szybkie i stabilne, ale zmuszanie mnie (jako tylko jednego programistę) do pisania dużych, skalowalnych projektów w zwykłym C nie jest dla mnie rozsądne. * Czy programiści muszą być świadomi takich kierunków? * Czy programiści muszą walczyć o wybór środowiska programistycznego? Moja obecna pozycja jest trochę dziwna. Nie podoba mi się ta sytuacja i mówię, że jestem w stanie rozpocząć projekt w C, ale nie podam żadnego czasu rozwoju tylko pozorne minimum i myślę, że ten czas i tak nie będzie do zaakceptowania. To może sprawić, że będę wyglądać na naprawdę złego programistę. * Co mi zasugerujesz w takiej sytuacji? * Czy doświadczyłeś takich sytuacji?


title: Jak przekonać członków zespołu o istnieniu „mandelbug”

text: Tworzymy aplikację; zawiera bibliotekę opracowaną przez innego programistę, ta biblioteka komunikuje się z serwerem za pośrednictwem wielu połączeń sieciowych, a to wymaga współpracy wielu wątków. Kod po stronie serwera jest dość skomplikowany i nie mamy dostępu do kodu źródłowego. Ostatnio odkryłem czasami mandelbuga powodującego awarię aplikacji. Mogłem go odtworzyć raz i otrzymałem ślad stosu, więc otworzyłem raport o błędzie. Sam błąd jest łatwy do naprawienia (nieprzechwycony wyjątek sieciowy w jednym z wątków w tle, który powoduje zamknięcie programu przez CLR). Problem polega na tym, że programista odmawia naprawy błędu, ponieważ „nie jest przekonany, że istnieje”. Niestety dla mnie szef jest po jego stronie i mówi, że tego błędu nie da się naprawić, chyba że zrobię „solidny przypadek testowy”, aby udowodnić istnienie błędu i zrobić test jednostkowy weryfikujący, że zniknął. Co jest w zasadzie niemożliwe ze względu na charakter błędu. Jakakolwiek rada?


title: Naprawdę nie rozumiem "Backend/Serverside", jeśli chodzi o tworzenie stron internetowych?

text: Co dokładnie robią programiści po stronie backendu/serwera w świecie tworzenia stron internetowych? Chyba tak naprawdę nie rozumiem całej koncepcji. Zrobiłem układy HTML/CSS i projekt strony internetowej oraz trochę SQL z PHP (wciąż rozwijam swoje umiejętności, to dla mnie bardziej poboczny projekt). Zrobiłem też niewielką ilość JavaScript/JQuery. Ale nie rozumiem pracy "backendowej", takiej jak języki skryptowe (Rails/Python/etc) i tym podobne. Co dokładnie z nimi „robisz”? Czy są jakieś książki na ten temat? Nie jestem nawet pewien, co to znaczy. Czy to trochę tak, jak robią to Web Application Frameworks? Czy nie tak bardzo?


title: Czy schemat Model-View-Presenter (MVP) jest przydatny dla systemu Android?

text: Jak oddzielić View i Presenter w Androidzie, podczas gdy reakcje na akcje użytkownika (część Presenter MVP) są ustawione na te same czynności, które pokazują elementy GUI (część View MVP). „W widoku modelu prezentera, tak jak mówią Martin Fowler lub Michael Feathers [2], logika interfejsu użytkownika jest podzielona na klasę o nazwie prezenter, która obsługuje wszystkie dane wejściowe od użytkownika i mówi „głupi” widokowi, co i kiedy wyświetlacz” (cytowane stąd). Do tej pory myślałem, że jedną z głównych funkcji Androida jest Aktywność **_smart_**, która podejmuje działania, reaguje na nie i pokazuje wyniki. Czy schemat MVP jest sprzeczny z filozofią Androida? Czy warto spróbować zrealizować to na Androidzie? Jeśli tak, jak można to zrobić?


title: Dlaczego Java w wersji 1.X jest określana jako Java X?

text: Widziałem, że Java 1.2 jest również znana jako Java 2. Czy „Java 1.x” i „Java x” (na przykład „Java 1.6” i „Java 6”) odnoszą się do tej samej wersji Javy? A jeśli tak, to po co ta dwoistość?


title: Czy konieczność przewijania w poziomie sprawia, że kod jest mniej czytelny?

text: Cóż, prawda? Czy uważa się to za złą praktykę? IMO jest mniej czytelny. Nienawidzę przewijania w prawo, potem z powrotem w lewo, w prawo, w lewo i tak dalej. To sprawia, że kodowanie jest bardziej bolesne i czasami dezorientuje mnie. Na przykład za każdym razem, gdy koduję długi ciąg, zrobię następujące... bigLongSqlStatement = "select * from sometable st internal join inna tabela w" + "on st.id = at.id" + "i tak dalej.. ." + "i tak dalej..." + "i tak dalej..."


title: Proste podejście do Rails

text: Ostatnio zająłem się tworzeniem stron internetowych poprzez framework PHP, CodeIgniter. Znałem trochę PHP, zanim zacząłem uczyć się tego frameworka i ogólnie uważałem, że jest to bardzo łatwe do nauczenia. Dokumentacja CodeIgnitera bardzo ułatwiła rozpoczęcie pracy i ustalenie, co osiągnął każdy konkretny pomocnik/biblioteka/funkcja i jak był używany. Po stworzeniu nieco podstawowego CMS/Forum we frameworku, postanowiłem rozpocząć naukę Railsów i zobaczyć, który bardziej mi się podoba. Nie trzeba dodawać, że miałem trochę trudności ze zrozumieniem Railsów. Nie jestem pewien, czy Rails po prostu zajmuje więcej czasu na naukę, nie pasuje do mojego sposobu myślenia, czy też używam niewłaściwej książki do nauki. Pracowałem przez http://ruby.railstutorial.org/ z niewielkim sukcesem. Rozumiem wiele głównych punktów, ale czuję, że brakuje mi prawdziwego zrozumienia. Wydaje się, że wiele się dzieje „pod maską” z Railsami w porównaniu z CodeIgniterem. Próbowałem szukać pomocy w API Rails, ale nie znalazłem tam wiele pomocy. Mniej więcej szukam książki lub arkusza referencyjnego, który jasno opisuje, co robi każda konkretna linia kodu lub co dzieje się za kulisami. Coś podobnego do dokumentacji CodeIgnitera lub książki, która zawiera mniej słów i bardziej podstawowe przykłady dla każdego aspektu frameworka. Próbowałem też przeczytać przejmujący przewodnik Why's po Ruby, ale zawierał on zbyt wiele gadania, a za mało przykładów i jasnej dokumentacji. Czuję, że najłatwiej jest mi się czegoś nauczyć, gdy jest to mocno powiązane z podstawową logiką/matematyką. W końcu wierzę, że będzie to po prostu połączenie API Railsów i spędzanie większej ilości czasu na pracy z frameworkiem; mam jednak nadzieję, że ktoś uczy się w ten sam sposób co ja i ma sugestię. Ponownie, jestem bardzo nowy w programowaniu i nie spędziłem więcej niż 40 godzin pracując z PHP/Ruby połączonym, więc przepraszam, jeśli moje pytanie nie ma sensu lub jeśli to tylko kwestia poświęcenia dużo więcej czasu w tym. Jeśli Ruby nie wydaje mi się właściwym językiem, czy Python byłby lepszą opcją? Moim planem było zbudowanie czegoś podstawowego z PHP/Pythonem/Ruby i podjęcie decyzji, które podoba mi się najbardziej. **TLDR:** Próbuję nauczyć się Railsów w ograniczonym czasie wolnym. Odkrycie, że nauka zajmuje dużo więcej czasu niż CodeIgniter. Nie jestem pewien, czy po prostu nie udało mi się znaleźć książki / arkusza referencyjnego podobnego do dokumentacji CI. Szukasz sugestii lub porad. Z góry dziękuję za wszelkie rady lub sugestie.


title: Wzór dla klasy, która robi tylko jedną rzecz

text: Powiedzmy, że mam procedurę, która _robi rzeczy_ : void doStuff(initalParams) { ... } Teraz odkrywam, że "robienie rzeczy" jest dość skomplikowaną operacją. Procedura staje się duża, dzielę ją na wiele mniejszych procedur i wkrótce zdaję sobie sprawę, że posiadanie pewnego rodzaju _stanu_ byłoby przydatne podczas robienia rzeczy, więc muszę przekazywać mniej parametrów między małymi procedurami. Tak więc rozkładam to do własnej klasy: class StuffDoer { private someInternalState; public Start(initalParams) { ... } // kilka prywatnych procedur pomocniczych tutaj ... } A potem nazywam to tak: new StuffDoer().Start(initialParams); lub tak: new StuffDoer(initialParams).Start(); I to jest złe. Używając .NET lub Java API, nigdy nie wywołuję `new SomeApiClass().Start(...);`, co sprawia, że podejrzewam, że robię to źle. Jasne, mógłbym uczynić konstruktor StuffDoer prywatnym i dodać statyczną metodę pomocniczą: public static DoStuff(initalParams) { new StuffDoer().Start(initialParams); } Ale wtedy miałbym klasę, której zewnętrzny interfejs składa się tylko z jednej statycznej metody, co również wydaje się dziwne. Stąd moje pytanie: Czy istnieje dobrze ugruntowany wzorzec dla tego typu klas, które * mają tylko jeden punkt wejścia i * nie mają „rozpoznawalnego z zewnątrz” stanu, tj. Stan instancji jest wymagany tylko _podczas_ wykonywania tego jednego punktu wejścia?


title: Czy prawidłowe jest naprawianie błędów bez dodawania nowych funkcji podczas wydawania oprogramowania do testowania systemu?

text: To pytanie jest skierowane do doświadczonych testerów lub przewodów testowych. Oto scenariusz z projektu oprogramowania: załóżmy, że zespół programistów ukończył pierwszą iterację 10 funkcji i udostępnił ją do testów systemowych. Zespół testowy stworzył przypadki testowe dla tych 10 funkcji i oszacował 5 dni na testowanie. Zespół programistów oczywiście nie może siedzieć bezczynnie przez 5 dni i zaczyna tworzyć 10 nowych funkcji do następnej iteracji. W tym czasie zespół testowy znalazł defekty i zgłosił kilka błędów. Błędy są traktowane priorytetowo i niektóre z nich muszą zostać naprawione przed kolejną iteracją. Haczyk polega na tym, że nie zaakceptują nowej wersji z żadnymi nowymi funkcjami lub zmianami w istniejących funkcjach, dopóki wszystkie te błędy nie zostaną naprawione. Zespół testowy twierdzi, że właśnie w ten sposób możemy zagwarantować stabilne wydanie do testów, jeśli wraz z poprawką błędów wprowadzimy również nowe funkcje. Nie mogą również wykonywać testów regresji wszystkich swoich przypadków testowych w każdej iteracji. Najwyraźniej jest to właściwy proces testowania zgodnie z ISQTB. Oznacza to, że zespół programistów musi stworzyć gałąź kodu wyłącznie do naprawy błędów i kolejną gałąź, w której kontynuują rozwój. Łączenie jest większe, zwłaszcza w przypadku refaktoryzacji i zmian architektonicznych. Czy możesz się zgodzić, jeśli jest to powszechna zasada testowania. Czy obawa zespołu testowego jest słuszna. Czy spotkałeś się z tym w praktyce w swoim projekcie.


title: Jakie jest dobre, lekkie repozytorium źródeł dla rozwoju lokalnego?

text: Robię kilka prototypów lokalnie, które chciałbym zachować pod kontrolą źródła (do celów tworzenia kopii zapasowych i przywracania), ale niekoniecznie chcę je publikować jako open source lub udostępniać online innym osobom. Jaki system kontroli źródła poleciłbyś do rozwoju lokalnego? Każda konfiguracja lub przejście do mojego scenariusza są bardzo mile widziane. Szukam: * Łatwa konfiguracja i administracja. Ponieważ jest to moja lokalna maszyna, jestem ograniczony do systemu operacyjnego Windows i naprawdę chciałbym zminimalizować ilość zmian w konfiguracji środowiska i niezbędną krzywą uczenia się. Będzie tylko jeden użytkownik, więc nie chcę konfigurować praw dostępu itp. * Niski narzut zasobów, chcę hostować lokalnie na moim komputerze deweloperskim, więc nie chcę, aby wysysał mój procesor. Nie planuję też przechowywania ogromnych ilości danych. * Znajomy, rodzinny. Korzystałem wcześniej z klientów SVN. Integracja z programem Visual Studio jest przyjemna. * Przenośny. Jeśli muszę go przenieść na dysk zewnętrzny lub na inną maszynę. * Bezpłatny. Tak, chcę to wszystko i nie chcę za to płacić.


title: Czy metody `setX(Object o)` powinny wykonywać głębokie czy płytkie kopie obiektów?

text: Moja szczególna sytuacja jest związana z Javą, ale uważam, że jest to bardziej ogólne pytanie OOP niż _tylko_ programowanie w Javie. **Pytanie:** Czy metody „mutator” powinny wykonywać _głębokie_ czy _płytkie_ kopie? **Przykład:** Załóżmy, że mój obiekt ma następującą strukturę: public class MyObj { ArrayList<Integer> myList; //konstruktory itp. public void setMyList(ArrayList<Integer> lista) { this.myList = lista; //Opcja 1 //LUB this.myList = new ArrayList<Integer>(lista); //Opcja 2 } } Zakładam, że opcja 2 jest najlepsza. Dzieje się tak, ponieważ uniemożliwia zewnętrznej klasie bezpośredni dostęp do listy `MyObj`. Na przykład, gdybym to zrobił: public class SomeOtherClass { public static void main(String[] args) { ArrayList<Integer> exampleList = new ArrayList<>(Arrays.asList(1, 2, 3)); MójObiekt a = nowy MójObiekt(); a.setMojaLista(PrzykładLista); przykładLista.add(4); } } Na końcu `main` Opcja 1 oznacza, że `a.myList` zawiera `4`, podczas gdy Opcja 2 oznacza, że `a.myList` nadal składa się z `1, 2, 3`. Dla mnie to drugie wydaje się lepsze. Czy istnieje norma/konwencja dotycząca tej sytuacji?


title: Czy zawijanie interfejsu API innej firmy wywołuje zapach projektu?

text: Pięć metod w moim interfejsie API wywołuje tę samą metodę innej firmy. Czy starając się przestrzegać zasad DRY, ma sens zawijanie tego wywołania w metodę prywatną?


title: Mam pomysł na aplikację, jakich technologii mogę używać / muszę się nauczyć?

text: To całkiem proste: masz obiekt (powiedzmy samochód, dom, ubrania lub cokolwiek) i wszystko, co chcesz zrobić, to dodać do niego różne rodzaje tekstur (powiedzmy, że można dodać 5-10 różnych typy tekstur do obiektu) Obiekt będzie prawie statyczny (w ruchu) i chciałbym mieć dość szybki czas renderowania. Tekstury mogą być przesłane przez użytkownika lub pobrane z bazy danych. Brzmi jak bardzo prosty projekt, ale jestem bardzo nowy w programowaniu aplikacji. Wcześniej zajmowałem się programowaniem, ale głównie Windows (C#,Java,Python) i rzeczy z mikrokontrolera (C). Od czego powinienem zacząć? Z podobnych produktów, które widziałem, wydaje się, że używają wszystkiego, od Asp.net po Flash dla swoich rozwiązań (choć są to strony internetowe).


title: Jakie są zalety i wady różnych trybów git dostępnych dla emacsa?

text: Właśnie zacząłem używać git, a ponieważ żyję w emacsie, chcę użyć jednego z pakietów integracyjnych z emacsem. Patrząc na tę listę, widzę, że dostępnych jest wiele pakietów, ale notki dla każdego z nich nie wyjaśniają zbyt wiele ich możliwości, zwłaszcza że nie znam zbyt dobrze git. Z jakich trybów git dla emacsa korzystałeś i jakie są zalety i wady każdego z nich?


title: Gdzie mogę przetestować moją wiedzę na temat Silverlight/WPF online?

text: Czy znasz jakieś strony, na których mogę wziąć udział w quizie na temat Silverlight/WPF, które nie są Braindumps?


title: Jak mieszać różne style programowania w kilku językach?

text: Wiem, że Senior Developer nie używa tylko jednego języka i tylko jednej platformy lub IDE. Czy możesz doradzić, jak mieszać różne style programowania, aby tworzyć wydajny kod? Na przykład **najlepsze** mieszanie to **Perl + Objective-C**. `$ObjectiveClongNameOfVariablesAndMethods` są najgorsze dla stylu Perla, ale dobre dla zespołu iOS. Styl `[metoda self:[[NSArray alloc] initWithobjects:[hash objectForKey:name]]]` jest dziwny dla oka, ale nie dla prostych tablic i skrótów perla oraz autowifikacji. Próbuję też mieszać styl **SAS + Objective-C** , ale tutaj mam problem. **SAS** nie obsługuje długich nazw, tylko 32 symbole. Tak więc duży problem z nazywaniem zmiennych. Kolejną trudnością są cechy obecnego języka. Tak więc, jeśli nie mogę użyć aktualnego języka do zadania, które może **rozwiązać 'jak szef'** , denerwuję się i widzę dziwny kod. Korzystanie z bibliotek jest dobre, ale sprawia, że kod nie jest naturalny, „ponieważ jedzenie zupy widelcem jest dziwne”. I na koniec: gdzie mogę zaufać kompilatorowi i tłumaczowi języka? Tak więc **Styl C++** jest najlepszy dla wskaźników (tworzysz destruktory, konstruktory itp.), ale wiele języków obsługuje teraz mechanizmy takie jak **ARC w Objective-C** lub nie używa wskaźników (takich jak ** C#** ).


title: Czy przegląd kodu jest dobrą praktyką?

text: Kiedy firma, w której pracuję, zatrudniała nowych menedżerów, proponowali nam przeglądanie czyjegoś kodu na każdym spotkaniu. Mamy spotkania co dwa tygodnie, więc za każdym razem jeden z programistów miał pokazać swój kod na projektorze, a inni mieli o tym dyskutować. Pomyślałem, że to byłoby świetne: każdy programista byłby bardziej ostrożny podczas pisania kodu, a my moglibyśmy lepiej podzielić się naszym doświadczeniem. Ale jakoś o tym zapomnieliśmy i oferta pozostała po prostu ofertą. Jakie są tego zalety i czy są jakieś wady?


title: Jaką ilość wskazówek i mentoringu powinien otrzymać młodszy programista?

text: Jestem młodszym programistą i właśnie dostałem tę pracę, pracując z bardzo małą grupą inżynierów. Od kilku miesięcy koduję w tej grupie w środowisku zawodowym - zanim dopiero kodowałem w szkole - i zdecydowanie było to pouczające doświadczenie. Czuję, że zabiera mi dużo czasu na nauczenie się rzeczy takich jak wzorce projektowe, różne metody różnych klas w całym kodzie - robię wiele błędów w swoim kodzie i muszę zadawać wiele pytań. Myślę też, że nie mam najlepszego mentora i tutaj zastanawiam się, czy to ja jestem powolny, czy nie jestem w najlepszym środowisku do nauki. Obecnie jest jeden główny inżynier, który sprawdza kod wszystkich użytkowników i odsyła informacje zwrotne. W przeglądzie kodu często otrzymuję krótkie komentarze, takie jak „użyj metody XXX”. Zwykle metoda XXX jest metodą w naszej bazie kodu, której nigdy nie używałem ani nie widziałem, na obiekcie w naszej bazie kodu, którego nie znam. Będę musiał poprosić o więcej wyjaśnień i przedłużyć proces weryfikacji. W takim przypadku - czy tylko ode mnie zależy, czy znajdę tę metodę i spróbuję dowiedzieć się, co ona robi? Wydaje mi się, że tego typu komentarze powinny mieć więcej wyjaśnień – dlaczego powinienem użyć tej metody i co zrobiłem źle – ale zamiast tego jest to bardziej w stylu „zrób XXX”. Oczywiście idę i próbuję znaleźć metodę, ale przez większość czasu nie mam wystarczającego doświadczenia i kontekstu, aby w pełni zrozumieć problem. Inną kwestią jest to, że kiedy mam pytania i przychodzi główny inżynier, przerywają mi, uciszają (dosłownie - mówią „nie, nie, szszsz”, jeśli nadal wyjaśniam pytanie), przejmują moją mysz i klawiaturę i po prostu napraw problem po obejrzeniu go przez sekundę. Zwykle moje pytanie będzie miało przyczynę problemu, który mam (źle zrozumiałem koncepcję), a jeśli nie mogę tego wyrazić i pokazać inżynierowi, gdzie mam zły pomysł lub koncepcję, to w jaki sposób będę w stanie poprawić i uczyć się? Czuję, że mnie nie poprawiają i nie uczą – po prostu naprawiają problem na moim ekranie – ale ponieważ się nie uczę, mam tendencję do powtarzania tego ponownie. To nie jest dla mnie pomocne - wolałbym, aby usiedli ze mną i pozwolili **mi** jeździć z klawiaturą-mysz, pozwolili mi zadać pytanie własnymi słowami i wyjaśnić mi słowami, co zrobiłem źle, zamiast po prostu zmieniam mój kod. Czy proszę o za dużo? Pod koniec dnia zdecydowanie uczę się i poprawiam, po prostu zajęło mi to dużo czasu. Jestem sfrustrowany brakiem mentoringu i przewodnictwa, które mam. Jestem zdezorientowany i czuję, że czasami oczekuje się ode mnie, że będę wiedział wszystko, co wie główny inżynier, który sam tworzył ten kod przez ostatnie 4 lata. Czuję się jak ciężar, kiedy mam pytania. Zastanawiam się więc, jaką pomoc i wskazówki powinien mieć młodszy inżynier? Oczywiście wiem, jak korzystać z SO, wiem, jak wyszukiwać w google. Mówię o poznaniu naszej bazy kodu, naszych wzorców i sposobu, w jaki robimy rzeczy dla naszego produktu. Czy moje doświadczenie jest normalne? Czy może buduję to wszystko w mojej głowie?


title: Czy narzędzia projektanta obniżają jakość programowania?

text: Rozglądałem się ostatnio, szczególnie po niektórych dostępnych narzędziach MS i zauważam, że duży nacisk kładę na narzędzia projektanta i kreatory. Nie tylko do tworzenia interfejsu użytkownika, ale do wszystkiego. * Entity Framework ma modeler * RIA Services ma kreator(y) DomainService * Workflow ma cały projektant przepływu pracy... (nie wiem, tak naprawdę go nie używałem) Jest więcej, ale myślę, że masz pomysł. Istnieje wiele narzędzi projektanta. Korzystając z niektórych z nich, stwierdzam, że: **Komplikują one sprawy wykraczające poza zalecane przypadki użycia** (tj. wszystkie filmy demonstracyjne) Ostatnio oceniałem niektóre z tych technologii i próbując z nimi pracować, muszę Przeanalizuj dokładnie to, co projektanci, modelarze i czarodzieje robią dla mnie... w przeciwnym razie gubię się, kiedy faktycznie muszę spróbować zrobić coś z tym, co zostało stworzone. Kończy się to przypadkiem, w którym muszę walczyć z narzędziem lub walczyć z jego wydajnością na tyle, że mógłbym zrobić wszystko sam bez niego – i mieć _znacznie_ lepsze zrozumienie tego, co się dzieje. Uważam, że jest to szczególnie irytujące w przypadku kreatora Silverlight Designer i kreatora usług domenowych usług RIA. Zadaję sobie pytanie: „Jaki jest pożytek z tego narzędzia, jeśli muszę rozgryźć jego wewnętrzne działanie lub przepisać połowę jego danych wyjściowych, aby go użyć?” **Nie są tak szybkie** Zaletą tych narzędzi jest zwiększenie produktywności i ta kwestia może z czasem ulec zmianie i niekoniecznie dotyczy projektantów interfejsu użytkownika (chociaż w niektórych przypadkach nadal tak jest - > Patrzę na ciebie, projektantce Silverlight). Odkryłem, że mogę zhakować kod znacznie szybciej niż przeciągać i upuszczać, zmieniać rozmiar, przenosić, cokolwiek w designerze. **Interfejs użytkownika przeszkadza modelowi** Może to tylko ja, ale kiedy używam czegoś przypominającego narzędzie do projektowania UML, spędzam więcej czasu na układaniu wszystkiego tak, aby moje linie się nie przecinały i tak że widzę to wszystko na ekranie niż modelowanie tego, co próbuję osiągnąć. **Nie są zabawne** Połowę powodów, dla których koduję na życie, jest to, że lubię to. Klikanie pól wyboru i wybieranie comboboxów, a następnie naprawianie wszystkiego, co wychodzi, nie jest zabawne. **Wygląda na to, że nie jestem sam** Wydaje się, że społeczność też _nie_ chce tych narzędzi. Najlepszym przykładem, jaki mogę w tej chwili wymyślić, jest Entity Framework Code-First. Pytam więc: 1. Czy narzędzia projektanta _w rzeczywistości_ poprawiają produktywność? 2. Czy są zabójcami zabawy? 3. Czy „społeczność” _właściwie_ prosi o więcej narzędzi dla projektantów, czy może dostawcy po prostu myślą, że tak jest?


title: Jak nazwać pliki danych językowych?

text: Ostatnio postanowiłem dodać do mojego programu kilka tłumaczeń. Zastanawiam się, jak nazwać pliki językowe? 1. w nazwie języka kultury (przykład: english = en, french = fr, italian = it, etc...) 2. w nazwie języka [in english] (przykład: english = english, french = francuski, włoski = włoski itd.) Wiem, że wybierzesz drugi sposób, ponieważ nie musisz wykrywać nazwy pliku, ponieważ oba mają tę samą nazwę. Ale problem polega na tym - pokazuję nazwy języków w ich języku (przykład: english = english, french = française, italian = italiano, itp.), więc nadal muszę wykryć, która to nazwa pliku. Główne pytanie brzmi, jaką drogę wybrać? nazwa języka w języku angielskim czy nazwa kultury? i dlaczego?... Dzięki!


title: Ocena programisty do uruchomienia

text: Posortowałem poprzednie pytania i nie mogłem znaleźć konkretnej odpowiedzi na następujące (z góry dziękuję): W pełni rozwinąłem swój pomysł na papierze i zamierzam go rozwijać, tworzyć go i rozwijać. Ponieważ nie jestem osobą techniczną, szukam partnera lub zatrudnienia (zapłaciłbym za jego usługi) bardzo utalentowanego i wszechstronnego programisty, który pomógłby w tworzeniu i rozwijaniu projektu. Szukam kogoś, kto może pełnić funkcję menedżera IT/CTO i wykonywać pracę, podczas gdy ja wykorzystuję moje zasoby do opracowywania i wdrażania strategii, zajmowania się stroną biznesową, pozyskiwania kapitału, rozwoju itp. Jednak ze względu na mój brak wiedzy informatycznej, zawsze jest mi trudno odróżnić dobrego i złego programistę i dlatego dowiaduję się, czy jest dobry, czy nie, gdy jest już za późno. Więc moje pytanie, które zadałem wszystkim wokół mnie, brzmi: „Jak ocenić, czy programista jest dobry, czy nie, jeśli sam nie mogę go ocenić?” i „Czy jest jakaś strona internetowa, która recenzuje i ocenia programistów?” Poprosiłem wielu, aby skierowali mnie do utalentowanych programistów, ale wszyscy albo nie są lokalni (ważne, abym pracowała obok nich), albo są szczęśliwie zatrudnieni lub pracują we własnym startupie. Poprosiłem również tych programistów, aby pomogli mi znaleźć innych, ale nikt nie wydaje się być w stanie pomóc. Jakakolwiek pomoc byłaby niezmiernie mile widziana. Dziękuję bardzo, PomocyJ


title: Jaki jest najlepszy sposób obsługi różnych stref czasowych?

text: Pracuję nad aplikacją internetową, w której będzie wielu różnych użytkowników z całego świata dokonujących aktualizacji. Zastanawiam się, jaki byłby najlepszy sposób obsługi stref czasowych? W idealnym przypadku wszyscy użytkownicy oglądają je w swoim czasie lokalnym. Czy czas systemu operacyjnego serwera powinien być ustawiony na GMT, czas lokalizacji fizycznej czy czas lokalizacji mojego rozwoju? Czy logika aplikacji (PHP) i baza danych (MySQL) powinny być ustawione na przechowywanie danych w formacie GMT czy w czasie lokalnym (lokalnym dla użytkowników)? Czy istnieje standard branżowy lub nawet proste/oczywiste rozwiązanie, którego po prostu nie widzę?


title: Czy luźno typowany język można uznać za prawdziwie zorientowany obiektowo?

text: Czy luźno typowany język programowania, taki jak PHP, może być rzeczywiście uważany za zorientowany obiektowo? Chodzi mi o to, że metody nie mają zwracających typów, a parametry metody też nie mają zadeklarowanego typu. Czy projektowanie klas nie wymaga, aby metody miały zwracany typ? Czy sygnatury metod nie mają specjalnie wpisanych parametrów? W jaki sposób techniki OOP mogą pomóc w pisaniu kodu w PHP, jeśli zawsze musisz sprawdzać typy otrzymywanych parametrów, ponieważ język nie wymusza typów? Proszę, jeśli się mylę, wyjaśnij mi to. **Kiedy projektujesz rzeczy używając UML, potem kodujesz klasy w PHP bez metod typu return i parametrów no-type... Czy kod naprawdę jest zgodny z projektem UML?** **Spędzisz czas na projektowaniu architektury oprogramowania, wtedy kompilator nie zmusza programisty do podążania za twoim projektem podczas kodowania, pozwalając mu przypisać dowolną zmienną obiektu do dowolnej innej zmiennej bez ostrzeżenia o niezgodności typów.**


title: Licencjonowanie Openfire z niestandardowym kodem

text: Zastanawiam się nad integracją otwartego serwera czatu z moją niestandardową stroną internetową. Serwer Openfire i biblioteka klienta smack są objęte licencją Apache License w wersji 2.0. Jeśli zdecyduję się na openfire, czy będzie to wymagało udostępnienia kodu źródłowego mojej witryny na licencji Apache? Próbowałem przejrzeć warunki licencji, ale język prawniczy jest nieco mylący. Z góry dziękujemy za wszelkie spostrzeżenia! Rohita.


title: Uzasadniony powód, dla którego pracodawca złamał umowę na zlecenie

text: Nie zamykaj tego jako nie na temat. Zgodnie z FAQ mogę zamieszczać pytania związane z programowaniem. Pracowałem nad projektem i gdy był on w połowie ukończony (1 tydzień pracy), pracodawca wycofuje się i odmawia mi zapłaty. Krótko przed tym był bardzo niegrzeczny. Miał problemy z konfiguracją serwera i powiedział mi, że to moja wina i że muszę to naprawić. Po tym, jak spędziłem kilka godzin, próbując rozwiązać problem, okazało się, że to jego wina. Po tym kiedy umieściłem kod na serwerze. Znalazł 1 błąd, który przegapiłem. Spanikował, oskarżył mnie o bycie złym programistą i powiedział, że kod jest gówniany i nie może go użyć. Powiedział, że jeśli w kodzie jest błąd, oznacza to, że kod jest zły i nie może go użyć. Będzie musiał wyrzucić kod i zatrudnić kogoś innego. Wciąż powtarzał swój argument: „dlaczego mam płacić za kod, którego nie mogę użyć”. Ciągle mu powtarzałem, że kod jest w porządku i namawiałem go, aby inny programista dał mu drugą opinię. Ale nie miałby tego. Powiedział, że zrekompensuje mi moje kłopoty, płacąc mi 250$. Potem zmienia zdanie i obniża to do 200$. Potem po raz trzeci zmienia zdanie i mówi, że w ogóle nie chce mi wynagradzać. Jestem sfrustrowany, ponieważ poza tym, że jest niegrzeczny, nigdy nie powiedział mi, że jest niezadowolony z pracy, którą wykonuje. Więc moje pytanie brzmi; Czy według Ciebie powyższe jest ważnym powodem do wycofania się z umowy ustnej?


title: Czy rozważyłbyś skorzystanie ze szkolenia/mentoringu z LearnersParadise.com?

text: Moje początkowe pytanie zasługuje na wyjaśnienie. Założyłem konto na learnersparadise.com. Po zarejestrowaniu się nie mogłem się zalogować, więc zdecydowałem się skorzystać z ich funkcji „wyślij hasło”. Po otrzymaniu mojego hasła w e-mailu potwierdziłem dwie rzeczy A) Odcięli 2 ostatnie cyfry mojego 10-cyfrowego hasła bez informowania mnie i zapisali je w ten sposób w swojej bazie danych B) moje hasło nie jest zapisane w ich bazie danych za pomocą hash jednokierunkowy, ponieważ udało im się wysłać mi moje hasło e-mailem. Jestem całkiem pewien, że oba te sposoby są absolutnie okropnymi praktykami programistycznymi. Podejrzewam, że mentorzy/trenerzy w Learnersparadise niekoniecznie są związani z witryną i jej projektem, ponieważ są to w zasadzie ludzie tacy jak ty i ja (miejmy nadzieję, że mają większe umiejętności niż ja), którzy zapisali się, aby zostać mentorami. Jednak nadal nie mam pewności, czy zapisać się na szkolenie/mentoring w witrynie, która sama stosuje tak słabe praktyki programistyczne? Czy pozwoliłbyś uczącym się, aby złe praktyki programowania wpłynęły na twoją opinię o ich trenerach/mentorach?


title: Przekazywanie danych z określonej strony na inną stronę. Windows Phone 7

text: Użytkownik wypełni informacje na stronie 1, a dane będą widoczne na drugiej stronie wymienionej w polu listy. Czy wskazane jest stosowanie wiązania danych? Uczyłem się/badałem nad wiązaniem danych już od około 2 dni i nadal nie mogłem tego zrozumieć. Prosty przykład naprawdę by pomógł.


title: Synchronizuj / wysyłaj dane między systemami front-end i back-end dla witryny e-commerce

text: Klient niedawno opracował nowy system zarządzania zapasami .net zaplecza, który łączy się z ich EPOS i umożliwia sklepom śledzenie zamówień, produktów, klientów itp. z jednej centralnej bazy danych, która wykorzystuje MS SQL Server 2003. Klient ma nadzieję, że będzie korzystać jest to okazja do odnowienia/przebudowania swojej witryny, aby również wykorzystać tę scentralizowaną bazę danych zaplecza. Mam doświadczenie z e-commerce, ale po raz pierwszy rozwijam witrynę, która musi współpracować z systemami back-end firmy. Miałem nadzieję, że użyję gotowej platformy, takiej jak Magento, aby proces rozwoju przebiegał płynniej i umożliwił łatwe aktualizacje i korzystanie z wtyczek/modułów w przyszłości. Jednak po przyjrzeniu się schematowi ich nowych systemów zaplecza widać, że może być kilka problemów. Ich baza danych ma wiele problemów projektowych, tabele są źle znormalizowane, a ich podejście do projektu bazy danych wydaje mi się przestarzałe. Gdybym miał używać platformy z półki, takiej jak Magento, jedynym sposobem, w jaki widzę, jak działa, jest ponowne utworzenie wszystkich produktów/kategorii/klientów we front-endowej bazie danych, może to być zrobione ręcznie ze względu na różnice w schemacie między backendem (scentralizowana baza danych) a frontendem (magento db). Byłoby to gigantyczne zadanie i stworzyłoby nowy problem, jak radzić sobie z replikacją danych (produkty, stany magazynowe, ceny, zamówienia, statusy zamówień). Klient obecnie zarządza wszystkimi produktami i danymi zamówień w swoim systemie .net i chce nadal to robić, więc musiałby istnieć sposób aktualizowania bazy danych witryn, gdy wprowadzają zmiany w swoich systemach zaplecza (np. w przypadku zamówienie zostało wysłane/anulowane/itp.). Podobnie scentralizowana baza danych musiałaby być aktualizowana z poziomu frontonu, gdy klient składa zamówienie, aktualizując stany magazynowe itp. To tylko dwa przykłady danych, które będą wymagały synchronizacji, ale są to niezliczone inne scenariusze. Czy ktoś ma doświadczenie w pracy z Magento lub innymi platformami w sytuacjach podobnych do powyższych? Jak poradziłeś sobie z replikacją danych i przesyłaniem danych między scentralizowaną bazą danych zaplecza a bazą danych frontendu? Ciężko mi owinąć głowę wokół najlepszej konfiguracji/architektury dla takiej strony, wszelkie wskazówki we właściwym kierunku byłyby naprawdę mile widziane. Z perspektywy czasu nie mogę oprzeć się wrażeniu, że najlepszym rozwiązaniem byłoby stworzenie od podstaw własnej platformy, która może bezpośrednio łączyć się z ich scentralizowaną bazą danych, zamiast korzystać z platformy z półki i martwić się synchronizacją danych między backendem/frontendem. jakieś pomysły?


title: Jak skuteczne są certyfikaty podpisywania kodu, jeśli chodzi o zachowanie lub akceptację klienta?

text: Za każdym razem, gdy potencjalny klient pobiera kopię mojego oprogramowania, otrzymuje komunikat ostrzegawczy „Nieznany wydawca”. Rozumiem, że jeśli kupię certyfikat do podpisywania kodu, ten komunikat zniknie, a klient nie otrzyma przerażającego ostrzeżenia. Chciałbym wiedzieć, czy ktoś ma informacje na temat skuteczności tych certyfikatów podpisywania kodu w odniesieniu do zachowań klientów. Jaką różnicę zauważyłeś w zachowaniu lub akceptacji klienta po podpisaniu kodu za pomocą certyfikatu?


Dlaczego twórcy protokołu internetowego zdecydowali się na użycie adresów IP do identyfikacji konkretnego komputera? Dlaczego po prostu nie mieć unikalnego identyfikatora przypisanego do każdego komputera podczas produkcji, a następnie użyć tego identyfikatora do identyfikacji komputera?


title: Skuteczny sposób na uruchomienie dowolnej liczby wątków konsumenckich?

text: Mam implementację Producent/Konsument, w której można konfigurować liczbę konsumentów (jest to forma konfigurowalnego ograniczania przepustowości). Producent i konsument są uruchamiani w następujący sposób: var cts = new CancellationTokenSource(); var procesCancelToken = cts.Token; Task.Run(() => Parallel.Invoke(new ParallelOptions() { CancellationToken = processCancelToken } , producent , konsument ) , processCancelToken); Akcja producenta jest dość prosta i po prostu wypełnia BlockingCollection obiektami pochodzącymi z System.Threading.Tasks.Task (tak, to możliwe!). Oto uproszczony przykład: var pollingInterval = 30000; var producent = new Action(() => { Random rnd = new Random(DateTime.Now.Second); while (!processCancelToken.IsCancellationRequested) { for (int ii = 0; ii < 10; ii++) { var r = rnd .Next(2, 15); _mainQueue.Add(new Task(() => { //to jest fikcyjne zadanie dla celów ilustracyjnych Console.WriteLine(" Uruchamianie zadania w kolejce, uśpione {0} sekund, ID: { 1}", r, Thread.CurrentThread.ManagedThreadId); Thread.Sleep(r*1000); })); Console.WriteLine("Producent dodał zadanie do kolejki"); } System.Threading.Thread.Sleep(pollingInterval } Console.WriteLine("Wychodzenie producenta"); } W tym przykładzie tworzy anonimowe zadanie, które śpi przez losową liczbę sekund od 2 do 15. W prawdziwym kodzie ten producent odpytuje bazę danych, wydobywa dane e jednostek reprezentujących elementy pracy, a następnie przekształca je w wykonywalne zadania, które są dodawane do kolekcji. Następnie mam zadanie konsumenckie, które używa `Parallel.For()` do uruchomienia _n_ wystąpień anonimowej akcji, która następnie usuwa zadanie z kolekcji, następnie uruchamia i czeka na zadanie, a następnie powtarza: var numberConsumerThreads = 3; var consumer = new Action(() => { Parallel.For(0, numberConsumerThreads, (x) => { //ta akcja powinna kontynuować usuwanie elementów roboczych z kolejki, dopóki nie zostanie anulowana podczas (!processCancelToken.IsCancellationRequested) { var dequeuedTask = _mainQueue.Take(processCancelToken); Console.WriteLine("Konsument #{0} wziął zadanie z kolejki", Thread.CurrentThread.ManagedThreadId); dequeuedTask.Start(); while (!processCancelToken.IsCancellationRequested) { if (dequeuedTask. Wait(500)) przerwa; Console.WriteLine("Konsumenckie #{0} zadanie oczekiwania upłynęło", Thread.CurrentThread.ManagedThreadId); } } Console.WriteLine("Wychodzenie konsumenta #{0}", Thread.CurrentThread.ManagedThreadId) ; }); } **Pytanie:** czy jest to skuteczny sposób na rozpoczęcie i działanie dowolna liczba konsumentów? A może istnieje bardziej wydajny sposób korzystania z PLINQ z poziomu głównej akcji konsumenta, w którym oba zadania kontynuują wykonywanie zadań w kolejce, blokują się, gdy ich nie ma, i nadal można je anulować za pomocą `processCancelToken`? (Uwaga: `processCancelToken` jest obsługiwany oddzielnie, aby anulować tokeny zawarte w kolejce zadań - można je niezależnie anulować. Wszystko to działa w usłudze Windows, a `processCancelToken` jest używany do anulowania wszystkiego, jeśli usługa zostanie zatrzymana).


title: Zrób lub kup: Potrzebne porady dotyczące aplikacji księgowej opartej na sieci Web…

text: Moja firma ma klienta (w USA), który obecnie oferuje internetowe oprogramowanie do obsługi płac dla małych firm. Chcą oferować małym firmom internetowy pakiet księgowy, który dobrze integruje się z ich obecną ofertą internetową. Firma ma CPA na personel, co jest premią. Do tej pory powiedzieli, że musi to być system podwójnego księgowania, księga główna, księga podrzędna, fakturowanie sprzedaży, przetwarzanie wpływów gotówkowych, wprowadzanie zobowiązań i przetwarzanie płatności. Więc moje pytanie brzmi… Czy powinniśmy spróbować napisać to sami od podstaw z CPA dla personelu, wypróbuj ścieżkę open source i zobacz, czy możemy dostosować ją do tego, czego potrzebujemy, czy jest inna opcja, o której nie myślę ? Wszelkie porady w dowolnym kierunku byłyby bardzo mile widziane.


title: System modułów dla języka OOP

text: Projektuję prosty język programowania OO. Jest statycznie wpisywany, kompilowany i wykonywany przez maszynę wirtualną - podobnie do Javy. Różnica polega na tym, że nie chcę kłaść tak silnego nacisku na OOP. Sam kod będzie w większości przypominał C++ (klasy, funkcje i zmienne dozwolone w zakresie pliku). Jedną z rzeczy, które muszę mieć, jest system modułowy. Doszedłem do tego, co następuje: 1. Każdy plik jest modułem (raz skompilowanym) - jak Python 2. Programiści muszą zaimportować moduł ze słowem kluczowym `import`, co powoduje, że kompilator szuka modułów w standardowych katalogach i katalogu plików (VM musi to robić również w czasie wykonywania) A teraz nie mam pojęcia, jak wprowadzić pojęcie submodułów i hierarchii modułów. Jedną z opcji jest na przykład poleganie na hierarchii katalogów, tak aby `import engine.graphics.renderer` oczekiwał znalezienia katalogu o nazwie "engine" w katalogu roboczym, a wewnątrz katalogu o nazwie "graphics", z moduł o nazwie „renderer”. Jakie są wady takiego projektu? Czy coś mi brakuje?


title: Jak ważna jest jakość dla programisty, osoby?

text: Nie pytałem, jak ważna jest jakość oprogramowania dla samego produktu, klientów/użytkowników, menedżera czy firmy. Chcę wiedzieć, jak ważne jest dla **programisty**, który go zbuduje. Interesują mnie wszelkie **książki** (proszę określić rozdział), **artykuły** , **post na blogu** i oczywiście Twoja **osobista opinia** na ten temat, niezależnie od doświadczenia.


title: Jak prezentować wiedzę samouka?

text: Obecnie pracuję jako starszy inżynier oprogramowania (ponad 5 lat doświadczenia) w mojej firmie, rozwijając kilka systemów sieciowych. Od roku zauważyłem, że coraz bardziej interesują mnie rozproszone/wysokowydajne systemy plików (takie jak Apache hdfs, GFS), bazy danych w chmurze (takie jak Azure Table Storage, Hypertable) i to skłoniło mnie do czytania dużo o tym. Zacząłem kupować książki, bawić się istniejącym podobnym oprogramowaniem open-source, czytać ich kod źródłowy i modyfikować je w ramach ćwiczenia. Podsumowując, przeczytałem około 10 książek na ten temat (w tym tematy, które są w jakiś sposób związane z DFS, takie jak niskopoziomowe techniki optymalizacji IO o wysokiej wydajności, aby zminimalizować opóźnienia związane ze sprzętem), spędziłem około 15-25 godzin tygodniowo hackowanie kodu w tym obszarze, wdrażanie kilku małych projektów typu proof-of-concept przez cały rok. To było całkiem zabawne. Ale jak mówi się, apetyt rośnie wraz z jedzeniem, a teraz chcę zacząć spędzać całe dnie na pracy nad takimi systemami - krótko mówiąc zmienić pracę i zacząć rozwijać komercyjny, szeroko stosowany DFS. Czy istnieje inny sposób niż powrót do szkoły i zrobienie doktoratu na ten temat, aby znaleźć pracę, która byłaby związana z dziedziną, która nie była w moim CV (doświadczenie handlowe) przez ostatnie pięć lat? Jak przekonać pracodawcę, że udało mi się zdobyć więcej wiedzy niż pokazuje moje CV w tej dziedzinie? Zdaję sobie sprawę, że starałbym się o znacznie niższe stanowisko, które obecnie piastuję.


title: Czy JavaScript będzie w standardzie HTML5?

text: Jestem całkiem nowy na scenie tworzenia stron internetowych i chcę być w tym absolutnie jasny, ponieważ przeczytałem kilka sprzecznych stwierdzeń. Miałem wrażenie, że "html5" to szczególny sposób konstruowania xml do reprezentowania danych dla strony internetowej, a "javascript" to język programowania, który działa jako kod po stronie klienta w przeglądarce. Ale po lewej i prawej stronie widzę interfejsy API dla javascript (pracowników, geolokalizacja, pamięć lokalna itp.) określane jako „technologia HTML5”. Wikipedia mówi, że html5 nie ma jeszcze standardu, więc nie mogę go sprawdzić, aby sprawdzić, czy w jakiś sposób wymaga on rzeczy o javascript. Czy zatem interfejsy API dla javascript będą w jakiś sposób częścią standardu html5? A może powszechną złą praktyką stało się oznaczanie interfejsów API JavaScript etykietą „technologia HTML5”?


title: Najlepsza praktyka: bezpieczne uwierzytelnianie online aplikacji na Androida

text: Obecnie opracowuję aplikację na Androida wymagającą uwierzytelniania online do logowania (i rejestracji). Główny nacisk kładziony jest na **bezpieczeństwo**. Jestem za: * zachowanie bezpieczeństwa haseł użytkowników i * zapobieganie atakom MITM. Cele drugorzędne to wydajność i doświadczenie użytkownika. Poza tym wolałbym nie korzystać z rozwiązań firm trzecich. Dużo studiowałem na temat różnych podejść[1][2][3]. Moim problemem jest teraz jak _połączyć_ te pomysły w _jeden_ bezpieczny mechanizm. Innymi słowy, **czy coś przeoczyłem?** Krótko mówiąc, wymyśliłem: ![Schemat blokowy. Zasadniczo, jeśli authToken jest obecny, jest wysyłany na serwer i tam sprawdzany. Jeśli się powiedzie, proces logowania jest zakończony. W przeciwnym razie lub jeśli nie ma tokena, użytkownik musi wprowadzić swoje poświadczenia. Jego/Jej hasło jest zahaszowane, wysyłane na serwer, który generuje token, co kończy proces i umożliwia użytkownikowi automatyczne zalogowanie się następnym razem.](http://i.stack.imgur.com/ZnxZO.png) Widoczna ilustracja przedstawia proces logowania wykonywany przez usługę działającą w tle przed pobraniem powiadomień dla tego użytkownika. Chodzi o to, aby wysłać zaszyfrowane hasło użytkownika tylko raz, a następnie pracować z wygenerowanym po stronie serwera tokenem uwierzytelniającym, który jest przechowywany w zaszyfrowanym **KeyStore** w telefonie i odnawiany przy każdym logowaniu. Dalsze informacje: Komunikacja aplikacja-serwer odbywa się przez **HTTPS**. Hash to losowo **solony** **bcrypt** utworzony na telefonie. Tabela bazy danych składa się tylko z `id`, `username`, `hash`, `salt`, `authtoken`. Co myślisz o tych rozważaniach? Nie mogę się doczekać Twojej krytyki i opinii. Qdeep _Niektóre pomysły zostały „skradzione” w ostatecznym przewodniku po uwierzytelnianiu witryn w oparciu o formularze tutaj na SO. Inne znalezione, wyszukując „bezpieczne uwierzytelnianie Androida”._


title: Lepsza obsługa kontrolowania opcji drukowania, takich jak nagłówki i stopki z JavaScript

text: Dlaczego przeglądarki nie zapewniają mechanizmu ustawiania domyślnych ustawień drukowania dotyczących nagłówków i stopek z poziomu aplikacji? Aplikacje internetowe są obecnie pełnoprawnymi aplikacjami, a nowoczesne przeglądarki są w stanie wysłać bardzo dobrze sformatowaną stronę do drukarki (lub nawet pobrać ją jako plik PDF), ale aplikacje internetowe nie mogą polegać na tej metodzie, ponieważ przeglądarki nie pozwalają im na kontrolę metadane całkowicie. Obecne możliwości nie pozwalają stronom internetowym na przechowywanie ustawień drukowania wraz z raportem lub plikiem na serwerze. Każda przeglądarka udostępnia swój własny, obowiązkowy formularz okna dialogowego, w którym można ustawić ustawienia drukowania, które w razie potrzeby można zastąpić wygodniejszym interfejsem: opcje w aplikacji, dostosowane do przypadku użycia, trwałe w chmurze i spójne w różnych przeglądarkach. Obecnie dostępne są następujące opcje: 1. Zlecenie użytkownikowi części pracy (tzn. zlecenie mu samodzielnej zmiany opcji metadanych oraz rozmiaru/orientacji papieru). 2. Korzystanie z innych metod, które mogą szybko stać się zbyt kosztowne i skomplikowane, takich jak generowanie plików PDF na serwerze do pobrania przez użytkownika. Wybór numeru 1 nie zawsze jest naszą decyzją. Jako profesjonalni twórcy stron internetowych, ostateczni użytkownicy zazwyczaj nie są naszymi bezpośrednimi klientami, ale docelową grupą odbiorców naszych klientów. Ponadto zmusilibyśmy końcowego użytkownika do wykonania dodatkowej pracy. Doświadczenie mówi, że nie byłoby to zrobione, a raporty będą drukowane z domyślnymi ustawieniami przeglądarki, zwykle z nagłówkami i stopkami, których użytkownik tak naprawdę nie chce (i związanymi z tym marnotrawstwem papieru, jeśli zdecyduje się wydrukować je ponownie). bez nich). Opcja 2 – generowanie plików PDF po stronie serwera – staje się coraz mniej opcją każdego dnia. Nowoczesne aplikacje internetowe intensywnie korzystają z JavaScript, a raporty korzystają z doskonałych bibliotek do kreślenia stworzonych za pomocą JS, które mogą generować wykresy w elementach kanwy HTML, które można by wydrukować od razu, gdybyśmy nie używali tego „zrób to od nowa na serwerze” zbliżać się. Otrzymane raporty nigdy nie wyglądają tak samo, a programiści muszą utrzymywać dwie wersje każdego raportu. Co więcej, generowanie plików PDF na serwerze może być bardzo powolne i pochłaniające zasoby. Czy istnieje zatem ważny powód, dla którego programiści przeglądarek zdecydowali się nie obsługiwać tego rodzaju dostosowywania?


title: Jak wyglądało programowanie Java dla przedsiębiorstw przed Eclipse?

text: Jestem twoim standardowym programistą Java/Oracle w dużej firmie programistycznej, a Eclipse 3.6 jest tym, nad czym spędzam większość dnia. Java jest niesamowicie gadatliwa i może to być bolesne (ale nie potrzebujemy kolejnego wpisu na blogu wyjaśniającego to), ale Eclipse łagodzi wiele z tego bólu dzięki zmianie nazwy jednym kliknięciem, autouzupełnianiu, dynamicznemu dostosowywaniu ścieżki zajęć itp. Nie wyobrażam sobie, abym wykonał swoją pracę bez narzędzia takiego jak Eclipse do mojej dyspozycji. Więc dla tych z was, którzy byli w pobliżu przed moim czasem, jak to było? Wady są oczywiste, ale czy były jakieś zalety?


title: Rozgałęziać się czy nie rozgałęziać?

text: Do niedawna mój workflow był następujący: 1. Pobierz funkcję od właściciela produktu 2. Utwórz gałąź (jeśli funkcja trwa dłużej niż 1 dzień) 3. Zaimplementuj ją w gałęzi 4. Scal zmiany z gałęzi głównej do mojej gałęzi (aby zmniejsz konflikty podczas łączenia wstecznego) 5. Scal moją gałąź z powrotem do głównej gałęzi Czasami były problemy ze scalaniem, ale ogólnie mi się podobało. Ale ostatnio widzę coraz więcej zwolenników pomysłu, aby nie tworzyć oddziałów, ponieważ utrudnia to praktykowanie ciągłej integracji, ciągłego dostarczania itp. A brzmi to szczególnie zabawnie od osób z rozproszonym doświadczeniem VCS, które tak dużo mówiły o świetnych implementacjach scalających Git, Mercurial, itd. Pytanie brzmi, czy w dzisiejszych czasach powinniśmy używać oddziałów?


title: Prawidłowe zrozumienie strategii rozgałęziania/przepływu pracy

text: Używam svn bez gałęzi (tylko pień) przez bardzo długi czas w moim miejscu pracy. Odkryłem większość lub wszystkie problemy związane z projektami, które nie mają strategii rozgałęziania. Mało prawdopodobne, że nie zmieni się to w moim miejscu pracy, ale w moich prywatnych projektach. W przypadku moich prywatnych projektów, które w większości obejmują współpracowników i pracują razem nad różnymi funkcjami, lubię mieć solidną strategię rozgałęziania z obsługą długoterminowych wersji wspieranych przez git. Dowiaduję się, że najbardziej pomógł mi Atlassian Toolchain (JIRA, Stash i Bamboo), a także poleca mi strategię rozgałęziania, którą lubię weryfikować na potrzeby zespołu. Strategia rozgałęziania została zaczerpnięta bezpośrednio z rekomendacji Atlassian Stash z niewielką modyfikacją drzewa gałęzi hotfix. Wszystkie poprawki powinny również zostać scalone z główną linią. ![Planowana strategia rozgałęziania](http://i.stack.imgur.com/zOdcE.png) **Strategia rozgałęziania w słowach** * _mainline_ (znana również jako _master_ za pomocą git lub _trunk_ za pomocą svn) zawiera „stan sztuki”. Wszystko tutaj zostało pomyślnie sprawdzone różnymi automatycznymi testami (przez Bamboo) i wygląda na to, że wszystko działa. Nie udowodniono, że działa z powodu możliwych brakujących testów. Jest gotowy do użycia, ale nie zalecany do produkcji. * _cecha_ obejmuje wszystkie nowe funkcje, które nie są całkowicie ukończone. Gdy funkcja zostanie ukończona, zostanie połączona z _mainline_. Przykładowa gałąź: `feature/ISSUE-2-A-nice-Feature` * _bugfix_ naprawia niekrytyczne błędy, które mogą czekać na następne normalne wydanie. Przykładowa gałąź: `bugfix/ISSUE-1-Some-typos` * _production_ posiada najnowszą wersję. * _hotfix_ naprawia krytyczne błędy, które muszą zostać wydane w trybie pilnym do _mainline_ , _production_ i wszystkich długoterminowych *wydań*, których dotyczy problem. Przykładowa gałąź: `hotfix/ISSUE-3-Check-your-math` * _release_ służy do długoterminowej konserwacji. Przykładowe gałęzie: `release/1.0`, `release/1.1` `release/1.0-rc1` * * * Nie jestem ekspertem, więc proszę o opinie. Jakie problemy mogą się pojawić? Jakich części brakuje lub które spowalniają produktywność?


title: Rozwój Web API i SVN

text: Planujemy wkrótce opracować projekt ASP.NET Web API. Do kontroli źródła używamy svn. Zazwyczaj kierujemy się wzorem, w którym pień jest stabilny i wykonujemy całą naszą pracę w gałęziach. Przez większość czasu mamy szczęście, że nad projektem pracuje jeden programista. W przypadku tego projektu Web API jest co najmniej dwóch, być może trzech programistów pracujących nad różnymi częściami. Rozumiem przez to, że jeden może pracować na zestawie kontrolerów do pracy z modelami dokumentów, podczas gdy drugi programista pracuje na kontrolerze lub kontrolerach do uwierzytelniania i konserwacji użytkowników. Widząc, że te dwa nie powinny nakładać się na siebie, jakie są zalety/wady obu deweloperów pracujących na jednej gałęzi z codziennymi „aktualizacjami do najnowszej wersji”, aby zachować spójność obu kopii roboczych w porównaniu z każdym deweloperem pracującym na pojedynczej gałęzi i ponownie łączącym dwie gałęzie do bagażnika, gdy są kompletne? Wydaje mi się, że pojedyncza gałąź byłaby lepsza, ponieważ codzienne aktualizacje będą informować każdego programistę o tym, co robi drugi, a to może pomóc w dzieleniu się kodem. Moją główną troską jest wykonywanie kodowania metodą prób i błędów. Co się stanie, gdy zostanie zatwierdzona część kodu, który prawdopodobnie nie powinien zostać ściągnięty przez innego programistę? Czy to w ogóle powinno być problemem? Inną myślą, którą miałem, było to, że każdy programista ma swoją własną gałąź, jeśli jeden z programistów ma wystarczająco stabilny kod, z którego może korzystać drugi, łączymy go z powrotem do bagażnika. Następnie programiści aktualizowaliby codziennie z bagażnika. W końcu pomyślałem, że może stworzymy jedną gałąź dla tego „zestawu cech”, a następnie każdą gałąź deweloperską z tej gałęzi. Następnie przesyłają stabilne funkcje z powrotem do głównej gałęzi i aktualizują się codziennie z głównej gałęzi. Dzięki temu bagażnik będzie czysty i stabilny, dopóki zestaw funkcji nie zostanie zwolniony. To są moje myśli i przepraszam za długie pytanie. Naprawdę chcę dobrze rozpocząć ten projekt i wszelkie wskazówki byłyby bardzo mile widziane.


title: Czy rozgałęzienie może być kiedykolwiek uznane za złą praktykę?

text: > **Możliwy duplikat:** > Do oddziału czy nie do oddziału? Współpracownik jest przeciwny rozgałęzianiu. Cały czas używam rozgałęzień. Przestawiłem zespół na podstawowy system 3 oddziałów. Tworzę własne gałęzie funkcji. Wspomniany współpracownik ma dobre pomysły, stosuje najlepsze praktyki i zgadzam się z nim w wielu takich sprawach. Zaakceptuj to. Odnoszące sukcesy sklepy z oprogramowaniem, o których czytałem: Microsoft, Google, fogcreek używają rozgałęzień. Mój współpracownik przekonuje, że ze względu na sposób działania naszego sklepu (dziedzina medyczna) rozgałęzienie sprawia problemy. Zamiast tego mówi, że powinniśmy tworzyć wiele małych projektów (pliki *.csproj) i nigdy nie pracować nad tym samym kodem w tym samym czasie. Zgadzam się, mamy problemy ze scalaniem. Twierdzę, że podstawową przyczyną tych problemów jest brak komunikacji w zespole i brak wiedzy na temat prawidłowego korzystania z naszego systemu kontroli źródła w celu pełnego działania (TFS). Uważam jego podejście za programowanie w Silo i koszmar zarządzania bibliotekami DLL. Czy są sytuacje, w których rozgałęzianie jest złym pomysłem? Czy się mylę?


title: Rozwijać się w trunku, a następnie rozgałęziać się, czy w gałęzi wydania, a następnie scalać z powrotem?

text: Powiedzmy, że zdecydowaliśmy się na podążanie za strategią rozgałęziania „opartą na wydaniach”, więc będziemy mieć gałąź dla każdego wydania i będziemy mogli dodawać aktualizacje konserwacyjne jako podgałęzie z nich. Czy ma to znaczenie, czy: 1. opracowujemy i stabilizujemy **nowe** wydanie w trunku i **następnie** „zapisujemy” ten stan w gałęzi nowego wydania; lub 2. najpierw utwórz gałąź wydania i połącz się z pniem tylko wtedy, gdy gałąź jest stabilna? Uważam, że to pierwsze jest łatwiejsze w obsłudze (potrzebne jest mniejsze łączenie), zwłaszcza gdy nie pracujemy nad wieloma nadchodzącymi wydaniami w tym samym czasie. W normalnych warunkach wszyscy pracowalibyśmy nad pniem i pracowalibyśmy tylko na zwolnionych gałęziach, jeśli są błędy do naprawienia. Do czego właściwie służy bagażnik w tym drugim podejściu? Wydaje się, że jest prawie przestarzały, ponieważ mógłbym stworzyć gałąź przyszłego wydania opartą na najnowszej gałęzi _released_, a nie z pnia. **Szczegóły na podstawie poniższego komentarza:** * Nasz produkt składa się z platformy bazowej i kilku modułów na górze; każdy jest rozwijany, a nawet dystrybuowany oddzielnie od siebie. * Większość członków zespołu pracuje nad kilkoma z tych obszarów, więc ludzie częściowo się pokrywają. * Na ogół pracujemy tylko nad 1 przyszłym wydaniem, a nie nad istniejącymi wydaniami. Jeden lub dwóch może przez krótki czas pracować nad poprawką błędu w istniejącym wydaniu. * Nasza praca nie jest _skompilowana_ i jest mieszanką skryptów powłoki Unix, plików konfiguracyjnych XML, pakietów SQL i innych — więc nie ma możliwości przetestowania kompilacji za pomocą przycisku. Robi się to ręcznie, co jest trochę pracochłonne. * Cykl wydawniczy trwa zazwyczaj pół roku lub dłużej w przypadku platformy podstawowej; często 1 miesiąc na moduły.


title: Gałęzie Git omijane przez biuro, w którym pracuję

text: Miejsce, w którym pracuję, wykonuje następujące czynności: 1. Zarządzają wersją deweloperską aplikacji 2. Zarządzają inną zreplikowaną wersją tej aplikacji, nazywają to wersją rep 3. Aktywna wersja aplikacji, która jest uruchomiona 4. Oni uważaj gałęzie za złe Jesteśmy proszeni o ręczne skopiowanie i wklejenie kodu z jednej wersji do drugiej. W jakich okolicznościach gałęzie git są uważane za szkodliwe? (wszyscy dodajemy kod do mastera)


title: Wartości, typy, rodzaje i…?

text: Wszyscy wiemy, czym jest wartość. Typ to typ wartości. Rodzaj jest (luźno) typem typu. Typ konstruuje wartość; rodzaj konstruuje typ. Więc jaki jest rodzaj rodzaju, rzecz, która konstruuje rodzaje? Czy istnieje coś takiego? Czy ma nazwę? To jest użyteczne?


title: Jak należy używać hierarchii szablonów cppcms

text: Rozumiem, że hierarchia, w cppcms dla szablonów, idzie na skórę (najwyższy, reprezentujący przestrzeń nazw), następnie widok (reprezentujący klasę) i wreszcie szablon (reprezentujący funkcję). Chcę wiedzieć, kiedy powinienem użyć skórki, a kiedy powinienem użyć widoku; czy każda strona byłaby skórką, czy też skórką na aplikację itp. Czy mógłbyś wyjaśnić, kiedy każda z nich powinna być użyta i czy mógłbyś podać kilka przykładów?


title: Zastąp kod typu klasą (z refaktoryzacji [Fowler])

text: Ta strategia polega na zastąpieniu tego typu: public class Politician { public const int Infidelity = 0; public const int Defraudacja = 1; public const int FlipFlopping = 2; public const int Morderstwo = 3; public const int BabyKissing = 4; public int MostNotableGrievance { get; ustawić; } } Z: public class Politician { public MostNotableGrievance MostNotableGrievance { get; ustawić; } } public class MostNotableGrievance { public static tylko do odczytu MostNotableGrievance Infidelity = new MostNotableGrievance(0); public static tylko do odczytu MostNotableGrievance Malwersacje = new MostNotableGrievance(1); public statyczna tylko do odczytu MostNotableGrievance FlipFlopping = new MostNotableGrievance(2); public static tylko do odczytu MostNotableGrievance Murder = new MostNotableGrievance(3); public statyczna tylko do odczytu MostNotableGrievance BabyKissing = nowy MostNotableGrievance(4); public int Kod { get; zestaw prywatny; } private MostNotableGrievance(int kod) { Kod = kod; } } Dlaczego akurat jest to lepsze niż tworzenie wyliczeń typu: public class Politician { public MostNotableGrievance MostNotableGrievance { get; ustawić; } } public enum MostNotableGrievance { Niewierność = 0, Malwersacje = 1, FlipFlopping = 2, Morderstwo = 3, BabyKissing = 4 } Nie ma żadnego zachowania związanego z typem, a gdyby tak było, użyłbyś i tak innego typu refaktoryzacji, dla przykład: „Zastąp kod typu podklasami” + „Zastąp warunkowy polimorfizmem”. Jednak autor wyjaśnia, dlaczego marszczy brwi na tę metodę (w Javie?): > Numeryczne kody typów lub wyliczenia są powszechną cechą języków opartych na > C. Dzięki nazwom symbolicznym mogą być całkiem czytelne. Problem w tym, że > nazwa symboliczna jest tylko aliasem; kompilator nadal widzi numer > bazowy. Typ kompilatora sprawdza, używając numeru 177, a nie nazwy symbolicznej >. Każda metoda, która przyjmuje kod typu jako argument, oczekuje liczby > i nie ma nic, co mogłoby wymusić użycie nazwy symbolicznej. Może to > zmniejszyć czytelność i być źródłem błędów. Ale gdy próbujesz zastosować tę instrukcję do C#, ta instrukcja nie wydaje się być prawdziwa: nie zaakceptuje liczby, ponieważ wyliczenie jest w rzeczywistości uważane za klasę. Tak więc następujący kod: public class Test { public void Do() { var temp = new Politician { MostNotableGrievance = 1 }; } } Nie skompiluje się. Czy więc tę refaktoryzację można uznać za niepotrzebną w nowszych językach wysokiego poziomu, takich jak C#, czy też czegoś nie rozważam?


title: Co to jest lekka blokada w systemach z rozproszoną pamięcią współdzieloną?

text: Jakiś czas temu zacząłem czytać książkę Tanenbauma o systemach rozproszonych. O dwufazowym blokowaniu i zmianie kolejności znaczników czasu przeczytałem w rozdziale dotyczącym transakcji. Podczas głębszego spojrzenia z Google słyszałem o lekkich transakcjach / lekkiej pamięci transakcyjnej. Ale nie mogłem znaleźć żadnego dobrego wyjaśnienia i implementacji. Czym więc jest lekka pamięć? Jakie są zalety lekkich zamków? A jak mogę je wdrożyć?


title: Testowanie warunków prawdziwości za pomocą BOOL

text: BOOL myBool; mójBool = TAK; ... if (myBool) { doFoo(); } Czytałem o tym, ponieważ istnieją przypadki, w których powyższe faktycznie nie wywołuje funkcji `doFoo()`, najlepiej zamiast tego zawsze testować przeciwko `TAK`, jako takie: if (myBool == TAK) Ale dla większości część to sprawia, że mój kod jest rozwlekły i powtarzalny. jakieś pomysły?


title: API, wersjonowanie i modele

text: Mam moje API (JSON) o takiej strukturze (z czego jestem całkiem zadowolony): ### API Project /_V1 /Controllers V1EntityController.cs // Dotyczy tylko wersji 1 /_V2 /Controllers V2OtherEntityController.cs // Dotyczy wersje 2 i niższe /Controllers/ EntityController.cs // Dotyczy wersji 2 i nowszych OtherEntityController.cs // Dotyczy wersji 3 i nowszych ### Projekt podstawowy /Data/Entity.cs /Data/OtherEntity.cs Ale jako projekt rozwinęła się zarówno klasy `Entity`, jak i `OtherEntity`, stała się pełna przestarzałych właściwości i kilku metod `ShouldSerializexxx`. Zawierają one również właściwości i podklasy, które są przeznaczone tylko do serializacji. Lepszym rozwiązaniem byłoby utworzenie „modeli” w projekcie API, takich jak: ### Projekt API /_V1 /Controllers V1EntityController.cs /Models V1EntityModel.cs /_V2 /Controllers V2OtherEntityController.cs /Models V2OtherEntityModel.cs /Controllers EntityController.cs OtherEntityController.cs /Models EntityModel.cs OtherEntityModel.cs Następnie przekonwertować do iz klas w głównym projekcie? Jaka jest uznana w branży praktyka obsługi tego scenariusza?


title: Programowanie a planowanie

text: Ostatnio otrzymałem więcej zadań związanych z planowaniem na wysokim poziomie, ponieważ główny programista mojego zespołu odchodzi. Nienawidzę długoterminowego planowania. Mój mózg po prostu nie wydaje się naturalnie do tego przystosowany i nie jestem nim wystarczająco zainteresowany, aby poświęcić czas na jego naukę (wystarczająco trudno jest nadążyć za programową stroną obrazu). Czy można nadal być dobrym programistą, nie będąc jednocześnie planistą wysokiego poziomu? Czy od starszego programisty oczekuje się, że będzie dobry w planowaniu całego produktu i ustalaniu daty ukończenia?


title: Co to jest zarządzanie konfiguracją?

text: We wszystkich projektach, w które brałem udział i które miały wkład zewnętrznego konsultanta, padło pytanie, jakiego rodzaju zarządzania konfiguracją używamy. W żadnym z tych przypadków konsultant nie był w stanie zdefiniować zarządzania konfiguracją. Więc co to jest?


title: Jak radzić sobie z firmą outsourcingową, która obniża Twój system produkcyjny?

text: Posiadamy produkt SAAS o dużym obciążeniu iz powodu braku zasobów zarząd zlecił raportowanie oraz prace OLAP & Warehouse firmie zewnętrznej. Kiedy zaczęliśmy z nimi pracować, przypadkowo DOS uszkodził nasz system produkcyjny, teraz wykonali zbyt wiele długotrwałych zapytań do produkcyjnych baz danych i spowolnili system do bezużytecznego. Zaraz dostarczą, a my mamy z nimi umowę serwisową. Jak radzisz sobie z trzecimi firmami, którym tak naprawdę nie możesz ufać, że obniżą Twój system produkcyjny? A co z tym robisz, kiedy oni to robią? Czy ktoś ma tego do czynienia? (pamiętaj, że mają skonfigurowane środowisko testowe, aby robić wszystko, czego potrzebują). Nie szukam odpowiedzi, jak zapobiec uszkodzeniu naszego systemu, jestem po tym, co zrobić z samą firmą zewnętrzną.


title: Testy jednostkowe w Django

text: Naprawdę mam problemy z pisaniem skutecznych testów jednostkowych dla dużego projektu Django. Mam dość dobre pokrycie testami, ale zdałem sobie sprawę, że testy, które piszę, są zdecydowanie testami integracyjnymi/akceptacyjnymi, a nie testami jednostkowymi, i mam krytyczne fragmenty mojej aplikacji, które nie są skutecznie testowane. Chcę to naprawić JAK NAJSZYBCIEJ. Oto mój problem. Mój schemat jest głęboko relacyjny i mocno zorientowany na czas, co daje mojemu modelowi wysokie sprzężenie wewnętrzne i wiele stanów. Wiele z moich metod modeli wykonuje zapytania w oparciu o interwały czasowe, a w polach ze znacznikiem czasu dzieje się wiele funkcji `auto_now_add`. Weźmy więc metodę, która wygląda tak na przykład: def summary(self, startTime=None, endTime=None): # ... logika do przypisania właściwego czasu rozpoczęcia i zakończenia # jeśli nie podano żadnego, prawdopodobnie przy użyciu datetime.now( ) objects = self.related_model_set.manager_method.filter(...) return sum(object.key_method(startTime, endTime) dla obiektu w obiektach) Jak podejść do testowania czegoś takiego? Oto gdzie jestem do tej pory. Przyszło mi do głowy, że celem testów jednostkowych powinno być _nadanie jakiegoś wyśmiewanego zachowania `przez key_method` na swoich argumentach, czy `summary` poprawnie filtruje/agreguje, aby dać poprawny wynik?_ Naśmiewanie się z datetime.now() jest dość proste, ale jak czy mogę wykpić resztę zachowania? * Mógłbym użyć osprzętu, ale słyszałem plusy i minusy używania osprzętu do budowania moich danych (słaba konserwacja jest wadą, która mnie uderza). * Mógłbym również skonfigurować swoje dane przez ORM, ale może to być ograniczenie, ponieważ wtedy muszę również tworzyć powiązane obiekty. A ORM nie pozwala ci ręcznie bawić się polami `auto_now_add`. * Mockowanie ORM to kolejna opcja, ale nie tylko trudno jest wyśmiewać głęboko zagnieżdżone metody ORM, ale logika w kodzie ORM jest wyśmiewana z testu, a mockowanie wydaje się sprawiać, że test naprawdę zależy od elementów wewnętrznych i zależności testowana funkcja. Najtrudniejszymi orzechami do zgryzienia wydają się takie funkcje, które znajdują się na kilku warstwach modeli i funkcjach niższego poziomu i są bardzo zależne od czasu, nawet jeśli te funkcje nie są zbyt skomplikowane. Mój ogólny problem polega na tym, że bez względu na to, jak to dzielę, moje testy wyglądają na znacznie bardziej złożone niż funkcje, które testują.


title: Mądry sposób na zaimplementowanie tabel logowania do strony internetowej i bazy danych dla małego sklepu

text: Tworzę tę witrynę dla małego sklepu i powiedziano mi, że lepiej **nie** trzymać login i pozostałe informacje o użytkownikach w tej samej tabeli. Teraz zastanawiam się, jaki jest najlepszy sposób na zaimplementowanie bazy danych tej witryny? Niektóre tabele bazy danych to: * Klienci * Dostawcy * Produkty * Itd. Potrzebuję mieć różnych użytkowników, po zalogowaniu się do serwisu, w zależności od posiadanych uprawnień może wykonywać szereg czynności: * Jeśli jest klientem mogą zamawiać towary * Jeśli są pracownikami, mogą zamawiać towary, zarządzać zapasami, dodawać klientów itp. * Jeśli są właścicielami lub administratorami, mogą dodawać pracowników i wszystko inne. Czy powinienem przechowywać login i pozostałe informacje o użytkowniku w tej samej tabeli?


title: Jak (profesjonalnie) tworzyć kopie zapasowe powodów wyboru technologii open source w dużym projekcie?

text: Wiem, że tytuł jest nieco niejasny, więc postaram się dokładniej wyjaśnić, jakie jest moje prawdziwe pytanie (z góry przepraszam, jeśli jest to duplikat). Pracuję dla małej firmy (8 osób), która pracuje z Linuxem / PHP / MySQL, dostarczając różne rozwiązania (m.in. CRM) do kilku większych instytucji finansowych. Proces faktycznego zdobywania kontraktów był zawsze bolesny i miałem za zadanie wyjaśnić, dlaczego używam MySQL, a nie MSSQL, PostgreSQL lub Oracle 11g, dlaczego używam PHP, a nie kompilowanego języka, ASP.NET lub Javy i lista jest długa. I na tym polega problem – naprawdę nie znam się na tych komercyjnych rozwiązaniach (bazach danych). Zrobiłem trochę z wymienionymi bazami danych, ale to były proste testy, takie jak tworzenie widoku w tym RDBMS w przeciwieństwie do MySQL, jak tutaj zrobić wyzwalacz, jak tutaj zadeklarować procedurę składowaną, jak sprofilować zapytanie - ale nigdy nie pracowałem tak intensywnie z żadną z wymienionych baz danych, jak z MySQL. Z drugiej strony, zostałem wprowadzony do MySQL na początku 2000 r. tylko po to, aby być coraz bardziej biegłym w nim, jego dziwactwach, a nawet rozszerzając go o UDF lub hakując kod źródłowy, aby zobaczyć, jak wszystko działa za kulisami - tak jak lubię myśleć, wiem jak działa MySQL, czego się po nim spodziewać i jak dodać wymaganą przez nas funkcjonalność. Kilka dni temu rozpoczęliśmy wstępne negocjacje z naszym przyszłym klientem, który potrzebuje dedykowanego rozwiązania do zarządzania klientem/firmą. Mają swój własny zespół, jednak nie udało się im dostarczyć tego, czego firma faktycznie potrzebuje – w to miejsce wkracza moja firma. Oczywiście pierwszą rzeczą, którą chciałem wiedzieć, było to, jakiego rodzaju technologia została użyta do zbudowania systemów, które obecnie działają i utrzymują firmę klienta w ruchu – widziałem też różne rzeczy, od Postgresa dla mniejszych aplikacji po MSSQL dla rzeczywistej bazy danych klienta. Oczywiście, ponieważ firma nie jest zadowolona ze swoich obecnych systemów, oznacza to, że coś jest nie tak. Obecnie nie ma możliwości synchronizacji danych pomiędzy główną firmą a jej oddziałami, a co za tym idzie - nie ma ujednoliconej bazy danych klientów. Znowu niezwykle trudno jest śledzić wydatki – ze względu na różne systemy. I oto, z czym mam problemy – jak tylko wspomniałem o technologii, z której korzystamy, zespół programistów firmy zmarszczył brwi i zbagatelizował nas, mówiąc, że technologie open source są niepewne, wadliwe, podatne na hakowanie, powolne w przeciwieństwie do komercyjnych (bez żadnych rzeczywisty dowód). Tak dla samej argumentacji, pracowałem z większymi zbiorami danych zbudowanymi na bazie MySQL (25TB+), które przechowują różne informacje i byłem w stanie sprostać wszelkim moim dotychczasowym wymaganiom, jeśli chodzi o czasy odpowiedzi i wydajność zbudowanej aplikacji na MySQL. Ale ponieważ nie mam wystarczającego doświadczenia z innymi bazami danych - nie jestem w stanie podać rzeczywistych faktów, że używana przeze mnie technologia jest co najmniej równa (jeśli nie lepsza + tańsza!) niż rozwiązania komercyjne. Jak obroniłbyś swoją (moją) pozycję w obliczu osoby technicznej, która przedkłada oprogramowanie Microsoftu nad oprogramowanie open source w firmie zatrudniającej kilkadziesiąt tysięcy osób i mającej ponad 10 milionów klientów? Czy wybrałbyś MySQL jako bazę danych dla systemu, który powinien zasilać tak dużą firmę? Jeśli nie, co byś wybrał i dlaczego? Przepraszam za ścianę tekstu :)


title: Jakie są dobre przykłady używania pass by name?

text: Kiedy piszę programy, których używam przekazywanie przez wartość lub przekazywanie przez odwołanie, zawsze wydają się być metodami logicznymi. Ucząc się różnych języków programowania natknąłem się na pass by name. Przekaż przez nazwę to metoda przekazywania parametrów, która czeka na ocenę wartości parametru, dopóki nie zostanie użyta. Zobacz Przepełnienie stosu przekazywanie według nazwy pytania, aby uzyskać więcej informacji na temat metody. Chciałbym się dowiedzieć: jakie są dobre przykłady i/lub powody, dla których warto używać pass by name i czy powinno to zostać ponownie wprowadzone do bardziej nowoczesnych języków.


title: Przeciągasz zmiany z wzorca do mojej gałęzi pracy?

text: Nas dwóch pracuje nad czymś. Używamy tej struktury gałęzi * master * dev-A * dev-B Oboje pracujemy na osobnych gałęziach (dev-A,B) i kiedy skończymy - promujemy nasze zmiany do master. Ale wadą tego jest to, że nie możemy uzyskać zmian wprowadzonych przez innych programistów. Wszystko istnieje w drzewie głównym — ale nie możemy uzyskać najnowszych aktualizacji, które wprowadził inny programista. Czy istnieje sposób na rozwiązanie tego problemu, czy też powinniśmy zmienić strukturę naszych oddziałów (według funkcji?)?


title: Kryteria wyboru najbardziej wartościowych specjalistów firmy Microsoft [SO?]

text: Jak wybierani są MVP firmy Microsoft? Czytałem gdzieś, że większość profesjonalistów jest wybierana na podstawie wydajności usenetu (innych społeczności). Dotyczy to również SO. Czy ktoś może zostać wybrany na MS MVP na podstawie jego wydajności przepełnienia stosu?


title: Jak programowo reprezentować linię geometryczną?

text: Próbowałem zaprojektować bibliotekę do wykonywania prostych obliczeń geometrycznych w przestrzeni euklidesowej niezależnie od jej wymiaru. Chociaż łatwo jest przedstawić punkty, wektory, hipersfery i hiperpłaszczyzny w sposób ogólny, nadal nie jestem w stanie znaleźć ogólnego sposobu przedstawienia (nieskończonej) linii, mimo że linie mają wspólne właściwości w różnych wymiarach. Domyślam się, że mógłbym przechowywać niektóre parametry jego równania parametrycznego, ponieważ łatwo jest rozszerzyć równanie parametryczne na linię w przestrzeni o dowolnym wymiarze: x = x0 + at y = y0 + bt z = z0 + ct // można rozszerzyć na dowolny wymiar Ale nawet z tym równaniem nie mogę znaleźć, co powinno być przechowywane, a czego nie, aby porównać wiersze. Przy idealnym rozwiązaniu dwa obiekty typu `Line`: * byłyby programowo równe (z `operator==`), * miałyby równą reprezentację w pamięci. Co powinienem przechowywać, aby to osiągnąć?


title: Poczucie rozpaczy przed programowaniem?

text: Kiedy mam zadanie programistyczne lub jakiś program, od którego muszę zacząć, czasami mam uczucie rozpaczy, po prostu robię wszystko, aby zacząć, a potem po prostu zaczynam czuć się jak gówno, a to sprawia, że nie zaczynam jeszcze bardziej ... to jest jak błędne koło. Wygląda na to, że wszyscy moi przyjaciele po prostu załatwiają sprawy… Czy to tylko ja, czy są inni, którzy mają ten problem? Czy nie jestem zakochany w programowaniu? Jeśli są inni, jak przezwyciężyć to uczucie i po prostu zacząć? EDYCJA: @Kennith to właściwie trochę trudne do opisania, ale to trochę jak bardzo łagodna depresja, myślę, że może to być spowodowane tym, że wymagana od nas praca jest tak trudna. Pamiętam, że w liceum uwielbiałem programować, ponieważ po nauczeniu się składni języka (np. java) czułeś się ekspertem i mogłeś dużo programować. Ale na uniwersytecie jest tak dużo złożoności programowania i tak wiele drobiazgów, których nigdy wcześniej nie brałem pod uwagę, czas logowania, struktury danych, szalone algorytmy, wykresy, np. problemy itp., że myślę, że straciłem pewność, że ja kiedyś miałem. Nie sądzę, że musiałem programować w ciągu ostatnich 3-4 lat, kiedy wiedziałem dużo o tym, co robię (miałem przegląd, ale to wszystko było nowe terytorium), każdy projekt, nad którym pracuję, jest nowym materiałem , nowe koncepcje, język, teoria itp. Jest to dobre do nauki... z perspektywy czasu, ale kiedy się uczysz, jest to trudne i frustrujące. Ale tak jakby nigdy nie czujesz, że robisz postępy lub faktycznie coś osiągasz. Czujesz się dobrze przez chwilę po zakończeniu jednego projektu, ale gdy tylko spojrzysz na następny... wracasz do punktu zerowego. To, co kocham(d) w programowaniu, to uczucie mistrzostwa, które było wystarczającą motywacją, teraz, kiedy zawsze robisz coś nowego, naprawdę trudno jest odzyskać to uczucie.


title: Zarażony przez wielowątkowe błędy

text: W moim nowym zespole, którym zarządzam, większość naszego kodu to platforma, gniazdo TCP i kod sieciowy http. Wszystkie C++. Większość z nich pochodzi od innych deweloperów, którzy opuścili zespół. Obecni programiści w zespole są bardzo mądrzy, ale w większości są młodsi pod względem doświadczenia. Nasz największy problem: wielowątkowe błędy współbieżności. Większość naszych bibliotek klas została napisana tak, aby była asynchroniczna przy użyciu niektórych klas puli wątków. Metody w bibliotekach klas często umieszczają w kolejce długo działające zadania do puli wątków z jednego wątku, a następnie metody wywołania zwrotnego tej klasy są wywoływane w innym wątku. W rezultacie mamy wiele błędów dotyczących przypadków brzegowych, które wiążą się z nieprawidłowymi założeniami dotyczącymi gwintowania. Powoduje to subtelne błędy, które wykraczają poza posiadanie krytycznych sekcji i blokad w celu ochrony przed problemami ze współbieżnością. Co sprawia, że te problemy są jeszcze trudniejsze, to fakt, że próby naprawienia są często błędne. Niektóre błędy, które zaobserwowałem, gdy zespół próbuje (lub w samym starszym kodzie), obejmują coś takiego: **Częsty błąd nr 1** \- Naprawianie problemu ze współbieżnością poprzez po prostu nałożenie blokady wokół udostępnionych danych, ale zapominając o czym dzieje się, gdy metody nie są wywoływane w oczekiwanej kolejności. Oto bardzo prosty przykład: void Foo::OnHttpRequestComplete(statuscode status) { m_pBar->DoSomethingImportant(status); } void Foo::Shutdown() { m_pBar->Cleanup(); usuń m_pBar; m_pBar=nullptr; } Więc teraz mamy błąd, w którym Shutdown mógł zostać wywołany, gdy trwa OnHttpNetworkRequestComplete. Tester znajduje błąd, przechwytuje zrzut awaryjny i przypisuje błąd programiście. On z kolei naprawia błąd w ten sposób. void Foo::OnHttpRequestComplete(stan kodu stanu) { Blokada automatycznej blokady (m_cs); m_pBar->DoCośWażne(stan); } void Foo::Shutdown() { AutoLock lock(m_cs); m_pBar->Oczyszczanie(); usuń m_pBar; m_pBar=nullptr; } Powyższa poprawka wygląda dobrze, dopóki nie zdasz sobie sprawy, że istnieje jeszcze bardziej subtelny przypadek krawędzi. Co się stanie, jeśli Shutdown zostanie wywołany _przed_ wywołaniem OnHttpRequestComplete? Przykłady z prawdziwego świata, które ma mój zespół, są jeszcze bardziej złożone, a skrajne przypadki są jeszcze trudniejsze do wykrycia podczas procesu przeglądu kodu. **Powszechny błąd #2** \- naprawa problemów z zakleszczeniem przez ślepe wyjście z blokady, poczekanie na zakończenie drugiego wątku, a następnie ponowne wejście do blokady - ale bez zajmowania się przypadkiem, że obiekt został właśnie zaktualizowany przez inny wątek! **Common Mistake #3** \- Nawet jeśli obiekty są zliczone, sekwencja zamykania "zwalnia" swój wskaźnik. Ale zapomina czekać na wątek, który nadal działa, aby zwolnić swoją instancję. W związku z tym komponenty są czysto zamykane, a następnie fałszywe lub spóźnione wywołania zwrotne są wywoływane na obiekcie w stanie, w którym nie oczekuje się więcej wywołań. Są inne skrajne przypadki, ale najważniejsze jest to: **Programowanie wielowątkowe jest po prostu trudne, nawet dla mądrych ludzi.** Gdy wyłapuję te błędy, spędzam czas omawiając błędy z każdym programistą nad opracowaniem bardziej odpowiedniej poprawki . Ale podejrzewam, że często są zdezorientowani, jak rozwiązać każdy problem z powodu ogromnej ilości starszego kodu, którego „właściwa” poprawka będzie wymagała dotknięcia. Niedługo wyjdziemy do sprzedaży i jestem pewien, że łatki, które stosujemy, utrzymają się w nadchodzącym wydaniu. Później będziemy mieli trochę czasu na ulepszenie bazy kodu i refaktoryzację tam, gdzie to konieczne. Nie będziemy mieli czasu, żeby wszystko przepisać od nowa. A większość kodu nie jest taka zła. Ale szukam refaktoryzacji kodu, tak aby można było całkowicie uniknąć problemów z wątkami. Jedno podejście, które rozważam, jest takie. Dla każdej istotnej funkcji platformy wyznacz dedykowany pojedynczy wątek, w którym wszystkie zdarzenia i wywołania zwrotne w sieci są kierowane. Podobnie jak w przypadku wątków COM apartment w systemie Windows z wykorzystaniem pętli komunikatów. Długie operacje blokowania mogą nadal być wysyłane do wątku puli pracy, ale wywołanie zwrotne zakończenia jest wywoływane w wątku składnika. Komponenty mogą nawet współdzielić ten sam wątek. Następnie wszystkie biblioteki klas działające wewnątrz wątku mogą zostać napisane przy założeniu jednego świata wątkowego. Zanim pójdę tą ścieżką, jestem również bardzo zainteresowany, czy istnieją inne standardowe techniki lub wzorce projektowe do radzenia sobie z problemami wielowątkowymi. I muszę podkreślić - coś poza książką, która opisuje podstawy muteksów i semaforów. Co myślisz? Interesują mnie również inne podejścia do procesu refaktoryzacji. W tym dowolne z poniższych: 1. Literatura lub artykuły na temat wzorów projektowych wokół wątków. Coś poza wstępem do muteksów i semaforów. Nie potrzebujemy też masowego równoległości, tylko sposobów na zaprojektowanie modelu obiektowego, aby **poprawnie** obsługiwać zdarzenia asynchroniczne z innych wątków. 2. Sposoby tworzenia diagramów wątków różnych komponentów, aby łatwo było badać i rozwijać rozwiązania. (To jest odpowiednik UML do omawiania wątków między obiektami i klasami) 3. Edukowanie zespołu programistów w kwestiach związanych z kodem wielowątkowym. 4. **Co byś zrobił?**


title: Czy jako profesjonalny programista .NET powinieneś nauczyć się pracować z MSIL przy użyciu refleksji?

text: Czytałem przez kod nowego SQL Object Mapper StackOverflow. Zauważyłem, że na dole SqlMapper.cs znajduje się kod, którego nigdy wcześniej nie widziałem. Po przeczytaniu części dokumentacji na MSDN i samouczka na temat MSIL wydaje mi się to trochę przesadzone. Czy jako profesjonalny programista .NET (6 lat) powinienem poświęcić czas, aby się tego nauczyć? Jaka jest zaleta zrozumienia ILGeneratora? Mam nadzieję, że się nie mylę i pytanie jest jasne. Dziękuję!


title: Ogólny program obsługi a bezpośrednie odniesienie

text: W projekcie, w którym pracuję nad warstwą dostępu do danych, próbuję podjąć decyzję, jak przesłać dane i obiekty do kolejnej warstwy (i programisty). Czy lepiej powiedzieć mu, aby 1. odwołał się do mojej biblioteki dll, LUB 2. powinienem zbudować ogólny program obsługi i pozwolić mu wziąć stamtąd obiekty (tj. Format json) Jeśli rozumiem poprawnie, w przypadku 2. musiałby sobie poradzić obiekty na własną rękę, natomiast w przypadku 1. będzie miał byty, które zbudowałem. Uwaga: jest bardzo prawdopodobne, że inne osoby będą musiały pobierać te same dane, ale jeszcze nie jesteśmy do tego przygotowani. To samo pytanie tutaj - czy powinienem zrobić to w usłudze sieciowej, czy uzyskać dostęp do programu obsługi?


title: Migracja dużego systemu z WebForms do MVC

text: Szukam porady od osób, które faktycznie przeprowadziły migrację dużego systemu z WebForms do MVC. Na co należy uważać? Literatura mówi, że oba mogą współistnieć w tym samym systemie, ale czy to naprawdę było takie proste? Czy zarządzanie uwierzytelnianiem między tymi dwoma systemami było płynne? Czy po tym konserwacja była łatwiejsza/trudniejsza? Dziękuję.


title: Przechowywanie adresu pocztowego w bazie danych: jakiej struktury powinienem używać w przypadku aplikacji międzynarodowych?

text: Z mojej bazy danych będą korzystać użytkownicy zagraniczni, ale nie wiem, jak działa system pocztowy poza Stanami Zjednoczonymi. Czy pojęcia „miasto”, „stan, kraj i ewentualnie „kod pocztowy” są wystarczające, aby uchwycić jakąkolwiek hierarchię (nawet jeśli miała tylko 2 poziomy głębokości: (miasto/kraj)


title: Jak dokładnie mogę sprawdzić nowe wiersze w sql za pomocą ajax?

text: W jaki sposób niektóre usługi, takie jak google plus i facebook, sprawdzają nowe treści bez ponownego ładowania strony? Za każdym razem, gdy jesteś na którejkolwiek z tych witryn, pojawia się nowe powiadomienie o treści związanej z postem, bez konieczności odświeżania strony. Czy ktoś może mi dać kilka wskazówek, jak to działa? :)


title: Strach przed wypuszczeniem projektu hobbystycznego – jak przezwyciężyć?

text: Nie wiem, czy to pytanie jest ściśle związane z tworzeniem oprogramowania, ale spróbuję: Jak wielu programistów, uwielbiam pracować nad projektami hobbystycznymi. Czasami pozornie dobre pomysły okazują się nie tak dobre, więc porzucam projekt. Ale czasami z projektu wychodzi coś pożytecznego. Więc mógłbym to wypuścić, zaprezentować światu, prawda? Zło. Jakoś nie jestem w stanie zrobić tego kroku. Obawiam się, że mój kod nie jest wystarczająco dobry, zawsze mogę pomyśleć o rzeczach nieoptymalnych, o funkcjach, które można dodać. Więc nic nie wypuszczam, tracę zainteresowanie iw pewnym momencie porzucam projekt. Czy to normalne? Jak przezwyciężasz taką sytuację?


title: Jak lepiej zaangażować użytkowników, którzy oznaczyli mój projekt w serwisie GitHub?

text: Niedawno założyłem na GitHub projekt o nazwie Hebel, nad którym pracuję. Jest to framework do głębokiego uczenia z akceleracją GPU napisany w Pythonie i Nvidia CUDA. Opublikowałem o tym w Google+, a wkrótce potem został odebrany w Hacker News i przez kilka dni stał się nieco wirusowy. Później opublikowałem o tym ponownie na subreddicie Machine Learning i mój projekt zebrał 822 gwiazdek i 47 widelców na GitHub, co było naprawdę ekscytujące. 822 gwiazdki oznacza, że mój projekt znajduje się wśród 200 najlepszych projektów Pythona na GitHub i faktycznie ma więcej gwiazdek niż niektóre szeroko rozpowszechnione i powszechnie używane projekty Pythona, takie jak virtualenv. Mimo dużego zainteresowania moim projektem, jestem bardzo rozczarowany dotychczasowym zaangażowaniem. Żaden z 47 widelców moich projektów nigdy nie miał żadnych zatwierdzeń, nie otrzymałem żadnych pull requestów, a tylko trzy zgłoszone problemy zostały przesłane przez dwie osoby. Wygląda na to, że mój projekt jest potencjalnie bardzo interesujący dla wielu osób, ale tylko raz go gwiazdują lub rozwidlają, a potem już nigdy do niego nie wracają ani nie korzystają z niego w sposób ciągły. Jak mogę poprawić zaangażowanie, aby użytkownicy zgłaszali błędy lub prośby o ulepszenia lub aby współtwórcy przesyłali zmiany?


title: Metody statyczne w warstwie biznesowej do uzyskania danych z DAL! TAk? Nie?

text: Kilka rad tutaj, wpadłem na system, w którym zawartość DAL setek wywołań poleceń sql jest podzielona na klasę na tabelę. Istnieje również warstwa biznesowa, która pobiera dane z tego DAL, przekazując je dalej do innych metod i warstw w innych miejscach. Prawie 100% tych metod biznesowych to czyste przekazywanie danych. Niewiele z nich zawiera logikę, która wpływa na dane (ponieważ dane są już posortowane/ocenione lub poniekąd w sql-commands/stored-procedurs. **Przejdźmy do prawdziwego pytania.** Wszystkie te metody w warstwie biznesowej są statyczne. Jest to łatwe, ponieważ mogę je wywoływać zewsząd bez tworzenia instancji.Czy metody statyczne są naprawdę preferowane?Dlaczego i jak myślisz?Mam na myśli, że metody statyczne muszą być na stercie i jak dotąd naprawdę nie mogę zobaczyć zysku kosmetycznego z tego powodu Uważam też, że cały system jest bardzo trudny do debugowania, zwłaszcza teraz, ponieważ system ma BARDZO zróżnicowany czas odpowiedzi, bez wielu zmian obciążenia ze strony użytkowników.


title: Czy ponowne użycie jest z grubsza synonimem dobrego projektu?

text: Ponowne wykorzystanie to cecha dobrego projektowania oprogramowania. Czy ponowne użycie jest akceptowalnym połyskiem („krótki zapis znaczenia”) dla dobrego projektowania oprogramowania? Czemu?


title: Narzędzia do tworzenia oprogramowania w tle

text: Tworzę projekt wieloplatformowy (Windows, Linux, Mac OS X) i używam CMAKE, niektórych skryptów python i zależnych od platformy (sh, bat) do budowy. Niemniej jednak uważam, że proces budowy przed wydaniem jest nudny i denerwujący. Przełączanie się między komputerami, wpisywanie poleceń, kopiowanie plików binarnych, eeww. Czy ktoś używa jakiegoś demona budowlanego? Coś, co może zbudować projekt w tle na żądanie lub po przeczytaniu specjalnego komunikatu commita git/svn.


title: Przełącznik a polimorfizm w przypadku modelu i widoku

text: Nie mogę wymyślić lepszego rozwiązania mojego problemu. Mam kontroler widoku, który przedstawia listę elementów. Te elementy to modele, które mogą być instancjami B, C, D itd. i dziedziczyć z A. Tak więc w tym kontrolerze widoku każdy element powinien przejść do innego ekranu aplikacji i przekazać pewne dane, gdy użytkownik wybierze jeden z nich . Dwie alternatywy, które przychodzą mi na myśl to (proszę zignorować składnię, to nie jest konkretny język) 1) switch (wiem, że to jest do bani) //wewnątrz kontrolera widoku void onClickItem(int index) { A a = items.get (indeks); switch(a.type) { przypadek b: B b = (B)a; przejdź do ekranu X; x.v1 = b.v1; // wypełnij X b danymi x.v2 = b.v2; przypadek c: przejdź do ekranu Y; etc... } } 2) polimorfizm //wewnątrz kontrolera widoku void onClickItem(int index) { A a = items.get(index); Ekran s = nowy (a.getDestinationScreen()); //zignoruj składnię s.v1 = a.v1; // wypełnij s informacjami o A s.v2 = a.v2; przedstawia); } //wewnątrz klasy B getDestinationScreen(void) { return Class(X); } //wewnątrz klasy C getDestinationScreen(void) { return Class(Y); } Mój problem z rozwiązaniem 2 polega na tym, że ponieważ B, C, D, itd. są modelami, nie powinni wiedzieć o rzeczach związanych z widokiem. A może powinni w takim razie?


title: Modelowanie klasy MVC

text: Mam następujące wymagania i próbuję zaprojektować diagram klas. Po raz pierwszy tworzę diagram klas, więc chciałbym zasięgnąć porady ekspertów.. :) Jest to prosta implementacja funkcjonalności logowania za pomocą mvc. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/zssbk.jpg) Mam kontroler logowania, który pobiera żądanie logowania i wylogowania z widoku. Wykorzystuje klasę modułu bezpieczeństwa do uwierzytelniania użytkowników, sprawdzania, czy użytkownik jest już zalogowany czy nie i przechowuje listę zalogowanych użytkowników. Czy uważasz to za słuszne podejście? a także, jeśli możesz wskazać pole do poprawy, byłbym naprawdę wdzięczny. Dziękuję.. :)


Obecnie jestem studentem inżynierii oprogramowania i pasjonuję się informatyką. Na mojej uczelni uczymy się jak projektować aplikację z wykorzystaniem wzorców projektowych i wielu innych technik, aby mieć dobre oprogramowanie. Ale mam naprawdę zły problem: chcę wiedzieć wszystko. Obecnie piszę mały silnik gry w c++, podczas gdy piszę aplikację na iOS5, budując stronę internetową dla klienta, odrabiając pracę domową, a moja praca domowa zajmuje dużo czasu, ponieważ niewiele się uczy. Niedawno doszedłem do wniosku: nie mogę zrealizować wszystkich swoich projektów. Niektórzy z moich znajomych każą mi rzucić studia, żebym mogła się szybciej uczyć, ponieważ będę mogła pracować nad innymi projektami w moim _szybkim_ rytmie. Czy uważasz, że uniwersytet to dobre środowisko do nauki, czy lepiej być samoukiem?


title: Czy potrzebuję dyplomu z informatyki, aby dostać pracę dla juniorów w programowaniu?

text: Czy muszę iść do Uni, aby dostać pracę jako młodszy koder C#? Mam 26 lat i pracuję w Games (Produkcja) od 6 lat i myślę o zmianie, miałem kontakt z VB6, VBA, HTML, CSS, PHP, JavaScript w ciągu ostatnich kilku lat i robiłem web zaprojektować NCFE w College'u, ale poza tym nic więcej! W tej chwili uczę się C# z książek i zastanawiałem się 'ile' muszę się nauczyć i jak mogę zwiększyć swoje szanse na zdobycie pracy programisty! Czy późno zacząłem uczyć się kodowania? (Znam wiele osób, które zaczynały w bardzo młodym wieku!) Dzięki za pomoc :)


title: Struktura architektury cebuli

text: Chcę zrozumieć i wdrożyć Architekturę Cebuli i mam niejasny pomysł na to, jak wszystko ustrukturyzować, ale potrzebuję pomocy, aby wyjaśnić niektóre z moich nieporozumień. ![Architektura cebuli](http://i.stack.imgur.com/iyWBg.png) Na podstawie różnych przykładów i artykułów, które przeczytałem stworzyłem powyższą strukturę. Jedno z moich głównych nieporozumień pojawia się, gdy patrzę na „02-Service: Interfejsy usług”. Weźmy IUserService.cs. Zakładam, że ten interfejs zawierałby różne sygnatury, takie jak RegisterUser(), LoginUser(), BanUser(), ModifyUser(), ChangeAuthenticationLevel() i tak dalej? Czy to jest poprawne? Jeśli nie, jakie inne przykłady znaleźlibyśmy? Czy są to usługi domenowe czy usługi aplikacji?


title: Zapobieganie przelicznikom ip w programie podobnym do skype

text: Obecnie jestem w trakcie tworzenia programu podobnego do Skype, który wykorzystuje hybrydowy system peer to peer do komunikacji między użytkownikami (tj. serwer zawiera wszystkie adresy IP użytkowników, klient, który chce połączyć się z przyjacielem, powie serwerowi, że następnie wyśle każdemu klientowi adres IP drugiego, aby mogli rozpocząć dziurkowanie w celu ustanowienia połączenia między nimi). Wiem, że w przypadku Skype'a istnieje wiele stron internetowych, które pozwalają wpisać nazwę użytkownika i łatwo uzyskać jego adres IP. Moje pytanie brzmi, jaki jest najlepszy sposób zapobiegania takiemu exploitowi? Oto kilka rozwiązań, które mógłbym wymyślić: * zapisz listę znajomych każdego użytkownika na serwerze (aby serwer mógł po prostu odrzucić żądania IP od użytkowników, którzy nie znajdują się na liście znajomych żądanego klienta) * zawsze, gdy zostanie o to zapytany serwer dla adresu IP klienta zapytaj klienta, czy pytający jest na liście znajomych (jeśli nie, nie odpowiadaj) * niech każdy klient używa jakiegoś tajnego klucza do komunikacji z serwerem (więc tylko zarejestrowani klienci będą mogli wysyłać żądania IP ) Zapraszam do dodania innego rozwiązania, ponownie, są to tylko rozwiązania, o których mogłem pomyśleć podczas pisania tego pytania. Dodatkowo pokrewne pytanie, które chciałem zadać - jaka byłaby najlepsza praktyka w takim programie: Niech każdy klient przechowuje adresy IP swoich znajomych i sprawia, że serwer powiadamia go o każdej zmianie -VS- Niech klient pyta serwer dla adresu IP przyjaciela, gdy chce nawiązać z nim bezpośrednie połączenie (pamiętaj, że klient i tak musi poinformować serwer, gdy próbuje się z kimś połączyć, aby dziurkowanie zadziałało). PS Nigdy nie stworzyłem takiego programu i nie korzystam z żadnego samouczka ani takiego. Jeśli istnieje lepszy sposób na zrobienie czegoś, co napisałem, lub jeśli coś się pomyliło, byłbym bardzo zadowolony, gdybyś mógł o tym wspomnieć.


title: Co jest ważniejsze dla zaawansowania w pisaniu dużej ilości kodu (może tylko poprawek błędów) lub nauki większej ilości CS?

text: Obecnie jestem studentem studiów magisterskich na kierunku Informatyka. Miałem kilka prac, zanim wróciłem (robiłem trochę kodu dla armii podczas pobytu) i pracowałem w sklepie Oracle. Obie prace mogłyby być wykonywane przez małpy po semestrze informatyki. Chcę być świetnym programistą. Tak więc teraz wróciłem do szkoły, pracuję nad moim magistrem z informatyki i chcę zrobić swoją pracę magisterską z eksploracji danych i przetwarzania języka naturalnego. Mam ograniczony czas i obecnie wykorzystuję swój wolny czas na przerabianie struktury i interpretacji programów komputerowych, uczenia maszynowego, OpenGL SuperBible (aby nauczyć się podstaw grafiki) oraz Intro do algorytmów Cormena w przerwie przed rozpoczęciem kwartału zimowego. Piszę też większość projektów programistycznych, które towarzyszą tym książkom. Czy wydaje mi się to dobrym wykorzystaniem mojego czasu, czy też powinienem skrócić swój czas o połowę i zacząć próbować naprawiać błędy w jakimś projekcie open source (nigdy nie robiłem rzeczy open source i ledwo mam pojęcie o tym, jak rozpocząć)? Jeśli polecisz open source, jak powinienem zacząć (naprawdę, krok po kroku byłby fajny, do tej pory nic nie robiłem, ponieważ dosłownie nie wiem, jak zacząć) lub jeśli kontynuuję naukę, na czym powinienem się skupić ? Dziękuję.


title: Migracja do systemów wbudowanych

text: Moja firma do tej pory rozwijała urządzenie medyczne, które jest podłączone przez USB do komputera stacjonarnego (z systemem x64 Windows 7), aby przeprowadzać analizę obrazu i robić wszystko, co związane z GUI. Jestem zaznajomiony zarówno z programowaniem Windows, jak i Linux, C, C++, C++11 i C#, ale teraz nasz nowy projekt pochodzący od zarządzania byłby ręcznym, wbudowanym systemem, a ponieważ jestem jedynym inżynierem oprogramowania, absolutnie nie mam pomysł, jak działają systemy wbudowane. Czy jest to całkowicie odmienne od „normalnej” pracy programistycznej, czy powinienem polecić zatrudnienie kogoś z doświadczeniem wbudowanym, czy są dobre zasoby do wprowadzenia do komputerów wbudowanych? Nie wiem, czego się dokładnie spodziewać (teoretycznie będzie to takie samo, jak w przypadku systemów stacjonarnych, czujnika pozyskującego obraz i oprogramowania dokonującego analizy). Czy ktoś może mi pomóc zorientować się, czego powinienem się spodziewać? Edycja: nie ma ram, jakiego sprzętu użyć. Możemy używać wszystkiego, co chcemy, o ile jest na tyle małe, że można je trzymać w ręku. Będziemy używać czujnika innej firmy (albo czujnika fotograficznego, albo czujnika akustycznego, który jeszcze nie został wprowadzony), ale znowu możemy decydować, więc przypuszczam, że będzie miał dobrze ugruntowane API. Naprawdę nie wiem, czym są systemy wbudowane, eksperymentowałem prywatnie z Arduino, czy to już liczy się jako wbudowane?


title: Czym są ramy oparte na konwencji?

text: Czytam o ColdBox i natknąłem się na to słowo. Więc co oznacza ramy oparte na konwencji?