title: Funkcje statyczne a klasy

text: Powiedzmy, że chcę zbudować kilka funkcji narzędziowych do wykonywania podstawowych obliczeń matematycznych z `BigDecimal`s, na przykład chcę mieć funkcję obliczającą średnią z `List<BigDecimal>`. Jakie jest najlepsze podejście? Funkcja statyczna czy klasa narzędziowa? public static BigDecimal computeAverage(List<BigDecimal> numbers) lub public class BigDecimalUtil public computeAverage(List<BigDecimal> numbers)


title: Wymagana umiejętność matematyczna dla książki Wprowadzenie do algorytmów (CLRS)

text: Mam już wiedzę na temat podstawowych algorytmów. Teraz planuję studiować bardziej zaawansowane algorytmy i decyduję się na wprowadzenie do algorytmów. Nie jestem pewien, czy muszę odświeżyć umiejętności matematyczne przed przeczytaniem tej książki, czy nie? (Prawie zapomniałem matematyki, której uczę się w szkole średniej i na studiach) Jeśli ta książka wymaga solidnej wiedzy matematycznej, proszę zasugeruj przedmioty, które przynoszą korzyści. **Aktualizacja** **P.S.** Chcę dowiedzieć się więcej o implementacji, projektowaniu i analizie algorytmów.


title: Czy jakakolwiek znana licencja wymaga udostępnienia modyfikacji, gdy publikowane jest tylko pochodne *wyjście*?

text: Czy istnieje sposób na upewnienie się, że modyfikacje wolnego oprogramowania są publikowane nawet wtedy, gdy żadne pliki binarne zmodyfikowanego kodu nie są _przekazywane_? Choć może to zabrzmieć dziwnie iz tego co rozumiem, np. GPL wymaga rozpowszechniania kodu źródłowego tylko wtedy, gdy plik binarny jest _przekazywany_ innym stronom, co umożliwia nieograniczony prywatny użytek, ponieważ nie podlega _propagacji_. Chciałbym się upewnić, że jeśli ktoś publikuje ostateczne odkrycie w literaturze naukowej wyprowadzonej w celu zmodyfikowanego kodu, to te modyfikacje są udostępniane. Czy jakaś znana licencja ma takie postanowienia? Jeśli nie, dlaczego miałoby być źle? Z tego, co rozumiem, jeśli dodam te zapisy wprost, ograniczyłoby to swobodę, np. renderowanie wyniku niezgodnego z GPL. Z jednej z odpowiedzi, która zniknęła, sądzę, że mogę dodać _Dodatkowe określenie_, ale czy nie byłoby to _dalsze ograniczenie_, które można po prostu zignorować > Jeśli otrzymany program lub dowolna jego część zawiera zawiadomienie > stwierdzające, że podlega niniejszej Licencji wraz z warunkiem, który jest > dalszym ograniczeniem, możesz usunąć ten warunek. Z tego, co rozumiem, wygląda na to, że to zależy od tego, jak to określę. Jeśli zażądam, aby prywatna modyfikacja została wykorzystana do uzyskania wyniku, który został opublikowany w celu udostępnienia, byłoby w porządku, w przeciwnym razie byłoby _dalszym ograniczeniem_, gdybym zabronił prywatnego używania i nieudostępniania zmodyfikowanego kodu. **Przykład** _A_ implementuje super duper algorytm, ale jest zły z BLAS i zajmuje dużo czasu na symulację. _B_ twierdzi, że udoskonalili kod za pomocą CUDA lub czegokolwiek innego i mogą łatwo uzyskać wyniki w ciągu sekundy. Na podstawie swojej pracy znaleźli to i tamto z symulacji i opublikowali to. I to wszystko. Brak naruszenia GPL i lepszego kodu dla społeczności. **Inny przykład** Wyobraź sobie, że jakieś studio animacji wzięło Blendera, zaimplementowało ulepszoną wersję Cycles, która pozwala im renderować rzeczy znacznie szybciej i z mniejszymi problemami. Teraz mają przewagę, ponieważ mogą szybciej dostarczać animacje klientom. Bez przekazywania oprogramowania, bez naruszania GPL, bez udostępniania ulepszeń.


title: Algorytm oznaczania punktów

text: Potrzebuję algorytmu do umieszczania poziomych etykiet tekstowych dla wielu serii punktów na ekranie (w zasadzie muszę pokazywać znaczniki czasu i inne informacje dotyczące historii poruszania się obiektów na mapie; ogólnie jest wiele punktów danych na obiekt). Etykiety tekstowe powinny znajdować się blisko ich punktów — nad, pod lub po prawej stronie — ale nie powinny zachodzić na inne punkty ani etykiety tekstowe. Czy ktoś zna algorytm/heurystykę do tego?


title: Alternatywy dla metodologii śledzenia czasu

text: **Pierwsze pytanie:** Jakie są możliwe alternatywy dla śledzenia czasu pracy pracowników w firmie zajmującej się tworzeniem stron internetowych/oprogramowania i dlaczego są one lepsze **Wyjaśnienie:** Pracuję w firmie, w której pracujemy w ten sposób. Każdy otrzymuje pensję. Mamy 3 rodzaje prac, kontraktowe, doraźne i wewnętrzne (niepodlegające rozliczeniu). Adhoc to tylko małe zmiany, które trwają kilka godzin i po prostu wystawiamy rachunek klientowi na koniec miesiąca. Kontrakty są podpisywane i mamy ten długi, długi proces, jak zwykle. Obliczamy, ile kosztuje, uzyskując oszacowanie czasu (od projektu i programistów), mnożąc go przez naszą stawkę godzinową i to wszystko. Powiedzmy, że szacujemy 50 godzin na stronę internetową. Mamy oprogramowanie do śledzenia czasu i musimy rejestrować czas w 15, który spędzamy nad nim (na przykład od 7:00 do 7:15), nazwę projektu i dodawać do niego uwagi. Teraz, jeśli przekroczymy 50 godzin, oboje tracimy pieniądze i jesteśmy nieefektywni. **Teraz** wyjaśniłem, jak działa system, moje pytanie brzmi, jak inaczej można to zrobić, jeśli istnieje lepsza metoda (co na pewno trzeba). Nikt tutaj nie lubi obecnego systemu, po prostu nie możemy znaleźć alternatywy. Byłbym bardziej niż chętny do pracy po godzinach, dłuższych godzinach nad projektem, aby zrobić to na czas, ale jestem bardzo skłonny to zrobić w obecnym systemie. Chciałbym móc podsumować (lub link) do tego posta dla mojego menedżera, aby pokazać im, dlaczego powinniśmy używać systemu abc zamiast tego systemu.


title: Co C++ robi lepiej niż D?

text: Ostatnio uczę się D i zaczynam zaznajomić się z językiem. Wiem, co oferuje, jeszcze nie wiem, jak ze wszystkiego korzystać, niewiele wiem o idiomach D i tak dalej, ale się uczę. Podoba mi się D. To fajny język, będący w pewnym sensie _ogromną_ aktualizacją C i ładnie zrobioną. Żadna z funkcji nie wydaje się być „przykręcona”, ale w rzeczywistości dość przemyślana i dobrze zaprojektowana. Często słyszysz, że D jest tym, czym _powinien_ być C++ (pozostawiam pytanie, czy jest to prawdą dla każdego i każdego, aby sam decydował, aby uniknąć niepotrzebnych wojen płomieni). Słyszałem też od kilku programistów C++, że bardziej podoba im się D niż C++. Ja, chociaż znam C, nie mogę powiedzieć, że znam C++. Chciałbym usłyszeć od kogoś znającego zarówno C++, jak i D, jeśli sądzi, że jest coś, co C++ robi lepiej niż D _jako język_ (co oznacza nie zwykłe „ma więcej bibliotek innych firm” lub „jest więcej zasobów” lub „ istnieje więcej zadań wymagających C++ niż D"). D zostało zaprojektowane przez bardzo wykwalifikowanych programistów C++ (Waltera Brighta i Andreia Alexandrescu, z pomocą społeczności D), aby naprawić wiele problemów, które miał C++, ale czy było coś, co w rzeczywistości nie było lepsze? Coś, czego mu brakowało? Coś, co Twoim zdaniem nie było lepszym rozwiązaniem? Zauważ też, że mówię o D 2.0, a nie D 1.0.


title: Jak udowodnić, że graf acykliczny ma n-1 krawędzi?

text: Nie jestem zbyt gorący w matematyce, ale za to, co rozumiem... Istnieje wykres g z wierzchołkami i krawędziami v. g = (V, E); Wykres opinający dla tego jest acykliczną kopią tego, gdzie wszystkie wierzchołki są obecne, a wszystkie krawędzie są podzbiorem grafu z warunkiem, że każde połączenie jest różne. Najwyraźniej MST powinien mieć n-1 węzłów. Jak to udowodnić? **Źródła:** http://youtu.be/zFbq8vOZ_0k?t=25m1s http://www.gtkesh.com/minimum-spanning-tree/


title: Jak obsłużyć wiele argumentów w wrapperze API?

text: Piszę otokę PHP API dla API innych firm. Chcę, aby wszystkie metody były spójne, ale nie jestem pewien, jak obsłużyć liczbę argumentów akceptowanych przez niektóre trasy API. Jedno żądanie API akceptuje do 30 argumentów. Oczywiście niewygodne byłoby wypisanie każdego argumentu jako parametru metody. Obecnie piszę, aby zaakceptować wymagane argumenty jako parametry metody, podczas gdy wszystkie opcjonalne są akceptowane w końcowej tablicy „additionalOptions”. public function sampleApiMethod($reqVal1, $reqVal2, $additionalOptions) { //Kod metody } Niestety istnieją żądania API, które mają tylko opcjonalne argumenty. W takim przypadku albo jedynym parametrem jest tablica opcji, albo metoda ma indywidualne parametry dla opcjonalnych argumentów. Przy przekazywaniu tylko tablicy metoda jest zgodna z innymi metodami, ale nie jest najbardziej intuicyjna. Przy tej drugiej opcji tracę spójną strukturę. Czy istnieje jakaś najlepsza praktyka lub struktura opakowania interfejsu API, którą powinienem przestrzegać, aby uzyskać spójne środowisko użytkowania dla programistów?


title: Najlepsza strategia w SQL

text: Niedawno kolega powiedział mi, że nie jest wskazane stawianie warunków w **klauzulach łączenia**. Zamiast tego zasugerował, aby postawić warunki w **klauzuli where**. Powiedział mi, że silnik SQL został w ten sposób zoptymalizowany. Oto prosty przykład ilustrujący moje pytanie. Myślę, że w tym przypadku miałoby to jakiekolwiek znaczenie. Jaka strategia jest najlepsza? I dlaczego? Załóżmy, że mamy parametr o nazwie `@user_id`. ## Pierwsza strategia SELECT role.name FROM user_role INNER JOIN user ON user_role.user_id = user.id AND user_role.user_id = @user_id INNER JOIN role ON user_role.role_id = role.id ## Druga strategia SELECT role.name FROM user_role INNER JOIN użytkownik ON user_role.user_id = user.id INNER JOIN role ON user_role.role_id = role.id GDZIE user.id = @user_id


title: Kto powinien określać wielkość zespołu?

text: Deweloperzy, menedżerowie czy klienci? Ostatnio znalazłem się w sytuacji, w której czułem, że klienci arbitralnie domagają się większej liczby programistów w zespole, który miał już zbyt wielu programistów. Obawiali się, że projekt się spóźni (i prawdopodobnie będzie). Osobiście bałem się, że spełnimy prawo Brooka. Grupie programistów brakowało już dogłębnej wiedzy biznesowej, a niektórzy byli nawet nowicjuszami w technologii (.NET), ale klient chciał dodać więcej programistów, którzy mieli jeszcze **mniejszą** wiedzę biznesową. Odnosiło się wrażenie, że dzięki temu projekt zostanie zrealizowany szybciej. Zacząłem się zastanawiać, czy klient, który jest niezwykle bystry, ale przypuszczalnie niewiele wie o zarządzaniu projektami IT, powinien rzeczywiście decydować o wielkości zespołu.


title: Jak mogę zapewnić, że nasze pliki SolidWorks są objęte GPLv3?

text: Jestem odpowiedzialny za projekt na github, który ma pliki, które są i nie są oparte na kodzie. W szczególności martwię się o nasze pliki SolidWorks. Jak mogę się upewnić, że te pliki są objęte licencją GPLv3?


title: Obsługa przełomowych zmian w systemie produkcyjnym - Wstaw obiekt zarządzania na poziomie średniozaawansowanym

text: Zgodnie z życzeniem naszego klienta przystępujemy do zmiany bazy naszego systemu. Mamy już następującą strukturę: > Klasa ma wielu uczniów. (prosty typowy jeden - do - wielu) Teraz musimy zmienić to na: > Klasa ma wiele grup. Każda grupa ma wielu uczniów. (Obiekt pośredni > "Grupa" jest wstawiony). Wydaje się to być „prostą” zmianą, ale łamie cały interfejs zarządzania, od klienta mobilnego po widoki internetowe. A także w strukturze bazy danych. Nasz system to program do zarządzania danymi, w którym mamy około 50 - 60 obiektów domeny, które są częścią modelu hierarchii około 5 poziomów. A obiekt pośredni jest wstawiany w drugim etapie. Moje pytanie obejmuje 2 aspekty: 1) Jak oszacować potrzebne wysiłki. Tworzę nową gałąź kodu, następnie wstawiam nowy obiekt domeny, po czym przerywam relację ucznia klasy, aby wstawić nową „grupę”. Następnie zajrzyj do raportu błędów Eclipse, aby zlokalizować problematyczny kod. Jednak sprawia to, że cały projekt jest czerwony i mam problem z dokładnym oszacowaniem czasu wykonania zadania. 2) Jak uniknąć/zapobiegać takiej sytuacji w przyszłości. Zdarza się to już raz i w tym czasie spędziłem tydzień na napisaniu skryptu do konwersji bazy danych, a także na wprowadzeniu zmian. Ale w tym czasie system jest wciąż mały. Teraz się rozrosło.


title: Nauka programowania na kartach perforowanych

text: Raz w życiu chciałbym spróbować programowania z kartami dziurkowanymi. W jaki sposób mogę to zrobić? Mam 30 lat i dorastałem całkowicie w erze PC, programując na komputerach z ekranami i klawiaturami. Chcę doświadczyć tego, jak kiedyś pracowali mój ojciec i dziadek. Wyobrażam sobie, że sprzęt (i prawdopodobnie same karty) nie są już produkowane. Czy są już jakieś uniwersytety lub muzea z działającymi czytnikami kart dziurkowanych? Jestem w Bostonie, ale chcę podróżować, aby to zrobić. Zapytałem MetaFilter i otrzymałem kilka mieszanych odpowiedzi (wraz z wieloma "nie, nie rób tego"). Otrzymałem wskazówkę do Retro-Computing Society of Rhode Island, ale nie otrzymałem jeszcze odpowiedzi na mój e-mail do nich.


title: Dodawanie a mnożenie na wydajność algorytmu

text: Uczę się o optymalizacji algorytmów.(Prof. Skiena's Algorithm Guide) Jedno z ćwiczeń prosi nas o optymalizację algorytmu: Załóżmy, że następujący algorytm jest używany do obliczenia wielomianu p(x) = a^(xn) + a^n -1(xn−1) + . . . + a(x) + a p := a0; xmoc := 1; dla i := 1 do n wykonaj xpower := x ∗ xpower; p := p + ai ∗ xpower end (Tutaj xn, xn-1... to nazwy nadane różnym stałym.) Po zastanowieniu się nad tym jedynym sposobem na ulepszenie tego algorytmu jest p := a0; xmoc := 1; dla i := 1 do n wykonaj xpower := x ∗ xpower; for j := 1 na ai p := p + xpower next j next i end Dzięki temu rozwiązaniu zamieniłem drugie mnożenie na dodawanie w pętli for. Moje pytania: 1. Czy znajdujesz inny sposób na optymalizację tego algorytmu? 2. _Czy sugerowana przeze mnie alternatywa jest lepsza niż oryginał?_ (Edycja: Jak sugerowano w komentarzach, to pytanie, chociaż związane z problemem, zasługuje na osobne pytanie. Proszę zignorować.)


title: Przeprojektowanie projektu ASP.NET AJAX jako ASP MVC

text: Zostałem poproszony o zbadanie możliwości przeprojektowania istniejącej aplikacji sieci Web ASP.NET AJAX w ramach MVC. Projekt, w jakim jest ATM, jest bardzo mocno uzależniony od kontrolek Telerik'a ASP.NET AJAX. Nie mam jeszcze okazji przeprowadzić wywiadu z osobą odpowiedzialną za ten wniosek, więc nie mam pewności co do sterowników, ale uważam, że oprócz szukania bardziej ustrukturyzowanego rozwiązania (oryginał został opracowany w bardzo organicznym sposób) Uważam, że jednym z celów jest _także_ uzyskanie dużej części kodu działającego po stronie klienta i użycie ustrukturyzowanego formularza do rozwoju również tam. Więc moje pytanie brzmi, czy istnieje określony zestaw rozważań dotyczących czegoś takiego? Lub, jeśli ludzie w ogóle robią takie rzeczy, czy po prostu to robią?


title: Czy dobrym pomysłem jest włączenie Projektu Instalatora do jednego rozwiązania?

text: Mam dość dużą bazę kodu dla produktu klienta, nad którym pracuję. Używam programu Visual Studio 2010 do mojego rozwoju i jest gorączkowo powolny. Mogę się tego pozbyć, wyłączając projekt instalatora w pliku rozwiązania. * Czy dobrym pomysłem jest uwzględnienie projektów instalacyjnych w tym samym rozwiązaniu? * Jak mogę zwiększyć wydajność programu Visual Studio podczas pracy z dużymi projektami (w tym z instalatorem?) * Co powiesz na inną konfigurację kompilacji oddzielnie dla instalatora? Czy to pomoże?


title: Licencjonowanie komercyjnej aplikacji Blackberry

text: Chcę stworzyć aplikację dla strony internetowej (w tym przypadku na przykład stackoverflow.com). Czy naruszę warunki korzystania z usługi Blackberry, jeśli wystawię (płatną) aplikację na stronie, której nie jestem właścicielem? A co ze stroną, z której będę korzystać?


title: Pisanie czystego, eleganckiego kodu proceduralnego (BASIC): czy istnieje coś takiego?

text: Nauczyłem się kodować w językach OO. Zawsze interesowały mnie wzorce projektowe, czysty kod itp. itd. - znasz typ. Teraz w pracy używam dialektu BASIC. Biorąc pod uwagę współczesne wartości programistyczne, czy powinniśmy spróbować przenieść te same zasady do nowego kodu proceduralnego? Zastanawiam się nad następującymi kwestiami i zastanawiam się, czy jestem na właściwej linii. * * * **Nazwy zmiennych** Zmienne nie są mocno wpisane (koszmar!), mają krótkie nazwy i są pisane WIELKIMI LITERAMI (dlaczego?!) - w zasadzie trudno mi je czytać i mogą być _cokolwiek_. Jestem pewien, że kiedyś „XCNT = 1” oferowałby wzrost wydajności w porównaniu z „int_EXISTINGCUSTOMERCOUNT = 1”, ale już to przeszliśmy — na pewno? Tutaj wybieram pełną nazwę. **GOSUB** Chcę podzielić długie bloki kodu na wiele mniejszych bloków. Wewnętrznie, `GOSUB` jest używany (nad `FUNCTION`), jeśli helper nie może być ponownie użyty przez inne programy/funkcje. Biorąc pod uwagę możliwość dodawania/modyfikowania zmiennych bez bezpieczeństwa scopingu (jak znamy go w świecie OO) `GOSUB` mnie przeraża. To jest typowe: GOSUB GET_BEST_CUSTOMER IF RC = 0 THEN CRT CNAME Ale napisałbym: rc_GETBESTCUSTOMER = 1 ; !Domyślny wyjątek str_CUSTOMERNAME = "" GOSUB GET_BEST_CUSTOMER ; !set rc_GETBESTCUSTOMER, wypełnij str_CUSTOMERNAME IF(rc_GETBESTCUSTOMER = 0) THEN CRT str_CUSTOMERNAME END Z zastrzeżeniem, że `GET_BEST_CUSTOMER` zmodyfikuje tylko `rc_GETBESTCUSTOMER` i `str_CUSTOMERNAME` w zakresie „globalnym”. * * * Jest jeszcze więcej, ale wszystko idzie w tym samym kierunku. Biorąc pod uwagę wybór edytora (Notepad++), powiedziałbym, że mój styl kodowania sprawia, że kod jest łatwiejszy do odczytania i zrozumienia - dlatego łatwiejszy w utrzymaniu. Ale jestem pewien, że jakiś zagorzały BASIC z łatwością powiedziałby mi, że robię to wszystko źle.


title: Jak zmienić moje rozwiązanie/projekt, gdy zmieni się specyfikacja?

text: Mam pytanie dotyczące najlepszych praktyk w tej sytuacji. W pewnym momencie moja mała aplikacja pozwoliła klientowi przesłać plik na serwer i pobrać plik z serwera (także kompresowałby / dekompresował). Zostało to stworzone w 1 rozwiązaniu, które składało się z 4 projektów: 1. FTP 2. CompressDecompress 3. UI 4. Testy Teraz specyfikacja uległa zmianie i będzie 2 użytkowników końcowych, jeden, który chce tylko wgrać, drugi, który tylko chce pobierać i nigdy nie powinni mieć dostępu do niczego innego (tj. ludzie nie mogą pobierać i vice versa). Tak więc mam tutaj kilka możliwości. Mógłbym albo 1. Zachować to jako 1 rozwiązanie i poprosić użytkowników o zalogowanie się, na podstawie poświadczeń wyświetli się inny interfejs użytkownika 2. Zmienić mój interfejs użytkownika, aby wyświetlał tylko narzędzia do pobrania, utworzyć nowe rozwiązanie, które składa się tylko z projektu interfejsu użytkownika i odpowiednio odwołaj się do mojego pliku .dll. 3. Usuń mój interfejs użytkownika, utwórz 2 nowe rozwiązania, każde rozwiązanie jest tworzone do pobrania lub przesłania (a każde rozwiązanie prawdopodobnie składa się tylko z 1 projektu, interfejsu użytkownika) i ponownie, odwołując się do pliku .dll. Czy ktoś ma jakieś sugestie? Czy jakiekolwiek wytyczne pozwoliłyby mi w ogóle nie wpaść w tę sytuację (lub przynajmniej uświadomiły mi potencjalne katastrofy)?


title: Przywracam mój genialny mózg

text: Cóż... Zostałem zatrudniony, ponieważ nie studiowałem informatyki ani inżynierii, ale byłem naprawdę dobry w kodowaniu. Moją pracą jest robienie heterodoksyjnych rzeczy, kiedy trzeba... Wiesz, facet, który czasami musi użyć goto, albo wymyślić jakąś dziwaczną technologię. Kiedy zaczynałem swoją pracę, strzelałem do rzeczy, które musiałem zrobić, potem byłem coraz wolniejszy, aż prawie zostałem zwolniony. Teraz jestem mniej więcej stabilny, ale zauważam, że znowu zwalniam. Po prostu otwieram swój kod źródłowy, patrzę na niego i nie mam pojęcia, co mam robić, czasem nawet nie wiem, co robiłem. Myślę, że ma to związek z moim stylem życia. Moja praca to dwie godziny dojazdów (co oznacza, że tracę 4 godziny dziennie), a nie skończyłam jeszcze studiów (więc muszę popracować w domu), a w weekendy spędzam czas z drugą połówką. Czy ktoś wie, co zrobić w takiej sytuacji? Jestem przygnębiony, że nie umiem pisać kodu tak, jak wtedy, gdy zaczynałem, lub gdy ktoś rzuciłby na mnie jakiś dziwny problem i natychmiast wyplułbym rozwiązanie. Teraz mam problem z pisaniem nawet 10 linijek kodu dziennie, bo cały dzień staram się wymyślić, co zrobić. W rzeczywistości nie mogę nawet odwlekać, kiedy **chcę** odwlekać, otwieram przeglądarkę i nie mam pojęcia, którą stronę otworzyć. To naprawdę denerwujące :( Czuję, że moje IQ spadło z mierzonych poziomów do około 80 ...


title: Jak przeprowadzasz testy wydajności ASP.Net?

text: Nasz zespół potrzebuje procesu testowania wydajności. Używamy ASP.Net (zarówno formularzy internetowych, jak i MVC), a testowanie wydajności nie jest obecnie wbudowane w nasze projekty. Od czasu do czasu przeprowadzamy analizy ad hoc, takie jak sprawdzanie obciążenia serwera lub SQL Server Profiler, ale nie mamy prawdziwego początku do końca, wbudowanego w metodologię testowania wydajności projektu. Od czego zacząć? Interesują mnie zarówno: 1. Proces - Ogólna wiedza, w tym najlepsze praktyki. 2. Niezbędna lista narzędzi. Znam kilka narzędzi, takich jak to, co jest wbudowane w droższe wersje produktów VS 2010 i JetBrains, chociaż ich nie używałem.


title: Jaka jest domena automatycznych narzędzi testujących, takich jak ScalaCheck?

text: Nie widziałem zbyt wielu przykładów testowania za pomocą narzędzi automatycznych, tj. serializacji/deserializacji JSON (który został sparowany w następujący sposób: `valctual = deserialize(serialize(string))`), sprawdzając, czy dołączanie symboli do ciągu było wykonane poprawnie (i to niemądre, bo bardzo trudno popełnić błąd w tak prostych operacjach). Czy możesz podać naprawdę przydatne przykłady/przypadki użycia do automatycznego testowania za pomocą ScalaCheck, które ujawnią jego zalety? Czy ma być używany głównie w stylu sparowanym (funkcje proste/odwrotne, jak w powyższym przykładzie JSON)?


title: W opisie wyższego poziomu, jak ma działać DLMALLOC?

text: Wydaje się, że nie ma zbyt wielu dobrych opisów dotyczących szczegółów działania dlmalloc. Źródła, na które natknąłem się do tej pory, _wspominają_ o dlmalloc, ale następnie wyjaśniają, czym są malloc() i free(), zamiast opisywać dlmalloc. Z drugiej strony opis Wikipedii był dla mnie trochę trudny do zrozumienia. http://en.wikipedia.org/wiki/Malloc#dlmalloc_and_its_derivatives Czy ktoś może wyjaśnić działanie dlmalloc, jak go wdrożyć i dodatkowe źródła, które mogą pomóc?


title: Czy warto zostać programistą?

text: Jestem studentką pierwszego roku CS i uwielbiam programować. Wiele osób mówiło mi, że kiedy zaczynasz pracę, to nie jest tak dobrze, ponieważ przynosisz pracę do domu (myślisz o tym, jak rozwiązywać problemy w ciągu dnia), pracujesz wiele godzin, gdy zbliża się termin, i tak dalej. Słyszałem, że bycie administratorem systemu jest mniej stresującą pracą, ponieważ nie musisz się o to martwić w domu. Tak więc moje pytania (dla doświadczonych programistów): * Czy warto zostać programistą? * Czy Twoja praca zadowala Cię na tyle, aby przezwyciężyć te problemy? Z góry dziękuję.


title: Oprócz IDE, bibliotek i języka, jakie są główne różnice między programowaniem na iOS i Androida?

text: Pochodzę od strony iOS. Szczególnie interesuje mnie, czy istnieją podobne przeszkody po stronie Androida w następujących kwestiach: * opłata programisty – czy musisz płacić 99 USD rocznie, aby zbudować dla Androida? * urządzenia do obsługi administracyjnej — czy musisz przejść przez złożoną procedurę obsługi administracyjnej/certyfikatu cyfrowego/identyfikatora urządzenia, aby uzyskać aplikację, którą tworzysz na urządzeniu do testowania? * dystrybucja na rynku – czy musisz przejść przez proces zatwierdzania, aby Twoja aplikacja trafiła do użytkowników? * płatność – czy łatwo jest otrzymać zapłatę za swoją aplikację? Jaki jest krój Amazona? Dziękuję. Wiem, że prawdopodobnie mógłbym znaleźć te odpowiedzi rozproszone w Internecie, ale na pewno zaoszczędziłoby mi to czasu, gdybym usłyszał od doświadczonego programisty Androida.


title: Jak mogę „dowiedzieć się”?

text: Moja firma opublikowała ofertę pracy, aby znaleźć mi pomocnika. Rekruter zadzwonił do mnie dzisiaj i wszystko, co powtarzał, to "MVC to Entity Framework, które..." - Brzmiał w szoku, gdy powiedziałem, że projekt używa DataSets i Linq2Sql nad WinForms i ASP.NET WebForms. Potem szukałem opcji automatycznego testowania stron internetowych i natknąłem się na to tutaj: i zacząłem się denerwować. > Większość ludzi "wiedzących" używa warstw prezentacji, aby ASP.NET był > tak cienki, że narzędzie takie jak NUnitAsp nie jest pomocne. Ta osoba wie, a jego przyjaciele najwyraźniej wiedzą. Ja też chcę być na bieżąco, ponieważ brak wiedzy sprawia, że czuję się niepewnie i trochę smutno. W moich wysiłkach w zeszłym roku, aby iść z duchem czasu, zdałem sobie sprawę z ogromnych korzyści płynących z Linq2Sql i kontenera Unity. Oboje byli dla mnie po prostu dobrzy - wypełniali luki, które były dla mnie widoczne od wieków. Następnie przeszedłem do Model-View-Preseneter dla GUI WinForms i znów byłem bardzo zadowolony z tego samego powodu - przez długi czas zadawałem sobie pytanie, jak oddzielić rzeczy, aby móc mieć grubego klienta i sieć klient dzieli wspólną logikę we wspólnej bazie kodu. Jednak zmagam się z następującymi. I wiem, że milion ludzi nie może się mylić i nie jestem mądrzejszy niż masy, ale potrzebuję pomocy, aby zobaczyć: * MVC jako ewolucję WebForms * WPF jako ewolucję WinForms * Entity Framework jako ewolucję Linq2Sql (i, jeśli o to chodzi, deprecjacja Zbiorów Danych) (podejrzewam, że to wszystko wynika z mojego dotychczasowego braku uzyskania Test Fahrvergnügen) Tak więc zadawałem sobie pytanie i nie słyszę odpowiedzi na: * Co zyskam używając MVC w aplikacji internetowej? Wiem, że mogę się nauczyć dodatkowych artefaktów kodu źródłowego i nowego DSL. Co jeszcze? * Co by się stało, gdybym użył obiektów WPF bez wzorca MVVM? Czy zniweczyłbym swoje szanse na znalezienie pracy gdzie indziej? * Jeśli o to chodzi, czy WinForm jest naprawdę zepsuty? Czy to ja, czy Visual Studio ma zauważalne wizualne opóźnienie na moim dwurdzeniowym komputerze 2,8 GHz z 8 GB pamięci RAM? Lubię żwawy. Chcę, aby użytkownicy końcowi mogli bez przerwy doświadczać Snappy. * Dlaczego zbiory danych są „starym sposobem”? Wydają się szybkie, wydajne i zwięzłe dla wielu małych i średnich problemów, które muszę rozwiązać (ale nie są nawet w Silverlight). Czuję, że na talerzu jest duży stos złożoności, a rozłożenie go nie sprawi, że zniknie. Należy skonfrontować się z wewnętrzną złożonością, a być może inżynieria oprogramowania powinna bardziej przypominać elektrotechnikę, inżynierię mechaniczną lub chirurgię mózgu.


title: Poziom szczegółowości historyjki użytkownika

text: Mam zamiar rozpocząć sesje User story w moim zespole. To dla nich całkiem nowe, a ja też zmagam się z pewnymi sprawami. Do obecnego projektu mamy kilka dobrze opracowanych makiety. Dużo czytam o sposobie pisania historyjek użytkownika. Jaki powinien być szablon i o różnych środkach pomocniczych, takich jak Invest Plan jest taki, aby odwrócić je w historyjkach użytkowników. Powiedzmy, że mam ekran, na którym użytkownik może edytować zamówienie. Na tym ekranie jest dużo szczegółów. Teraz przy tworzeniu historii użytkownika tej historii. Czy wystarczy powiedzieć: > Jako administrator mogę edytować zamówienie zakupu, aby poprawić błędy wpisywane przez użytkownika >. A może powinienem określić każdy szczegół, taki jak: > Jako administrator mogę ponownie wysłać fakturę do klienta, aby mógł uzyskać kopię > swojej utraconej. > > Jako administrator mogę przejrzeć zamówienie klienta, aby uzyskać szczegółowe informacje > o każdym zakupie > > Jako administrator mogę usuwać pozycje z zamówienia, aby w przypadku > pomyłki klienta móc usunąć pozycje. * * * A co z kryteriami akceptacji. Jak należy zdefiniować historyjkę użytkownika jako taką. Gdzie mam określić, które pola mają być wyświetlane na stronie szczegółów zamówienia? Czy może to być część kryteriów akceptacji?


title: Dlaczego metody statyczne mogą używać tylko danych statycznych?

text: Nie rozumiem, dlaczego metoda statyczna nie może używać danych niestatycznych. Czy ktoś może wyjaśnić, jakie są problemy i dlaczego nie możemy tego zrobić?


title: narzędzia github - czy istnieje sposób, aby nie chronić swojej aplikacji prawami autorskimi i pozostać jej autorem?

text: Zastanawiam się... Ostatnio obserwowałem github; Widziałem wiele kodów projektów Java, które nie mają praw autorskich w swoich nagłówkach... Mam na myśli, jak się domyślam, w tym przypadku jedyną rzeczą, która może udowodnić autora kodu jest - jest to konto autora na githubie; Więc moje pytanie brzmi... czy jest bezpiecznie chronić kod open source tylko za pomocą konta github, czy jest na to bardziej optymalny sposób? Podziel się swoim doświadczeniem; Dziękuję


title: Zdalny komputer mobilny

text: Jeśli kupię telefon symbian(S60, nokia E51) i chcę napisać program do sterowania komputerem PC (uruchamianie programów, sterowanie myszą/klawiaturą): 1. Czy można stworzyć aplikację mobilną i aplikację dla systemu Windows, która się komunikuje przez Wi-Fi, czy łatwiej/szybciej przez bluetooth? 2. Jaki framework powinienem wybrać? (symbian/java) 3. (inne informacje, których mogę potrzebować)


title: Komunikacja systemowa: unikanie włączania dużej hierarchii „HAS-A”, która nie jest używana

text: Sytuacja: **System A** Ogromny, skomplikowany system. Używa ważnego obiektu Message z wieloma innymi dołączonymi obiektami Message, z których wiele ma dołączone dodatkowe obiekty Message. W sumie jest to około dwudziestu różnych obiektów. Ze względu na niezręczną synchronizację z wydaniami i wprowadzeniem zmiany kodu, System A nie może mieć dotkniętej hierarchii obiektów komunikatów. **System B** Musi używać tego samego ważnego obiektu wiadomości, aby komunikować się z systemem A, aby skorzystać z jednej z jego usług. Ponieważ jednak wiadomości, które wyśle, będą niezmienne, używa tylko bardzo małej części hierarchii obiektów wiadomości. Pytanie: Jak mogę pozwolić Systemowi B na użycie ważnego obiektu Komunikatu bez (a) dotykania Systemu A, lub (b) włączając hierarchię prawie dwudziestu obiektów, z których prawie żaden nie jest używany? Czy istnieje bardziej zaawansowany wzorzec projektowy, który można wykorzystać w tym scenariuszu?


title: jak i powinienem „testować jednostkowo” cały pakiet?

text: Nadal uczę się, jak być dobrym w testowaniu na poziomie _jednostkowym_, ponieważ w przeszłości zawsze byłem trochę niechlujny, jeśli chodzi o wykonywanie tylko testów funkcjonalnych, więc chcę dokładnie sprawdzić, czy robię to „dobrze”. Mam pakiet, który jest odpowiedzialny za automagiczną aktualizację konkretnej konfiguracji, która powinna się regularnie zmieniać w czasie wykonywania. Podaj listę obiektów do monitorowania do konstruktora mojej głównej klasy pakietu. Następnie w pewnym momencie wywołanie update przejdzie do wszystkich wielu miejsc, które definiują konfigurację, wykrywają zmiany, aktualizują odpowiedni stan monitorowanych obiektów i dostarczają raport o tym, co zostało zmienione. Wszystko to odbywa się automatycznie iw inny sposób niewidoczne dla wszystkich innych pakietów. Mam ochotę przetestować to jako jednostkę, ale jest to dość „duża” jednostka, 5-6 klas i pobieranie z wielu plików oraz spokojny interfejs. Wydaje się, że testowanie mniejszych jednostek zajęłoby znacznie więcej czasu, byłoby mniej elastyczne w przypadku refaktoryzacji i zapewniłoby tylko nieco większą szansę wykrycia defektu, ale to może być tylko moje lenistwo. Czy „lepiej” byłoby testować na niższym poziomie? Zakładając, że „słuszne” jest przetestowanie pakietu jako jednostki, co uważa się za odpowiednie do kpiny z czegoś takiego? Istnieją metody klas, które są tworzone przez moją główną klasę (tj. nie są to coś, co przekazuję bezpośrednio, więc nie mogę po prostu przekazać własnej makiety), które mają metody, które chcę kontrolować. Uważam, że mogę użyć powerMock w dwóch przypadkach, o których myślę (lub mógłbym, po zbadaniu PowerMock), ale nie jestem pewien, czy jest to wystarczająco przejrzyste. Czy konfigurowanie PowerMock w celu wykrywania i zwracania obiektu pliku próbnego za każdym razem, gdy mój pakiet próbuje otworzyć plik konfiguracyjny, nawet jeśli jest on głęboko ukryty w logice mojego pakietu, jest akceptowalny, czy też uważa się to za nadużywanie mojej wiedzy o szczegółach implementacji? Czy „czystsze” byłoby faktyczne modyfikowanie plików konfiguracyjnych w systemie plików i pozwalanie na ich normalne odczytywanie bez dalszego wyśmiewania? Musiałbym regularnie modyfikować pliki do testowania... Edycja: Aby wyjaśnić kwestię sprzężenia zadaną w jednym z pytań, nie sądzę, aby moje klasy były nadmiernie sprzężone. W efekcie mam trzy klasy, które pobierają stan z A, B i C, a następnie klasę „główną”, która pobiera stan z tych trzech i decyduje, jak je poprawnie połączyć (tzn. jeśli A i B nie pasują do siebie, użyj A chyba że C). Mogłem z łatwością testować A B i C osobno, a następnie kpić z nich, aby przetestować moją „główną” klasę. Wygląda jednak na to, że testowanie mojej „głównej” klasy i tak skutecznie przetestowałoby stosunkowo proste interfejsy dla A, B i C, gdybym ich nie kpił. W związku z tym, aby przetestować je indywidualnie, wydaje się, że praca jest powielona. Mogę uzyskać trochę lepsze pokrycie kodu, być może, dzięki indywidualnym testom i zawsze fajnie jest mieć jeden test tylko jedną rzecz. Ale nie wiem, czy jest to warte wszystkich kosztów dla drobnych korzyści.


title: Jak zarządzasz drobnymi zmianami, które chcesz zachować lokalnie?

text: Rozważam migrację 14-letniego repozytorium CVS (historia nienaruszona) do Mercurial. Myślę, że mam wszystkie techniczne bity konwersji, ale nadal mam kilka pytań dotyczących efektywnej pracy w mercurialu. Jedną z rzeczy, które często widzę w piaskownicach cvs poszczególnych programistów (w tym w moim własnym), są lokalne niezatwierdzone zmiany, które nie są gotowe do wprowadzenia na główną linię. Rozumiem, że to zła rzecz. Większość moich eksperymentów z hg sugeruje, że niezaangażowane zmiany to zła rzecz. Wystarczy do tego niemożność połączenia się z nimi. Chcę wiedzieć, jak radzą sobie z tym inni ludzie, którzy używają rtęci w codziennym kodowaniu. Jak radzisz sobie z niekompletnymi zmianami w kodzie, gdy przychodzi czas na aktualizację repozytorium? Jak radzisz sobie z lokalnymi zmianami, którymi nie chcesz (jeszcze) dzielić się z innymi programistami?


title: Jak przenieść tę architekturę do .net?

text: Mój zespół jest obecnie zmuszony do używania narzędzia, którego nie lubimy, a które przybiera formę wtyczki Eclipse i .jar; wtyczka daje nam przycisk do szybkiego uruchomienia kodu pojedynczego pliku (poprzez wywołanie głównego .jar i przekazanie do niego bieżącego pliku). Chcemy przejść do C#.net. Czy istnieje sposób, aby program Visual Studio zreplikował to zachowanie? Oczywiście moglibyśmy umieścić każdą uruchamialną klasę w swoim własnym projekcie w naszym rozwiązaniu, ale wymaga to sprawdzenia wielu plików projektu pod kontrolą źródła. Idealnie byłoby, gdybyśmy mieli metodę main() w każdym pliku i moglibyśmy powiedzieć Visual studio, aby uruchamiał tylko ten plik do celów programistycznych, podczas gdy gotowe oprogramowanie byłoby uruchamiane z jednego punktu wejściowego przy użyciu parametrów wiersza polecenia. (Nie chcę podawać tutaj zbyt wielu informacji dotyczących przeznaczenia oprogramowania, więc proszę po prostu zaakceptuj, że obecna konfiguracja ma wiele sensu dla tego, co robimy, a zbyt duża zmiana zostanie odrzucona przez kierownictwo.)


title: Jak rozpowszechniać Scala?

text: Wraz z ogłoszeniem Cejlonu i po obejrzeniu slajdów opisujących jego intencje i listę funkcji, uznałem ten język za konkurenta Scali. Co więcej, jako programista Scali, widzę kilka punktów (jak pokazano tutaj), które stwierdzają, że Scala idzie dalej w zapewnianiu skoku kwantowego nad Javą, która mimo to jest interoperacyjna. Jednak język ten może być objawem braku zrozumienia cech Scali i/lub braku znajomości samego języka, co może być nie tylko ich winą. Wiele świetnych pomysłów zawiodło z powodu złego/niewystarczającego marketingu. Beta była pod pewnymi względami lepsza niż VHS, ale straciła swój udział w rynku z powodu marketingu. Więc moje pytanie brzmi: czy robimy wystarczająco dużo, aby wyjaśnić/rozpowszechnić/ewoluować Scala? W jaki sposób profesjonaliści/entuzjaści Scali mogą popychać język do przodu, jeśli chodzi o uznanie ze strony kolegów (tj. marketing)? Jak możemy sprawić, by dobór naturalny działał i uchronić go przed niepowodzeniem? Czy sponsoring jest drogą do zrobienia? Czy powinny być już przygotowane prezentacje (np. takie, jakie ma na swojej stronie jrebel), aby ułatwić propagację?


title: Jakie są wady wysyłania XML do przeglądarek i pozwalania im na stosowanie XSLT?

text: **Kontekst** Pracując jako niezależny programista, często tworzyłem strony internetowe całkowicie oparte na XSLT. Innymi słowy, na _każde_ żądanie generowany jest plik XML, zawierający wszystko, co musimy wiedzieć o zawartości strony: nazwę aktualnie zalogowanego użytkownika, wpisy w górnym menu, jeśli to menu jest dynamiczne/konfigurowalne, tekst do wyświetlić w określonym obszarze strony itp. Następnie przetworzyć XSL (cache, itp.) do strony HTML/XHTML, aby wysłać do przeglądarki. Ma dobry punkt, aby ułatwić tworzenie małych stron internetowych, zwłaszcza z PHP. Jest to rodzaj silnika szablonów, ale wolę go od innych silników szablonów, ponieważ jest znacznie potężniejszy niż większość silników szablonów i ponieważ znam go lepiej i lubię. Możliwe jest również, w razie potrzeby, udostępnienie surowych danych XML na żądanie w celu zautomatyzowanego dostępu, bez konieczności tworzenia osobnych interfejsów API. Oczywiście zawiedzie całkowicie na każdej średniej lub dużej stronie internetowej, ponieważ nawet przy dobrych technikach buforowania XSL nadal obniża ogólną wydajność witryny i wymaga więcej procesora po stronie serwera. **Pytanie** Nowoczesne przeglądarki mają możliwość pobrania pliku XML i przekształcenia go za pomocą skojarzonego pliku XSL zadeklarowanego w XML, np. `<?xml-stylesheet href="demo.xslt" type="text/xsl"?> `. Firefox 3 może to zrobić. Internet Explorer 8 też to potrafi. Oznacza to, że możliwa jest migracja przetwarzania XSL z serwera na stronę klienta dla 50% użytkowników (według statystyk przeglądarek na kilku stronach, na których mogę chcieć to zaimplementować). Oznacza to, że te 50% użytkowników otrzyma tylko plik XML przy każdym żądaniu, zmniejszając w ten sposób przepustowość ich i serwera (plik XML jest znacznie krótszy niż jego przetworzony odpowiednik HTML) i zmniejszając użycie procesora przez serwer. Jakie są wady tej techniki? Myślałem o kilku, ale nie ma to zastosowania w tej sytuacji: * Trudna implementacja i konieczność wyboru, na podstawie żądania przeglądarki, kiedy wysłać surowy XML, a kiedy przekształcić go w HTML. Oczywiście system nie będzie dużo trudniejszy od rzeczywistego. Jedyną zmianą, jaką należy wprowadzić, jest dodanie łącza do pliku XSL do każdego pliku XML i dodanie sprawdzenia przeglądarki. * Większe wykorzystanie IO i przepustowości, ponieważ plik XSLT będzie pobierany przez przeglądarki, a nie buforowany przez serwer. Nie sądzę, że będzie to problem, ponieważ plik XSLT będzie buforowany przez przeglądarki (tak jak obrazy, pliki CSS lub JavaScript są faktycznie buforowane). * Możliwe problemy po stronie klienta, na przykład problemy z zapisywaniem strony w niektórych przeglądarkach. * Trudność w debugowaniu kodu: niemożliwe jest uzyskanie źródła HTML, którego faktycznie używa przeglądarka, ponieważ jedynym wyświetlanym źródłem jest pobrany XML. Z drugiej strony rzadko zaglądam do kodu HTML po stronie klienta iw większości przypadków jest on bezużyteczny bezpośrednio (usuwane odstępy).


title: „A”, „an” i „the” w nazwach metod i funkcji: Jakie jest twoje zdanie?

text: Jestem pewien, że wielu z nas widziało takie nazwy metod w takim czy innym momencie: * `UploadTheFileToTheServerPlease` * `CreateATemporaryFile` * `WriteTheRecordToTheDatabase` * `ResetTheSystemClock` Oznacza to, że nazwy metod są również poprawnymi gramatycznie zdaniami w języku angielskim i zawierać dodatkowe słowa wyłącznie po to, by były czytane jak proza. Osobiście nie jestem wielkim fanem takich „dosłownych” nazw metod i wolę być zwięzłe, a jednocześnie tak jasne, jak to tylko możliwe. Dla mnie słowa takie jak "a", "an" i "the" wyglądają po prostu niezręcznie w nazwach metod i sprawiają, że nazwy metod są niepotrzebnie długie, nie dodając niczego użytecznego. W poprzednich przykładach wolałbym następujące nazwy metod: * `UploadFileToServer` * `CreateTemporaryFile` * `WriteOutRecord` * `ResetSystemClock` Z mojego doświadczenia wynika, że jest to znacznie bardziej powszechne niż inne podejście polegające na zapisaniu dłuższych nazw, ale ja widziałem oba style i byłem ciekawy, co myślą inni ludzie na temat tych dwóch podejść. Czy jesteś w obozie „nazwy metod, które czyta się jak proza” czy „nazwy metod, które mówią to, co mam na myśli, ale czyta się na głos jak złe tłumaczenie z języka obcego na angielski”?


title: Co jest takiego złego w DOM?

text: Ciągle słyszę ludzi (w szczególności Crockford), którzy mówią, że DOM to okropny interfejs API, ale tak naprawdę nie uzasadniają tego stwierdzenia. Oprócz niespójności w różnych przeglądarkach, jakie są niektóre powody, dla których DOM jest uważany za tak zły?


title: przetwarzanie rozproszone ze zdalnymi maszynami heterogenicznymi

text: Sposób, w jaki teraz to robię, to używanie gniazd boost::asio TCP obsługujących wszystko ręcznie z głównym serwerem, który koordynuje procesy między dostępnymi maszynami, ale liczba maszyn rośnie i kiedy potrzebuję komunikacji między konkretnymi maszynami, muszę to zrobić to przez serwer, a liczba maszyn jest zbyt duża do obsłużenia przez jeden serwer, więc myślę o Open MPI. Jednak mam 3 problemy 1. maszyny są heterogeniczne. 2. liczba dostępnych maszyn może wynosić na przykład 50 na raz, a także może wynosić tylko 10, a czasami dochodzi do 300, co jest zbyt dużym obciążeniem dla mojego serwera i zawsze jest mnóstwo danych do przetworzenia i wydaje mi się, że korzystać z ponad ~70 połączeń jednocześnie. 3. większość maszyn jest zdalna, a niektóre z nich korzystają z tej samej sieci. jeśli chcę skalować rzeczy z moim obecnym projektem, otrzymałbym brzydkie drzewa z wieloma warstwami, nie mam pieniędzy na zatrudnienie ekspertów sieciowych/programistów do projektu non-profit, ale jestem całkiem dobry w przyswajaniu nowych koncepcji, więc jak czy mógłbyś to obejść? a z powyższymi problemami jest dla mnie OpenMPI? Innymi słowy, szukam lepszego projektu niż mój i nie mam problemu z wdrożeniem go od zera bez względu na to, ile to zajmie, a linux będę wspierał tylko na początku, ponieważ uznałem, że kod natywny ma wymierną przewagę, chciałbym poznać twoje pomysły.


title: Czy słuszne jest wymaganie od użytkowników końcowych, aby wyczyścili swoje pliki cookie?

text: Czy to oznaki złego programowania, jeśli personel pomocy technicznej danego produktu wymaga wyczyszczenia plików cookie w celu rozwiązania problemów z ich witryną? Na przykład, jeśli próbujesz aktywować nową kartę SIM na tablecie, a witryna aktywacji operatora wyświetla komunikat o błędzie, że jego witryna nie działa, mimo że nie ma problemu z rzeczywistym dostępem ich serwer WWW, który odpowiada stroną nasza-strona nie działa. Następnie personel pomocy technicznej instruuje użytkownika, aby spróbował wyczyścić pliki cookie (nawet jeśli nie wiadomo, czy ta aktywacyjna witryna internetowa była dostępna przed pojawieniem się komunikatu o błędzie).


Gdzie znajdę opis/odniesienie do dialektu Turbo Pascal? Czy nadal jest w jakimś miejscu dostępny? Szukam słynnego opisu/odniesienia do dialektu Turbo Pascal (tak, ten z lat 80/90), ale nie mam szczęścia do google.


title: Niebezpieczeństwa podczas wdrażania funkcji jako wtyczek

text: _Jakie problemy napotkałeś podczas tworzenia interfejsów wtyczek dla Twojej aplikacji? A jak je rozwiązałeś?_ **Tło** Chcę przerobić aplikację, aby różne funkcje można było przenieść do wtyczek, co pozwoli na ich łatwe dodawanie i usuwanie w przyszłości. Mam nadzieję, że będzie to ładniejszy system niż rozproszenie gałęzi `if (FeatureX_is_enabled)` w całym kodzie. (Mogę się mylić!) Uważam, że będę musiał zdefiniować interfejsy dla każdej części systemu, do której można podłączyć funkcje. Chciałbym skorzystać z twojego doświadczenia, jeśli już podjąłeś tego rodzaju projekt. Być może znosiłeś błędne projekty i możesz doradzić, czego nie robić. Być może możesz polecić wzorce lub architektury, które mogą sprawić, że taki system będzie łatwiejszy w zarządzaniu. **Obawy** Przychodzi mi na myśl kilka kwestii: * Będę musiał zapewnić trochę mocy wtyczkom, aby mogły wykonać swoją pracę. Jeśli przejmę za mało kontroli, nowe wtyczki mogą być **zbyt ograniczone**, aby robić to, czego potrzebują (np. niektórzy autorzy rozszerzeń Google Chrome narzekają na brak możliwości modyfikacji podstawowego interfejsu). Jeśli jednak przejmę zbyt dużą kontrolę, nieodpowiedzialne wtyczki będą miały moc zepsuć całą aplikację (np. rozszerzenia Mozilla Firefox). * Niektóre wtyczki mogą wymagać uruchamiania w **innej kolejności** podczas różnych wydarzeń. Mogłem zarejestrować obsługę zdarzeń z priorytetem, np. 1-100, aby wtyczki mogły się podpinać w odpowiedniej kolejności. Albo mógłbym po prostu stworzyć zdarzenia „post_” i „pre_” i mieć nadzieję, że nie potrzeba nic bardziej drobnoziarnistego. * Jeśli dwie wtyczki **zależą** od innej wtyczki, aby były dostępne jako pierwsze, architektura wtyczek będzie wymagała pewnego rodzaju systemu zależności (i nazewnictwa). * W związku z tym niektóre wtyczki będą musiały wiedzieć, kiedy inne wtyczki są **obecne** , a być może nawet wywoływać się nawzajem, aby poradzić sobie z przypadkami brzegowymi. * Mogą wystąpić trudności w **utrzymaniu stanu** aplikacji, jeśli wtyczki są włączone i wyłączone w **runtime**. (Chrome wydaje się dobrze sobie z tym radzić, ale wiele aplikacji wymaga ponownego uruchomienia.) * Ten rodzaj architektury **zaciemnia przepływ** wykonywania (w zamian za zachowanie dodatkowych zachowań poza podstawowym kodem). Będę musiał napisać zgrabne interfejsy, aby zminimalizować nieoczekiwane zachowanie. * Czasami monolotyczne podejście `if (FeatureX_is_enabled)` może być lepszym sposobem na poradzenie sobie z sytuacją niż wyjście do wtyczki, ale nie wiem jak rozpoznać takie sytuacje. _Prawdopodobnie są inne problemy, których nie brałem pod uwagę, więc chciałbym usłyszeć, z czym musiałeś sobie poradzić!_ **Powiązane** Podobne pytanie: Jak włączyć/wyłączyć moduły kodu? Powiązana biblioteka: Ciekawa biblioteka Flow firmy Bemson dla JavaScript wydaje się zapewniać różne funkcje, które pomagają dodawać i usuwać funkcje do/z programu w czasie wykonywania, ale mam problem z jej zrozumieniem!


title: Czy podczas przeprowadzania przeglądu kodu należy skoncentrować się na kompletności wymagania?

text: Biorąc pod uwagę, że recenzent nie jest częścią projektu, ale został przydzielony do przeglądu, ponieważ wykonał pewne kodowanie dla aktualizowanej/ulepszanej aplikacji. Czy zadaniem recenzenta jest upewnienie się, że wymaganie jest kompletne i poprawne? Czy jest to odpowiedzialność QA i testera biznesowego? Jeśli programista i recenzent przeoczą wymaganie, które jest wykryte w UAT, czy recenzent również ponosi winę (prawdopodobnie w mniejszym stopniu)?


title: Czy konieczna jest walidacja danych wejściowych?

text: To bardzo naiwne pytanie dotyczące walidacji danych wejściowych w ogóle. Jestem użytkownikiem MATLAB (1,5 roku) i nauczyłem się technik walidacji danych wejściowych, takich jak "parse" i "validatestring". W rzeczywistości wbudowane funkcje MATLAB są pełne tych walidacji i parserów. Więc naturalnie myślałem, że jest to profesjonalny sposób tworzenia kodu. Dzięki tym technikom możesz mieć pewność co do formatu danych zmiennych wejściowych. W przeciwnym razie twoje kody odrzucą dane wejściowe i zwrócą błąd. Jednak niektórzy twierdzą, że jeśli wystąpi problem ze zmienną wejściową, kody spowodują błędy i zatrzymają się. I tak zauważysz problem, a więc jaki jest sens tych skomplikowanych walidacji? Biorąc pod uwagę, że kody do samej walidacji wymagają trochę wysiłku i czasu, często z dość skomplikowanymi kontrolkami przepływu, musiałem przyznać, że ta opinia ma rację. W przypadku masowych walidacji danych wejściowych czytelność kodów może być zagrożona.


title: Jak zarządzać jednym oddziałem

text: Przeczytałem książkę _Ciągła dostawa: niezawodne wersje oprogramowania poprzez kompilację, testowanie i automatyzację wdrażania_ autorstwa **Jez Humble** i **David Farley**. To, co najbardziej wytrącało mnie z równowagi, to ich naleganie na używanie jednej gałęzi. Myśląc o tym i o tym, co głoszą, ma to sens. Ale pytanie brzmi, jak to osiągnąć?. W mojej firmie pracujemy nad C# z TFS jako kontrolą źródła. I przyszły mi do głowy następujące pomysły, jak zrealizować pomysł zrobienia zmian, których jeszcze nie chcesz publikować, ale chcesz pozostać w narzędziu vcs: * Wstrzykiwanie, aby móc wybrać klasę, którą chcesz posługiwać się. Możesz więc przepisać niektóre funkcje bez wpływu na kod, który musi zostać wydany. * Powiązany kontener IoC ułatwiający osiągnięcie powyższego. Możesz więc wybrać podczas kompilacji (lub nawet w czasie wykonywania) te, których chcesz użyć. * Wzorzec dekoratora, aby dodać funkcjonalność w bardzo prosty sposób (który jest po prostu zastosowaniem dwóch pozostałych powyższych) Przy innym podobnym pytaniu mówią o **Linie wydania** z _Wzorców zarządzania konfiguracją oprogramowania_ (które wciąż muszę przygotować). Ale przykład, w którym używają, dotyczy tagów i tworzenia z nich gałęzi, co nie wydaje się tym samym, o czym mówią Humble i Farley. 1. Czy opisane przeze mnie techniki są odpowiednie do realizacji strategii jednej branży? 2. Czy jest coś jeszcze, co można zrobić, aby zarządzać posiadaniem kodu w jednej gałęzi?


title: Jakie są zalety architektury klient/serwer w aplikacjach internetowych w porównaniu z aplikacją frontendową generowaną przez serwer?

text: W naszej firmie musimy zbudować interfejs sieciowy na wbudowanej platformie Linux. Widzę 2 opcje: Używasz technologii, w której HTML i JavaScript są generowane po stronie serwera (Myślę, że JSP, Grails, ale jest to coś, co używa C++ i generuje HTML/JavaScript) lub tworzysz „klienta” HTML5 aplikacja, która komunikuje się z backendem generującym JSON lub XML. Mam wrażenie, że obecnie aplikacje webowe skłaniają się do tego drugiego, ale jakie są z tego korzyści (programiści w projekcie wybierają to pierwsze, głównie ze względu na to, że znają C++ znacznie lepiej niż HTML i Javascript)


title: Jak powinienem zareagować na spadek wydajności aplikacji?

text: Czasami przychodzi mi do głowy, że największym wyzwaniem dla inżyniera, gdy jego aplikacja ma coraz gorszą wydajność, jest brak wystarczającej ilości informacji. Wyobraź sobie, że przeglądasz tygodniowy raport wydajności z dziennika dostępu aplikacji i stwierdzasz, że od lipca otrzymujesz znacznie krótszy czas odpowiedzi. Wszystko, co możesz zrobić, to modlić się, aby następnym razem nie pogorszyło się.


title: Wsparcie dla młodszych programistów

text: Jestem młodszym programistą w moich pierwszych doświadczeniach zawodowych po studiach. Dołączyłem do firmy jako programista PHP, ale skończyłem na programowaniu w C# i ASP.NET. Od samego początku nie przeszedłem żadnego szkolenia z C# i zostałem przydzielony do projektów ASP z dość napiętymi terminami nałożonymi przez Senior Developerów. Kilka przekazań projektów, które otrzymałem od innych programistów, było krótkich i wyglądało na to, że musiałem sam odkryć system w naprawdę krótkim czasie. To moja pierwsza praca jako web developer i zastanawiam się, czy to normalne, że nie mam mentora, który pokaże mi, jak to zrobić, zwłaszcza, że jestem zupełnie nowy w tej technologii. Czy masz pomysł, jak sobie z tym poradzić? Jak możesz sobie wyobrazić, robi się to naprawdę frustrujące.


title: Jak zrefaktoryzować „zagnieżdżone” klasy widoku, aby uniknąć głębokich wywołań metod?

text: Powiedzmy, że wyświetlam garść danych („model”) przy użyciu klasy „View” do renderowania. Jednak wiele danych zawiera dane podrzędne („modele”) na tyle skomplikowane, że wymagają oddzielnych klas renderowania. W moim projekcie klasa `View` ma `model`, który renderuje, i ma wiele podrzędnych `View`, które wyświetlają dane podrzędne. W niektórych przypadkach `Widok`, chociaż zawiera model, może nie mieć niczego do renderowania i służy raczej jako opakowanie dla niego dzieci. Jednakże, jeśli masz bardzo złożone dane, a twoje podwidoki mają podwidoki, ten projekt skutkuje głęboko zagnieżdżonymi wywołaniami metod. Niektóre metody po prostu przekazują informacje w celu wyświetlenia klas, które nie mogą nic z nimi zrobić, z wyjątkiem przekazania ich swoim dzieciom. Wydaje się to nieefektywne, więc pomyślałem, że może istnieć wzór lub coś, co rozwiązuje to bardziej elegancko.


title: Poziom szczegółowości w wymaganiach systemowych

text: Czytałem w wielu miejscach, że na wymagania nie może wpływać rozwiązanie i nie może zawierać rozwiązania. Więc w poniższym przykładzie, proszę, czy możesz mi pomóc w uzyskaniu poprawnej odpowiedzi — Aplikacja A wchodzi w interakcję z Aplikacją B w celu zainstalowania nowej usługi/zmiany typu usługi i odłączenia usługi. Istnieją 3 różne typy usług 1,2 i 3. Aplikacja B nie obsługuje zmiany usługi z 1 na 2 lub 1 na 3. Dlatego 1 należy odłączyć, a następnie dodać 2 i 3. Jednak usługę można zmienić z 2 na 3 lub bezpośrednio z 3 na 2. W powyższym przypadku zmiana usługi z 1 na 2 lub z 1 na 3 jest ograniczeniem na poziomie systemu. Jednak z punktu widzenia użytkownika końcowego jest to zmiana usługi. W powyższym przypadku, czy powinienem mieć jedno wymaganie systemowe, system powinien umożliwiać zmianę usługi dla wszystkich obsługiwanych typów usług, czy powinienem mieć 2 różne wymagania systemowe - 1 stwierdzające, że wszystkie usługi mogą być aktualizowane bezpośrednio, a drugie stwierdzające, w którym usługa skrzynek musi zostać odłączona i zainstalowana?


title: Podstawowe pojęcia związane z grafiką wywiadu technicznego

text: Za chwilę mam rozmowę techniczną ze środowiskiem graficznym i chciałbym poszerzyć swoją wiedzę w następujących tematach: * TLB (bufory podręczne tłumaczeń i ich rola) * optymalizacje niskopoziomowe * pamięć podręczna i jak przebiega proces pobierania danych do wykonania instrukcji * wątki i synchronizacja * przerwania, zakleszczenia i spinlocki, przerwania i maskowanie przerwań Czy możesz zaproponować jakąś wyjątkowo wytłumaczoną książkę/zasoby na te tematy?


title: Czy "if (0 == wartość) ..." nie wyrządza więcej szkody niż pożytku?

text: To jedna z rzeczy, których najbardziej nienawidzę, gdy widzę to w czyimś kodzie. Wiem, co to znaczy i dlaczego niektórzy robią to w ten sposób („a co, jeśli zamiast tego przypadkowo wstawię '='?”). Dla mnie jest to bardzo podobne do tego, jak dziecko schodzi po schodach, licząc głośno kroki. W każdym razie, oto moje argumenty przeciwko temu: * Zakłóca naturalny przepływ czytania kodu programu. My, ludzie, mówimy „jeśli wartość wynosi zero”, a nie „jeśli zero jest wartością”. * Nowoczesne kompilatory ostrzegają cię, gdy masz przypisanie w swoim warunku, a właściwie jeśli twój warunek składa się tylko z tego przypisania, które, tak, i tak wygląda podejrzanie * Nie powinieneś zapomnieć o wstawieniu podwójnego '=' podczas porównywania wartości, jeśli jesteś programistą. Równie dobrze możesz zapomnieć wstawić „!” podczas testowania nierówności.


title: Najbardziej żałosna decyzja projektowa lub programistyczna, którą podjąłeś?

text: Chciałbym usłyszeć, jakie decyzje projektowe podjęliście i w jaki sposób odniosły one odwrotny skutek. Z powodu złej decyzji projektowej musiałem na zawsze wspierać tę złą decyzję (ja też miałem w tym swój udział). To uświadomiło mi, że jeden błąd projektowy może Cię prześladować na zawsze. Chcę się dowiedzieć od bardziej doświadczonych ludzi, jakich błędów doświadczyli i czego się od nich nauczyli. Jestem pewien, że będzie to bardzo pomocne dla innych programistów, pomagając im nie powtarzać tych decyzji. Dziękujemy za podzielenie się swoim doświadczeniem.


title: Zasady dotyczące konkretności typów parametrów metod, typów zwracanych i typów właściwości

text: Jakiś czas temu przeczytałem swego rodzaju „zasadę” dotyczącą konkretności typów parametrów metody, typów zwracanych i typów własności, ale po prostu tego nie pamiętam. Mówił coś o tym, aby typy zwracane były jak najbardziej konkretne, a typy parametrów tak abstrakcyjne, jak to możliwe… lub odwrotnie. Nie wiem, czy była to właściwie dobra czy zła rada, więc jeśli masz własne przemyślenia na ten temat, proszę o komentarz. Twoje zdrowie.


title: Dlaczego interfejs użytkownika w dzisiejszych aplikacjach jest tak „zwykły”?

text: Spójrz na Google, Windows 8 itd. Dlaczego wszystko wygląda teraz tak prosto? Dla mnie wygląda naprawdę brzydko. Czy to wszystko przez smartfony i tablety? Czy muszę podążać za tym trendem?


title: Chcesz dodać funkcje do edytora tekstu — który edytor wybrać?

text: Chciałbym dodać kilka nowych funkcji do edytora tekstu. Główne wymagania jakie mam to: * Powinien być edytorem programisty * Na początek chciałbym dobrać funkcje edytora C# (ponieważ przez większość czasu pracuję w Visual Studio). * Rozważałem rozwój dodatków/rozszerzeń Visual Studio, ale muszę znać kilka zalet i wad tego. Głównie interesują mnie funkcje edytora XAML w VS 2010. * Niektóre inne edytory open-source, które brałem pod uwagę to Scintilla i AvalonEdit. Ponownie chciałbym poznać krzywą uczenia się pracy z nimi. Ponieważ jeszcze nie zacząłem, wszyscy redaktorzy wydają się równoważni. Chciałbym poznać plusy/minusy tworzenia każdego z nich.


title: czy książka języka asemblera dla procesora Intel x86 będzie kompatybilna z procesorami AMD?

text: Chcę dostać książkę o montażu do nauki montażu i zastanawiałem się, czy dostanę książkę dla procesora intel x86, czy będą jakieś problemy z asemblacją kodu na procesorze AMD?


title: Co sobie mówisz, jeśli nie możesz zrozumieć nowej koncepcji, paradygmatu, funkcji...?

text: Programowanie zawsze wymagało uczenia się nowych koncepcji, paradygmatów, funkcji i technologii i zawsze mi się nie udało przy pierwszej próbie zrozumienia nowej koncepcji, z którą się spotykam. Zaczynam się obwiniać i poniżać, nie pamiętając wcześniej, jak rozumiałem nową koncepcję, której wcześniej nie rozumiałem. Nie mogę przestać mówić sobie „dlaczego nie rozumiem? Jestem głupi czy idiota? Tak, jestem głupia! Co mówi twój wewnętrzny głos, jeśli nie możesz zrozumieć nowej koncepcji po długim okresie zmęczenia lub beznadziejności? Jak radzisz sobie z poczuciem własnej wartości w takich sytuacjach?


title: Co to są „składniki procesu użytkownika”?

text: W tym artykule dotyczącym projektowania architektury aplikacji wspomniano o „składnikach procesu użytkownika” jako części warstwy prezentacji. > **Komponenty procesu użytkownika**. Składniki procesu użytkownika pomagają > synchronizować i organizować interakcje użytkowników. W ten sposób przepływ i stan procesu > logika zarządzania nie są zakodowane w elementach interfejsu użytkownika > same, a te same podstawowe wzorce interakcji użytkownika mogą być ponownie użyte przez > wiele interfejsów użytkownika. Wygląda na to, że to standardowe określenie, ale do tej pory o nim nie słyszałem. Czy możesz podać bardziej precyzyjną definicję lub przykłady UPC, które ilustrują powyższą definicję? **EDYTUJ** : szczególnie zastanawia mnie fraza _"pomóż synchronizować i organizować interakcje użytkowników"_. Czy możesz wyjaśnić, o co chodzi? Czy możesz podać przykład problemu, który można rozwiązać za pomocą UPC?


title: Jak poeksperymentować z programowaniem GPU na karcie Linux+AMD/ATI?

text: Niedawno nabyłem laptopa z procesorem Intel i3 i kartą AMD/ATI 6300 z systemem Ubuntu 10.10. Jak mam postępować podczas konfigurowania środowiska programistycznego, które pozwala mi na programowanie GPU? Zakładam, że będę musiał użyć OpenCL (CUDA to tylko NVIDIA), ale ponieważ jestem nowicjuszem w programowaniu GPU, proszę o radę bardziej doświadczonych programistów w tej kwestii.


title: Czy prowadzisz skrzynki produkcyjne z całkowicie wyłączonymi logami?

text: W naszym zespole dyskutujemy wewnętrznie, czy powinniśmy nadal uruchamiać nasze skrzynki produkcyjne z całkowicie wyłączonymi dziennikami i rejestrować tylko błędy i wyjątki z rotacją dzienników. Chcę wiedzieć, w jaki sposób wszyscy inni rejestrują informacje w swoim środowisku produkcyjnym i jakąkolwiek konkretną strategię/narzędzie, które dobrze dla Ciebie zadziałało. Dzięki Isaq


title: Proceduralne — wystarczy?

text: _Wysłałem podobne pytanie w sekcji PHP w stackoverflow i powiedziano mi, że może to być lepsze forum do zadawania mojego pytania._ Bez żadnego doświadczenia programistycznego, zacząłem studiować PHP od drugiego kwartału tego roku z celem powolnego budowania mojej wymarzonej strony internetowej, która rozpocznie się jeszcze tego lata. Tak jak owijałem głowę wokół PHP i zaczynałem -- czułem -- aby naprawdę zrozumieć różne koncepcje i jak działa kod (dlatego poprzedziłem mój post moim brakiem doświadczenia -- naprawdę musiałem walić i upycham to wszystko w głowie), natrafiam na PHP zorientowane obiektowo. Przyjąłem podejście polegające na opanowaniu (próbowaniu, przynajmniej na tyle, na ile to możliwe) jak największej liczby koncepcji i pomysłów, zanim zanurkowałem, aby spróbować stworzyć własne skrypty; podobnie jak nauka dryblingu, dobrze rzucania piłką baseballową lub piłką nożną przed rozpoczęciem gry. (oczywiście bawiłem się i wykonałem kilka ćwiczeń z kodem). Moje pytanie do ekspertów brzmi: Czy powinienem lub powinienem uczyć się i zagłębiać się w PHP zorientowany obiektowo, opóźniając w ten sposób termin rozpoczęcia kodowania? A może wystarczy proceduralne programowanie PHP, jeśli ktoś chciałby zbudować dobry e-commerce, forum/komentarz (np. Pomoc PHP) lub podstawowe serwisy społecznościowe? Jak daleko zaprowadzi mnie programowanie proceduralne? Witryna z 1000; dziesiątki tysięcy; sto tysięcy odwiedzających? Z góry dziękujemy za fachowe spostrzeżenia.


title: Zidentyfikuj algorytm dla moich potrzeb w zakresie alokacji zasobów

text: Próbuję zautomatyzować zadanie i brakuje mi odpowiedniego słownictwa, aby znaleźć właściwy algorytm. Naprawdę wydaje się, że jest to powszechny problem, który prawdopodobnie został rozwiązany wiele razy wcześniej. Wszystko, czego szukam, to ktoś, kto wskaże mi właściwy kierunek lub pomoże mi z właściwymi hasłami wyszukiwania, aby znaleźć rozwiązanie / algorytm. Jeśli znasz jakąś bibliotekę (javascript), to jeszcze lepiej. # Zmyślony scenariusz Powiedzmy, że mam 3 'wiadro', 'Wiadro A', 'Wiadro B' i 'Wiadro C'. Każdy z nich może pomieścić określoną liczbę „piłek”. * `Wiaderko A`: Pojemność 10 kulek. * `Wiaderko B`: Pojemność 15 kulek. * `Wiaderko C`: Pojemność 5 kulek. Teraz mam również spis kulek i każdą z nich można włożyć tylko do określonych „wiader”. Jedna piłka może trafić tylko do „Wiadra 2”, Następna piłka może trafić do „Wiadra 1” LUB „Wiadra 3” i tak dalej. Teraz... muszę określić najlepszy sposób rozmieszczenia kulek, aby spróbować wypełnić każde wiadro do jego pojemności (lub jak najbliżej). # Prawdziwy scenariusz Moim prawdziwym powodem jest zaplanowanie, że „ludzie” (piłki) odwiedzają „lokalizacje” (wiadra) przez określoną liczbę godzin (pojemność wiadra). Jednak z następujących powodów wszystkie biblioteki/algorytmy, które znalazłem podczas wyszukiwania "harmonogramu" do tej pory, nie działają w moim scenariuszu. * W ogóle nie interesują mnie godziny rozpoczęcia/zakończenia, tylko `osoba` -> `lokalizacja` * Wszyscy moi ludzie (kulki) mają ścisłą listę lokalizacji, które mogą odwiedzić. Każdy jest wyjątkowy. * Każda osoba jest dostępna przez dowolną liczbę pełnych (całkowitych) godzin, które może spędzić w _dokładnie jednej_ `lokalizacji`. Korzystanie z kogoś, kto jest dostępny przez 8 godzin tylko przez 7 z tych godzin, jest w porządku. * Każda lokalizacja (wiadro) wymaga określonej liczby godzin, które staram się wypełnić najlepiej jak potrafię z dowolną kombinacją ludzi. Mam ~50 lokalizacji i ~100 osób. Nie jest to wymóg, aby uzyskać **idealne** rozwiązanie, ale „dość blisko”. Znalazłem schedule.js, który wygląda fantastycznie, ale nie mogłem go nadużywać do swoich potrzeb.


title: Masz do czynienia ze współpracownikami, którzy nie mają spójnego stylu kodowania?

text: Co robisz, gdy pracujesz z kimś, kto ma tendencję do pisania złego stylistycznie kodu? Kod, o którym mówię, jest zwykle poprawny technicznie, rozsądnie skonstruowany i może nawet algorytmicznie elegancki, ale po prostu _wygląda brzydko_. Mamy: * Mieszankę różnych konwencji nazewnictwa i tytułów (`underscore_style` i `camelCase` oraz `UpperCamel` i `CAPS` wszystkie zastosowane mniej więcej losowo do różnych zmiennych w tej samej funkcji) * Dziwaczne i niespójne odstępy, np. `Functioncall (arg1 ,arg2,arg3 );` * Dużo błędnie napisanych słów w komentarzach i nazwach zmiennych Mamy dobry system przeglądu kodu, w którym pracuję, więc możemy przejrzeć i naprawić najgorsze rzeczy. Jednak wysyłanie recenzji kodu składającej się z 50 wierszy „Dodaj tutaj spację. Poprawnie przeliteruj słowo „itarator”. Zmień wielkość liter itp.”. Jak zachęciłbyś tę osobę do większej ostrożności i spójności z tego rodzaju szczegółami?


title: Gdzie powinny być przechowywane ciężkie zasoby programistyczne, takie jak dokumenty specyfikacji i pliki źródłowe edytora multimedialnego?

text: Nie jest niczym niezwykłym, gdy pracuję w witrynie, która zawiera takie elementy jak binarne (lub praktycznie niemożliwe do odróżnienia z powodu czynników pozostających poza moją kontrolą) dokumenty specyfikacji (np. pliki PDF, dokumenty Word, arkusze kalkulacyjne Excel) i multimedialne pliki źródłowe (np. pliki źródłowe FLA , pliki Photoshop, pliki programu Illustrator). Jak należy je przechowywać? Moim instynktem jest po prostu wrzucić je do Gita. Pamięć masowa jest tania, ale sprawia, że operacja klonowania trwa znacznie dłużej niż w innym przypadku. Potencjalną alternatywą byłoby użycie wiki. Próbowałem tego w niektórych przypadkach, ale nigdy nie natknąłem się na przypadek, w którym nieodłączne mocne strony formatu wiki (historia wersji dostępna dla laików i łatwy dostęp do najnowszych kopii) przyniosły lub doprowadziłyby do wystarczających korzyści, aby uzasadnić dodatkową pracę w utrzymaniu wiki . Trzecią opcją jest umożliwienie im spędzania czasu lokalnie i w wątkach e-mailowych. Więc jakie podejście powinienem do tego podejść?


title: Jakie właściwości matematyczne mają zastosowanie do algorytmu XOR Swap (i podobnych algorytmów operatorów bitowych)?

text: Załóżmy, że masz dwie zmienne a i b i musisz je zamienić, iz jakiegoś powodu utworzenie tymczasowej zmiennej do przechowywania nie wchodzi w grę. To jest algorytm w pseudokodzie a a XOR b b ← a XOR b a ← a XOR b Na podstawie przykładów widzę, że to działa. Ale dlaczego to działa? Dokładniej, jak to zostało wyprowadzone? Czy to był zwykły zbieg okoliczności, że „XOR” takie a takie wartości to robi? To pytanie dotyczy **wszystkich operatorów bitowych**. Doskonale rozumiem, co robią i jak działają, oraz różne algorytmy, które z nich korzystają. Ale czy istnieją matematyczne właściwości tych operatorów bitowych, z których wywodzą się te algorytmy? Jakie są te matematyczne właściwości? A które z nich odnoszą się do konkretnego przykładu zamiany `XOR`?


title: Czy programista powinien nosić wizytówki?

text: Byłem wczoraj na Google Developer Day i skontaktowało się ze mną kilka firm poszukujących zatrudnienia i pracy jako freelancer. Ponieważ jestem zainteresowany wykonywaniem pracy jako freelancer, porozmawiałem trochę z przedstawicielami tych firm i wszyscy dali mi swoje wizytówki. Trochę mnie to zdziwiło, ponieważ nie miałem wizytówki dla siebie i fakt, że wizytówka jest dla mnie po prostu przestarzała. Nie mając więc wizytówki, podałem im adres mojej strony internetowej, na której mam portfolio, linki do moich kont na GitHubie i LinkedIn oraz bloga. Czy powinienem zamówić wizytówki i nosić je na tych imprezach? Nie mogę pozbyć się wrażenia, że wizytówki są nieaktualne, czy po prostu się mylę?


title: Outsourcing zapewniania jakości i testowania

text: Niedawno skontaktowała się ze mną firma programistyczna specjalizująca się w zapewnianiu jakości i testowaniu. Do tego momentu programiści z naszej (małej) firmy byli w większości odpowiedzialni za własną kontrolę jakości i osiągnęliśmy mieszane wyniki. Jesteśmy w punkcie, w którym jesteśmy gotowi zatrudnić pełnoetatowego faceta od QA, ale byłem ciekaw, czy inni używali w przeszłości takich zespołów i jakie były wyniki? Jestem trochę sceptyczny, ale staram się być otwarty. **tl;dr Jakie było Twoje doświadczenie z zewnętrznym zespołem ds. kontroli jakości/testów? Plusy i minusy?**


title: Czy istnieją sposoby na śledzenie użytkownika mojej witryny , z którego witryny pochodzi?

text: Jest to problem, ponieważ kiedy prowadzę kampanię e-mailową, w e-mailu znajduje się link, który prowadzi do strony głównej mojej firmy, chciałbym rozróżnić między odwiedzającym pochodzącym z innej strony (np. wyszukiwanie w google) a odwiedzającym pochodzącym z e-mail, który wysłałem. Czy jest w stanie sprawdzić tego typu informacje? Dziękuję Ci


title: Czy powinienem to po prostu zerwać, czy przedyskutować z moim kierownikiem?

text: Po „zakończeniu” zadania zostałem ostatnio wyznaczony przez mojego kierownika projektu do pracy nad projektem konserwacji przez innego kierownika projektu. W tym innym projekcie klient chce dodać nowe funkcje i jestem wyznaczony do wykonania funkcji. Znajduję swoją pracę nad głową z różnych powodów: * kod jest trudny do zrozumienia/czytania, ponieważ * nie jest dobrze udokumentowany * nie jest przestrzegana standardowa konwencja nazewnictwa (wydaje się, że nie istnieje i czasami jest myląca, ponieważ niektóre słowa są używane w w zły sposób) * martwy kod * kod nadmiarowy * kod taki jak (isTrue == true) * zmienne temp, które nie są wbudowane i nie są poprzedzone temp * itp... * używany jest visual sourcesafe * używany jest visual studio 2005, mimo że mają vs2008 i vs2010. Nie mogę użyć wtyczki do szybkiej nawigacji (więcej niedogodności) * chcą po prostu, aby wszystko działało, bez dbania o łatwość konserwacji. Chciałbym zmienić bazę kodu i zasugerować uaktualnienie do svn i nowszej wersji VS. Jednak nie czuję, żeby premier czy moi nowi koledzy byli podatni na takie zmiany. Co więcej, nie mam pewności, że będę dostarczać na czas (jeśli nawet jestem w stanie dostarczyć), a jeśli przedstawię te sugestie, może założyć, że myślę, że czuję się lepszy (nieprawda ) i jestem wystarczająco kompetentny do powierzonego mi zadania, co utrudnia mi poruszanie problemów w przyszłości. Po prostu czuję, że nie mam jeszcze wystarczającego doświadczenia dla projektu o tak złożoności i prawdopodobnie skończy się pisaniem kodu typu „kopiuj i wklej” i wygoogluj go z dużą ilością nieopłaconych nadgodzin. Uzyskam naukę powierzchniową bez głębokiego uczenia się i czuję, że całe to doświadczenie zniszczy moją radość z programowania, być może całkowicie go unikając. W międzyczasie, jeśli nic z tym nie zrobię, prawdopodobnie będę musiał po prostu to przegonić w ramach obecnych ograniczeń. W tym celu wypożyczyłem książki na temat tworzenia aplikacji na terenach zdegradowanych i Visual SourceSafe jako materiały referencyjne. Co powinienem zrobić? Czy powinienem zgłaszać swoje sugestie? Jak wcześnie powinienem mu powiedzieć, jeśli nie czuję, że mogę dostarczyć? A może powinienem po prostu to wyrzucić, ryzykując, że nie będę w stanie wykonać mojego zadania?


title: Dlaczego potrzebujemy widelca do stworzenia nowego procesu

text: W Uniksie za każdym razem, gdy chcemy utworzyć nowy proces, rozwidlamy bieżący proces, tj. tworzymy nowy proces potomny, który jest dokładnie taki sam jak proces nadrzędny, a następnie wykonujemy wywołanie systemowe exec, aby zastąpić proces potomny nowym procesem, tj. zastąp wszystkie dane procesu nadrzędnego albo dane nowego procesu. Dlaczego w pierwszej kolejności tworzymy kopię procesu nadrzędnego i dlaczego nie tworzymy bezpośrednio nowego procesu? Jestem nowy w Unixie, proszę wyjaśnić w kategoriach laika.


title: Jak ludzie radzą sobie z fragmentacją Androida?

text: Ostatnie kilka lat spędziłem pracując nad aplikacjami na iOS, a teraz poważnie rozważam utworzenie portu Androida jednej z moich aplikacji. Jestem pewien, że skargi na fragmentację są frustrującym frazesem dla doświadczonych programistów Androida, ale jako programista iOS jestem szczerze przytłoczony liczbą konfiguracji i urządzeń, na których może działać moja aplikacja. Istnieją dosłownie tysiące urządzeń z Androidem na wolności, ale wiem, że na świecie są programiści, którzy osiągnęli sukces, i wiem, że nie testują ani nie rozwijają dla tysięcy różnych urządzeń. Jak więc stosunkowo mała firma może poradzić sobie z fragmentacją? Czy można wybrać pięć lub sześć najpopularniejszych urządzeń, skupić się na nich i uniemożliwić instalację aplikacji na innych urządzeniach? Czy istnieją inne strategie praktycznego radzenia sobie z wieloma różnymi konfiguracjami, z którymi będzie musiała się zmierzyć aplikacja?


title: Testy jednostkowe w node.js i modułach mockingu

text: Próbuję przetestować to opakowanie, aby zażądać, które zrobiłem: // lib/http-client.js var app = require('app'), request = require('request'); exports.search = function(searchTerm, next) { var options = { url: 'https://api.datamarket.azure.com/Bing/Search/Web', qs: { 'Zapytanie': '\'' + searchTerm + '\', 'Adult': '\'Off\', '$format': 'json', '$top': 10 }, auth: { user: app.get('bing id.'), pass: app.get('identyfikator bing') } }; request(options, function(err, res, body){ if (err) return next(err);// TODO: parse JSON i zwróć wyniki }); }; gdzie „app” jest instancją wyrażenia express. Pytanie brzmi, jak przetestować działanie tego „modułu” bez konieczności dotykania internetu? Gdybym miał to zrobić w innych językach, wykpiłbym moduł request, ale nie wiem, czy jest to najlepszy sposób na zrobienie tego w node.js. // NODE_PATH=lib description('Klient HTTP', function(){ it('powinien zwrócić błąd, jeśli transport się nie powiódł', function(){ var c = require('http-client'), results = 'foo'; / / request makieta powinna zwracać wyniki po wywołaniu c.search('foo', function(err, results){ results.should.eql(res); }); // TODO }); it('powinna zwrócić błąd, jeśli JSON parsowanie nie powiodło się', function(){ // DO ZROBIENIA }); it('powinno zwrócić wyniki', function(){ // DO ZROBIENIA }); });


title: Zdarzenia i obiekty

text: Mam tablicę obiektów. Zamiast mnie podczas wykonywania zadania pytając każdy obiekt Jeśli mają coś do powiedzenia, wolałbym wykonać następujące zadanie: Wykonaj zadanie Obiekt nr 4 Hej, mam coś do powiedzenia na ten temat! A jeśli obiekt #4 coś o tym mówi, to może Obiekt #17 ma coś do dodania, ponieważ Obiekt #4 coś powiedział. Czy rozumiesz? Jak to ustrukturyzować?


title: Kiedy trzeba przekonwertować kod z języka, którego nie znasz, jak się do tego zabrać?

text: Scenariusz: Twój szef mówi, że potrzebuje dużego kawałka kodu w języku X, który zostanie przekonwertowany na kod Y. Znasz kod Y, ale tylko niejasno zdajesz sobie sprawę z X. Masz tylko ograniczoną ilość czasu. Próbujesz znaleźć konwerter kodu? powoli włamać się do kodu, aż zadziała? zlecić? powiedz, że nie możesz?


title: Szukam firm z silnymi działami R&D, specjalnie dla sztucznej inteligencji, ale nie mogę znaleźć wielu. Czy jest tylko garstka?

text: Planuję zrobić doktorat z CS, koncentrując się na jakiejś poddziedzinie sztucznej inteligencji, nie wiem w tej chwili, w której. Zaglądam do działów R&D w przemyśle, ale wydaje mi się, że nie ma ich zbyt wiele. Na przykład dosłownie znalazłem setki laboratoriów dla nauk podstawowych i innych dziedzin inżynierii, ale dla CS znalazłem: Google, IBM Research, Microsoft Research, Yahoo Research, AT&T Research i GE Research. Czy nie ma tak wielu firm, jak w innych branżach?


title: Trzy podejścia do uzyskania różnych rozmiarów wersji obrazu z serwera

text: Moja aplikacja na Androida wymaga różnych rozmiarów wersji obrazów do różnych celów i zachowania przepustowości. Podejście pierwsze: * gdy użytkownik prześle swój awatar lub inny obraz, mój skrypt php tworzy 4 wersje tego obrazu: mini_200, medium_300, big_400 i oryginalną. ścieżki te są następnie pobierane i przechowywane w bazie danych. Następnie, gdy potrzebuję najmniejszego obrazu, ładuję go ze strony `http://myserver.com/item_images/200_mini_27304lkewsjfimage.jpg` Podejście drugie: * tak samo jak podejście pierwsze, ale zamiast dodawać przedrostki do nazw plików, przechowuj je w różnych folderach - duży, średni, mini. a w Mojej aplikacji po prostu przekazuję parametr, dla którego folderu szukać w Podejście 3: * gdy użytkownik przesyła swój awatar lub inny obraz, przechowuję tylko oryginał. Następnie, gdy potrzebuję najmniejszego obrazu, ładuję w ten sposób: `http://myserver.com/image_resizer.php?image="93_iosdfj0sd9fj.jpg"&new_width=200&new_height=200` Który z nich jest lepszy i dlaczego? Mam tu ochotę na wymyślenie koła na nowo, bo ten temat jest zbyt obszerny i nie wiem gdzie o nim czytać


title: Jakie jest najlepsze projektowanie oprogramowania w metodach tworzenia?

text: Stworzyłem metodę rozszerzającą, która rozszerzyła typ string w C#. // faktycznie sprawdza, czy ciąg jest pusty lub pusty, a następnie wyszukuje // domyślny kod promocyjny, który jest ustawiony w systemie administracyjnym zaplecza. kod promocyjny.HasPromode(); Myślałem, że to w porządku i elegancko, ale inny kolega pomyślał, że powinienem wstrzyknąć metodę przez wstrzyknięcie konstruktora, który powinien zaimplementować interfejs. Myślę, że to przesada, aby mieć do tego prostą funkcję wyszukiwania. Inny kolega uważał, że rozszerzenie typu string ułatwia jego niewłaściwe użycie i eksponuje go do niewłaściwych celów. Który jest poprawny? Wszystkie rozwiązania działają dobrze; ale niektóre z tych rozwiązań powinny być najlepsze, czy rzeczywiście ma to znaczenie? Powinno to mieć znaczenie, ponieważ prowadzimy te dyskusje i staramy się ulepszyć kod.


title: JMS do połączeń synchronicznych czy opuszczanie domowego systemu przesyłania wiadomości?

text: Refaktoruję istniejący kod. W tej chwili kod ma główny serwer z CLI i spokojnym interfejsem jako oddzielne aplikacje, które komunikują się z serwerem za pośrednictwem domowego pakietu przekazującego wiadomości, który udostępniają. System jest pisany przez kilku inżynierów sprzętu bez prawdziwego doświadczenia w programowaniu. Czasami wygląda to trochę brzydko, ale działa w tym kodzie od ponad roku z minimalnym kłopotem, poza ograniczeniem przekazywania pojedynczego zserializowanego obiektu na polecenie. Teraz musimy zaimplementować komunikację JMS, aby połączyć się z trzecim systemem i wskoczyłem na to wszystko. Jestem pewien, że używaliśmy kolejek JMS do wypychania niektórych informacji, które naprawdę powinny być również wypychane. Moim pierwszym zamiarem było zastąpienie całego systemu przekazywania wiadomości home-brew JMS. Jednak system home-brew jest napisany z myślą o wywołaniach synchronicznych, z oczywistym zachowaniem typu „Wypełniam prośbę, czekam i wysyłam odpowiedź”. JMS jest naprawdę używany do połączeń asynchronicznych. Mógłbym sprawić, by JMS działał dla wywołań synchronicznych przy niewielkim włamaniu, ale to hakowanie musi istnieć w trzech aplikacjach... Moje pytanie brzmi, czy lepiej byłoby usunąć istniejący system, który wydaje się działać głównie z JMS, aby mieć dodatkową niezawodność systemu na poziomie przedsiębiorstwa i jednego protokołu komunikacyjnego, czy też lepiej zostawić wystarczająco dużo w spokoju i nie marnować czasu na programowanie na próby usunięcia domowego systemu, który wydaje się działać? Nawiasem mówiąc, o ile wiem, nie ma wbudowanego narzędzia do obsługi wywołań synchronicznych przez JMS bez utrzymywania maszyny stanów? Jeśli istnieje sposób, w jaki mogę powiedzieć JMS, aby wysyłał odpowiedzi na moje żądania w sposób, w jaki działałby spokojny interfejs, a JMS obsłuży blokowanie i utrzymywanie stanu gotowości, aby to się stało bez mojego pisania, zdecydowanie przełączyłbym się całkowicie na JMS.


title: znajduje wszystkie możliwe permutacje pewnej liczby odrębnych cyfr

text: Utknąłem na następującym problemie. Chcę znaleźć algorytm, który znajdzie wszystkie możliwe permutacje pewnej liczby odrębnych cyfr, a następnie umieści je na przykład w dużej macierzy. Na przykład dla cyfr 0, 1 i 2 chcę uzyskać macierz: 2 1 2 0 1 0 1 2 0 2 0 1 0 0 1 1 2 2 Tutaj są w kolejności, ale nie jest to wymagane per se. Czy ktoś zna fajny algorytm, aby to osiągnąć? Z góry dziękuję.


title: Dlaczego większość stron internetowych dużych korporacji jest zła?

text: Jako klient elektroniczny czasami muszę odwiedzać strony producentów, aby znaleźć informacje o produktach, aktualizacjach sterowników/firmware itp. Mniej więcej większość tych stron, IMO, jest zła. Są powolne, nieprzyjazne dla użytkownika (czasami, naprawdę brzydkie) i zabierają mi dużo czasu, aby zrobić to, czego potrzebuję. Na przykład na stronie Sony muszę znaleźć „laptopy Vaio” na liście kilkudziesięciu (może być setek) produktów, a następnie znaleźć mój konkretny model na liście setek modeli. Ponieść porażkę! Widzę też, że na kilku stronach mogą być nieco lepsze, ale nadal nie dobre (HP, Dell, Lenovo (nieco lepsze), ...) No, może mają tam duży system back-end, ale to nie nie oznacza to, że mogą sprawić, że interfejs użytkownika będzie szybszy i bardziej przyjazny dla użytkownika. Czy istnieje oczywisty powód, dla którego strona internetowa dużej korporacji jest tak zła?


title: Skąd wzięła się koncepcja „float” html/css?

text: Dość proste, zastanawiałem się, co jest inspiracją lub precedensem dla koncepcji „float” CSS. Nie znam żadnych innych graficznych interfejsów API ani innych układów DSL, które wykorzystują tę koncepcję, ale jest to ogromna część układów HTML. Ciekawe, czy poprzedni język miał podobną koncepcję, czy też „float” wywodzi się z krainy HTML/CSS. Dziękuję.


title: Wielu blokujących VS pojedynczych pracowników nie blokujących

text: Załóżmy, że istnieje serwer HTTP, który akceptuje połączenia, a następnie _jakoś_ czeka na pełne przesłanie nagłówków. Zastanawiam się, jaki jest najczęstszy sposób jego implementacji i jakie są pozostałe plusy i minusy. Myślę tylko o tych: **Wiele pracowników blokujących jest dobrych, ponieważ:** * Jest bardziej responsywny. * Łatwiejsze wprowadzanie nowych połączeń (pracownicy odbierają je samodzielnie, zamiast czekać, aż będzie mógł dodać je do zsynchronizowanej listy). * Wykorzystanie procesora równoważy się automatycznie (bez dodatkowego wysiłku) wraz ze wzrostem i spadkiem liczby połączeń. * Mniejsze zużycie procesora (zablokowane wątki są usuwane z pętli wykonania i nie wymagają żadnej logiki do przeskakiwania między klientami). **Pojedynczy pracownik nieblokujący jest dobry, ponieważ:** * Zużywa mniej pamięci. * Mniej podatni na leniwych klientów (którzy łączą się z serwerem i wysyłają nagłówki powoli lub nie wysyłają wcale). Jak zapewne widzisz, moim zdaniem wiele wątków roboczych wydaje się nieco lepszym rozwiązaniem. Jedynym problemem jest to, że łatwiej jest zaatakować taki serwer. **Edytuj (więcej badań):** Niektóre zasoby, które znalazłem w sieci (Tysiące wątków i blokowanie I/O \- Stary sposób pisania serwerów Java jest znowu nowy (i o wiele lepszy) autorstwa Paula Tymy) podpowiada, że blokowanie podejście jest ogólnie lepsze, ale nadal nie wiem, jak radzić sobie z fałszywymi połączeniami. PS Nie sugeruj korzystania z jakiejś biblioteki lub aplikacji do tego zadania. Bardziej interesuje mnie, jak to faktycznie działa lub może działać, niż żeby to działało. P.S.S. Podzieliłem logikę na wiele części, a ta obsługuje tylko akceptowanie nagłówków HTTP. Nie przetwarza ich.


title: (Wady datetime vs. long w aplikacjach używanych globalnie

text: Obecnie projektuję aplikację internetową / mobilną, której większość użytkowników będzie rozmieszczona w różnych strefach czasowych USA z możliwością skalowania do innych krajów i stref czasowych. Pracowałem z kilkoma innymi aplikacjami używanymi na całym świecie i zauważyłem, że wszystkie użył daty i godziny do rejestrowania sygnatur czasowych, przy czym domyślna strefa czasowa jest tą, w której aplikacja jest zwykle hostowana. Wyświetlając czas, zazwyczaj nie dbają o preferencje użytkownika (lokalne) i po prostu wyświetlają znacznik czasu z TZ i pozostawiają użytkownikowi konwersję, jeśli sobie tego życzy. Podobał mi się pomysł odejścia od tego paradygmatu i rejestrowania znaczników czasu jako jednego czasu globalnego (GMT) w długich milisach, niezależnie od lokalizacji użytkownika i zbierania lokalizacji użytkownika według jego adresu IP lub umożliwienia mu zmiany TZ jako preferencji w profilu, które później będą używane do formatowania wyświetlania wszystkich ich długich milis GMT. Wydaje się to prostszym rozwiązaniem niż pomylenie projektu aplikacji z TZ. Jestem ciekaw, jakie są plusy i minusy tego podejścia. Ciekawi mnie również kilka wyjaśnień, dlaczego nadmiernie skomplikowany IMO typu data-czas z strefą czasową był kiedykolwiek używany w bazach danych, a nie w jednolitej pojedynczej strefie czasowej z konwersjami tylko do wyświetlania.


title: Jak mogę ulepszyć te łamigłówki programowania Java, które napisałem dla moich uczniów (gimnazjum/liceum)?

text: Uczę teraz programowania kilku uczniów szkół średnich i gimnazjów i odkryłem, że niektórzy z nich naprawdę lubili łamigłówki programistyczne online. Stworzyłem więc http://www.kapparate.com/coder/ i teraz są 4 kategorie łamigłówek. Wszystkie łamigłówki są teraz skonfigurowane tak, że zmienne są wstępnie zainicjalizowane, a użytkownik wstawia jakiś kod w środku. Na przykład problem może oznaczać, że są one wstępnie zainicjowane: int x = ????; int y = ????; int z; a następnie program może poprosić ucznia o napisanie ostatniej linii kodu: `z = x + y;`. Teraz wiem, że mógłbym przejść długą drogę w poprawie użyteczności tej witryny (jak posiadanie obszaru, który zawiera listę predefiniowanych zmiennych), ale zastanawiałem się, czy ta koncepcja wydaje się słuszna. Wiem, że niektóre strony mają dzieci wypełniające funkcje, ale nie wszyscy moi uczniowie wiedzą jeszcze, jakie funkcje są, a ja staram się wprowadzić wcześniej łamigłówki programowania online.


title: Czy garbage collector kompaktuje obiekty na stercie, czy zmienia referencje na stosie?

text: To wydaje się proste pytanie, ale po wielu lekturach na ten temat nadal nie znalazłem ostatecznej odpowiedzi (być może dlatego, że jest to takie proste). Moje pytanie brzmi: kiedy garbage collector kompaktuje obiekty na stercie, w jaki sposób aktualizowane są odniesienia do tych obiektów na stosie? Przychodzą mi do głowy dwa możliwe rozwiązania: 1. Przejdź przez stos (i referencje w stercie) i zaktualizuj referencję, aby wskazywała na nową lokalizację obiektu. W analogii do przeprowadzki, byłoby to jak wysłanie listu do każdego, kto ma Twój adres, z prośbą o zaktualizowanie swojej książki adresowej o Twój nowy adres. 2. Podaj jakąś tabelę przeglądową. To tak, jakby zostawić adres do korespondencji w lokalnym urzędzie pocztowym. Czy śmieciarze w przeważającej mierze stosują jedną z tych dwóch metod? Jakaś inna metoda? Obie?


title: Czy mod_security to dobra rzecz?

text: Ostatnio często pojawiały się błędne komunikaty o błędach od mod_security. Jego zestawy filtrów obejmują przestarzałe exploity PHP i muszę przepisać swoje rzeczy, ponieważ Wordpress&Co miał błędy lata temu. Czy zdarza się to komuś innemu? > Apache mod_security blokuje potencjalnie niebezpieczne żądania HTTP, zanim > dotrą do aplikacji (w szczególności PHP). Używa różnych zestawów filtrów, głównie opartych na > wyrażeniach regularnych. Więc mam fajnego dostawcę hostingu współdzielonego, technicznie trafnego i tak dalej. Ale to mnie wkurzyło: tylko w zeszłym tygodniu musiałem zmienić nazwę parametru `&src=` w jednej z moich aplikacji, ponieważ mod_security blokuje w ten sposób WSZELKIE żądania. Nie sprawdzałem szczegółów, ale ta reguła filtrowania uniemożliwiała wykorzystanie innej aplikacji, której nie używam i prawdopodobnie nigdy o niej nie słyszałem. Mimo to musiałem przepisać _mój kod_ (często zmiana nazwy parametru wystarczy, by oszukać mod_security), co nie miało z tym nic wspólnego! A dzisiaj głupie regex blokuje przesyłanie formularzy, ponieważ chciałem przesłać przykładowy kod php. Biorąc pod uwagę, jest to prosta rzecz, przed którą mod_security ma chronić. Ale nie wierzę, że mod_security może wykryć poważnie zaciemniony kod i po prostu uruchamia się po oczywistych (iw tym przypadku całkowicie trywialnych) fragmentach php. Zasadniczo jestem karany przez mod_security, ponieważ inni ludzie wydali aplikacje podatne na błędy. (Nie mówię, że moje aplikacje są bardzo bezpieczne – jestem dość ostrożny pod względem bezpieczeństwa, ale nie mam żadnych hiperbolicznych twierdzeń.) Już poprosiłem mojego dostawcę o wyłączenie go, korzyści są zbyt małe IMO i dla moich aplikacji. * * * Co myślisz? Czy mod_security ma sens poza hostingiem WP? A może to naprawdę tylko kilka czarnych list dawno przepuszczonych błędów bezpieczeństwa? Które z jego zasad są rzeczywiście pomocne? Czy istnieje odpowiednik poziomu aplikacji?


title: Przenoszenie z magazynu lokalnego do zdalnej bazy danych: jak mam buforować dane lokalnie?

text: Mam aplikację .NET (C#), którą wkrótce wypuszczę, która również ma kilka plików pomocniczych. W tej chwili przechowuję te pliki jako pliki .txt i aktualizuję je w razie potrzeby za każdym razem, gdy zmieni się wersja aplikacji. Zastanawiam się, czy lepszym rozwiązaniem może być przechowywanie informacji w tych plikach w centralnej bazie danych i umożliwienie wszystkim klientom dostępu do tej bazy danych po uruchomieniu. Pozwoliłoby to uniknąć konieczności aktualizowania oprogramowania za każdym razem, gdy te pliki referencyjne ulegną zmianie. Moje pytanie do guru tutaj brzmi: czy to mądra decyzja, a jeśli tak... jaka byłaby najlepsza metoda przechowywania pobranych danych? Plik tymczasowy? w pamięci? coś innego? Każda pomoc byłaby mile widziana.


title: Jak działa mechanizm obsługi zdarzeń w jQuery?

text: Jestem w potrzebie poszerzenia mojej perspektywy na biblioteki frameworka, aby móc dokonywać świadomych wyborów jeśli/który/kiedy dodać framework do strony internetowej. Jedną z rzeczy, która zwróciła moją uwagę, były programy obsługi zdarzeń, ponieważ wydają się one mieć nieco bardziej złożoną strukturę. Dla mnie, na początku, moduł obsługi zdarzeń został dodany w linii z jego elementem `<a onclick="DoSomething();">...</a>` Później zostały usunięte z bycia w linii i dodane globalnie `document /element.onlick = "DoSomethingOnClick` lub `document/element.onlick = "function() {...}` Na dzień dzisiejszy frameworki dodają swój własny mechanizm na wierzchu i staram się zrozumieć co/jak to właściwie oznacza /skończone. Badając części kodu, wydaje mi się, i tutaj opisuję w BARDZO prosty sposób, że dodają zdarzenie `onclick` podobne do powyższego globalnego, a następnie przekazują zdarzenie po podniesieniu, do własnego handlera, który sam jest strukturą obiektu zawierającą przechowywane/dodane funkcje i elementy oraz ich relacje. Czy to słuszna obserwacja? Jeśli nie, to jak to się robi? Czy można to pokazać za pomocą prostego przykładu w języku JavaScript? W oparciu o następujący cytat: > „Możesz użyć metody jQuery _on_, aby dołączyć procedurę obsługi zdarzenia do > dokumentu i przekazać mu łańcuch filtrujący, który spowoduje, że procedura obsługi > zostanie uruchomiona, gdy zdarzenie nastąpi na elemencie, który pasuje do filtr i z > dopasowanym elementem jako _tę_ wartością." w jaki sposób element, który wyzwolił zdarzenie, jest identyfikowany w module obsługi (przez obiekt zdarzenia lub ?) i jak przechowywane/identyfikowane są elementy, które mają zostać wyzwolone? Czy inne frameworki, inne niż jQuery, mają bardzo różną strukturę implementacji obsługi zdarzeń?


title: Używanie funkcji jako instrukcji w Pythonie

text: Świetną cechą JavaScriptu są instrukcje funkcyjne. Możesz to zrobić: (function myFunc(){ doCoś(); doCosElse(); })(); Jest to sposób na zadeklarowanie funkcji i wywołanie jej bez konieczności dwukrotnego odwoływania się do niej. Czy można to naśladować w Pythonie?


title: Dlaczego po napisaniu kodu czuję, że „napisałbym lepiej” po jakimś czasie?

text: Od ponad 2 lat pracuję nad swoim hobbystycznym projektem w C++. Ilekroć piszę moduł/funkcję, koduję go z dużą dozą myślenia. Teraz zobacz problem, wykonaj { --> napisz kod w module 'X' i przetestuj go --> ... zapomnij na jakiś czas ... --> wróć do tego samego fragmentu kodu (ze względu na pewne wymagania) -- > czuję, że "To nie jest ładnie napisane; mogło być lepiej" } while(true); Tutaj `'X'` jest dowolnym modułem (małym/dużym/średnim). Obserwuję, że dzieje się tak bez względu na to, ile wysiłku włożę w kodowanie. Więc przeważnie powstrzymuję się od oglądania działającego kodu. :) Czy to powszechne uczucie dla wielu ludzi ? Czy ten język jest specyficzny ? (Ponieważ w C++ można napisać to samo na różne sposoby). Co powinienem zrobić, jeśli dostanę to uczucie **refaktoryzacji** dla kodu produkcyjnego w prawdziwym świecie, gdzie zmiana działającego kodu nie przyniesie mi wielu pochwał, ale raczej może przysporzyć kłopotów, jeśli się nie powiedzie.


title: Ponowna operacja z ogólnym wyjątkiem

text: Szukam sposobu na uzyskanie logiki ponawiania operacji w jednej metodzie przy zachowaniu typów wyjątków operacji. Oznacza to, że implementacja ponawiania operacji może wyglądać tak: public void retriedOperation(Operable operable, int maxAttempts) wyrzuca wyjątek { for (int próba = 0; próba < maxAttempts; próba++) { try { operable.doOperation(); przerwanie; } catch (Wyjątek e) { if (próba + 1 > maxPróby) { rzut e; } } } } Ta implementacja jest jednak w stanie zgłosić nieokreślony `Wyjątek` i przez to stracić wiele informacji. Niestety, ogólne Wyjątki nie mogą ~~ani zostać przechwycone, ani rzucone~~ nie zostać przechwycone w Javie, dlatego coś takiego jak public void <ExceptionType rozszerza Wyjątek> retriedOperation(...) throws ExceptionType { ... } pozwoliłoby jedynie na przechwycenie niespecyficznego Wyjątek, sprawdź, czy jest odpowiedniego typu, a następnie rzuć. Ale jeśli jest innego typu, nie można go zgłosić za pomocą tego nagłówka metody. **Czy istnieje sposób na zaimplementowanie ogólnej funkcji ponawiania, która zachowuje określone wyjątki?**


title: Jak często należy niszczyć przedmioty?

text: Wiem, że trudno na to odpowiedzieć bez przykładów, więc szukam tutaj ogólnych zasad lub wskazówek. Myślę o małych i średnich grach i aplikacjach mobilnych. Czytałem kilka razy, że ponowne wykorzystanie obiektów jest kamieniem probierczym tworzenia wydajnych programów. Dlatego generalnie staram się ponownie wykorzystać wszystko, co możliwe. Ale potem zdałem sobie sprawę, że każdy obiekt, który trzymam, musi istnieć _gdzieś_ w pamięci, więc zaczął wydawać się **nieefektywny**. Pomyślałem, że będzie dobrze, o ile nie staram się oddać wizualnych lub słuchowych aspektów obiektów. A ja obawiałem się, że budowa i przebudowa tych obiektów będzie zbyt kosztowna do wykonania za każdym razem, gdy chcę tylko zmienić ich obecność. Załóżmy na przykład, że mam GUI składający się z 30 różnych obiektów, z których każdy reprezentuje stan ekranu - przyciski, panele, tekst, tło, może jakieś animowane elementy interfejsu użytkownika. Czy rozsądniej jest inicjować i deinicjalizować te obiekty, zachowując je w pamięci, ale wyłączając ich renderowanie, animacje itp.? A może powinienem po prostu niszczyć te rzeczy i tworzyć je na nowo? Inne przykłady rzeczy, które przechowuję, mogą być obiektami w grze, takimi jak postacie niegrywalne, broń, przedmioty itp.


title: Test jednostkowy LUB Aplikacja konsolowa

text: Mam napisać jednorazowy kod w c#.net, który wykona manipulację istniejącymi rekordami w bazie danych i wywołam Api REST innej firmy, aby zaktualizować te rekordy. Zaproponowałem napisanie testu jednostkowego, który to robi. I uruchamiam go w wersji vs2012. Moi koledzy z zespołu nie byli zbyt zadowoleni z takiego podejścia i woleli napisać w tym celu aplikację konsolową. Co myśli społeczność? Które preferujesz i jakie są zalety i wady każdego podejścia. Aktualizacja nr 1 - Dokładny scenariusz (aby wszyscy byli zadowoleni) jest następujący. Wewnętrzny interfejs API obsługuje subskrypcję newslettera dla mojej strony internetowej (no cóż... strony, nad którą pracuję). Więc te szczegóły są z tym API (e-maile i ich preferencje (subskrybuj lub anuluj)). Ale aby osiągnąć pewne rzeczy, śledzimy te preferencje również w naszej bazie danych aplikacji (SQL Server, jako tabela). Teraz w bazie danych SQL aplikacji znajdują się pewne dane, które nie są zsynchronizowane z rekordami zarządzanymi przez API. Aby to zrobić, chcę mieć możliwość napisania aplikacji do testów jednostkowych/konsoli, która będzie odczytywać niektóre wiadomości e-mail z podanej listy (być może programu Excel), wywołać interfejs API, aby uzyskać preferencje związane z tymi identyfikatorami e-mail, a następnie zaktualizować tabelę bazy danych SQL aplikacji . Aktualizacja nr 2 - Dlaczego chcę użyć testu jednostkowego do wykonania tej funkcji 1. Chcę dodać ten test/testy do mojego istniejącego projektu testowego. W ten sposób będę miał dostęp do WSZYSTKICH DTO i kontraktów (i ogólnie obiektów), które są używane w mojej aplikacji. Oszczędza mi czas na powtarzanie/duplikowanie dowolnego kodu, którego mogę potrzebować, do osobnej aplikacji konsoli. 2. Ponieważ będzie to część istniejącego repozytorium kontroli źródła, nie muszę utrzymywać oddzielnego projektu/aplikacji, którą będę musiał zrobić, jeśli zrobię konsolę (jeśli chcę się nią dzielić z ludźmi)


title: Potrzebujesz pomocy w zrozumieniu wiązania konstruktorów

text: Próbuję lepiej zrozumieć tworzenie łańcuchów konstruktorów. Rozumiem, że ta technika może być wykorzystana do zmniejszenia duplikacji kodu przy inicjalizacji obiektu klasy, a także rozumiem kolejność, w jakiej są one wykonywane. Znalazłem następujący przykład i nie widzę wyraźnie, jakie są korzyści w kodzie? A czy to konieczne? Nie rozumiem, dlaczego oba konstruktory mają w sobie słowo kluczowe „to”, czy wywołanie jednego z konstruktorów (i przekazanie odpowiednich parametrów) dałoby ten sam wynik? //Konstruktory public MojaKlasa(podwójna odległość, podwójny kąt) : this(odległość, kąt, 0) { } public MojaKlasa(podwójna odległość, podwójny kąt, podwójna wysokość) : this() { Odległość = odległość; Kąt = kąt; Wysokość = wysokość; }