title: Czy byłoby sensowne używanie obiektów (zamiast typów pierwotnych) do wszystkiego w C++?

text: Podczas ostatniego projektu, nad którym pracowałem, musiałem używać wielu funkcji, które wyglądają tak: static bool getGPS(double plane_latitude, double plane_longitude, double plane_altitude, double plane_roll, double plane_pitch, double plane_heading, double gimbal_roll, double gimbal_pitch, double gimbal_yaw, int target_x, int target_y, double zoom, int image_width_pixels, int image_height_pixels, double & Target_Latitude, double & Target_Longitude, double & Target_Height); Więc chcę go zrefaktoryzować, aby wyglądał mniej więcej tak: statyczny GPSCoordinate getGPS(GPSCoordinate plane, Angle3D planeAngle, Angle3D gimbalAngle, cel PixelCoordinate, ZoomLevel zoom, PixelSize imageSize) Wydaje mi się to znacznie bardziej czytelne i bezpieczne niż pierwsza metoda. Ale czy ma sens tworzenie klas `PixelCoordinate` i `PixelSize`? A może lepiej byłoby po prostu użyć `std::pair<int,int>` dla każdego. I czy ma sens posiadanie klasy `ZoomLevel`, czy powinienem po prostu użyć `double`? Moja intuicja dotycząca używania klas do wszystkiego opiera się na następujących założeniach: 1. Jeśli istnieją klasy do wszystkiego, nie da się przekazać `ZoomLevel` w miejscu, w którym oczekiwano obiektu `Weight`, więc byłoby trudniej podać błędne argumenty do funkcji 2. Podobnie, niektóre niedozwolone operacje mogą spowodować błędy kompilacji, takie jak dodanie `GPSCoordinate` do `ZoomLevel` lub innego `GPSCoordinate` 3. Legalne operacje będą łatwe do reprezentowania i bezpieczne dla typu. tj. odjęcie dwóch `GPSCoordinate` dałoby `GPSDisplacement` Jednak większość kodu C++, który widziałem używa wielu typów prymitywnych i wyobrażam sobie, że musi być ku temu dobry powód. Czy to dobry pomysł, aby używać przedmiotów do czegokolwiek, czy ma to wady, o których nie jestem świadomy?


title: Klauzula zakazu nakłaniania w moim liście ofertowym - potencjalny pracodawca twierdzi, że nie podlega to negocjacjom. Czy to zerwanie umowy?

text: Niedawno otrzymałem ofertę od firmy, którą zadzwonię do ACME. W umowie NDA dołączonej do oferty pojawia się następująca klauzula: > 2.Brak nagabywania. Zgadzam się, że dopóki jestem zatrudniony przez ACME i przez > dwa (2) lata po tym okresie, nie będę bezpośrednio lub pośrednio > zabiegać o inne zatrudnienie lub pracę żadnego pracownika, konsultanta lub doradcy > ACME, ani też nie będę ingerować w relacje ACME z takimi osobami, > starać się odciągnąć ich od ACME lub pomagać innym osobom w > odciąganiu ich od ACME. Teraz odrobiłem pracę domową. W szczególności znakomity artykuł Joela o umowach NDA i umowach, których nigdy nie powinieneś podpisywać, poinformował mnie, że podpisanie tej klauzuli zdecydowanie nie leży w moim najlepszym interesie. Odesłałem rekruterowi wiadomość e-mail z prośbą o usunięcie tej klauzuli; odpowiedziała, że nie podlega negocjacjom. **Czy warto się tego trzymać?** Poza tym jestem bardzo zadowolona z pakietu ofertowego, a jest to dla mnie bardzo wymarzona praca, położona w dolinie krzemowej, miejsce, w którym chciałam pracować odkąd rozpoczął studia. **Jakie są szanse, że ta klauzula mnie skrzywdzi?** Mój koszmarny scenariusz jest taki, że niektórzy z moich współpracowników odejdą, aby założyć naprawdę fajny startup, ale nie będą w stanie zabrać mnie na pokład; Nie lubię tak ograniczać mojej przyszłej kariery. **Jak często ta klauzula jest faktycznie egzekwowana?** Czytałem, że czasami ta klauzula i inne klauzule „non-compete/non-solicit” są i tak niewykonalne w niektórych jurysdykcjach. Nie wiem jednak o Kalifornii. **Edytuj:** Kilka z tych odpowiedzi jest nieco niedorzecznych w ich oskarżeniach, że chcę „przekupić” pracowników tej firmy, zanim jeszcze zacznę tam pracować. To trochę za dużo. Moim celem jest mieć dobrą pracę, którą lubię wykonywać, a ta firma najprawdopodobniej to zapewni. Po prostu martwię się, czy ta klauzula będzie kolidować z moją karierą za kilka lat, jeśli chcę przejść na wyższe stanowisko lub możliwość założenia własnej firmy.


title: Jaki język naturalny ma przewagę, jeśli chodzi o programowanie?

text: Względność językowa to idea, że język kształtuje sposób, w jaki myślimy. Moje pytanie brzmi, na ile iw jakim stopniu dotyczy to programowania? * Czy niektóre natywne, naturalne języki lepiej nadają się do myślenia o programowaniu niż inne? Na przykład, czy w języku innym niż angielski można bardziej zwięźle sformułować następujące informacje? `Wybierz oś. Przenieś wszystkie elementy mniejsze niż oś na jedną stronę listy, a wszystkie elementy większe niż oś na drugą stronę." czy też różnice zanikają, gdy oba są zanurzone w temacie? * Czy niektóre języki programowania i domeny są łatwiejsze do przemyślenia w tym czy innym języku. Na przykład, czy łatwiej jest zdobyć Rubiego, jeśli jesteś Japończykiem, ponieważ twórca Rubiego jest Japończykiem? Zauważ, że to pytanie nie skupia się na tym, „jak języki programowania wpływają na sposób, w jaki ludzie myślą o programowaniu”, ale raczej „w jaki sposób **naturalne** języki wpływają na sposób, w jaki ludzie myślą o programowaniu”. Aby usunąć to z drogi, jednym z języków, który ma wyraźną przewagę pragmatyczną, jest **angielski**. Myślę, że korzyść ma niewiele wspólnego z wyborem języków programowania w języku angielskim, takich jak `if`, `for`, `while` i `do`, podobnie jak muzycy, którzy nie mówią po włosku, nie potykają się o słowa takie jak _forte_ . Ma to więcej wspólnego z komunikowaniem pomysłów z innymi programistami, ponieważ język angielski jest obecnie lingua franca, przynajmniej w świecie programowania. Na przykład, aby zadać pytanie w StackOverflow, naprawdę musisz znać angielski i znać go całkiem dobrze, jeśli chcesz uzyskać dobre odpowiedzi. Chociaż brzmi to jak postawa imperialistyczna, w praktyce jest to prawdziwe. Poza tym, w jaki sposób wewnętrzne właściwości języków wpływają na to, jak programiści, którzy nimi mówią, myślą o strukturach danych, algorytmach itp.? Czy jakiekolwiek języki są szczególnie zwięzłe, jeśli chodzi o mówienie o logice i programowaniu, co pozwala rodzimym użytkownikom tych języków myśleć szybciej?


title: Jakie narzędzia sprzętowe/programowe zostały użyte do budowy 8-bitowych gier o komercyjnej jakości?

text: Mam na myśli, że nadal mam MSX2 z procesorem Z80 i jeśli spojrzysz na jakąkolwiek grę Konami stworzoną na ten komputer w swoim czasie (mniej więcej między '84 a '90), to zdumiewający jest wysokiej jakości kod tych gier. Byłem wtedy dzieckiem, próbującym nauczyć się programować komputer i do dziś fascynowało mnie, jak dobrze są wykonane, głównie zero błędów i usterek, pomimo naprawdę złożonego zachowania. Jakich narzędzi sprzętowych/programowych mogli użyć, aby osiągnąć tę jakość, jakiej metodologii? Wiem, że dziś komputery są naprawdę bardziej złożone, ale w tamtym czasie nawet program do kontroli zapasów, który stworzyłem w Basicu, był nękany wieloma błędami i trudny do debugowania. Każde światło, które możesz rzucić, zostanie głęboko docenione.


title: Czy powinienem oczekiwać, że będę wiedział dużo o każdym języku, który umieściłem w swoim CV jako student?

text: Jeśli podczas rozmowy kwalifikacyjnej zostanie mi poproszony o zaprogramowanie algorytmu, powiedzmy wyszukiwania binarnego, w językach innych niż Java, trudno mi będzie zapamiętać składnię. Czy mogę powiedzieć mojemu rozmówcy, że mogę to kodować tylko w Javie, ponieważ pracowałem wcześniej z innymi językami, ale od jakiegoś czasu ich nie używałem? Jeśli nie, jakie masz sugestie (np. jakie języki i ich części spośród nich powinienem poznać przed rozmową kwalifikacyjną)?


title: Komentarz przed lub po odpowiednim kodzie

text: Zakładając, że komentarz nie zmieści się (lub nie może się znaleźć) w wierszu, którego dotyczy, czy należy napisać komentarz przed kodem czy po? Cóż, wszędzie tam, gdzie przyszli czytelnicy najlepiej zrozumieją zakres komentarza. Innymi słowy, wszędzie tam, gdzie większość programistów/skrypciarzy umieszcza takie komentarze. Więc **gdzie większość programistów/skrypciarzy umieszcza komentarz: przed czy po swoim kodzie?** Jeśli Twoja odpowiedź dotyczy tylko określonych języków, wskaż który. A jeśli możesz zacytować zaakceptowaną specyfikację lub przewodnik, który wspiera twoją odpowiedź, tym lepiej.


title: Dlaczego Java kiedykolwiek miałaby być szybsza niż C++?

text: Czasami Java przewyższa C++ w testach porównawczych. Oczywiście czasami C++ jest lepszy. Zobacz następujące linki: * http://keithlea.com/javabench/ * http://blog.dhananjaynene.com/2008/07/performance-comparison-c-java-python-ruby-jython-jruby-groovy/ * http://blog.cfelde.com/2010/06/c-vs-java-performance/ Ale jak to w ogóle jest możliwe? Nie mogę uwierzyć, że interpretowany kod bajtowy może być szybszy niż język skompilowany. Czy ktoś może wyjaśnić? Dziękuję!


title: Budowanie klonu dropbox

text: Chcę stworzyć własny klon Dropbox (do celów edukacyjnych - tylko aplikacja Windows) i szukam kilku wskazówek. Obecnie używam `FileSystemWatcher`, aby sprawdzić, czy nastąpiła zmiana, a następnie używam `rsync` do synchronizacji wszystkich danych. Jak to działa na wielu komputerach? Jeśli komputer A zmieni plik, należy go przekazać do komputera B (i odwrotnie). Moje pytania to: * Czy muszę stworzyć system powiadomień push, czy są (lepsze) alternatywy, aby wiedzieć, czy dane muszą być ściągane (jak w pliku zmienił się na serwerze)? * Dropbox ma zielony haczyk i niebieską ikonę synchronizacji. Jak to zrobić? Skąd mam wiedzieć, które pliki są przesyłane/pobierane (jeśli `rsync`- cały katalog)?


title: Czy podział na strony zmniejsza obciążenie serwera? (teoria)

text: Zastanawiałem się, jaki jest powód paginacji? Czy jest używany, ponieważ zmniejsza obciążenie serwerów, ponieważ technicznie ograniczylibyśmy liczbę wierszy zwracanych na stronę? Chciałem zrobić coś bez paginacji, ale biorąc pod uwagę, że jestem w tym nowy (jestem amatorem), zacząłem się zastanawiać, czy jest to OK technicznie, czy nie.


title: Jak zaimplementować wait w Androidzie

text: To jest ogólne pytanie, aby zrozumieć, jak działa await w C#, a szczególnie interesuje mnie wdrożenie go w systemie Android. Tak więc C# await pozwala przejść do trybu oczekiwania w środku metody, aż zadanie, na które czekasz, zostanie zakończone, a następnie będziesz kontynuował wykonywanie metody. Jakkolwiek interesująca jest część, gdy czekasz wewnątrz metody, wątek, nad którym pracujesz, nie jest blokowany (lub na liście nie wygląda na to, że został zablokowany) i kod będzie nadal działał od miejsca, w którym wywołałeś tę metodę . Chcę zrozumieć, co się tam dzieje w C# i jak mogę to zaimplementować w Androidzie?


title: Zamieszanie dotyczące funkcji def w Pythonie

text: Uczę się Pythona od około 2 miesięcy (zacząłem od Learn Python The Hard Way, teraz czytam Dive Into Python) i w obu książkach nadal wydaje mi się, że jestem zdezorientowany tym jednym kawałkiem kodu. Weźmy jako przykład domyślny kod, którego używa Dive Into Python: def buildConnectionString(params): """Zbuduj łańcuch połączenia ze słownika parametrów. Zwraca łańcuch.""" return ";".join(["% s=%s" % (k, v) dla k, v w params.items()]) if __name__ == "__main__": myParams = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret" } print buildConnectionString(myParams) Skąd funkcja `buildConnectionString` z argumentem `(params)` wie, że pobiera dane ze zmiennej `myParams`? Lub `params.items()` również w linii `return`? Czy argument w `buildConnectionString` nie musiałby być ustawiony jako `buildConnectionString(myParams)`, aby był poprawnie odczytywany? Jak możesz ustawić zmienną swoich danych na `myParams`, ale argumentem twojej funkcji będzie `params` i odczytać ją? Skąd wiadomo, że `myParams` należy czytać jako `params`? I czy jest jakiś powód, dla którego nie nazwałeś swojej zmiennej `params` lub odwrotnie nazywając argument w funkcji `myParams`? To było po prostu bardzo mylące, widząc argument ustawiony jako jedno słowo, a następnie mając zmienną nazwaną coś zupełnie innego, ale mając funkcję nadal w stanie odczytać twój kod, nawet jeśli nazwa argumentu jest inna niż twoja zmienna z danymi, które ponowne drukowanie od.


title: Czy czujesz się źle, kiedy musisz uczyć się nowych rzeczy?

text: Nowość nie zawsze jest fajna. Widzę, że wielu ludzi mówi, że są bardzo znudzeni, robiąc podobne rzeczy dzień po dniu. Dla mnie jest odwrotnie – ciągle uczę się czegoś nowego. W ciągu ostatniego roku, prawie co dwa miesiące, muszę zrobić mnóstwo badań na zupełnie nowy temat: RTMP, MP4, SIP, VNC, Płynne przesyłanie strumieniowe, ..., muszę przeczytać dużo specyfikacji, pobrać ton projektów open source, aby zrozumieć koncepcje i przekształcić je w mój uruchamialny kod. I było tak źle! Mój mózg nigdy nie był bardzo pewny i zaznajomiony z niczym, a kiedy jest już blisko pewności i znajomości, będzie musiał przejść do następnej rzeczy. Trochę zazdroszczę ludziom, którzy tworzą aplikacje wyższego poziomu, ponieważ potrafią być bardzo skupieni, a ich zestaw wiedzy obejmuje większość rzeczy, których wymaga ich praca. Wszystko jest dość mierzalne, bezpośrednie i proste. Czy kiedykolwiek miałeś podobne uczucie? Zastanawiam się, czy poprosić szefa o przydzielenie mi innej pracy, żebym pracował jak posuwanie się naprzód szeroką drogą, zamiast wymyślać drogę po ciemku. Myślę, że będzie to bardziej relaksujące, jakaś sugestia?


title: Właściwa biblioteka dla wyliczeń

text: Próbuję przerobić część kodu tak, aby ekran był oddzielony od implementacji i nie jestem pewien, gdzie umieścić istniejące `enum`s. Mój projekt ma obecnie następującą strukturę: * **Utilities** * **RemoteData** ( _Depends on:_ `Utilities`) * **LocalData** ( _Depends on:_ `RemoteData`, `Utilities`) * * *RemoteWeb** ( _Zależy od:_ `RemoteData`, `Utilities`) * **LocalWeb** ( _Zależy od:_ `RemoteData`, `LocalData`, `Utilities`) Próbuję teraz dodać " ** ViewLibrary** ( _Depends on:_ `Utilities`)” do tej listy, a następnie dodanie jej jako nowej zależności zarówno do `RemoteWeb` jak i `LocalWeb`. Będzie zawierał zestaw interfejsów, które zaimplementują pozostałe dwa projekty, użyją do wypełnienia widoku, a następnie zużyją wynik. Istnieje `enum`, które jest obecnie używane we wszystkich projektach _z wyjątkiem_ `Narzędzia`. W ten sposób żyje w projekcie `RemoteData`, ponieważ wszystko inne zależy od niego. Ale ta nowa biblioteka „ViewLibrary” nie będzie zależeć od żadnego projektu danych. Skąd więc będzie wiedziała o tym „enum”? Niektóre opcje, które widzę: * Utwórz nowy projekt tylko dla wspólnych wartości wyliczenia. * Dodaj go do `Narzędzia`, nawet jeśli jest powiązany z danymi. * Zdefiniuj go po raz drugi w `ViewLibrary` i wymagaj zarówno `RemoteWeb`, jak i `LocalWeb`, aby przekonwertować jeden typ na drugi podczas uzyskiwania dostępu do udostępnionych widoków. * Dodaj zależność od `RemoteData` do `ViewLibrary`, nawet jeśli ma być niezależna od źródła danych. Czy są jakieś lepsze opcje? Czy ta struktura jest wadliwa na początku?


title: algorytm mnożenia budki

text: Czy algorytm Booth'a do mnożenia służy tylko do mnożenia 2 liczb ujemnych `(-3 * -4)` czy jednej liczby dodatniej i jednej ujemnej `(-3 * 4)` ? Ilekroć mnożę 2 liczby dodatnie za pomocą algorytmu stoiska, otrzymuję zły wynik. przykład : 5 * 4 A = 101 000 0 `// binarnie 5 to 101` S = 011 000 0 `// 2 dopełnienie 5 to 011` P = 000 100 0 `// binarnie 4 to 100` x = 3 y = 3 m = 5 -m = uzupełnienie dwójkowe m r = 4 1. Po przesunięciu P w prawo o 1 bit 0 000 100 2. Po przesunięciu P w prawo o 1 bit 0 000 010 3. P+S = 011 001 0 Po przesunięciu w prawo o 1 bit 0 011 001 4. Odrzucenie LSB 001100 Ale okazuje się, że jest to binarne 12 . Powinno być 20(010100)


title: Kiedy należy usunąć złożoność?

text: Przedwczesne wprowadzanie złożoności poprzez implementację wzorców projektowych, zanim będą potrzebne, nie jest dobrą praktyką. Ale jeśli zastosujesz się do wszystkich (lub nawet większości) zasad SOLID i użyjesz wspólnych wzorców projektowych, wprowadzisz pewną złożoność, ponieważ funkcje i wymagania są dodawane lub zmieniane, aby Twój projekt był tak łatwy w utrzymaniu i elastyczny, jak to konieczne. Jednak kiedy ta złożoność zostanie wprowadzona i zacznie działać jak mistrz, kiedy ją usuniesz? Przykład. Mam aplikację napisaną dla klienta. Kiedy pierwotnie powstał tam, gdzie kilka sposobów na podwyżki dla pracowników. Użyłem wzorca strategii i fabryki, aby cały proces był czysty i czysty. Z biegiem czasu właściciel aplikacji dodawał lub usuwał pewne metody podnoszenia. Czas mija i nowy właściciel przejmuje kontrolę. Ten nowy właściciel ma twardy nos, wszystko jest proste i ma tylko jeden sposób na podwyżkę. Złożoność wymagana przez wzorzec strategii nie jest już potrzebna. Gdybym miał zakodować to z wymagań, tak jak są teraz, nie wprowadziłbym tej dodatkowej złożoności (ale upewnij się, że mogę to wprowadzić z niewielką ilością pracy lub bez pracy, jeśli zajdzie taka potrzeba). Czy teraz usuwam wdrożenie strategii? Nie sądzę, aby ten nowy właściciel kiedykolwiek zmienił sposób przyznawania podwyżek. Ale sama aplikacja pokazała, że tak się może stać. Oczywiście to tylko jeden przykład w aplikacji, w której nowy właściciel przejmuje kontrolę i uprości wiele procesów. Mogłem usunąć dziesiątki klas, interfejsów i fabryk oraz znacznie uprościć całą aplikację. Zauważ, że obecna implementacja działa dobrze i właścicielka jest z niej zadowolona (i zdziwiona i jeszcze bardziej szczęśliwa, że udało mi się tak szybko zaimplementować jej zmiany ze względu na omawianą złożoność). Przyznaję, że mała część tej wątpliwości wynika z tego, że jest bardzo prawdopodobne, że nowy właściciel nie będzie już ze mnie korzystał. Nie obchodzi mnie, że ktoś inny to przejmie, ponieważ nie jest to duży generator dochodów. Ale zależy mi na 2 (powiązanych) rzeczach 1. Trochę mnie obchodzi, że nowy opiekun będzie musiał trochę bardziej się zastanowić, próbując zrozumieć kod. Złożoność jest złożonością i nie chcę rozzłościć psychomaniaka, który mnie ściga. 2. Ale jeszcze bardziej martwię się, że konkurencja zobaczy tę złożoność i pomyśli, że po prostu wdrażam wzorce projektowe, aby wydłużyć godziny pracy. Potem rozpuściłem tę plotkę, żeby zaszkodzić mojemu drugiemu biznesowi. (Słyszałem o tym.) Więc... Czy ogólnie rzecz biorąc, czy wcześniej potrzebna złożoność powinna zostać usunięta, nawet jeśli działa i istnieje historycznie zademonstrowana potrzeba złożoności, ale nic nie wskazuje na to, że będzie potrzebna w przyszłości? Nawet jeśli na powyższe pytanie generalnie odpowiada się „nie”, czy mądrze jest usunąć tę „niepotrzebną” złożoność, jeśli przekazujesz projekt konkurentowi (lub obcej osobie)?


title: W którym momencie mogę powiedzieć, że „nauczyłem się” języka?

text: W ciągu kilku lat programowania bawiłem się wszystkim, od Rubiego do C++. Zrobiłem wszystko, od nauki podstawowej składni (Ruby) do ukończenia kilku dużych (dla mnie) projektów, które rozszerzyły moje umiejętności z językiem. Biorąc pod uwagę tę różnorodność (i fakt, że prawdziwa nauka języka nigdy się nie kończy), kiedy mogę powiedzieć, że znam (lub nauczyłem się) języka?


title: Nazwa klasy, która tworzy kilka klas dla procesu

text: Wszyscy wiemy, że najtrudniejsze działy informatyki zajmują się unieważnianiem pamięci podręcznej i nazywaniem rzeczy; moim problemem jest to drugie. Mam proces, który wywołuje zdarzenia, gdy dzieją się różne rzeczy. Zamiast tworzyć wszystkie obiekty dla wszystkich potencjalnych zdarzeń przed uruchomieniem procesu, stworzyłem klasy, które tworzą niezbędne zależności dla zdarzenia, gdy zdarzenie jest wywoływane, a następnie wywołuje następny podproces. Nie mam pojęcia, jak nazwać te zajęcia. Typowy przykład może obejmować rejestrator, program pocztowy i wszystko, co jest potrzebne do renderowania widoku dla tego zdarzenia, takie jak szablony. Nie każda akcja potrzebuje tych rzeczy, bo inaczej po prostu bym je stworzył i z tym skończył.


title: Z perspektywy wykonania jest to interpreter taki sam jak JVM / lub .net Framework

text: Niedawno rozpocząłem dwa kursy wprowadzające - jeden w Pythonie, drugi w Javie. Przeczytałem odpowiedzi na **to pytanie**, ale nadal mam trudności ze zrozumieniem, w jaki sposób każdy z nich kończy się kodem maszynowym i jakie są główne różnice między tymi dwoma modelami: * Czy interpreter wykonuje tę samą pracę, co coś takiego jak ** JVM**, tylko bez kodu bajtowego? * Czy w przypadku Pythona interpreter pobiera kod wysokiego poziomu i tłumaczy go na kod maszynowy? * Maszyna wirtualna Java musi być zainstalowana na maszynie, aby program Java działał na niej - czy jest podobny do pythona - jeśli interpreter jest zainstalowany na maszynie docelowej, program python zostanie uruchomiony? * Czy JVM (i framework .net) skutecznie interpretuje kod bajtowy?


title: Czy projekty sekwencji są odpowiednie do projektowania przycisków GUI?

text: W szczególności mam wiele przycisków, które będą zmieniać kolor w oparciu o informacje o stanie z danych wejściowych operatora i danych wejściowych z różnych podkomponentów i czujników. Chciałbym użyć UML lub innego rodzaju diagramów projektowych, aby móc uchwycić przejście kolorów. Niektórzy ludzie sugerowali diagramy sekwencji, ale nie byłem w stanie znaleźć żadnych dobrych przykładów, które pokazują, jak włączyć ten artefakt projektowy. Naprawdę chciałbym iść w tym kierunku, aby pomóc deweloperom. Czy projekty sekwencji są rzeczywiście odpowiednie, czy też istnieje bardziej odpowiedni projekt?


title: Opcjonalne średniki

text: Najczęściej w języku imperatywnym ogólnego przeznaczenia - średniki jako ograniczniki instrukcji są albo wymagane, albo całkowicie niedozwolone (np. C i Python). Jednak niektóre języki, takie jak JavaScript, pozwalają zrezygnować z rozdzielania instrukcji średnikami na rzecz innych ograniczników (takich jak znak nowej linii). Jakie są za tym decyzje projektowe? Rozumiem, że średniki są niezbędne podczas pisania wielu instrukcji w tym samym wierszu, ale czy istnieje inny powód, aby uczynić je obowiązkowymi (poza C)?


title: Zero jako stała?

text: Ostatnio zetknąłem się z tym idiomem programowania: const float Zero = 0.0; który jest następnie używany w porównaniach: if (x > Zero) {..} Czy ktoś może wyjaśnić, czy jest to rzeczywiście bardziej wydajne, czytelne lub możliwe do utrzymania niż: if (x > 0.0) {..} UWAGA: Przychodzi mi do głowy _inne_ powodów, aby zdefiniować tę stałą, zastanawiam się tylko nad jej użyciem w _tym_ kontekście.


title: Jakie jest przyjazne dla użytkownika rozwiązanie do edycji szablonów wiadomości e-mail ze zmiennymi zastępczymi?

text: Pracuję nad systemem, w którym polegamy na wielu "adminach/menedżerach" wysyłających użytkownikom e-maile z bazy danych. Jedną z kluczowych funkcji jest możliwość wysyłania e-maili do kilku osób jednocześnie, z konkretnymi informacjami dotyczącymi każdej z nich. Kolejną kluczową cechą jest możliwość ręcznego tworzenia wiadomości e-mail, ponieważ za każdym razem konieczne jest ich niewielkie modyfikowanie, ale posiadanie podstawowego szablonu oszczędza dużo czasu. W tym celu mamy typowe rozwiązanie "szablonów", gdzie mamy szablon, który wygląda mniej więcej tak: Witaj {{recipient.full_name}}, Twoje zgłoszenie do {{activity.title}} zostało zaakceptowane. Poprosiłeś o udział w terminach {{application.dates}}, w roli {{application.role}} Blah blah blah Problemem, który mamy, jest oczywiście to, że (zgodnie z oczekiwaniami) menedżerowie nie otrzymują wszystkich „zmiennych” ” i robią takie rzeczy, jak ich nadpisywanie, co nie pozwala im wysyłać wiadomości e-mail do więcej niż jednej osoby naraz, zakładając, że nie zostaną one zastąpione, a system jest zepsuty, lub nawet niewytłumaczalne rzeczy, takie jak „Cześć {{ Jan}}". Dużym problemem jest to, że nie jest to, jak zwykle, przeniesione do sekcji „administratora”, w której tylko kilku zaawansowanych użytkowników ma dostęp do edytowania szablonów, które są automatycznie wysyłane i oczekuje się od nich, że wiedzą, co robią. **Każdy** użytkownik systemu jest narażony na ten problem. Oczywistym rozwiązaniem byłoby zastąpienie zmiennych _before_ pokazujących ten szablon dla użytkownika do edycji, ale to nie działa w przypadku wysyłania e-maili do kilku osób. Wydaje się to dość powszechnym problemem i mamy nadzieję, że ktoś już go rozwiązał. Czy widziałeś/stworzyłeś/możesz wymyślić dobre rozwiązania tego problemu? **Aktualizacja** To, co ostatecznie zrobiłem na podstawie odpowiedzi Daniela B, polegało na wykryciu, na podstawie pozycji kursora i pozycji {{ }} w kodzie, czy użytkownik jest obecnie "wewnątrz zmiennej" czy "na zewnątrz". Wewnątrz pokazuję kawałek tekstu poniżej dużego obszaru tekstowego, wyjaśniając, że zostanie on zastąpiony i że mogą go całkowicie usunąć, jeśli chcą, ale nie mogą go edytować. Robię to onClick, onChange, onKeyDown, onKeyUp. W przypadku zdarzeń „kluczowych”, jeśli jesteśmy wewnątrz zmiennej, zwracam TRUE tylko wtedy, gdy keyCode jest jednym z kilku kluczy „nawigacyjnych”. W przeciwnym razie zwracam FALSE, co skutecznie uniemożliwia edycję tej zmiennej. Nie jest idealny, ale był bardzo tani i wydaje się skuteczny.


title: Komunikat UI przechodzący przez paradygmat programowania

text: Niedawno (około dwa miesiące temu) przeczytałem artykuł, który wyjaśniał paradygmat interfejsu użytkownika, którego nazwy nie pamiętam i nie mogę już znaleźć tego artykułu. Paradygmat pozwala na oddzielenie interfejsu użytkownika i zaplecza poprzez przekazywanie komunikatów (poprzez implementację kolejkowania). Tak więc każde działanie użytkownika skutkuje przekazaniem wiadomości do zaplecza. Interfejs użytkownika jest następnie aktualizowany, aby poinformować użytkownika, że jego żądanie jest przetwarzane. Założenie jest takie, że interfejs użytkownika jest z definicji przestarzały. Dane odczytywane z jakiegoś sklepu do pamięci są nieaktualne, ponieważ inna transakcja może już aktualizować te same dane. Jeśli tak założysz, nie ma sensu próbować reprezentować „bieżącego” stanu bazy danych w interfejsie użytkownika (więc opóźnienie wprowadzone przez przekazywanie komunikatów do zaplecza nie ma znaczenia). Jeśli dobrze pamiętam, w artykule wspomniano również o magazynie danych zoptymalizowanym pod kątem odczytu do renderowania interfejsu użytkownika. Artykuł zakładał aplikację internetową o dużym natężeniu ruchu. Podstawowym powodem korzystania z kolejki komunikatów komunikującej się z backendem jest wydajność: jak najszybsze zwrócenie kontroli użytkownikowi. Aktualizowanie sklepów zaplecza jest obsługiwane przez inny proces i ostatecznie zmiany te stają się również widoczne dla użytkownika. Mam nadzieję, że wyjaśniłem wystarczająco dokładnie, czego szukam. Jeśli ktoś może podać kilka wskazówek do tego, czego szukam, z góry bardzo dziękuję.


title: Jak powstają Chatterboty?

text: Kiedyś tworzyłem aplikację, która zajmuje się wieloma interfejsami API chatterbotów. To sprawiło, że zacząłem się zastanawiać, jak dokładnie powstają te boty? Jak opracowują odpowiedź na Twoje pytania? Czy opierają się na wcześniejszych rozmowach z Tobą/innymi osobami, aby uzyskać bardziej wiarygodną odpowiedź?


title: Jak radzić sobie z różnymi stylami programowania w zespole?

text: Mamy mały zespół programistów (tylko 3 programistów) i niedawno zyskaliśmy nowego członka zespołu. Chociaż jest sprytnym koderem, jego styl kodowania jest zupełnie inny niż nasz. Nasza istniejąca baza kodu zawiera głównie czytelny, czysty i łatwy w utrzymaniu kod, ale nowy członek zespołu szybko zmienia wiele plików, wprowadza brzydkie hacki i skróty, używa definicji w całym miejscu, dodaje funkcje w niewłaściwych miejscach itp. Moje pytanie brzmi, czy inni już wcześniej doświadczyli takiej sytuacji i jeśli ktoś ma wskazówki, jak z nim rozmawiać.


title: Web Service Design: korzyści płynące z przesyłania przypadków użycia do adresu URL zamiast używania parametrów wyszukiwania lub odwrotnie?

text: Muszę zbudować serwis internetowy dla informacji o pracownikach i próbuję to zaplanować. Dla wyjaśnienia mamy już usługę REST dla Ludzi i oddzielną usługę REST dla Firm. Ta usługa będzie dotyczyć w szczególności relacji między tymi dwoma (wszystkie dane będą dostarczane z usług do odbiorców danych za pośrednictwem klienta (lub klientów) ). Ta usługa będzie musiała między innymi: 1. pobrać wszystkich pracodawców (identyfikatory firmy) dla danego identyfikatora osoby 2. pobrać wszystkich pracowników (identyfikatory osoby) dla danego identyfikatora firmy Mogłem to zrobić na kilka różnych sposobów. 1. Użycie parametrów wyszukiwania mogłoby wyglądać _coś_ tak: * `http://blah/employee/find?person_id=12345` * `http://blah/employee/find?company_id=9876` 2. Użycie adresu URL mogłoby wyglądać _coś_ jak: * `http://blah/employee/find/employers?id=12345` * `http://blah/employee/find/employees?id=9876` Przyjmując podejście URL, byłbym w stanie konkretnie sprawdź poprawność dla jednego parametru dla każdego przypadku _pracodawca_ i _pracownik_ .. wydaje się ładne i czyste, ale dość ustalone. Przyjmowanie podejścia parametrycznego wydaje się być mniej sztywne/bardziej elastyczne, ale wymaga większej liczby ścieżek danych (jeśli/inne), a zatem kod może potrwać dłużej, aby zrozumieć, kiedy przyszły ja (lub ktokolwiek inny) powróci do niego po to już dawno zapomniane. Jakie mogą być korzyści z wybrania jednej opcji w porównaniu z drugą? Dla mnie różnica _**wydaje się**_ trochę arbitralna, ale to pierwszy raz, kiedy muszę podjąć taką decyzję.


title: Jak poważna jest utrata kodu źródłowego?

text: Jeśli firma programistyczna utraci kod źródłowy jednego ze sprzedawanych produktów, jak poważne byłoby to w kategoriach, które można by wyjaśnić laikowi? Czy określenie „rażące zaniedbanie” byłoby zbyt mocne? Lub „rażąca niekompetencja”? Oczywiście nikt nie zginął, ale czy nie jest to tak poważne, jak zaniedbanie finansowe, za które ludzie trafiają do więzienia? **EDYTUJ:** Załóżmy, że nie chodzi o awarię dysku, klęskę żywiołową ani nic podobnego. Po prostu zgubili to.


title: Czy testerzy są uważani za niskoprofilowych?

text: Zdarzyło mi się znać pewnego administratora systemu i według niego testerzy nie mają preferencji w organizacji w porównaniu z programistami. Bez wątpienia wydania oprogramowania nie są możliwe bez testerów, ale nigdy nie miałem okazji do testowania, więc nie jestem tego świadomy. Bez obrazy zamierzonej.


title: Przejście z SDK App Engine na wtyczkę Google dla Eclipse

text: Staram się zrozumieć, jak ludzie przechodzą za pomocą swoich aplikacji w SDK App Engine i jak/dlaczego/co przenoszą się do wtyczki Google dla Eclipse. Wygląda na to, że możesz stworzyć aplikację internetową za pomocą pakietu App Engine SDK lub możesz zrobić to samo za pomocą Eclipse. Dlaczego oferować oba? Jak ludzie przenoszą App Engine do Eclipse i Google Web Toolkit?


title: Jakiego oprogramowania można użyć do tworzenia diagramów architektury?

text: Używam MS Visio do większości moich prac projektowych / architektonicznych, kiedy muszę mieć możliwość zapisania gdzieś diagramu i późniejszej edycji. Nie jestem największym fanem Visio, ale wykonuje swoją pracę (i jest bezpłatny w pracy). Zastanawiałem się, czy istnieją jakieś dobre alternatywy dla dość drogiego oprogramowania Visio, może coś jeszcze lepszego, z którego korzystaliście w przeszłości i z którym czuliście się komfortowo. Na pewno chciałbym mieć ten program w moim zestawie narzędzi!


title: Mnemonik dla zawsze nadpisywania równa się, gdy nadpisujesz hashCode?

text: My, programiści javy, zawsze wiemy, że zawsze należy nadpisywać equals(), gdy nadpisuje się hashCode(), ale stale mam problemy z zapamiętaniem tej reguły. Jaki jest sprytny mnemonik, który pomoże programistom Javy o tym pamiętać?


title: Uprawnienia użytkownika/grupy MySQL PHP

text: Próbuję skonfigurować tabelę bazy danych mysql, której mogę używać jako tabeli uprawnień użytkownika/grupy. Prawie jak to, co ma Facebook, w przypadku witryny intranetowej lokalnej firmy. Jaki jest najlepszy możliwy sposób zaprojektowania tej tabeli, która pozwoliłaby mi znaleźć uprawnienia użytkownika z najmniejszą liczbą zapytań?


title: Konkretne przykłady maksymy Pythona „Tylko jeden sposób, aby to zrobić”

text: Uczę się Pythona i intryguje mnie następujący punkt w PEP 20 _Zen Pythona_ : > Powinien być jeden - a najlepiej tylko jeden - oczywisty sposób, aby to zrobić. > Chociaż na początku może to nie być oczywiste, chyba że jesteś Holendrem. Czy ktoś mógłby podać jakieś konkretne przykłady tej maksymy? Szczególnie interesuje mnie kontrast z innymi językami, takimi jak Ruby. Częścią filozofii projektowania Ruby (wywodzącej się z Perla, jak sądzę?) jest to, że wiele sposobów robienia tego jest Dobrą Rzeczą. Czy ktoś może podać kilka przykładów pokazujących zalety i wady każdego podejścia. Zauważ, że nie chodzi mi o odpowiedź, która jest lepsza (która jest prawdopodobnie zbyt subiektywna, aby kiedykolwiek na nie odpowiedzieć), ale raczej o bezstronne porównanie obu stylów.


title: Możliwość przejęcia projektu JavaMe przez programistów, którzy nie mają doświadczenia w JavaMe

text: Ponieważ oryginalny zespół JavaMe odejdzie, aby zrobić inne rzeczy. Projekt JavaMe zostanie przejęty przez kilku facetów, którzy nic nie wiedzą o JavaMe. Okres przejściowy: Miesiąc Informacje o projekcie JavaMe: 1. około 35000 linijek kodu (ponad 180 plik java, kod źródłowy to łącznie 8,5 KB) 2. w języku polskim, Proguard 3. dokument: Sam projekt JavaMe nie ma żadnego dokumentu. Brak mapy UML. Trudności, jak sądzę: 1. Zaznajomieni z JavaMe, powinno być w porządku 2. W celu dalszego rozwoju. Musimy przeczytać kod źródłowy ---- Nie jest łatwo przeczytać 35.000 linii kodu bez wystarczającego komentarza 3. Praca adaptacyjna dla ponad 100 telefonów Oto pytania, dziękuję! 1. W przypadku naszych chłopaków nie mają doświadczenia w JavaMe, czy jeden miesiąc jest zbyt pochopny? 2. Aby podjąć pracę na czas. O co powinniśmy poprosić oryginalny zespół JavaMe . 3. Biorąc pod uwagę, że nie mamy doświadczenia w JavaMe. Jaką komplikację podejmujemy pracę adaptacyjną bez oryginalnego zespołu JavaMe? 4. Jakieś inne sugestie?


title: Czy powinienem odłożyć młodszą rolę, która korzysta z internetowego testu programistycznego?

text: Aplikowałem na stanowisko junior development, a raczej zostałem znaleziony przez rekrutera poszukującego programisty. Aby dostać się do etapu rozmowy telefonicznej, zostałem poproszony o przystąpienie do jednego z tych testów kodowania online. Nie do końca tego się spodziewałem. Uważam się za całkiem dobrego programistę jak na swój wiek i doświadczenie, ale nie mam złudzeń co do bycia Donem Knuthem ani nic w tym stylu. Test składał się z serii niewiarygodnie tępych pytań pytających o wyniki różnych niejasnych ocen. Po około 30 minutach myślałem sobie, że nie zamierzałem brać udziału w zaciemnionym konkursie kodu/ćwiczeniu w golfa. Po ostatniej rozmowie telefonicznej zostałem poproszony o zbudowanie czegoś. Zrobiłem. To wydawało się sprawiedliwe. Odejdź i rozpracuj to jest bardziej moim biurowym doświadczeniem w programowaniu niż "proszę ocenić tę kombinację lambd, filtrów, map, list, krotek itp." Więc jestem trochę zniechęcony, szczerze mówiąc. Nigdy nie twierdziłem, że znam język od podszewki ani te wszystkie małe przypadki. Moje pytania, to: 1. Czy powinienem się zniechęcić? Czemu? Dlaczego nie? 2. Czy tego rodzaju testy są tym, czego powinienem oczekiwać od młodszych ról? 3. Czy powinienem nauczyć się stylu egzaminu? Wydaje się, że to jest celem tych testów, na które masz czas i nie powinieneś używać odniesień ani książek? Zwykle w trakcie tworzenia mam dość dobre pojęcie o podstawowych typach, regułach, kontroli przepływu i cokolwiek. Od czasu do czasu natrafiam na coś, do czego potrzebuję użyć wyrażenia regularnego i muszę przypomnieć sobie dokładny fragment składni, którego potrzebuję, jeśli próbowanie tego, co moim zdaniem powinno działać, nie działa. Albo natknę się na moduł, którego wcześniej nie używałem, i pójdę i go poszukam. Na przykład, gdybym chciał teraz napisać serwer używając gniazd w C, prawdopodobnie sprawdziłbym ostatni fragment kodu, który napisałem w ten sposób (i lub różne książki, które mam) i zacząłbym pracować. Są szanse, że prawdopodobnie nie mógłbym tego zrobić dokładnie od zera i z pamięci, chociaż mogę powiedzieć, że potrzebujesz wywołania `socket()`, `bind()`, `listen()` i `accept()` możesz także chcieć `select()` w zależności od tego, czy zamierzasz `pthread_create` czy nie. Więc wiem, jakie są wywołania, ale nie wiem, jaka jest ich konkretna lista parametrów. 4. Jakie masz doświadczenia, jeśli jesteś menedżerem ds. rekrutacji? Czy szukasz programistów, którzy mogą zacytować Ci API, czy nie masz nic przeciwko, jeśli Twoi programiści mają na biurku kilka książek i co jakiś czas wywołują funkcje google?


title: Jakie są praktyczne przykłady technik eksploracji kodu?

text: Code Exploration (CE) to całkiem nowy termin i zastanawiam się, czy są już jakieś udane przykłady wdrożenia tych technik w zakresie zasad Continuous Integration? W skrócie, Code Exploration można opisać jako proces testowania kodu przy użyciu różnych parametrów w celu uzyskania wysokiego pokrycia kodu. Jedynym narzędziem dla świata .NET jest PEX, ale wiem, że istnieją komercyjne narzędzia do eksploracji kodu w świecie java. Ten temat jest bardzo przydatny w połączeniu z Design By Contract, ponieważ zapewnia środki formalizmu w wnioskowaniu o poprawność kodu. Na przykład PEX pokazałby, że następny kod zawiera błąd (kod źródłowy używa Code Contracts i zakładam domyślną konfigurację zestawu): public int Factorial(int number) { //warunek końcowy pozytywnego wyniku, warunek wstępny jest pominięty Contract.Ensures( Contract.Result< int>() > 0 ); numer zwrotu <= 0 ? 1 : liczba * Silnia( liczba - 1 ); } Ponieważ domyślnie przepełnienie nie jest sprawdzane w operacjach arytmetycznych, wejście 17 da wynik -288522240. PEX był tu omawiany kilka razy tutaj: * Jak działa Pex * Kontrakty Pex i Code Ale nie chcę dotykać wewnętrznych szczegółów implementacji, interesują mnie praktyczne aspekty tego problemu. * * * Główne pytania to: 1. Jak dokładnie integrujesz Code Exploration z Continuous Integration? 2. Czy odrzucasz build, jeśli PEX podaje błędy lub powiadamiasz zespół o niezgodnościach i naruszeniach kontraktów? 3. Scott Hanselman ma rację, że PEX powinien działać na oddzielnej maszynie (lub wielu maszynach) stale testując kod pod kątem błędów (tzw. Continuous Exploration). Możesz posłuchać rozmowy Hanselminutes Podcast 93 - Pex. Czy istnieją jakieś praktyczne implementacje dedykowanej maszyny (czy to wirtualnej czy fizycznej), która zagłębia się w Twój kod w poszukiwaniu błędów? 4. Jak traktujesz pokrycie testowe takich narzędzi? Myślę, że łączenie wyników pokrycia kodu dla testów jednostkowych napisanych ręcznie z wynikami narzędzia do eksploracji kodu byłoby nierozsądne. 5. Czy są jakieś przykłady Sparametryzowanych Testów Jednostkowych w rzeczywistych projektach, które podniosłyby Twoją produktywność i jakość testów jednostkowych?


title: W jaki sposób planowane są projekty C++ na wielu platformach/wielosystemach operacyjnych pod względem kodu i narzędzi?

text: Chcę stworzyć projekt w C++, który może działać w systemach Windows, Linux i Embedded Linux. Jak powstają projekty, które muszą działać w wielu systemach operacyjnych? Czy najpierw jest tworzony na jednym systemie operacyjnym, a następnie kod jest powoli modyfikowany w celu przeniesienia na inny system operacyjny? Np.: wydaje mi się, że wersja Firefoksa na Linuksa jest stworzona jako projekt Windows i osobny projekt Linuksowy z inną bazą kodu, ponieważ Firefox zachowuje się nieco inaczej w Windows i Linuksie. Chociaż pobieranie kodu źródłowego jest zaskakująco pojedynczym łączem. Jeśli QT jest używane do interfejsu użytkownika, wątki Boost do wątków, Build Bot dla CI i NetBeans/Eclipse/QT Creator dla IDE, czy dana osoba byłaby w stanie zminimalizować ilość przepisywania kodu wymaganego do przeniesienia projektu na inny system operacyjny? Czy to jest właściwy sposób, czy takie projekty mają być tworzone jako dwa całkowicie oddzielne projekty dla dwóch oddzielnych systemów operacyjnych?


title: Czy istnieje wzór projektowy dla tego problemu?

text: Mam dużą bazę danych, którą możemy rozważyć w dzisiejszym systemie. Dane mają interfejs internetowy, który pozwala moim użytkownikom aktualizować dane. Nazwijmy to „oryginalnym rozwiązaniem”. Nowi użytkownicy wchodzą jako grupa nowych użytkowników. Ci użytkownicy potrzebują własnych danych i własnego interfejsu internetowego. Nazwijmy to „rozwiązaniem”. Pierwotnie mamy 1 rozwiązanie (oryginalne rozwiązanie), jednak teraz potrzebuję tego samego rozwiązania dla innej grupy użytkowników. Niektóre czynniki, które należy wziąć pod uwagę w projekcie: * Oryginalne rozwiązanie może zdecydować się na wdrożenie innych aktualizacji rozwiązań i wstawek na danych. * Każde rozwiązanie może wybrać otrzymywanie zaktualizowanych i wstawionych danych z oryginalnego rozwiązania. * Aktualizacje między rozwiązaniami powinny być łatwo udostępniane. Teraz najłatwiejszym rozwiązaniem byłoby po prostu zreplikować całą bazę danych i mieć jakiś proces do zapisywania i odczytywania danych między rozwiązaniami. Ma to jednak naprawdę duże obciążenie, jeśli chodzi o duplikowanie danych, potrzeby w zakresie przechowywania i tak dalej. Wyobrażam sobie, że przechowywanie jakiejś delty między danymi byłoby lepsze? Wyobrażam sobie, że możliwym rozwiązaniem byłoby zaprojektowanie architektury podobnej do systemu kontroli kodu źródłowego z rozgałęzieniami? Po wdrożeniu nowego rozwiązania rozgałęziamy oryginalne rozwiązanie. Różne aktualizacje w oddziałach można łatwo zaktualizować do głównego oddziału i odwrotnie. Czy są jakieś wskazówki, w jaki sposób mogę łatwo sklonować dane z oryginalnego rozwiązania do nowego rozwiązania bez replikowania rzeczywistej bazy danych? Może jakiś wzorzec projektowy, który mogę wykorzystać w realizacji?


title: Przyczyny technologicznego rozwidlenia między Javą a UNIX/C/Fortran

text: Kiedy Java została opracowana, jej projektanci zdecydowali się odrzucić niezwykłą ilość konwencjonalnej mądrości ustanowionej w łańcuchach narzędzi zorientowanych na UNIX i C. Dla jednego (i moim zdaniem) najważniejszego przykładu, zdecydowali się odrzucić praktykę plików nagłówkowych i Makefile i zamiast tego próbowali zbudować monolityczny, świadomy zależności kompilator. Później opracowano `ant`, aby częściowo naprawić (oczywiste?) niedociągnięcia tego procesu i skutecznie ponownie zaimplementować logikę makefile. To nie tak, że nie mam nic przeciwko marce w starym stylu i „#include” przesadzam. Jednak ich użycie zostało na nowo wymyślone w świecie Javy dzięki `ant` i podzieleniu każdej klasy na klasę interfejsu i implementację, co jest bardzo zbliżone do wzorca plik nagłówkowy/plik źródłowy. Jestem prawie pewien, że ludzie stojący za Javą znali istniejące narzędzia i wzorce oraz ich przeznaczenie, więc decyzja o ich usunięciu, a następnie ponownym zaimplementowaniu wszystkiego od zera, bez choćby śladu w projektowaniu języka, jest tym, co mnie zdumiewa. Mniej kosztowne sposoby byłyby dostępne (takie jak parsowanie pliku źródłowego i automatyczne generowanie pliku nagłówkowego, co byłoby dość łatwe po nieznacznym wyczyszczeniu składni C), ale nie zostały podjęte, a chciałbym wiedzieć o powód. Podobne widelce wykonano w większości innych miejsc, przy znacznych kosztach rozwoju i znacznych kosztach podzielonej społeczności. W dzisiejszych czasach programiści ze świata Java i C++ często mają trudności z komunikacją i współpracą z powodu podziału, który wydaje się nieproporcjonalny do rzeczywistych różnic między językiem C/C++ a językiem Java. Chociaż widzę podstawową motywację stojącą za tym procesem (wszyscy nienawidzą składni Makefile i ręcznej zmiany plików nagłówkowych), nadal nie mogę ocenić wielkości zmiany. Czy istnieją historyczne odniesienia do motywacji i przyczyn tego procesu? Czy są jakieś dokumenty projektowe lub wywiady z ludźmi, którzy prowadzili ten widelec?


title: Dlaczego większość języków programowania nie zagnieżdża komentarzy?

text: Kilku to robi, ale z tego, co wiem, żaden z popularnych nie. Czy jest coś złego w zagnieżdżaniu komentarzy? Planuję zagnieździć komentarze blokowe w (małym) języku, nad którym pracuję, ale chciałbym wiedzieć, czy to zły pomysł.


title: Czy JavaBeans to dobry przykład enkapsulacji?

text: Próbuję zrozumieć, czy JavaBeans jest dobrym przykładem enkapsulacji. Moim zdaniem, to **nie**, ponieważ zwykle cały stan wewnętrzny jest ujawniany przez gettery i settery. Prostym przykładem jest public class Test { private List<String> names = new ArrayList<String>(); public List<String> getNames() { zwraca nazwy; } public void setNames(List<String> names) { this.names = names; } } Jest to zgodne ze standardem JavaBeans, ale ujawnia implementację. Na przykład użytkownik może wywołać `test.getNames().clear()`. Czy czegoś mi brakuje?


title: Jak przyciąć wszystkie przychodzące wartości w żądaniu HTTP Post?

text: Mam formularz HTML zawierający ponad 30 pól. Po przesłaniu tego formularza na serwer wszystkie wartości pól powinny zostać przycięte. Innymi słowy, żadna wartość nie powinna zaczynać się/kończyć jakąkolwiek spacją (`\b`). Dostępnych jest dla mnie wiele opcji: 1. Ręczne przycinanie każdej wartości 2. Zapętlanie wartości i przycinanie każdej z nich 3. Tworzenie frameworka (coś w rodzaju modułu HTTP ASP.NET), aby stać na drodze każdego żądania HTTP Post, aby przyciąć przychodząca wartość. Trzecia opcja wydaje się najlepsza. Jednak nie wiem, czy jest **naprawdę** najlepszy, czy nie? I też nie wiem, jak to zrobić. Czy to w ogóle możliwe? Jakie są inne rozwiązania?


title: miejsce do zaproponowania projektu open source i współpracy w zakresie wymagań oprogramowania przed rozpoczęciem kodowania

text: Szukam witryny sieci Web, aby rozpocząć nowy projekt open source. Chcę rozpocząć tworzenie "dziennika treningów SPORT". Mam pewne umiejętności rozwojowe, ale nie wszystko, czego potrzebuję (nie znam się na kodowaniu w sieci). Czy ktoś zna dobry punkt wyjścia do poznania kilku osób, zaproponowania oprogramowania, a następnie (również w innym miejscu) wspólnego rozwoju? Na przykład mam umiejętności python, c, c++ i trochę doświadczenia w szkoleniu, ale chcę to zrobić w sieci, więc nie mogę zrobić wszystkiego sam. Nie sądzę, że jestem jedynym, który chce robić dziennik treningowy, ale nie posiadam niezbędnych umiejętności. Szukam strony do zarządzania ideą kryjącą się za dziennikiem szkoleń i zachęcania zainteresowanych osób do wniesienia wkładu w ten pomysł, a następnie wniesienia wkładu również w kod. Mam na myśli krok przed właściwym podejściem FOSS. Pytanie brzmi: Po co zacząć kodować oprogramowanie, którego potrzebuję, jeśli mogę rozpocząć globalne wymagania dotyczące oprogramowania dotyczące „dziennika treningów sportowych” i po przydatnym i globalnym przeglądzie możemy zacząć wszystko razem, aby je rozwijać? Dlaczego powinienem zacząć opracowywać oprogramowanie z funkcjami XYZ, a inne osoby, które potrzebują funkcji, YZQ muszą zacząć pisać kolejne? Dlaczego nie postawić społeczności opensource o krok przed bardziej profesjonalnym rozpoczęciem projektu opensource z podejściem opartym na współpracy, również w zakresie wymagań oprogramowania?


title: Jakie są dobre serwisy społecznościowe?

text: Jestem przyzwyczajony do CodePlex i dużo słyszałem o GitHubie, ale jeszcze się tam nie rozglądałem. Jakie są najlepsze serwisy społecznościowe, które śledzą zatwierdzenia, ciekawe projekty itp.? (Z punktu widzenia dużej społeczności i popularności)


title: Wykresy, SQL i REST?

text: Stworzyliśmy REST API do gry w głosowanie. Teraz przechodzimy do tworzenia analiz/wykresów/wykresów dla moderatorów i użytkowników, aby mogli obserwować, jak sobie radzą w grze. Gra ma określoną grupę osób głosujących lub używających swoich głosów na określoną liczbę wyborów. Teraz jest moderator dla tej grupy, który może porównać aktywność i wydajność grupy składającej się z około 50 członków. Tak więc wykres wymaga głosów użytkownika na konkretny wybór w dniach. * użytkownik * głos * wybór * kiedy pokazać wzrost aktywności głosowania w czasie w stosunku do liczby do wyboru. A może porównanie wszystkich użytkowników pokazujące, ile głosów oddali w dniach/tygodniach/miesiącach. Jaki jest najlepszy sposób na zrobienie tego za pomocą sql. Jeśli takie długotrwałe zapytanie może być znaczącym rozwiązaniem. Czy tego rodzaju dane powinny być pobierane z wyprzedzeniem, czy wstępnie obliczane i odświeżane po pewnym czasie? Jakie są możliwe sposoby rozwiązania w czasie rzeczywistym? Jeśli zapytanie jest jedynym sposobem, jak możemy je przyspieszyć? Indeksowanie? Wyświetlenia? Wyzwalacze? Procedury? Jestem zaznajomiony z sql, ale nie wiem nic więcej niż indeksowanie. Pomogłoby więc wyjaśnić, co może pomóc, dlaczego i gdzie.


title: Jak wykorzystać projekt open source jako narzędzie edukacyjne?

text: Aby zapewnić bardziej wszechstronną edukację studentom informatyki na moim starym uniwersytecie, staram się stworzyć grupę open source, do której mogliby się przyczynić. Czego powinienem szukać w pomysłach na projekty, aby zapewniały maksymalną wartość edukacyjną dla uczniów, którzy nie mają dużego doświadczenia w rzeczywistych projektach? Czego powinienem unikać, podejmując decyzję, co zrobić?


title: Jakie są podstawowe różnice między C i C++?

text: Wielu ma tendencję do pisania „C/C++”, jakby były tym samym. Chociaż mają wiele podobieństw, wyraźnie nie są takie same. Ale jakie są tak naprawdę podstawowe różnice między C i C++? Czy C++ jest ulepszoną wersją C, czy też są w C funkcje, które nie istnieją w C++?


title: Jak ważny jest mój tytuł zawodowy?

text: Pracuję nad dwoma wewnętrznymi aplikacjami o znaczeniu krytycznym. Niech to będzie proste i nazwijmy je „Foo” i „Bar”. Nikt spoza firmy nigdy o nich nie słyszał – jak powiedziałem, to aplikacje wewnętrzne. Do tej pory mój tytuł zawodowy brzmiał po prostu „Programista”. Niedawno odkryłem, że mój tytuł zawodowy zmienia się na „Programista Foo and Bar”. Trochę się martwię, że jeśli odejdę z firmy, będę miał problem ze znalezieniem nowej pracy z powodu mojego dziwnego stanowiska. Moje pytanie brzmi: Jak ważny jest mój tytuł zawodowy w porównaniu do wszystkiego innego w moim CV (lub CV, jeśli jesteś Amerykaninem)? Czy prawdopodobnie zostanę odrzucony przez zaznaczenie odpowiedniego pola przez pracowników działu HR, którzy nie zdają sobie sprawy, że „Programista gier i barów” to to samo co „Programista”? Z góry dziękuję.


title: Przebieg rozmowy kwalifikacyjnej: „Egzamin” na empiryczną ocenę kandydatów

text: W ramach procesu rozmowy kwalifikacyjnej dla starszego stanowiska programistycznego jesteśmy proszeni o stworzenie „egzaminu” niezależnego od języka, który może być częścią rozmowy twarzą w twarz. Powodem jest to, że będziemy musieli przedstawić niesubiektywne dowody empiryczne jako część uzasadnienia, komu proponuje się tę rolę. **Jak byś go ustrukturyzował/sformatował, aby uzyskać jak najbardziej rozsądne wyniki?** **Jakie pytania byś zadał?** _(Uwaga: to nie jest większość procesu rozmowy kwalifikacyjnej, tylko mały fragment, który musi zrobić)_


title: Najlepsze praktyki dotyczące aktualizacji danych użytkownika podczas aktualizacji wersji oprogramowania

text: W moim kodzie sprawdzam aktualną wersję oprogramowania podczas uruchamiania i porównuję ją z wersją zapisaną w pliku(ach) danych użytkownika. Jeśli wersja jest nowsza, w razie potrzeby wywołuję różne metody aktualizacji starych danych do nowszej wersji. Zwykle muszę tworzyć nową metodę konwersji danych przy każdej aktualizacji, która w jakiś sposób zmienia dane użytkownika i nie mogę usunąć starych, na wypadek gdyby ktoś przeoczył aktualizację. Dlatego aplikacja musi być w stanie przejść przez każde wywołanie metody i aktualizować swoje dane, dopóki ich dane nie będą aktualne. Przy większych zestawach danych może to stanowić problem. Ponadto niedawno odbyłem krótką dyskusję z innym użytkownikiem StackOverflow, który wskazał, że zawsze dołącza znacznik daty do nazwy pliku, aby zarządzać wersjami danych, chociaż jego rozumowanie, dlaczego było to lepsze niż przechowywanie danych wersji w samym pliku, było niejasny. Ponieważ rzadko widuję zarządzanie wersjami danych użytkownika w czytanych książkach, jestem ciekawy, jakie są najlepsze praktyki nadawania nazw plikom danych użytkownika i procedury aktualizacji starszych danych do nowszych wersji. Edycja: „Datownik” powstał z dyskusji tutaj: http://stackoverflow.com/questions/8104812/does-releasing-a-new-version-of-the-app-delete-files-of-the-older -one/8104906#8104906 Ponieważ pytanie jest zbyt otwarte, powinienem powiedzieć, że szukam zalecanych procedur aktualizacji danych użytkownika między wersjami. Jeśli to możliwe, fajnie byłoby zobaczyć praktyki iOS / Objective-c, ale nie jest to wymagane.


title: Prawo Demeter powodujące niezdecydowanie w zakresie podklas i konflikt z Single Responsibility

text: Oto moja sytuacja: mam klasę o nazwie CueList, która jest w zasadzie wrapperem wokół ArrayList. Mam inną klasę o nazwie `TimeTicker`, która ostrzega wszystkie `Tickable` (interfejs) na swojej liście, że minął określony czas. Ponieważ muszę zaznaczyć wszystkie pozycje w `CueList`, ale nie chcę naruszać DRY poprzez przechowywanie kopii wszystkich pozycji CueList również w klasie `TimeTickable` (co może zrobićkoszmar kiedy chcę aby usunąć Cue), moim natychmiastowym odruchem było ustawienie `CueList` na `Tickable` i przekazanie wiadomości "tick" do wszystkich jej elementów. Wydaje się to naruszać zasadę Single Responsibility, która mówi, że „CueList” nie powinien martwić się zarówno śledzeniem wszystkich wskazówek, jak i ich zaznaczaniem. Więc stworzyłem klasę `CueManager`, która sama w sobie jest Tickable i łączy wszystko (i zaznacza wszystkie elementy CueList). Ale teraz, ze względu na prawo demeter, mam kilka zduplikowanych metod w `CueManager`, które po prostu odzwierciedlają klasy `TimeTicker` i `CueList`. Czy to nie oznacza, że klasa `CueManager` ma wiele powodów do zmiany? Czy to nie oznacza, że narusza zasadę pojedynczej odpowiedzialności. Ponadto, skoro większość metod w CueManager odzwierciedla TimeTicker i CueList, nie oznacza to, że jest to TimeTicker i CueList. Dlatego nie powinno to DZIEDZICZYĆ z CueList i TimeTicker! (Oczywiście nie można wykonać wielokrotnego dziedziczenia w Javie, ale wydaje mi się, że dziedziczenie z CueList ma sens, ale wtedy naruszałoby to Single Responsibility) Podsumowując: ** Prawo Demeter każe mi tworzyć kilka metod że pomyliłem dwie inne klasy, ale to sprawia, że myślę, że tak naprawdę powinna po prostu dziedziczyć po obu tych klasach, ale to oznaczałoby, że jedna klasa obsługuje wiele obowiązków (nawet jeśli odbywa się za pośrednictwem swojej nadklasy).**


title: Co programiści powinni wiedzieć o systemach opartych na systemie UNIX?

text: Jestem trochę zdziwiony, że nikt jeszcze o to nie pytał, ale na wysokim poziomie, co każdy programista powinien wiedzieć o pracy z systemami opartymi na UNIX? Moje doświadczenie *nix jest bardzo ograniczone, ponieważ nie mam absolutnie żadnego powodu, aby używać go w systemie Windows do własnych celów, ale mam dwa wywiady, w których firmy idealnie chciałyby mieć kogoś z doświadczeniem *nix. Nie mam problemu z zapoznaniem się z nim, jeśli złoży ofertę, którą chcę przyjąć, ale nie jest to warte inwestycji, gdy większość moich ofert dotyczy systemów Windows; miejmy nadzieję, że jest to zrozumiałe. O jakich narzędziach powinienem wiedzieć? Jakieś dziwactwa, o których powinienem wiedzieć? Czy istnieją dobre, zwięzłe zasoby, które można szybko przeczytać, aby uzyskać szerokie zrozumienie?


title: Jaka jest rola głównego programisty w zwinnym zespole?

text: W niezwinnym zespole programistycznym wiodący programista _ogólnie_ : * Ustanawia standardy (kodowanie i inne) * Bada nowe technologie dla zespołu * Wyznacza techniczny kierunek dla zespołu * Ma ostatnie słowo w sprawach * Projektuje architekturę systemu Jednak zespół zwinny działa inaczej: * Zespół zwinny będzie polegał na powstającym projekcie, a nie z góry * Zespół zwinny projektuje razem, a nie projekt jest dyktowany przez jedną osobę * Zespół zwinny decyduje o własnym kierunku technicznym, co jest najlepsze dostarczyć projekt Gdzie to pozostawia wiodącego programistę w zwinnym zespole? Czy można mieć wiodącego programistę w zwinnym zespole? Czy zwinny zespół wymaga od lidera innych obowiązków?


title: Jaka jest analogia kropkowanej pary w innych implementacjach Lisp?

text: Jaka jest konstrukcja pary przerywanej Scheme, analogiczna do innych implementacji Lisp? Mogę dość łatwo stworzyć wektor lub listę i zrozumieć te w Clojure, mimo że składnia jest trochę inna, tak jak wektory Clojure używają nawiasów kwadratowych []. Jednak widok pary w kropki po raz pierwszy rzucił mnie. Wygląda na to, że jest to implementacja mapy. Nie szukam dyskusji, ale bardziej do użytku lub odpowiednika pary kropkowanej w innych dialektach Lisp, takich jak Clojure, czy nawet Python.


title: Czy można przetestować wiele podobnych plików w jednym teście funkcjonalnym?

text: Mam test funkcjonalny używający `Junit`, który testuje dostarczanie pliku xml do punktu końcowego. Plik XML jest wysyłany przez klienta, więc skopiowałem go do folderu testowego, odczytałem stamtąd w moim teście i wykonałem potwierdzenia. Mamy 10-20 takich plików z różnymi danymi, ale w tym samym formacie, mój architekt chce, abym skopiował je wszystkie do tego samego folderu, przejrzał je w pętli w tym samym teście, aby upewnić się, że zostały dostarczone pomyślnie. Uwaga, nie testuję żadnych walidacji danych w tym teście, tylko pomyślne dostarczenie. Nie jestem pewien, czy w moim przypadku pętla wielu plików w jednym teście jest dobrym pomysłem, ponieważ jeśli jeden się nie powiedzie, reszta nie zostanie wykonana, a także nie jestem przekonany do napisania 20 testów robiących dokładnie to samo. Proszę o radę


title: Jaka jest formuła alfabetu 3 z 9 kodów kreskowych?

text: Tło: Alfabet kodów kreskowych 3 z 9 Prosta składnia kodów kreskowych 3 z 9 Jaka jest formuła alfabetu i cyfr w kodzie kreskowym 3 z 9? Na przykład ASCII ma stosunkowo przejrzysty układ. Liczby zaczynają się od 33, wielkie litery od 65, małe litery od 97. Z tych punktów początkowych możesz wywnioskować kod ASCII dla dowolnej liczby lub litery. Punktem początkowym dla każdego zakresu jest również wielokrotność 32 + 1. Kody kreskowe wydają się losowe i pozbawione kolejności. Jeśli użyjemy składni z drugiego linku, to jest to pierwsze sześć znaków w 3 z 9: A 100-01 B 010-01 C 110-00 D 001-01 E 101-00 F 011-00 Nie widzę tu żadnego wzorca ; co to jest? Interesuje mnie tak samo zamierzony wzór projektanta, jak ktoś, kto opracowuje własny algorytm, który może podać powyższy kod dla danego znaku na podstawie jego sekwencji. Walczyłem z tym, gdzie zadać to pytanie; czy to historia, informatyka, informatyka? Wybrałem programistów, ponieważ wyszukiwanie StackExchange miało tutaj najwięcej trafień w kodach kreskowych i ponieważ chciałem konkretnie powiązać je z ASCII, aby wyjaśnić, jakiego rodzaju formuły/wyjaśnienia szukam. ## Aktualizacja Dla ciekawskich, oto pełna lista wszystkich podstawowych znaków w kodzie 39: http://jsfiddle.net/b9chris/LnX2e/2/ (wiersze źródłowe są zaczerpnięte z mojej biblioteki kodów kreskowych C#) Zauważysz, że proponowana uproszczona składnia może nieco mylić sprawę, ponieważ może sugerować, że każdy znak jest liczbą 5-bitową z pozycją myślnika. Ostatnie 4 postacie mają liczne kreski (szerokie przerwy). Tak naprawdę, te kody najlepiej traktować jako liczby 9-bitowe, które mają większość nieparzystych bitów ustawionych na 0 dla większości symboli. Tutaj są jako liczby 9-bitowe: http://jsfiddle.net/b9chris/LnX2e/1/


title: Przykładowy plik build.sbt, który pozwala łatwo określić katalogi źródłowe i biblioteki?

text: Niedawno zacząłem uczyć się programowania na Androida i zdecydowałem się na następujące procesy programistyczne: 1. Preinstalacja Scali w emulatorze 2. Edycja plików źródłowych w IntelliJ IDEA 11 3. Kompilacja projektu z sbt w wierszu poleceń 4. Klasy generowane przez Dex bez bibliotek Scala 5 Zbuduj APK i przetestuj w emulatorze W powyższych krokach, z wyjątkiem kroku 3, myślę, że inne kroki można łatwo obsłużyć za pomocą wiersza poleceń/makefile. Więc oto jestem, chcę przykładowego build.sbt, który pozwoli mi łatwo określić następujące informacje: 1. Katalogi źródłowe 2. Biblioteki referencyjne 3. Katalog wyjściowy Jestem świadomy wtyczki sbt Android i wtyczki sbt idea, ale chcę ich uniknąć z następującego powodu: projekty generowane przez Android plugin dex Biblioteki Scala dla każdej kompilacji, ale chcę mieć kontrolę nad tą częścią: Chcę pominąć biblioteki Scala do rozwoju, ale dołączyć je do kompilacji wydania, co wymaga dużo kopania, jeśli ja zrób to za pomocą wtyczki, ale można to łatwo obsłużyć, jeśli odbywa się to z wiersza poleceń/makefile. Jeśli ogólnie to, co zamierzam zrobić, ma sens, czy ktoś zaznajomiony z sbt mógłby dostarczyć taki przykładowy build.sbt? Spędziłem już godziny na śledzeniu samouczków sbt, ale czułem, że tak trudno jest sprawić, by każda wydawała się prostą zmianą domyślnego zachowania sbt. Poboczne pytanie, wydaje się, że katalogi źródłowe dodane przez unmanagedSourceDirectories są kompilowane za każdym razem, niezależnie od sygnatury czasowej. Jeśli tak jest, jaki jest sens używania sbt? Mogę po prostu wgrać wszystkie pliki źródłowe do scalac. **AKTUALIZACJA** To jest plik build.sbt oparty na odpowiedzi Daniela C. Sobrala. Kiedy wpisuję sbt compile, wyświetla tylko niektóre informacje, takie jak "Ustaw bieżący projekt na HelloAndroid...". Nie dzieje się kompilacja. name := "HelloAndroid" scalaVersion := "2.8.2" unmanagedSourceDirectories := List( file("src"), file("gen")) libraryDependencies := List() // usuń bibliotekę Scali z zależności unmanagedJars := List (Attributed.blank(file("C:/bin/android/platforms/android-10/android.jar"))) target := file("target") Nie spodziewałem się, że się skompiluje, ponieważ nadal muszę pracować z plików jar, ale przynajmniej powinienem otrzymać jakiś błąd kompilatora. Jakaś wskazówka? **UPDATE** : kompilacja sbt wyświetla następujące dane: [info] Ustaw bieżący projekt na HelloAndroid (w pliku build:/C:/Users... [sukces] Całkowity czas: 0 s, ukończono 14 maja 2012 10: 36:23 Mam dwa pliki źródłowe w katalogu src: src/com/example/[HelloScala.scala MyActivity.java] Nie znaleziono pliku klasy w folderze docelowym.


title: Co sprawiło, że BASIC był opłacalny?

text: W latach 70. człowiek o nazwisku Bill Gates opracował interpreter języka BASIC: Altair BASIC. Zgodnie z moim zrozumieniem, udało mu się przekonać faceta odpowiedzialnego za firmę zajmującą się mikrokomputerami, aby dołączał program interpretujący do każdego sprzedanego mikrokomputera, co, jak zakładam, przyniosło Gatesowi i jego ekipie pewne tantiemy. Najwyraźniej to przyniosło Gatesowi fortunę. Nie rozumiem, dlaczego języki programowania nie są dziś tak opłacalne. Jakie czynniki w przeszłości sprawiały, że były opłacalne, ale nie dzisiaj?


title: Które narzędzia do automatycznej analizy mogą znaleźć błąd powodujący krwawienie?

text: Po przeczytaniu tego opisu niesławnego błędu Heartbleed i tego, jak zespół OpenSSL jest stosunkowo mały i lekko finansowany, zastanawiam się: czy ten błąd zostałby wykryty przez ukrycie, Valgrind lub inne narzędzia?


title: Czy posiadanie wielu lokalizacji CDN dla produktu jest samouwalniające się?

text: Dziś rano dwukrotnie sprawdzałem adres URL wersji jQuery CDN i zauważyłem, że są teraz trzy różne lokalizacje. Czy posiadanie wielu sieci obsługujących produkt jest złe, a nawet autodestrukcyjne? Pomyślałem, że główną zaletą jest to, że ponieważ coraz więcej witryn korzysta z wersji CDN, szanse na to, że biblioteka jest przechowywana w pamięci podręcznej w przeglądarce, stale rosną. Jeśli CDN jest poprawnie skonfigurowany, a użytkownik korzysta z przyzwoitej przeglądarki, to sieć nie jest nawet dostępna dla pliku z pamięci podręcznej. W przypadku jQuery, czy posiadanie trzech sieci CDN nie obniża współczynnika trafień w pamięci podręcznej o 1/3? Czy coś mi umyka?


title: Jakiej kontroli źródła najlepiej używać z moim prywatnym serwerem do gier?

text: Szukam kontroli wersji wszystkiego, w tym komponentów serwera sql, programu uruchamiającego klienta i oprogramowania po stronie serwera. Chcę korzystać z zasobu online, w którym ludzie mogą wprowadzać aktualizacje i ułatwiać wprowadzanie zmian u graczy. Większość plików to tylko pliki tekstowe lub pliki graficzne gtx. Nie sądzę, że kwalifikuje się to jako open source, więc nie wiem, co robić. Próbowałem github i mam tam darmowe konto, ale było to naprawdę niezgrabne, masowe dodawanie każdego pliku do popełnienia. Naprawdę nie lubię dywersji, ale jeśli to najlepsza opcja, skorzystam z niej. Inne osoby, które będą potrzebowały dostępu do plików, nie będą zaznajomione z jakimkolwiek rodzajem kontroli źródła, więc potrzebuję łatwego systemu, aby mogli pobierać pliki, wprowadzać zmiany i zatwierdzać repozytorium. Jakieś sugestie?


title: Jakie są najważniejsze rzeczy, które powinienem wiedzieć o komputerze Mac?

text: W poniedziałek zaczynam nową pracę w startupie. Dzisiaj zapytali mnie, czego chcę od komputera do pracy, Windowsa, Linuxa lub Maca (prawdopodobnie laptopa). Jestem biegły w systemach Windows i Linux, ale nigdy nie używałem Maca, więc bez wahania powiedziałem, że chcę Maca. Nie wyglądając na idiotę pierwszego dnia nowej pracy i bez dostępu do MacBooka w weekend Dziękczynienia, jakie zasoby poleciłbyś mi, abym nauczył się jak najwięcej, zanim położę ręce na moim Macu? Wygląda na to, że używają Google Apps, więc część pakietu biurowego jest już gotowa, do rozwoju będę używał C++/STL/Boost i GCC. Kilka miesięcy temu zadałem nieco inne pytanie na forum Stack Exchange Unix: programista przechodzący z Linuksa na OS X, jakie są problemy? Aktualizacja 1: Spodziewam się pracować dłużej niż normalnie, więc nie sądziłem, że wykorzystywanie trochę czasu w pracy na zdobycie nowych umiejętności jest tak złą rzeczą dla firmy. Aktualizacja 2: Piszę teraz na moim nowym MacBooku Pro, uwielbiam mojego nowego Maca. dzięki za wszystkie odpowiedzi za pomoc w tym przejściu. Aktualizacja 3: dla pesymistów cieszę się, że bez wahania wybrałem MacBooka. Kocham moją nową pracę i nowego Maca. :)


title: Czy możliwe jest zbudowanie wszystkich cech języka funkcjonalnego za pomocą samego domknięcia?

text: Staram się stworzyć nowy język funkcjonalny i jego tłumacz do praktyki. Jak wiem, większość podstawowych bloków konstrukcyjnych to tylko funkcja lambda i jest to tylko zamknięcie. Nie rozumiem ich dobrze, więc chcę zapytać, czy mam rację, czy co jest nie tak?


title: 8 bitów i 1 bajt, czy to prawidłowe pytanie, które należy zadać?

text: Widziałem to pytanie w poprzedniej gazecie naszej szkoły i zastanawiam się, czy jest to prawidłowe pytanie. > Jak duże jest `bool` w C i C++? > > A) 1 bit > > B) 4 bity > > C) 8 bitów > > D) 1 bajt > > Jaka jest najmniejsza jednostka pamięci używana przez C lub C++? > > A) 1 bit > > B) 4 bity > > C) 8 bitów > > D) 1 bajt Odpowiedzią na oba pytania są D, ale zastanawiam się, czy jest to niewłaściwe. EDYCJA: 1 bajt niekoniecznie jest 8 bitami w niektórych systemach. Zobacz ten post StackOverflow.


title: Czy istnieją jakieś równoważne artykuły podobne do hginit.com dla git (i przejście z SVN)?

text: Chcę jak najlepiej wykorzystać git, a nie tylko używać go jako przetłumaczonej formy SVN. Przeczytałem artykuł hginit o pochodzeniu z SVN. Ten artykuł oczywiście dotyczy Mercurial. Git jest dystrybuowany i podobny, ale nie sądzę, żeby był dokładnie taki sam. Czy są jakieś artykuły podobne do hginit, w których można zapomnieć o SVN i zacząć od nowa z nastawieniem na Git?


title: Jak wykorzystywany jest model aktora?

text: Czytałem trochę o modelu aktora, ale tak naprawdę nie rozumiem, jak wykorzystać aktorów w sytuacji w świecie rzeczywistym – jak modelować z nimi problem. Czy ktoś może wyjaśnić? Prosty przykład lub linki do przykładów byłyby bardzo mile widziane.


title: Czy koderzy niebędący menedżerami po czterdziestce lub starsi czasami żałują, że nie są menedżerami?

text: I dlaczego większość programistów rezygnuje z kodowania i zostaje menedżerami tak wcześnie w porównaniu z innymi obszarami? Możesz pracować jako pracownik budowlany, prawnik, badacz, pisarz, architekt, reżyser filmowy przez dziesięciolecia, jeśli nie całe życie, nie rezygnując z ulubionej rzeczy, którą robisz. A jednak większość programistów uważa, że bycie menedżerem, lub lepiej, menedżerem niekodującym jest fajną rzeczą i ostatecznym celem kariery programistycznej. Rzadko można zobaczyć zwykłego programistę po czterdziestce, pięćdziesiątce (albo po sześćdziesiątce!) w typowej firmie programistycznej. Czemu? (A ja jestem za byciem koderem tak długo, jak lubisz to robić.)


title: Przejście poza binarny ignorowanie lub rozważanie białych znaków: jak powinienem porównać pliki np. zatwierdzić recenzję?

text: Jestem niezadowolony z narzędzi do porównywania plików, z którymi dotychczas pracowałem. Chociaż żadne narzędzie nie byłoby w stanie zawsze przewidzieć najbardziej sensownych dopasowań linii, przynajmniej obecne narzędzia powinny być w stanie wykonać lepszą pracę, gdy zmiany polegają głównie na dodawaniu i usuwaniu wcięć. Ale narzędzia, których użyłem, kończą na dopasowywaniu nawiasów klamrowych w izolacji i oddzielaniu faktycznie powiązanego kodu i popełniają inne pozornie oczywiste błędy. Przykład będzie mówił tomy, weźmy to: // Musimy również dodać dowolny określony prefiks i (pre-period) sufiks. if (prefiks) [spriteName insertString:prefix atIndex:0]; if (suffix) { NSRange pos = [NazwaSpisaNazwaCiągu:@"."]; if (pos.location == NSNotFound) { // Nie ma sensu, to podstawowy duszek, więc po prostu dołącz. [spriteName appendString:suffix]; } else { // Dołącz w miejscu, w którym znaleziono kropkę, tuż przed nim. [spriteName insertString:suffix atIndex:pos.location]; } } i załóżmy, że zostanie zmieniony na następujący: // Musimy również dodać dowolny określony prefiks i (pre-period) sufiks. if (prefiks) [spriteName insertString:prefix atIndex:0]; while (we_need_to_to_stuff) { if (suffix) { NSRange pos = [NazwaSpisekZakresStringu:@"."]; if (pos.location == NSNotFound) { // Nie ma sensu, to podstawowy duszek, więc po prostu dołącz. [spriteName appendString:suffix]; } else { // Dołącz w miejscu, w którym znaleziono kropkę, tuż przed nim. [spriteName insertString:suffix atIndex:pos.location]; } } } Nie chcę zbyt często zmieniać nazw, ale co robi FileMerge (graficzne narzędzie diff/merge dostarczane z Xcode)? To: ![Zrzut ekranu FileMerge wykonującego ledwie użyteczne dopasowanie](http://i.stack.imgur.com/SBv0P.png) …jakże przemyślane, FileMerge, upewniłeś się, że dopasowałeś nawiasy klamrowe, ponieważ były na tym samym poziomie wcięcia i oddzielił powiązany kod. Nie mogłem prosić o więcej. Typowym rozwiązaniem w takim przypadku jest znalezienie opcji uznania zmian w ilości białych znaków za nieistotne i ponowna próba. Ale potem chcę się upewnić, że nie grzebałem też we wcięciach, bo to jest coś, co zamierzam zatwierdzić, więc wracam do opcji, wyłączam opcję, próbuję ponownie. Powtórz dla wszystkich zmian, które chcę przejrzeć. Musi być lepszy sposób. Czy to tylko ja źle używam swoich narzędzi? Czy teoretycznie możliwe jest usprawnienie tego przepływu pracy? I to jest prosty przypadek, czy trudniejsze problemy zostały rozwiązane abstrakcyjnie? Jak powinienem szukać lepszych narzędzi w tej domenie, skoro trudno to wyrazić jako zapytanie w wyszukiwarce?


title: Przechowywanie listy z możliwością zmiany kolejności w bazie danych

text: Pracuję nad systemem list życzeń, w którym użytkownicy mogą dodawać przedmioty do swoich różnych list życzeń, i planuję umożliwić użytkownikom ponowne zamawianie przedmiotów w późniejszym czasie. Nie jestem pewien, jaki jest najlepszy sposób przechowywania tego w bazie danych, pozostając szybkim i nie wpadając w bałagan (ta aplikacja będzie używana przez dość dużą bazę użytkowników, więc nie chcę, aby spadła posprzątać rzeczy). Początkowo próbowałem kolumny `pozycja`, ale wydaje się, że byłoby to dość nieefektywne, gdyby trzeba było zmieniać wartość pozycji każdego innego elementu podczas przenoszenia. Widziałem ludzi używających odniesień do siebie, aby odnieść się do poprzedniej (lub następnej) wartości, ale znowu wygląda na to, że musiałbyś zaktualizować wiele innych pozycji na liście. Innym rozwiązaniem, które widziałem, jest używanie liczb dziesiętnych i po prostu wstawianie elementów w odstępach między nimi, co wydaje się jak dotąd najlepszym rozwiązaniem, ale jestem pewien, że musi być lepszy sposób. Powiedziałbym, że typowa lista zawierałaby do około 20 pozycji i prawdopodobnie ograniczę ją do 50. Ponowne zamawianie będzie odbywało się za pomocą przeciągania i upuszczania i prawdopodobnie będzie wykonywane partiami, aby zapobiec sytuacji wyścigowej i tym podobne z żądania ajaksu. Używam postgresa (na heroku), jeśli ma to znaczenie. Czy ktoś ma jakieś pomysły? Pozdrawiam za wszelką pomoc!


Czy Twoja firma ma pisemną politykę dotyczącą osobistego (technicznego) blogowania? Chcesz się podzielić? Zachęcamy naszych programistów do prowadzenia osobistych blogów i rozmawiania o problemach technicznych, które napotkali w pracy, a które nie są podstawową kompetencją ani podstawowymi własnościami IP. Robiliśmy to w stylu „nie pytaj, nie mów”, ale czas coś zapisać. **Aktualizacja** : dziękujemy wszystkim za odpowiedzi, wprowadziliśmy zasady dotyczące tego ostatniego tygodnia – pełny tekst jest tutaj.


title: Czy powinieneś zawracać sobie głowę gałęziami SVN, jeśli masz tylko jeden?

text: Jeśli pracujemy tylko z jedną gałęzią w Subversion, czy powinniśmy się w ogóle przejmować? Czy nie możemy po prostu popracować nad bagażnikiem, żeby to przyspieszyć? Oto jak rozwijamy się z Subversion: * Jest pień * Tworzymy nową gałąź rozwoju * Tworzymy nową funkcję na tej gałęzi * Kiedy funkcja jest gotowa, jest ona scalana w pień, gałąź jest usuwana i nowa gałąź rozwojowa jest tworzona z pnia Gdy chcemy wypuścić do produkcji, tworzymy tag z pnia. Na gałęzi z tego znacznika wprowadzane są poprawki błędów. Ta poprawka jest następnie scalana w bagażniku. Dlatego po wykonaniu funkcji tworzymy nową gałąź programistyczną. W ten sposób naprawa błędu zostanie wkrótce zawarta w naszym nowym kodzie. Poniżej znajduje się diagram, który powinien wyjaśnić: ![Nasza strategia Subversion](http://i.stack.imgur.com/DAm69.png) Teraz wydaje się, że nie jest to najbardziej wydajny sposób pracy. Budujemy lokalnie przed zatwierdzeniem, co zajmuje około 5-10 minut. Możesz zrozumieć, że jest to odbierane jako dość długi czas oczekiwania. Idea gałęzi rozwojowej polega na tym, że pień jest zawsze gotowy do wydania. Ale to już nie jest prawdą w naszej sytuacji. Czasami funkcja jest prawie gotowa, a niektórzy programiści zaczną już kodować następną funkcję (w przeciwnym razie czekaliby, aż jeden lub dwóch programistów zakończy i połączy się). Następnie, gdy funkcja 1 zostanie zakończona, jest ona scalana z magistralą, ale zawiera kilka zatwierdzeń funkcji 2. Czy więc powinniśmy w ogóle zawracać sobie głowę gałęzią deweloperską, skoro mamy tylko jedną gałąź? Czytałem o rozwoju w oparciu o pień i gałąź po abstrakcji, ale większość artykułów, które znalazłem, skupia się na części gałąź po abstrakcji. Odnoszę wrażenie, że chodzi o duże zmiany, które będą obejmować kilka wydań. To nie jest problem, który mamy. Co myślisz? Czy możemy po prostu popracować nad bagażnikiem? Najgorszym scenariuszem jest (myślę), że musielibyśmy zrobić tag z pnia i wybrać potrzebne zatwierdzenia, ponieważ niektóre zatwierdzenia/funkcje nie są jeszcze gotowe do produkcji.


title: Dokumenty IEEE SRS: lekka wersja podczas pracy z zewnętrznymi wykonawcami?

text: Zazwyczaj postępujemy zgodnie z procesem rozwoju Agile, który zwykle nie kładzie nacisku na pisanie wymagań i dokumentów technicznych, których nikt nie przeczyta. Mamy tendencję do skupiania naszych ograniczonych zasobów ludzkich na działaniach programistycznych i testowych, przy czym kluczowym celem jest wspólne projektowanie i tworzenie tablic. Istnieje w większości samodzielny komponent sieciowy, którego opracowanie zajmie kilka tygodni, ale ta praca może być w większości równoległa z innymi pracami projektowymi, które mają miejsce. Aby nadrobić zaległości, dostałem budżet na zatrudnienie programisty na oDesk do wykonania tej pracy. Chociaż mój zespół nie jest przyzwyczajony do pracy z firmowym dokumentem SRS, zdaję sobie sprawę, że przy outsourcingu rozwoju, dobrym pomysłem jest być tak stanowczym i konkretnym, jak to tylko możliwe, więc zdaję sobie sprawę, że muszę podać szczegółowe wymagania i specyfikację techniczną dokument, aby ta praca została wykonana poprawnie. Kiedy piszę dokument wymagań, zwykle używam standardowego szablonu dokumentu IEEE SRS, ale myślę, że jest to zbyt szczegółowe i prawdopodobnie przesadne, jeśli chodzi o to, co muszę przekazać programiście. Czy istnieje inny dokument wymagań, który jest lżejszy i akceptowany przez główną organizację normalizacyjną, taką jak IEEE? Co więcej, ponieważ to, co zostanie opracowane jako moduł oprogramowania, który będzie współdziałał z innymi modułami oprogramowania, moje wymagania naprawdę muszą zagłębić się w specyfikacje techniczne, aby wszystko działało poprawnie. Czy w tym scenariuszu ma sens łączenie specyfikacji technicznych i specyfikacji wymagań w jeden dokument, a jeśli nie, jaka jest realna alternatywa?


title: Czy można zignorować niską wydajność zasobu, który będzie buforowany?

text: Załóżmy, że mam usługę sieciową, która jest słabo napisana i nieefektywna, ale jej dane wyjściowe są buforowane, więc nie ma wąskiego gardła. Czy po prostu to zostawiasz? Czy posunąłbyś się nawet do celowego pójścia na skróty, wiedząc, że problemy z wydajnością zostaną zamaskowane?


title: Jak zapewnić 100% przetestowanie projektu?

text: Chcę wiedzieć, jak dokładnie możemy zapewnić, że projekt jest w 100% przetestowany ? W zastosowaniach bankowych lub finansowych również nie 1% tolerowany. Więc będąc programistą, jak możesz powiedzieć, że twój kod jest w 100% przetestowany? Bardzo cenione jest wyjaśnienie z przykładem.


title: N-warstwowa aplikacja internetowa korzystająca z usług sieciowych JQuery/ASP.NET

text: W przypadku dość małych, nieskomplikowanych aplikacji internetowych wykorzystaliśmy jQuery do wykonywania asynchronicznych wywołań do usługi sieci Web ASP.NET w celu interakcji z naszym magazynem danych Sqlite. Okazało się, że jest to dość czysty sposób na izolowanie warstw aplikacji przy jednoczesnym wykorzystaniu potężnej funkcjonalności JQuery po stronie klienta. Jednak obecnie jesteśmy w trakcie projektowania większej aplikacji, która składa się z potencjalnie setek elementów danych. Obawiam się, że wspomniany powyżej rodzaj architektury może stać się niewygodny dość szybko, jeśli przekazujemy setki elementów do usługi sieciowej z postu ajax w jQuery. Interesowało mnie doświadczenie innych z tego rodzaju projektowaniem i czy polecilibyście inne podejście.


title: Czy 500 milionów linii kodu jest nawet zdalnie możliwe?

text: New York Times donosi, że witryna Healthcare.gov zawiera „około 500 milionów wierszy kodu oprogramowania”. Ta liczba, przypisywana „jednemu specjaliście” i szeroko powtarzana w interwebach, wydaje się niewiarygodnie naciągana (nawet zakładając, że duża część tej liczby obejmuje standardowe biblioteki). Jeśli jest to dokładne oszacowanie, byłoby to naprawdę oszałamiające (jak pokazuje ta fascynująca infografika). Zdaję sobie sprawę, że StackExchange:Programmers to nie Snopes.com, ale chciałbym się dowiedzieć, czy ktoś tutaj wierzy, że jest to w ogóle możliwe. Chciałabym wiedzieć, czy istnieje wiarygodny system rachunkowości (jeśli to możliwe, używając przykładów z publicznie dostępnych danych), który mógłby doprowadzić kogoś do wniosku, że takie oszacowanie mieści się w sferze rozsądku. W jaki sposób baza kodu może (w dowolny sposób) sumować się do tak ogromnej liczby linii kodu?


title: Wymagane porady dotyczące tworzenia samouczącego się, samoorganizującego się zespołu programistycznego…

text: Jestem starszym studentem na mojej uczelni i przewodniczącym Oddziału Studentów IEEE. Ostatnio zastanawiałem się nad jakimś pomysłem na zapoznanie studentów ze środowiskiem zawodowym, jak produkuje się oprogramowanie w branży i zdobycie praktycznego doświadczenia. Oczywiście wyjazdy do software house'ów to za mało i nie możemy zapewnić tylu praktyk. Pojawił się więc pomysł symulowania software house’u na uniwersytecie. Zasoby, którymi dysponuję, to studenci z własnymi laptopami, uczelnianymi UPS-ami i siecią LAN z dostępem do Internetu oraz rozsądną salą z tablicą i trzema godzinami wolnego czasu dziennie.. :) Jednak absolutnie nie mam pojęcia od czego zacząć. Kamienie milowe, czy jakkolwiek to się nazywa, to generowanie dokumentów wymagań, współdzielenie zasobów, delegowanie zadań, kontrola wersji itp. Naprawdę doceniłbym porady, narzędzia programistyczne (dla JAVA), narzędzia komunikacyjne itp. i inne rzeczy używane w przyzwoity software house… Technologie, które będą celem, powinny być losowe, prawdopodobnie zaczynając od J2EE Spring Hibernate i późniejszego programowania wizualnego w .NET C# i ASP.NET MVC, a także od rozwoju Androida lub iPhone’a….


title: Co się dzieje w grupach użytkowników [platformy]?

text: Jestem programistą .NET, ale nigdy nie byłem na spotkaniu grupy użytkowników .NET ani nic w tym stylu. Być może niedługo będę miał okazję wziąć udział w jednym z nich, ale zastanawiam się. Co dzieje się w grupach użytkowników? Nie szukam koniecznie informacji o .NET, ale są one preferowane. Co z tego zyskujesz _wyłączając_ możliwość networkingu?


title: Mapa architektury oprogramowania ułatwiająca komunikację między zespołami?

text: Pracuję w firmie, w której wiele zespołów pracuje nad różnymi częściami oprogramowania w niejasno zwinny/scrum sposób. Przeważnie organizacja działa dobrze, ale zdarzały się przypadki, w których zespół może wprowadzić zmianę, nie zdając sobie sprawy z jej wpływu na inne zespoły. Tam, gdzie znana jest zależność, komunikacja była dobra, a tam, gdzie zależność jest podejrzewana, dobrze sprawdzały się również „rozgłaszane” e-maile i nieformalne rozmowy. Ale istnieje podzbiór zadań, które znajdują się między szczelinami. E-maile rozgłoszeniowe prawdopodobnie nie są rozwiązaniem, ponieważ stałyby się zbyt liczne, tak że stosunek sygnału e-mail do szumu spadłby. Rozważam rozwiązanie, które obejmuje rodzaj mapy oprogramowania, która wyszczególnia wszystkie różne części systemu i luźno próbuje umieścić wzajemnie oddziałujące i zależne części blisko siebie. Każdy programista następnie aktualizuje swoją pozycję na mapie (dzisiaj pracuję nad X i Y), a zatem jeśli dwóch lub więcej programistów znajduje się w tym samym miejscu (lub w pobliżu) na mapie, możemy to zobaczyć każdego dnia i to może stanowić impuls do dalszej dyskusji na temat możliwego nakładania się i konfliktu. Czy taka metoda istnieje i jest w użyciu? Jeśli tak, co to jest i czy działa? W przeciwnym razie, czy uważasz, że taki schemat ma sens?


title: Jakich reprezentacji pośrednich można użyć do wnioskowania o współbieżności?

text: Staram się lepiej zrozumieć, co byłoby wymagane, aby kompilator mógł dokonywać inteligentnych wyborów dotyczących współbieżności w imieniu programisty. Zdaję sobie sprawę, że istnieje wiele trudnych aspektów tego problemu, na przykład: * Zapewnienie, że nie ma warunków wyścigu * Zapewnienie, że kod, który ma być uruchamiany jednocześnie, nie będzie miał skutków ubocznych, które wpływają na semantyczne znaczenie kodu * Decydowanie, czy narzut od wirowania wątków jest warte uwagi, biorąc pod uwagę stopień równoległości dostępny w kodzie Rozumiem, że dwie główne reprezentacje pośrednie używane we współczesnych kompilatorach to statyczne pojedyncze przypisanie dla języków proceduralnych i obiektowych oraz kontynuacje przekazujące styl dla języków funkcjonalnych. Rozumowanie któregokolwiek z wyżej wymienionych problemów wydaje się trudne przy użyciu tych form pośrednich. Nawet języki, które teoretycznie powinny mieć największe szanse na automatyczne zrównoleglanie (języki czysto funkcjonalne, takie jak Haskell, z gwarancją braku skutków ubocznych) poczyniły ograniczone postępy na tym froncie. Tak więc moje pytanie brzmi naprawdę, jakie reprezentacje pośrednie zostały użyte, aby spróbować rozwiązać ten problem? Czy istnieją inne reprezentacje, które były wykorzystywane w badaniach naukowych, o których nie wiem, a które lepiej nadają się do tego zadania? Czy jest to problem, który zasadniczo musi zostać rozwiązany przez interfejs kompilatora, manipulując abstrakcyjnym drzewem składni, zanim kompilacja osiągnie pośrednią reprezentację?


title: Diagram sekwencyjny. UML „Zakończenia przypadku użycia”

text: Mam kilka pytań dotyczących UML. * Po pierwsze, jak pokażesz "Use Case Ends" na diagramie sekwencji. * Po drugie, jeśli masz alt w diagramie sekwencji dla „Zmienna == fałsz”, czy musisz pokazać, co by się stało, gdyby zmienna była prawdziwa, nawet jeśli nie wydarzyłoby się nic innego niż przejście do następnego wywołania metody? * Po trzecie, czy ostatnia strzałka na diagramie nie zawsze będzie asynchroniczna, ponieważ może kontynuować i nie musi czekać?


title: Rzeczywiste przypadki użycia Smalltalk

text: Bawiłem się trochę Smalltalk i uznałem to za interesujące. Wiem, że istnieje kilka klasycznych przykładów Smalltalk: same obrazy Smalltalk i framework sieciowy Seaside, oraz że istnieje wiele własnych niestandardowych aplikacji zbudowanych przy użyciu tego języka. Chciałbym wiedzieć: * czy istnieją aplikacje komputerowe aktywnie wykorzystywane i rozwijane poza wymienionymi przeze mnie; * jeśli istnieją firmy programistyczne, które wykorzystują Smalltalk do wykonywania swojej pracy; * kiedy używałbyś Smalltalka zamiast innego języka do tworzenia od podstaw nowej aplikacji;


title: Jak wzmocnić wewnętrzną motywację w zespole programistycznym

text: Wpis na blogu Jeffa Atwooda na temat Amazon Mechanical Turk sugeruje, że nie powinien on oferować nagród pieniężnych, ale raczej wewnętrzną motywację, „motywację, która jest napędzana zainteresowaniem lub radością z samego zadania i istnieje w jednostce, a nie polega na jakiejkolwiek zewnętrznej presji. „_ W jaki sposób członek zespołu (menedżer, lider lub programista) wspiera wewnętrzną motywację w zespole programistycznym? **EDYTUJ:** Proszę udzielić wyczerpujących odpowiedzi. Podziel się swoim osobistym doświadczeniem dzięki obiektywnej analizie. **EDYCJA #2:** Aby ułatwić owocną i rzeczową dyskusję, powinniśmy założyć, że wynagrodzenie pieniężne jest satysfakcjonujące dla programisty.


title: Dlaczego nie mamy webowych IDE?

text: Dlaczego nie mamy wielu dobrych internetowych IDE? Jakie aspekty systemu utrudniają implementację IDE jako aplikacji webowej?


title: Rozwiązania dla „Trybu konserwacji”

text: Biorąc pod uwagę aplikację internetową działającą na ponad 10 serwerach, jakie techniki zastosowałeś, aby robić takie rzeczy, jak zmiana stanu witryny, aby można było zaimplementować określone funkcje. Na przykład możesz chcieć: * Ograniczyć logowanie/Wyłączyć niektóre funkcje * Przełączyć witrynę na „Tylko do odczytu” * Przełączyć witrynę na pojedynczą stronę „Trybu konserwacji”. Wykonanie którejkolwiek z powyższych czynności jest dość trywialne. Możesz wrzucić konkretną "flagę" do pliku .ini lub dodać wiersz/wartość do tabeli `site_options` w twojej bazie danych i po prostu przeczytać tę wartość i zrobić odpowiednią rzecz. Ale te rozwiązania mają swoje problemy. ## Wady/Problemy Na przykład, jeśli używasz pliku dla swojej aplikacji i chcesz tymczasowo wyłączyć określoną funkcję, musisz zaktualizować ten plik na wszystkich serwerach. Więc możesz chcieć uruchomić coś takiego jak ZooKeeper, ale prawdopodobnie zbyt komplikujesz rzeczy. Tak więc możesz zdecydować, że chcesz przechowywać te flagi „funkcji” w bazie danych. Ale wtedy oczywiście dodajesz niepotrzebne zapytania do każdego żądania strony. Więc myślisz sobie, że wrzucisz memcached do miksu i po prostu buforujesz zapytanie. Następnie po prostu pobierasz wszystkie swoje "Funkcje" z memcached i dodajesz 2ms~ opóźnienie do swojej aplikacji na każdej stronie. Aby to obejść, decydujesz się na użycie dwupoziomowego systemu pamięci podręcznej, w którym używasz pamięci podręcznej na każdej maszynie (takiej jak Apc/Redis itp.). To zadziała, ale potem się komplikuje, ponieważ musiałbyś ustawić czas życia klucza/skrótu na około 60 sekund, aby po wyczyszczeniu/unieważnieniu obiektu memcached przechowującego wyniki „Funkcje”, pamięć podręczna na komputerze była wystarczająco szybka by zdobyć nowe stany. Jakie masz sugestie? Mając na uwadze, że optymalizacja/wydajność jest tutaj priorytetem.


title: Praca sama vs z innymi

text: Będąc uczniem w małej szkole, nie ma wielu ludzi _(cóż, nie ma)_, które mają taką samą pasję lub umiejętność programowania jak ja. Uczę się programować od 9 roku życia i wierzę, że osiągnąłem poziom, na którym jestem gotowy zrobić coś bardziej ambitnego, w przeciwieństwie do małych skryptów i osobistego projektowania stron internetowych, które obecnie zajmuję. Chodzi o to, czy posiadanie małej grupy – czy po prostu innej osoby – pozwoliłoby nam osiągnąć większe rzeczy? Jeśli tak, to jak zacząłbym budować zespół?


title: Znalezienie nazwy gry wideo ze zdjęciem jej okładki (Python/Java)

text: Przez ostatnie kilka dni próbowałem wymyślić, jak zrobić zdjęcie okładki gry wideo (takiej jak ta) i uzyskać z niego nazwę gry. Początkowo próbowałem użyć Google Search by Image, ale nie lubią automatycznych zapytań i niestety jestem w stanie odwrócić wyszukiwanie obrazów tylko z przeglądarki, a nie programowo. Mam bazę danych wszystkich okładek gier wideo i ich nazw, ale nie jestem pewien, jakie podejście powinienem podjąć, aby dopasować obrazy (jest ich tylko około 7500). Będę również musiał uwzględnić różnice w oświetleniu, orientacji i rozmiarze, aby (chyba) wyrzucić porównanie pikseli. Ktoś inny zrobił coś podobnego (zobacz ten film na Youtube), więc wiem, że to możliwe, po prostu nie jestem pewien, od czego zacząć. jakieś pomysły?


title: Czy powinienem używać dziedziczenia czy interfejsu?

text: Tak w skrócie mam klasę abstrakcyjną: public abstract class Member { public string PCode { get; ustawić; } ciąg publiczny Referencja { get; ustawić; } public DateTime? Wybrana data { get; ustawić; } } A to jest dziedziczone przez 3 inne klasy: public class Fellow : Member { // niektóre właściwości poziomu klasy tutaj } public class ForeignMember : Member { // niektóre właściwości poziomu klasy } public class HonoraryMember : Member { // jakiś poziom klasy właściwości tutaj } A zwykłe operacje CRUD są wykonywane przy użyciu ogólnego wzorca repozytorium: ### Interfejs publiczny interfejs ICRMRepository<T> { List<T> GetAll(); T GetById(int id); T GetByPCode(ciąg pcode); } ### Class public class CRMRepository<T> : ICRMRepository<T> gdzie T : class { public List<T> GetAll() { //akcje przejdź tutaj } public T GetById(int id) { //akcje przejdź tutaj } public T GetByPCode(string pcode) { //actions go here } } Pytanie brzmi, czy gdybym chciał wykonać zapytanie, które przywróciłoby wszystkich Fellows, HonoraryMembers i ForeignMembers w jednym zestawie wyników, jak mam to zrobić? Czy nie byłoby lepiej mieć interfejs zamiast dziedziczenia, np. IMember, a następnie trzy klasy używają tego interfejsu? Lub jakieś rozwiązanie, które wykorzystuje oba?


title: Co to jest wzorzec „Znajdź-napraw-zweryfikuj”?

text: Czym jest wzorzec „Znajdź-napraw-zweryfikuj” w odniesieniu do procesu edycji/sprawdzania pisowni/debugowania itp.? Gdzie najlepiej można opisać ten wzór? Jakie są zalety i wady tego wzoru?


title: Najlepsze praktyki dotyczące bezpieczeństwa w aplikacjach mobilnych

text: Znajomy zapytał mnie ostatnio o aplikacje mobilne i otaczające je zabezpieczenia. Ponieważ chciał stworzyć aplikację mobilną, która obsługiwałaby bardzo bezpieczne informacje, takie jak numery kart kredytowych, zacząłem się zastanawiać nad kwestią bezpieczeństwa tych urządzeń. Czy rozsądne wydaje się przechowywanie poufnych informacji w aplikacji mobilnej? Zastanawiam się nad tym, ponieważ widziałem online dekompilatory dex to class do java i wyobrażam sobie, że na żadnym urządzeniu mobilnym nie ma gwarancji, że dane w _bezpiecznych_ lokalizacjach są tak bezpieczne, jak chcieliby, abyś uwierzył. Ale nie jestem ekspertem w tych sprawach; Czuję się obca, jeśli chodzi o cudowny świat bezpieczeństwa. Dlatego pytam Cię, jaki jest najlepszy sposób na bezpieczne przechowywanie danych? Czy możliwe jest bezpieczne przechowywanie informacji o kartach kredytowych/hasłach/itp. na urządzeniu mobilnym? Jeśli tak, jakie metody należy zastosować, aby zapewnić użytkownikom, że podjęto najlepsze możliwe środki w celu bezpiecznego przechowywania ich informacji. Jeśli nie, jaka jest dobra alternatywa do przechowywania wszystkich poufnych informacji? Nawet wtedy, gdy w wiadomościach pojawiają się wiadomości o naruszeniu danych użytkowników przechowywanych w witrynach internetowych, jakie środki należy podjąć, aby zapewnić również bezpieczeństwo przechowywanych tam danych?


title: Jakie są ważne powody, aby używać ContentPresenter poza szablonem?

text: Natknąłem się na artykuł Den Delimarsky na temat Czym jest ContentPresenter? co mówi: > W WPF znajduje się element o nazwie ContentPresenter, który jest często używany > wewnątrz szablonów kontroli, a także wewnątrz głównego znacznika aplikacji. Nie rozumiem części „wewnątrz znaczników aplikacji głównej”, ponieważ myślałem, że ContentPresenter może być używany tylko wewnątrz ControlTemplate. Rola ContentPresenter jest dość jasna, gdy jest używana w ControlTemplate, ale jakie są ważne powody, aby używać ContentPresenter poza znacznikami szablonu?


title: Wzorce projektowe inne niż OOP?

text: Słyszałem tylko, że termin „wzorzec projektowy” jest używany dla kodu zorientowanego obiektowo, a wzorce GoF zawierają tylko wzorce projektowe OOP, ale wzorce projektowe są eleganckimi rozwiązaniami dla często występujących problemów programistycznych, prawda? Nie ma tam nic, co mówiłoby, że muszą być ograniczone do OOP, prawda? Chciałbym zobaczyć kilka przykładów wzorców projektowych _poza_ sferą programowania obiektowego. Czy masz jakieś? Czy takie w ogóle istnieją (żadna książka, jak książka GoF, nie musiała być koniecznie napisana, należy ich po prostu użyć; wystarczy)? Mogą być specyficzne dla niektórych języków programowania, ale preferowane są ogólne (na poziomie paradygmatu) wzorce innych paradygmatów niż ten zorientowany obiektowo.


title: Plusy i minusy niskopoziomowych i wysokopoziomowych karier programistycznych

text: Jestem w trakcie przechodzenia do nowej pracy programistycznej. Istnieją otwory zarówno dla oprogramowania sterującego niskiego poziomu, jak i oprogramowania aplikacyjnego wysokiego poziomu. Dla mnie obie możliwości są ekscytujące. Praca na oprogramowaniu wbudowanym/sterującym technicznie oznacza programowanie systemu operacyjnego dla określonego sprzętu. Ale może to oznaczać, że będę ekspertem tylko od API tego sprzętu i jeśli przejdę w przyszłości, będę musiał wyrzucić tę wiedzę. Praca nad oprogramowaniem aplikacyjnym, w moim rozumieniu, oznacza oprogramowanie, które można skalować, więc będę również rozwijał swoje umiejętności projektowe. Co więcej, biblioteki mają tendencję do ponownego wykorzystywania w porównaniu do sprzętowych interfejsów API, więc to, czego się dowiaduję, może być przydatne w przyszłości. Ale to moje wąskie spojrzenie na świat. Nie mam wystarczającego doświadczenia, aby zobaczyć większy obraz. Czy jest coś jeszcze, o czym powinienem wiedzieć, wybierając między tymi dwoma wersjami programistycznymi? Dziękuję Ci.


title: Specyfikacja wymagań systemowych a funkcjonalna - osobna dokumentacja?

text: Wiele źródeł (np. Wikipedia) wymienia Specyfikację wymagań systemowych i Specyfikację funkcjonalną jako dwie oddzielne jednostki. Jednak Wiegers w swojej książce pisze: > Specyfikacja wymagań oprogramowania jest czasami nazywana specyfikacją funkcjonalną, specyfikacją produktu... Jest to dla mnie bardzo mylące, ponieważ myślałem, że FS opisuje tylko funkcje, podczas gdy SRS cały system. Z tego punktu widzenia FS zawierałby zarówno wymagania niefunkcjonalne, jak i funkcjonalne oraz wszystko inne.


title: Dlaczego Java nie jest używana w internetowych aplikacjach multimedialnych?

text: Skupiam się na aplikacjach multimedialnych i zauważyłem, że większość aplikacji nie używa Javy w zapleczu. Zamiast tego widzę rozwiązania z PHP/ROR/Pythonem i Flash/Silverlight bez śladu Javy w stosie aplikacji. Która część Javy jest albo ograniczająca, albo ograniczona – lub postrzegana jako ograniczająca lub ograniczona – podczas tworzenia aplikacji multimedialnych? Pozwolę sobie wyjaśnić, mówiąc Java, miałem na myśli Java EE. Oczywiście po stronie klienta ludzie będą używać flasha lub html5 do audio/wideo. Ale to, co próbuję, to dlaczego większość platform multimedialnych jest tworzona za pomocą PHP/ROR/Python (Django)? Istnieje wiele platform dystrybucji dźwięku. soundcloud.com (używa go lang), tunrtable.fm (używa Pythona) youtube.com (używa PHP), czy Java EE nie jest w stanie tego zrobić?


title: Czy przestrzeń nazw C# powinna być Project-Name?

text: Pracuję z wieloma stronami internetowymi (freelancer) i dużą ich ilość piszę w C# MVC4. Stworzyłem bardzo dobry projekt boilerplace, którego planuję używać przy każdej kolejnej, startowej aplikacji, którą buduję, jednak przestrzeń nazw nazywa się `Website`. Dużo kopiuję i wklejam z jednego projektu do drugiego, a potem zawsze muszę refaktoryzować przestrzenie nazw, jeśli będę używał pojedynczej przestrzeni nazw (strony internetowej) na wszystkich moich stronach internetowych, to ten problem znika. Jednak - czy to w jakiś sposób wpłynie na moją aplikację, czy jest to uważane za bardzo złą praktykę?