title: Jak mogę zademonstrować swoją produktywność kierownictwu?

text: Moja uczelnia posiada moduł do tworzenia oprogramowania z prawdziwym klientem. Niektórzy członkowie mojego zespołu pracują przez cały czas w laboratorium komputerowym, które jest niezwykle hałaśliwym środowiskiem, w którym jest wiele przerw i elementów rozpraszających. Zawsze rozmawia około 30 osób. Ludzie zawsze wchodzą na Facebooka, YouTube lub opowiadają sobie dowcipy oprócz wykonywania „pracy”. Niektórzy członkowie mojego zespołu pracują w tym środowisku 3 godziny dziennie. Uczestniczę w naszych cotygodniowych spotkaniach zespołu i intensywnie korzystam z naszego internetowego systemu zarządzania projektami. Adresuję wszystkie e-maile i mam zajętego klienta czatu, ale otrzymuję wiadomości. Dużo korzystam z zasobów internetowych przy rozwiązywaniu swoich problemów. Jednak poza spotkaniami zespołu i sesjami programowania w parach większość mojej pracy wykonuję w cichym otoczeniu, w którym mogę się skoncentrować i skoncentrować oraz blokować wszelkie zakłócenia zewnętrzne i wewnętrzne. Skupiam się na swoim zadaniu w 100%. Uważam, że w ten sposób jestem około 10 razy bardziej produktywny niż w laboratorium i mogę wykonać dużo pracy. Problem polega na tym, że nasi nauczyciele lub „kierownictwo” nie widzą, jak pracuję w laboratorium. Dlatego nie wydaje mi się, żebym z nimi pracował. Dlatego myślą, że nie pracuję zespołowo. Jak mogę ich przekonać, że pracuję w zespole, ponieważ mam dużo komunikacji z moim zespołem, a jednocześnie lubię pracować samodzielnie? Chciałbym to udowodnić, tylko dlatego, że dużo pracuję sam i niekoniecznie wykonuję całą swoją pracę w laboratorium, nadal jestem produktywnym członkiem zespołu. * * * **UPDATE** Kierownictwo powiedziało mi, że problem polega na tym, że 60% czasu spędzam w zespole, a 40% czasu pracuję sam. Powiedzieli mi, że powinienem spędzać 99% czasu pracując z moim zespołem twarzą w twarz w laboratorium, czyli w biurze. * * * Kilka istotnych komentarzy do niektórych odpowiedzi, których niektórzy mogą pominąć: _"Problem polega na tym, że tak naprawdę nie muszę o nic pytać mojego zespołu, ponieważ wolę to sam wygooglować. I ufam Google o wiele bardziej niż mojemu przełożonemu lub zespołowi członków z jakiegoś powodu. Dlatego często się z nimi nie zgadzam. Nie wykonuję pracy zespołowej, ponieważ zasadniczo pracuję w „sieci”. lub umiejętności kolegów z zespołu."_ * * * **AKTUALIZACJA 2** Przestałem wykonywać jakąkolwiek poważną pracę w domu, po prostu zostaję teraz w laboratorium i dobrze się bawię z moim zespołem, a od czasu do czasu też pracuję. Jak wynika z przyjętej odpowiedzi, nie chodzi o to, żebym była produktywna, ale raczej spełniała oczekiwania moich menedżerów i kolegów z zespołu. Jeśli ja i mój menedżer mamy różne przekonania na temat tworzenia oprogramowania, liczy się to menedżera, ponieważ ma on moc, by mnie zawieść/zwolnić. Moim zdaniem spotkania twarzą w twarz nie są tak efektywne jak rozmowy online, a praca w hałaśliwym laboratorium nie jest tak wydajna jak praca w spokojnym środowisku. Myślę, że koledzy z zespołu nie powinni mieć możliwości przerywania mi w dowolnym momencie, kiedy jestem w trakcie zadania. Myślę, że potrzeba co najmniej 50% czasu na samodzielną produktywną pracę i 50% czasu na synchronizację z zespołem. W każdym razie to tylko moja opinia, a to się w tym przypadku nie liczy.


title: Optymalny kształt stołu do programowania w parach?

text: Jak sugeruje tytuł, jaki jest dobry kształt stołu podczas programowania w parach? Czy są kształty, których należy unikać? Jakie są powody, dla których określony kształt jest dobry lub zły? (Mam _mam_ własne przemyślenia na ten temat, ale nie chciałbym jeszcze wpływać na dyskusję tymi danymi wejściowymi)


title: Licencja „Rób, co chcesz” z uznaniem autorstwa

text: Szukam licencji open source, która pozwala ludziom robić, co chcą – podobnie jak licencja MIT – pod warunkiem, że przypisują oryginalnego autora, czyli mnie. Czy istnieje na to wspólna licencja? Jeśli tak, co to jest?


title: Jak wymienić w portfolio te strony, które zmieniły się od czasu, kiedy nad nimi pracowałem?

text: Zbudowałem wiele stron internetowych i chciałbym umieścić je w swoim portfolio. Ale teraz, gdy sprawdzam, widzę, że większość z nich została zmieniona, ponieważ przeszli do innej firmy. Teraz jestem zdezorientowany, co powinienem zrobić 1. Czy wstawiam starą miniaturę lub zrzut ekranu strony lub nową? (Mam stare zrzuty ekranu) 2. Jeśli ankieter sprawdzi stronę i zapyta mnie, jaką część wykonałem, co powinienem powiedzieć? 3. Czy ankieter lub firma kontaktuje się z właścicielem strony, aby to potwierdzić?


title: Jaki jest właściwy sposób łączenia dwóch projektów w oprogramowaniu do kontroli kodu źródłowego?

text: Używam Fossil-SCM do obsługi moich projektów. Ponieważ nie pracuję w zespole, zwykle mam po prostu bardzo liniową gałąź rozwoju: 1.0 -> 1.1 -> 1.2 Zastanawiam się, jak wygląda procedura, gdy masz jeden projekt, którego zadanie ma zostać przekazane pokrewnemu projekt. I tym samym czyniąc pierwszy projekt przestarzałym. Chociaż mam tendencję do przepisywania większości mojego kodu, jeśli nie pamiętam, że już go napisałem, nadal chciałbym zachować kod zarchiwizowany. I wolałbym nie mieć repozytorium skamieniałości, które po prostu jest martwe. Czy mogę to scalić? Czy to właściwy sposób radzenia sobie z tym? Na przykład kod pobierał dane z pliku Excela w celu sformatowania strony HTML. Teraz przekonałem mojego pracodawcę, aby przeniósł arkusz kalkulacyjny Excela do bazy danych, aby zmniejszyć nadmiarowość, zwiększyć wydajność i tak dalej. Ponieważ mogę teraz tworzyć logiczne zapytania, które nie muszą przeskakiwać obręczy, aby wykonać preformę, korzystając z bazy danych, nie będę potrzebować dodatkowych plików vbs, które pierwotnie manipulowały plikiem programu Excel. Technicznie przeniosłbym część istniejącego kodu do obecnego nowego projektu. Skoro ma już swój bagażnik, to czy nie byłoby sensowne połączenie bagażnika innego projektu do tego i jak miałbym to zrobić? WIĘC myślę, że moje drzewo wyglądałoby tak, a nie widziałem wcześniej przykładów rozgałęzień oprogramowania, które przypominają to odwrócone drzewo, więc zastanawiam się, jaka jest norma w takiej sytuacji? ![Łączy się w 1.8!!](http://i.stack.imgur.com/G4RXX.jpg)


title: Czy mapa-redukcja może powiedzieć „Hello World”?

text: Zbierając, że mapa-redukcja jest wykorzystywana do przetwarzania ogromnych ilości danych, postanowiłem to zrozumieć. Moje pytania brzmiały: * Jaką klasę problemów ma rozwiązać? * Jak pomaga w rozwiązywaniu złożonych problemów? * Czy mogę napisać przykładową aplikację (lokalnie!), aby zacząć? Po wielu googlach, blogach i wikipedii wiem, kto z niego korzysta, kto sprzedaje do niego infrastrukturę. Ale nadal nie mam pojęcia o powyższych pytaniach. Najbliższy mi jest ten samouczek na Amazon: „ _Reklama kontekstowa przy użyciu Apache Hive i Amazon Elastic MapReduce z instancjami High Performance Computing_ ” http://aws.amazon.com/articles/2855?_encoding=UTF8&jiveRedirect=1 Ten samouczek zakłada zrozumienie reklamy online i mapy redukują, stąd trudne do naśladowania. Czy ktoś ma jakieś wskazówki, jak programista może rozpocząć pracę z mapą-reduce?


title: Zwinne alternatywy planowania produktu w celu wsparcia jakości funkcji zorientowanej na cel

text: Co rozumiem przez _plan wysokiego poziomu_? Rodzaj planu, który określa funkcjonalność produktu, którą należy rozwinąć, ale nie wnikając w zbyt wiele szczegółów, które są wykonywane później. Taki plan pomaga decydować o kolejności rozwoju funkcjonalności (priorytet) lub nawet eliminować te zbędne. Świetny plan wysokiego poziomu to nie tylko zestaw wymagań funkcjonalnych, ale raczej wizja produktu z oczywistym celem. W terminologii Agile tego rodzaju dokumentacją funkcjonalności jest Backlog. Przyzwyczailiśmy się do jego zawartości – historyjek użytkowników – zdefiniowanych przez Mike'a Cohna, które mówią: > Jako _rola_ chcę _funkcjonalności_, aby _korzyść_. Ale jak wiemy z doświadczenia, może to prowadzić do: * **narracji bezużytecznych** Na przykład: _Jako gość chcę się zalogować, aby móc robić różne rzeczy._ Ale jak można ulepszyć tę historyjkę użytkownika? Jakie inne korzyści, które możemy opisać, są bardziej istotne niż _...do robienia rzeczy_? * **płaska lista trudnych do opanowania, pozornie niepowiązanych historii** Trudno stwierdzić, które z nich są ze sobą powiązane, a które nie (nie powinny, ale nie sądzę, że możemy tego całkowicie uniknąć), a nawet które zapewniają środki do osiągnięcia tego samego cel wysokiego poziomu. * **zbyt wiele niepowiązanych celów/korzyści** Cele tylko dlatego, że musimy je napisać, ale bez rzeczywistej korzyści biznesowej – mając na uwadze cel biznesowy wysokiego poziomu. ## Problem Jak się przekonałem, istnieje więcej sposobów na pisanie złych/bezużytecznych historyjek użytkownika niż pisanie naprawdę dobrych. I łatwo jest dostać się do _niewłaściwych_ torów, nawet jeśli jesteś ostrożny. I jak można pisać lepsze historyjki użytkownika, gdy pracuje się nad własnym produktem, aby nie mieć możliwości uczenia się od innych członków zespołu i musi teraz dostarczać historyjki użytkownika. Nie po 6 miesiącach nauki. Dlatego chciałbym wiedzieć o alternatywach dla planowania projektu na wysokim poziomie, które zapewniają lepszy opis funkcji i trafność. Słyszałem o **mappingu efektów**, który wydaje się bardzo dobry w utrzymywaniu koncentracji na celu i filtrowaniu istotnych od nieistotnych, ale nie mam z tym żadnego doświadczenia. Wyobrażam sobie, że wyznaczenie celu może być kluczowe. Więc jeśli źle to ustawisz, wszystko inne też jest nie tak. Albo lepiej powiedzieć „nieistotne”. Główne pytanie brzmi: **Czy możemy postępować zgodnie z prostymi do zrozumienia i wąskimi wytycznymi, które doprowadzą nas do wspaniałego planu wysokiego poziomu**. Wytyczne, które pozwalają na mniej błędów i lepiej prowadzą do wartościowego planu/rezultatów. Widzę, jak później piszę historie użytkowników, które opisują funkcje do wdrożenia. Problem z historyjkami użytkowników polega na tym, że łatwo się w nich pogubić. Jeśli nie masz dużego doświadczenia z historyjkami użytkowników, które mogą przeszkadzać w twoim produkcie, ponieważ odwracają uwagę od rzeczywistego celu. Wszystko, co widzisz, to cechy produktu opisane w historyjkach użytkowników. Coś innego powyżej, co pozwoliłoby nam tworzyć lepsze historie, a także łatwo odfiltrować te, które są niezwykle istotne. Jakie są inne bardziej niezawodne podejścia niż proste planowanie historyjek użytkownika, które są wykorzystywane w planowaniu zwinnym? ## W centrum tego pytania W przeszłości pisałem historie użytkowników w kilku projektach i dokładnie wiem, jak trudne i niejasne jest to zadanie. Zauważyłem też, że pisanie ich jest jeszcze trudniejsze, gdy piszesz je do własnego projektu/produktu. Możesz łatwo przeprojektować swój produkt lub niewłaściwie ustalić priorytety/ocenić funkcje. Dlatego chciałbym napisać zestaw funkcji dla mojego nadchodzącego produktu w taki sposób, aby były one rzeczywiście odpowiednie i odpowiednio je priorytetyzować, aby osiągnąć mój cel tak niezawodnie, jak to możliwe. Tak więc **trafność i jakość funkcji** oraz **priorytet zorientowany na cel**. Mówię tu o wymiernych celach ilościowych, takich jak > **20% wzrost dochodów z miesiąca na miesiąc** lub > **5% współczynnik konwersji sprzedaży wizyt użytkowników**, a nie coś niejasnego, jak _wzrost liczby użytkowników_ lub _wzrost sprzedaży_. Widzimy, że pisanie odpowiednich funkcji, które wspierają te cele, jest znacznie trudniejsze.


title: Jak używać wag zdarzeń w TMVA ROOT

text: Staram się szkolić i wykonywać klasyfikatory z TMVA. Mój zestaw danych zawiera wagi zdarzeń oprócz danych zdarzeń. W _TMVA::Factory_ znajduje się metoda _setWeightExpression_ do określania wag zdarzeń. Do czego nadają się wagi eventowe? Dlaczego nie istnieje podobna możliwość ustawiania wag zdarzeń w _TMVA::Reader_? Pozdrawiam, Vladimir


title: Czy tworzenie nowych obiektów bez ich przechowywania to zła praktyka?

text: Widziałem obiekty utworzone w kodzie Java bez przechowywania referencji do obiektu. Na przykład we wtyczce eclipse widziałem powłokę SWT utworzoną w ten sposób: new Shell(); Ten nowy obiekt Shell nie jest przechowywany w zmiennej, ale pozostanie przywoływany, dopóki okno nie zostanie usunięte, co [wierzę?] dzieje się domyślnie po zamknięciu okna. Czy tworzenie takich obiektów bez przechowywania referencji jest złą praktyką? A może biblioteka była źle zaprojektowana? Co zrobić, jeśli nie potrzebuję referencji, ale chcę tylko „efektów ubocznych” obiektu? Czy mimo to powinienem przechowywać referencje? AKTUALIZACJA: Trzeba przyznać, że mój powyższy przykład jest kiepski. Chociaż widziałem elementy interfejsu użytkownika utworzone w ten sposób, tworzenie takiej powłoki SWT prawdopodobnie nie miałoby sensu, ponieważ musisz wywołać metodę open na instancji Shell. Istnieją lepsze przykłady dostarczone przez aix, takie jak poniższe z samouczka dotyczącego współbieżności Java: (new HelloThread()).start(); Ta praktyka jest widziana w wielu kontekstach, więc pytania pozostają. Czy to dobra praktyka?


title: Podobieństwa MFC i WPF

text: Jakie są podobieństwa między MFC i WPF? Czy warto uczyć się MFC przed WPF?


title: Pomoc w projektowaniu w procesie równoległym

text: Refaktoryzuję trochę kodu i mam problem z pobieraniem danych z dwóch równoległych procesów. Mam aplikację, która przesyła pakiety tam iz powrotem za pośrednictwem różnych mediów (np. RS232, TCP/IP itp.). Sęk w tym pytaniu polega na tym, że zachodzą dwa równoległe procesy. Mam nadzieję, że poniższy obrazek lepiej pokazuje, co się dzieje, niż potrafię to wyrazić słowami:![tutaj wpisz opis obrazu](http://i.stack.imgur.com/QCbX8.jpg) Klasa SetupRS232() tworzy nową instancję SerialPort przez: SerialPort serialPort = new SerialPort(); Moje pytanie brzmi, jaki jest najlepszy sposób, aby klasa Communicator(), która wysyła pakiet za pośrednictwem odpowiedniego medium, uzyskała dostęp do obiektu SerialPort z klasy SetupRS232? Mogę to zrobić z Singletonem, ale słyszałem, że generalnie nie są to najlepsze konstrukcje. Próbuję podążać za SRP, ale czuję, że robię tutaj coś złego. Communicator() będzie musiał zrobić wszystko, aby uzyskać dostęp do SetupRS232(), aby uzyskać dostęp do klasy SerialPort. Właściwie nie znalazłem sposobu, aby nawet uzyskać do niego dostęp. Czy zaprojektowanie każdej średniej klasy, na przykład SetupRS232(), SetupTCPIP, jako singletona byłoby najlepszym sposobem podejścia do tego problemu?


title: REST vs RPC dla rozwoju mobilnego

text: Jak wielu wie, rozwój urządzeń mobilnych w dzisiejszych czasach gwałtownie rośnie i, jak sądzę, ma to wpływ na to, co kodujemy. Mówiąc konkretnie, interesuje mnie tworzenie serwisów internetowych dla aplikacji mobilnej. Widzę dwie możliwe architektury - RPC i REST. Opracowałem zarówno usługi REST, jak i RPC i zauważyłem, że usługi RPC są znacznie łatwiejsze do kodowania, zwłaszcza w językach takich jak PHP. Problemem wydaje się być skalowalność - po stronie serwera może łatwo zamienić się w bałagan, gdy obecnych jest wiele procedur. Z drugiej strony REST wydaje się być dużo bardziej ustrukturyzowany, po stronie serwera staje się stosunkowo łatwy w utrzymaniu, ale ma potencjał do rozbijania danych na wiele zasobów, co jest złe dla aplikacji mobilnych (z wielu powodów). Z tego, czego doświadczyłem, RPC wydaje się nieco lepsze w większości przypadków: * Zarówno po stronie klienta, jak i serwera zależy na zminimalizowaniu liczby dostępnych procedur i wykonywanych połączeń. * Przestrzeganie zasad architektonicznych nie jest sprzeczne z możliwymi w innym wypadku optymalizacjami. Naprawdę nie oczekuję, że ktoś mi wyjaśni, czym są REST i RPC, w sieci jest tego pełno. **Chcę, aby ludzie, którzy mają doświadczenie w tworzeniu aplikacji mobilnych, wyrażali swoje opinie na temat korzystania z tych dwóch architektur po stronie serwera.** Porady też są mile widziane (kto nie lubi napiwków, co?).


title: Matematyka czysta a matematyka stosowana dla programistów

text: Matematyka zawsze była moją sprawą, ponieważ zawsze uważałem ten przedmiot za łatwy. Informatyka to jednak moja druga miłość. Mając wybór, wolałbym studiować matematykę. Ponieważ jedyne kariery, w które zwykle wchodzi się na studiach licencjackich z matematyki, wcale nie są atrakcyjne, byłbym bardzo zadowolony spędzając dni jako programista. Moje pytanie brzmi: z której dyscypliny matematycznej przyszły programista odniósłby więcej korzyści? Matematyka stosowana czy czysta? Lubię uczyć siebie i jestem przekonany, że mogę nauczyć się, jak być świetnym programistą, ale nadal planuję zdobyć niepełnoletnią naukę CS!


title: Czy to jest framework MVC?

text: Zbudowałem framework dla moich aplikacji, który działa dobrze i zawsze nazywałem go MVC. Jednak po przeczytaniu trochę więcej o tym, czym jest MVC (nie żebym nie zaczął od tego, ale dałem mu bardzo krótki przegląd i spojrzałem na inne frameworki, które używały wzorca mvc), i dało mi to przerwę na myśl. Struktura jest następująca: Framework posiada bootstrap, który ładuje wymagane pliki dla frameworka oraz plik inicjujący dla aplikacji (`app_bootstrap.php`). Plik `app_bootstrap.php` ma trzy funkcje. Najpierw tworzy stałe do użycia przez framework (tj. Konfiguracja połączenia z bazą danych, konfiguracja profilowania, bazowa ścieżka url i wewnętrzne ścieżki plików). Po drugie, wymaga wszystkich plików, które byłyby związane z aplikacją, przede wszystkim tego, co nazwałem klasami „modeli”, które zawierają informacje o nazwie i strukturze tabel w bazie danych, regułach walidacji, skojarzeniach z innymi „modelami” itp. Te "modele" rozszerzają klasę abstrakcyjną, która zawiera statyczne funkcje do wybierania i tworzenia wierszy z bazy danych, które tworzą instancje klasy encji, która zajmuje się wierszem, takich jak `__get`, `__has`, `__set`, `__unset` do pobierania kolumn i skojarzeń oraz `save` i `delete` do zapisywania zmian wierszy w bazie danych. Po trzecie, wywołuje funkcje w pliku `router.php`, które konfigurują powiązania danych środowiskowych (takich jak adres URL, status logowania użytkownika, ssl, ajax, istnienie ciasteczek itp.) z klasami "kontrolera". Framework następnie uruchamia funkcję wykonawczą w `router.php`, która przejdzie przez zdefiniowane reguły danych środowiskowych i określi, który "kontroler" ma zostać załadowany, jeśli go znajdzie, będzie `wymagał` pliku (z aplikacji/kontrolerów katalogu, zgłasza błąd, jeśli nie zostanie znaleziony) i wywołaj klasę z odpowiednią funkcją punktu wejścia (indeks nie jest zdefiniowany) lub zgłoś błąd 404. Po uruchomieniu „kontrolera” nie ma już funkcji, które framework będzie wykonywał, a po zakończeniu „kontrolera” program zakończy się (chyba że zostało aktywowane profilowanie, w którym wyprowadzi dane, a następnie zakończy się ). Ale framework dostarcza funkcje do "kontrolera" i, by wymienić kilka, klasę `input` (do obsługi wszystkich danych wejściowych, takich jak `$_GET`, `$_POST` lub `$_SERVER`, pliki cookie, agenta, zdalnego adresu IP itp., a także udostępnianie oczyszczonego interfejsu), klasę `output` (dla nagłówków, ciasteczek, komunikatów o stanie itd.), klasę `queryBuilder` (do tworzenia zapytań do bazy danych w funkcji zdarzeń, która nie można tego zrobić w ramach "modelu") oraz klasę `view` (do parsowania zmiennych do widoku w celu renderowania i zwracania do klienta). Ale po przeczytaniu więcej informacji na temat MVC, okazuje się, że `router.php` działa podobnie do kontrolera, "kontroler" zachowuje się jak model, "model" działa jak ORM, a widok jest prawie poprawny. Czy zatem ten framework nadal byłby klasyfikowany jako MVC, czy pasuje do innego wzorca (jeśli taki istnieje)?


title: Dlaczego programiści muszą być na bieżąco z technologiami i metodologiami?

text: Zawsze otrzymuję porady, że programiści muszą być na bieżąco z najnowszymi technologiami - takimi jak webrtc, aktualizacje html5 i css3 oraz nowe biblioteki js, metodologie oprogramowania, takie jak TDD, DDD i BDD. Pytanie brzmi _dlaczego_? Dlaczego musimy się stale aktualizować? Czy nie możemy po prostu trzymać się tego, co wiemy i stać się z tym lepszym?


title: Czy mixiny tworzą sprzężenie z Ruby?

text: Załóżmy, że mam następującą architekturę: module Keyring @keyring = Keyring.new class Keyring def key def add_key def update_key def remove_key class KeyStorage class Encryptor class AesEncryptor class Connection def id def user_id def protokół def nazwa class FtpConnection include Keyring def host def port def username_encryption_id def passsword_encryption_id def is_passive def username # Zwraca odszyfrowaną wartość podając identyfikator klucza szyfrowania. return @keyring.key(self.username_encryption_id) def hasło # Zwraca odszyfrowaną wartość z podanym identyfikatorem klucza szyfrowania. return @keyring.key(self.password_encryption_id) Jak widać, FtpConnetion używa pęku kluczy. Czy Keyring nie jest połączony z modułem Keyring (według nazwy)? Jeśli chcę użyć FtpConnection w innym projekcie, musiałbym zabrać ze sobą Keyring lub zaimplementować inny moduł o dokładnie takiej nazwie, prawda? Czy to nie zły projekt?


title: Jaka jest różnica między rozwojem a B+R?

text: Kolega poprosił mnie o jasne wyjaśnienie różnicy między zwykłym rozwojem a badaniami i rozwojem (B+R) i nie byłem w stanie tego zrobić. Po przeczytaniu Wikipedii nadal nie mam dokładnej odpowiedzi. Według Wikipedii (nieco zmodyfikowane): > Istnieją dwa podstawowe modele: > > * W jednym modelu podstawową funkcją jest **opracowywanie nowych produktów** ; > > * w drugim modelu podstawową funkcją jest odkrywanie i **tworzenie nowej > wiedzy na tematy naukowe i technologiczne** w celu > odkrywania i umożliwiania rozwoju wartościowych nowych produktów, procesów i usług. >> Pierwszy model jest mylący. Czy to oznacza, że rozwój (nie R&D) polega wyłącznie na dodawaniu nowych funkcji do produktu, rozwiązywaniu błędów i utrzymaniu? Co się stanie, jeśli coś, co zostało wcześniej opracowane jako nowa funkcja, stanie się osobnym produktem? Drugi model jest mniej zagmatwany, ale nadal, jak zakwalifikować, czy coś jest nową wiedzą, czy wiedzą już odkrytą? Później Wikipedia dodaje, że zwykły rozwój różni się od B+R ze względu na: > niemal natychmiastowy zysk lub natychmiastową poprawę. To wciąż nie jest wystarczająco jasne. Jak zakwalifikować „prawie natychmiastowy zysk”? Co zrobić, jeśli zadanie przynosi natychmiastowy zysk, ale wymaga intensywnych badań? Lub jeśli jest prosty, ale ma niepewny zysk, na przykład wymuszenie wspólnego stylu na podstawie kodu? Na przykład, czy do rozwoju lub R&D należy: * Stworzenie silnika abstrahującego dostęp do bazy danych, upraszczającego i ogromnie skracającego kod innych aplikacji (istniejących lub tych, które zostaną napisane w przyszłości), które powinny uzyskiwać dostęp do bazy danych ? * Ustanowić nową architekturę zorientowaną na usługi dla całej organizacji zasobów firmy, aby przejść z kilku oddzielnych i autonomicznych aplikacji do zestawu dobrze zorganizowanych, połączonych usług internetowych, takich jak te, z których korzysta Amazon? * Zaprojektować nowy protokół komunikacyjny, aby umożliwić szybszą replikację danych między dwoma centrami danych firmy? * Wymyślić nowy rodzaj testowania oprogramowania podczas pracy nad konkretnym produktem, wiedząc, że ten rodzaj testowania poprawi/uprości proces testowania? * Udowodnić, że programowanie funkcjonalne jest bardziej odpowiednie niż programowanie OOP dla konkretnej aplikacji, w oparciu o dowody, logikę i wcześniejsze doświadczenia? * Ulepsz istniejącą aplikację, dodając gesty na ekranach dotykowych, po wykonaniu badań i testów, które pokazują, że te gesty poprawiają produktywność użytkowników o współczynnik co najmniej 1,4 dla precyzyjnego zestawu zadań? * Znaleźć sposób na znaczne zwiększenie efektywności wykorzystania energii (PUE) centrum danych? * Utworzyć język specyficzny dla domeny (DSL)? Krótko mówiąc, jak mogę określić, czy podczas pracy nad czymś zajmuję się R&D?


title: Dowiedz się, czyja kolej na kupowanie rogalików, uwzględniając ewentualne nieobecności

text: Zespół postanowił, że każdego ranka ktoś powinien przynieść rogaliki dla wszystkich. Nie powinna być za każdym razem ta sama osoba, więc powinien istnieć system określający, czyja kolej jest następna. Celem tego pytania jest ustalenie algorytmu decydującego o tym, czyja kolej na jutro przyniesie rogaliki. Ograniczenia, założenia i cele: * Czyja kolej na przyniesienie rogalików ustalimy poprzedniego popołudnia. * Każdego dnia niektórzy ludzie są nieobecni. Algorytm musi wybrać kogoś, kto będzie obecny tego dnia. Załóżmy, że wszystkie nieobecności są znane z jednodniowym wyprzedzeniem, aby nabywcę rogalików można było ustalić poprzedniego popołudnia. * Ogólnie rzecz biorąc, większość ludzi jest obecna przez większość dni. * W trosce o uczciwość każdy powinien kupować rogaliki tyle razy, co pozostali. (Zasadniczo załóżmy, że każdy członek zespołu ma taką samą ilość pieniędzy do wydania na rogaliki.) * Miło byłoby mieć jakiś element losowości, a przynajmniej losowości postrzeganej, aby złagodzić nudę w składzie. Nie jest to trudne ograniczenie: to raczej ocena estetyczna. Nie należy jednak wybierać tej samej osoby dwa razy pod rząd. * Osoba, która przynosi rogaliki, powinna o tym wiedzieć wcześniej. Jeśli więc osoba P ma przywieźć rogaliki w dniu D, to fakt ten należy ustalić w którymś dniu wcześniejszym, w którym osoba P jest obecna. Na przykład, jeśli przynoszący rogaliki jest zawsze wyznaczany dzień wcześniej, to powinna to być jedna z osób, które są obecne dzień wcześniej. * Liczba członków zespołu jest na tyle mała, że zasoby pamięci masowej i obliczeniowe są praktycznie nieograniczone. Na przykład algorytm może opierać się na pełnej historii tego, kto w przeszłości przyniósł rogaliki. Wystarczyłoby kilka minut obliczeń na szybkim komputerze każdego dnia. Jest to model problemu w świecie rzeczywistym, więc możesz podważyć lub udoskonalić założenia, jeśli uważasz, że lepiej modelują scenariusz. * * * Początek 1: Dowiedz się, kto kupi rogaliki Floriana Margaine. Początek 2: Dowiedz się, kto kupi rogaliki Gillesa. To pytanie jest w tej samej wersji co pytanie Gillesa i zostało ponownie wysłane na programistów jako eksperyment, aby zobaczyć, jak różne społeczności radzą sobie z wyzwaniem programistycznym.


title: Jak wielkim niepowodzeniem jest zmiana branży dla programisty?

text: Moje pytanie dotyczy zmiany branży jako dewelopera po spędzeniu pół dekady w jednym. Załóżmy, że jestem pełnoprawnym programistą aplikacji internetowych i mobilnych, posługuję się wieloma różnymi językami i paradygmatami i od kilku lat działam w pobliżu, zarówno w bardzo dużej korporacji, jak i jako założyciel startupu w głównie rola techniczna. Hipotetycznie, powiedzmy, że chciałbym zobaczyć, czy jako twórca gier AAA, być może zacząłbym jako programista gier i stamtąd. Wcześniej odbyłem staż w dużej firmie zajmującej się grami, ale w tym czasie odrzuciłem ich ofertę, ponieważ nie widziałem, aby projekt posunął się zbyt daleko (nie widziałem). Prawdopodobnie mógłbym łatwo dostać rolę w rozwoju po stronie serwera, ale byłoby to zbliżone do tego, co już robię. Wiem, że ze względu na moje szerokie doświadczenie nie będę miał szczególnie trudności z szybkim rozpędzaniem się w jakichkolwiek technologiach i paradygmatach, z których będzie korzystała gra i będzie świetnie sobie radzić na dłuższą metę, ale nie jestem pewien, co na krótką metę będzie wyglądać jak. Jakiego rodzaju niepowodzenia mogę się spodziewać? Czy będę musiał ponownie wspinać się po totemie od podstaw? Czy jest coś, co mogę zrobić, aby zacząć działać? Jakie jest twoje doświadczenie ze zmieniającymi się branżami (nie muszą to być te same branże, które wspomniałem)? Czy w końcu żałowałeś, że nie możesz przenieść swojej wiedzy o domenie?


title: Jak zaimplementować funkcjonalność poleceń bg, & i fg w moim niestandardowym programie powłoki uniksowej napisanym w języku C?

text: Rozszerzam funkcjonalność niestandardowej powłoki uniksowej, którą napisałem w ramach mojego zadania laboratoryjnego. Obecnie obsługuje wszystkie polecenia poprzez wywołania execvp, wbudowane polecenia, takie jak pwd, cd, history, echo i export, a także przekierowania i potoki. Teraz chciałem dodać obsługę uruchamiania polecenia w tle, m.in. $ls -la& Chcę również zaimplementować polecenia sterujące zadaniami bg i fg. Wiem, że można to osiągnąć, jeśli wykonam polecenie, rozwidlając nowy proces potomny i nie czekając na niego w procesie nadrzędnym. Ale jak ponownie przenieść to polecenie na pierwszy plan za pomocą fg? Mam pomysł, aby wpisać każde polecenie w tle na listę, przypisując każdemu z nich numer seryjny. Ale nie wiem, jak sprawić, by procesy wykonywały się w tle, a następnie przywrócić je na pierwszy plan. Wydaje mi się, że wywołania systemowe wait() i waitpid() przydadzą się, ale nie jestem z nimi tak komfortowy. Próbowałem czytać strony podręcznika, ale wciąż jestem w ciemności. Czy ktoś może wyjaśnić w języku laika, jak to osiągnąć w programowaniu systemu UNIX? A czy ma to coś wspólnego z sygnałami SIGCONT i SIGSTP?


title: Czy historyjki użytkownika powinny być przypisane do członków zespołu?

text: Używamy JIRA do zarządzania procesem scrum. Ciekawi mnie, czy typ problemu User Story powinien być przypisany do członka zespołu, zamówienia zakupu, czy pozostać nieprzypisany. Moje przeczucie mówi mi, że powinien pozostać nieprzypisany do przypisania do PO, ponieważ zespół powinien pracować tylko nad problemami z zadaniami, ale chciałem sprawdzić, czy czegoś nie brakuje.


title: Akcja Struts wywoływana bez klikania przycisku przesyłania w IE8

text: Używam Struts 1, a moja aplikacja obsługuje tylko przeglądarki IE. Poniższy prosty kod działa dobrze na IE9 i nowszych, tj. po kliknięciu przycisku action1 wywoływana jest akcja1; kliknij przycisk action2 , zostanie wywołana akcja2. <html:submit property="someaction" styleId="action1button" styleClass="button"> <bean:message key="someaction.action1" /> </html:submit> <html:submit property="someaction" styleId= "action2button" styleClass="button"> <bean:message key="someaction.action2" /> </html:submit> Jednak w IE8 i niższych, po kliknięciu przycisku action2button, wywoływane są zarówno action1 jak i action2. Chociaż action1button nadal wywołuje tylko action1. Jestem zdezorientowany. Czy ktoś ma pojęcie, co tu się dzieje?


title: Dlaczego Java ma „zły rap”

text: Słyszałem, że wiele osób słabo mówi o Javie, zwłaszcza tych pochodzących z C/C++. Czy istnieje historyczny powód dlaczego? Czy to dlatego, że kiedyś maszyny były zbyt wolne, aby uruchomić JVM bez opóźnień?


title: Test Driven Development, czy zmniejszyło to stres dla programistów?

text: Rozumiem korzyści płynące z rozwoju opartego na testach, ale czy były jakieś badania, które ujawniają poziom zadowolenia z produktu lub poziom stresu twórców autorów po wprowadzeniu testów jednostkowych? Szukam studiów przypadku, a najlepiej artykułów naukowych.


title: Czy pytaniem bramkowym przy zatrudnianiu programisty internetowego powinno być „Czy sam lub z jednym lub dwoma partnerami wprowadziłeś kiedyś produkt na rynek?”

text: Właśnie spotkałem faceta, inżyniera, ale naiwnego oprogramowania, który zaprojektował, wyprodukował i teraz sprzedaje bardzo fajny produkt, podwórkową tyrolkę. Opracował nowy układ hamulcowy dla tej rzeczy i ma patent. Wymyślił i złożył dwa zestawy do tyrolki i sprzedaje je w sieci. Domyślam się, że sam przepracował co najmniej 6000 godzin i 50 000 dolarów (wliczając opłaty prawne za aplikację patentową). Nic dziwnego, że zaczyna się biznes. Problem polegał na tym, że twórcy stron internetowych (sic! liczba mnoga – możesz sobie wyobrazić), z którymi był związany kontraktem, z niedojrzałości lub ignorancji, po prostu przejęli go przez węgle: wydał, jak mówi, o wiele więcej dolców niż powinien wprowadziłem swoją witrynę e-commerce. Nie chcę mówić ile dolców, ale dużo. Myślę, że gdyby któryś z tych programistów przeszedł przez niekończący się, rozdzierający ból w prowadzeniu biznesu od zera, wszystko byłoby zupełnie inne i szczęśliwsze. Pytam więc: czy pytaniem bramkującym przy zatrudnianiu programisty internetowego powinno być _ „Czy sam lub z jednym lub dwoma partnerami wprowadziłeś kiedyś produkt na rynek? Nie obchodzi mnie, czy się udało, czy nie, ale powiedz mi o tym."_


title: Struktura/wzorzec klasy do walidacji kilku różnych szablonów Excela?

text: Próbuję sprawdzić poprawność zawartości arkuszy Excela, które są zgodne z kilkoma różnymi szablonami. Dla każdej z nich istnieją trzy możliwe akcje walidacji dla różnych komórek: * Wyrażenie regularne (np. „XYZ-123” kończy się niepowodzeniem, ponieważ nie pasuje do wzorca „[A-Z]{4}-\d{3}”) * Data/godzina format (np. „24 stycznia 2013” kończy się niepowodzeniem, ponieważ nie jest to mm/dd/rrrr) * Typ danych (np. „xyz” nie działa, ponieważ nie jest liczbą całkowitą) Moją pierwszą myślą było użycie następującej klasy: public class Validator { Excel. Arkusz vArkusz; List<Tuple<string,string,string>> cellActions=new List<Tuple<string,string,string>>(); //wypełnia listę cellActions na podstawie typu szablonu public Validator(Excel.Worksheet sht) { this.vSheet=sht; string templateType=templateCheck(sht); switch (templateType) { case "type1": cellActions.Add(new Tuple<string,string,string>("C5","regex","[A-Z\d]{6}"); cellActions.Add(new Tuple <string,string,string>("D3","datatype","long"); //i tak dalej, aby przerwać kolejne 30 elementów listy; wielkość liter "type2" cellActions.Add(new Tuple<string,string,string> ("A3","data_godzina","rrrr-MM-dd GG:mm"); cellActions.Add(new Tuple<string,string,string>("A6","regex",".+\s[ACGT ]{3}"); //itd. } } private string templateCheck(Excel.Worksheet sht) { //zwróć typ szablonu jako string na podstawie zawartości arkusza roboczego } public void validate() { foreach(Tuple<string,string, string> cellAction in cellActions) { //sprawdzić zawartość komórki we właściwości vSheet zgodnie z regułami cellAction } } } } Czy jest to przypadek, w którym Wzorzec Strategii byłby odpowiedni?Istnieje kilka różnych typów arkuszy, eac h z inną listą komórek i regułami dla tych komórek, więc może dobrze byłoby pomyśleć o każdym szablonie jako o strategii do zaimplementowania jako klasy. A może nie jest to sytuacja, w której wzorzec ma zastosowanie, biorąc pod uwagę, że każdy z 3 typów akcji walidacji jest zawsze taki sam, niezależnie od tego, w którym szablonie został zastosowany?


title: Wizualizacja poziomów temperatury w mieście

text: Mam listę poziomów temperatur (0 - 30 stopni) w różnych częściach miasta. Chciałbym zobrazować różne poziomy temperatur w różnych częściach miasta. Gorące miejsca powinny być wyświetlane na czerwono, a zimne na niebiesko. Jeśli użytkownik pomniejszy, otrzyma średni kolor temperatury miasta, a po powiększeniu średni kolor umiarkowanego koloru tego miejsca. Myślę, że to, czego potrzebuję, nazywa się _mapami cieplnymi_. Czy to prawda? Nie jestem zbyt ekspertem w technikach wizualizacji i byłbym wdzięczny za objaśniający pseudokod, aby zilustrować wewnętrzne działanie i główne elementy składowe algorytmów map cieplnych oraz jak poradzić sobie z powiększaniem.


title: Jakie rodzaje historii powinny znaleźć się w przeglądzie sprintu?

text: To jest rodzaj kontynuacji mojego poprzedniego pytania. Czy powinniśmy przestać próbować robić Agile, jeśli kontrola jakości trwa 12 tygodni? Po raz drugi w tak wielu sprintach przygotowaliśmy przegląd sprintu, który ma zawierać tylko jeden problem, który zasadniczo stanowi poprawkę niejasnych błędów lub co najwyżej ezoteryczne ulepszenie jakiejś małej części naszego produktu. Jedynymi prawdziwymi interesariuszami tego wydania są pojedynczy deweloper i klient, który ją otworzył. Wydaje mi się, że biorąc pod uwagę te parametry, prawdopodobnie lepiej będzie, jeśli nie zrobimy przeglądu sprintu. Czy istnieje ogólna zgoda co do tego, jakie rodzaje historii powinny być omawiane podczas przeglądu sprintu, a które należy pominąć, czy też wszystko powinno być fair game? Niestety w ogóle nie robiliśmy retrospekcji, więc jeśli to się nie zmieni, ten powód jest raczej powodem do kontynuowania przeglądu.


title: Testowanie danych: czy powinienem utworzyć fałszywy przypadek testowy?

text: Napisałem program integracyjny, który tworzy pliki ze źródłowego zestawu danych i konwertuje je na docelowy plik danych. Pliki te zawierają informacje dotyczące pól/rekordów, które muszą zostać zweryfikowane przez naszych klientów przy użyciu ich metod walidacji. Planuję stworzyć wiele przypadków testowych i oczekuję informacji o tym, jak dobrze dane zostały zweryfikowane, abym mógł poprawić mój program. Chcę stworzyć przypadek testowy, o którym wiem, że nie przejdzie ich walidacji, jednak muszę wiedzieć, czy ich metody walidacji przejmują podstawy, takie jak struktura i układ plików. Staram się zapobiec sytuacji, jeśli wszystkie moje przypadki testowe zakończą się pomyślnie, ale później pliki nie były w odpowiednim formacie, jakiego potrzebował klient. Czy uważasz, że to dobry pomysł i czy uzyskam z niego jakieś ważne informacje?


title: Dlaczego nie ma języka zorientowanego na usługi?

text: **Edytuj:** Aby uniknąć dalszych nieporozumień: _nie_ mówię o usługach internetowych i tym podobnych. Mówię o wewnętrznej strukturze aplikacji, nie chodzi o to, jak komputery się komunikują. Chodzi o języki programowania, kompilatory oraz o rozszerzanie imperatywnego paradygmatu programowania. **Oryginał:** w dziedzinie programowania imperatywnego widzieliśmy dwa paradygmaty w ciągu ostatnich 20 lat (lub więcej): zorientowany obiektowo (OO) i zorientowany na usługi (SO). oparte na komponentach (CB). Oba paradygmaty rozszerzają paradygmat programowania imperatywnego, wprowadzając własne pojęcie modułów. OO nazywa je obiektami (i klasami) i pozwala im hermetyzować razem zarówno dane (pola), jak i procedury (metody). SO natomiast oddziela dane (rekordy, ziarna, ...) od kodu (komponenty, usługi). Jednak tylko OO ma języki programowania, które natywnie obsługują jego paradygmat: Smalltalk, C++, Java i wszystkie inne kompatybilne z JVM, C# i wszystkie inne kompatybilne z .NET, Python itp. SO nie ma takiego natywnego języka. Powstaje tylko na szczycie języków proceduralnych lub języków OO: COM/DCOM (binarny, C, C++), CORBA, EJB, Spring, Guice (cała Java), ... Te frameworki SO wyraźnie cierpią z powodu braku języka natywnego wsparcie ich koncepcji. * Zaczynają używać klas OO do reprezentowania usług i zapisów. Prowadzi to do projektów, w których istnieje wyraźne rozróżnienie między klasami, które mają tylko metody (usługi), a tymi, które mają tylko pola (rekordy). Dziedziczenie między usługami lub rekordami jest następnie symulowane przez dziedziczenie klas. Technicznie rzecz biorąc, nie jest to ściśle przestrzegane, ale generalnie programistom zaleca się, aby klasy odgrywały tylko jedną z dwóch ról. * Używają dodatkowych, zewnętrznych języków do reprezentowania brakujących części: IDL, konfiguracji XML, adnotacji w kodzie Java, a nawet wbudowanego DSL, jak w Guice. Jest to szczególnie potrzebne, ale nie tylko, ponieważ skład usług nie jest częścią samego kodu usługi. W OO obiekty tworzą inne obiekty, więc nie ma potrzeby korzystania z takich udogodnień, ale w przypadku SO jest tak, ponieważ usługi nie tworzą ani nie konfigurują innych usług. * Ustanawiają efekt wewnętrznej platformy nad OO (wczesne EJB, CORBA), gdzie programista musi napisać cały kod potrzebny do „napędu” SO. Klasy reprezentują tylko część natury usługi i wiele klas musi być napisanych, aby razem utworzyć usługę. Cała ta płyta kotłowa jest potrzebna, bo nie ma kompilatora SO, który zrobiłby to za programistę. To tak, jak niektórzy robili to w C for OO, kiedy nie było C++. Po prostu przekazujesz rekord, który przechowuje dane obiektu jako pierwszy parametr do procedury, którą jest metoda. W języku OO ten parametr jest niejawny, a kompilator tworzy cały kod potrzebny do funkcji wirtualnych itp. W przypadku SO wyraźnie tego brakuje. * Zwłaszcza nowsze frameworki intensywnie wykorzystują AOP lub introspekcję, aby dodać brakujące części do języka OO. Nie zapewnia to niezbędnej wyrazistości języka, ale unika kodu platformy kotła opisanego w poprzednim punkcie. * Niektóre platformy wykorzystują generowanie kodu do tworzenia kodu płyty kotła. Źródłem informacji są pliki konfiguracyjne w XML lub adnotacje w kodzie OO. Nie wszystkie zjawiska, o których wspomniałem powyżej, można przypisać SO, ale mam nadzieję, że wyraźnie pokazuje to, że istnieje potrzeba języka SO. Ponieważ ten paradygmat jest tak popularny: dlaczego go nie ma? A może są jakieś akademickie, ale przynajmniej przemysł ich nie używa.


title: Licencjonowanie aplikacji internetowych — oprogramowanie typu open source a oprogramowanie zastrzeżone

text: Zajmuję się tworzeniem aplikacji webowej opartej na autorskim (ale darmowym) API JavaScript. Moja firma rozważa wydanie naszej aplikacji jako „Open Source”, ale nie jesteśmy pewni różnych opcji licencjonowania i sposobu ich działania, biorąc pod uwagę, że korzystamy z zastrzeżonego API innej firmy. Czy ktoś może mi pomóc z następującymi pytaniami? 1. Jeśli nie możemy udostępnić zewnętrznego API jako open source, czy możemy zwolnić kod, który napisaliśmy jako open source? 2. Czy my, jako pierwotni programiści, podlegamy tej samej licencji, na której wydajemy nasz kod? Na przykład, jeśli wydamy nasz kod na licencji „copy-left”, takiej jak GPL, czy ograniczy to nas do budowania na oryginalnej bazie kodu i wydawania go w innym produkcie, który nie jest open source? 3. Jakie jest najlepsze źródło informacji o różnicach między różnymi typami licencji? Spojrzałem na opensource.org, który zawierał listę wszystkich licencji, ale mam problem ze zrozumieniem całej legalności samych licencji.


title: Zarabiaj na bezpłatnej aplikacji w trybie offline?

text: Mam aplikację na Androida, do której dodałem reklamy adMob. Działają jednak tylko wtedy, gdy użytkownik jest online. Teraz problem polega na tym, że aplikacja jest specjalnie stworzona do użytku w trybie offline, więc prawie nikt nigdy jej nie zobaczy. Aplikację można pobrać za darmo, ale nadal chciałbym zarobić na niej kilka centów. Obecnie ma około 300, co myślę, że przyjrzymy się temu około dwa razy w ciągu dnia roboczego. Jakaś pomoc, jak zarobić trochę pieniędzy dzięki tej bezpłatnej aplikacji offline?


title: Czterokrotnie więcej pracy, ile mogę zrobić, co teraz?

text: Pracuję dla firmy zajmującej się tworzeniem stron internetowych i obecnie czeka na mnie 9 projektów w fazie programowania, a terminy szybko mijają, a projekty nie są realizowane na czas. Mamy dwóch projektantów, którzy są niedopracowani i tylko ja jako programista. Mój szef ciągle pracuje, a ja nie wiem, co robić, a oni nie są zadowoleni, że nie dotrzymuję terminów. Jakieś pomysły, które nie wymagają ode mnie pracy w nadgodzinach za darmo?


title: Czym dokładnie jest „forma binarna”?

text: Pytam w kontekście licencji na kod, które widać wszędzie. Zazwyczaj mówią coś w stylu „jeśli wypuszczasz produkt zawierający to w formie binarnej, musi zawierać X, Y i Z”. Czy to oznacza, że jeśli użyję kodu w aplikacji, aplikacja musi mieć gdzieś ekran zawierający X, Y i Z w formie czytelnej dla człowieka?


title: Czy TDD jest opłacalne we wspólnych projektach open source?

text: Powiedzmy, że chciałem rozpocząć projekt open source, który mam nadzieję/oczekuję, że wiele osób będzie przesyłać łatki i tak dalej. Czy możliwe jest przyjęcie ścisłego podejścia do TDD? Czy mogę/powinnam oczekiwać/zaufać współpracownikom, że będą pisać testy jakości za każdym razem, gdy prześlą poprawkę? Jedną z rzeczy, o których myślałem, jest pisanie zestawów testów dla indywidualnych raportów o błędach i próśb o nowe funkcje oraz wymaganie, aby wszystkie łatki/żądania ściągnięcia sprawiały, że testy przeszły pomyślnie, ale w tym momencie wydaje się, że lepiej byłoby po prostu napisać funkcję/naprawę ja. O ile mogę powiedzieć, większość głównych projektów open source, które używają TDD (lub przynajmniej testów pisania) wydaje się być w większości napisana wyłącznie przez osobę lub zespół, gdzie łatwo jest wymusić praktyki takie jak TDD.


title: Wykrywanie wzorców podróży w danych geoprzestrzennych

text: Muszę przeanalizować dane przesłane z urządzeń GPS pojazdu, aby wykryć wzorce podróży, a następnie spróbować poznać normalne wzorce podróży dla tego pojazdu, aby można było przewidzieć prognozy dotyczące konserwacji, tankowania itp. Niektóre pojazdy są domowe (wykazują normalny dom->praca -> wzorce podróży do domu), a niektóre są komercyjne i mają zaplanowane trasy. Załadowałem dane GPS do bazy danych, a następnie skonstruowałem ST_LineString z punktami danych dla każdego pojazdu (około 1k punktów na pojazd dziennie). Pojazdy nigdy nie będą miały identycznych wzorców podróży (dokładność GPS, nieregularne czasy pingów itp.), a wzorce będą widoczne jako podzbiory pingów - na przykład godzina dojazdy między punktem A (dom) a punktem B (praca) między 8 rano a 9:30 każdego ranka od poniedziałku do piątku. Teraz trudna część - rozważam opcje. Muszę to napisać w języku proceduralnym bazy danych, używając zwykłego zestawu narzędzi procedur, kursorów, iteracji itp. Mógłbym użyć Pythona, jeśli jest to pomocne - jestem facetem od baz danych, który próbuje myśleć w sposób poziomy i przestrzenny. Wzorzec podróży można rozpoznać po (i) podobnej sekwencji punktów, które mogą różnić się tolerancją (powiedzmy +/- 300 metrów) (ii) miejscach parkingowych - jeśli samochód jest zaparkowany w tym samym miejscu przez 8 godzin dziennie ( iii) czasowe – pojazd rusza codziennie o godzinie 08:30, +/- 10 minut. Zamierzam napisać procedurę, która sprawdza dla każdego z tych wzorców dla każdego punktu (lub zestawu n punktów), porównując go ze wszystkimi innymi punktami (lub zestawem punktów), wykonując kolejno pingi dla każdego dnia. Najprostszym przypadkiem użycia jest znalezienie powtarzalności pojazdu zaparkowanego w tym samym miejscu każdego dnia. Wykrywanie podobnych wzorców ruchowych jest bardziej złożone. Jaka może być na to technika?


title: Czy jako osoba, która wkrótce ukończy studia, moje umiejętności i/lub kariera ucierpią, jeśli dołączę do startupu, w którym będę (równym) starszym programistą?

text: **tl;dr** : Jestem absolwentem, martwię się, że nie nauczę się dużo i nie poprawię swoich umiejętności, jeśli dołączę do startupu, w którym nie będę miał mentoringu i pomocy starszych programistów. Mam inne oferty. Jestem na ostatnim roku studiów i mam szczęście uczestniczyć w kursie, w którym wszyscy studenci realizują projekt ostatniego roku z rzeczywistymi klientami komercyjnymi. Tak więc od marca 5 moich dobrych znajomych i ja budujemy system dla startupu, który obecnie poszukuje finansowania i planuje wystartować na początku przyszłego roku. Należy zauważyć, że produkt nie jest jeszcze skończony, a bez niego nie ma biznesu. Powiedziano nam już, że zakładając, że dostaną fundusze, których chcą, chcą jak najszybciej zabrać nas wszystkich na pokład, aby kontynuować budowę tego obiektu. Powody są oczywiste: wszyscy znamy zarówno klienta, jak i produkt, i jesteśmy tańsi niż bardziej doświadczeni deweloperzy. **Jeśli zdobędą wystarczająco dużo nas, by się zarejestrować, będziemy jedynymi programistami w to zaangażowanymi.** Więc moje pytanie: **ignorowanie wszystkich typowych problemów związanych z bezpieczeństwem pracy, płacą i tak dalej** , ja' Jestem zaniepokojony kwestią mojej dalszej edukacji i doskonalenia się jako programista. Jestem całkiem pewny swoich umiejętności, a większości tego, co wiem, nauczyłem się sam, a nie uczyłem się w klasie, ponieważ pasjonuję się kodowaniem, ale nie jestem tak głupi, by myśleć, że żaden absolwent nie ma piekło wiele pozostało do nauczenia. Mam już kilka ofert od innych większych firm, w których wiem, że będę pracować pod kierunkiem programistów z dużym doświadczeniem, którzy miejmy nadzieję mogą i będą mnie uczyć i mentorować, i jestem świadomy stagnacji na początku mojej kariery, pracując w firmie, w której jestem tylko ja i inni absolwenci, i **nikt z ponad 10-letnim doświadczeniem, który mógłby mi powiedzieć, kiedy całkowicie się mylę.** Czy to jest problem? Czy mogę nauczyć się tyle samo sam, jeśli naprawdę się temu zajmę?


title: Jakie są korzyści dla zespołu programistów z podjęcia stażu na lato?

text: Mój zespół programistów podchodzi do pomysłu podjęcia letniego stażu lub dwóch. Oczywiste jest, jakie korzyści czerpie stażysta z takiego zaangażowania, ale jakie korzyści odniósłby zespół programistów goszczących stażystę przez kilka miesięcy? Czy ktoś ma wgląd w to z pierwszej ręki?


title: Kiedy używać PHP lub ASP.NET?

text: Pracowałem intensywnie nad tworzeniem aplikacji internetowych z wykorzystaniem PHP i ASP.NET, ale jednym z pytań, które nieustannie zadają mi klienci, jest to, czy przejść do przodu z witryną php, czy z witryną asp.net. Więc naturalnie pierwszą rzeczą, która przychodzi mi do głowy, jest odpowiedź na takie pytanie: > PHP jest open-source, a ASP.NET pochodzi od Microsoftu. Zwykle po tym, jak mówi się coś takiego, klient ma pusty wyraz twarzy. Najwyraźniej fakt, że jeden jest open source, a drugi nie, tak naprawdę ich nie przeraża. I nie bez powodu, bo kiedy pierwszy raz to usłyszałem, tak naprawdę niewiele mi to mówi. Z pracy z obydwoma wiem, że każdy ma swoje różnice, jeśli chodzi o tworzenie stron internetowych. Moje pytanie brzmi, jakie są różnice między ASP.NET i PHP w zakresie 1. Funkcje 2. Bezpieczeństwo 3. Rozszerzalność 4. Frameworki 5. Średni czas rozwoju Staram się skompilować listę faktów, aby móc porównać z klientem, że można dokonać świadomego wyboru na odpowiedniej platformie programistycznej.


title: Tworzenie oprogramowania z numerami wersji

text: To nie jest pytanie, jak numerować wersje. Mamy aplikację z określonym schematem numeracji wersji. Posiadamy również serwer Jenkins CI (wkrótce zastąpiony przez Bamboo Atlassian), który regularnie buduje nasze oprogramowanie. Aplikacja wyświetla numer wersji, więc jest on zapisany w jednym z plików w naszej bazie kodu. Nie chcemy ręcznie zmieniać numeru wersji przed wydaniem wersji. Nasze obecne rozwiązanie polega na tym, że mamy zadanie Jenkinsa, które zmienia numer wersji w naszej bazie kodu, zatwierdza go, oznacza repozytorium numerem wersji, wysyła go, a następnie pakuje aplikację do dystrybucji. Problem polega na tym, że musimy zdecydować się na wydanie wersji, zanim kompilacja się powiedzie lub nie powiedzie. To, co chcemy zrobić, to: aby Jenkins regularnie budował nasz produkt i przeprowadzał testy jednostkowe. Następnie chcemy wybrać przechodzącą kompilację i wydać ją z określonym numerem wersji. Podsumowując, jest to proces, którego chcę: * Jenkins regularnie buduje i testuje nasz produkt. * Kiedy chcemy wydać wersję, możemy wybrać ostatnią kompilację z Jenkins i sprawdzić, czy ją opublikować. * Otrzymane wydanie powinno zawierać numer wersji. * Zbudowany i wydany commit powinien być oznaczony numerem wydania. Jaka jest najlepsza praktyka w zakresie wydawania wersji produktów? Czy istnieje proces, który spełni moje wymagania?


title: Zatwierdzenie Git nie zostało ukończone, ale nie można kontynuować na tym komputerze

text: Zastanawiałem się więc, w jaki typowy sposób ludzie radzą sobie z pracą nad projektem za pomocą git i dochodzą do punktu, w którym praca, którą wykonałeś, nie jest zadeklarowana i nie ma formy, która powinna być zadeklarowana, ale nie będziesz w stanie pracować na nim już w tej lokalizacji? Czy najlepszym rozwiązaniem jest przeniesienie plików drzewa roboczego do nowej lokalizacji i kontynuowanie pracy, a następnie zatwierdzenie i wyczyszczenie drzewa roboczego oraz pobranie zmian, czy jest jakieś narzędzie git, o którym nie wiem, a które pozwoliłoby mi na zrobić coś w rodzaju miękkiego zatwierdzenia lub czegoś, w którym nie musiałem zmieniać historii, gdy zatwierdzenie jest gotowe.


title: Aplikacja serwera klienckiego na komputery stacjonarne, ograniczająca kompromis pola tekstowego z klientami

text: Mamy pole tekstowe w aplikacji serwera klienckiego na komputer stacjonarny, które ostatecznie przechowuje wszystkie dane na serwerze bazy danych, ten obszar tekstowy służy do robienia notatek, a podobne obszary tekstowe zostały umieszczone w naszej aplikacji jako wybór marketingowy, aby użytkownicy mogli nigdy nie obwiniaj aplikacji o brak niektórych pól, a dział marketingu zawsze może odpowiedzieć „wpisz to w polu notatek”. Ostatnio jednak zdaliśmy sobie sprawę, że niektórzy klienci intensywnie używają obszaru notatek do pisania listów lub kopiowania i wklejania dokumentów, więc musieliśmy zwiększyć pole notatek w bazie danych z 1024 do 10240, jednak zdajemy sobie sprawę, że w ten sposób aplikacja desktopowa zawsze zajmuje więcej czasu pobierz całą tę zaległość informacji. Jaki jest kompromis między praktycznie zerowym limitem długości danych wprowadzanych przez użytkownika a pozwoleniem użytkownikom na korzystanie z niego tak, jak uznają to za konieczne, a nałożeniem ścisłego limitu uzasadniającego wybór jako „wymagana wydajność”?


title: Organizacja rozwiązania/struktury projektu i klas dla Aplikacji Linii Biznesu (LOB)

text: Pytanie jak-organizujesz-swoje-projekty ma już kilka dobrych odpowiedzi. Chciałbym lepiej zrozumieć tę sugerowaną strukturę: MyApp.Core MyApp.Model MyApp.Presenter MyApp.Persistence MyApp.UI MyApp.Validation MyApp.Report MyApp.Web Zakładając, że `MyApp` jest bogatym klientem winforms do administrowania studentami, kursy, sale i nauczyciele Powiedzmy, że mam kontrolę użytkownika winforms, aby edytować informacje o kursie (nazwę kursu, kto go prowadzi, w której sali i którzy studenci zarejestrowali się na kurs). Poniższa klasa odzwierciedla wszystkie informacje potrzebne do kontroli użytkownika public class CourseDetails { public int Id { get; set;} kurs publiczny Kurs{ get; set;} public Nauczyciel Nauczyciel{get; set;} public Room Room {get; set;} public List<Student> StudentList{get; set;} } Gdzie umieściłbyś tę klasę? ### Metody MyApp.Model Chciałbym wiedzieć, jak skomplikowane lub proste powinny być klasy w przestrzeni nazw `MyApp.Model`. Czy projekt `MyApp.Model` powinien zawierać tylko bardzo proste klasy, takie jak public class Course{ public int CourseId{ get; set;} ciąg publiczny CourseName{ get; set;} public int CategoryId {get; private set;} } public class Teacher{ public int TeacherId{ get; set;} ciąg publiczny NazwaNauczyciela{ get; set;} } czy też `MyApp.Model` powinien zawierać także * klasy złożone, takie jak `CourseDetails` * dodatkowe metody dla każdej klasy, takie jak `Save()` lub `GetById()`` ? ### Dodatkowe tematy Gdzie (w jakim projekcie) powinny być zaimplementowane interfejsy i gdzie powinna być użyta klasa bazowa. Kiedy te dodatkowe metody (`Save()`, `GetById()`) powinny być dziedziczone z klasy bazowej lub zawarte w klasie, która implikuje interfejs, który posiada wszystkie metody zapisywania i wybierania. public class CourseDetails: ModelBase{ ... } public class ModelBase{ public bool Save() { Console.WriteLine("zrób coś sprytnego, aby zapisać każdą jednostkę"); zwróć prawdę; } } Przepraszam, że nie jestem bardziej przejrzysty; Chciałbym zrozumieć, jakie rzeczy (klasy, interfejsy, zasoby itp.) należy umieścić w jakim projekcie i dlaczego. Mam nadzieję, że wpadłeś na pomysł.


title: jak przetworzyć zmianę stanu dokumentu?

text: Wyobraź sobie, że istnieje _aplikacja_ (`ASP.NET MVC`), która przetwarza niektóre dokumenty. `Dokument` musi być kilkakrotnie sprawdzany przez _różną grupę użytkowników_. reguły stanu/roli: * **Prosty użytkownik** może tylko **publikować** dokument; (priorytet: **niski** ) * **userGroup1** może przełączyć go w **następny stan** lub **odrzucić**; (priorytet: **wyższy** ) * **userGroup2** może **potwierdzić** poprzedni stan i przełączyć go na **następny stopniowy** stan lub **odrzucić**; (priorytet: **highest** ) 1. Jak zaimplementować taki workflow w `ASP.NET MVC`? Jak zaimplementować `UI`, `views`, aby grupa o niższym priorytecie mogła zarówno wizualnie jak i technicznie wykonywać tylko `dozwolone przejścia`? Czy mogę jakoś rozszerzyć ten system: link? 2. Czy potrzebuję do tego dodatków, takich jak autobus serwisowy, zaopatrzenie w wydarzenia? ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/WoeKR.png)


title: Użyć częściowej w częściowej?

text: Jestem nowicjuszem w Railsach, więc wytrzymaj ze mną. Mam kilka miejsc, kilka stron, niektóre części, które używają: <%= link_to "delete", post, metoda: :delete, data: { Confirm: "Jesteś pewien?" }, title: post.content %> Czy byłoby sensowne traktowanie tego podszablonu, ponieważ jest on używany wielokrotnie, czasami także w innych podszablonach? Czy to jest w porządku. umieścić podszablony w podszablonach?


title: Czy Python byłby zbyt wolny do użycia po stronie klienta w przeglądarkach?

text: Słyszałem stwierdzenie, że Python byłby zbyt wolny, aby mógł być używany w przeglądarkach. Uważam, że Javascript jest lepszy pod tym względem tylko ze względu na firmy takie jak Google, które potrzebują go szybko (i zrobiły to szybko), ponieważ potrzebują go do przetrwania, ale mogę się mylić. Czy są jakieś różnice w sposobie projektowania Pythona i JavaScriptu, które mają wpływ na to, jak będą działać w przeglądarkach? Ponieważ na razie nie ma implementacji Pythona po stronie klienta, moje pytanie pochodzi z wypowiedzi, którą ktoś zrobił, więc może ma to coś wspólnego z samymi językami (chociaż w to nie wierzę).


title: Wzorce i praktyki programowania w Pythonie?

text: Jakie są najlepsze wzorce i praktyki programowania w Pythonie, których używasz na co dzień? Nie mam na myśli tylko wzorców projektowych (jest wiele wzorców projektowych OO, które można wykorzystać w pythonie), mam na myśli czyste wzorce kodowania i praktyki takie jak: * najlepszy sposób na organizowanie modułów * najlepszy sposób na parsowanie danych (pod względem wydajności ) * korzystanie z funkcji prywatnych (czy to ma sens, ponieważ dostęp do funkcji prywatnych można uzyskać poza klasą) * jakie są najlepsze moduły do GUI, bazy danych itp. Czy są jakieś nowe książki lub inna literatura na ten temat (2010/ 2011)? Oczywiście na pytanie nie można odpowiedzieć w jednej odpowiedzi ani w jednej książce, pomyślałem o tym pytaniu jak o dyskusji na ten temat, ponieważ tak naprawdę niewiele napisano o wzorcach programowania w Pythonie i jest to bardzo potężny język.


title: Jak pracodawcy mierzą „silną lub solidną znajomość języka programowania”?

text: Wczoraj dostałem świetną okazję do pracy. W sekcji wymagań widziałem słowa: * solidna znajomość Pythona; * solidna znajomość języka Java; * dobre zaplecze techniczne; Czy możesz mi odpowiedzieć, co to znaczy? Jak sprawdzić swoją aktualną wiedzę? Jaki rodzaj środka zostanie faktycznie zaakceptowany przez pracodawcę?


title: Czy można wywoływać debugowanie wyzwalane przez wyjątek „debugowanie pośmiertne”?

text: Słyszałem termin „debugowanie pośmiertne”, a Wikipedia mówi, że debugowanie zostało wykonane po awarii programu. Często debuguję aplikacje Pythona za pomocą debugera, który zatrzymuje wykonywanie po zgłoszeniu wystarczająco ważnego wyjątku. Następnie mogę użyć sondy debugowania do zbadania. Czy liczy się to jako „debugowanie pośmiertne”? Ponieważ program tak naprawdę się nie zawiesza. **EDYTUJ:** Jeśli odpowiedź brzmi „nie”, to jakiej nazwy byś użył dla opisanego przeze mnie rodzaju debugowania?


title: Co odstrasza programistów od korzystania z automatycznych narzędzi do refaktoryzacji?

text: Dyskutowałem z kolegami na temat używania automatycznych narzędzi do refaktoryzacji w IDE (Eclipse, NetBeans, IntelliJ, Xcode, Visual Studio, itp.) i _zaskoczyło mnie_, że wielu z nich czuje się niekomfortowo podczas korzystania z takich narzędzi. Jeden z nich jest doświadczonym programistą (Smalltalk, C/C++, Java, Javascript) od 20 lat i rzadko używa IDE, a _nawet_ kiedy to robi, nie korzysta z automatycznych narzędzi do refaktoryzacji. Wykonuje wiele refaktoryzacji, ale **wszystkie** wykonuje je ręcznie. Osobiście bardzo polegam na narzędziach do refaktoryzacji. Za każdym razem, gdy pracuję nad projektem, staram się wybrać IDE, które obsługuje automatyczne refaktoryzacje i korzystam z tych refaktoryzacji, gdy tylko jest to możliwe. Chciałbym dowiedzieć się, czy profesjonalni programiści tutaj w Stack Exchange używają automatycznych narzędzi do refaktoryzacji. A jeśli nie, dlaczego nie? Na początek, oto kilka powodów, dla których moi koledzy nie używają automatycznych narzędzi do refaktoryzacji: 1. _Zaufaj_ \- Czasami nie ufają temu, co robi narzędzie, zwłaszcza jeśli jest to złożona refaktoryzacja, taka jak Pull-Up, która może wpływać na wiele plików; obawiają się, że narzędzie może wprowadzić subtelne błędy. 2. _Odkrywalność_ \- Czasami nawet nie zdają sobie sprawy, że taka refaktoryzacja jest dostępna w IDE, bo nie jest to od razu oczywiste 3. _Elastyczność_ \- Czasami narzędzie jest zbyt sztywne i zawsze czują, że muszą je za dużo konfigurować aby działało tak, jak chcą. **Aktualizacja - podsumowanie** Na podstawie dotychczasowych odpowiedzi myślę, że mogę podsumować trzy rzeczy: 1. Deweloperzy nie mają czasu na wypróbowanie wszystkich dostępnych refaktoryzacji. A ponieważ nie mogą ich wypróbować, są podejrzliwi co do tego, co zrobią z kodem (wszystkie najgorsze przypadki). To podejrzenie jest uzasadnione w przypadku kodu produkcyjnego pod presją czasu (nawet jeśli masz testy do sprawdzenia). Być może lepsze narzędzia interfejsu użytkownika mogą to złagodzić. 2. Deweloperzy byli również sfrustrowani ograniczeniami narzędzi refaktoryzacji, zwłaszcza gdy używają metaprogramowania/odbicia lub posiadają zewnętrzne pliki (xml, konfiguracja, właściwości). Zautomatyzowane narzędzia do refaktoryzacji wciąż się poprawiają, ale zawsze będą ograniczenia. Czasami ograniczenia są akceptowalne, a innym razem nie. Rozmawiałem z kilkoma innymi kolegami i niektórzy z nich są bardziej tolerancyjni wobec ograniczeń. Na przykład, jeśli refaktoryzacja rename nie zmienia nazw wszystkich plików, ale dobrze radzi sobie ze zmianą 90% z nich, nadal chętnie korzystają z narzędzia i naprawiają pozostałe 10% ręcznie, ponieważ nadal _oszczędza_ czas i wysiłek. 3. [Moim zdaniem z tego, co zebrałem], programiści uważają, że narzędzia do refaktoryzacji są funkcjami _miło mieć_, więc jeśli nie działa za pierwszym razem (lub robi coś nie do przyjęcia), wydają się być bardziej skłonni do rezygnacji je i wprowadzaj zmiany ręcznie. Porównaj to z innymi narzędziami, takimi jak kompilatory/debuggery, które również mają ograniczenia i błędy. Deweloperzy prawdopodobnie będą się ich trzymać pomimo ograniczeń, ponieważ są to _niezbędne_ funkcje, których nie można po prostu porzucić w swoim przepływie pracy. Dzięki za wszystkie odpowiedzi. Jeśli ten temat zainteresuje więcej osób, sugeruję przekształcenie go w Wiki społeczności. Interesujące byłoby dowiedzieć się, czy wielkość projektu, dostępność testów, dojrzałość IDE wpływają na decyzję ludzi o zastosowaniu automatycznych narzędzi do refaktoryzacji.


title: Dlaczego bazy danych SQL są nadal używane z ORM?

text: ORM i niewiedza o trwałości mają sens: jeśli programuję w języku, chcę używać natywnej implementacji obiektów i struktur danych tego języka do sterowania moim programem. Nie powinienem się martwić o SQL lub bazę danych i zawsze uważałem, że wbudowane ciągi SQL w programie są bardzo kłopotliwe. Dlaczego SQL jest nadal używany jako backend? Dlaczego ORM po prostu nie utrwala obiektów w XML lub pliku binarnym i unika wszystkich kosztów ogólnych i trudności związanych z administrowaniem serwerem bazy danych?


title: Jak wybrać zwinną metodologię?

text: Pracuję w małej firmie około 10 programistów, pracujemy w sposób zwinny, ale bez wiedzy i bez formalizmu. Myślę, że świadomość tego, czym są metody zwinne, na co nas stać, może sprawić, że nasze produkty będą bardziej produktywne. Istnieje jednak wiele zwinnych metod, które mogą być najprostsze do „nauczenia”? * Szybkie tworzenie aplikacji * Metoda tworzenia dynamicznych systemów * Scrum * Programowanie oparte na funkcjach * Programowanie ekstremalne * Adaptacyjne tworzenie oprogramowania * Programowanie sterowane testami * Krystalicznie czysty


title: Duży stół z integralnością referencyjną czy typizacją pól?

text: Używam ORM (Propel) i PHP do tworzenia obiektów i przechowywania ich w bazie danych. Tak więc mam do czynienia z powracającym problemem i jestem prawie pewien, że zdarzyło się to komuś wcześniej. Mój model danych wygląda mniej więcej tak: ![Sytuacja wzorca strategii](http://i.stack.imgur.com/UsMIc.jpg) Zatem klasa A potrzebuje odniesienia do czegoś z hierarchii `Clase Parent` (klasa abstrakcyjna ), to nie jest problem. Ideą tych rozwiązań jest to, że w przyszłości bardzo łatwo będzie tworzyć nowe strategie. Ale pamiętasz, że powiedziałem, że używam ORM do przechowywania informacji w bazie danych? Cóż, baza danych zawiera 3 tabele: `A_table`, `B_table` i `C_table`. Oto sytuacja: „Tabela_A” musi być powiązana ze strategią. Jaka jest najlepsza droga? 1. Utwórz tabelę referencyjną typu strategii, skojarz typ z A_table i miej relację_id, która jest tylko liczbą całkowitą z wartością (bez jakiejkolwiek integralności referencyjnej) 2. Utwórz jedno pole na strategię w A_table i pozwól, aby były puste Naprawdę czekam na opinie i dlaczego najlepiej jedno lub drugie.


title: Masz jakieś pomysły na łamigłówki i rekrutację z Coderloop?

text: Czy ktoś ma jakieś doświadczenie z Coderloopem? Ma to być społeczność programistów rozwiązujących łamigłówki programistyczne, którzy wykorzystują te informacje, aby pomóc firmom w rekrutacji. Czy ktoś został za ich pośrednictwem zatrudniony?


title: Jakie są różnice między Castle Monorail 3 przez ASP.Net MVC?

text: Używam Castle Monorail od kilku lat z wielkim sukcesem, chociaż nie zadałem sobie trudu, aby zaktualizować wersję, której używam (2 lub 3 lata). Teraz podejmuję decyzję o przejściu na ASP.Net MVC 3 lub aktualizacji do najnowszej wersji Castle. Szukałem dokumentacji na temat najnowszej wersji projektów Castle (zwłaszcza Monorail), ale jest naprawdę niewiele lub nie ma żadnych informacji (mogę się mylić). Czy ktoś wie jakie są różnice między Castle Monorail w wersji 3 a ASP.Net MVC3? Dziękuję!


title: Style komentowania/dokumentacji w kodzie

text: To może być głupie pytanie, ale od jakiegoś czasu tkwi w mojej głowie i nigdzie indziej nie mogę znaleźć przyzwoitej odpowiedzi. Mam nauczyciela, który mówi, że powinniśmy wyraźnie podać opis każdego parametru, nawet jeśli jest tylko jeden. Prowadzi to do wielu powtórzeń: double MyFunction(const int MyParam); // Funkcja: MyFunction // Podsumowanie: Działa z MyParam. // Input: int MyParam - Numer do zrobienia. // Wyjście: MyParam z wykonanymi na nim rzeczami. Jak bardzo jesteś szczegółowy podczas pisania dokumentacji w kodzie?


title: Jakie praktyki zarządzania/rozwoju zmieniacie, gdy zespół składający się z 1-3 programistów powiększa się do 10+?

text: Mój zespół kilka lat temu zbudował stronę internetową dla klienta. Liczba użytkowników witryny rośnie bardzo szybko, a nasz klient prosi nas o powiększenie naszego zespołu, aby zaspokoić ich potrzeby związane z utrzymaniem i żądaniami funkcji. Zaczęliśmy od niewielkiej liczby programistów, a nasz zespół się powiększył - teraz jesteśmy w dwucyfrowej liczbie. Jakie zmiany w zarządzaniu/rozwoju są najbardziej korzystne, gdy zespół rozrasta się z małego zespołu „garażowego” do ponad 10 programistów?


title: Czy podejmuję właściwą decyzję, aby wziąć udział w kursie Technologia/system informatyczny na studiach?

text: Jestem uczennicą, która właśnie skończyła liceum w zeszłym roku. W okresie od marca do sierpnia wejdę do college'u. I... Myślę o studiowaniu Informatyki/Systemu jako moim kursie na studiach. Problem w tym, że nie jestem pewien, czy jest to dla mnie właściwa droga. Nie wiem, czy tego naprawdę chcę w przyszłości! Tak, uwielbiam uczyć się więcej o komputerach (wolę oprogramowanie od sprzętu). Ale co, jeśli później nie uznam ich za interesujące? Martwię się o to, bo nie chcę później żałować. Do tego moja wiedza na temat programowania i tworzenia innego oprogramowania jest w rzeczywistości dość niska. Czy ktoś może mi doradzić, co mam zrobić? Albo opowiedz mi więcej o Informatyce (co będę studiował później na studiach i ścieżce kariery)?


title: Komunikacja między automatami stanowymi z ukrytymi przejściami

text: Pytanie pojawiło się dla mnie w programowaniu wbudowanym, ale myślę, że można je zastosować do wielu ogólnych sytuacji sieciowych, np. gdy partner komunikacyjny zawiedzie. Załóżmy, że mamy logikę aplikacji (program) działającą na komputerze i gadżet podłączony do tego komputera poprzez np. interfejs szeregowy, taki jak RS232. Gadżet ma czerwoną/zieloną/niebieską diodę LED oraz przycisk wyłączający diodę LED. Kolor diod LED może być sterowany przez polecenia programowe przez interfejs szeregowy, a stan (czerwony/zielony/niebieski/wyłączony) jest odczytywany z powrotem i powoduje reakcję w logice aplikacji. Tolerowane jest asynchroniczne zachowanie logiki aplikacji w odniesieniu do koloru diody aż do pewnego opóźnienia (w zależności od cyklu wykonania aplikacji). To, co zasadniczo mamy, to zasób (LED), który nie może być zarezerwowany i obsłużony atomowo przez oprogramowanie, ponieważ (organiczny) użytkownik może w dowolnym momencie nacisnąć przycisk, aby ingerować/przerwać próbę oprogramowania, aby zmienić kolor diody LED. Usuwając ten przykład z jego fizycznego wyposażenia, śmiem twierdzić, że mamy dwie komunikujące się maszyny stanów A (logika aplikacji) i G (gadżet), gdzie G wykonuje zmiany stanu bez wiedzy A (i na odwrót, ale nie ma to znaczenia w naszym przykładzie) i tylko A można zmodyfikować za rozsądną cenę. A musi zobaczyć reakcję i stan G w jednej informacji, która może być (nieco) nieaktualna, ale nie niespójna w odniesieniu do krótkiego okna czasowego, w którym ta informacja została wygenerowana po stronie G. To, czego szukam, to zwięzła metoda radzenia sobie z taką sytuacją w oprogramowaniu wbudowanym (tj. brak dostępnej warstwy/struktury, takiej jak CORBA itp.). Technika programowania, która jest w stanie odwzorować pełne zachowanie obu uczestników na klasycznych interfejsach klasycznego języka programowania (w tym przypadku C). Aby skomplikować sprawy (a raczej uogólnić), prosty cykl komunikacji wysokiej częstotliwości z A do G i z powrotem (IOW: A szybko odpytuje G) jest nieostry z powodu ograniczeń technicznych (opóźnienie komunikacji szeregowej, A nie zawsze aktywne itp.). To co obecnie widzę jako ogólne rozwiązanie to: * logika aplikacji A jako jeden wątek wykonania * obiekt adaptera (proxy) PG (prezentujący G wewnątrz komputera) wraz ze sterownikiem szeregowym jako kolejny wątek * obiekt komunikacyjny pomiędzy dwa (A i PG), które są transakcyjnie bezpieczne do wymiany Dwa konteksty wykonania (wątki) na komputerze mogą być wielordzeniowe lub po prostu sterowane przerwaniami lub zadaniami w RTOS. Obiekt com zawiera następujące dane: * podejrzany stan (napisany przez A): faktycznie członek zestawu potęgowego stanów w G (w naszym przypadku: czerwony, zielony, niebieski, wyłączony, czerwony_lub_zielony, czerwony_lub_niebieski, czerwony_lub_wyłączony...itd. .) * dane komendy (zapisane przez A): test_if_off, switch_to_red, switch_to_green, switch_to_blue * status operacji (zapisany przez PG): operation_pending, success, wrong_state, link_break * nowy stan (zapisany przez PG): czerwony, zielony, niebieski, wyłączony Idea obiektu com polega na tym, że A zapisuje dowolny stan (zestaw), w jakim według niego znajduje się G, wraz z poleceniem. (Przykład: podejrzany stan="red_or_green", polecenie: "switch_to_blue") Zwróć uwagę, że polecenia wydane przez A nie zadziałają, jeśli użytkownik wyłączył diodę LED i A musi o tym wiedzieć. PG odbierze taki obiekt com i spróbuje wysłać polecenie do G, odbierze jego odpowiedź (lub przekroczy limit czasu) i odpowiednio ustawi status operacji i nowy stan. A odbierze obiekt, gdy nie będzie już w operacji_w toku i może zareagować na wynik. Obiekt com można oczywiście rozdzielić (na dwa obiekty, po jednym dla każdego kierunku), ale myślę, że w prawie wszystkich przypadkach wygodnie jest mieć polecenie blisko wyniku. Chciałabym, żeby wytknęły mi poważne wady lub usłyszałam zupełnie inne spojrzenie na taką sytuację.


title: jaki jest termin określający klasę na dole hierarchii klas?

text: Masz hierarchię klas: D rozszerza C, która rozszerza B, która rozszerza A, na przykład. A byłaby najwyższą klasą, ale co powiesz na D? Poszukuję krótkiego i zwięzłego sposobu na opisanie pozycji D w hierarchii Czy jest to najbardziej konkretna klasa? najgłębsza klasa w hierarchii? ostatnia podklasa? ostatnia klasa? Klasa może, ale nie musi być ostateczna (java) lub zapieczętowana (c#). ważne jest to, że w danym momencie jest to ostatnia osoba w hierarchii. Jeśli pojawi się nowsza klasa (E), która rozszerza D, to proponowany termin będzie miał do niej zastosowanie. Ponadto może istnieć więcej niż jedna klasa pasująca do tego opisu (zarówno D, jak i E rozszerza C), termin powinien dotyczyć obu klas.


title: Czy statycznie wpisana alternatywa dla JavaScript na stronach internetowych byłaby praktyczna?

text: Preferencje dynamicznego i statycznego pisania są w dużej mierze kwestią gustu i różni ludzie uważają je mniej lub bardziej za odpowiednie w różnych sytuacjach. Moje pytanie brzmi, czy byłoby technicznie możliwe posiadanie statycznie wpisanej alternatywy dla JavaScriptu do powiększania strony internetowej po stronie klienta itp.?


title: Usługa Drop in do zarządzania kontem, uwierzytelniania, tożsamości?

text: Tworzę aplikację na Androida i powiązany zestaw usług internetowych do przesyłania/pobierania danych. Potrzebuję podstawowego (bez dodatków) rozwiązania do zarządzania kontem (rejestracja, logowanie, wylogowanie, weryfikacja poświadczeń/token). Jakie rozwiązania open source / strony trzecie istnieją dla tego scenariusza? Potrzebuję: * utworzyć nową bazę danych konta w oparciu o sól * prosty serwis internetowy do utworzenia nowego konta * prosty serwis internetowy do uwierzytelnienia dostarczonych danych uwierzytelniających i zwrócenia jakiegoś tokena To wszystko, dam sobie radę bez "wymyślnej" aktywacji e-mail lub na razie zresetować hasło. A potem, wychodząc poza proste zarządzanie kontami, będę potrzebował pewnego rodzaju uwierzytelniania opartego na „tokenach” dla usługi sieciowej. Czy są do tego gotowe komponenty? Czy powinienem po prostu użyć „pustej” aplikacji django lub rails, aby to zrobić? Wydaje się szalone, że wszyscy robią CREATE TABLE user_accounts ... Myśli? Dziękuję Ci.


title: Dlaczego Go ma specjalny futerał na abs(0)

text: Bawiłem się Go i znalazłem ten szczególnie interesujący kod dla funkcji abs w pakiecie math: http://golang.org/src/pkg/math/abs.go 14 func abs(x float64) float64 { 15 switch { 16 case x < 0: 17 return -x 18 case x == 0: 19 return 0 // zwróć poprawnie abs(-0) 20 } 21 return x 22 } Dlaczego musimy mieć szczególny przypadek x == 0? Co się stanie, jeśli usunę wiersz 18 i 19?


title: Planowanie testów dla sprintu Agile

text: Czy ktoś może zaoferować jakieś wskazówki lub doświadczenie dotyczące opracowania planu testów dla sprintu Agile? Przez większość czasu nasz zespół po prostu tworzy zadanie „Test Feature X” i zajmuje się pisaniem przypadków testowych ad hoc. Zazwyczaj nie ma zbyt wiele strategicznego przewidywania, w jaki sposób będą testowane funkcje i jak będziemy komunikować oczekiwania i wyniki reszcie zespołu programistów i naszym użytkownikom. Czy często zdarza się, że po prostu pisze się zadania testowe wysokiego poziomu, nie czyniąc rzeczywistych przypadków testowych przejrzystymi dla zespołu programistów? Jakich metodologii użyłeś podczas tworzenia planu testów i jak wygląda on zarówno na początku, jak i na końcu sprintu? Wszelkie porady lub wskazówki dotyczące skutecznego i przejrzystego planu testów oraz sposobów jego opracowania byłyby mile widziane.


title: Jak sprawdzić nieudokumentowane metody oferowane przez Apple?

text: Następujące narzędzia są dostarczane przez Apple * dlopen * dlsym * objc_getClass * sel_registerName * objc_msgSend Są to selektory Objective-C lub łańcuchy. Selektory Objective-C są przechowywane w specjalnym regionie pliku binarnego, dlatego Apple może wyodrębnić stamtąd zawartość i sprawdzić, czy użyłeś jakichś nieudokumentowanych metod Objective-C. * Jak wykorzystać te narzędzia, aby znaleźć nieudokumentowane metody Objective-C? **EDYTUJ:** Ostatnio jedna z moich aplikacji została odrzucona z powodu użycia jednej nieudokumentowanej metody. > -[UDevice setOrientation] Ponieważ selektory są niezależne od klasy, którą wysyłasz, nawet jeśli moja niestandardowa klasa definiuje `-setOrientation`: nieistotne dla UIDevice, istnieje możliwość odrzucenia.


title: Wstrzykiwanie zależności i kontenery IOC w zamkniętym projekcie

text: Czy ma sens asemblowanie mojego projektu z kontenerami iniekcji zależności, jeśli jestem jedynym, który będzie używał kodu tego projektu? Pytanie pojawiło się, gdy przeczytałem ten artykuł IOC http://martinfowler.com/articles/injection.html Uzasadnieniem użycia wstrzykiwania zależności w tym artykule jest to, że znajomi mogą **ponownie używać** klasy i zastąpić klasy zależne swoimi własne klasy, ponieważ są one wstrzykiwane i nie są tworzone w klasie. Używałbym go tylko do wstrzykiwania obiektów tam, gdzie są potrzebne, zamiast przekazywać je przez warstwy do celu. (Co nie jest takie złe, czego się tutaj nauczyłem: czy to zła praktyka, aby przekazywać instancje przez kilka warstw?) (Może ponownie wykorzystam części projektu, kto wie, ale nie wiem, czy to dobre uzasadnienie)


title: Jak uruchomić dowolne cronjobs za pomocą Objective-C na platformie iOS?

text: Czy istnieje sposób na uruchamianie programów planujących / harmonogramów, na przykład Cron Jobs przy użyciu Objective-C na platformie iOS? Muszę utworzyć aktualizację harmonogramu dla mojego ios, powiedzmy na przykład co pięć dni moja aplikacja będzie pobierać coś do Internetu i aktualizować bazę danych. Chcę, aby użytkownik ustawił interwał. Myślę, że w tym celu zadania cronów mogą być istotną częścią. Czy są jakieś sugestie lub inne sposoby?


title: Ile czasu zajmie mi planowanie sprintów itp.?

text: Jestem starszym programistą/architektem, który bardzo dobrze zna domenę biznesową. Mój nowy menedżer chce, abym zarządzał zespołem (jeszcze rekrutował około 5 osób), a w przeszłości pracowałem w zwinnym środowisku, ale jako programista. Byłem więc zaangażowany w pisanie historyjek użytkowników, pracę z interesariuszami, szacowanie za pomocą punktów fabularnych i całą pracę programistyczną związaną z dotarciem do końca sprintu/projektu. Chciałbym dalej pracować jako programista i spędzać większość czasu na dogłębnym pisaniu kodu, ale mój menedżer uważa, że tylko 10% mojego czasu będzie zaangażowane w stronę zarządzania (tj. tworzenie logów produktów, szacowanie zwinne itp.). Nigdy nie pracował nad projektem zwinnym. Wciąż czytam o wszystkim, co wiąże się z zarządzaniem zwinnym projektem, więc trudno mi powiedzieć, ile mojego czasu będzie to zaangażowane. Moje pytanie brzmi, ile czasu spędzę na pracy po stronie zarządzania projektem zwinnym? To jest coś, co chciałbym zrobić, ale nie jestem pewien, czy chcę to zrobić, jeśli cały czas spędzam po stronie zarządzania.


title: Czy Twój program CS dobrze Cię przygotował?

text: Dla tych z was, którzy otrzymali licencjat z informatyki, czy uważacie, że wasza szkoła dobrze przygotowała was do codziennej pracy programisty? Często czułem, że moja szkoła naprawdę dobrze przygotowała mnie do studiów magisterskich, ale odbywało się to kosztem uczenia się podstawowych pojęć roboczych, takich jak ogólna struktura sklepów z oprogramowaniem i to, czego zwykle oczekuje się od profesjonalnego programisty. Byłoby też miło dowiedzieć się więcej o najnowszych trendach w tworzeniu oprogramowania, abym mógł wiedzieć, na jakie umiejętności w jakich branżach jest największe zapotrzebowanie. Nie lekceważę wartości bardziej teoretycznych zajęć, które uczęszczałem, i widzę, jakie korzyści mi przyniosły. Jednak myślę, że każdy program CS, który jeszcze tego nie robi, powinien oferować półsemestralne zajęcia z tego obszaru. Może mieć na celu uzyskanie praktycznych i aktualnych informacji o tym, czego należy oczekiwać od rzeczywistej branży oprogramowania. **AKTUALIZACJA** : Jeśli nie zgadzasz się ze mną i uważasz, że Twoja szkoła przygotowała Cię na doświadczenia w świecie rzeczywistym, powiedz to. Jak myślisz, jakiego rodzaju zajęcia ci pomogły? Jak powiedziałem w komentarzach poniżej, nie sugeruję, że pierwszym obowiązkiem uczelni jest przygotowanie cię do świata pracy. Myślę jednak, że może istnieć kompromis między ich celami, aby uczniowie przyjęli nowe idee, a pomaganiem im w przygotowaniu do życia po ukończeniu studiów.


title: Auto — zwiększanie identyfikatora w obiekcie domeny

text: Dużo czytam o id auto-incremental (guid, interlocked.increment, ObjectIdGenerator...), ale nie znajduję niczego dla mojej sytuacji. W moim modelu domeny użytkownik prosi o automatyczny progresywny numeryczny identyfikator dla każdego utworzonego przez siebie działania. Ponieważ jest to żądanie użytkownika, chcę umieścić go w moim modelu domeny, ale tryb, który zwykle robię w starszej aplikacji bez dobrej architektury ) to dostęp do bazy danych, pobierz max i dodaj 1; więc nie mogę tego zrobić w moim obiekcie, ponieważ warstwa domeny nie może być świadoma db. Nie lubię tożsamości bazy danych z powodu braku kontroli (czasami administrator bazy danych musi zmienić identyfikator dla błędu użytkownika przy tworzeniu aktywności). interlocked.increment wygląda dobrze, ale moja aplikacja jest zainstalowana na każdym komputerze użytkownika, więc nie mogę jej używać Ponieważ musi być zrozumiała i progresywna Nie mogę używać guid -Projekt: zdefiniuj interfejs GenerateActivityId w warstwie domeny jako usługę domeny, ale nie znajduję sposobu na zrobienie dobrej jego implementacji. Jakieś sugestie? EDIT: Lew Gorodinski pomysł: public class Activity { public int Id {get; private set;} public string Description {get;set;} public Activity (string description){ this.Description = description this.Id = generator.GenerateId() } } interfejs publiczny IIdGenerator{ int GenerateId() } ale ja nie zobacz gdzie jest zdefiniowany "generator" i nie znalazłem implementacji IIdGenerator: gdzie mam umieścić implementację? W ActivityRepository? Jeśli tak, mogę pominąć IIdGenerator dla IActiviryRepositoryInteface?


title: Prolog w aktualnym świecie badawczym

text: mam wątpliwości co do używania Prologu do moich badań na studiach podyplomowych. Niedawno przedstawiłem na konferencji niewielką część mojej pracy badawczej, która jest omawiana na temat logiki i prologu. Otrzymałem komentarz od publiczności, która pytała mnie „dlaczego wybrałem prolog”. Powiedział, że prolog to język przestarzały (popularny w latach 80-tych) i teraz rzadko mówi się o prologu. Czy istnieje jakieś ryzyko, jeśli użyję prologu w moich badaniach naukowych z powodu jego staromodnego języka? a może powinienem prologować jako tylko część moich studiów. Wprawia mnie to w zakłopotanie, ponieważ wiem, że prolog nadal jest używany w środowisku akademickim.


title: Architektura wielkoskalowego API (User Management)

text: Obecnie projektujemy API, które ukryje różne usługi (Produkt, Treść, Użytkownik itp.), które będą używane przez naszą własną witrynę internetową, nasze własne aplikacje itp. Nie jest to publiczny interfejs API. Zastanawiamy się nad wykorzystaniem ServiceStack jako podstawy i może to być słuszne. Jednak największym problemem jest to, jak zarządzać użytkownikami (każdy użytkownik ma 30-50 atrybutów) i miejmy nadzieję, że 100 000+ użytkowników. Jak rozumiem AspNet Identity to nic dla produkcji, dlatego musimy stworzyć własną implementację AspNet Identity. 1. Jakie jest Twoje doświadczenie w tworzeniu niestandardowego dostawcy tożsamości (przykłady)? 2. Chcielibyśmy korzystać z kilku zewnętrznych usług uwierzytelniania (OpenId, twitter itp.), jak to powinno być zarządzane? 3. Jak to wpłynie na strukturę API (Powiedzmy, że używamy WebApi zamiast ServiceStack). Chciałbym używać jak najwięcej standardowego interfejsu użytkownika. Wszelkie pomysły, rozwiązania lub przykłady są mile widziane.


title: Co oznacza „Właściwe użycie” funkcji Javascript Eval?

text: Eval to notorycznie kontrowersyjna funkcja językowa. Douglas Crockford stanowczo go odrzuca. Zastanawiam się, jakie konkretne zagrożenia niesie ze sobą Eval. Zgodnie z tym pytaniem „Niewłaściwe użycie eval otwiera Twój kod na ataki typu injection”. Jakie są niewłaściwe zastosowania polecenia Eval i jakie luki w zabezpieczeniach otwierają?


title: Jakie są rzeczywiste konsekwencje dla licencji Apache 2?

text: Chcę użyć SVG Edit do projektu. To oprogramowanie jest rozpowszechniane na licencji Apache 2. Widziałem, że: * do wszystkich kopii, zmodyfikowanych lub niezmodyfikowanych, dołączona jest kopia licencji * wszystkie modyfikacje są wyraźnie oznaczone jako dzieło modyfikatora * wszystkie informacje o prawach autorskich, znakach towarowych i prawach patentowych są dokładnie powielane w dystrybucji kopie * licencjobiorca nie używa żadnych znaków towarowych należących do licencjodawcy Czy dotyczą one kodu, czy powinienem wyświetlić licencję gdzieś w GUI? Oryginalne oprogramowanie wyświetla "powered by SVG Edit", czy mogę to usunąć? A co najważniejsze: jaka jest właściwa etykieta, aby to zrobić? Nie chcę być dupkiem, ale jednocześnie chcę maksymalnie uprościć interfejs użytkownika, a usunięcie linku będzie jego częścią, jeśli nie zostanie uznane za _niegrzeczne_.


title: Jaki jest zysk z architektury 64-bitowej?

text: Bawiłem się maszynami 8-bitowymi (C64), używałem maszyn 16-bitowych (Win 3.1), cieszyłem się płaską 32-bitową przestrzenią adresową (Linux). Za każdym razem jako użytkownik (co oznaczało również bycie programistą dla zabawy lub zysku) czułem potrzebę większej liczby bitów i z zadowoleniem przyjąłem kolejną szerszą architekturę bitową. Dostęp do większej przestrzeni pamięci stał się łatwiejszy, grafika poprawiła się, a dźwięk był rozkoszą po 8-bitach. Jednak kiedy kilka lat temu zaczęły pojawiać się bębny marketingowe dla 64-bitowych, pomyślałem: „ok, to jest era Internetu, mogą używać tego rodzaju mocy, aby łatwiej wykonywać więcej obliczeń, a producenci sprzętu towarowego chcą rozszerzyć swoje portfolio na tego rodzaju rynkowy". Zawodowo stałem się "programistą systemowym" pracującym na urządzenia mobilne, czyli po części także "programistą wbudowanym". Pracując głównie na 32-bitowych produktach opartych na architekturze ARM, trochę zapomniałem o innych architekturach niż 32-bitowe. Również, gdy ARM ogłosił nową architekturę 64-bitową pod koniec 2011 roku, przeczytałem to, ponieważ ARM chce wejść na rynek serwerów, zwiększając swoje portfolio. Co ma sens. Teraz, gdy nowy iPhone 5S twierdzi, że jest pierwszym 64-bitowym procesorem, jaki kiedykolwiek był używany w smartfonie, moje myśli znów stały się nieco niespokojne. Urządzenia mobilne, będące najlepszymi urządzeniami osobistymi, stają się 64-bitowe. Więc zastanawiam się, czy jest coś, czego mi brakuje? Co oferuje bycie 64-bitowym użytkownikom, w tym programistom?


title: Czy testy wydajności powinny być oprzyrządowane przez narzędzia do kompilacji?

text: Czy testy wydajności powinny być oprzyrządowane przez narzędzia do kompilacji w ramach procesu kompilacji, czy też powinny funkcjonować całkowicie na zewnątrz? Jeśli na zewnątrz, to gdzie w potoku wdrażania powinni mieszkać? Obecnie widzę testy wydajności dołączone do faz cyklu życia testów integracyjnych. Chociaż na razie wszystko jest w porządku, wiem, że nie wydaje się to całkiem w porządku i mam trudności ze znalezieniem rzeczywistej odpowiedzi, gdzie powinniśmy dołączyć i przeprowadzić te testy wydajności. Ze względu na pytanie, możemy założyć środowisko wykorzystujące Jenkins do CI i Maven jako narzędzie do budowania. Możemy również założyć SDLC scrum.


title: Kiedy powinienem odmówić wprowadzenia żądanej zmiany?

text: Pracuję po stronie oprogramowania firmy, która dostarcza niestandardowy sprzęt z uruchomionym na nim oprogramowaniem. Często sprzęt nie jest dobrze zaprojektowany. W takich przypadkach często jestem najpierw proszony o rozwiązanie problemu - oczywiście objawem jest zawsze „awaria oprogramowania” lub coś w tym stylu. Niedawno mieliśmy kolejny z tych incydentów, w których zasilanie linii USB nie jest niezawodne i powoduje awarię urządzenia USB. Powoduje to problem użyteczności w jednej z naszych aplikacji. Zostałem poproszony przez wyższe kierownictwo, aby lepiej sobie z tym poradzić - stale monitoruj urządzenie USB, a jeśli zniknie, uruchom ponownie lub spróbuj je zresetować. Wykonanie którejkolwiek z tych czynności nie gwarantuje, że coś naprawi. Ostatecznie prawdziwym rozwiązaniem jest poprawienie niezawodności urządzenia od strony sprzętowej. Mógłbym poprawić wydajność, ale nie do 100%, no i oczywiście wykorzystałbym swój już ograniczony czas na rozrost kodu i dodanie kolejnego wątku monitorowania urządzeń. Biorąc to wszystko pod uwagę, jak mam podjąć dobrą decyzję, kiedy powiedzieć, że musi to być poprawka sprzętowa, a tylko poprawka sprzętowa? Czy mogę podejść do tego ilościowo i wymyślić jakiś ostateczny test tak/nie? Jestem pewien, że to nie takie proste.


title: Projektowanie interakcji aplikacji mobilnej IOS z serwerem?

text: Zbudowałem zestaw programów po stronie serwera w Pythonie. Zasadniczo przeszukują sieć i indeksują artykuły informacyjne. Aplikacja mobilna na iOS będzie tym, z czym użytkownik wchodzi w interakcję. Więc musi jakoś wysłać zapytanie do serwera, aby odzyskać wyniki. Tj. jeśli użytkownik wpisze „Google” lub „GOOG”, zwróci artykuły dotyczące Google. Zakładam, że serwer musi otrzymać zapytanie, serwer generuje wyniki, przeglądając hostowane dane, a następnie odsyła je z powrotem, ale jak to wszystko działa? Szukam zestawu podstawowych zasad projektowania dla tego typu rzeczy. Chociaż jeśli chciałbyś podać zestawienie, byłoby jeszcze lepiej.


title: Jak debugować klaster z systemem Microsoft Server 2003?

text: Jestem jedynym twórcą złożonego systemu oprogramowania o znaczeniu krytycznym, napisanego w Visual C++ 2005. Jest on wdrożony w klasycznym scenariuszu klastra Microsoft (aktywny/pasywny) z systemem Windows Server 2003 R2. Jeśli serwer A ulegnie awarii, uruchamia się drugi (B) i przejmuje jego obowiązki. Musisz wiedzieć, że: * Oba serwery mają te same łaty/poprawki Microsoft, ten sam sprzęt, to samo wszystko. * Oba serwery wykorzystują tę samą pamięć masową (RAID-6 przez Fibre Channel). * To oprogramowanie ma moduł główny, który uruchamia moduły peryferyjne. jeśli moduł peryferyjny ulegnie awarii, moduł główny uruchomi go ponownie. Kiedy przełączam aplikację na jednym z dwóch serwerów (powiedzmy serwer B), dwa moduły peryferyjne głównych aplikacji właśnie zaczęły się zawieszać, najwyraźniej bez powodu około 2 sekund po uruchomieniu modułu peryferyjnego. **Co mogę zrobić, aby przeanalizować/sprawdzić/rozwiązać tę dziwną sytuację?**


title: Specjaliści od QA mojego klienta oszukują mnie. Co mogę zrobić?

text: Historia: Jako pojedynczy programista z doświadczeniem w wybranej technologii, miesiąc temu naszkicowałem komponent, który we wszystkich zakresach i celach działał na akceptowalnym poziomie zgodnie z wersjami demonstracyjnymi. Cztery tygodnie i wielu programistów później (było to mniej więcej w ostatni czwartek), funkcja weszła do kontroli jakości i od tego czasu dostałem 8 błędów, około 25 krytycznych, 47 głównych i jeden drobny. Zaczynam żywić urazę do tych ludzi, ale potem robią wszystko, co w ich mocy, aby rzeczywiście poprawić jakość produktu, więc naprawdę nie powinienem. Jednocześnie uważam też, że mam prawo spać/jeść bez koszmarów przebojów pojawiających się na mojej skrzynce odbiorczej. Jaki jest uprzejmy sposób radzenia sobie z tą sytuacją? Zaangażowałem w to większość byłych programistów, ale ludzie z działu kontroli jakości nadal zgłaszają mi wszystkie swoje błędy, a wyższe kierownictwo wciąż pyta mnie, co z nimi robię, więc każdego dnia jestem coraz bardziej niespokojny który mija. * * * Więcej szczegółów: Około jeden na trzynaście raportów o błędach jest faktycznie adresowany przeze mnie (około jeden na trzy z nich jest faktycznie spowodowany przez kod, który napisałem), reszta z nich jest w kodzie, który jest dla mnie całkowicie obcy. Jednak to ja otrzymuję raporty i jestem doraźnie odpowiedzialny za ich dystrybucję do właściwych programistów. Nie jestem liderem zespołu. Sądząc po ilości pracy, którą otrzymałem, ktoś wydaje się myśleć, że właściwie jestem zespołem ludzi pod moim nazwiskiem. Pomijając wszystkie żarty, faktyczny lider zespołu jest na przedłużonym urlopie bez wyraźnego zastąpienia, a najstarszy twórca projektu w rzeczywistości kieruje kolejnym modułem w projekcie, a ja wyraźnie dałem do zrozumienia, że nie byłem zaangażowany w projekt już od około czterech tygodni. Powodem, dla którego to publikuję, jest to, że kończą mi się opcje realne, a nie tylko wyobrażanie sobie rzeczy.


title: Czy muszę nauczyć się JavaScript, aby tworzyć przyzwoite strony internetowe?

text: Witam Od lat używam C++ i Javy. Na dobre lub na złe, zawsze uważałem, że JavaScript nie jest tak potężny jak te języki i dlatego prawdopodobnie nie jest wart mojego czasu i wysiłku, aby się go nauczyć. Jednak ostatnio bardziej interesuje mnie tworzenie stron internetowych. Badałem Railsy, bazy danych MySQL, Html5 itp. Dużo pracowałem z GWT. Lubię GWT, ale czytałem, że ludzie czują się zbyt skrępowani przez Google i że prawdopodobnie i tak musisz znać JavaScript, aby zrobić coś wartościowego. W tej chwili nie mam na myśli żadnych konkretnych rodzajów stron internetowych, po prostu uczę się jak najwięcej. Naprawdę chcę być biegły w tworzeniu i przeszukiwaniu baz danych oraz używaniu ich do dostarczania treści generowanych przez użytkowników na stronie internetowej. Moje pytanie brzmi, czy mogę nie uczyć się JavaScriptu, czy też muszę ugryźć kulkę? Wiem, że jestem leniwy, ale jest tak wiele narzędzi, że trudno jest określić, których warto się czasem nauczyć. Badałem również języki takie jak DART, ale ponieważ kompiluje się również do JScript, a obecnie implementuje go tylko Google, nie widzę powodu, aby się go uczyć. Przepraszam, że moje pytanie jest tak długie i dziękuję.


title: Jakie jest najlepsze rozwiązanie do używania NetBeans na różnych komputerach i utrzymywania ich synchronizacji?

text: Używam NetBeans IDE do programowania PHP. Jakie jest najlepsze rozwiązanie do używania NetBeans na dwóch różnych komputerach i utrzymywania ich synchronizacji? Obecnie korzystam z funkcji przesyłania FTP przy zapisywaniu. Ale kiedy otwieram NetBeans na innym komputerze, nie pobiera on ponownie wszystkich plików zmian.


title: Dlaczego OTServs ma problem z klonowaniem przedmiotów w przypadku awarii serwera?

text: OTServ to otwarte gry MMORPG z ogromną społecznością. Przeważnie wszyscy mają poważny problem: jeśli serwer się zawiesi, ludzie mogą klonować przedmioty. To brudna sztuczka, którą można wykonać, ponieważ stan gracza jest zapisywany w bazie danych SQL, gdy gracz się wylogowuje. Oznacza to, że baza danych nie zawsze jest w prawidłowym stanie. Jeśli 5 różnych graczy wyloguje się z tym samym przedmiotem, przedmiot zostanie zapisany w bazie danych pięć razy! Więc awaria skutecznie sklonowałaby przedmioty. Rdzeń OTServ ma już kilka lat, a główne gałęzie wciąż nie zapewniają rozwiązania. Jako gry online składają się ze świata dynamicznych danych, które zmieniają się w bardzo szybkim tempie. Istnieją tysiące graczy online i miliony zarejestrowanych graczy. Dane są przechowywane w MySQL. Istnieją tabele takie jak `player`, `player_items`, `player_skills`, `player_storage` itd., niektóre z milionami wierszy. Uważam, że problem może polegać na tym, że obciążenie powodowane przez SQL uniemożliwia zapisywanie wszystkich danych w takim samym tempie, jak to się dzieje – setki aktualizacji na gracza na sekundę. Dlaczego OTServs mają ten problem, jaki wpływ na ten problem ma wykorzystanie baz SQL i jak można go rozwiązać?


title: Jak zablokować skrypt lub aplikację internetową do użytku dla licencjonowanego użytkownika?

text: Zbudowałem aplikację internetową w PHP. Teraz chcę sprzedawać tę aplikację internetową klientom, ale chcę zagwarantować, że tylko jeden klient (tylko jedna witryna) z niej korzysta. Czy istnieje sposób na zrobienie skryptu na licencji (którą dostarczam)?


title: Rozwój serwera protokołu WebSocket

text: Jestem zainteresowany zbudowaniem niestandardowego serwera Websocket dla projektu uczelni. Mam dobrą znajomość protokołu HTTP 1.1 i dobrze wiem, jak to działa. Zadaję to pytanie zakładając, że klienci Websocket (przeglądarki) mają swoją specyfikację protokołu, ponieważ klienci Websocket łączą się z serwerem Websocket za pośrednictwem adresu URL zaczynającego się od ws://. Ponadto, czy serwer Websocket może zostać zaimplementowany bez jednowątkowej i opartej na zdarzeniach funkcji języka? Dziękuję Ci.


title: Dlaczego tak niewiele dużych witryn korzysta ze stosu Microsoft?

text: Z góry przychodzi mi do głowy kilka dużych witryn, które wykorzystują stos Microsoft * Microsoft.com * Dell * MySpace * PlentyOfFish * StackOverflow * Hotmail, Bing, WindowsLive Jednak na podstawie obserwacji prawie wszystkie najlepsze Wydaje się, że 500 witryn działa na innych platformach. Jakie są główne powody tak małej penetracji rynku? * Koszt? * Ograniczenia technologiczne? * Czy firma Microsoft obsługuje bardziej środowiska korporacyjne/intranetowe niż publiczne witryny internetowe? Nie szukam udziału w rynku, ale raczej przyjęcie stosu MS na dużą skalę.


title: Różnice między "Java OOP" a "Pythonic OOP"?

text: Zacząłem od ActionScript 2.0, a potem przeszedłem na Javę. Od tego czasu nauczyłem się, a przynajmniej używałem wielu języków, w tym Pythona (prawdopodobnie mojego ulubionego). Obawiam się, że mój styl programowania obiektowego jest bardzo niepythoniczny, a bardziej przypomina Java OOP ze składnią Pythona. Co sprawia, że Java i Pythonic OOP różnią się od siebie? Jakie rzeczy programiści Java często robią „niepytonowo” podczas pisania kodu obiektowego w Pythonie?


title: Czy praktyczne jest pisanie specyfikacji dokumentujących system z mocą wsteczną za pomocą automatycznych testów akceptacyjnych?

text: Jeśli projekt został zakodowany bez dużej (lub żadnej) formalnej dokumentacji i bez testów jednostkowych, czy ma sens używanie narzędzi takich jak Fitnesse i SpecFlow do pisania automatycznych testów akceptacyjnych jako dokumentacji, specyfikacji kodu? Używanie testów jednostkowych jako środka bycia specyfikacjami wiązałoby się ze zbyt wysokimi kosztami. Jestem za dodawaniem ich, gdy pojawią się nowe funkcje lub zostaną naprawione błędy, ale nie za wstecznym „specyfikowaniem” i testowaniem systemu. Czy takie podejście z Fitnesse, SpecFlow lub innymi narzędziami działałoby z tym, co sprowadza się do podejścia BDD w odwrotnej kolejności? A może byłby to ZŁY pomysł (gra słów zamierzona półpoważnie: **B** zachowanie **A** po rozwoju **D**)


title: Jakich świadczeń poza wynagrodzeniem powinien szukać stażysta?

text: Czego stażysta powinien szukać na stażu poza wypłaconą kwotą?