title: Co przetestować w tym projekcie?

text: Każdy programista opowiada się za programowaniem opartym na testach, ale ja koduję stronę internetową w NodeJS i nie testuję swojej aplikacji. To **nie**, ponieważ nie widzę powodu. Wiem, że pozwala mi to sprawdzić przy każdym commicie, czy mój kod jest poprawny, unikając w ten sposób luk w zabezpieczeniach. Nie robię żadnych testów, bo nie wiem jak i co testować. Zakodowałem aplikację MVC z ekspresem + mangusta + paszport i nie mam pojęcia, co testować ani jak testować. Wiem, że można kpić z ekspresowych próśb lub mongodb, ale nie uważam tego za czyste i elastyczne. Co więc i jak testować?


title: Preferowana metoda rejestrowania dokumentacji

text: Jak każdy uczony inżynier oprogramowania wie, jak ważna jest dokumentacja dla dobrych projektów oprogramowania. Czy możesz pokazać mi najlepsze praktyki, aby zapewnić dobrą dokumentację poza komentarzami JavaDoc? Moim zdaniem dokumentacja powinna zawierać nie tylko komentarze javadoc, aby zapewnić dobry, czytelny dla człowieka tekst dla przyszłych i obecnych programistów. Pomyślałbym, żeby zapewnić może jakiś papier lub wiki. Czy jest jakieś oprogramowanie, które pomaga w nagrywaniu dokumentacji poza standardowymi rozwiązaniami, takimi jak JavaDoc itp.


title: Czy automatyczne numerowanie programu SQL Server ponownie użyje wartości, jeśli rekord zostanie usunięty?

text: Tytuł w zasadzie mówi o tym. Jeśli mam kolumnę bigint z kluczem podstawowym i autonumerowaniem, a rekord zostanie usunięty, czy program SQL Server kiedykolwiek użyje tej teraz dostępnej wartości? Podstawowym problemem jest to, że mam środowisko wielu użytkowników, a jeśli pobieram rekord z bazy danych do pamięci, inny użytkownik wprowadza zmiany (takie jak usuwanie i/lub ponowne dodawanie), jeśli na tej podstawie dokonam aktualizacji lub usunięcia Identyfikator w pamięci, czy jest szansa, że mogę edytować rekord dodany w tle, który tak naprawdę nie reprezentuje rekordu, który powinienem edytować? Zdaję sobie sprawę, że mógłbym użyć Guids, ale naprawdę chciałbym wiedzieć, czy BigInt/Autonumber jest „bezpieczny” w tym scenariuszu. Dziękuję!


title: Wyszukaj podciąg w podanej tablicy ciągów

text: Mam tablicę n ciągów. Chcę zaznaczyć wszystkie elementy tablicy, która zaczyna się od podanego ciągu. Przepraszam, jeśli to nie jest jasne. Podam przykład. input = "as" array = ["abas", "aras", "as", "ask", "asi", "aso", "atas" ] output = ["as", "ask", "asi" , "aso"] Który algorytm będę potrzebować, aby dokonać tego wyboru. Potrzebuję najszybszego algorytmu, który wykona tę operację, ponieważ używam go do autouzupełniania w JavaScript. Tak więc wyszukiwanie powinno być szybsze niż szybkość pisania użytkownika. **Edytuj** : Właśnie myślałem o danych, które muszę wstępnie przetworzyć, jeśli używam struktury danych. Dane byłyby dynamiczne i musiałbym wykonać operację wstawiania tyle razy. Pobieram dane dynamicznie przy użyciu żądań AJAX. **Edytuj 2** : Tablica może zawierać 1 milion wpisów, a wyszukiwanie powinno odbywać się w dwóch miejscach. Jeden po stronie serwera, aby wybrać wszystkie elementy pasujące do warunku. To może być ograniczone do 10000 wpisów, a drugi po stronie klienta... rozmiar wyszukiwania to te 10000 wpisów, a to może być ograniczone do pierwszych 250 wpisów. Przepraszamy za późną edycję pytania.


title: Co oznacza bulgotanie w tym kontekście?

text: Ta strona zawiera następujące elementy: _Jeżeli chcemy zatrzymać zdarzenie (np. zapobiec jego domyślnej akcji i zatrzymać bulgotanie), możemy to zrobić za pomocą metody Event#stop rozszerzonego obiektu zdarzenia:_ $('foo').observe ('klik', function(event) { event.stop(); });


title: Serwer Continuous Build (cc.net, hudson, bamboo itp.)?

text: Obecnie używamy raz serwera cc.net do naszego procesu budowania, który buduje zarówno .net (używając msbuild & nant) jak i java (używając maven i ant). CC.net monitoruje kontrolę źródła i uruchamia zdalną kompilację działającą na osobnym serwerze. CC.net następnie zestawia wyniki. Kiedy uruchamiamy zdalną kompilację, zazwyczaj: * uruchamia nunit lub junit lub podobne, używając mockowanych danych * opcjonalnie uruchamia skrypt DB w celu utworzenia nowej instancji bazy danych lub przywrócenia bazy danych ze znanej pozycji. * uruchamia selenium lub podobny do testowego interfejsu użytkownika * uruchamia emma lub ncover w celu pokrycia kodu * buduje system dla różnych środowisk wdrożeniowych (testowe, akceptacyjne, produkcyjne) zespoły projektowe). Uruchamianie zdalnych kompilacji podczas tworzenia nowego projektu jest dość czasochłonne i uważamy, że musi być coś bardziej odpowiedniego do zdalnych kompilacji niż cc.net. Czy ktoś ma jakieś doświadczenie ze zdalnymi kompilacjami z systemami ciągłej integracji? Naprawdę nie chcę listy funkcji serwerów CI, bardziej doceniłbym to, jak używałeś ich w wielojęzycznym, wieloserwerowym środowisku.


title: Jako nowy programista, ile czasu powinienem poświęcić na naukę nowych bibliotek?

text: Jako młodszy programista, ile czasu powinienem poświęcić na skupienie się na nowych bibliotekach lub funkcjach języka, w przeciwieństwie do uczenia się, jak wszystko działało, zanim te biblioteki się pojawiły? Jak niebezpieczne jest poznanie tych bibliotek, zanim będę mógł zrozumieć szczegóły ich implementacji, a nawet w pełni docenić problemy, które rozwiązują? Pojawiło się to, gdy robiłem trochę badań nad rozszerzeniami reaktywnymi. Jedną z rzeczy, które wiem o zdarzeniach .NET i programowaniu asynchronicznym, jest to, że są one dość uciążliwe, więc mogę intuicyjnie wyczuć, co jest ekscytujące we frameworku, a nawet w niektórych przypadkach, w których nasz własny produkt prawdopodobnie mógłby na tym skorzystać. Ale nie spędziłem jeszcze dużo czasu z wydarzeniami lub ogólnie programowaniem asynchronicznym. Zauważyłem, że muszę sobie przypomnieć o takich rzeczach jak delegate, lambdy, a nawet jak wyglądają interfejsy IEnumerable i IEnumerator, zanim naprawdę będę mógł uzyskać koncepcje RX. To sprawia, że obawiam się spędzania czasu na nauce frameworka, z obawy, że tak naprawdę go nie zrozumiem, albo skończę, używając go niewłaściwie. Mam podobne odczucia co do LINQ, chociaż w tym przypadku chodzi raczej o nie do końca zrozumienie, jak jest zaimplementowane. Spędziłem wystarczająco dużo czasu z kolekcjami, aby zrozumieć i pokochać to, co LINQ może zrobić od razu po wyjęciu z pudełka, ale za mało czasu, aby zrozumieć, jak to robi lub najlepsze sposoby jego wykorzystania. Nie wiedząc, co dzieje się za kulisami, denerwuję się robieniem czegoś rażąco nieefektywnego lub po prostu głupiego. To sprawia, że myślę, że potrzebuję więcej czasu na podstawowe rzeczy, które doprowadziły do rozwoju tych bibliotek – ale to prowadzi mnie do myślenia, że prawdopodobnie uzyskam wyższy zwrot z inwestycji i bardziej pomogę mojemu zespołowi, jeśli poświęcę tak mało czasu musimy uczyć się nowych rzeczy, zapoznając się z rzeczami, które ułatwiłyby nam całe życie. Chociaż podchodzę do tego z perspektywy .NET, jestem pewien, że istnieją analogi na innych platformach. Myślę, że prawdziwe pytanie brzmi: czy możesz kiedykolwiek w pełni wykorzystać funkcję „zmiany paradygmatu” bez spędzenia czasu na przedzieraniu się przez stary paradygmat?


title: Czy Java dla Linuxa jest tym, czym .NET dla Windows?

text: Czy Java staje się de facto standardem w tworzeniu aplikacji dla Linuksa w taki sam sposób, w jaki .NET jest standardem w tworzeniu aplikacji dla Windows? Jeśli nie, dlaczego nie?


title: Co wysłać, gdy klient chce pobrać próbkę mojego kodu, aby przetestować moje cechy?

text: Wszyscy się z tym zmierzyliśmy. Aplikujesz do fajnego projektu i proszą Cię o przesłanie im fragmentu kodu. Na pierwszy rzut oka wygląda to dobrze i nie mam z tym problemu. Ale co mam im wysłać? Moje fajne narzędzie? Migawka konstrukcji w złożonym projekcie? Coś innego? Do tej pory próbowałem przekonać ich do udostępnienia pulpitu przez Skype i przeprowadzić ich przez kod i strukturę. Ale jakoś klientom nie podoba się takie podejście. Więc chciałbym usłyszeć twoje myśli.


title: Bazy danych testów jednostkowych: przetestować wszystkie możliwe permutacje odczytu i zapisu do tabeli?

text: Testuję klasę zarządzania zasobami, która współdziała z bazą danych lub systemem plików lub kombinacją obu. Zastanawiałem się, czy normą jest testowanie ** wszystkich możliwych permutacji ** odczytu i zapisu dla wszystkich kolumn zestawu danych, gdy zaangażowana jest baza danych. Mam na myśli: Tabela bazy danych przypadku testowego: +----------------------+--------------- -------+----------------------+------------------- ---+ | użytkownicy | +----------------------+----------------------+--- --------+----------------------+ | identyfikator_użytkownika | nazwa_użytkownika | user_email | rola_użytkownika | +----------------------+----------------------+--- --------+----------------------+ | 1 | Nowa nazwa | email@dostawca.com | 1 | +----------------------+----------------------+--- --------+----------------------+ | 2 | Inna nazwa | adres@domena.com | 1 | +----------------------+----------------------+--- -------------------+----------------------+ Mogę wyobrazić sobie coś innego, co pójdzie nie tak w warstwie abstrakcji, aktualizowanie pierwszego rekordu, ale żadnych innych, aktualizowanie drugiego rekordu, ale nie czwartego, lub jakiejkolwiek innej permutacji lub kombinacji. Czy normą jest pisanie testów na wszystkie te scenariusze (jeśli dobrze to przemyślę, byłoby to 4! = 24 przypadki, prawda)? Teraz, jeśli chcę pobrać kolumny, znowu mogę sobie wyobrazić, że coś pójdzie nie tak, tylko pobierając pierwszą i czwartą kolumnę, tylko trzecią lub wszystkie możliwe jej kombinacje. A co, jeśli pisanie i czytanie są pomieszane, najpierw odczyt, potem zapis, a potem odczyt. Może zapis do jednej kolumny, odczyt trzech kolumn, a następnie odczyt jednej lub jakakolwiek inna permutacja. Bardzo szybko pojawiają się potencjalnie tysiące przypadków testowych... Czy nad tym nie zastanawiam się i czy powinienem po prostu przetestować to, z czym faktycznie się spotykam, czy też normą jest zachowanie należytej staranności i przetestowanie tego wszystkiego. Pytam, ponieważ dostęp do bazy danych powoduje, że moje zestawy testowe wydłużają się w czasie wykonywania. Edycja: Jeśli nie było to jasne, nie próbuję testować, czy baza danych robi to, co powinna, ale czy moja warstwa abstrakcji zachowuje się zgodnie z przeznaczeniem.


title: Obsługa błędów - Jeśli program nie powiedzie się w przypadku błędów lub po cichu je zignoruje?

text: Piszę prosty, mały program do przesyłania danych MIDI przez sieć. Wiem, że program napotka problemy z transmisją i/lub inne sytuacje wyjątkowe, których nie będę w stanie przewidzieć. W przypadku obsługi wyjątków widzę dwa podejścia. Czy powinienem napisać program tak, aby: * zawodził z hukiem, gdy coś pójdzie nie tak **_lub_** * czy powinien po prostu zignorować błąd i kontynuować, kosztem integralności danych? Jakiego podejścia rozsądnie oczekiwałby użytkownik? Czy istnieje lepszy sposób obsługi wyjątków? Dodatkowo, czy moja decyzja dotycząca obsługi wyjątków powinna zależeć od tego, czy mam do czynienia z połączeniem sieciowym (tj. czymś, w przypadku którego mogę rozsądnie spodziewać się problemów)?


title: Co oznacza Prawo Jamiego Zawińskiego?

text: Potrzebuję odpowiedniego wyjaśnienia Prawa Oprogramowania Jamiego Zawińskiego: > Każdy program próbuje się rozszerzać, aż będzie mógł czytać pocztę. Te programy >, które nie mogą się tak rozwijać, są zastępowane przez te, które mogą.


title: Czy jest jakiś dobry powód, aby ktoś, kto zna Pythona, nauczył się Perla?

text: Czytając odpowiedzi na pytanie Python vs. Perl za dziesięć lat tutaj na SE, większość ludzi wydaje się mówić idź z Pythonem. Zgadzam się (przepraszam fanów Perla ;-) ). Znam już Pythona i myślę, że jest to bardzo dobry język, oczywiście, jak każdy język programowania, który _ma_ ma swoje wady, ale kiedy spróbowałem Perla, po prostu nie podobał mi się prawie tak bardzo, jak Python. "Znam" C, Python, Java i Scheme i bawiłem się kilkoma innymi językami. Czy jest jakiś dobry powód, żebym nauczył się Perla? **W czym Perl jest „lepszy” od Pythona?** Zajmuję się tworzeniem aplikacji (hobbystycznych) i uczę się również tworzenia niektórych systemów (głównie programowania dla jądra Linuksa). Jestem prawie pewien, że Perl nie różni się na tyle zasadniczo od tego, co znam do tej pory, aby za bardzo poszerzyć mój umysł (prawdopodobnie zrobiłbym to lepiej, skupiając się na Haskell, Scala, Forth lub czymś podobnym w tym celu).


title: Rozpoczęcie tworzenia projektu w C++

text: Studiuję inżynierię oprogramowania, aw tym roku nowe stowarzyszenie na mojej uczelni otwiera klub robotycznych łodzi podwodnych. To nowy klub i potrzebowali oprogramowania do manipulacji mikrokontrolerami, wyjściami gui i innymi wymaganiami dotyczącymi oprogramowania. Zostałem przyjęty do klubu i na razie nic nie zostało ustalone. Chociaż język może nie mieć znaczenia na wyższym poziomie, pracujemy w C++ pod systemem UNIX. Ponieważ muszę założyć bazę, chciałbym mieć wkład od osób z doświadczeniem w rozpoczynaniu dużych projektów z myślą o współpracy. Oczywiście chcemy, aby to się ładnie skalowało przez lata i mieć solidne API dla przyszłych studentów, które zastąpią starszych. Aby moje pytanie było bardziej precyzyjne, szukam wskazówek, jak to skonfigurować i być może książek, które mogą mi pomóc. Czuję się komfortowo w implementacji w C++ i zrobiłem też kilka analiz i kursów koncepcyjnych OO. Po prostu nigdy nie miałem okazji wystartować w czymś większym niż 2-3 osobowa grupa z SVN. Nie wiem też, czy istnieje podobny system JUnit i być może system obsługi, który działa dobrze dla C++, który mógłbym skonfigurować dla zespołu (użyłem mavena z tracem w Javie). To szansa dla mnie i dla innych, ponieważ mamy zieloną flagę na korzystanie z najnowszych technologii i najlepszych praktyk, więc chciałbym to wykorzystać i dowiedzieć się kilku rzeczy o zarządzaniu oprogramowaniem, których normalnie bym się nie nauczył. firma z systemem już wdrożonym.


title: Czy najlepszą praktyką jest posiadanie pliku tylko „zawiera/wymaga”?

text: Mam 5-10 plików na jednym serwerze, które przechwytują żądania XMLRPC-PHP. W każdym z nich jest około 20 wierszy „require_once”, które są takie same. Ułatwiłoby mi życie, gdybym utworzył osobny plik, który zawiera tylko „wymaga” i „wymaga”, które znajdują się w moich plikach XMLRPC. Czy jest to najlepsza praktyka, czy otwiera problemy, o których nie wiem?


title: Czy mogę rozpowszechniać oprogramowanie typu open source, które używa składni/interfejsu zastrzeżonego programu (Stata)?

text: Stata to autorski program statystyczny używany głównie przez ekonomistów. Chcę napisać podstawowy pakiet regresji wielokrotnej, który używa tych samych poleceń co Stata, np. `regress var1 var2 var3, robust if var4[_n - 1] < .` Czy jest legalne (w USA) rozpowszechnianie kodu źródłowego, który nie to na licencji open-source? Innymi słowy, czy jakakolwiek ochrona IP dotyczy składni poleceń używanej przez oprogramowanie zastrzeżone?


title: Jeśli istota jest złożona, czy nadal jest boskim obiektem?

text: Pracuję nad systemem do konfiguracji sprzętu. Niestety, sprzęt jest bardzo zróżnicowany, co oznacza, że istnieje wiele różnych możliwości i konfiguracji w zależności od tego, z jakim sprzętem łączy się oprogramowanie. Aby sobie z tym poradzić, używamy projektu Component Based Entity, w którym sama klasa „sprzętowa” jest bardzo cienkim kontenerem dla składników, które są tworzone w czasie wykonywania na podstawie dostępnych możliwości/konfiguracji. Działa to świetnie, a sam projekt działał dobrze w innych miejscach (szczególnie w grach). Problem polega na tym, że **wszystko**, co robi to oprogramowanie, to konfiguracja sprzętu. W związku z tym _prawie cały_ kod jest składnikiem instancji sprzętowej. Podczas gdy konsument zawsze działa tylko przeciwko silnie typizowanym interfejsom komponentów, można argumentować, że klasa reprezentująca instancję sprzętu jest obiektem Boga. Jeśli chcesz coś zrobić ze sprzętem, odpytujesz interfejs i pracujesz z nim. Tak więc, nawet jeśli komponenty obiektu są modularne i dobrze oddzielone, czy ich pojemnik jest boskim obiektem i wadami związanymi z anty-wzorcem?


title: Dlaczego nie jest standardem implementacja warstw abstrakcji dla systemu plików?

text: Zostałem nauczony dostępu do baz danych poprzez warstwy abstrakcji. Zastanawiałem się, dlaczego nie jest również standardową praktyką dostęp do systemu plików przez warstwę abstrakcji? Wydaje mi się, że testowanie jednostkowe stałoby się znacznie prostsze, ponieważ mocowanie systemu plików jest często uciążliwe i słabo obsługiwane przez niektóre języki.


title: Najlepszy sposób na zmianę nazw istniejących unikalnych nazw pól w bazie danych?

text: Mam tabelę bazy danych, która zawiera `id, filename, userId` * id to unikalny identyfikator * nazwa pliku również powinna być unikalna * tabela może zawierać >10000 rekordów > Kiedy użytkownik przesyła plik, należy go wpisać do bazy danych z podanymi > regułami: 1. Jeśli nie ma rekordu o tej samej nazwie pliku, należy go _dodać tak, jak jest_ (np. **foobar.pdf** ) 2. Jeśli istnieje _rekord o tej samej nazwie_ pliku_, należy go _dodać jako uploadedName(2).ext_ ( **foobar(2).pdf** ) 3. Jeśli istnieje n rekordów o tej samej podstawowej nazwie pliku ( _foobar_ ), należy go _dodać jako uploadedName(n+1).ext_ ( **foobar(20).pdf* * ) 4. Teraz, jeśli _foobar(2).pdf_ jest przesyłany, powinien zostać dodany jako **foobar(2)(2).pdf** itd. > Należy postępować zgodnie z tym wzorcem, ponieważ plik jest już przesyłany > po stronie klienta przy użyciu ajax przed wysłaniem szczegółów do serwera i pliku > usługa hostingowa stosuje się do powyższych zasad, aby nazwać pliki. * * * _**Moje rozwiązanie:_** 1. Utrzymuj plik, który zawiera wszystkie nazwy i liczbę wystąpień. 2. jeśli wprowadzono nazwę pliku istniejącą w pliku, zwiększ liczbę wystąpień i zostanie wygenerowana nowa nazwa, w przeciwnym razie dodaj ją do pliku 3. jeśli nowa wygenerowana nazwa znajduje się w bazie danych, dodaj ją do pliku i wygeneruj nową nazwę


title: Jak mam sobie poradzić z ukończoną historyjką użytkownika, ale z kompromisem i koniecznością ponownego przejrzenia?

text: Właśnie wypełniłem (czy to dobry termin?) dwie historyjki użytkowników z nowego backlogu, który właśnie zbudowałem. Są to rejestracja użytkownika i resetowanie hasła, które wymagają poczty. Muszę zaimplementować zastępczy składnik poczty, ponieważ mój początkowy wybór, zwykle niezawodny, nie działał. Ponieważ skupiałem się na dostarczaniu historyjek użytkownika, a nie na debugowaniu komponentu poczty, zamieniłem go, aby dostarczyć działający kod na końcu sprintu. Czy mam teraz rejestrować nowy problem dotyczący pomocy technicznej dla programu pocztowego, czy też „ponownie wstawić” te historie do zaległości? Jeśli zrobię to drugie, czy nie wprowadzam zbyt wielu szczegółów technicznych do historyjek użytkowników?


title: algorytm windy i implementacja

text: Chciałem wiedzieć, jak działają (prawdziwe) windy. Ale do tej pory nie mogłem znaleźć wiele materiałów na temat algorytmów, których używają, ani oprogramowania (jeśli istnieje) do symulacji. Czy ktoś mógłby mi dać referencje?


title: Czy istnieje jakiś standard wymiany reguł, a nie danych?

text: Z czystej ciekawości. Istnieje wiele otwartych standardów wymiany danych, a także standardów wymiany kodu (np. jsonp). Ale czy są jakieś standardy wymiany formuł/reguł, aby były one realizowane na różnych platformach?


title: Czy podążanie za TDD nieuchronnie prowadzi do DI?

text: Nauczyłem się jednocześnie wykonywać Test Driven Development (TDD), Dependency Injection (DI) i Inversion of Control (IoC). Kiedy piszę kod przy użyciu TDD, zawsze używam DI w konstruktorach mojej klasy. Zastanawiam się, czy to z powodu tego, jak nauczyłem się robić TDD, czy jest to naturalny efekt uboczny TDD. Więc moje pytanie brzmi: Czy podążanie za zleceniodawcami TDD i pisanie testów jednostkowych, które nie zależą od usług zewnętrznych, nieuchronnie prowadzą do DI?


title: Najlepsze narzędzie do prywatnego udostępniania kodu członkom zespołu?

text: Zajmuję się projektowaniem stron internetowych jako freelancer i mam kilkuosobowy zespół. Zastanawiałem się, jakie jest najlepsze narzędzie (najlepiej darmowe) do dzielenia się kodem z innymi członkami zespołu, zezwalania im na edycję itp. Sposób na płynną pracę nas wszystkich.


title: Kodeks i własność intelektualna

text: Lata temu stworzyłem stronę we Flashu dla jednego z moich klientów. Byłem odpowiedzialny za kod/animację, a także utrzymanie hostingu i domeny. Mam też podstawową umowę z moim klientem i w umowie nie ma wzmianki, kto jest właścicielem kodu. Mój klient (były klient) nagle zdecydował się na współpracę z inną firmą, więc przeniósł stronę bez mojej zgody i pozostawił mi niezapłacone rachunki za hosting i rejestrację domeny. Teraz strona działa pod tą samą nazwą, ale z innym rozszerzeniem, stroną zarządza mój konkurent. Druga firma prawdopodobnie użyła jakiegoś dekompilatora SWF i przesłała całą witrynę na nową domenę. Moje pytanie: * Nawet jeśli w naszej umowie nie jest wymienione, kto jest właścicielem kodu/strony, chciałbym wiedzieć, czy mam jakieś prawa do opracowanego przeze mnie kodu/strony? * Czy masz teraz jakieś międzynarodowe regulacje w tej sprawie (jestem w Europie)? Jeśli chcesz, podziel się swoją opinią lub podobną historią na ten temat, będę wdzięczny.


title: Czy programowanie funkcjonalne jest po prostu inne, czy rzeczywiście jest naprawdę trudniejsze?

text: Czy programowanie funkcjonalne jest po prostu _inne_ , czy rzeczywiście jest _twardsze_? Powiedzmy, że ktoś, kto nigdy wcześniej nie uczył się programowania i uczy się programowania funkcjonalnego. vs ktoś, kto nigdy wcześniej nie uczył się programowania i jest uczony programowania w trybie imperatywnym. co uzna za trudniejsze? czy to samo? Moje pytanie: powiedzmy, że problem polega na tym, że wejście w kształcie wielbłąda jest takie, że `qwe_asd_zxc_rty_fgh_vbn` staje się `qweAsdZxcRtyFghVbn` Sposób proceduralny to: 1. Podziel go wzdłuż `_` 2. Przeprowadź pętlę przez tablicę z pominięciem pierwszego elementu 3. dla każdego wpisu zaczynamy wielką literę 4. łączymy wyniki razem Funkcjonalny sposób jest: 1. jeśli nie można znaleźć `_` zwróć `input` 2. odetnij `input` wzdłuż pierwszego `_` (tak, że otrzymamy ` qwe` i `asd_zxc_rty_gfh_cvb`) 3. pierwszą literę słowa `head` i połącz z `f(tail)` OK, jeśli masz _funkcjonalne-tło_ ORAZ masz duże doświadczenie w programowaniu proceduralnym, chciałbym zapytać: czy zajmie Ci więcej czasu, aby znaleźć sposób proceduralny, czy też zajmie Ci więcej czasu, aby znaleźć sposób funkcjonalny? Jeśli masz _zaplecze proceduralne_, ale masz wieloletnie doświadczenie w programowaniu funkcyjnym, chciałbym zadać to samo pytanie: czy zajmie Ci więcej czasu, aby znaleźć sposób proceduralny, czy też zajmie Ci więcej czasu droga?


title: Czy ktoś wie o webs.com?

text: Mam znajomego, który stworzył stronę internetową z web.com, która nazywała się freewebs.com. Za ich pośrednictwem zarejestrował również swoją nazwę domeny. Czy tezy są jednym z tych niebezpiecznych miejsc, od których należy trzymać się z daleka, czy na razie będzie dobrze?


title: Metoda serwisowa używana do przesyłania dużych porcji danych

text: Muszę być w stanie zapewnić usługę internetową, aby przesyłać duże ilości danych, które byłyby tak duże, jak 10 000 wierszy 950 bajtowych rekordów, czyli 9,5 MB. Otrzymałem poradę, że nie powinienem korzystać z usług internetowych (aspx), ponieważ MS odrzucił to, a także powiedziano mi, że usługi WCF nie są przeznaczone do użytku w tym celu (chociaż wydaje się to dziwne). FWIW, próbowałem zarówno WS, jak i WCF i napotkałem problemy z rozmiarem i chociaż niektóre rozwiązania twierdzą, że to naprawią, nie znalazłem żadnych ustawień w obu przypadkach, które umożliwiłyby mi przesłanie czegokolwiek większego niż 4 MB. Pytanie brzmi, jeśli nie WS, a także nie WCF, to co jeszcze jest? Próbuję zastąpić wiele różnych aplikacji, z których wszystkie używają FTP do przesyłania danych do systemu księgowego na komputerze mainframe, więc na to pytanie FTP nie jest odpowiedzią. Chyba że odpowiedź brzmi, że muszę zrezygnować z rozwiązania opartego na usługach i pozostać przy FTP.


title: Czy mogę połączyć mój kod JavaScript z kodem licencjonowanym przez MIT i zachować mój kod bez wpływu na licencję MIT?

text: Czy mogę połączyć mój zastrzeżony kod JavaScript z licencjonowanymi bibliotekami MIT (np. JQuery, AngularJS) w tym samym pliku, rozpowszechniać go przez HTTP, ale zabronić moim użytkownikom używania własnego kodu jako kodu licencjonowanego przez MIT? W ten sposób mogłem zminimalizować liczbę żądań przeglądarki i zredukować błędy spowodowane błędami sieci. Nie chcę, aby moi użytkownicy kopiowali, modyfikowali i ponownie wykorzystywali mój kod poza moją witryną.


title: Czy istnieje jakaś wartość w pisaniu testów jednostkowych dla kodu, który już działa podczas dziedziczenia aplikacji?

text: Oczywiście niektóre stare aplikacje nie mogą być lub są niezwykle trudne do testowania jednostkowego ze względu na sposób, w jaki zostały napisane. Ale w niektórych miejscach, takich jak niektóre metody pomocnicze, które prawdopodobnie mogłyby być testowane jednostkowo, czy powinienem zawracać sobie głowę pisaniem dla nich testów jednostkowych? To znaczy, można by je napisać jak pies, ale jakkolwiek zawiła, krucha logika, próba czasu udowodniła, że działa tak, jak powinna. Czy powinienem zawracać sobie głowę testem jednostkowym tylko wtedy, gdy mówię o refaktoryzacji, czy powinienem pisać dla nich testy jednostkowe, gdy tylko mam czas? Czy jest w tym jakaś wartość? Weź również pod uwagę, że definicja metody może być niejasna i być może będę musiał zbadać, co niektóre z metod powinny faktycznie robić w danych warunkach.


title: Preferowana lokalizacja instalacji podręczników użytkownika, przykładowych dokumentów w systemie Windows?

text: Domyślnie instalator mojego produktu kopiuje pliki do katalogu **Users\Username\AppData\local\MyProduct** (chociaż użytkownik może to oczywiście zmienić podczas instalacji). Chcę dołączyć kilka innych plików do produktu - dokumentację, przykładowe arkusze kalkulacyjne (zawiera dodatek Excel) itp. Nie wydaje się właściwe kopiowanie tych dodatkowych plików do **AppData**, ponieważ jest to ukryty folder, który użytkownicy powinni naprawdę nie mam z tym nic wspólnego. Mógłbym oczywiście utworzyć nowy podfolder w katalogu Dokumenty użytkownika i umieścić tam pliki, ale ponieważ nie poprosiłem ich o zgodę na to, wydaje się to niegrzeczne. A więc - jakieś sugestie dotyczące łatwo dostępnej lokalizacji, w której można umieścić te pliki?


title: Czy licencje MSDN można przenosić? Co powiesz na to, że wygasły?

text: Mam współpracownika, który prawdopodobnie wkrótce odejdzie z firmy. Zakupiono dla niego subskrypcję msdn (chyba Premium) - ale sądzę, że było to ponad rok temu. Czy ta licencja może zostać przeniesiona na mnie, kiedy odejdzie z firmy?


title: Znalezienie najniższej średniej odległości Hamminga, gdy kolejność strun ma znaczenie

text: Mam sekwencję ciągów binarnych, dla której chcę znaleźć dopasowanie wśród zestawu dłuższych sekwencji ciągów binarnych. Dopasowanie oznacza, że porównywana sekwencja daje najniższą średnią odległość Hamminga, gdy wszystkie elementy w krótszej sekwencji zostały dopasowane do sekwencji w jednym z dłuższych zestawów. Spróbuję wyjaśnić na przykładzie. Mam zestaw klatek wideo, które zostały zahaszowane przy użyciu percepcyjnego algorytmu mieszającego, dzięki czemu klatki wideo, które wyglądają tak samo, mają mniej więcej ten sam skrót. Chcę dopasować krótki klip wideo do zestawu dłuższych filmów, aby sprawdzić, czy klip jest zawarty w jednym z nich. Oznacza to, że muszę dowiedzieć się, gdzie sekwencja zahaszowanych klatek w krótkim filmie ma najniższą średnią odległość Hamminga w porównaniu z długimi filmami. Krótkie wideo to podciągi Sub1, Sub2 i Sub3 i chcę je dopasować do skrótów długich filmów w Src. Wskazówką jest to, że ciągi muszą pasować w określonej kolejności, w jakiej są podane, np. że Sub1 zawsze musi pasować do elementu przed Sub2, a Sub2 zawsze musi pasować do elementu przed Sub3. W tym przykładzie mapowałby w ten sposób: Sub1-Src3, Sub2-Src4 i Sub3-Src5. Pytanie więc brzmi: **czy istnieje algorytm znajdowania najniższej średniej odległości Hamminga, gdy kolejność porównywanych elementów ma znaczenie?** Naiwne podejście do porównywania sekwencji podciągów z każdym ciągiem źródłowym oczywiście go nie wytnie, więc potrzebuję czegoś, co najlepiej może dopasować (znacznie) krótszy podciąg do zestawu milionów elementów. Patrzyłem na drzewa MVP, drzewa BK i tym podobne, ale wszystko wydaje się uwzględniać tylko jeden ciąg binarny, a nie ich sekwencję. Sub1: 100111011111011101 Sub2: 110111000010010100 Sub3: 111111010110101101 Src1: 001011010001010110 Src2: 010111101000111001 Src3: 101111001110011101 Src4: 010111100011010101 Src5: 001111010110111101 Src6: 101011 dodanych przykładów. (Odległości Hamminga nie są prawidłowe, ale to nie ma znaczenia) **Run 1.** dist(Sub1, Src1) = 8 dist(Sub2, Src2) = 10 dist(Sub3, Src3) = 12 średnia = 10 **Uruchom 2.** odst(Pod1, Src2) = 10 odst(Pod2, Src3) = 12 odleg(Pod3, Src4) = 10 średnia = 11 **Uruchom 3.** odst(Pod1, Src3) = 7 odleg (Sub2, Src4) = 6 dist(Sub3, Src5) = 10 średnia = 8 **Run 4.** dist(Sub1, Src3) = 10 dist(Sub2, Src4) = 4 dist(Sub3, Src5) = 2 średnia = 5 Więc zwycięzcą jest tutaj ciąg 4 ze średnią odległością 5.


title: jaki jest skuteczny sposób na znalezienie powtarzania dziesiętnego

text: Próbuję znaleźć wydajny algorytm w Javie, aby znaleźć powtarzającą się część dziesiętną dwóch liczb całkowitych `a` i `b`, gdzie `a/b`. np. 5/7 = 0,714258 714258.... Obecnie znam tylko metodę długiego dzielenia.


title: Jak przekonać dział IT do złagodzenia ustawień antywirusa na moim komputerze?

text: W Worku dostałem całkiem przyzwoity laptop. Naprawdę myślałem, że pomoże to przyspieszyć rozwój, zwłaszcza czasy budowy i tym podobne. Problem polega na tym, że nasza firma uruchamia program antywirusowy McAfee i spowalnia moją maszynę do zatrzymania. Mój dysk twardy jest prawie zawsze aktywny, nawet gdy nic nie robię. Wygląda na to, że robi coś w rodzaju skanowania w czasie rzeczywistym. Nie mam w domu żadnego programu antywirusowego i od lat nie miałem żadnych problemów, ponieważ wiem, że nie powinienem robić niczego głupiego, jak pobieranie załączników, których się nie spodziewam itp. Ponadto zapora korporacyjna jest dość surowa, więc uważam, że sprawiłoby to, że nawet trudniej zdobyć wirusa. Jak przekonałbyś dział IT do złagodzenia ustawień AV? edit: Jak wiele osób zauważyło, szansa na zmuszenie ich do wyłączenia jest niewielka lub nie, więc zmieniłem temat z ustawień wyłączania na relaksujące.


title: Sposoby oznaczania zmian dokonywanych w pliku

text: Szukam lekkiego sposobu na zapisanie zmian dokonanych w pliku. Oczywistą odpowiedzią na to pytanie jest system kontroli wersji. Ale to jest bardziej solidne niż jest to konieczne do tego, co chciałbym zrobić. Wszystko, czego chcę, to funkcja umożliwiająca łatwe porównywanie edytowanego pliku z jego oryginałem.


title: jak radzić sobie z mutacjami kontrolerów

text: Podczas procesu rozwoju rzeczy ciągle się zmieniają (zwłaszcza we wczesnych fazach). Zmieniają się wymagania, zmienia się interfejs użytkownika, wszystko się zmienia. Strony, które ewidentnie należały do konkretnego kontrolera, w przyszłości zmieniły się w coś zupełnie innego. Na przykład. Powiedzmy, że mamy stronę internetową do zarządzania projektami. Jedna strona serwisu poświęcona była zarządzaniu istniejącymi oraz zapraszaniu nowych członków konkretnego projektu. Oczywiście stworzyłem kontroler członków zagnieżdżony w projektach, które miały odpowiednią odpowiedzialność. Później w rozwoju okazało się, że była to jedyna strona, która w jakiś sposób "konfigurowała projekt", więc dodano do niej dodatkowe funkcjonalności: * edycja opisu projektu * ustawienie projektu jako domyślnego * ... Innymi słowy , ta strona zmieniła swoje podstawowe obowiązki z zarządzania członkami projektu na zarządzanie samym projektem. Najlepiej byłoby przenieść tę stronę do akcji "edytuj" kontrolera "projekty". Oznaczałoby to, że wszystkie specyfikacje żądań i kontrolerów również muszą zostać zrefaktoryzowane. Czy warto się starać? Czy to powinno być zrobione? Osobiście naprawdę zaczyna mi się nie podobać relacja 1:1 między widokami a kontrolerami. Jego typową sytuacją jest to, że mamy 1 stronę (widok), która obsługuje 2 lub więcej różnych zasobów. Myślę, że powinniśmy mieć poglądy całkowicie oddzielone od kontrolerów, ale rails sprawia, że trudno nam to osiągnąć. Wiem, że AJAX można wykorzystać do rozwiązania tego problemu, ale uważam to za improwizację. Czy istnieje inny rodzaj architektury (inny niż MVC), który oddziela widoki od kontrolerów?


title: Stanowisko programisty wsparcia technicznego z dyplomem Inżyniera Oprogramowania

text: Otrzymałem ofertę pracy od firmy dla programisty wsparcia technicznego. Pierwotnie umówiłem się z nimi na rozmowę kwalifikacyjną na stanowisko programisty C#, ale została ona wypełniona wewnętrznie przed moją rozmową kwalifikacyjną. Czuję się pod dużą presją, aby przyjąć tę rolę ze względu na ekonomię i ponieważ będzie to moja pierwsza rola od czasu ukończenia studiów. Powód tego posta jest jednak… czy zmniejszę swoje szanse na zostanie pełnoprawnym programistą w najbliższej przyszłości? Praca będzie polegać głównie na naprawianiu błędów i testowaniu z wymaganymi umiejętnościami, takimi jak C#, ASP.net, MVC, Javascript. O ile mi wiadomo, nie będzie czystego rozwoju. Będzie szansa na awans do nowych ról w biznesie, ale nie jestem pewien ram czasowych. Byłbym wdzięczny za wiadomość od każdego, kto zajmował podobne stanowiska.


title: Znalezienie i zarządzanie grupą testerów

text: Mam zamiar wydać oprogramowanie, które będzie licencjonowane z **GPLv3** (sam projekt jest „dla zabawy” i nie ma w nim wymiaru komercyjnego). Oprogramowanie ma na celu pomóc w projektowaniu zegarów cyfrowych i wiem, że podstawowa funkcjonalność działa, ponieważ – poza testami jednostkowymi – użyłem go do samodzielnego zaprojektowania kilku zegarów. Jednak zanim zareklamuje się oprogramowanie na stronach hakerów i twórców, chciałbym zaprosić kilku testerów-wolontariuszy... którzy będą próbowali z niego korzystać i zgłaszali wszelkie problemy. Jedyne testy jakie przeprowadziłem do tej pory w moim życiu były z innymi programistami lub z klientami. Byłbym wdzięczny za wkład społeczności na temat: 1. **Gdzie znaleźć testerów-wolontariuszy** (czy jest jakaś znana strona internetowa, która być może umknęła mojemu googlowaniu?) 2. **Jak ich przekazać** (współprogramiści i klienci dużo wiedzą na temat oprogramowania, które zamierzają testować... czy powinienem postarać się o szczegółową informację tym „nieznanym” testerom, czy przeciwnie, powinienem pozwolić im „samodzielnie”?) 3. **Jak ustrukturyzować testy** (nie pytam, o co ich prosić tutaj, ale jeśli mam ustrukturyzować mój test w jakiś specyficzny sposób: na przykład w większej liczbie faz, jak na przykład posiadanie jednej grupy do wykonania testu, a następnie naprawienie błędów, wtedy ponowne przeprowadzenie testu w drugiej grupie... lub zbieranie danych w określony sposób [np. za pomocą kwestionariusza z wynikami, a nie e-mailami w dowolnej formie]) 4. **Jak maksymalnie uwidocznić ich wkład** (Znowu : Nie stać mnie na zainwestowanie _również_ pieniędzy w ten projekt, ale z chęcią oddam im tyle chwały, ile tylko mogę! ility** (Czy GUI ma sens? Czy przepływ pracy jest łatwy do naśladowania? Czy zdarzają się nieoczekiwane zachowania?). Ale oczywiście każdy błąd, który powinien pojawić się w podstawowej funkcjonalności, ostatecznie przyciągnie całą moją uwagę! Z góry dziękuję za radę i czas.


title: Jaki jest najlepszy sposób na szybkie zapoznanie się z Javą?

text: Jestem programistą, który właśnie zmienił zespoły, więc teraz napiszę kod w Javie. Ostatnio pisałem coś w tym języku w programowaniu 101 na uniwersytecie (byłem już wtedy amatorskim koderem). Więc jaka jest najlepsza książka/samouczek, aby zaznajomić się z Javą? Gdzie jest _Java - dobre części_? Nauczysz się Javy na dobre? _Naucz się języka Java na własnej skórze_? A może jest to zbyt przedsiębiorcze na taką pasję...?


title: Dlaczego programista miałby tworzyć klasę publiczną, która ma wszystkie właściwości statyczne?

text: Poprzedni deweloper ma kilka klas publicznych, które nie dziedziczą z innych klas, ale są wypełnione właściwościami statycznymi. Czy to kolejny sposób tworzenia struktury lub wyliczenia? Czy jest to starsza czy nowsza technika przechowywania danych statycznych, do których należy się odnieść? Uważam, że to dziwne/inne, gdy widzę klasę zbudowaną w ten sposób, ale zastanawiam się, jakie są myśli lub odczucia innych programistów na temat tego, co ten koder próbował osiągnąć. To jest zmyślony przykład tego, co widzę... public class CashRegister { public statyczny dziesiętny OneDollarBill { get { return (dziesiętnie)1; } } public statyczny dziesiętny TenDollarBill { get { return (dziesiętnie) 10; } } }


title: Czy ma sens oczyszczanie danych wejściowych z formularza e-mail?

text: Tak więc zużywam ten skrypt formularza przesyłania wiadomości e-mail dla klienta i zobaczyłem coś dość dziwnego w moim doświadczeniu. Jak widać poniżej, oryginalny programista oczyścił dane wejściowe użytkownika. Czy to dobra praktyka, czy w ogóle ma to sens? // Utwórz treść wiadomości z danych wejściowych formularza internetowego foreach ($_POST jako $Field=>$Value) $MsgBody .= "$Field: $Value\n"; $MsgBody .= "\n" . @gethostbyaddr($_SERVER["REMOTE_ADDR"]) . "\n" . $_SERVER["HTTP_USER_AGENT"]; $MsgBody = htmlspecialchars($MsgBody, ENT_NOQUOTES); //ubezpieczyć Dzięki wszystkim!


title: Dlaczego /// bloki komentarzy są ważne?

text: Ktoś kiedyś powiedział, że powinniśmy poprzedzić wszystkie nasze metody blokami komentarza `/// <summary>` (C#) i zastanawiam się, czy to prawda, czy nie. Zacząłem ich używać i stwierdziłem, że trochę mnie denerwują, więc przestałem ich używać z wyjątkiem bibliotek i metod statycznych. Są nieporęczne i zawsze zapominam je aktualizować. Czy polecasz ich używać? Czemu? **EDIT** : Zwykle używam komentarzy `//` przez cały czas, to tylko bloki `/// <summary>` nad którymi się zastanawiałem


title: Którą bibliotekę/strukturę porzuciłeś jako zbyt złożoną w stosunku do problemu, który rozwiązuje?

text: ... i zakodował funkcjonalność "ręcznie"? Jako raczej metaforyczny przykład, prawie nie potrzebujesz biblioteki do rozwiązywania równań kwadratowych, chociaż takie biblioteki istnieją i ktoś traktuje je poważnie. W bardziej wątpliwym przypadku, w zależności od okoliczności, mogę porzucić jQuery (na przykład, gdy nie potrzebuję obsługi niektórych przeglądarek z epoki kamienia): upraszcza niektóre rzeczy, ale dodaje kolejną warstwę złożoności i zawodności do DOM. A nadużywanie jQuery prowadzi do absurdalnych problemów, takich jak ostatnio widziany w SO: jak przypisać pusty atrybut href do tagu `a` za pomocą jQuery? Okazało się, że to pytanie HTML, nawet nie JavaScript. Innym absurdalnym przypadkiem, ale nieoczywistym dla wielu, jest użycie jakiegoś silnika/języka szablonów zbudowanego na innym systemie szablonów: PHP. Trzeci poziom kogokolwiek szablonowania? I jeszcze jedno: _czasami_ po prostu wypluwanie XML za pomocą (w przenośni) `printf` jest znacznie łatwiejsze niż robienie tego za pomocą jakiegoś potwornego silnika XML. Jakieś inne przypadki z twojego doświadczenia?


title: Co by się stało, gdybyś zdefiniował ogranicznik CSV swojego systemu jako znak cudzysłowu?

text: Tytuł mówi wszystko. Jeśli ogranicznik systemu w pliku CSV to „”” (w przeciwieństwie do przecinka, kreski pionowej lub innych powszechnych alternatyw), jak cokolwiek by sobie z tym poradziło? Sednem sprawy jest oczywiście to, że z definicji CSV będzie otaczał wszystkie wartości zawierające ogranicznik ze znakami cudzysłowu i przekonwertuje wszystkie znaki cudzysłowu na podwójne cudzysłowy.Czy wynik byłby możliwy do przeanalizowania?(Zainspirowany odpowiedzią w najczęstszych błędach w stylu Y2K dzisiaj?) ![Ogranicznik systemu \(który napędza program Excel, bazy danych itp\)](http://i.stack.imgur.com/lWhbO.png)


title: Jak mogę wysłać sygnał do programu za pomocą zewnętrznego sprzętu?

text: Próbuję znaleźć sprzęt, który zasygnalizuje programowi uruchomienie timera, gdy się porusza, i zatrzymanie, gdy się zatrzyma. Sprzęt może być po prostu kulką, która się porusza i jest podłączona do komputera przez USB, myślałem o czymś podobnym do działania myszy. Do programowania chciałbym użyć c# lub ewentualnie ActionScript z adobe air. Jestem programistą stron internetowych i nie mam żadnego doświadczenia ze sprzętem ani sterownikami i byłbym wdzięczny za wszelkie pomysły, od czego zacząć. Być może istnieje jakiś prosty sprzęt, którego mogę użyć do wysyłania sygnałów do komputera lub literatura z artykułami dla początkujących, które możesz mi wskazać. Z góry dziękuję


title: Czy niszowe tablice ogłoszeń są skuteczne?

text: Istnieje wiele ofert pracy każdego dnia, a także istnieje wiele osób aktywnie poszukujących pracy każdego dnia. Nadal trudno jest znaleźć odpowiedniego kandydata do pracy. Staje się jeszcze trudniejsze i zaskakujące, gdy zarówno pracodawca, jak i kandydat są aktywnymi poszukiwaczami, ale nie mogą się ze sobą połączyć. Istnieją bardzo niszowe strony z ofertami pracy, które koncentrują się na konkretnych technologiach. Czy te miejsca skuteczniej łączą pracodawców z wykwalifikowanymi kandydatami niż bardziej konwencjonalne i mniej ukierunkowane miejsca pracy?


title: Jak mogę uniknąć rozproszonego zakleszczenia podczas wzajemnego połączenia między dwoma węzłami?

text: Załóżmy, że mamy dwa węzły równorzędne: pierwszy węzeł może wysłać żądanie połączenia do drugiego, ale także drugi może wysłać żądanie połączenia do pierwszego. Jak uniknąć podwójnego połączenia między dwoma węzłami? Aby rozwiązać ten problem, wystarczy wykonać sekwencyjnie operacje wykonywane w celu utworzenia przychodzących lub wychodzących połączeń TCP. Oznacza to, że każdy węzeł powinien sekwencyjnie przetwarzać każdą operację tworzenia nowego połączenia, zarówno dla połączeń przychodzących, jak i wychodzących. W ten sposób, utrzymując listę połączonych węzłów, przed zaakceptowaniem nowego połączenia przychodzącego z węzła lub przed wysłaniem żądania połączenia do węzła, wystarczy sprawdzić, czy ten węzeł jest już obecny na liście. Aby wykonać sekwencyjne operacje tworzenia połączeń, wystarczy wykonać _blokadę_ na liście połączonych węzłów: w rzeczywistości dla każdego nowego połączenia do tej listy dodawany jest identyfikator nowego połączonego węzła. Zastanawiam się jednak, czy takie podejście może spowodować _rozproszone zakleszczenie_ : * pierwszy węzeł może wysłać żądanie połączenia do drugiego; * drugi węzeł może wysłać żądanie połączenia do pierwszego; * zakładając, że dwa żądania połączenia nie są asynchroniczne, oba węzły blokują wszystkie przychodzące żądania połączenia. Jak mogę rozwiązać ten problem? **AKTUALIZACJA:** Jednak nadal muszę blokować się na liście za każdym razem, gdy tworzone jest nowe (przychodzące lub wychodzące) połączenie, ponieważ inne wątki mogą uzyskać dostęp do tej listy, problem zakleszczenia nadal będzie istniał. **AKTUALIZACJA 2:** W oparciu o Twoją radę napisałem algorytm zapobiegający wzajemnej akceptacji prośby o logowanie. Ponieważ każdy węzeł jest peerem, może mieć _procedura klienta_ do wysyłania nowych żądań połączeń i _procedura serwera_ do akceptowania połączeń przychodzących. ClientSideLoginRoutine() { for each (adres w pamięci podręcznej) { lock (neighbors_table) { if (neighbors_table.contains(address)) { // sąsiad o tym samym adresie już istnieje. } sąsiedzi_tabela.add(adres, status: ŁĄCZENIE); } // end lock // ... // Węzeł próbuje nawiązać połączenie TCP ze zdalnym adresem // i wykonać procedurę logowania, wysyłając swój adres nasłuchiwania (IP i port). boolean login_result = // ... // ... if (login_result) lock (sąsiedzi_tabela) sąsiedzi_table.add(adres, status: POŁĄCZONY); } // end for } ServerSideLoginRoutine(remoteListeningAddress) { // ... // inicjalizacja struktur danych potrzebnych do komunikacji (kolejki itp.) // ... lock(neighbors_table) { if(neighbors_table.contains(remoteAddress) && jego status is CONNECTING) { // W tym przypadku strona kliencka na tym samym węźle zainicjowała już // procedurę logowania do węzła zdalnego. if (myListeningAddress < RemoteListeningAddress) { odmawiaLogin(); zwrócić; } } sąsiedzi_table.add(adres zdalnego nasłuchu, status: POŁĄCZONY); } // koniec blokady } **Przykład:** IP:port węzła A to A:7001 - IP:port węzła B to B:8001. Załóżmy, że węzeł A wysłał żądanie logowania do węzła B:8001. W tym przypadku węzeł A wywołuje procedurę logowania, wysyłając jej własny adres nasłuchiwania (A:7001). W konsekwencji tablica_sąsiadów węzła A zawiera adres węzła zdalnego (B:8001): adres ten jest powiązany ze stanem POŁĄCZENIE. Węzeł A czeka, aż węzeł B zaakceptuje lub odrzuci żądanie logowania. Tymczasem węzeł B mógł również wysłać żądanie połączenia na adres węzła A (A:7001), a następnie węzeł A może przetwarzać żądanie węzła B. Tak więc tablica_sąsiadów węzła B zawiera adres zdalnego węzeł (A:7001): ten adres jest powiązany ze stanem CONNECTING. Węzeł B czeka, aż węzeł A zaakceptuje lub odrzuci żądanie logowania. Jeśli strona serwera węzła A odrzuci żądanie z B:8001, to muszę być pewien, że strona serwera węzła B zaakceptuje żądanie z A:7001. Podobnie, jeśli strona serwera węzła B odrzuci żądanie z A:7001, to muszę być pewien, że strona serwera węzła A zaakceptuje żądanie z B:8001. Zgodnie z zasadą „małego adresu” w tym przypadku węzeł A odrzuci żądanie logowania od węzła B, a węzeł B zaakceptuje żądanie od węzła A. Co o tym sądzisz?


title: Scrum na bardzo krótkich projektach?

text: Używam Scrum i bardzo go lubię. Jednak mój sklep odnajduje się w projektach, w których czas prac rozwojowych wynosi dwa lub cztery tygodnie. Zmodyfikowaliśmy już długość sprintu do dwóch tygodni i wszyscy tutaj mówią „to będzie Scrum, tylko z półtora sprintu”. Nie sądzę, że możemy uzyskać dużą wartość z półtora sprintu. Jak możemy uzyskać korzyści z iteracyjnego procesu rozwoju z tylko jedną, dwiema lub półtora iteracjami?


title: Jaki jest wpływ tworzenia testów jednostkowych podczas rozwoju na czas do opracowania oraz czas spędzony na czynnościach konserwacyjnych?

text: Jestem konsultantem i zamierzam wprowadzić testy jednostkowe wszystkim programistom na stronie mojego klienta. Moim celem jest zapewnienie, aby wszystkie nowe aplikacje miały testy jednostkowe dla wszystkich utworzonych klas. Klient ma problem z wysokimi kosztami utrzymania wynikającymi z naprawiania błędów w istniejących aplikacjach. Ich aplikacje mają żywotność od 5 do 15 lat, w których stale dodają nowe funkcje. Jestem przekonany, że bardzo skorzystają na rozpoczęciu testów jednostkowych. Interesuje mnie wpływ testów jednostkowych na czas i koszt rozwoju: * Ile czasu zajmie pisanie testów jednostkowych w ramach procesu rozwoju? * Ile czasu zaoszczędzisz na czynnościach konserwacyjnych (testowanie i debugowanie) dzięki dobrym testom jednostkowym?


title: Jak myślisz, jak ważna jest przyjazność dla IE?

text: Myślę, że większość twórców stron internetowych zgodzi się, że często łatwiej jest uzyskać coś, co działa dobrze w większości przeglądarek, ale nie tak bardzo w IE. Zastanawiałem się: przy projektowaniu/opracowywaniu strony internetowej, jak ważna jest, Twoim zdaniem, przyjazność dla IE? Chodzi mi o to, jak warto się załamać, próbując sprawić, by witryna, która działa idealnie w głównych przeglądarkach, działała tak samo w IE?


title: iPhone, iPad i XCode 4 – pytanie Noob

text: Jestem nowy prawie we wszystkim „Apple” z wyjątkiem posiadania iPhone'a i iPada od ponad roku. Mam ponad 15 lat na platformach Wintel z doświadczeniem w C/C++/C#, więc Obj-C mnie nie przeraża. Niedawno kupiłem Mac Book Pro i mam XCode 4, ale zauważyłem, że większość samouczków online (przynajmniej te, które mogę znaleźć) nadal jest nastawiona na XCode 3.x. Moje pytanie, czy ktoś zna jakieś samouczki online (tekstowe lub wideo) nastawione na XCode 4? Jedyne, o których wiem, znajdują się na developer.apple.com. Chociaż są dobre, wydają się zakładać, że przechodzisz z XCode 3.x. Dzięki [Edytuj] - Dodaję link i postaram się zachować ten aktualny dla innych czytelników. * Standforda


title: Problem z projektowaniem danych/obiektów

text: **Cel:** próbuję znaleźć najlepszy sposób na modelowanie/projektowanie, a następnie zaimplementowanie funkcji „użytkownika” w systemie. **Tło:** Projektuję system żądań dostępu on-line, aby nasza firma mogła korzystać z internetowej metody żądania dostępu użytkowników do różnych systemów oprogramowania. Ponieważ w systemie chodzi wyłącznie o „użytkownika”, to użytkownik jest centralnym punktem systemu. Dzięki temu Użytkownik może zażądać dostępu do systemu. Następnie Menedżer Użytkownika zatwierdzi/odrzuci wniosek. Następnie właściciel systemu zatwierdzi/odrzuci wniosek. Następnie to administrator systemu zatwierdza/odrzuca, a na końcu administrator bezpieczeństwa zatwierdza/odrzuca i dodaje ich do odpowiedniej grupy Active Directory, aby mieli dostęp do docelowej aplikacji opartej na Active Directory (nie tej aplikacji). **Problem:** Widzę wszystkie encje reprezentujące użytkownika jako podstawowe (zbiór) klas w systemie. Obiekt użytkownika jest prosty - po prostu przekaż swój login Windows do Active Directory (AD) za pomocą zapytania LDAP, zdobądź ich informacje i załaduj je do obiektu. W zapytaniu LDAP, jeśli są inni Użytkownicy, którzy się do nich raportują (menedżer użytkownika jest przechowywany w naszym AD), to ten "użytkownik" jest nie tylko Użytkownikiem w tym systemie, ale także Managerem. Jeśli ten Użytkownik znajduje się również w bazie danych jako Właściciel Systemu, jest również Właścicielem Systemu. **Do tej pory:** (Załóżmy, że menedżer to ktoś, kto ma co najmniej jednego bezpośredniego podwładnego przypisanego do niego w AD.) Rozważałem pojedynczy obiekt użytkownika z właściwościami takimi jak IsManager lub IsSystemOwner. Czy powinienem jednak skonstruować hierarchię obiektów, w której (na przykład) klasa Manager dziedziczy po użytkowniku? Są z tym pewne dziwactwa, ponieważ właściciel systemu może dziedziczyć po użytkowniku lub menedżerze. Nie wszyscy właściciele systemów są menedżerami. Jednak menedżerowie, właściciele systemu, administratorzy systemu i administratorzy zabezpieczeń są wszyscy użytkownikami, ponieważ mogą żądać dostępu do niektórych systemów oprogramowania, w których rola w tym systemie jest tylko jako użytkownik. Oto przegląd "jest" dla wszystkich jednostek użytkownika: * Użytkownik może zażądać dostępu do innego systemu oprogramowania w tym systemie. * Menedżer to Użytkownik. * Właścicielem systemu jest Użytkownik. * Administrator systemu to użytkownik. * Administrator bezpieczeństwa to użytkownik (ale jest to mało prawdopodobne ze względu na naszą organizację). * Menedżer może być właścicielem systemu, ale nie zawsze. * Właściciel systemu może być menedżerem, ale nie zawsze. * Administrator systemu może być menedżerem, ale nie zawsze. * Administrator systemu może być właścicielem systemu, ale jest to mało prawdopodobne. * Administrator bezpieczeństwa może być menedżerem, ale nie zawsze. * Administrator bezpieczeństwa może być właścicielem systemu, ale jest to mało prawdopodobne. Kilka dodatkowych informacji: * Nie spodziewam się, że Administratorzy Bezpieczeństwa będą używać systemu jako Użytkownik do żądania dostępu, ale zawsze jest taka możliwość. * Menedżer może utworzyć żądanie dostępu w imieniu jednego ze swoich pracowników (na przykład w celu unieważnienia dostępu zwalnianemu pracownikowi) * Wszyscy pracownicy w domenie Windows będą mieli dostęp do tej witryny. Zakładam, że będę miał kilka grup Active Directory utworzonych dla administratorów systemu i administratorów bezpieczeństwa, ponieważ użytkownicy w tych grupach nie będą dynamiczni, a użytkownicy w jednym zespole to administratorzy systemu, a użytkownicy w innym zespole to administratorzy bezpieczeństwa. * Właściciel systemu może ulec zmianie i będzie przechowywany w bazie danych, wraz z opcją wyznaczenia alternatywnej osoby zatwierdzającej podczas urlopu itp. * Być może potrzebuję menedżera, aby miał inną osobę zatwierdzającą, ale nie planowałem przechowywanie wszystkich użytkowników domeny w bazie danych! Wygląda na to, że modelowanie na papierze jest takie proste, ale ułożenie tego w dobrym, elastycznym kodzie jest przytłaczające. Wszelkie sugestie są mile widziane. EDYCJA: Na podstawie opinii Karla mam ten prototypowy model. Czy wygląda solidnie z perspektywy OOP, w oparciu o moje przeznaczenie? Klasa publiczna MyCustomUserObject Właściwość publiczna LoginID As String Właściwość publiczna FirstName As String Właściwość publiczna LastName As String Właściwość publiczna EmailAddress As String Role właściwości publicznej As List(z roli) Funkcja publiczna IsManager() As Boolean ' Jeśli lista(z roli) zawiera obiekt wpisz ManagerRole, następnie True, w przeciwnym razie False. End Function Funkcja publiczna IsSystemOwner(systemName As String) As Boolean ' Jeśli List(Of Role) zawiera obiekt typu SystemOwnerRole o pasującej nazwie ' w SystemOwnerRole.SoftwareSystems, następnie True, w przeciwnym razie False. End Function Funkcja publiczna IsSystemAdministrator(systemName As String) As Boolean ' Jeśli List(Of Role) zawiera obiekt typu SystemAdministratorRole o pasującej nazwie ' w SystemAdministratorRole.SoftwareSystems, to True, w przeciwnym razie False. Zakończ funkcję publiczną IsSecurityAdministrator() As Boolean Zwróć My.User.IsInRole("Nazwa mojej grupy Active Directory dla administratorów zabezpieczeń") Zakończ funkcję Zakończ klasę publiczną Klasa ID właściwości publicznej SoftwareSystem As String Nazwa właściwości publicznej As String Zakończ klasę Public MustInherit Rola klasy Własność publiczna DesignatedApproverLoginID As String End Class Public Class ManagerRole Dziedziczy rolę Własność publiczna Podrzędni As List(Of AafUser) ' Albo to z listą identyfikatorów logowania? ' Podrzędni Własności Publicznej As List(Of String) Klasa Końcowa Klasa Publiczna SystemOwnerRole Dziedziczy Rolę Własności Publicznej SoftwareSystems As List(Of SoftwareSystem) Klasa Końcowa Klasa Publiczna SystemAdministratorRole Dziedziczy rolę Oprogramowanie Własności Publicznej SoftwareSystems As List(Of SoftwareSystem) Klasa końcowa Klasa publiczna SecurityAdministratorRole Dziedziczy rolę ' Wyraźnie administrator bezpieczeństwa dla wszystkich systemów oprogramowania. Koniec klasy


title: Jakich narzędzi używasz, aby się skoncentrować?

text: Jest to powiązane, ale myślę o czymś w rodzaju pasa cnoty, który powstrzymywałby mnie przed sprawdzaniem programrs.SE lub mojej poczty e-mail za każdym razem, gdy kompiluję. Raczej rada typu „idź na spacer, a poczujesz się bardziej jak kodowanie”, po prostu potrzebuję czegoś, co wzmocni moją słabą konstytucję – chyba nianię sieciową dla mojego fetyszu maniaków. Zdejmę moją odpowiedź z powietrza i obiecuję nie sprawdzać programrs.SE przynajmniej przez jeden dzień.


title: Czy zaczynasz migrację swojego projektu Swing do JavaFX?

text: Mam projekt sprzed 4 lat napisany w Swing + SwingX. Obecnie wciąż żyje i wciąż kopie. Jednak w miarę pojawiania się większej liczby żądań funkcji związanych z GUI (na przykład sortowalnej tabeli drzewa), zaczynam odczuwać trudności w wypełnianiu żądań. Jest to prawdą zwłaszcza, że nie ma aktywnego rozwoju wokół projektu SwingX. Ponadto, nie mogę znaleźć żadnego dobrego, ale aktywnie utrzymywanego/rozwijanego/rozwijającego się frameworka GUI Java. Zastanawiałem się, czy któryś z twórców Swinga czuje to samo? Czy zacząłeś migrować swój projekt Swing do znacznie bardziej aktywnego frameworka GUI, takiego jak JavaFX?


title: Czy Twój klient powinien mieć dostęp do Twojej tablicy zarządzającej projektem?

text: Tworzymy oprogramowanie na zamówienie dla naszego klienta i używamy Codebase do zarządzania naszymi projektami. Czy dobrym pomysłem jest udostępnienie klientowi naszego zarządu projektu? Zaletami, o których pomyśleliśmy, jest to, że poprawiłoby to współpracę między klientem a zespołem programistów, zgodnie z zwinnymi praktykami. W zasadzie stałby się częścią naszego zespołu. Zmniejszyłoby to również obciążenie komunikacyjne i upewniło się, że jesteśmy na tej samej stronie. Klient mógł śledzić postępy w systemie i po drodze zgłaszać sugestie dotyczące historyjek użytkownika. Ponadto mógł zgłaszać błędy lub prośby o nowe funkcje. Wadą, o której myśleliśmy, jest to, że niektóre aspekty tablicy mogą być zbyt techniczne dla klienta. Zbyt często sugerowałby zmiany w historyjkach użytkowników i mógł przeglądać treści, których normalnie nie chcielibyśmy, aby zobaczył nasz klient. Na przykład, gdy idziemy na kompromis w kwestii technologii lub funkcjonalności, klient może to kwestionować i nalegać na robienie rzeczy w taki czy inny sposób.


title: Zrozumienie i rozwój usług internetowych

text: To pytanie jest w połączeniu z **Jak podszedłbyś do tworzenia systemu rezerwacji hoteli?** Rozwiązaniem dla systemu z różnymi interfejsami (lub raczej klientami) jest rozwinięcie usługi sieciowej i interakcja z innymi systemami . Nigdy nie miałem wymogu tworzenia usługi sieciowej, więc trochę mi tego brakuje. Rozumiem tylko, że **Serwis internetowy to system lub aplikacja, która wykonuje pewne operacje, które mogą obejmować modyfikowanie, wysyłanie lub odbieranie danych przez sieć przy użyciu protokołu HTTP**. (Daj mi znać, jeśli zrozumienie jest błędne) Teraz, z drugiego pytania jasno wynika, że muszę opracować usługę sieciową, ale nie mam pojęcia, jak mam się do tego zabrać. Moim wybranym językiem jest C# i .NET Framework. **Pytanie** : Jak tworzymy serwis internetowy i jakich narzędzi, technologii i frameworka powinienem używać do tego samego przy użyciu języka C#? **Pytanie** : Jak mogę wchodzić z tym w interakcję z aplikacji komputerowej WPF, witryny internetowej i aplikacji mobilnej.


title: Czy to do przyjęcia, że po przeczytaniu określonej technologii w książce umieszczasz ją w swoim CV jako umiejętność?

text: Jestem młodszym informatykiem i trochę brakuje mi doświadczenia i jestem absolwentem, co sprawia, że brakuje mi wiedzy w oczach działu personalnego. więc to, co robię, to czytam książki techniczne, takie jak AJAX, SOA, RUBY i tym podobne. Czy to w porządku, jeśli umieszczę to w swoim CV jako moją umiejętność bez drogiej, nieco niepotrzebnej, prawie nudnej formalnej edukacji z certyfikatami potwierdzającymi twoją wiedzę?


title: Przechodzisz od pozorów do prawdziwych obiektów?

text: Lubię robić TDD, więc zacząłem wszystko, wyśmiewając obiekty, tworząc interfejs, stubbing, świetnie. Projekt wydaje się działać, teraz zaimplementuję to, dużo kodu użytego w stubach zostanie ponownie wykorzystanych w mojej prawdziwej implementacji yay! Teraz powinienem powielić testy, aby użyć rzeczywistej implementacji obiektu (ale zachowując obiekt mocków wrażliwych rzeczy, takich jak baza danych i „usługi”, które są poza moim kontekstem (wywołania http itp.) lub po prostu zmienić mocki i odcinki rzeczywistych testów, aby używać rzeczywistych obiektów....... Więc pytanie brzmi, że zachowaj dwa testy lub zastąp odcinki, makiety? A potem powinienem dalej projektować z mockami, stubami czy po prostu z prawdziwymi obiektami? _(Po prostu wyjaśniając, że zachowam pozorowany obiekt wrażliwych rzeczy, takich jak baza danych i usługi, które są poza moim kontekstem, w obu sytuacjach.)_ EDIT [Fakt] public void Change_status() { var dbContext = MockRepository.GenerateStub <Kontekst IDb>(); var repozytorium = MockRepository.GenerateMock<IRepository<Foo>>(); var predicate = MockRepository.GenerateStub<Func<Foo, bool>>(); repository.Expect(x => x.Get(predykat)).Return(_foo).Repeat.Once(); dbContext.Expect(x => x.Commit()); var ctl = MockRepository.GenerateStub<IFooCtl>(); ctl.Stub(x => x.RejectRequest(_fooView)).WhenCalled(deleguj { var foo = repository.Get(predicate); foo.Status = Status.Rejected; _fooView.Status = Status.Rejected.ToString(); } ).Powrót (prawda); ctl.RejectRequest(_fooView); repozytorium.VerifyAllExpectations(); dbContext.VerifyAllExpectations(); Assert.True(_fooView.Status == "Odrzucony"); Assert.True(result.Count() == 1); } To jest test, w którym wyśmiewam repozytorium, kontekst i zatykam fasadę. Próbuję więc powiedzieć, czy powinienem zmienić fragment fasady, aby używał „prawdziwego” kodu, więc powinno to zostać przetestowane jako [Fakt] public void Change_status() { var dbContext = MockRepository.GenerateStub<IDbContext>( ); var repozytorium = MockRepository.GenerateMock<IRepository<Foo>>(); var predicate = MockRepository.GenerateStub<Func<Foo, bool>>(); repository.Expect(x => x.Get(predykat)).Return(_foo).Repeat.Once(); dbContext.Expect(x => x.Commit()); var ctl = new FooCtl(loanRepository, happyLoanDbContext); var wynik = ctl.RejectRequest(_loanView); repozytorium.VerifyAllExpectations(); dbContext.VerifyAllExpectations(); Assert.True(_result); } Albo czy powinienem zostawić wszystko, co wyśmiewa i zatyka, co testuje projekty, i tworzyć nowe, testujące implementację. EDYTUJ Dzięki za wszystkie odpowiedzi, myślę, że rozumiem to lepiej, muszę wiedzieć, który jest mój SUT i to przetestować, bez próbowania lub odcinania SUT tylko komponenty, które pomogą SUT przejść test


title: Czy uruchamianie „mili”-benchmarków to dobry pomysł?

text: Właśnie natknąłem się na projekt Caliper i wygląda bardzo ładnie. Czytając wstęp do mikrobenchmarków, można odnieść wrażenie, że programiści nie sugerowaliby korzystania z frameworka, jeśli benchmark trwa dłużej niż sekundę. Spojrzałem na kod i wygląda na to, że RuntimeOutOfRangeException jest faktycznie zgłaszany, jeśli wykonanie scenariusza trwa dłużej niż 10 sekund. Czy mógłbyś mi wyjaśnić, jakie są problemy z uruchamianiem większych benchmarków? Moją motywacją do korzystania z Caliper było porównanie dwóch implementacji algorytmu łączenia. Te na pewno będą działały przez jakiś czas i zrobią jakieś dyskowe IO, ale uruchomienie całej bazy danych utrudniłoby porównanie, ponieważ konfiguracja algorytmów i wizualizacja wyników byłaby uciążliwa.


title: Czego mi brakuje w moim stosie CI?

text: W tej chwili obecny proces wdrażania w mojej pracy opiera się na tagowaniu z magistrali i przełączaniu różnych witryn PHP dla klientów na naszych serwerach QA i Production. Chociaż jest to proste z poziomu technicznego, staje się naprawdę nużące, gdy masz kilkanaście aktualizacji do kilkunastu różnych witryn, które muszą wyjść w ciągu jednego dnia. W tym celu implementuję następujący stos: * SVN * Hudson * Capistrano I będzie działać tak: 1. Kod przechodzi do `svn` 2. `svn` wyzwala przechwycenie po zatwierdzeniu `hudson` 3. `hudson ` uruchamia skrypt `capistrano` do wdrożenia na serwerze deweloperskim 4. menedżerowie projektów sprawdzają serwer deweloperski i jeśli błąd zostanie naprawiony, przechodzą do `hudson` i promują kompilację 5. `hudson` uruchamia post-promocję skrypt, który taguje i wdraża kod na dowolnym serwerze określonym w promocji Capistrano (wraz z frameworkiem symfony) zostanie użyty do migracji baz danych. Czy coś mi tu brakuje? Nigdy wcześniej nie robiłem niczego bardziej skomplikowanego niż dywersja, więc dlatego pytam.


title: Plusy i minusy wspólnego projektowania aplikacji

text: Zostałem poproszony o poprowadzenie "sesji JAD", o których słyszałem wcześniej, ale nigdy wcześniej nie facylitowałem; przynajmniej z nazwy, wydają się być wymyślną nazwą dla warsztatów dla interesariuszy. Z mojego doświadczenia wynika, że "myślenie grupowe" i "podążanie za liderem" to powszechne problemy w tym podejściu, ale staram się pozostać otwartym na tę koncepcję. Na podstawie tego, co jestem w stanie powiedzieć, zdanie to istnieje od lat 80., więc wyraźnie nie jest to „srebrna kula”. Jakie są główne plusy i minusy tego podejścia?


title: metaumiejętności programisty

text: Kiedyś myślałem, że moja umiejętność tworzenia sprytnych algorytmów lub wygoda z językami, w których pracuję, przesądzi o moim sukcesie jako programisty, ale po dozie rozwoju w świecie rzeczywistym zdałem sobie sprawę, że te umiejętności nie są tak cenne jak umiejętność wyboru odpowiednich narzędzi do pracy, efektywnej komunikacji z zespołem, decydowania, kiedy użyć czegoś z pudełka, a kiedy napisać własną wersję, oraz cierpliwości podczas próbowania alternatyw, dopóki nie zostanie osiągnięty wysoki poziom doskonałości lub przekroczony. Zastanawiałem się, jakie inne „meta” umiejętności ludzie uważają za przydatne programiście/inżynierowi oprogramowania i jak ważne są one _w stosunku_ do umiejętności technicznych. To NIE to samo, co proste pytanie, jakie umiejętności miękkie pomogą zrobić dobrego programistę. Co ważniejsze, gdy szukasz kogoś do zatrudnienia, jak możesz przetestować te lepsze wskaźniki sukcesu (większość pytań, które widzę podczas rozmowy kwalifikacyjnej, to wciąż tylko test umiejętności technicznych). Poza tym, czy ktoś zna jakieś książki lub blogi, które skupiają się na tych meta-umiejętnościach? Dziękuję.


title: Jak prawidłowo licencjonować oprogramowanie open source

text: Mam projekt, nad którym pracowałem, nad którym chciałbym umieścić w nowym, publicznym repozytorium Github jako open source. Po wyszukaniu na StackExchange odpowiedniej licencji do użycia, zdecydowałem się na licencję BSD. Moje pytanie brzmi: co teraz? Czy wystarczy skopiować tekst licencji BSD do pliku o nazwie LICENSE w katalogu głównym mojego repozytorium i nazwać go dobrym? Czy to jest ogólna zasada działania wszystkich licencji open source? A może muszę powiadomić inną organizację, że używam tej licencji, aby w razie potrzeby móc ją „wymusić”?


title: Gdzie mogę się nauczyć najnowszego standardu HTML i CSS?

text: Chcę nauczyć się zaktualizowanego HTML/CSS w ramach przygotowań do HTML5. Ponieważ jestem nowy w tym temacie, trudno jest mi stwierdzić, które strony internetowe uczą starych stylów kodowania HTML, a które uczą tego dobrego. Czy ktoś zna jakieś strony internetowe, które pasują do moich kryteriów?


Czy istnieją standardowe praktyki podczas pisania specyfikacji projektu rozwoju oprogramowania? Czy jest jakiś konkretny format do naśladowania? Czy programista lub klient to zapisuje? Jeśli programista, czy to jest płatne?


title: Gdzie wyznaczasz granicę między ilością a jakością?

text: Mój menedżer rozmawiał ze mną i mówi, że jakość mojej pracy jest doskonała, ale muszę zwiększyć ilość tego, ile wychodzę. Pracuję dopiero od kilku lat, więc wciąż czuję, że muszę się jeszcze wiele nauczyć. Którą drogą obrać (a może jest inna?): Ilość: Jeśli chcą gówna, mogę dać im dużo. Jakość: Zignoruj prośbę i mam nadzieję, że moja produktywność wzrośnie wraz z doświadczeniem.


title: Dostawcy 3D Secure MPI - odpowiedni dla wielu systemów płatności stron trzecich?

text: Długoletni użytkownik SO i stwierdził, że to najlepsze miejsce, aby zadać to pytanie. Obecnie konsoliduję nasze systemy rozliczania płatności eCommerce w jedną stronę Asp.Net MVC, która będzie działać jak PayPal, ale dla naszych własnych stron internetowych. Firmy w grupie mają różne zasady dotyczące dostawcy płatności, który ma być używany na całym świecie, a obecnie integrujemy się z Servebase, Moneris i PayPal. W ten sposób mam architekturę, która umożliwia pisanie i podłączanie nowych dostawców za pośrednictwem jednego punktu rozszerzalności. W przyszłości prawdopodobnie będę musiał wspierać 3D Secure, co znacznie komplikuje sprawy; nie tylko ze względu na dodatkowy przepływ pracy w sieci, ale dlatego, że każdy dostawca wydaje się polecać własnego dostawcę/rozwiązanie MPI dla procesu 3D Secure. Zakładając, że wszyscy trzej dostawcy płatności wydają się oferować ten sam rodzaj zaczepów 3D Secure (widzę podobne parametry we wszystkich ich interfejsach API), czy myślisz, że będę mógł użyć jednego MPI do zarządzania Proces 3D Secure dla wszystkich, czy uważasz, że będę musiał wprowadzić inną implementację 3D Secure dla każdego z moich dostawców? Na przykład PayPal zaleca korzystanie z Cardinal Centinel dla 3D Secure - więc powiedzmy, że mam dla nich jedno konto, jakie są szanse, że będę mógł ponownie użyć go dla Moneris lub Servebase, powiedzmy. Czy system 3D Secure jest „standardem” (używając tego terminu luźno!), który jest po prostu powtarzany przez innych dostawców płatności? Nie ma znaczenia, że nie wiesz nic o innych API, o których tutaj wspominam - tj. Moneris, Servebase - jeśli miałeś podobne doświadczenie, byłbym wdzięczny za wszelkie przemyślenia.


title: Jak zastosować wzorce projektowe w tym scenariuszu

text: Chcę użyć wzorców projektowych w następującym scenariuszu. Jak? Mam klasy o nazwach Osoba, Pracownik i Klient i wszystkie z nich mają własne metody zapisu, aktualizacji, pobierania i usuwania. Klasy Pracownik i Klient pochodzą od osoby. Jaki może być najlepszy sposób na kodowanie?


title: Jak zorganizować międzyplatformową aplikację js/web?

text: Mój przyjaciel i ja pracujemy nad aplikacją, która już działa na Windows 8 i jest napisana w JavaScript, HTML i CSS. Naszym pragnieniem jest udostępnienie go na wielu platformach dla obszarów takich jak Windows Mobile, Chrome, Firefox i Android. Tak więc nasza struktura katalogów wygląda tak: . ├SomeApp.sln // plik rozwiązania Visual Studio ├SomeApp.suo // inny plik związany z programem Visual Studio ├SomeApp.v11.suo // inny plik związany z programem Visual Studio ├deploy.py // Skrypt wdrażania dla Apache ├Makefile // Do rzeczy jak budowanie wersji na komputery │ // oraz do testowania/lintingu/wdrażania conf ├── apache.conf SomeApp ├── Pakiety aplikacji ├── bin │   ├── Debugowanie │   └── Wydanie ├── bld │   ├── Debugowanie │   └── Release ├── css ├── obrazy ├── js │   └── lib ├── strony ├── obrazy promocyjne └── ciągi // pliki językowe i18n ├── ar ├── bg ├─ ─ cs ├── da ├── de ├── el ├── en-US ├── es ├── fr ├── on ├── hr ├── hu ├── it ├── ja ├─ ─ ko ├── nb ├── nl ├── pl ├── pt ├── ro ├── ru ├── sv ├── tr ├── uk Dodałem takie rzeczy jak skrypt wdrażania i plik make... ale naprawdę nie wiem, jak zorganizować taki projekt. Czy utworzyłbym takie katalogi? . ├──browserExtension/ │ ├── build/ // umieścić tu plik makefile? │ ├── conf/ // umieścić tutaj apache conf? ├── chrome/ │ ├── firefox/ ├──web/ // normalna strona internetowa ├──windows/ │ ├── WindowsMobile8/ │ └── Windows8/ // umieścić tutaj istniejące pliki rozwiązań? ├──mobile/ │ ├── android/ └──common/ ├── css/ ├── js/ │ └── test/ └── html/ Czy istnieje dobry przykład projektu, który już odniósł sukces to, co mogę śledzić?


title: Czy mój kod źródłowy powinien być w UTF-8?

text: Czuję, że często tak naprawdę nie wybierasz formatu swojego kodu. Mam na myśli to, że większość moich narzędzi w przeszłości zdecydowała za mnie. Albo tak naprawdę nawet o tym nie pomyślałem. Kiedyś używałem TextPada w systemie Windows i gdy zapisywałem plik, podpowiedział mi o ASCII, UTF-8/16, Unicode itp. Zakładam, że prawie cały napisany kod to ASCII, ale dlaczego miałby to być ASCII? Czy powinniśmy teraz używać plików UTF-8 do kodu źródłowego i dlaczego? Wyobrażam sobie, że może to być przydatne w zespołach wielojęzycznych. Czy istnieją standardy związane ze sposobem, w jaki wielojęzyczne zespoły nazywają zmienne/funkcje/itd.?


title: OOP - Modelowanie czatu

text: Czy podczas modelowania czatu obiekt czatu powinien otrzymywać wiadomości, czy wiadomość powinna być wysłana do obiektu czatu? Nie jestem pewien, czy istnieje ostateczna odpowiedź, ale może ktoś może wskazać zalety jednej nad drugą. ` wiadomość.wyślij(czat); ` przeciwko. ` czat.wyślijWiadomość(wiadomość); `


title: Jakieś wskazówki, jak skutecznie szukać pracy?

text: Szukam pracy od ponad 3 tygodni i aplikuję na około 30 wakatów. Z tego wszystkiego otrzymałem tylko kilka telefonów z agencji rekrutacyjnych, które nie proponowały niczego specjalnego. Jeden z nich właśnie przesłał moje CV pracownikowi, a inny zasugerował, abym poprawił moje obecne CV. Zrobiłem kilka zmian w CV, które im się nie spodobały i odesłałem je z powrotem. Od tego czasu nie ma odpowiedzi. Czuję się sfrustrowany i zmartwiony. Przede wszystkim nie podoba mi się, że wszystko wakat powinno przechodzić przez agencję rekrutacyjną. Nawet jeśli chcę aplikować bezpośrednio, nie mogę znaleźć żadnego nazwiska ani żadnego leada, którego rekrutuje firma. Po drugie, nie widzę powodu, dla którego nikt nie odpowiada. Mój list motywacyjny jest napisany zwykłym tekstem, a CV jest zrobione w lateksie. Wszystko jest stworzone dzięki sugestiom, które przeczytałem w Internecie i jednej bardzo interesującej książce "The Google Resume". Co robię źle? Czy są jakieś wskazówki, jak szukać bezpośrednich ofert pracy? Szczególnie interesuje mnie rynek pracy w Wielkiej Brytanii. PS Używam http://www.simplyhired.co.uk/, który moim zdaniem jest najlepszą stroną, ponieważ gromadzi się na wszystkich tablicach ogłoszeń.


title: Jak symulować sprzężenie wewnętrzne na bardzo dużych plikach w javie (bez wyczerpania pamięci)

text: Próbuję symulować sprzężenia SQL przy użyciu java i bardzo dużych plików tekstowych (INNER, RIGHT OUTER i LEFT OUTER). Pliki zostały już posortowane przy użyciu zewnętrznej procedury sortowania. Problem, który mam, polega na tym, że próbuję znaleźć najbardziej efektywny sposób radzenia sobie z częścią algorytmu sprzężenia wewnętrznego. W tej chwili używam dwóch list do przechowywania wierszy, które mają ten sam klucz i powtarzam zestaw wierszy w prawym pliku raz dla każdego wiersza w lewym pliku (pod warunkiem, że klucze nadal pasują). Innymi słowy, klucz łączenia nie jest unikalny w każdym pliku, więc musiałby uwzględniać sytuacje kartezjańskie… left_01, 1 left_02, 1 right_01, 1 right_02, 1 right_03, 1 left_01 łączy z right_01 za pomocą klucza 1 left_01 do prawej_02 za pomocą klucza 1 left_01 łączy do prawej_03 za pomocą klucza 1 left_02 łączy do prawej_01 za pomocą klucza 1 left_02 łączy do prawej_02 za pomocą klawisza 1 left_02 łączy do prawej_03 za pomocą klawisza 1 Moje obawy dotyczą pamięci. ucieknębrak pamięci, jeśli użyję poniższego podejścia, ale nadal chcę, aby część sprzężenia wewnętrznego działała dość szybko. Jakie jest najlepsze podejście do radzenia sobie z częścią sprzężenia INNER, pamiętając, że te pliki mogą potencjalnie być ogromnymi public class Joiner { private void join(BufferedReader po lewej, BufferedReader po prawej, dane wyjściowe BufferedWriter) throws Throwable { BufferedReader _left = left; BufferedReader _w prawo = w prawo; BufferedWriter _output = wyjście; Rekord _leftRecord; Rekord _rightRecord; _leftRecord = read(_left); _rightRecord = read(_right); while( _leftRecord != null && _rightRecord != null ) { if( _leftRecord.getKey() < _rightRecord.getKey() ) { write(_output, _leftRecord, null); _leftRecord = read(_left); } else if( _leftRecord.getKey() > _rightRecord.getKey() ) { write(_output, null, _rightRecord); _rightRecord = read(_prawo); } else { Lista<Rekord> leftList = new ArrayList<Rekord>(); List<Record> rightList = new ArrayList<Record>(); _leftRecord = readRecords(leftList, _leftRecord, _left); _rightRecord = readRecords(rightList, _rightRecord, _right); for( Record equalKeyLeftRecord : leftList ){ for( Record equalKeyRightRecord : rightList ){ write(_output, equalKeyLeftRecord, equalKeyRightRecord); } } } } if( _leftRecord != null ) { write(_output, _leftRecord, null); _leftRecord = read(_left); while(_leftRecord != null) { write(_output, _leftRecord, null); _leftRecord = read(_left); } } else { if( _rightRecord != null ) { write(_output, null, _rightRecord); _rightRecord = read(_right); podczas gdy(_rightRecord != null) { write(_output, null, _rightRecord); _rightRecord = read(_right); } } } _left.close(); _prawo.zamknij(); _wyjście.flush(); _wyjście.zamknij(); } private Odczyt rekordu (czytnik BufferedReader) rzuca Throwable { Rekord rekordu = null; Dane ciągu = reader.readLine(); if( data != null ) { record = new Record(data.split("\t")); } rekord powrotu; } private Rekord readRecords(List<Record> lista, Rekord rekordu, czytnik BufferedReader) wyrzuca Throwable { int key = record.getKey(); lista.dodaj(rekord); rekord = odczyt(czytnik); while( rekord != null && rekord.getKey() == klucz) { lista.add(rekord); rekord = odczyt(czytnik); } rekord powrotu; } private void write (bufferedWriter writer, Record left, Record right) wyrzuca Throwable{ String leftKey = (left == null ? "null" : Integer.toString(left.getKey())); String leftData = (left == null ? "null" : left.getData()); String rightKey = (right == null ? "null" : Integer.toString(right.getKey())); String rightData = (right == null ? "null" : right.getData()); writer.write("[" + leftKey + "][" + leftData + "][" + rightKey + "][" + rightData + "]\n"); } public static void main(String[] args) { spróbuj { BufferedReader leftReader = new BufferedReader(new FileReader("LEWY.DAT")); BufferedReader rightReader = new BufferedReader(new FileReader("RIGHT.DAT")); BufferedWriter output = new BufferedWriter(new FileWriter("OUTPUT.DAT")); Joiner joiner = nowy Joiner(); joiner.join(leftReader, rightReader, wyjście); } catch (Throwable e) { e.printStackTrace(); } } } Po zastosowaniu identyfikatoraeas od proponowanej odpowiedzi, zmieniłem pętlę na to prywatne void join (RandomAccessFile lewo, RandomAccessFile prawo, wyjście BufferedWriter) rzuca Throwable { long _pointer = 0; RandomAccessFile _left = lewo; RandomAccessFile _prawo = dobrze; BufferedWriter _output = wyjście; Rekord _leftRecord; Rekord _rightRecord; _leftRecord = read(_left); _rightRecord = read(_right); while( _leftRecord != null && _rightRecord != null ) { if( _leftRecord.getKey() < _rightRecord.getKey() ) { write(_output, _leftRecord, null); _leftRecord = read(_left); } else if( _leftRecord.getKey() > _rightRecord.getKey() ) { write(_output, null, _rightRecord); _pointer = _right.getFilePointer(); _rightRecord = read(_right); }             w przeciwnym razie {długi _tempPointer = 0; int klucz = _leftRecord.getKey(); while( _leftRecord != null && _leftRecord.getKey() == klucz ) { _right.seek(_pointer); _rightRecord = read(_right); while( _rightRecord != null && _rightRecord.getKey() == klucz ) { write(_output, _leftRecord, _rightRecord ); _tempPointer = _right.getFilePointer(); _rightRecord = read(_right); } _leftRecord = read(_left); } _pointer = _tempPointer; } } if( _leftRecord != null ) { write(_output, _leftRecord, null); _leftRecord = read(_left); while(_leftRecord != null) { write(_output, _leftRecord, null); _leftRecord = read(_left);} } else { if( _rightRecord != null ) { write(_output, null, _rightRecord); _rightRecord = read(_right); while(_rightRecord != null) { write(_output, null, _rightRecord); _rightRecord = read(_right); } } } _left.close(); _prawo.zamknij(); _wyjście.flush(); _wyjście.zamknij(); } _UPDATE_ Chociaż to podejście działało, było strasznie wolne, więc zmodyfikowałem to, aby tworzyć pliki jako bufory i działa to bardzo dobrze. Oto aktualizacja... private long getMaxBufferedLines(File file) throws Throwable { long freeBytes = Runtime.getRuntime().freeMemory() / 2; return (freeBytes / (file.length() / getLineCount(file))); } private void join(File left, file right, file output, JoinType joinType) wyrzuca Throwable { BufferedReader leftFile = new BufferedReader(new FileReader(po lewej)); BufferedReader rightFile = new BufferedReader(new FileReader(prawo)); BufferedWriter outputFile = new BufferedWriter(new FileWriter(wyjście)); long maxBufferedLines = getMaxBufferedLines(right); Rekord po lewej Rekord; Rekord prawoRekord; leftRecord = read(LeftFile); rightRecord = read(rightFile); while( leftRecord != null && rightRecord != null ) { if( leftRecord.getKey().compareTo(rightRecord.getKey()) < 0) { if( joinType == JoinType.LeftOuterJoin || joinType == JoinType.LeftExclusiveJoin | joinType == JoinType.FullExclusiveJoin || joinType == JoinType.FullOuterJoin ) { write(outputFile, leftRecord, null); } leftRecord = read(leftFile); } else if( leftRecord.getKey().compareTo(rightRecord.getKey()) > 0 ) { if( joinType == JoinType.RightOuterJoin || joinType == JoinType.RightExclusiveJoin || joinType == JoinType.FullExclusiveJoin || joinType == JoinType.FullOuterJoin ) { write( outputFile, null, rightRecord); } rightRecord = read(rightFile); } else if( leftRecord.getKey().compareTo(rightRecord.getKey()) == 0 ) { String key = leftRecord.getKey(); List<File> rightRecordFileList = new ArrayList<File>(); List<Record> rightRecordList = new ArrayList<Record>(); rightRecordList.add(rightRecord); rightRecord = konsumuj(klucz, rightFile, rightRecordList, rightRecordFileList, maxBufferedLines); while( leftRecord != null && leftRecord.getKey().compareTo(key) == 0 ) { processRightRecords(outputFile, leftRecord, rightRecordFileList, rightRecordList, joinType); leftRecord = read(LeftFile); } // potrzebuję dyspozycji do usunięcia plików z listy } else { throw new Exception("DANE NIE SĄ SORTED"); } } if( leftRecord != null ) { if( joinType == JoinType.LeftOuterJoin || joinType == JoinType.LeftExclusiveJoin || joinType == JoinType.FullExclusiveJoin || joinType == JoinType.FullOuterJoin ) { write(outputFile, leftRecord, zero); } leftRecord = read(leftFile); while(leftRecord != null) { if( joinType == JoinType.LeftOuterJoin || joinType == JoinType.LeftExclusiveJoin || joinType == JoinType.FullExclusiveJoin || joinType == JoinType.FullOuterDołącz ) { write(outputFile, leftRecord, null); } leftRecord = read(leftFile); } } else { if( rightRecord != null ) { if( joinType == JoinType.RightOuterJoin || joinType == JoinType.RightExclusiveJoin || joinType == JoinType.FullExclusiveJoin || joinType == JoinType.FullOuterJoin ) { write(outputFile, null, rightRecord); } rightRecord = read(rightFile); while(rightRecord != null) { if( joinType == JoinType.RightOuterJoin || joinType == JoinType.RightExclusiveJoin || joinType == JoinType.FullExclusiveJoin || joinType == JoinType.FullOuterJoin ) { write(outputFile, null, rightRecord) ;} rightRecord = read(rightFile); } } } leftFile.close(); prawyPlik.zamknij(); plikwyjściowy.flush(); plikwyjściowy.zamknij(); } public void processRightRecords(BufferedWriter outputFile, Record leftRecord, List<File> rightFiles, List<Record> rightRecords, JoinType joinType) generuje Throwable { for(File rightFile : rightFiles) { BufferedReader rightReader = new BufferedReader(new FileReader(rightFile)); Rekord rightRecord = read(rightReader); while(rightRecord != null){ if( joinType == JoinType.LeftOuterJoin || joinType == JoinType.RightOuterJoin || joinType == JoinType.FullOuterJoin || joinType == JoinType.InnerJoin ) { write(outputFile, leftRecord, rightRecord) ; } prawoRecord = read(rightReader); } rightReader.close(); } for(Record rightRecord : rightRecords) { if( joinType == JoinType.LeftOuterJoin || joinType == JoinType.RightOuterJoin || joinType == JoinType.FullOuterJoin || joinType == JoinType.InnerJoin ) { write(outputFile, leftRecord, rightRecord ); } } } /** * Zużyj wszystkie rekordy posiadające klucz (do pojedynczej listy lub wielu plików) każdy plik będzie * przechowywał bufor pełen danych. Zwrócony prawy rekord reprezentuje przepływ zewnętrzny (klucz jest już ustawiony * na następny lub null), więc nie możemy użyć tego rekordu poniżej while loop lub * w tym bloku ogólnie podczas porównywania bieżącego klucza. Sztuczka polega na tym, aby nadal zużywać * z listy. Kiedy stanie się pusty, wypełnij go ponownie od następnego pliku, aż wszystkie pliki * zostaną zużyte (i todczytywany jest ostatni węzeł na liście). Następna zewnętrzna iteracja będzie * gotowa do przetworzenia (albo będzie miała wartość null, albo będzie wskazywać na następny największy klucz * @throws Throwable * */ private Record consumer(String key, BufferedReader reader, List<Record> records, List< File> files, long bufferMaxRecordLines ) throws Throwable { boolean processComplete = false; Record record = records.get(records.size() - 1); while(!processComplete){ long recordCount = records.size();if(rekord. getKey().compareTo(key) == 0 ){ record = read(reader); while( record != null && record.getKey().compareTo(key) == 0 && recordCount < bufferMaxRecordLines ) { records.add( record); recordCount++; record = read(reader); } } processComplete = true; // jeśli record ma wartość null, to koniecif( record != null ) { // jeśli klucz się zmienił, to koniec if( record.getKey().compareTo(key) == 0 ) { // Ten sam klucz oznacza wyczerpanie bufora. // Zrzuć cały bufor do pliku. Lista wskaźników // do plików będzie śledzić pliki ... processComplete = false; dumpBufferToFile(rekordy, pliki); rekordy.wyczyść(); rekordy.dodaj(rekord); } } } powrót rekordu; } /** * Zrzuć wszystkie rekordy z obiektów List of Record do pliku. Następnie dodaj ten plik * do listy obiektów File * * TRZEBA UMIEŚCIĆ OGRANICZENIE LICZBY WSKAŹNIKÓW DO PLIKÓW (sprawdź rozmiar listy plików) * * Rekordy @param * @param files * @throws Throwable */ private void dumpBufferToFile(List Rekordy <Record>, Lista<Plik> files) throws Throwable { Prefiks ciągu = "joiner_" + files.size() + 1; Sufiks ciągu = ".dat"; File file = File.createTempFile(prefiks, sufiks, new File("cache")); BufferedWriter writer = nowy BufferedWriter(nowy FileWriter(plik)); for( Rekord rekordu : rekordy ) { writer.write( record.dump() ); } pliki.dodaj(plik); pisarz.flush(); pisarz.zamknij(); }


title: Jaki jest najlepszy przypadek użycia selenu?

text: Zajmowałem się tworzeniem aplikacji internetowych, jednocześnie tworząc testy. Rozumiem testowanie jednostkowe, potrafię zadeklarować metodę testową i przetestować konkretne metody w mojej aplikacji. Ale nie wiem, jaki jest najlepszy sposób wykorzystania sterownika sieciowego selen do testowania. Próbowałem przetestować konkretną witrynę pod kątem uszkodzonych linków lub uszkodzonych obrazów i musiałem użyć zewnętrznej biblioteki połączeń http, ponieważ selen nie zapewnia wyników nagłówka itp. Przechodzenie przez całą witrynę jest bardzo powolne. Chociaż możesz po prostu przekazać adres URL do narzędzia do sprawdzania linków W3C i gotowe. Czy większość programistów tworzy klasę dla każdej strony i testuje poszczególne elementy interfejsu użytkownika, ponieważ przeglądanie całej witryny jest znacznie bardziej skomplikowane. Jakie korzyści przynosi selen lub testowanie interfejsu użytkownika, których nie można przetestować za pomocą testów jednostkowych?


title: Jak zmagasz się z zasadą DRY z konfiguracjami?

text: Na przykład, powiedzmy, że mamy konfigurację nginx wskazującą na foo1, foo2 i foo3, a także konfigurację haproxy wskazującą na foo1, foo2 i foo3, a na koniec narzędzie do wdrażania wskazujące te same serwery. Jak to pogodzić? Zbudować jakiś generator konfiguracji dla nginx i haproxy na podstawie hostów? Wygląda na to, że utrudniłoby to grepowanie i potencjalnie utrudniłoby ogólnie czytelność plików konfiguracyjnych.


title: Obsługa kontaktów importowanych z konta e-mail użytkownika

text: W mojej aplikacji internetowej daję użytkownikowi możliwość zaimportowania wszystkich jego kontaktów z jego konta e-mail, a następnie wysłania zaproszeń do wszystkich tych kont lub mapowania użytkownika na istniejące konta na podstawie wiadomości e-mail. Teraz pytanie, czy gdy wszystkie te kontakty zostaną zaimportowane, czy byłoby słuszne zapisanie tych kontaktów z powrotem w celu powtarzania przypomnień itp.? Jestem tutaj dość zdezorientowany, ponieważ tak działają wszystkie witryny, ale czy nie byłoby to naruszeniem prywatności danych? Czy jest na to algorytm?


title: Jak zrobić plik .exe z aplikacji html5 css?

text: Chciałbym stworzyć aplikację desktopową pod Windows używając HTML5, JavaScript i CSS. Próbuję * tidesdk * XULRunner * appjs Czytam dokumentacje tych technologii. Ale nie wiedziałem, jak wyeksportować aplikację jako pakiet .exe. Chcę napisać aplikację w HTML i JavaScript oraz wyeksportować do pliku exe. Jak mogę to zrobić?


title: Jakich sztuczek/wskazówek używasz do innowacji?

text: Poszukuję kilku pomysłów, jak zmienić wysoce konwencjonalną kulturę pracy, aby była bardziej innowacyjna w podejściu do rozwiązywania problemów. Natknąłem się na ten artykuł i szukam bardziej konkretnych i praktycznych sposobów, w jakie my, jako programiści, możemy pomóc sobie nawzajem myśleć nieszablonowo. Skonstruowałem prostą formułę, jak pobudzić innowacyjność w moim codziennym rozwoju. (Proszę skrytykować to w celu poprawy) Wprowadzanie danych zewnętrznych/informacji -> Tworzy nowe pomysły/koncepcje -> Komunikuje się/dzieli się pomysłami -> Ufa innym -> Próby ryzyka -> Dzieje się innowacja Jakie są twoje postawy, procesy myślowe i zachowania wobec podejść do trudnego problemu w sposób, który zostałby uznany za innowacyjny?


title: „Moje rzeczy” kontra „Twoje rzeczy” w tekstach interfejsu użytkownika

text: Odnosząc się do rzeczy użytkowników należy użyć _My_ lub _Your_ , na przykład: > Mój koszyk | Moje konto | Moja lista życzeń lub > Twój koszyk | Twoje konto | Twoja lista życzeń Znalazłem ten artykuł, który przemawia za używaniem _twojego_. Mówi, że flikr to robi. Mówi również, że MySpace i MyYahoo są w błędzie. Zauważyłem też dzisiaj, że Amazon używa terminu _Twój_. Słyszałem jednak, że są mistrzami w testowaniu odmian i znajdowaniu najlepszej, więc to, co widzisz na ich stronie, może być najlepszą odmianą lub po prostu czymś, co obecnie testują. Osobiście podoba mi się sposób, w jaki _my_ wygląda lepiej, ale to tylko moja opinia. Co myślisz? Co będzie mieć lepszy wpływ na klientów? Czy to naprawdę ma znaczenie?


title: Czy powinienem przechowywać pliki dziennika w kontroli wersji?

text: Pliki dziennika, o których mowa, to pliki dziennika metryk. Jednym z nich jest plik projektu wyprodukowany przez SourceMonitor, do którego regularnie dodaję punkty kontrolne, aby wykreślić postęp projektów.


title: Jak poradzić sobie z popularnym projektem, którego nie chcesz już dłużej utrzymywać?

text: Jestem opiekunem projektu, który ma dużą nietechniczną bazę użytkowników. Utrzymuję go od około 4 lat i dodaję nowe funkcje na żądanie. Chciałbym teraz przejść do innych projektów i przestać tworzyć dla tej aplikacji. Ze względu na nietechniczny charakter użytkowników, w przeszłości wprowadzono bardzo niewiele kodu. Nie wierzę, że uda mi się znaleźć kogoś innego, kto przejmie projekt zamiast mnie. Błędy, problemy, prośby o nowe funkcje - wciąż się pojawiają. Nadal odpowiadam na e-maile o pomoc, ponieważ nie jestem pewien, czy powinienem je zignorować, powiedzieć im, że nie pracuję nad aplikacją, czy powinienem odpowiedzieć na e-maile tylko w niektórych przypadkach. Jaki jest najlepszy sposób na „porzucenie” tego projektu, a jednocześnie umożliwienie użytkownikom korzystania z aplikacji?


title: Zarządzaj zestawem funkcji jednej aplikacji na wielu platformach/bazach kodu

text: Dlatego opracowuję aplikację na Androida i iOS. Od czasu do czasu podczas pracy nad jedną wersją pojawiają się zmiany, które trzeba wdrożyć na drugiej. Uważam, że śledzenie tych zmian jest nudne, więc nie zapomnę ich później. Jestem tylko ciekaw, jakich innych przepływów pracy używasz podczas zarządzania pojedynczym zestawem funkcji, który ma być zaimplementowany w różnych projektach. Dziękuję


title: Jak wytłumaczyć kolegom, aby przestali tworzyć pakiety i klasy o nazwie „Utils”?

text: W większości projektów w trakcie pracy ostatecznie pokaże pakiet, klasę (lub wiele pakietów i klas) o nazwie "Utils", do której zrzucany jest każdy rodzaj funkcji. Coraz trudniej jest poruszać się po projekcie bez odpowiednio nazwanej struktury. Próbowałem poprosić o zaprzestanie używania „Narzędzi”. Kiedy znajdę to, a zmiana w bazie kodu jest niewielka, zwykle załamuję ją i usuwam, ale zawsze kończą się na tym, że zaśmiecają kod. Czy znasz jakąś strategię, która pozwoliłaby im przestać to robić? A może po prostu jestem zrzędą?


title: Kiedy kod powinien przedkładać optymalizację nad czytelność i łatwość użycia?

text: Jestem w trakcie projektowania małej biblioteki, w której jednym z moich celów projektowych jest _interfejs API powinien być jak najbardziej zbliżony do języka domeny_. Podczas pracy nad projektem zauważyłem, że w kodzie zdarzają się przypadki, w których bardziej intuicyjne, czytelne wywołanie atrybutu/metody wymaga trochę funkcjonalnie niepotrzebnej enkapsulacji. Ponieważ produkt końcowy niekoniecznie będzie wymagał wysokiej wydajności, nie przejmuję się podejmowaniem decyzji o przedkładaniu łatwości obsługi w moim obecnym projekcie nad najbardziej wydajną implementację danego kodu. Wiem, że nie należy zakładać, że czytelność i łatwość użycia są najważniejsze we wszystkich oczekiwanych przypadkach użycia, na przykład gdy wymagana jest wydajność. Chciałbym wiedzieć, czy istnieją bardziej ogólne powody, które przemawiają za projektowaniem preferującym wydajniejsze implementacje – nawet jeśli tylko w niewielkim stopniu?


title: Języki o funkcjach podobnych do JavaFX Script

text: Właśnie ukończyłem mały projekt w JavaFX, stwierdzając tylko, że został on uznany za martwy przez Oracle. JavaFX Script faktycznie wydawał się być całkiem interesującym językiem z kilkoma fajnymi funkcjami dla swojej domeny, szczególnie z wiązaniem dla wiązania danych i zamianą dla wyzwolonych zdarzeń. Te cechy sprawiają, że język jest bardzo przydatny dla małych, szybkich aplikacji typu RIA, co prowadzi do mojego pytania: **Czy są jakieś języki _mainstream_ z funkcjami podobnymi do bind i on replace?** Po pracy z JavaFX mam kilka pomysłów dla niektórych małych osobistych (akademickich) projektów, które mogłyby skorzystać z tych funkcji, ale wolałbym nie zaczynać niczego nowego w języku uważanym przez jego właścicieli za wymarły.


title: Metody projektowania oprogramowania dla Javy lub dowolnego innego języka programowania

text: Jestem młodszym programistą i chciałbym wiedzieć, jak profesjonaliści piszą swój kod lub jakie kroki wykonują podczas tworzenia nowego oprogramowania. Chodzi mi o to, jakimi krokami podążają, jaką metodologię programowania, oprogramowanie do projektowania architektury oprogramowania itp. Chciałbym znaleźć tutorial, w którym wyjaśnią od początku, jakie kroki muszę wykonać od pomysłu, który mam na myśli, do finału wersja aplikacji w dowolnym języku. A może, jakie są twoje kroki programowania lub zasady, których kiedyś przestrzegałeś. Ponieważ za każdym razem, gdy chcę stworzyć aplikację poświęcam kilka czasu na projektowanie i dużo czasu na kodowanie (wiem, że to nie jest dobre).


title: Jakie funkcje są przydatne podczas wykonywania zdalnego debugowania/diagnostyki?

text: Oczywiście najłatwiejszym sposobem rozwiązania błędu jest możliwość odtworzenia go we własnym zakresie. Czasami jednak nie jest to praktyczne. Na początek użytkownicy często nie są zbyt dobrzy w dostarczaniu przydatnych informacji. > Obsługa klienta: „co wydaje się być problemem?” > Użytkownik: „Zawalił się!” Co więcej, czasami błąd występuje tylko w pewnych warunkach środowiskowych, których nie można odpowiednio odtworzyć we własnym zakresie. Mając to na uwadze, ważne jest, aby w swoim produkcie wbudować pewien rodzaj ram diagnostycznych. **Jakiego rodzaju wbudowanych narzędzi diagnostycznych używałeś lub widziałeś?** Logowanie wydaje się być dominującą metodą, co ma sens. Mamy dość wyrafinowaną ramkę rejestrowania z różnymi poziomami szczegółowości i możliwością filtrowania według określonych modułów (w rzeczywistości możemy filtrować do poziomu szczegółowości pojedynczego pliku). Dzienniki błędów są umieszczane strategicznie, aby stworzyć całkiem dobrą reprezentację śladu stosu, gdy wystąpi błąd. Odkąd pracuję na platformach wbudowanych, nie możemy sobie pozwolić na luksus 10 milionów terabajtów przestrzeni dyskowej, więc mamy dwa sposoby na usunięcie ich z systemu: port szeregowy i serwer syslog. Jednak czasami napotykamy problem, który polega na tym, że użytkownik może włączyć dzienniki. Nasze obecne ramy często wymagają interakcji z użytkownikiem.


title: Struktura danych wspierająca następujące operacje

text: Poszukuję struktury danych do pracy z zestawem danych, który jest najbardziej wydajny w celu wykonania następujących czynności: 1. Sprawdź, czy element został skategoryzowany, czy nie. (Zbiór skategoryzowany i nieskategoryzowany są zbiorami rozłącznymi). 2. Pobierz kategorię przedmiotu. 3. Zdobądź wszystkie przedmioty w określonej kategorii. 4. Zdobądź wszystkie nieskategoryzowane elementy. 5. Usuń określoną pozycję z zestawu danych. Myślałem o posiadaniu `Dictionary<String, Set<String>>` do przechowywania wszystkich elementów w danej kategorii, ale to nie rozwiązuje 2.


title: Czy opakowanie kodu innej firmy jest jedynym rozwiązaniem do testowania jednostkowego konsumentów?

text: Robię testy jednostkowe i w jednej z moich klas muszę wysłać maila z jednej z metod, więc używając wstrzykiwania konstruktora wstrzykuję instancję klasy `Zend_Mail` która jest we frameworku Zend. Teraz niektórzy twierdzą, że jeśli biblioteka jest wystarczająco stabilna i nie będzie się często zmieniać, to nie ma potrzeby jej owijania. Tak więc zakładając, że `Zend_Mail` jest stabilny i nie zmieni się i całkowicie pasuje do moich potrzeb, nie będę potrzebował do niego wrappera. Teraz spójrz na moją klasę `Logger`, która zależy od `Zend_Mail`: class Logger{ private $mailer; funkcja __construct(Zend_Mail $mail){ $this->mail=$mail; } function toBeTestedFunction(){ //Jakiś kod $this->mail->setTo('jakaś wartość'); $this->mail->setSubject('jakaś wartość'); $this->mail->setBody('jakaś wartość'); $this->mail->send(); //Some } } Jednak testowanie jednostkowe wymaga testowania jednego komponentu na raz, więc muszę zakpić z klasy `Zend_Mail`. Ponadto łamię zasadę **Dependency Inversion**, ponieważ moja klasa `Logger` zależy teraz od konkrecji, a nie abstrakcji. Teraz jak mogę przetestować `Logger` w izolacji bez pakowania `Zend_Mail`?! Kod jest w PHP, ale odpowiedzi nie muszą być. Jest to bardziej kwestia projektu niż funkcja specyficzna dla języka