title: czy wektor2 rozciąga wektor3, czy jest odwrotnie?

text: Być może pytanie może dotyczyć forum teoretycznego lub matematycznego, ale ponieważ jest ono przeznaczone do celów programistycznych, najpierw pytam: w kontekście wizji komputerowej piszę kilka interfejsów, które mają być częścią wektorów „tylko do odczytu” . Więc definiuję "IVector2R" i "IVector3R", które zawierają tylko gettery. Pytanie brzmi: czy IVector2R rozszerza IVector3R (a „getter y” zawsze zwraca 0), czy jest odwrotnie: IVector3R rozszerza IVector2R? Chciałbym koncepcję jak najbardziej zbliżoną do teorii matematyki/zbiorów... Dziękuję za uwagę


title: Jak dokonać refaktoryzacji singletona Java do Clojure?

text: Piszę prostą grę w Javie i chcę nauczyć się Clojure, więc zdecydowałem się na refaktoryzację mojego obecnego kodu Javy do Clojure. Problem polega na tym, że kodowałem tak dużo w językach obiektowych, że nie _widzę_, jak to zrobić funkcjonalnie. Mówiąc konkretnie, mam `Map<String, Country>` wewnątrz klasy singleton, do której można uzyskać dostęp z dowolnego miejsca, aby uzyskać instancję Country, zaktualizować ją i umieścić z powrotem na mapie. Zaimplementowałem to w ten sam sposób w Clojure. Na przykład, aby zaktualizować kraj: (def countries (do-get-countries)) (defn update-country [kraj] (def countries (stowarzyszone kraje (get kraj :nazwa) kraj))) Stworzyłem również ` defrecord Country`, ale właściwie modyfikuję te rekordy jak (assoc country :name "Nowa nazwa") Te dwa przykłady nie wyglądają moim zdaniem idiomatycznie. Czy to rzeczywiście właściwy sposób na zrobienie tego w Clojure? Jeśli nie, to jak byłoby bardziej idiomatyczne? Z góry dziękuję!


title: Jaki byłby odpowiedni algorytm do faktoryzacji liczb w zakresie kilku miliardów?

text: W tej chwili uczę się Pythona i aby dać mi powody, aby zastosować to, czego się uczę, mam problem z niektórymi problemami w projekcie Euler Jestem obecnie na numerze 3, który ma określić najwyższy czynnik pierwszy tej liczby. Wydedukowałem, że prawdopodobnie potrzebuję dwóch algorytmów, jednego do określania pierwszości, a drugiego, który polegałby na znalezieniu czynników liczby. Więc czytałem artykuły na Wiki. Próbuję określić, jaki może być najlepszy algorytm do użycia i jak się do tego zabrać. Ale minęło trochę czasu, odkąd zrobiłem trochę hardcorowego programowania opartego na matematyce i mam problemy, aby gdzieś zacząć. Patrzyłem na użycie metody faktoryzacji Fermata z włączeniem Trial by Division, ale nie chcę komplikować czegoś zbyt skomplikowanego, nie zamierzam złamać RSA. Chcę tylko dwóch algorytmów pasujących do mojego problemu i moje pytanie jest w tym zakłopotane. Jakich algorytmów użyjesz do testowania pierwszości / faktoryzacji liczby, która jest odpowiednia dla danego problemu? **Edytuj** Dziękuję wszystkim za odpowiedzi i spostrzeżenia, które były najbardziej pomocne. Poparłem wszystkie, które były przydatne poprzez porady lub własne doświadczenia Euler. Ten, który oznaczyłem jako właściwy, był po prostu najbardziej przydatny, ponieważ dawał mi odpowiednie miejsce do rozpoczęcia, od którego pchnąłem we właściwym kierunku. Jeszcze raz dziękuję =)


title: Czy przetwarzanie/filtrowanie powinno odbywać się po stronie klienta czy po stronie serwera w przypadku aplikacji opartych na katalogach?

text: **Kierowanie na urządzenia dla katalogu XML produktów** Obecnie dysponujemy usługą internetową, która generuje kod XML produktów na podstawie parametrów get w żądaniu. Usługa sieci Web jest używana z aplikacji mobilnej systemu Windows. Przed usługą sieciową mamy akcelerator/cache HTTP, który buforuje wyniki dla identycznych adresów URL. Biznesmeni chcą nowej funkcji, która umożliwi kierowanie produktów na określone konfiguracje urządzeń. Uważamy, że konfiguracja urządzenia może składać się z parametrów, takich jak: * model sprzętu * oprogramowanie układowe * lokalizacja geograficzna * dostawca komórkowy * itp. Może to drastycznie zabić współczynnik trafień/chybień w pamięci podręcznej (wydajność), ponieważ będziemy wysyłać param " deviceConfigId”, który będzie inny dla wielu urządzeń, ale wpłynie na listę wyświetlanych aplikacji. Mówimy o minimum 10 000 konfiguracji. Nasz współczynnik trafień/chybień wzrósł z 75% do 40% po dodaniu kilku nowych funkcji i filtrów za pośrednictwem adresu URL rok temu. Oprócz korzystania z mechanizmów takich jak Edge Server Includes ( http://stackoverflow.com/questions/5960598/varnish-and-esi-how-is-the-performance/9914643#9914643 ), jednym z pomysłów, z którymi flirtujemy jest do filmowania części filtrowania na urządzenia mobilne. **Przenoszenie filtrowania po stronie klienta** Deweloperzy mobilni nie mogą się doczekać, ponieważ może to spowodować, że ich urządzenia mobilne będą mniej responsywne. Urządzenia klienckie będą musiały pobrać wszystkie informacje o produkcie (strona po stronie, gdy ludzie przewijają w dół), ale urządzenie będzie musiało odfiltrować wpisy. Dodatkowo na początku ładowania urządzenie musi pobrać listę reguł mających zastosowanie do konkretnej konfiguracji, aby zastosować je do wszystkich przyszłych żądań i produktów wymienionych w XML. **Utrzymywanie wszystkich filtrów na backendzie** Deweloperzy backendu wzdrygają się przed pomysłem dodania „deviceConfigId” do wszystkich żądań. Będzie to wymagało dodania jeszcze większej infrastruktury i zasobów sieciowych. Problem można rozwiązać, dodając lepszy load balancer i dodając za nim więcej serwerów (a później przechodząc do bardziej rozproszonych technologii). Jeśli uznamy, że wrażenia użytkownika powinny być najwyższym priorytetem, a wolniejsze/starsze urządzenia powinny działać tak płynnie, jak to tylko możliwe, wydaje się, że powinniśmy użyć filtrowania po stronie serwera dla list produktów. Jednak pojawiają się nowsze urządzenia, a starsze urządzenia są stale wyrzucane. Zmuszenie klientów do filtrowania, ale utrzymywanie obciążenia z dala od zaplecza jest dość kuszące. Czy są jakieś inne plusy/minusy, a co ważniejsze rozwiązania takiego problemu? Dziękuję


title: kiedy należy podzielić tabelę bazy danych na wiele tabel z relacjami?

text: Mam aplikację, która musi przechowywać dane klienta, a częścią tego są również dane o jego pracodawcy. Zakładając, że klient może mieć tylko jednego pracodawcę i że szansa na to, że ludzie mają identyczne dane pracodawcy, jest znikoma, który schemat byłby bardziej sensowny? **Schema 1** Tabela klientów: ------------------- id int name varchar(255), email varchar(255), adres varchar(255), miasto varchar (255), state char(2), zip varchar(16), pracodawca_name varchar(255), pracodawca_phone varchar(255), pracodawca_address varchar(255), pracodawca_city varchar(255), pracodawca_state char(2), pracodawca_zip varchar(16) ) * * * **Schema 2** Tabela klientów ------------------ id int name varchar(255), email varchar(255), adres varchar(255), miasto varchar(255), state char(2), zip varchar(16), tabela pracodawców --------------------- id int nazwa varchar(255), telefon varchar(255), adres varchar(255), miasto varchar(255), state char(2), zip varchar(16) patient_id int Część mnie myśli, że skoro są wyraźnie dwa różne 'obiekty' w prawdziwym świecie, oddzielając je wyjście na dwa różne stoły ma sens mi. Ponieważ jednak klient zawsze będzie miał pracodawcę, nie widzę też żadnych realnych korzyści z ich rozdzielania, a to sprawiłoby, że zapytania o dane klientów byłyby bardziej złożone. Czy jest jakaś korzyść / powód tworzenia dwóch tabel w sytuacji takiej jak ta zamiast jednej?


title: Różnica między niezmiennymi a const

text: Często widziałem, że terminy „niezmienny” i „stały” są używane zamiennie. Jednak z mojego (małego) doświadczenia wynika, że te dwie rzeczy bardzo się różnią pod względem „kontraktu”, jaki tworzą w kodzie: Niezmienność sprawia, że kontrakt, którego ten obiekt _nie_ zmieni, w ogóle (np. krotki Pythona, ciągi znaków Javy). Const sprawia, że kontrakt w zakresie tej _zmiennej_ nie będzie modyfikowany (nie ma żadnej obietnicy, co inne wątki mogą zrobić z obiektem wskazanym w tym okresie, np. słowo kluczowe C/C++). Oczywiście nie są one równoważne, chyba że język jest jednowątkowy (PHP) lub ma liniowy lub unikalny system typowania (Clean, Mercury, ATS). Po pierwsze, czy moje rozumienie tych dwóch pojęć jest prawidłowe? Po drugie, jeśli istnieje różnica, dlaczego są one prawie wyłącznie używane zamiennie?


title: Jednostronicowa aplikacja internetowa i wymaganie JavaScript

text: Mam wrażenie, i zgadzam się z tym, że źle jest tworzyć aplikację webową _wymagającą_ poprawnego działania JavaScriptu. Co by było, gdyby stworzyć aplikację jednostronicową? Czy można stworzyć taki, który nie opiera się na JavaScript, nie będąc trudnym lub pełnym "hacków"?


title: Czy JavaScript jest funkcjonalnym językiem programowania?

text: * Czy JavaScript jest językiem funkcjonalnym? Wiem, że ma obiekty i możesz z nim również wykonywać OOP, ale czy jest to również język funkcjonalny, czy można go używać w ten sposób? * Wiesz, jak OOP stało się / wydaje się być następną ewolucją w programowaniu, czy to oznacza, że "Programowanie funkcyjne" jest następną ewolucją (Uwaga: to NIE jest monit o opinię, ALE monit o odpowiedź opartą na faktach, i ta uwaga jest bardziej dla moderatorów niż dla współpracowników ;) ). * Najlepiej uczę się na przykładach, może ktoś mógłby pokazać wykonanie tego samego zadania w sposób OOP, a następnie w sposób programowania funkcjonalnego, abym mógł zrozumieć i porównać, co robi/jest programowanie funkcjonalne. Szczerze mówiąc, nie do końca rozumiem 'Programowanie funkcyjne' :P Tak więc porównywanie JavaScript do programowania funkcyjnego może być całkowicie niepoprawne. Ujmując programowanie funkcjonalne w kategoriach laików: czy jest to po prostu korzyść z abstrakcji POPRZEZ używanie funkcji anonimowych? A może to zbyt proste? W prosty sposób OOP jest korzyścią z abstrakcji poprzez obiekty, ale uważam, że jest to zbyt uproszczone, aby opisać OOP. Czy to dobry przykład programowania funkcyjnego?... Javascript OOP Przykład: // suma liczb function Number( v ) { this.val = v; } Number.prototype.add( /*Liczba*/ n2 ) { this.val += n2.val; } Przykład programowania funkcjonalnego: function forEach(tablica, akcja) { for (var i = 0; i < tablica.length; i++) akcja(tablica[i]); } funkcja add(tablica) { var i=0; forEach(tablica, funkcja(n) { i += n; }); powrót ja; } var res = dodaj([1,9]);


title: Kierownictwo strategiczne i taktyczne dla zespołów IT

text: W swojej wpływowej książce „Peopleware” dotyczącej przywództwa zespołowego DeMarco i Lister sugerują, że menedżerowie powinni zapewniać swoim zespołom IT „strategiczny, ale nie taktyczny kierunek”. To intrygujące, ale nie wyjaśniają dokładnie, co mają na myśli! Masz jakieś przemyślenia na temat tego, jak ten intrygujący pomysł wygląda w praktyce? Czy to dobra czy zła praktyka?


title: Jak mogę optymalnie wykorzystywać i ponownie syndykować usługę sieciową REST?

text: Muszę napisać aplikację, która wykorzystuje zawartość forum za pośrednictwem interfejsu API REST i przechowuje wątki i posty. Aplikacja będzie działała jako warstwa pomostowa między forum i okresowo zapisuje dane do trzeciej aplikacji - tak blisko "czasu rzeczywistego", jak to tylko możliwe. Platforma to PHP 5.3 / MySQL i prawdopodobnie Symfony z klientem Zend_Rest. Moje pytanie brzmi, jaka byłaby odpowiednia / wydajna architektura dla warstwy mostowej? Wyobrażam sobie, że będę musiał wykonać wstępny import danych z forum, który będzie powolny (może zająć kilka godzin). Aplikacja pomostowa będzie również miała interfejs do selektywnego dodawania wiadomości z forum do trzeciej aplikacji i dodawania dalszych metadanych, np. sentymentu (czy wiadomość była pozytywna czy negatywna). Zdaję sobie sprawę, że import / eksport danych można wykonać za pomocą skryptów proceduralnych i zadań cron, ale zastanawiam się, czy istnieje lepszy sposób. Wielkie dzięki,


title: Dlaczego/jak Java używa kontrolowanego mechanizmu do wstrzymywania wątków dla GC?

text: Wiem, że Java używa kontrolowanego mechanizmu umożliwiającego wstrzymywanie wątków. Jeśli dobrze zrozumiałem, wstawili odczyt z chronionej strony na końcu np. pętle i zmień ochronę tej strony, jeśli chcą, aby wątek został wstrzymany. Nie rozumiem, dlaczego jest to konieczne i czy to może w ogóle zadziałać. Jedynym powodem, jaki przychodzi mi do głowy, aby uczynić to koniecznym, jest to, że nie musisz mieć wszystkich wskaźników na stercie, a także możesz mieć je w rejestrach. Jednakże, gdybyś używał TSS, czy nie miałbyś też tych samych danych? Jednak bardziej interesujące jest to, jak radzą sobie z wywołaniami systemowymi. Co się dzieje, gdy wątek wykonuje powolny odczyt pliku przez np. sieć? Czy sposób GC? Czy GC rezygnuje z biegu i próbuje ponownie chwilę później? Co się dzieje, gdy wywołanie systemowe trwa bardzo długo?


title: Jak znaleźć początek metody natywnej?

text: Dla projektu hobby piszę x86 GC i JIT. W przypadku GC muszę zachować informacje o układzie stosu (jest to dokładne GC), dla którego muszę być w stanie dowiedzieć się, w której metodzie aktualnie znajduje się adres IP (i oczywiście cały łańcuch połączeń). Jak możesz to robić? Najlepszym rozwiązaniem do tej pory było zachowanie b-drzewa adresów początkowych wszystkich skasowanych metod i użycie go do wyszukania bieżącej metody. Jednak wygląda to na duże obciążenie. Alternatywą byłoby użycie BSP do znalezienia adresu zwrotnego, cofnięcie się o kilka bajtów i sprawdzenie, jaki adres został wywołany. Mogłem wtedy umieścić kilka danych przed punktem wejścia. Jednak wiąże się to z problemem polegającym na tym, że wywoływany może nie być metodą porzuconą (na stosie będą metody natywne). W takim przypadku dane przed metodą byłyby śmieciami lub mogą nawet nie być prawidłową pamięcią (w niektórych skrajnych przypadkach). Jaki jest zwykły mechanizm implementacji tej funkcjonalności?


title: Sprawdzanie, czy metoda zwraca fałsz: przypisz wynik do zmiennej tymczasowej lub umieść wywołanie metody bezpośrednio w trybie warunkowym?

text: Czy dobrą praktyką jest wywoływanie metody zwracającej wartości prawdziwe lub fałszywe w instrukcji if? Coś takiego: private void VerifyAccount() { if (!ValidateCredentials(txtUser.Text, txtPassword.Text)) { MessageBox.Show("Nieprawidłowa nazwa użytkownika lub hasło"); } } private bool ValidateCredentials(ciąg nazwa_użytkownika, ciąg hasło) { ciąg ciągu existingPassword = GetUserPassword(nazwa_użytkownika); if (existingPassword == null) zwróć false; var hasher = new Hasher { SaltSize = 16 }; bool passwordsMatch = hasher.CompareStringToHash(hasło, istniejące hasło); zwróć hasłaDopasuj; czy lepiej jest przechowywać je w zmiennej, a następnie porównać je przy użyciu wartości if else takich jak bool validate =ValidateCredentials(txtUser.Text, txtPassword.Text); if(validate == false){ //Zrób coś } Nie chodzi mi tylko o .NET, mam na myśli pytanie we wszystkich językach programowania, tak się składa, że użyłem .NET jako przykładu


title: dobre książki, aby zagłębić się w PHP

text: Jestem programistą PHP z ~3 letnim doświadczeniem. Chcę zagłębić się w PHP i naprawdę zrozumieć bardziej niskopoziomowe konstrukcje/funkcjonalność. Robiłem głównie frontend web dev i trochę prac php cron. Chcę dowiedzieć się więcej o kontekstach strumieniowych, domknięciach, rozwidleniu procesów itp. Książka, którą znalazłem, która wydaje się najbliższa temu, to Expert PHP i MySQL (Wrox). Znalazłem też Pro PHP. Wiem, że musi być więcej, ale nie mogę nic znaleźć. Propozycje?


title: Czy ktoś aktywnie tworzy oprogramowanie do użytku z zestawem słuchawkowym Emotiv?

text: Na podstawie sekcji „polecane aplikacje” na stronie głównej http://www.emotiv.com/index.php Wiele z tak zwanych aplikacji „kontroli umysłu” jak dotąd wydaje się być dość prymitywnymi aplikacjami do odczytu/skanowania, które wyglądają zgodnie z profilem określonej czynności, a może pozwolić użytkownikowi na manipulowanie lub sterowanie aplikacją w sposób luźno analogiczny do używania myszy/klawiatury. Zastanawiam się tylko, czy ktoś obecnie pracuje nad czymś (zakładając, że może o tym mówić), co jest niesamowicie spektakularnym wykorzystaniem gogli Emotiv? Dziękuję.


title: Dodatki związane z infrastrukturą w komentarzach do zatwierdzenia

text: Ze względu na to pytanie, zgódźmy się na tę definicję „dobrej wiadomości o commitach” stąd: > Twój komentarz powinien być zwięzły i rzeczowy, opisujący co zostało zmienione > i ewentualnie dlaczego. i zaakceptuj, że odwoływanie się do błędu/problemu w komunikacie o zatwierdzeniu jest dobrą rzeczą. Teraz istnieje wiele narzędzi, które integrują się z repozytoriami VCS i, aby mogły działać, wymagają, aby komunikaty commit zawierały różne „informacje kontrolne”, które generalnie nie dodają wartości w sensie historycznym? Pomyśl, * Ilość czasu spędzonego na naprawie problemu (`[Spędzone: 4h]`) * A /cc powiadamiające innych członków zespołu o zestawie zmian (`/cc john, jill`) * Znacznik do serwera CI do wdrożenia zestaw zmian do rozwoju/stagingu/produkcji (`[deploy: production]`) * Ustawienie recenzenta (`R: jill`) To prawda, to wszystko jest bardzo wygodne dla programistów na krótką metę (dlaczego zostawiać konsolę, aby wcisnąć przycisk w Interfejs CI, kiedy mogę dodać krótki ciąg do wiadomości zatwierdzenia), ale uważam, że te wiadomości zbytnio zaśmiecają dziennik zmian i są zbyt specyficzne dla infrastruktury (co jeśli zmienimy na Time Tracker, który używa nieco innej składni?). Jakie jest Twoje zdanie na temat tych wiadomości i gdzie wyznaczasz granicę, co zaakceptować, a czego zabronić?


title: Dlaczego używanie nadmiarowości z operatorami logicznymi jest złe?

text: Przechodzę do pracy nad biblioteką, którą napisał inny programista. Jest pełen `== prawda` i `== fałsz`, których czytanie jest dla mnie _szalone_ frustrujące. Próbowałem go poprosić, żeby przestał to robić, ale on po prostu mówi, że dzięki temu łatwiej jest zrozumieć, co się dzieje. Czy istnieje dobry powód, dla którego nie jest to świetna praktyka? A może jest to kwestia czysto stylistyczna?


title: Czy mogę użyć dostępu używanego przez Visual Basic do budowania bazy danych?

text: Jestem jedynym programistą, w którym pracuję (praca letnia) i jestem studentem z zaledwie kilkuletnim doświadczeniem programistycznym. Poproszono mnie więc o zbudowanie bazy danych i jestem bardzo podekscytowany tym projektem, ponieważ mam nadzieję, że wiele się z tego nauczę. Korzystając z tej bazy danych, mój menedżer powinien być w stanie przydzielić pracę (obsługę biznesową) różnym osobom w firmie za pomocą interfejsu (wszyscy pracownicy mają dysk współdzielony). Kiedy pracownicy skończą z tą papierkową robotą związaną z firmą, mogą sprawdzić, czy zostało to wykonane, dodać komentarze na dole interfejsu, a następnie przejść do następnej firmy. Jedyne doświadczenie, jakie miałem z bazami danych, to niektóre zapytania z SQL, a interfejsy GUI zbudowałem za pomocą JAVA. Informacje w interfejsie zostaną pobrane z programu Excel, aby pracownicy wiedzieli, z jakimi firmami mają do czynienia. Zrobiłem trochę badań i uważam, że najlepszym sposobem na zbudowanie tego byłoby najpierw zbudowanie GUI przy użyciu Microsoft Visual Studio (Visual Basic), a następnie znalezienie sposobu na wypełnienie interfejsu z programu Excel. Również dlatego, że dane są dość proste i nieskomplikowane, będę używać MS Access do przechowywania i śledzenia bazy danych. Wiem, że to nie będzie łatwe, ale dla wszystkich geniuszy, czy to jest na dobrej drodze? Dziękuję.


title: Wyświetlaj komunikat o błędzie za pomocą jQuery bez przeładowywania strony

text: Utworzyłem formularz logowania. Gdy użytkownik kliknie przycisk logowania, formularz ten pojawia się z pewnym efektem zanikania (jQuery). To, co chcę zrobić, to wyświetlić komunikat o błędzie w tym formularzu, gdy użytkownik wprowadzi nieprawidłowe dane. Przed wyświetleniem jakichkolwiek komunikatów PHP musi odczytać dane z bazy danych, dlatego strona musi zostać ponownie załadowana, a kiedy strona zostanie ponownie załadowana, formularz ten zniknie. Jak wyświetlić komunikat o błędzie w tym formularzu logowania bez ponownego ładowania strony? (Mam dużo kodu, więc jeśli potrzebujesz jakiejkolwiek części kodu, dostarczę)


title: Czego użyć w UML dla dołączonego modułu w ruby?

text: Lubię tworzyć proste diagramy klas do swoich projektów. Przez większość czasu po prostu używam kompozycji, dziedziczenia i skojarzeń. Podstawowy zasób UML IMB mówi o tym wszystkim. Jednak używam ruby, więc mam możliwość zdefiniowania modułu za pomocą kilku metod. Mogę po prostu dołączyć ten moduł do każdej klasy, w której chcę używać tych metod. Można to interpretować jako dziedziczenie, jednak niektóre z moich klas są już klasami potomnymi innej klasy i nie chcę mieszać znaczenia symbolu używanego w moich diagramach. **Jak wyświetlić dołączony moduł w moich diagramach klas w UML?**


title: Jak trafne są testy porównawcze „Żądań na sekundę”?

text: Za każdym razem, gdy pojawia się nowy framework, jest pewne, że ktoś gdzieś porówna go z innymi dostępnymi rozwiązaniami. Jednym z interesujących benchmarków jest benchmark „Żądań na sekundę”. Na przykład spójrz na ten test porównawczy: ![tutaj wpisz opis obrazu](http://i.stack.imgur.com/Ea42f.png) Teraz AFAIK Zend framework i Symfony to 2 z największych frameworków wspieranych przez duże firmy . Czy programiści popełnili błąd podczas projektowania frameworka, który spowodował tak (stosunkowo) niski próg? Jeśli planuję zbudować witrynę/aplikację internetową i spodziewam się (stosunkowo) dużego ruchu, czy powinienem zwrócić uwagę na ten test porównawczy? Czy moja strona/aplikacja na pewno spadnie przy przedstawionych wartościach? Po prostu pytam Cię, jako architekta oprogramowania, jak strategicznie uwzględniłbyś ten punkt odniesienia podczas planowania nowego projektu.


title: Projektowanie sieci społecznościowej z myślą o CQRS, bazach grafowych i relacyjnych bazach danych

text: Do tej pory przeprowadziłem sporo badań na ten temat, ale nie mogłem dojść do wniosku, aby podjąć decyzję. Projektuję sieć społecznościową i podczas moich badań natknąłem się na grafowe bazy danych, uważam, że neo4j jest całkiem interesujący dla relacji z użytkownikami i przechodzenia przez węzły. Myślałem również o użyciu relacyjnej bazy danych, takiej jak MS-SQL lub MySQL, tylko do przechowywania danych encji iw zależności od neo4j do połączeń między encjami. Oczywiście oznacza to więcej pracy w mojej aplikacji, aby przechowywać i pobierać dane z 2 różnych źródeł. Moje pierwsze pytanie: Czy korzystanie z tego podejścia (wykres + relacyjne) jest dobrym podejściem do projektowania mojej sieci społecznościowej, pamiętając, że użytkownicy sieci społecznościowych nie muszą synchronizować się z rzeczywistymi danymi w ułamku sekundy? Jakie są zalety i wady tego podejścia? Moje drugie pytanie: Czytałem trochę o CQRS i, jak zrozumiałem, jest to przydatne głównie w środowiskach współpracy i środowiskach, w których użytkownicy widzą wiele „nieaktualnych” danych. sieci społecznościowe udostępniają komentarze, wydarzenia itp., a wielu użytkowników pyta lub aktualizuje te same dane. Czy CQRS może być pomocnym podejściem? Czy dałoby to jakiekolwiek korzyści w zakresie wydajności/skalowalności lub nieprzydatną złożoność? Czy jest to odpowiednie dla mojego możliwego wyboru (wykres + relacyjne) podejście do baz danych, o którym mowa w powyższym pytaniu? Moim celem jest sprawdzenie, czy podejścia, o których wspomniałem powyżej, wydają się wystarczająco dobre dla kontekstu biznesowego.


title: Jak zostać dobrym kierownikiem projektu?

text: Zajmuję się rozwojem mobilnym. Właśnie awansowałem na kierownika projektu. Problem w tym, że mam tylko 4 miesiące doświadczenia w rozwoju. To była moja pierwsza praca i nawet nie skończyłem szkoły. Potrzebuję porady, a może oprogramowania, które pomoże mi zarządzać moim zespołem i projektami.


title: Czy duży ekran zwiększy produktywność?

text: Rozważam zakup komputera stacjonarnego, ale nie jestem w stanie określić, jaki rozmiar LCD powinienem kupić. Jaki jest rozmiar twojego ekranu, czy duży ekran LCD (30 cali+) będzie dobrze się rozwijał?


title: Co to jest 20 i ostateczna wytyczna Pythona?

text: Czasami, gdy moje życie potrzebuje jakiegoś przewodniego światła, czytam **Zen of Python** Tima Petersa i zwykle udaje mi się wrócić na tory. Dzisiaj był jeden z tych dni, więc sprawdziłem to ponownie. Zauważyłem, że sekcja „abstrakt” mówi: > Długoletni Pythoneer Tim Peters zwięźle przedstawia zasady BDFL dla > projektowania Pythona w 20 aforyzmach, z których tylko 19 zostało > spisanych. Jaki byłby ten ostatni niepisany aforyzm?


title: Potrzebujesz porady na temat projektowania ram: jak ułatwić rozbudowę

text: Tworzę framework/bibliotekę dla raczej konkretnego przypadku użycia (typ danych). Wykorzystuje różne komponenty sprężyn, w tym dane sprężyny. Biblioteka posiada zestaw klas encji odpowiednio skonfigurowanych i zgodnych z warstwami usług i dao. Główna praca lub główna korzyść z frameworka leży w warstwie dao i usług. Deweloperzy korzystający z frameworka powinni być w stanie rozszerzyć moje klasy encji, aby dodać dodatkowe pola, których potrzebują. Dlatego uczyniłem dao i warstwę usług generyczną, aby mogły być używane przez takie rozszerzone klasy encji. Teraz mam do czynienia z problemem w części IO struktury. Musi być w stanie zaimportować odpowiedni „specjalny typ danych” do bazy danych. W tej części muszę utworzyć nową instancję encji, a zatem potrzebuję faktycznie używanej klasy. Moim obecnym rozwiązaniem jest skonfigurowanie na wiosnę fasoli faktycznie używanej klasy. Problem z tym polega na tym, że aplikacja korzystająca z frameworka może używać tylko 1 implementacji encji (oryginalna ode mnie lub dokładnie 1 podklasę, ale nie 2 różne klasy tej samej hierarchii. Szukam sugestii / projektów do rozwiązania tego problem.Wszelkie pomysły?EDYCJA: jedynym pomysłem, jaki mam, jest dodanie parametru do dotkniętych metod, które przyjmują obiekt klasy.Byłoby to łatwe i pragmatyczne rozwiązanie, ale wydaje się bardzo brzydkie?


title: Jakich funkcji brakuje narzędzi Python IDE?

text: Jakich najbardziej pożądanych funkcji brakuje obecnie w narzędziach Python IDE? Interesuje mnie również to, czego brakuje w Komodo 6, ale jest dostępne w innych narzędziach (obecnie używam Komodo 6 dla Pythona 3 pod Windows). [Proszę o utworzenie społecznościowej wiki, jeśli to konieczne.]


title: Jaka jest „wewnętrzna składnia” języka programowania?

text: Czytałem artykuł (PDF), który wprowadził termin _wewnętrzna składnia_ , o którym nigdy nie słyszałem. Co oznacza ten termin i czym różni się od _składni źródłowej_? Wygląda na to, że _wewnętrzna składnia_ jest używana do formalnego udowodnienia pewnych właściwości języka (przynajmniej w tym artykule). Chciałbym poznać dokładną definicję i tło tej składni.


title: Czy zawsze powinniśmy używać IoC w naszych projektach?

text: Studiowałem _Wzorzec Mediatora_ i zauważyłem, że aby użyć tego wzorca, należy zarejestrować _Koledzy_ do _Mediatora_ z konkretnych klas _Kolega_. w tym celu musimy utworzyć instancję _Mediatora_ wewnątrz konkretnych klas _Kolega_, co narusza IoC i nie można wstrzyknąć _Koledzy_ do _Mediatora_ (o ile wiem! czy to dobrze, czy źle) Pytania: 1- Czy mam rację w tej sprawie Powiedziałem? 2- Czy zawsze powinniśmy w ogóle używać IoC, czy czasami można o tym zapomnieć? 3- Jeśli zawsze musimy używać IoC, czy możemy powiedzieć, że _Mediator_ jest antywzorcem?


title: Obsługa przestarzałych metod

text: Jak wielu z was już wie, Apple wypuścił nowy system operacyjny w zeszłym tygodniu, więc zainstalowałem go na swoim systemie, aby sprawdzić, czy projekt, nad którym pracuję, działa. Cóż, absolutnie nic nie działa! Istnieje wiele przestarzałych metod, więc chciałbym uzyskać poradę, jak poradzić sobie z aktualizacją kodu, aby był zgodny z nową platformą.


title: Jak zadać programiście pytanie bez uzyskania rozwiązania jako odpowiedzi

text: Wszyscy mamy doświadczenie. Idziesz do kogoś, o kim wiesz, że ma odpowiedź na pytanie, zadajesz tej osobie pytanie, a ona odpowiada typową odpowiedzią „dlaczego?”. Wyjaśniasz, dlaczego musisz wiedzieć, a oni próbują rozwiązać twój problem. Potrzeba czasu, wykręcania rąk i cierpliwości, aby skierować rozmowę z powrotem do pierwotnego pytania i uzyskać tę cholerną odpowiedź. Dlaczego programiści ciągle to robią i dlaczego ich zachowanie pogarsza się, im starszy staje się programista? Jak możesz zadać programiście pytanie w sposób najskuteczniejszy w wydobywaniu odpowiedzi na pierwotne pytanie? **EDYTUJ** : Wiele komentarzy wyjaśnia, dlaczego programista zachowuje się w ten sposób, i zaleca pytającemu przeprowadzenie dalszych badań przed zadawaniem pytania. Zdarza się też sytuacja, w której deweloper chce doradzić deweloperowi, aby wybrał inną drogę, ale chcę uniknąć wyjaśniania lub uzasadniania swoich decyzji. Nie są one powiązane z pytaniem, ale inny programista chce je powiązać. To nie jest odpowiedź na powyższe pytanie. Pytanie dotyczy konkretnie, w jaki sposób jeden nawiązuje kontakt z innym programistą, aby zadać pytanie, gdzie drugi ma odpowiedź i pominąć debatę o tym, dlaczego pytanie jest zadawane.


title: Czy to normalne, że nie mogę przechowywać w głowie więcej niż trzech przypisanych mi błędów, ani nie rozumiem tysiąca linijek kodu spaghetti?

text: Pracuję nad starą bazą kodu, która... _nie jest idealna_ , w środowisku, które też nie jest. Nie jest to najgorsza baza kodu, jaką widziałem w życiu, ale wciąż jest wiele problemów: zero testów jednostkowych; metody z ponad tysiącami linii kodu; niezrozumienie podstawowych zasad obiektowych; itp. Utrzymanie kodu boli. 1. Za każdym razem, gdy muszę debugować tysiąc wierszy źle napisanej metody ze zmiennymi, które są wielokrotnie używane, jestem całkowicie zagubiony. 2. Niektóre modyfikacje lub refaktoryzacja Wprowadziłem błędy w innych miejscach aplikacji. 3. Brak jakiejkolwiek dokumentacji, testów, obserwowalnej architektury i w połączeniu z błędnie nazwanymi metodami, czuję, że wypełniam całą dostępną pamięć roboczą. Nie ma już miejsca na wszystkie inne rzeczy, o których muszę pamiętać, aby zrozumieć kod, który powinienem zmodyfikować. 4. Ciągłe przerwy w pracy przeszkadzają mi i spowalniają. 5. Nie pamiętam więcej niż dwóch lub trzech zadań na raz bez systemu śledzenia błędów i zapominam je wszystkie przez weekend. Moi koledzy nie wydają się mieć podobnych problemów. 1. Udaje im się debugować źle napisane metody znacznie szybciej niż ja. 2. Wprowadzają mniej błędów niż ja podczas zmiany bazy kodu. 3. Wydaje się, że bardzo dobrze pamiętają wszystko, czego potrzebują, aby zmienić kod, nawet jeśli wymaga to odczytania tysięcy linijek kodu w dwudziestu różnych plikach. 4. Nie wydaje się, aby przeszkadzały im e-maile, dzwoniące telefony, ludzie rozmawiający dookoła i inni ludzie zadający im pytania. 5. Nie chcą używać systemu śledzenia błędów, który już mamy, odkąd używamy TFS. Wolą po prostu pamiętać o każdym zadaniu, które powinni wykonać. Dlaczego to się zdarza? Czy jest to szczególna umiejętność, którą deweloperzy nabywają pracując przez długi czas ze źle napisanym kodem? Czy mój względny brak doświadczenia ze złym kodem przyczynia się do tych problemów/odczuć? Czy mam problemy z pamięcią?


title: Python: Jak zdecydować, które metody klasy powinny zapewniać zachowanie (funkcjonalność) wpływające na wiele klas

text: Mam pytanie dotyczące projektowania zorientowanego obiektowo, które nie jest specyficzne dla Pythona, ale ponieważ mój kod jest w Pythonie, oznaczyłem go jako taki. Jak zdecydować, która z moich klas powinna być odpowiedzialna za implementację określonej funkcjonalności, która może mieć wpływ na więcej niż jedną klasę? Jakie są dobre wytyczne > (jeśli istnieją) lub uwagi? W poniższym przykładzie klasy _Miasto_ zachowanie związane z przechodzeniem do/z miasta jest podzielone między klasę _Miasto_ i klasę _Mieszkaniec_. Kod działa. Ale zastanawiam się, czy istnieją przekonujące powody, aby przypisać to zachowanie tylko do jednej klasy, np. zezwól metodzie _Miasto_ _addpeople_ na aktualizację atrybutu _Mieszkanie_ _miasto_, aby umożliwić śledzenie miejsca zamieszkania każdego mieszkańca. Po prostu próbuję zrozumieć, co byłoby dobrą praktyką lub inteligentnym projektowaniem zorientowanym obiektowo. class Miasto(): def __init__(self,name): self.name = nazwa self.inhab = [] def addpeople(self,person): self.inhab.append(person) def removepeople(self, person): self. inhab.remove(osoba) class Mieszkaniec(): def __init__(self,name): self.name = nazwa self.town = "" def move(self,town): if self.town: print self.name,"is przenoszenie z",self.town.name, "do",town.town self.town.removepeople(self) else: print self.name,"przenosi się do",town.town self.town = town miasto.addpeople( samego siebie)


title: Programowanie w parach i testowanie jednostek

text: Mój zespół podąża za cyklem rozwoju Scrum. Otrzymaliśmy informację zwrotną, że zasięg naszych testów jednostkowych nie jest zbyt dobry. Członek zespołu sugeruje dodanie zewnętrznego zespołu testowego, który będzie pomagał głównemu zespołowi, ale czuję, że odbije się to w zły sposób. Zastanawiam się nad zaproponowaniem podejścia do programowania w parach. Mam wrażenie, że to powinno sprawić, że kod stanie się bardziej „warty testów” i wkrótce zespół będzie mógł przejść do programowania opartego na testach! Jakie są potencjalne problemy, które mogą wyniknąć z programowania w parach?


title: Dzielenie się wiedzą w przedsiębiorstwie?

text: Niedawno przeczytałem ten artykuł na temat dzielenia się wiedzą i od razu rozpoznałem ten sam problem w mojej własnej organizacji. Moim głównym celem jest teraz „zabicie współpracy peer-to-peer” jako domyślnej metody komunikacji w nieprywatnych dyskusjach dotyczących systemu. W przeciwnym razie skończysz z całą wiedzą historyczną żyjącą w głowach jednostek lub zagubioną w ogromnym systemie pocztowym. Moje pytanie do grupy jest następujące: * Jakich metod/oprogramowania użyliście, aby zachęcić waszych programistów do bardziej „publicznych” dyskusji? Kilka początkowych pomysłów, które miałem ... wszelkie opinie byłyby świetne: * Wewnętrzna grupa dyskusyjna * „lepsze” oprogramowanie wiki (teraz przy użyciu Sharepoint) * Tablica wiadomości (chciałbym mieć wewnętrzną instancję StackExchange, ale nie myśl, że to jest opcja!) **Uwaga:** Jak wspomniano powyżej, mamy już wiki, ale nie podoba mi się pomysł wiki, ponieważ rzeczy są zwykle dodawane do wiki dopiero po fakcie, _jeśli w ogóle_. Dziękuję!


title: łączenie łańcuchów nodejs z async

text: Próbuję połączyć szereg metod, które są asynchroniczne. Słyszałem o obietnicach i przyszłości, ale to, czego szukam, to: obj.setup() .do_something() .do_inother_thing() .end() i nie: obj.setup() .then(...) .then (....) Natknąłem się na samouczek, który wyjaśnia, jak to zrobić, ale niestety grosz nie spadł: http://www.dustindiaz.com/async-method-queues/ Więc szukam moduł. Ten moduł, https://github.com/FuturesJS/FuturesJS , wydaje się mieć `chainify` w swoim API, ale nie ma dokumentacji, jak z niego korzystać. W rzeczywistości nie mogę znaleźć żadnej dokumentacji, jak używać modułów, aby osiągnąć to, czego szukam, ale dużo o używaniu obietnic, aby uzyskać `then().then().then()`, co nie jest tym, czego potrzebuję. Obecnie mój moduł wygląda tak: var obj = function(){ this.async_method = function(){} this.async_method_thingy = function(){} this.async_method_foo = function(){} } var o = new obj() var _ = { "ustaw" : function(){ ... zwróć to }, "zrób_coś" : function(){ o.async_method() zwróć to }, "zrób_inną_rzecz" : function(){ o.async_method_thingy() zwróć to } , "end" : function(){ o.async_method_foo() zwraca to } } module.exports = _ każda pomoc jest mile widziana ;)


title: Co może, a czego nie może zrobić Garbage Collector?

text: Czy GC zajmie się wszystkimi problemami z zarządzaniem pamięcią (wycieki pamięci)? Czy istnieje przypadek, w którym nie chcesz, aby GC przejął kontrolę nad jakąś częścią Twojego kodu?


Dlaczego powinienem napisać wiadomość o zatwierdzeniu? Nie chcę i myślę, że to głupie za każdym razem. Interfejs gui, którego używam, który będzie nienazwany, zmusza cię do tego. Słyszę, że inni robią to za każdym razem, nawet jeśli używają VCS w wierszu poleceń. Jeśli popełnię kilka razy dziennie i nie dokończę funkcji, o czym piszę? Piszę wiadomość TYLKO po wielu zatwierdzeniach i czuję, że nadszedł czas na mini tag lub kiedy robię rzeczywisty tag. Mam rację, czy czegoś mi brakuje? również używam systemu rozproszonego


title: Czy powinieneś utworzyć funkcję logiczną, która działa przeciwnie do istniejącej funkcji, aby jej cel był jasny?

text: Na podstawie tego pytania. Czy uważasz, że najlepszą praktyką jest tworzenie funkcji, która działa przeciwnie do istniejącej funkcji, tylko po to, aby nadać jej inną nazwę. Przykład: Jeśli masz już bool In(string input,string[] set), który zwraca true, jeśli zestaw tablicy zawiera string input, a false w przeciwnym razie powinieneś utworzyć funkcję taką jak bool NotIn(string input,string[] set) która zwraca fałsz, jeśli ciąg jest w zestawie lub prawda w przeciwnym razie?


title: Jaki jest najlepszy sposób przechowywania opcji z wieloma/boolowskimi wyborami w aplikacji na Androida?

text: Pracuję nad aplikacją społecznościową na Androida, która łączy się z bazą danych Postgresql w celu uzyskania aktualnych danych użytkownika i zamierza używać wyszukiwań dla menu rozwijanych, a te wyszukiwania będą miały wiele opcji (np. dla koloru oczu, menu będzie pokaż opcje „niebieski”, „brązowy”, „zielony”, „orzechowy”, „czerwony”, „biały”) lub wartości logiczne (np. w przypadku palenia menu pokaże „niepalący” lub „palący”). Czy mam je przechowywać w aplikacji? Nie mają tak naprawdę wysokiej czułości/poufności. Początkowo myślałem, że będę przechowywać je w bazie danych Postgresql, ale z perspektywy czasu wydaje się to przesadą i prawdopodobnie zacznie wpływać na wydajność i powodować niepotrzebne trafienia na serwer bazy danych. Jaki byłby najlepszy sposób przechowywania ich w aplikacji/na urządzeniu? Ze względu na argumenty używam aktualnej najnowszej wersji Androida (4.4.4, choć oczywiście nie tylko celuję w tę).


title: Przykłady i porady kodu źródłowego aplikacji PHP zorientowanych na OOP

text: Nadszedł dzień, którego się bałem. Nigdy nie uważałem, że OOP lub dobry projekt oprogramowania są ważne (wiedziałem, że są ważne, ale myślałem, że poradzę sobie bez nich). Jednak czytając prawie wszędzie w internecie, zacząłem bać się dnia, w którym mój klient poprosi mnie o nowe funkcje w istniejącej aplikacji. Nadszedł dzień i ból jest nie do zniesienia! Nigdy nie kodowałem moich stron PHP "poprawnie" (PHP to mój podstawowy język i większość mojej pracy. Uczę się Pythona (korzystając z web2py)) Dbam o to, aby strona nie rozpadła się w codziennym scenariuszu użytkowania. Koduję strony tak, jakbym tworzył listę statycznych plików html z kawałkami "magicznego kodu" w każdym z nich (to bardzo mnie wkurza). **Jak sprawić, by cała aplikacja była mniej więcej jednym obiektem?** Np. Jak zaprojektować model obiektowy dla aplikacji do fakturowania? Używam wielu funkcji do robienia konkretnych rzeczy w ten sam sposób w całej aplikacji (np. walidacja, generowanie identyfikatorów, obliczanie podatków itp.). Ogólnie znam podstawy programowania obiektowego. Czy ktoś może wskazać mi **próbki kodu źródłowego aplikacji funkcjonalnych** napisanych w php? Czy ktoś może podać wskazówki, abym mógł przekodować moje istniejące aplikacje w bardziej modułowy sposób.


title: Czy „tak długo, jak to działa” jest normą?

text: **Zobacz moje ostatnie pytanie:** Czy programowanie to zawód w wyścigu na dno? Mój ostatni sklep nie miał procesu. Agile zasadniczo oznaczało, że w ogóle nie mieli planu, jak rozwijać lub zarządzać swoimi projektami. Oznaczało to „hej, jest mnóstwo pracy. Zrób to za dwa tygodnie. Jesteśmy szybko i zwinni”. Wydali rzeczy, o których wiedzieli, że mają problemy. Nie obchodziło ich, jak coś zostało napisane. Nie było żadnych recenzji kodu — mimo że jest kilku programistów. Wydali oprogramowanie, o którym wiedzieli, że zawiera błędy. W mojej poprzedniej pracy ludzie mieli takie nastawienie tak długo, jak to działa, jest w porządku. Kiedy poprosiłem o przepisanie kodu, który napisałem, gdy zasadniczo badaliśmy specyfikację, odmówili. Chciałem przepisać kod, ponieważ kod powtarzał się w wielu miejscach, nie było enkapsulacji, a wprowadzanie w nim zmian zajęło ludziom dużo czasu. Zasadniczo mam wrażenie, że programowanie sprowadza się do następujących rzeczy: 1. przeczytanie jakiejś książki o najnowszym narzędziu/technologii 2. łączenie kodu na tej podstawie, unikanie pisania jakiegokolwiek indywidualnego kodu, ponieważ firma nie chce „utrzymywać kod niestandardowy" 3. Pokazywanie go i przejście do następnej rzeczy, "o ile działa." Zawsze powtarzałem sobie, że w następnej pracy dostanę lepszy sklep. To się nigdy nie zdarza. Jeśli to jest to, to czuję, że utknąłem. Technologie zawsze się zmieniają; jeśli jedynym rozwojem zawodowym jest tutaj czytanie najnowszej książki o technologii MS Press, to co zbudowałeś przez 10 lat, jeśli nie powierzchowną wiedzę o różnych technologiach? Martwię się o: 1. Najlepszy sposób na posiadanie standardów zawodowych 2. Jak zdobyć znaczącą wiedzę i doświadczenie w tej sytuacji


title: Kto jest odpowiedzialny za konfigurację automatycznego systemu budowania?

text: Jestem kierownikiem projektu w mojej firmie. Współpracuję z kilkoma zespołami programistów korzystających ze standardowego, dobrze znanego systemu kontroli wersji znanego jako CVS. Chciałbym zobaczyć ciągłą integrację i zautomatyzowane kompilacje wdrożone, aby zapobiec problemom z łamaniem się kompilacji i złymi wdrożeniami wkradającymi się na serwery produkcyjne. Jestem pewien, że sam mogę to ustawić, ale sam nie chcę tego robić z dwóch powodów: 1. Nie mam na to czasu. Mam własne obowiązki, które obejmują marketing, komunikację z innymi interesariuszami z członkami zespołu niebędącymi częścią rozwoju, komunikację z klientami i planowanie projektów. 2. Co najważniejsze, jestem kierownikiem projektu. Moim celem jest zapewnienie przywództwa, a nie mikro-zarządzanie zespołem programistów. Jakie są rzeczy, które mogę zrobić, aby znaleźć kogoś w zespole programistycznym, który byłby pasjonatem konfiguracji? Czy programista jest odpowiednią osobą do tego zadania, biorąc pod uwagę, że wymaga znajomości Java, Spring i Google App Engine? Jakie są wskazówki, które pomogą promować zmianę tam, gdzie się boisz?


title: Testowanie jednostkowe w czasie rzeczywistym – czyli „jak teraz zakpić”

text: Kiedy pracujesz nad funkcją, która zależy od czasu... Jak organizujesz testy jednostkowe? Kiedy twoje scenariusze testów jednostkowych zależą od sposobu, w jaki twój program interpretuje "teraz", jak je skonfigurować? **Druga edycja: Po kilku dniach czytania twojego doświadczenia** Widzę, że techniki radzenia sobie z tą sytuacją zwykle obracają się wokół jednej z tych trzech zasad: * Dodaj (zakoduj) zależność: dodaj małą warstwę w czasie funkcji/obiektu i zawsze wywołuj funkcję datetime przez tę warstwę. W ten sposób możesz uzyskać kontrolę nad czasem podczas wykonywania przypadków testowych. * Używaj mocków: Twój kod pozostaje dokładnie taki sam. W swoich testach zastępujesz obiekt czasu fałszywym obiektem czasu. Czasami rozwiązanie polega na zmodyfikowaniu oryginalnego obiektu czasu dostarczonego przez język programowania. * Użyj wstrzykiwania zależności: skompiluj swój kod tak, aby każde odwołanie do czasu było przekazywane jako parametr. Wtedy masz kontrolę nad parametrami podczas testów. Techniki (lub biblioteki) specyficzne dla języka są mile widziane i zostaną ulepszone, jeśli pojawi się przykładowy fragment kodu. Następnie najciekawsze jest to, jak podobne zasady można zastosować na dowolnej platformie. I tak... Jeśli mogę to od razu zastosować w PHP, to lepiej niż lepiej ;) **Zacznijmy od prostego przykładu: podstawowa aplikacja do rezerwacji.** Powiedzmy, że mamy JSON API i dwie wiadomości: wiadomość żądania, i komunikat potwierdzający. Standardowy scenariusz wygląda tak: 1. Składasz prośbę. Otrzymasz odpowiedź z tokenem. Zasób potrzebny do spełnienia tego żądania jest blokowany przez system na 5 minut. 2. Potwierdzasz żądanie, identyfikowane przez token. Jeśli token został wystawiony w ciągu 5 minut, zostanie zaakceptowany (zasób jest nadal dostępny). Jeśli minęło więcej niż 5 minut, musisz złożyć nowe żądanie (zasób został zwolniony. Musisz ponownie sprawdzić jego dostępność). **Oto odpowiedni scenariusz testowy:** 1. Składam prośbę. Potwierdzam (natychmiast) otrzymanym tokenem. Moje potwierdzenie zostało przyjęte. 2. Składam prośbę. Czekam 3 minuty. Potwierdzam otrzymanym tokenem. Moje potwierdzenie zostało przyjęte. 3. Składam prośbę. Czekam 6 minut. Potwierdzam otrzymanym tokenem. Moje potwierdzenie zostało odrzucone. Jak możemy zaprogramować te testy jednostkowe? Jakiej architektury powinniśmy użyć, aby te funkcjonalności pozostały testowalne? **Edytuj** Uwaga: Kiedy wykonujemy żądanie, czas jest zapisywany w bazie danych w formacie, który traci wszelkie informacje o milisekundach. **DODATKOWE - ale może trochę gadatliwe: Oto szczegóły dotyczące tego, czego dowiedziałem się podczas mojej "pracy domowej":** 1. Zbudowałem swoją funkcję z zależnością od własnej funkcji czasu. Moja funkcja VirtualDateTime ma statyczną metodę get_time(), którą wywołuję w miejscu, w którym wywoływałem new DateTime(). Ta funkcja czasu pozwala mi symulować i kontrolować, która godzina jest „teraz”, dzięki czemu mogę budować testy typu: „Ustaw teraz do 21 stycznia 2014 r. 16h15. Złóż wniosek. Przesuń się o 3 minuty. Zrób potwierdzenie.”. Działa to dobrze, kosztem zależności i „niezbyt ładnym kodem”. 2. Nieco bardziej zintegrowanym rozwiązaniem byłoby zbudowanie własnej funkcji myDateTime, która rozszerza DateTime o dodatkowe funkcje „czasu wirtualnego” (co najważniejsze, ustaw teraz to, czego chcę). To sprawia, że kod pierwszego rozwiązania jest nieco bardziej elegancki (użycie new myDateTime zamiast new DateTime), ale kończy się bardzo podobnie: muszę zbudować moją funkcję przy użyciu własnej klasy, tworząc w ten sposób zależność. 3. Myślałem o zhakowaniu funkcji DateTime, aby działała z moją zależnością, gdy jej potrzebuję. Czy istnieje jednak prosty i zgrabny sposób na zamianę klasy na inną? (Myślę, że mam na to odpowiedź: Zobacz przestrzeń nazw poniżej). 4. W środowisku PHP czytam "Runkit" może pozwolić mi to zrobić (zhakować funkcję DateTime) dynamicznie. Fajne jest to, że będę mógł sprawdzić, czy działam w środowisku testowym przed modyfikacją czegokolwiek w DateTime, i pozostawić to nietknięte w środowisku produkcyjnym [1]. Brzmi to znacznie bezpieczniej i czyściej niż jakikolwiek ręczny hack DateTime. 5. Wstrzykiwanie zależności funkcji zegara w każdej klasie używającej czasu [2]. Czy to nie przesada? Widzę, że w niektórych środowiskach staje się to bardzo przydatne [5]. W tym przypadku jednak tak bardzo mi się to nie podoba. 6. Usuń zależność czasu we wszystkich funkcjach [2]. Czy to zawsze jest wykonalne? (Zobacz więcej przykładów poniżej) 7. Używanie przestrzeni nazw [2] [3] ? Wygląda to całkiem nieźle. Mógłbym zakpić DateTime z moją własną funkcją DateTime, która rozszerza \DateTime... Użyj DateTime::setNow("2014-01-21 16:15:00") i DateTime::wait("+3 minuty"). To obejmuje prawie to, czego potrzebuję. A co jeśli użyjemy funkcji time()? Lub inne funkcje czasu? Nadal muszę unikać ich użycia w moim oryginalnym kodzie. Lub musiałbym upewnić się, że każda funkcja czasu PHP, której używam w moim kodzie, jest przesłonięta w moich testach... Czy jest dostępna jakaś biblioteka, która zrobiłaby właśnie to? 8. Szukałem sposobu na zmianę czasu systemowego tylko dla wątku. Wydaje się, że nie ma żadnego [4]. Szkoda: "prosta" funkcja PHP "Ustaw czas na 21 stycznia 2014 16h15 dla tego wątku" byłaby świetną funkcją do tego rodzaju testów. 9. Zmień datę i godzinę systemową testu za pomocą funkcji exec(). Może się to udać, jeśli nie boisz się zepsuć innych rzeczy na serwerze. Po przeprowadzeniu testu musisz cofnąć czas systemowy. W niektórych sytuacjach może załatwić sprawę, ale wydaje się dość "hacky". Dla mnie wygląda to na bardzo standardowy problem. Jednak nadal brakuje mi prostego, ogólnego sposobu radzenia sobie z tym. Może coś przegapiłem? Podziel się swoim doświadczeniem! **UWAGA: Oto kilka innych sytuacji, w których możemy mieć podobne potrzeby testowe.** * Każda funkcja, która działa z pewnym rodzajem limitu czasu (np. gra w szachy?) * Przetwarzanie kolejki, która wyzwala zdarzenia w określonym czasie (w powyższym scenariusz, który moglibyśmy kontynuować tak: na dzień przed rozpoczęciem rezerwacji chcę wysłać maila do użytkownika ze wszystkimi szczegółami Scenariusz testowy...) * Chcesz skonfigurować środowisko testowe z danymi zebranymi w przeszłości - chciałbyś to zobaczyć tak, jakby to było teraz. [1] 1 http://stackoverflow.com/questions/3271735/simulate-different-server-datetimes-in-php 2 http://stackoverflow.com/questions/4221480/how-to-change-current-time- for- unit-testing-date-functions-in-php 3 http://www.schmengler-se.de/en/2011/03/php-mocking-built-in-functions-like-time-in-unit- testy/ 4 http://stackoverflow.com/questions/3923848/change-todays-date-and-time-in- php 5 Testy jednostkowe kodu ograniczonego czasowo


title: Najlepsze praktyki – oddzielenie obaw od kwestii spadkowych

text: Oto sytuacja: Mam "wspólny" zestaw dostępu do danych, który zawiera klasy używane we wszystkich moich projektach. Niektóre z nich to klasy abstrakcyjne, które są implementowane tylko przez moje warstwy dostępu do danych dla każdego projektu. W moich projektach stosuję podejście warstwowe - osobny dostęp do danych, warstwa biznesowa i UI. Moje klasy dostępu do danych mogą dziedziczyć z klas abstrakcyjnych w Common. Te klasy abstrakcyjne zawierają metodę "execute". W warstwie biznesowej projektu odwołuję się tylko do warstwy dostępu do danych projektu - nie odwołuję się do innych projektów ani do zestawu Common. Ale po umieszczeniu moich abstrakcyjnych klas, które są cały czas ponownie używane, do Common, moja warstwa biznesowa nie może już wywoływać metody „Execute” bez odniesienia do common. Mam nadzieję, że to nie jest zbyt mylące. Jeśli nie chcę wielu współzależności między zestawami, muszę przenieść klasy abstrakcyjne z powrotem do warstwy dostępu do danych każdego projektu. Ale potem powtórzyłem kod i potencjalnie niespójne zachowanie między projektami. Ale jeśli zachowam to tak, jak jest, wszystkie moje warstwy biznesowe muszą mieć dostęp do tego wspólnego zestawu dostępu do danych, co wydaje się niewłaściwe. Jakieś przemyślenia na temat tej architektury? Wiem, że niektórzy mogą próbować powiedzieć „użyj Entity Framework” lub innego ORM. Ale moje projekty nie są na tyle złożone, aby gwarantować tak duże koszty ogólne, zwłaszcza biorąc pod uwagę potrzebę szybkiej wydajności. Odkryłem, że prosty framework, który bezpośrednio implementuje ADO.Net, jest znacznie szybszy. Więc proszę po prostu doradź mi o rozdzieleniu obaw i kwestii dziedziczenia i nie próbuj mnie namawiać do dodania ORM. Przykładowy kod: In Common: klasa bazowa Public MustInherit Class AbstractDatabaseAction Chroniona właściwość Factory As DbProviderFactory Połączenie chronionej właściwości As DbConnection Polecenie chronionej właściwości MessageForExceptions As String Chroniona właściwość ProviderName As String Chroniona Sub New(connString As String, providerName As String, messageForExceptions As String) Factory = DbProviderFactories.GetFactory(providerName) 'skonfiguruj połączenie Connection = Factory.CreateConnection Connection.ConnectionString = connString Me.ProviderName = providerName 'skonfiguruj polecenie Command = Factory.CreateCommand Me.MessageForExceptions = messageForExceptions End Sub Public MustOverride Sub Exec () Protected Overridable Sub SetParameters() 'nic Zakończ Sub Protected MustOverride Sub SetCommandText() Protected Override Sub SetCommandType() Command.CommandType = CommandType.StoredProcedure Zakończ Sub Protected Sub BuildCommand() Command.Connection = Połączenie Me.SetCommandText() Me.SetCommandType() Me.SetParameters() If Me .ProviderName = "Oracle.DataAccess.Client" Then OracleSpecificCommandEdits() End If End Sub Protected Overridable Sub OracleSpecificCommandEdits() CType(Command, OracleCommand).BindByName = True End Sub End Class In Common: druga klasa bazowa (mam oba wyszukiwania i wersja zapisu, z wersją zapisu opcjonalnie zezwalającą na transakcje). Public MustInherit Class AbstractSearch Dziedziczy AbstractDatabaseAction Protected Sub New(connString As String, providerName As String, messageF orExceptions As String) MyBase.New(connString, providerName, messageForExceptions) End Sub Public Overrides Sub Execute() Spróbuj Me.BuildCommand() Używając Connection.Open() Używając polecenia Try Dim rdr As IDataReader = Command.ExecuteReader Me.fill( rdr) rdr.Close() Catch ex As Exception Throw New Exception(MessageForExceptions & "->Search", np.) End Spróbuj End Using End Używanie Catch ex As Exception Throw New Exception(MessageForExceptions & "->Search", np.) Spróbuj End Sub Protected MustOverride Sub fill (ByRef rdr As System.Data.IDataReader) Protected Overrides Sub OracleSpec ificCommandEdits() MyBase.OracleSpecificCommandEdits() Jeśli TypeOf (Factory) to OracleClientFactory, to Dim p As DbParameter = Nowy OracleParameter p.ParameterName = "wyniki" p.Direction = ParameterDirection.Output CType(p, OracleParameter).OracleDbType = OracleCDbTypeor. .Parameters.Add(p) End If End Sub Protected Sub AddInParameter(klucz As String, wartość As Object) Dim p As IDataParameter = Command.CreateParameter p.Direction = ParameterDirection.Input p.Value = wartość p.ParameterName = klucz Polecenie. Parameters.Add(p) End Sub Protected Sub AddOutParameter(klucz As String, wpisz As System.Data.DbType) Dim p As IDataParameter = Command.CreateParameter p.Direction = ParameterDirection.Output p.DbType = wpisz p.ParameterName = klucz Command .Parametry.Dodaj(p) End Sub End Class Bardzo prosty przykład implementacji warstwy dostępu do danych: Public Class IpBlackListSearch Inherits Common.DataAccess.AbstractSearch Właściwość prywatna IPToSearch As String Wyniki właściwości publicznej As List(Of String) = Nothing Public Sub New(connString As String, providerName As String, ipAddressToSearch As String) MyBase.New(connString, providerName, "IpAddressSearch") Me.IPToSearch = IPToSearch End Sub Protected Overrides Sub fill(ByRef rdr As System.Data.IDataReader) Results = Nowa lista(Of String) While rdr .Read Results.Add(HelperFunctions.NullScrubber(Of String)("ip")) End While End Sub Protected Overrides Sub SetCommandText() Command.CommandText = "Get_IPBlacklist" End Su b Protected Overrides Sub SetParameters() MyBase.AddInParameter("in_ip", Me.IPToSearch) End Sub End Class Problem pojawi się, gdy w warstwie biznesowej mojego projektu zrobi coś takiego: Dim srch as new IpBlackListSearch(connstring, providername , "12.12.12.12.") srch.execute srch.Execute można skompilować tylko wtedy, gdy warstwa biznesowa odwołuje się do wspólnego zestawu dostępu do danych. Z komentarzy wynika, że nie ma nic złego w warstwie biznesowej zawierającej to odniesienie.


title: Wydajna implementacja Trie dla ciągów Unicode

text: Poszukiwałem wydajnej implementacji prób String. Przeważnie znalazłem taki kod: Implementacja referencyjna w Javie (na wikipedię) Nie lubię tych implementacji głównie z dwóch powodów: 1. Obsługują tylko 256 znaków ASCII. Muszę zakryć rzeczy takie jak cyrylica. 2. Są wyjątkowo niewydajne w zakresie pamięci. Każdy węzeł zawiera tablicę 256 odniesień, czyli 4096 bajtów na 64-bitowej maszynie w Javie. Każdy z tych węzłów może mieć do 256 podwęzłów, każdy z 4096 bajtami referencji. Tak więc pełne Trie dla każdego ciągu znaków ASCII 2 wymagałoby nieco ponad 1 MB. Trzy ciągi znaków? 256 MB tylko dla tablic w węzłach. I tak dalej. Oczywiście nie zamierzam mieć wszystkich 16 milionów trzyznakowych ciągów w moim Trie, więc dużo miejsca jest po prostu zmarnowane. Większość z tych tablic to po prostu odwołania zerowe, ponieważ ich pojemność znacznie przekracza rzeczywistą liczbę wstawionych kluczy. A jeśli dodam Unicode, tablice stają się jeszcze większe (znak ma wartości 64k zamiast 256 w Javie). Czy jest jakaś nadzieja na skuteczne wypróbowanie strun? Rozważałem kilka ulepszeń w stosunku do tego typu implementacji: * Zamiast używać tablicy referencji, mógłbym użyć tablicy typu pierwotnego typu integer, która indeksuje do tablicy referencji do węzłów, których rozmiar jest zbliżony do liczby rzeczywistych węzłów . * Mógłbym podzielić łańcuchy na 4-bitowe części, co pozwoliłoby na utworzenie tablic węzłów o rozmiarze 16 kosztem głębszego drzewa.


title: Strategia kontra delegaci

text: Czy wzorzec projektowy „Strategia” może całkowicie zastąpić „delegatów”? Na przykład w języku `Java` nie ma delegatów. Czy można uzyskać wszystkie funkcje „delegatów” za pomocą wzorca projektowego „Strategia”? **Edytuj** : Widzę, że moje pytanie jest dwuznaczne. Przez `delegatów` rozumiem cechę języka, na przykład C#.


title: Jak walczyć z roztargnieniem

text: Masz problemy z utratą koncentracji, ciągłym relaksem itp.? Jak rozwiązujesz ten problem? Na przykład, kiedy kodujesz lub uczysz się czegoś – rozumiesz, że to interesujące, ale jest też inna wola, by pójść i zrobić coś innego. Jak motywujesz się do dalszej pracy, gdy masz ochotę się rozproszyć?


title: Jakiego zadania powinienem się spodziewać na rozmowie kwalifikacyjnej w PHP?

text: Za kilka dni mam rozmowę o pracę (i tak, boję się tego). Praca opiera się na tworzeniu stron internetowych w PHP. Mam 3 lata doświadczenia z PHP i kilkoma innymi językami, ale mam dopiero 17 lat, więc jest to moja pierwsza rozmowa na temat komputera/programowania, jaką miałam. Szczerze mówiąc, to nie jest wielka organizacja/firma, więc nie sądzę, aby oczekiwania ankieterów były zbyt wysokie (prawda?).. Pracodawca wspomniał przez telefon, że zostanę poproszony o napisanie jakiś kod w wywiadzie. Rozejrzałem się i natknąłem się na słynne pytanie FizzBuzz, które uznałem za dość łatwe. Jestem bardzo zdenerwowany tym wywiadem i nie chcę go zepsuć. Czy ktoś może mi podać kilka przykładowych pytań, które zadałbyś programiście PHP podczas wywiadu. Albo jeszcze lepiej, jeśli byłeś w tej samej sytuacji, jakie zadania zostały wyznaczone?


title: Używanie JMeter z narzędziem, które nie obsługuje serwerów proxy

text: Obecnie sprawdzam niektóre oprogramowanie klienckie i serwerowe i chcę rozszerzyć zakres jego testowania. W szczególności chcę poprawić jakość wykonywanych testów obciążenia i warunków skrajnych, aby lepiej odzwierciedlały użytkowanie przez użytkownika. W tym celu przeglądałem JMeter, jednak napotkałem problem. W przeciwieństwie do przeglądarki internetowej klient nie obsługuje korzystania z serwera proxy. Stanowi to problem polegający na tym, że JMeter nie może monitorować komunikacji między dwoma systemami w celu zgromadzenia danych testowych. Być może JMeter przewiduje ten scenariusz, jednak w dokumentacji nie jest oczywiste, że jest do tego jakieś ułatwienie. Chociaż mam kilka pomysłów, jak do tego podejść, nie mogę być pierwszym, który napotkał ten problem, więc stawiam pytanie: jak najlepiej rozwiązać ten problem?


title: Obiekty w językach innych niż OOP

text: Czy możemy użyć słowa „obiekt” dla danych/funkcji np. C (lub Pascal), który tak naprawdę nie ma obiektów? Czym w C jest przedmiot? Struktura danych? Nazwany obszar pamięci? Rozmawiałem ze swoim kolegą o „obiektach” w C i powiedział, że nie ma żadnych, ale w tekście, który studiuję o C, słowo obiekt jest używane jako uogólnienie funkcji lub danych. Na przykład, jeśli w C zadeklarujesz `związek`, możesz powiedzieć, że zadeklarowałeś miejsce dla obiektu, który może być funkcją lub danymi. ADT zdefiniowany jako "Obiekt" wygląda tak w C typedef enum { Integral, Real } Kind; typedef struct { Rodzaj rodzaju; zjednoczenie { podwójna wartość r; int iwartość; } dane; } Obiekt; Dzięki za odpowiedź


title: Czy mogę używać Visual Studio do programowania w Pythonie i Django?

text: Od dłuższego czasu korzystam z Visual Studio, właściwie z wersji VS 2005. W tej chwili nie tylko czuję się komfortowo, ale jestem uzależniony od używania go (VS 2010) do wszystkich moich potrzeb programistycznych. Ostatnio uczę się Pythona i Django. Pod tym względem uruchamianie zadań samouczka z IDLE wydaje się bardzo kiepskie i przestarzałe (śledzę Księgę Django). Dlatego pobrałem i skonfigurowałem Eclipse & PyDev. Eclipse wydaje się być dobry i w porządku, ale sam potrzebuje trochę krzywej uczenia się. Tak więc szukam sposobu, aby skonfigurować Visual Studio 2010 dla programowania w Pythonie i Django, jeśli to możliwe. Proszę powiedz mi, czy to możliwe i jak?


title: Czy ma sens licencjonowanie testów jednostkowych?

text: Zastanawiam się, czy są jakieś korzyści/ryzyka z (nie)umieszczenia licencji na kod testowy, który w większości składa się z testów jednostkowych. Co myślisz? Szczególnie interesuje mnie licencjonowanie na (L)GPL, Apache, MIT i BSD. **EDYTUJ** : Założenie jest takie, że kod nietestowy jest już opublikowany na jakiejś licencji, ale kod testowy nie, więc pytanie brzmi, czy go opublikować, a jeśli tak, czy umieścić na nim tę samą licencję.


title: Czy potrzebuję testu jednostkowego, jeśli mam już test integracji?

text: Jeśli mam już test integracyjny do mojego programu i wszystkie zdały, to mam poczucie, że zadziała. W takim razie jakie są powody pisania/dodawania testów jednostkowych? Ponieważ i tak muszę już pisać testy integracyjne, chciałbym pisać test jednostkowy tylko dla części, które nie są objęte testami integracyjnymi. Wiem, że korzyści płynące z testów jednostkowych nad testami integracyjnymi są * Małe, a tym samym szybkie do uruchomienia (ale dodanie nowej jednostki do przetestowania czegoś jest już testowane przez test integracyjny oznacza, że mój kompletny zestaw testowy staje się większy i dłuższy do uruchomienia) * Łatwiejsza lokalizacja błędu, ponieważ testuje tylko jedną rzecz (ale mogę zacząć pisać test jednostkowy, aby zweryfikować każdą pojedynczą część, gdy mój test integracji nie powiódł się) * Znajdź błąd, który może nie zostać wyłapany w teście integracji. np. błędy maskowania/kompensowania. (ale jeśli moje testy integracyjne wszystko zakończą się pomyślnie, co oznacza, że mój program będzie działał, nawet istnieje jakiś ukryty błąd. Więc znalezienie/naprawienie tych błędów nie ma tak naprawdę wysokiego priorytetu, chyba że zaczną łamać przyszłe testy integracyjne lub powodować problemy z wydajnością) I zawsze chcemy pisać mniej kodu, ale testy jednostkowe zapisu wymagają dużo więcej kodu (głównie konfigurowanie obiektów makiety). Różnica między niektórymi moimi testami jednostkowymi a testami integracyjnymi polega na tym, że w testach jednostkowych używam pozorowanego obiektu, a w testach integracyjnych używam prawdziwego obiektu. Które mają dużo duplikacji i nie lubię zduplikowanego kodu, nawet w testach, ponieważ zwiększa to obciążenie przy zmianie zachowania kodu (narzędzie refaktoryzacji nie może wykonywać całej pracy przez cały czas).


title: Czy w TDD złą praktyką jest zdawanie testu z kodem, który zdałby więcej niż jeden test?

text: **Czy podczas korzystania z TDD złą praktyką jest zaliczenie nowo napisanego testu z kodem, który może również zaliczyć inny test?** Weźmy na przykład następujący test (w PHP) public function WhenSomethingIsNull_ThrowsException() { $input = null; $this->module->someMethod($input); } Można to zrobić za pomocą następującego kodu public function someMethod($input) { if(!$input) throw new Exception() } To również zaliczy test `WhenSomethingIsZero_ThrowsException`. Czy w takich przypadkach powinienem naprawić to, o czym wiem, że jest nie tak w tym teście na etapie refaktoryzacji? Czy może napisać tylko kod, który zda ten i tylko ten test?


title: Jak zarządzać zależnością sukcesu między testami jednostkowymi

text: Jak zarządzać zależnością jednego testu jednostkowego od pomyślnego zakończenia innego testu jednostkowego? Więc przypuszczam, że mam klasę i ta klasa ma powiedzmy 5 metod. Tworzę około 2 tuziny testów jednostkowych (metod testowych) dla tej klasy. każdy test jednostkowy testuje coś konkretnego i unikalnego - więc nic nie jest testowane dwa razy. Na przykład mam kilka testów jednostkowych, które sprawdzają, czy konstruktor klasy działa poprawnie. Może testowanie, czy Konstruktor nie zgłasza żadnych wyjątków i czy zgłaszany jest odpowiedni wyjątek, gdy nie są przekazywane żadne (prawidłowe) parametry. Inne testy jednostkowe mogą również korzystać z konstruktora (na etapie konfiguracji testu jednostkowego), ale nie należy ich sprawdzać, ponieważ istnieje inny test jednostkowy, który ma to zadanie. Teraz zaczynam refaktoryzację tej klasy i łamię niektóre testy jednostkowe. Klikam otwieram jeden test i jest to specyficzny test przypadków brzegowych, który jest dość skomplikowany. Trudno zobaczyć, co się dzieje i dlaczego. Gdybym najpierw otworzył test konstruktora, zobaczyłbym, że TO było problemem. Więc zmarnowałem swój czas. To prawda, w jednym pliku testu jednostkowego jest to trywialny przykład, ale w dużym zestawie testów, w którym zależności od sukcesu mogą obejmować granice plików, staje się to skomplikowane. Więc moje pytanie jest pierwsze: czy ten sposób testowania jednostkowego jest poprawny - najbardziej efektywny (nie testowanie tego samego wielokrotnie)? Następne pytanie brzmi: jak zarządzać tymi zależnościami sukcesu między testami jednostkowymi i jak upewnić się, że potrafisz wskazać przypadek testowy, który wyświetla „prawdziwy” problem (poprzez niepowodzenie).


title: Czy przeprowadzamy testy białej skrzynki na metodach, czy na całym programie?

text: Jestem bardzo zdezorientowany testowaniem białej skrzynki. Uproszczona wersja przykładu: cały system składa się z trzech metod - `methodA()`, `methodB()`, `methodC()`. Program zaczyna się od `methodA()`, a `methodB()` wymaga danych wejściowych od `methodA()`` a `methodC()`` wymaga danych wejściowych od metodyB()`. Czy tworzymy 3 testy białoskrzynkowe, po jednym dla każdej metody, czy tworzymy jeden test białoskrzynkowy dla całego systemu?


title: Jak ustrukturyzować testy, w których jeden test jest konfiguracją innego testu?

text: Testuję system **integracyjny**, używając tylko publicznych interfejsów API. Mam test, który wygląda mniej więcej tak: def testAllTheThings(): email = create_random_email() password = create_random_password() ok = account_signup(email, password) attach ok url = wait_for_confirmation_email() attach url ok = account_verify(url) attach ok token = get_auth_token(email, password) a = do_A(token) attach a b = do_B(token, a) attach b c = do_C(token, b) # ...i tak dalej... Zasadniczo próbuję przetestować cały „przepływ” pojedynczej transakcji. Każdy krok w przepływie zależy od następującego po nim poprzedniego kroku. Ponieważ ograniczam się do zewnętrznego API, nie mogę po prostu wbijać wartości do bazy danych. Tak więc albo mam jedną naprawdę długą metodę testową, która wykonuje `A; zapewniać; B; zapewniać; C; attach...", lub dzielę to na oddzielne metody testowe, gdzie każda metoda testowa potrzebuje wyników poprzedniego testu, zanim będzie mogła wykonać swoje zadanie: def testAccountSignup(): # itd. return email, password def testAuthToken() : email, hasło = testAccountSignup() token = get_auth_token(email, hasło) enter token return token def testA(): token = testAuthToken() a = do_A(token) # itd. Myślę, że to pachnie.Czy istnieje lepszy sposób na napisać te testy?


title: Jak mam przetestować funkcjonalność funkcji, która wykorzystuje w niej inne funkcje?

text: Załóżmy, że istnieje funkcja get-data, która zwraca mapę informacji o identyfikatorze przekazanego użytkownika. Teraz ta funkcja używa 3 funkcji source-a, source-b i source-c, aby uzyskać trzy różne rodzaje map. teraz łączymy wszystkie te mapy w jedną mapę i wracamy z get-data. kiedy testuję get-data, czy powinienem przetestować istnienie danych dla kluczy? Czy ma sens, aby ta funkcja kończyła się niepowodzeniem testów jednostkowych, jeśli jeden z source-a, source-b i source-c zawiedzie? Jeśli zadaniem tej funkcji jest łączenie danych i robienie tego, to powinno wystarczyć, prawda?


title: Implementacja TDD dla istniejącego kodu

text: Właśnie uczę się testowania jednostkowego i staram się zrozumieć, jak mogę włączyć je do projektu z istniejącym kodem. Powiedzmy, że chciałem napisać testy dla określonej klasy w tym projekcie, ale ta pewna klasa wymaga wystąpienia innej klasy, aby metody były uruchamiane i/lub testowane. Jak mam do tego podejść?


title: Czy potrzebuję zestawu testów jednostkowych dla wewnętrznej klasy logiki biznesowej? Ponieważ będzie replikować zestaw testów akceptacyjnych dla 90%

text: Jestem nowy w TDD i zastanawiam się nad metodologią. Biorąc pod uwagę: Prosty projekt, który implementuje funkcjonalność np. kalkulatora konsolowego. Ma następującą strukturę: 1. Dość prosta klasa najwyższego poziomu, która pobiera dane wejściowe konsoli, deleguje je do klasy logiki biznesowej i wyświetla dane wyjściowe w konsoli z pewnym wymyślnym formatowaniem. 2. Poprzednia klasa logiki biznesowej, która wykonuje wszystkie obliczenia i która jest stosunkowo złożona. Załóżmy również, że mamy ładny, dokładny zestaw testów akceptacyjnych dla całego projektu, który wykonuje się za pośrednictwem interfejsu użytkownika. Czy potrzebuję zestawu testów jednostkowych dla wewnętrznej klasy logiki biznesowej? Ponieważ będzie replikować zestaw testów akceptacyjnych w 90%. Dodatkowe, ale ściśle powiązane pytania: 1. Czy odpowiedź na pytanie pozostanie taka sama, jeśli na przykład uruchomienie zestawu testów akceptacyjnych zajmie 30 sekund? 5 minut? 1 godzina? 2. Jeśli wewnętrzna klasa logiki biznesowej nie jest jeszcze zaimplementowana, czy muszę napisać zestaw testów jednostkowych, aby pokierować jej rozwojem, czy też wystarczy pozostać tylko z testami akceptacyjnymi?


title: Wszystkie testy jednostkowe w jednym pliku wykonywalnym, czy rozdzielone?

text: Pisząc testy dla jednego oprogramowania, powiedzmy biblioteki, wolisz skompilować wszystkie testy jednostkowe w jeden, czy podzielić je na kilka plików wykonywalnych? Powodem, dla którego pytam, jest to, że obecnie używam CUnit do testowania biblioteki, nad którą pracuję. Testy są dzielone na oddzielne zestawy, które są kompilowane w jeden plik wykonywalny wraz z wydrukami dla błędów. Teraz systemem kompilacji dla tej biblioteki jest CMake (który pomimo swojej nazwy ma niewiele wspólnego z CUnit), który jest dostarczany z własnym frameworkiem testowym CTest. CTest pozwala mi zarejestrować listę plików wykonywalnych, które służą jako testy. Zastanawiam się, czy użyć CTest do automatycznych testów. Wymagałoby to jednak podzielenia testów, które do tej pory napisałem, na osobne cele kompilacji. W przeciwnym razie nie mogę wykorzystać niektórych zaawansowanych funkcji CTests, takich jak selektywne uruchamianie testów. Zdaję sobie sprawę, że jest to bardziej kwestia tego, jakich narzędzi użyć, ich obsługi i konwencji, ale poza tym, czy są jakieś inne powody, aby preferować pojedynczy test wykonywalny nad osobnymi? Lub odwrotnie?


title: Czy to przesada? Używanie zapytań i kostek MDX zamiast procedur składowanych SQL

text: Jestem nowym użytkownikiem modułów SQL Server Analysis Services i zapytań MDX firmy Microsoft. Tam, gdzie pracuję, mamy tabelę dziennej sprzedaży w SQL Server 2005, która zawiera już agregację informacji o sprzedaży na sklep na dzień. W tej chwili zawiera tylko 164 000+ wierszy. Mamy kostkę sprzedaży dedykowaną dla tej tabeli, na której bazuje około 15 raportów. Teraz powinienem również zauważyć, że generujemy raporty na podstawie naszych własnych kryteriów roku podatkowego: 13-okresowy rok (1 miesiąc to 28 dni itd.). Czy to przesada? W którym momencie uzasadnione jest rozpoczęcie używania SSAS Cubes/MDX zamiast zwykłych starych procedur składowanych SQL Server? Skoro zawsze używam zwykłego starego SQL, czy tragicznie spóźniłem się na imprezę MDX?


title: Przekazywanie nazw klas lub obiektów?

text: Mam przełącznik instrukcji switch ($id) { case 'abc': return 'Animal'; przypadek 'xyz': zwróć 'Człowiek'; //wiele więcej } Zwracam nazwy klas i używam ich do wywoływania niektórych ich funkcji statycznych za pomocą call_user_func(). Zamiast tego mogę również utworzyć obiekt tej klasy, zwrócić go, a następnie wywołać funkcję statyczną z tego obiektu jako $object::method($param) switch ( $id ) { case 'abc': return new Animal; przypadek 'xyz': zwróć nowy Człowiek; //wiele więcej } Który sposób jest wydajny? Aby poszerzyć to pytanie: mam klasy, które mają teraz w większości wszystkie metody statyczne, umieszczanie ich w klasach jest tu swego rodzaju pomysłem na grupowanie (na przykład struktura tabeli DB w Animal jest podana przez klasę Animal, a więc dla klasy Human). Potrzebuję dostępu do wielu funkcji z tych klas, więc przełącznik musi dać mi dostęp do klasy


title: Formatowanie kodu dla deklaracji zmiennych

text: Czy pisanie wielu deklaracji zmiennych w tym samym wierszu jest pogardliwe lub złe? Jak w: boolean playMoreGames = true; długość wewnętrzna; wygrana logiczna; int części ciała; zawiera wartości logiczne; znak puste = '-'; Słowo ciąg; Plik skaneraIn; Zgadnij ciąg; Klawiatura skanera = nowy skaner(System.in); vs (standard): boolean playMoreGames = true; wygrana logiczna; zawiera wartości logiczne; długość wewnętrzna; int części ciała; znak puste = '-'; Słowo ciąg; Zgadnij ciąg; StringBuilder sb_word; Plik skaneraIn; Klawiatura skanera = nowy skaner(System.in);


title: Ile czasu potrzebujesz pomiędzy dużymi projektami?

text: Rozpocząłeś duży projekt w pracy, coś, co jest w toku i zajmuje duże części twojego życia przez ponad 6 miesięcy. Skończyła się selekcja po uruchomieniu. Pomoc techniczna nie dzwoni do Ciebie co godzinę, ponieważ nie wie, jak rozwiązać problem. Twoje godziny spadają z 60+ tygodniowo do tego, co jest normalne w Twojej organizacji (co jest, miejmy nadzieję, mniej niż 60+!). Ile czasu potrzeba Tobie (lub Twojemu zespołowi) przed rozpoczęciem kolejnego dużego projektu? To pytanie zadano mi w pracy i myślę, że idealne minimum to dwa tygodnie – tydzień na oczyszczenie biurka i skrzynki odbiorczej + tydzień na oczyszczenie głowy i przypomnienie sobie, jak to jest mieć życie poza pracą. Szczerze przyznam, że samo pytanie o to pytanie jest ogromnym dobrodziejstwem dla równowagi między życiem zawodowym a prywatnym. Ale uważam, że możliwe jest _zbyt_ długie przerwy.


title: Jak mogę ulepszyć sposób wprowadzania zmian na stronie indeksu?

text: Mamy strony indeksowe, działające na serwerze Apache Tomcat, z linkami do innych stron. > Witaj, ty. Co chciałbyś robić? > > _Przejdź do strony x_ > > _Przejdź do strony y_ Te linki są zakodowane na stałe. Chcę mieć możliwość bardziej dynamicznego zarządzania stronami indeksowymi. Żebym nie musiał ściągać strony w dół, powodować tymczasowego przestoju, zmieniać/dodawać linków, a potem ponownie wdrażać. Jaką trasę powinienem wybrać?


title: Czysto wirtualny czy abstrakcyjny, co kryje się w nazwie?

text: Omawiając pytanie dotyczące funkcji wirtualnych na Stack Overflow, zastanawiałem się, czy istnieje oficjalne nazewnictwo czystych (abstrakcyjnych) i nieczystych funkcji wirtualnych. Zawsze polegałem na wikipedii, aby uzyskać informacje, które stwierdzają, że czyste i nieczyste funkcje wirtualne są ogólnym terminem. Niestety, artykuł nie zawiera kopii zapasowej pochodzenia ani referencji. Cytując odpowiedź Jona Skeeta na moją odpowiedź, że czysty i nieczysty to ogólny używany termin: > @Steven: Hmm... możliwe, ale widziałem to wcześniej tylko w kontekście C++ >. Podejrzewam, że każdy, kto o nich mówi, prawdopodobnie ma podłoże C++ > :) Czy terminy pochodzą z C++, czy też zostały zdefiniowane lub zaimplementowane we wcześniejszym języku i czy są „oficjalnymi” terminami naukowymi? AKTUALIZACJA: Frank Shearar dostarczył link do opisu języka SIMULA 67 Common Base Language (1970). Ten język wydaje się być pierwszym językiem, w którym wprowadzono słowa kluczowe OO jako _class_ , _object_ , a także **virtual** jako pojęcie formalne. **Nie** definiuje _czysty/nieczysty_ ani _abstrakcyjny_ , ale **obsługuje koncepcje**. Kto je zdefiniował?


title: czy Ada naprawdę odeszła?

text: * Czy ludzie nadal używają Ady -- (najczęściej używano jej w Departamencie Obrony) * Czy wszystkie aplikacje są napisane w Ada "Dziedzictwo"? * Czy wiedza Ady nadal się sprzedaje?


title: Czy nazywa się to instancją klasy lub obiektu?

text: Mam pytanie dotyczące sformułowania/precyzji. Czasami piszę _"instancja obiektu"_ czasami _"instancja klasy"_. Czy nie jest tak, że obiekt jest zawsze instancją klasy? Dlatego _"instancja obiektu"_ nie jest poprawnym sformułowaniem, prawda? Czy to w każdym razie powszechne, czy to tylko mój „błąd”? Mam wrażenie, że _"instancja obiektu"_ jest zbędna (podwojona), ponieważ _obiekt_ jest zawsze _instancją_ i chciałbym wiedzieć więcej w celu wyjaśnienia warunków.


title: Big O(n log n) i liczba operacji Quicksort

text: Mam tablicę z nieposortowanymi elementami `1.000.000`. Muszę obliczyć oczekiwaną liczbę operacji, które należy wykonać, aby posortować tablicę za pomocą algorytmu `Quicksort` w typowych sytuacjach (nie w najgorszym przypadku n^2). Nie jestem pewien, jak oblicza się „(n log n)” - czy ma to sens? Jeśli `(n log n)` = `(n*log(jakaś podstawa)n)` jaka podstawa byłaby dla `Quicksort`?


title: Jaki jest odpowiedni poziom granulacji dla usług w architekturze rozproszonej lub zorientowanej na usługi?

text: Nasz sklep stara się podążać w kierunku architektury bardziej „rozproszonej”. Nie chciałem używać terminu „SOA”, ponieważ nie jestem pewien, czy jest to właściwe w naszej sytuacji. Dla każdej nowej funkcji, która jest opracowywana, nowa usługa (w naszym przypadku WCF) jest tworzona specjalnie dla tej funkcji. Cechę definiuje się jako nową funkcjonalność, która może być zupełnie nową aplikacją lub nowym dodatkiem do istniejącego oprogramowania. W miarę dodawania kolejnych funkcji rośnie liczba usług, które musimy utrzymywać. Każda z tych usług jest hostowana w izolacji i uwidacznia swój własny punkt końcowy. Nie mam dużego doświadczenia z architekturą rozproszoną lub ogólnie z SOA, ale to po prostu źle. Czy jest lepszy sposób, żeby to zrobić? Czy zamiast posiadania oddzielnych usług dla każdej z tych funkcji bardziej sensowne byłoby logiczne pogrupowanie i konsolidacja niektórych z tych usług w jedną dużą usługę i zapewnienie „ujednoliconego” interfejsu API? A może coś takiego będzie rosło zbyt duże i stało się nieporęczne/kruche?


title: Czy odbicie w Javie sprawia, że jego funkcje są „pierwszej klasy”

text: Zawsze słyszę, jak ludzie mówią o tym, że Java nie obsługuje funkcji pierwszej klasy, że jest to zaleta języków funkcjonalnych, jedynym sposobem na symulację tego w Javie jest użycie anonimowych klas wewnętrznych itp. Jednak z czego Widzę, że Java obsługuje pierwsze funkcje poprzez użycie swojego interfejsu API. Na przykład mogę utworzyć obiekt metody z klasy, a następnie wywołać go na kilku obiektach tej klasy. Zdaję sobie sprawę, że nie jest tak potężny, jak funkcje pierwszej klasy w innych językach. Na przykład w Pythonie możesz wykonać następujące czynności: class Test: def __init__(self, num): self.number = numer def add(self, num): self.number += numer test = Test(1) method = test. add method(2) Nie możesz tego zrobić w Javie, ponieważ potrzebujesz referencji do obiektu, na którym chcesz wywołać metodę. Jednak nadal możesz traktować metodę jako obiekt, który definiuje funkcje pierwszej klasy. Przypuszczam, że obiekt metody nie jest tak naprawdę rzeczywistą funkcją, ale raczej obiektem metadanych, chociaż przy użyciu odbicia można go tak traktować. Może potrzebuję tylko wyjaśnienia, co definiuje funkcję pierwszej klasy.


title: Zalety klasycznego OOP w porównaniu z językiem podobnym do Go

text: Dużo myślałem o projektowaniu języka i o tym, jakie elementy byłyby niezbędne dla „idealnego” języka programowania, a studiowanie Google Go skłoniło mnie do zakwestionowania wielu innych powszechnie znanych wiedzy. W szczególności, Go wydaje się mieć wszystkie interesujące korzyści z programowania obiektowego, nie mając w rzeczywistości żadnej z _struktury_ języka zorientowanego obiektowo. Nie ma klas, tylko struktury; nie ma dziedziczenia klasy/struktury — tylko osadzanie struktury. Nie ma żadnych hierarchii, klas nadrzędnych, żadnych jawnych implementacji interfejsów. Zamiast tego reguły rzutowania typu są oparte na luźnym systemie podobnym do pisania kaczką, tak że jeśli struktura implementuje niezbędne elementy „Reader”, „Request” lub „Encoding”, to możesz go rzutować i używać jak jeden. Czy jest coś w OOP zaimplementowanym w C++, Javie i C#, co jest z natury bardziej wydajne, łatwiejsze w utrzymaniu, jakoś bardziej wydajne, z czego trzeba zrezygnować, przechodząc na język taki jak Go? Z jakich korzyści musisz zrezygnować, aby uzyskać prostotę, jaką reprezentuje ten nowy paradygmat? **EDYTUJ** _Usunięto „przestarzałe” pytanie, na które czytelnicy wydawali się być nadmiernie rozłączeni i rozwścieczeni._ Pytanie brzmi, co ma tradycyjny paradygmat obiektowy (z hierarchiami itp.), często spotykany w implementacjach wspólnego języka oferować, czego nie da się tak łatwo zrobić w tym prostszym modelu? Innymi słowy, jeśli miałbyś zaprojektować język dzisiaj, czy istnieje powód, dla którego chciałbyś uwzględnić pojęcie hierarchii klas?


title: Kiedy podejmujesz decyzję o tym, czy chcesz pracować dla nowej firmy, jakie są twoje łamacze umów?

text: Wiem, że omówiliśmy, jakie pytania należy zadać na temat firmy, zanim zdecydujesz się tam pracować. Ale co robisz z odpowiedziami? Innymi słowy, co uważasz za łamacza umów? Tj. co by cię tak przerażało w firmie, w której nie pracowałbyś, nawet gdyby wszystko inne było super? Na przykład, jeśli powiedzą mi, że nie używają kontroli wersji, nie pracowałbym tam. Koniec opowieści.


title: Walidacja formularzy i struktura plików

text: Mam formularz (powiedzmy formularz rejestracyjny) i onsubmit, wywołuje funkcję do walidacji w następujący sposób: $.ajax({url : "/ajax/validate.php", type : "POST", data : $(" .form").serialize(), success : function(data) { data = $.parseJSON(data); $.each(data, function(i, item) { $('#' + i).addClass(' błędy'); }); } }); Plik validate.php wygląda mniej więcej tak: if ($_POST['email'] == '' || filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) == false) { $errors['email'] = ' Nieprawidłowy adres e-mail”; } if ($błędy) { echo json_encode($błędy); } else { // insert to db } Teraz cały ten kod jest przeznaczony specjalnie dla formularza rejestracyjnego. W mojej witrynie będzie wiele formularzy. Moje pytanie brzmi, czy mam utworzyć nowy plik (jak `validate.php`) dla każdego indywidualnego formularza? Takich jak `/ajax/save_profile_data.php` itp.? Czy każdą walidację formularza trzymam osobno, czy istnieje sprytny sposób na podejście do tego? Nie wiem, czy posiadanie walidacji pliku dla każdego formularza w mojej witrynie jest właściwym sposobem, aby to zrobić.


title: Jaka jest zaleta formatu little endian?

text: Procesory Intel (i może kilka innych) używają formatu little endian do przechowywania. Zawsze się zastanawiam, dlaczego ktoś miałby chcieć przechowywać bajty w odwrotnej kolejności. Czy ten format ma jakąś przewagę nad formatem big endian?


title: Scrum: Co zrobić z eposami, gdy historie są jasne?

text: Pracując nad backlogiem, definiujesz eposy i dzielisz je na historyjki użytkowników. Epiki są szacowane i przechowywane w zaległościach jako epiki, dopóki nie staną się na tyle ważne, aby można je było zaplanować na jeden z następnych sprintów. Ale kiedy epos zostanie podzielony na jednostki nadające się do sprintu, co zrobić z oryginalną epopeją? Czy trzymasz to z historiami, dopóki wszystko się nie skończy? Czy przenosisz je na emeryturę do jakiegoś epickiego archiwum? Czy po prostu je usuwasz? Po zakończeniu rozłupywania wydają się niepotrzebnym balastem.


title: Sharding i przetwarzanie w chmurze

text: Czytałem, że Facebook wykorzystuje tę technikę DB sharding do zarządzania wolumenem danych i że idea przetwarzania w chmurze to elastyczne zasoby. Zastanawiam się więc, czy instancja w chmurze automatycznie zajmie się shardingiem? Czy nadal musisz wykonać tę część ręcznie? A jeśli musisz to zrobić ręcznie - to DB nie wydaje mi się zbyt elastyczne.


title: Jak zarabiać na darmowej aplikacji?

text: Komponenty, których używam, ograniczają mi sprzedaż aplikacji. Jakieś pomysły, jak jeszcze na tym zarobić? Widziałem kilka darmowych aplikacji, które ustawiają twoją stronę główną na jakiejś stronie, myślę, że zarabiają za to.


title: Jak utrwalać dane tymczasowe w wielu żądaniach HTTP?

text: W naszej aplikacji internetowej mamy listę pytań, na które użytkownik musi odpowiedzieć. Te pytania są podawane użytkownikowi pojedynczo i zostaną zapisane po udzieleniu odpowiedzi na ostatnie pytanie. Problem, z którym się zmierzyliśmy, polegał na zapisaniu wszystkich danych „pomocy” związanych z tym: przechowywanie indeksu ostatniego pytania, zwracanie, czy jesteś na ostatnim pytaniu, zwracanie odpowiedzi na pytania do przeglądu itp. Początkowo my przechowywał te dane w swojej własnej sesji. To zadziałało, ale oznaczało to również, że mieliśmy około 5 różnych zmiennych sesji dla każdego typu listy pytań i kilka rzutów. Usunąłem te zmienne sesji, tworząc kilka dodatkowych pól w viewmodelu i przechowując viewModel w całości wewnątrz sesji. To upewniło nas, że nasze tymczasowe dane zostały utrwalone podczas żądań (każde rozwiązane pytanie oznaczało nowe żądanie), usunęło wiele sesji i sprawiło, że kod był bardziej czytelny. Inny przykład użycia: nasz lokalny obiekt użytkownika jest nadpisywany przy każdym żądaniu, ponieważ jest uzyskiwany z repozytorium/kontekstu bazy danych, który jest ponownie tworzony przy każdym żądaniu (ninject). Oznaczało to również, że nie możemy po prostu przechowywać tymczasowej listy w naszym użytkowniku, która zawiera odpowiedzi na pytania, na które już udzielono odpowiedzi, ponieważ byłaby ona czyszczona przy każdym żądaniu. Korzystając z tego podejścia możemy zapisać tę listę w obiekcie sesji, zapisać ją lokalnemu użytkownikowi na początku metody akcji, wykonać akcję (zapisać nową odpowiedź), a następnie uzyskać tę listę i zapisać ją do modelu widoku. To trochę obejście, ale upewniło się, że możemy zachować te dane. Uważałem, że to przyzwoite rozwiązanie, ale teraz jeden z członków projektu (to projekt szkolny, który ma się odbyć jutro) wyraził swoje wątpliwości co do tej metody i powiedział, że jest to bardzo brudne rozwiązanie (jednak nie podano alternatywy). Używamy ASP.NET MVC 4. Czy podszedłem do tego we właściwy sposób? Jak powinienem był to inaczej rozwiązać?


title: Gdzie należy przeprowadzać walidację danych wejściowych w Erlangu?

text: Piszę moduł, który uruchamia skończoną maszynę stanową* na podstawie zawartości tablicy rekordów przekazanych podczas inicjalizacji. Każdy rekord opisuje stan i zawiera instrukcje dotyczące działania na wejściach (tj. w stanie „S1” wejście „I” wyzwala przejście do stanu „S2”). Aby FSM działał poprawnie, muszą istnieć stany przejściowe. Mój dylemat polega na tym, gdzie sprawdzać te przejścia. Defensywny programista we mnie mówi, aby zrobić to raz tak wcześnie, jak to możliwe, na przykład podczas inicjowania FSM. Oznacza to, że mogę zgłosić błąd, gdy po raz pierwszy otrzymam fałszywe dane i uniknąć zwrócenia procesu, który może później się nie powieść. Reszta implementacji nie będzie musiała być tak defensywna, ponieważ wiadomo, że tabela jest dobra, a wszelkie błędy, które Erlang zdecyduje się zgłosić, będą wynikiem implementacji, a nie karmieniem złymi danymi. Ułatwi to również debugowanie osobom korzystającym z modułu, ponieważ natychmiast otrzymają „badarg” lub coś innego, zamiast przeszukiwać moje źródła później, aby dowiedzieć się, że to ich błąd, a nie mój. Filozofia Erlanga wydaje się polegać na tym, że wszystko powinno działać tak długo, jak to możliwe, zawodzić tylko wtedy, gdy jest to konieczne i pozwolić przełożonemu zająć się zbieraniem kawałków. Z jednej strony ma to sens, ponieważ dany FSM mógłby działać w nieskończoność, nie napotykając danych wejściowych, które wymagałby złego przejścia. Z drugiej strony, późne niepowodzenie nakłada na rozmówców obowiązek pisania powtarzalnych testów dla czegoś, co jest dla mnie łatwe do jednorazowego zaimplementowania. Wiem, że większość zasad w tym biznesie nie jest sztywna i szybka, ale czy jedno podejście jest bardziej „Erlangy” niż drugie? Czy wczesna implementacja, która zakończyła się niepowodzeniem, wydawałaby się nie na miejscu, gdyby została wydana do użytku przez innych? * * * *Zdaję sobie sprawę z zachowania `gen_fsm` i że to, co robię, ma pewne niedociągnięcia. Jest to ćwiczenie uczenia się innych rzeczy, a FSM to coś, co je zawiera.


title: foreach na wielu listach jednocześnie

text: Czy są jakieś języki, które obsługują foreach na wielu listach jednocześnie? Coś takiego: foreach (string a w nazwach, łańcuch b w miejscach, łańcuch c w kolorach) { // rób różne rzeczy z a, b, c } Oczywiście, można to zrobić za pomocą zwykłej pętli for: for (int n = 0;n<max, n++) {a = nazwy[n]; b = miejsca[n]; c = kolory[n]; } ale to traci abstrakcję foreach. Moje skromne google-fu ujawnia tylko ludzi pytających, jak zrobić multi-foreach w różnych językach, które go nie obsługują. Zgaduję, że _jakiś_ język go używa, po prostu nie wiem, który.


title: Czy stanowiłoby to MVC - nawet w bardzo luźnym sensie?

text: Pracowałem nad czymś w rodzaju CRM dla sprzedawców w naszym biurze - nie jako praca, ale jako zadanie w wolnym czasie - nie twierdzę, że jestem programistą ani czymś w tym rodzaju, ale chciałbym zdecydowanie lubię kontynuować karierę jako programista stron internetowych, po prostu myślę, że potrzebuję znacznie silniejszego zrozumienia zasad OOP i wzorców projektowych, takich jak MVC, zanim będę mógł to rozważyć. Zasadniczo tak, jak ją opracowałem, każda sekcja aplikacji to strona html, która używa jQuery do nasłuchiwania zdarzeń, która następnie wysyła żądania ajax do serwera, które są następnie przekierowywane do metod klasowych, które wykonają zwykle proste zadania CRUD, i odeślij odpowiedź JSON do klienta, która zostanie następnie odzwierciedlona na stronie - czy stanowiłoby to mvc nawet w luźnym znaczeniu, ponieważ prezentacja jest całkowicie oddzielona od takich rzeczy, jak interakcja z bazą danych i istnieje między nimi interakcja? Tak jak mówię, jestem na bardzo wczesnych etapach radzenia sobie ze zrozumieniem MVC jako całości, więc wszelkie myśli będą mile widziane, dzięki.


title: Czy można używać PNaCl jako frameworka wtyczek?

text: Zamierzam zaprojektować niezwykle modułowy silnik gier, który pozwoli na przenośne wtyczki natywne, podobne do sposobu, w jaki PNaCl działa z chrome. Największymi czynnikami, których potrzebuję, byłyby: wieloplatformowość, sandbox i możliwość uruchomienia dowolnej liczby tych wtyczek w zależności od folderu, w którym się znajdują. Nie mogę mieć żadnego wewnętrznego kodu oczekującego wtyczki, wszystkie wtyczki będą zostanie dodany i dołączy do mojego własnego niestandardowego interfejsu API. Czy można w tym celu użyć PNaCl, a jeśli nie, jaka jest dobra alternatywa? Dotychczasowe badania: wiem, że PNaCl jest przenośny i bezpieczny (w trybie piaskownicy), ale nadal nie wiem, czy mogę załadować skompilowany PNaCl na podstawie tego, czy znajduje się w folderze. Nie widziałem żadnych przykładów tego używanych poza Google Chrome i nie wiem, czy można je rozdzielić.


title: Czy praca nad projektami open source i freelancer liczą się jako „świadczenie usług innej firmie”

text: Moja umowa wyraźnie stwierdza, że nie mogę świadczyć usług innej firmie. Chciałbym wiedzieć, czy praca nad projektami open source lub freelancer liczą się jako takie, ponieważ chciałbym pracować nad innymi projektami bez naruszania umowy. Freelancing może liczyć się jako świadczenie usług, ale czy praca z otwartym oprogramowaniem też się liczy?


title: Nauka Javy w kilka dni i przygotowanie prezentacji do rozmowy kwalifikacyjnej

text: Wiem, że nie można w pełni „poznać” lub „nauczyć się” Javy w ciągu kilku dni, ale naprawdę potrzebuję pomocy w tej sprawie. Właśnie ukończyłem studia na kierunku informatyka. Języki, w których powiedziałbym, że jestem „biegły” to: HTML/CSS/PHP. Mam rozmowę kwalifikacyjną w piątek i muszę przygotować prezentację oraz mieć 3 sprawdziany techniczne. Jest to młodsza rola programisty stron internetowych i wybaczam moją naiwność, ale nie zdawałem sobie sprawy, że Java była czynnikiem w tworzeniu stron internetowych, ponieważ na uniwersytecie zajmowałem się tylko HTML/CSS i PHP. **Szczegóły prezentacji:** Czas trwania 10 minut. Projekt: Porozmawiaj o projekcie, w który byłeś zaangażowany, z którego jesteś dumny \- Jaka była Twoja rola w projekcie? \- Jakich technologii używałeś? \- Czy coś poszło nie tak w projekcie i jak to rozwiązałeś? Czy ktoś ma jakieś wskazówki, wskazówki, co może czerpać z doświadczenia, aby mi pomóc? **Szczegóły techniczne testu:** \- 20 min Część 1: HTML/CSS Część 2: SQL Część 3: Java Numer 1 (HTML/CSS) Wszystko w porządku. Numer 2 (SQL) Mogę odnieść się do mojej wiedzy w MySQL, mam nadzieję, że nie będzie dobrze. Numer 3 (Java) WIELKIE Zmartwienia. Nie mam doświadczenia z Javą i nigdy wcześniej z nią nie pracowałem. Czy powinienem powiedzieć im na zaawansowanym poziomie, że nigdy wcześniej z nim nie pracowałem i że moją siłą jest PHP, który mam nadzieję, że można go zastosować w pracy i wezmę go dość szybko, czy po prostu nauczę się tyle, ile mogę w ciągu kilku dni i jak najlepiej. Dzięki za wszelką pomoc chłopaki


title: czy potrzebuję francuskiego zatwierdzenia zgodności eksportu, aby przesłać aplikację na iOS korzystającą z szyfrowania?

text: Moja firma właśnie (5 lipca 2011 r.) otrzymała następującą wiadomość e-mail od Apple: > Od pierwszego tygodnia lipca aplikacje spełniające następujące kryteria > muszą być zgodne z francuskimi przepisami/regulacjami dotyczącymi szyfrowania, jeśli zamierzasz > rozpowszechniać swoją aplikację w Francja. > > Wymóg ten dotyczy aplikacji, które używają, uzyskują dostęp, wdrażają lub > zawierają: > > (a) dowolny algorytm szyfrowania, który nie został jeszcze ujednolicony przez > międzynarodowe organy standaryzacyjne, takie jak IEEE, IETF, ISO, ITU, ETSI, 3GPP , TIA itp. lub nie > publikowane w inny sposób; lub > > (b) standardowy (np. algorytm(y) szyfrowania AES, DES, 3DES, RSA) zamiast > lub oprócz dostępu lub korzystania z szyfrowania w iOS i/lub Mac OS X > > Apple będzie wymagać prześlij kopię zatwierdzonej francuskiej deklaracji > podczas przesyłania aplikacji do App Store. > > Odpowiednie francuskie przepisy dotyczące szyfrowania można znaleźć na stronie: > > > http://www.legifrance.gouv.fr/affichTexte.do?cidTexte=LEGITEXT000005789847&dateTexte=#LEGIARTI000006421577 > > http://www.ssi.gouv.fr/ archive/fr/reglementation/regl_crypto.html >> http://www.ssi.gouv.fr/site_article195.html >> http://www.ssi.gouv.fr/site_article197.html >> Pozdrawiam >> Apple Zgodność eksportowa Przeszukałem internet, fora dla programistów itp. i nie mogę znaleźć ani jednego angielskiego opisu tego, co to dokładnie oznacza. W moim przypadku (podobnie jak wiele innych osób) korzystam tylko ze standardowych komponentów szyfrowania dostarczanych w iOS - czyli. https/SSL, AES itp., Nie wiem, czy muszę coś zrobić, czy nie (poza amerykańskim kodem ERN, który już ukończyłem). Obawiam się jednak, że opóźni to przesłanie mojej następnej wersji. Czy ktoś ma dodatkowe informacje/linki (lub mówi po francusku)?


title: Rozwiązujesz problemy programistyczne lub dodajesz kod?

text: Jakie są najlepsze umiejętności dla absolwenta uczelni? Czy należy spędzać godziny/dni próbując rozwiązywać problemy z koderem lub topcoderem, czy też dostarczać kod do organizacji open source? Moje osobiste doświadczenie mówi, że rozwiązywanie problemów uczy, jak tworzyć optymalny kod i uczyć się nowych technik programowania (które ktoś inny zbadał i udostępnił) w celu rozwiązywania problemów, podczas gdy wkład w open source uczy, jak organizować kod (aby inni mogli nad nim pracować ), używaj konwencji kodowania i używaj "prawdziwego" tego, czego się do tej pory nauczyłeś, bla bla!! Należy również zauważyć, że wiele firm zatrudnia dziś w oparciu o umiejętności rozwiązywania problemów (czy to jest coś, o co powinienem się martwić?) P.S. Niewiele zajmowałem się rozwiązywaniem problemów online i niewielkim wkładem w kod (poprzez GSoC), ale nie wiedziałem, co powinienem dalej robić (ponieważ robienie obu jednocześnie nie jest łatwe). Jestem na ostatnim roku studiów CS i chcę być wystarczająco dobry, zanim dostanę pracę.


title: Czy powszechną praktyką jest minimalizowanie użycia JavaScript podczas tworzenia strony internetowej?

text: Zajmuję się tworzeniem stron internetowych od prawie 10 lat i przyzwyczaiłem się nie używać JavaScriptu, kiedy tylko jest to możliwe. Nie mówię tutaj o tworzeniu aplikacji internetowych, ale o witrynach opartych na bazie danych. Czy to dobre/szanowane podejście?


title: Korzystanie z szablonowych pytań w rozmowie technicznej

text: Ostatnio kłóciłem się z kolegą o pytania techniczne w wywiadach. Jako absolwent chodziłem po wielu firmach i zauważyłem, że zadają te same pytania. Przykładem jest „Czy możesz napisać funkcję, która określa, czy liczba jest liczbą pierwszą, czy nie?”. 4 lata później uważam, że to konkretne pytanie jest dość powszechne nawet dla młodszego programisty. Może nie patrzę na to we właściwy sposób, ale czy software house nie powinien być wystarczająco inteligentny, aby wymyślać własne pytania do rozmowy kwalifikacyjnej? Jako absolwent byłem na około 16 rozmowach kwalifikacyjnych i te same pytania pojawiły się w około 75% z nich. To prowadzi mnie do przekonania, że wiele firm jest leniwych i po prostu Google: „Pytania o szablony do rozmów kwalifikacyjnych z programistami” i czuję, że takie podejście wyrządza sobie krzywdę. **Pytanie:** Czy lepiej jest użyć zestawu pytań z jakiegoś szablonu, czy też firmy programistyczne powinny starać się być bardziej oryginalne i tworzyć własne materiały do wywiadów? Z mojego punktu widzenia, jeśli oblałem rozmowę kwalifikacyjną i poszedłem szukać dobrych odpowiedzi na pytania, na których się pomyliłem, mógłbym przelecieć przez następny wywiad, jeśli pytania są takie same.


title: Czy projekt powinien zaczynać się od klienta czy od serwera?

text: Dość proste pytanie ze złożoną odpowiedzią. **Czy projekt powinien zaczynać się od klienta czy serwera i dlaczego?** Gdzie pojedynczy programista powinien rozpocząć projekt klient/serwer? Jakie są najlepsze praktyki i jakie są ich przyczyny? Jeśli nie możesz wymyślić żadnego, jakich powodów używasz, aby uzasadnić, dlaczego zdecydowałeś się rozpocząć jeden przed drugim? Osobiście zadaję to pytanie, ponieważ dopracowuję specyfikację projektu, który będę robił dla siebie na boku dla zabawy. Ale teraz, gdy kończę tę fazę, zastanawiam się "ok, teraz od czego mam zacząć?" Ponieważ nigdy sam nie robiłem takiego projektu, nie jestem pewien, od czego powinienem zacząć. W tym projekcie mój serwer będzie wykonywał wszystkie ciężkie prace, a klient będzie po prostu wysyłał aktualizacje, pobierał informacje z serwera i wyświetlał je. Ale nie chcę, aby to zachwiało odpowiedzią, ponieważ szukam bardziej dogłębnej i mniej konkretnej odpowiedzi, która miałaby zastosowanie do każdego projektu, który zacznę w przyszłości.