title: Jak podszedłbyś do powiadomienia o błędach?

text: Ostatnio odbyła się dyskusja z kolegami spowodowana przez moją celową próbę wygenerowania przyjaznego dla użytkownika komunikatu o wystąpieniu błędu (logiki biznesowej) po stronie serwera. Nalegali na umieszczenie wszystkich możliwych do zlokalizowania zasobów łańcuchowych wewnątrz zestawu klienta sieci Web, a nie serwera. Argumentem jest umożliwienie klientowi decydowania o tym, jak generować i prezentować komunikaty użytkownikowi. Nie mogę nie zgodzić się z wymogiem takiej elastyczności dla usług publicznych, jednak rozwijamy intranetowy system back-office oraz rozwijamy część kliencką (zarówno cienkiego jak i grubego klienta). Szczerze mówiąc kod, który do tej pory widziałem, nie robi nic więcej, jak generowanie wiadomości (identycznej z kodem, który próbowałem umieścić w BL). Nie ma żadnych specjalnych kontrolek podświetlających, dokładnie pozycjonowanych wyskakujących okienek lub czegoś w tym rodzaju. Ale teraz logika się powiela: klient sieciowy + klient wygrywający. Chodzi mi o to, że lepiej trzymać się zasad DRY i YAGNI. Kopiuj wklej to zło. Drugi argument to hermetyzacja. Jeśli błąd wystąpił w Business Logic, to BL wie, jak opisać błąd i jakie dodatkowe informacje należy zebrać i przedstawić użytkownikowi bez narażania bezpieczeństwa lub ujawniania szczegółów implementacji części klienckiej. Na przykład, w przypadku równoczesnych zmian zwracamy `ConcurrenAccessError` z serwera i klienta, a następnie konwertuje to na "bla bla bla, obiekt został zmieniony przez kogoś innego, edytuj jeszcze raz". Teraz, aby dodać nazwę użytkownika i znacznik czasu zmian muszę rozszerzyć klasę `ConcurrentAccessError` o dodatkowe właściwości oraz zmienić kod generowania wiadomości w dwóch miejscach. Chciałbym zapytać, czy klient powinien w ogóle wiedzieć o współbieżności jako specjalnym typie błędu, jeśli nie robi nic poza powiadomieniem użytkownika. System nie jest przeznaczony do rozwiązywania konfliktów przez scalenie. Uważam, że duża ziarnistość błędów jest ważna tylko wtedy, gdy tak uporządkowane informacje pozwalają systemowi w jakiś sposób pomóc użytkownikowi nanieść poprawki. (Podświetlone i skoncentrowane pole wprowadzania e-maila jest lepsze niż tylko wiadomość pod formularzem) No cóż, ostatecznie nie udało mi się przekonać kolegów. Musiałem przestrzegać konwencji. Potrzebuję jednak więcej argumentów za i przeciw, aby kontynuować dyskusję lub się z nimi zgodzić. Chciałbym wiedzieć, jakich strategii powiadamiania o błędach zwykle używasz i dlaczego. Gdzie umieszczasz logikę konstruowania przekazu?


title: Czy Twoja firma myśli o przejściu z javy na inną technologię?

text: Jak każdy programista Java wie, Oracle kupiło Suna i przyszłość Javy wygląda dość niejasno, zwłaszcza że Oracle chce zarabiać na JVM. Java jako język również jest przestarzała w ciągu ostatnich kilku lat, jednym z przykładów jest nieuwzględnianie zamknięć (które mogą być zawarte w java 1.8). Jednocześnie używane są niektóre nowe technologie, takie jak Ruby, Scala i Groovy do dostarczania złożonych witryn. Zastanawiam się, czy są firmy lub organizacje, które rozmawiają, robią skoki lub zaczynają używać innej technologii, z myślą o zaprzestaniu używania javy w projektach green field, w taki sam sposób, w jaki 15 lat temu firmy migrowały z C++, perl i inne technologie do Javy. Interesuje mnie również, jakie są wrażenia z tego wydarzenia, na przykład: planuję migrację do innej technologii za 2 lata. Żeby było jasne, nie pytam, która technologia jest lepsza. Pytam, czy Twoja organizacja myśli o pozostawieniu Javy dla innej technologii.


title: Unikanie nowego operatora w JavaScript — lepszy sposób

text: _Ostrzeżenie: to długi post._ Niech to będzie proste. Chcę uniknąć konieczności prefiksu operatora new za każdym razem, gdy wywołuję konstruktor w JavaScript. Dzieje się tak dlatego, że mam tendencję do zapominania o tym, a mój kod źle się psuje. Prostym sposobem na obejście tego jest to... function Make(x) { if ( !(to wystąpienie argumentów.callee)) return new arguments.callee(x); // rób swoje... } Ale potrzebuję tego, aby zaakceptować zmienną nr. argumentów, takich jak... m1 = Make(); m2 = Marka (1,2,3); m3 = Make('jabłko', 'banan'); Wydaje się, że pierwszym natychmiastowym rozwiązaniem jest metoda „zastosuj” taka jak ta... function Make() { if ( !(to wystąpienie argumentów.callee)) return new arguments.callee.apply(null, arguments); // rób swoje } To jest jednak NIEPOPRAWNE — nowy obiekt jest przekazywany do metody `apply`, a NIE do naszego konstruktora `arguments.callee`. Teraz wymyśliłem trzy rozwiązania. Moje proste pytanie brzmi: który wydaje się najlepszy. Lub, jeśli masz lepszą metodę, powiedz to. **First** - użyj `eval()` do dynamicznego tworzenia kodu JavaScript, który wywołuje konstruktor. function Make(/* ... */) { if ( !(ta instancjaargumentów.callee)) { // zbierz wszystkie argumenty var arr = []; for ( var i = 0; argumenty[i]; i++ ) arr.push( 'argumenty[' + i + ']' ); // utwórz kod var code = 'new arguments.callee(' + arr.join(',') + ');'; // wywołaj to return eval( kod ); } // rób swoje ze zmiennymi argumentami... } **Drugi** - Każdy obiekt ma właściwość `__proto__`, która jest 'tajnym' odnośnikiem do jego prototypowego obiektu. Na szczęście ta właściwość jest zapisywalna. funkcja Make(/* ... */) { var obj = {}; // zrób swoje rzeczy na 'obj' tak samo jak na 'this' // użyj argumentów zmiennych tutaj // teraz zrób magię __proto__ // przez 'mutowanie' obj, aby uczynić go innym obiektem obj.__proto__ = argumenty.callee.prototyp; // musi zwrócić obj return obj; } **Trzecia** — To jest coś podobnego do drugiego rozwiązania. function Make(/* ... */) { // ustawimy '_construct' poza var obj = new arguments.callee._construct(); // teraz zrób swoje rzeczy na 'obj' tak samo jak na 'this' // użyj argumentów zmiennych tutaj // musisz zwrócić obj return obj; } // teraz najpierw ustaw właściwość _construct na pustą funkcję Make._construct = function() {}; // a następnie zmutuj prototyp _construct Make._construct.prototype = Make.prototype; * * * * Rozwiązanie `eval` wydaje się niezgrabne i zawiera wszystkie problemy związane ze "złym eval". * Rozwiązanie `__proto__` jest niestandardowe i "Wielka Przeglądarka mIsERY" go nie honoruje. * Trzecie rozwiązanie wydaje się zbyt skomplikowane. Ale ze wszystkimi powyższymi trzema rozwiązaniami możemy zrobić coś takiego, czego nie moglibyśmy inaczej... m1 = Make(); m2 = Marka (1,2,3); m3 = Make('jabłko', 'banan'); instancja m1 Marka; // prawdziwa instancja programu Make; // prawdziwa instancja programu Make; // prawda Make.prototype.fire = function() { // ... }; m1.ogień(); m2.ogień(); m3.ogień(); Tak więc efektywnie powyższe rozwiązania dają nam „prawdziwe” konstruktory, które akceptują zmienną nr. argumentów i nie wymagają `nowego`. Jakie jest twoje zdanie na ten temat. **\-- UPDATE --** Niektórzy powiedzieli "po prostu zgłoś błąd". Moja odpowiedź brzmi: robimy ciężką aplikację z ponad 10 konstruktorami i myślę, że byłaby znacznie wygodniejsza, gdyby każdy konstruktor mógł "sprytnie" poradzić sobie z tym błędem bez wyrzucania komunikatów o błędach na konsolę.


title: Czy RESTful API powinien dostarczać dane dla całego formularza?

text: Załóżmy, że mam aplikację internetową JavaScript, która w całości wykorzystuje RESTful API dla danych. Załóżmy, że ta aplikacja ma formularz danych i załóżmy, że edytuję rekord w /product/12345. Podczas budowania formularza wysyłam żądanie RESTful do /product/12345 i pobieram dane JSON: { "id": 12345, "name": "Some Product", "active": true, "sales_user_id": 27 } _Tak, mój formularz oczywiście może mieć listę rozwijaną do wyboru sprzedawcy. Muszę wypełnić tę listę._ **Skąd powinny pochodzić dane?** Jakie jest najczęstsze podejście? Czy byłoby sensowne umieszczenie go w odpowiedzi na żądanie /product/12345? { "id": 12345, "name": "Jakiś produkt", "active": true, "sales_user_id": 27, "sales_users": [ {"id": 1, "name": "Anna Graham"}, {"id": 2, "name": "Dick Mussell"}, {"id": 3, "name": "Ford Parker"}, {"id": 4, "name": "Ferris Wheeler"} , {"id": 5, "name": "Jo King"} ] } A co z tworzeniem nowego rekordu? Czy mój interfejs API powinien również odpowiadać na GET /product/new w następujący sposób? { "sales_users": [ {"id": 1, "imię": "Anna Graham"}, {"id": 2, "imię": "Dick Mussell"}, {"id": 3, "imię" : "Ford Parker"}, {"id": 4, "name": "Ferris Wheeler"}, {"id": 5, "name": "Jo King"} ], "categories": [ {"id ": 1, "nazwa": "Kategoria 1"}, {"id": 2, "nazwa": "Kategoria 2"}, {"id": 3, "nazwa": "Kategoria 3"}, {" id": 4, "name": "Kategoria 4"}, {"id": 5, "name": "Kategoria 5"} ], "etc": [ ... ] }


title: Właściwy projekt zależności wieloobiektowej

text: Potrzebuję pomocy z poprawnym projektem. Mam klasę o nazwie `BufferManager`. Metoda `push()` tej klasy odczytuje dane ze źródła i wielokrotnie umieszcza je w buforze, dopóki w źródle nie będzie już więcej danych. Istnieją również wątki konsumenckie, które odczytują dane z tego bufora, gdy tylko nadejdą nowe dane. Istnieje możliwość sortowania danych, zanim trafią do bufora. To, co teraz robię, to to, że `BufferManager` zamiast wypychać dane do bufora, umieszcza je w innym buforze „sortującym” i uruchamia wątek sortujący. Klasa `SorterManager` odczytuje dane, sortuje je w plikach i `push()` umieszcza posortowane dane w buforze. Będzie wąskie gardło (używam sortowania przez scalanie z plikami), ale jest to coś, czego nie mogę uniknąć. Jest to zły projekt, ponieważ zarówno `BufferManager` jak i `SorterManager` przesyłają dane do bufora (z którego konsumenci czytają). Myślę, że tylko `BufferManager` powinien to zrobić. Jak mogę to zaprojektować?


title: Wybór języka do pisania biblioteki ogólnej w

text: Mam zamiar zacząć pisać bibliotekę obsługującą algorytmy uczenia maszynowego (drzewa decyzyjne, sieci SSN, sieci Bayesa itp.) i planuję uczynić z tej biblioteki bardzo ogólną. Rozumiem przez to, że chcę móc podłączyć ten moduł do jak największej liczby języków. Aby wyjaśnić, oto dlaczego zacząłem pisać to w C++ (nagłówki Windows): * Wiem, że mogę importować biblioteki C++ do C# i słyszałem, że można zaimportować C++ do Pythona. Oczywiście biblioteka może być używana w 3 językach, prawdopodobnie w 4, jeśli nie używam nagłówków specyficznych dla systemu. * Czy istnieje język, w którym mogę objąć szerszy zasięg, ważony popularnością języków? (Na przykład C# i C++ mają dla mnie dość dużą wagę, ponieważ często używam obu, Python mniej.)


title: Który z nich jest najszybszym Message Brokerem w przypadku pojedynczej maszyny?

text: Chciałbym wiedzieć, jakiego Message Brokera wybrać w przypadku komunikacji między aplikacjami w obrębie jednego komputera, biorąc pod uwagę szybkość. Spośród Apache ActiveMQ , MSMQ , RabbitMQ , OpenAMQ który z nich jest najszybszy w przypadku komunikacji między wieloma aplikacjami na jednym komputerze?


title: Konstruktor generalnie nie powinien wywoływać metod

text: Wyjaśniłem koledze, dlaczego konstruktor wywołujący metodę może być antywzorcem. przykład (w moim zardzewiałym C++) class C { public : C(int foo); void setFoo(int foo); prywatne: int foo; } C::C(int foo) { setFoo(foo); } void C::setFoo(int foo) { this->foo = foo } Chciałbym lepiej motywować ten fakt poprzez Twój dodatkowy wkład. Jeśli masz przykłady, odniesienia do książek, strony na blogach lub nazwy zasad, byłyby bardzo mile widziane. Edycja: mówię ogólnie, ale kodujemy w Pythonie.


title: Programowanie mobilnego telefonu HTML5 PhoneGap?

text: Chcę kilka sugestii dotyczących koncepcji/pomysłów projektowych dotyczących tworzenia aplikacji mobilnych HTML5 PhoneGap. Chcę opracować aplikację, która może być krzywą uczenia się, aby poznać te technologie. Jakieś konkretne koncepcje aplikacji, w których mogę przyzwyczaić się do korzystania z funkcji takich jak kamera, geolokalizacja, akcelerometr itp. i wdrożyć je jako spójną część pracy nad projektem? Przepraszamy, jeśli to może nie być odpowiednie forum do zadawania takich pytań. Ale nie mogłem znaleźć żadnej odpowiedniej strony wymiany stosów.


title: Dlaczego potrzebujemy "funkcji wywołania zwrotnego"?

text: Czytam książkę "programowanie w Lua". Stwierdzono, że > Zamknięcia stanowią cenne narzędzie w wielu kontekstach. Jak widzieliśmy, są one > przydatne jako argumenty funkcji wyższego rzędu, takich jak sort. Zamknięcia są > cenne dla funkcji, które budują również inne funkcje, jak nasz przykład newCounter >; mechanizm ten pozwala programom Lua na włączanie > zaawansowanych technik programowania ze świata funkcjonalnego. Zamknięcia są również przydatne dla funkcji > callback. Typowy przykład występuje tutaj, gdy tworzysz przyciski > w konwencjonalnym zestawie narzędzi GUI. Każdy przycisk ma funkcję zwrotną >, która ma być wywołana, gdy użytkownik naciśnie przycisk; chcesz, aby różne przyciski > robiły nieco inne rzeczy po naciśnięciu. Na przykład cyfrowy kalkulator > potrzebuje dziesięciu podobnych przycisków, po jednym dla każdej cyfry. Możesz stworzyć > każdy z nich za pomocą funkcji takiej jak ta: function digitButton (cyfra) return Button{label = tostring(cyfra), akcja = function () add_to_display(cyfra) end} end Wygląda na to, że jeśli wywołam `digitButton `, zwróci `akcję` (spowoduje to utworzenie zamknięcia), więc mogę uzyskać dostęp do `cyfry` przekazanej do `digitButton`. Moje pytanie brzmi: Dlaczego potrzebujemy funkcji wywołania zwrotnego? do jakich sytuacji mogę to zastosować? * * * Autor powiedział: > W tym przykładzie zakładamy, że Button jest funkcją zestawu narzędzi, która tworzy > nowe przyciski; label to etykieta przycisku; a akcja to zamknięcie wywołania zwrotnego >, które ma zostać wywołane po naciśnięciu przycisku. Callback można wywołać długo > po tym, jak digitButton wykonał swoje zadanie i po tym, jak zmienna lokalna digit wyszła > poza zakres, ale nadal może uzyskać dostęp do tej zmiennej. według autora myślę, że podobny przykład jest taki: function Button(t) -- może powinieneś ustawić przycisk tutaj return t.action -- aby później wywołać tę funkcję end add_to_display(digit) print (" Wyświetl etykietę przycisku: " .. tostring(cyfra)) end funkcja digitButton(cyfra) return Button{label = tostring(cyfra), akcja = funkcja () add_to_display(cyfra) end} end click_action = digitButton(10) click_action() w ten sposób `callback może być wywołany długo po tym, jak digitButton wykonał swoje zadanie i po tym, jak zmienna lokalna digit wyszła poza zakres.


title: Jakiego pojedynczego słowa mogę użyć do opisania instrukcji SQL bez zapytania?

text: Próbuję wymyślić dobrą nazwę dla obiektu dostępu do danych, który wykonuje instrukcje SQL bez zapytań. Wiem, że DML to poprawny termin, ale chciałem się upewnić, że jest najlepszy. W tej chwili mamy OracleNonQuery, ale mam nadzieję, że znajdę coś lepszego. **UPDATE:** OracleDML lub OracleDMLStatement to dobre sugestie. Pewnie pójdę z jednym z nich, chyba że ktoś ma lepsze określenie.


title: Znaleźć wszystkie punkty w pewnej odległości od siebie?

text: Powiedzmy, że mamy... 50k punktów losowo przydzielonych w przestrzeni 3D, zgodnie z jakąś funkcją wolumetryczną, tak że w niektórych częściach przestrzeni punkty są bliżej siebie, ale w innych są dalej. Każdy punkt ma losowy kolor (reprezentowany na przykład przez liczbę całkowitą) Chciałbym znaleźć wszystkie punkty, które: * znajdują się w pewnej (ogólnej) odległości od siebie, oraz * mają inny kolor. Jaki jest najszybszy sposób obliczenia tego? Dalsze, nieobowiązkowe szczegóły: Moim celem końcowym jest usunięcie wszystkich punktów o tym samym kolorze, dopóki nie będzie więcej kolizji. Chciałbym usunąć jak najmniej kolorów, jednak nie jest to _obowiązkowe_. Mógłbym po prostu usunąć wszystkie kolory, które są zaangażowane w jakiekolwiek kolizje W OGÓLE, chociaż może to skutkować niższą jakością wyniku. Odległość nie musi być dokładna. Na przykład, jeśli dokładny „promień kolizji” reprezentuje idealną kulę, to byłbym w porządku, gdyby promień kolizji miał kształt, powiedzmy, sześcianu. Jestem też w porządku z rozwiązaniem, które sprzyja wyzwalaniu. Oznacza to, że nic mi nie jest, jeśli punkty zostaną „wykryte”, nawet jeśli nie są zbyt blisko. Po prostu nie chcę, aby zdarzało się to zbyt często i _nie_ akceptuję punktów, które mają zostać zamknięte, _nie_ wykryte. Poza tym jestem pewien, że istnieje rodzina algorytmów temu poświęconych, ale nie mogę za życia wymyślić żadnych nazw... Znajomość nazwy algorytmu tego typu byłaby niezmiernie pomocna.


title: Czy istnieje różnica między scaleniami w svn a git lub mercurial?

text: Z mojego punktu widzenia SVN to „łatwe do rozgałęzienia”. Trudne do połączenia”. Dlaczego? Czy jest jakaś różnica jak się łączą?


title: Złożoność ArrayList z LinkedHashSet

text: Otrzymuję ciągi wejściowe z konsoli w następujący sposób: while ((currentLine = bufferedReader.readLine()) != null ) { StringTokenizer string = new StringTokenizer(currentLine, " "); while (string.hasMoreTokens()) { // Utwórz nowy LinkedHashSet dla każdego tokena, a następnie dodaj go do ArrayList. LinkedHashSet<String> linkedHashSet = nowy LinkedHashSet<String>(); linkedHashSet.add(string.nextToken()); setOfStrings.add(linkedHashSet); } } Zawsze otrzymuję różne ciągi z danych wejściowych, nigdy takie same. Po zakończeniu wypełniania struktur danych mam następującą sytuację: * „ArrayList<LinkedHashSet<String>>”, który zawiera jeden LinkedHashSet dla każdego podziału ciągu. * Wewnątrz każdego `LinkedHashSet` mam ciąg, który różni się od każdego innego ciągu obecnego w innych LinkedHashSet - innymi słowy, jest unikalny. Na przykład nie mogę mieć tego w ArrayList: Set x : [foo] ... Set y : [foo] **Po wykonaniu tej czynności wywołuję poniższą funkcję wiele razy, aby wykonać różne scalenia.** public void mergeSets(operacje ArrayList<ciąg>, ArrayList<LinkedHashSet<ciąg>> setOfStrings) { String toMerge = operation.get(1); Ciąg znaków zMerge = operacje.get(2); wartość logiczna wprowadzonaFirstToMerge = false; wartość logiczna wprowadzonaFirstFromMerge = false; // Tymczasowe odwołanie LinkedHashSet używane do łączenia dwóch zestawów. LinkedHashSet<String> subSetToMerge = null; LinkedHashSet<String> subSetFromMerge = null; for (Iterator<LinkedHashSet<String>> iterator = setOfStrings.iterator(); iterator.hasNext(); ) { LinkedHashSet<String> subSet = iterator.next(); if (subSet.contains(toMerge) && subSet.contains(fromMerge)) break; else { if (subSet.contains(toMerge) && !enteredFirstToMerge) { enterFirstToMerge = true; subSetToMerge = subSet; iterator.usuń(); } else if (subSet.contains(fromMerge) && !enteredFirstFromMerge) { enterFirstFromMerge = true; subSetFromMerge = subSet; } } if (enteredFirstFromMerge && enterFirstToMerge) break; } if (enteredFirstFromMerge && enterFirstToMerge) { subSetFromMerge.addAll(subSetToMerge); } } Objaśnienie: Na przykład, jeśli mam jako operację `merge foo bar`, muszę wykonać następujące kroki: * Przede wszystkim muszę dowiedzieć się, gdzie znajdują się `foo` i `bar`: * Wewnątrz `setOfStrings` , mogę mieć taką sytuację: pozycja x : [bar, drzewo, hotel] ... pozycja y : [foo, cytryna, kawa] Gdy je znajdę, muszę **_`połączyć zbiór zawierający foo z zestaw zawierający bar`_** w ten sposób: position x : {bar tree hotel foo lemon coffee} ... position y : {} -> usunięty z arrayList Ta funkcja przyjmuje jako parametry `arrayList` operacji i ` arrayList<LinkedHashSet<String>>`: W przypadku `ArrayList` `operacji` zawsze otrzymuję określoną pozycję: * `operations.get(1)` odnosi się do zestawu do scalenia (w tym przykładzie foo) * `operations .get(2)` odnosi się do zestawu, do którego dodać zestaw foo (w tym przykładzie bar) Z tą pętlą for, ja i terate ArrayList, aby przeszukać zestawy do,`for (Iterator<LinkedHashSet<String>> iterator = setOfStrings.iterator(); iterator.hasNext(); )` Ta instrukcja `if` sprawdza, czy iterator znajduje się w określonym zestawie: if (subSet.contains(toMerge) && !enteredFirstToMerge) { enterFirstToMerge = true; subSetToMerge = subSet; iterator.usuń(); } else if (subSet.contains(fromMerge) && !enteredFirstFromMerge) { enterFirstFromMerge = true; subSetFromMerge = subSet; } **_Moje pytanie: Czy mogę mieć kolizje z tego typu algorytmem, który zaimplementowałem?_** Jeśli nie, złożoność czasowa to tylko O(n) -> rozmiar arrayList.


title: usługa hostingu php i mysql, która obsługuje mój system rejestracji

text: Uprzejmie powiedz, jak zrobić system rejestracji, który będzie działał z php i MySql. Wypróbowałem demo, które jest tutaj, ale jak to działa z hostingiem online. Zarejestrowałem bezpłatny hosting tutaj. Stworzyłem również bazę danych tutaj, ale nie wiem, jak korzystać z plików php oraz przesyłać i używać bazy danych mysql, którą tutaj utworzyłem. Chcę system rejestracji online, który używa php i mysql z darmowym hostingiem, który służy moim celom. System rejestracji tworzy użytkownika i wysyła e-mail potwierdzający na adres e-mail użytkownika i po potwierdzeniu użytkownik może zalogować się do aplikacji internetowej i dalsze prace będą tutaj wykonywane po rejestracji. Uprzejmie poprowadź mnie w powyższym scenariuszu lub powiedz inną bezpłatną usługę hostingową, która spełni mój cel.


title: Zmienne jednorazowego użytku — czy był kiedykolwiek używany w jakimkolwiek języku?

text: Zasadą, którą się kieruję, jest to, że ustalenie identyfikatora powinno być dla czytelnika sygnałem, że wartość, do której się odnosi, jest rzeczywiście abstrakcją, która zostanie użyta więcej niż jeden raz. Oznacza to, że identyfikator jest definiowany lub przypisywany raz, a wartość jest odczytywana więcej niż raz. Istnieje jednak powszechny idiom, zgodnie z którym, w celu zwiększenia czytelności, części złożonego wyrażenia są rozkładane na zmienne. Zmienne te zostaną użyte tylko raz, naruszając zasadę. W związku z tym do wskazania zmiennej jednorazowego użytku należy użyć specjalnej oddzielnej klasy identyfikatora. Ta zasada dotyczy każdego identyfikatora. Możesz więc mieć funkcje jednorazowego użytku, metody jednorazowego użytku, zmienne jednorazowego użytku itp. Czy kiedykolwiek istniał język programowania obsługujący zmienne jednorazowe?


title: Czy warto przestudiować podstawy podstawowego języka, gdy głównym celem jest poleganie na jego ramach?

text: Należy pamiętać, że nie jest to kolejny „Ile [ _tu wstaw język programowania_ ] powinienem wiedzieć przed przejściem do [ _tu wstaw framework_ ]?” Chciałbym wiedzieć, jak korzystne jest nauczenie się tych zaawansowanych koncepcji języka programowania, gdy przez większość czasu zamierzasz w dużym stopniu polegać na jego strukturze. Na przykład zacząłem używać jQuery i najpierw poświęciłem trochę czasu, aby naprawdę zrozumieć podstawowe koncepcje JavaScript. Dodatkowo mam na półce kilka książek _poza podstawami_ (na przykład Sekrety Ninja Javascript), które naprawdę zagłębiają się w język. Gdy przeglądam strony, stwierdzam, że sporo tego nie przenosi się na jQuery, ponieważ moim głównym celem jest manipulacja DOM. To samo można powiedzieć o Ruby i RoR. Czy te książki uczynią mnie ogólnie lepszym programistą? Prawdopodobnie. Czy te tematy pomogą mi stać się o wiele lepszym dzięki jego ramom? Właśnie tego trudno mi zrozumieć.


title: Jak oceniłbyś te umiejętności programowania w kolejności ich uczenia się?

text: Jako programista **ogólnego przeznaczenia**, czego powinieneś się najpierw nauczyć, a czego później? Oto kilka umiejętności, nad którymi się zastanawiam... * SQL * Wyrażenia regularne * Wielowątkowość / Współbieżność * Programowanie funkcjonalne * Grafika * Opanowanie składni/semantyki/zestawu funkcji twojego ojczystego języka programowania * Opanowanie bibliotek frameworku klasy podstawowej * Wersja System sterowania * Testy jednostkowe * XML * Czy znasz inne ważne? Proszę je sprecyzować... Na jakich umiejętnościach powinienem się najpierw skupić?


title: Przechowywanie danych o obecności w bazie danych

text: Więc muszę przechowywać codzienną frekwencję pracowników mojej organizacji z mojej aplikacji. Część, w której potrzebuję pomocy, to wydajny sposób przechowywania danych o obecności. Po kilku badaniach i burzy mózgów wymyśliłem kilka podejść. Czy mógłbyś mi wskazać, które z nich jest najlepsze i jakie nieoczywiste złe skutki wspomnianych podejść. Podejścia są następujące: 1. Utwórz jedną tabelę dla całej organizacji i codziennie przechowuj numer, datę, stan obecny jako wiersz dla każdego pracownika. 2. Utwórz jedną tabelę dla całej organizacji i przechowuj jeden wiersz na każdy dzień z ciągiem empid oddzielonych przecinkami, których nie ma. Wygeneruję ciąg w mojej aplikacji. 3. Utwórz różne tabele dla każdego działu i postępuj zgodnie z metodą 1. Podziel się swoimi opiniami i wspomnij o innych dobrych metodach


title: Korzyści z ustawienia PHP memory_limit na niższą wartość dla określonego skryptu PHP?

text: Muszę wykonać tylko kilka linijek kodu PHP na każdej stronie mojej witryny. Ten kod PHP nie wymaga więcej niż 4 MB pamięci. Dlatego chcę przydzielić tylko 4MB pamięci na wszystkie strony, używając następującego kodu: ini_set('memory_limit','4M'); Czy daje jakieś korzyści w którymkolwiek z następujących obszarów: 1\. Szybkość witryny 2\. Optymalizacja przepustowości 3\. Optymalizacja wykorzystania pamięci serwera


title: Gdzie znaleźć dobry symulator robota mobilnego?

text: Chciałbym dowiedzieć się więcej o robotach mobilnych, czy ktoś mógłby polecić jakiś łatwy i stabilny? **EDYTUJ** Jeśli to możliwe, w językach programowania C, C++ lub Java. Może działać w systemie Linux lub Windows.


title: W jaki sposób system rezerwacji miejsc w kinie uniemożliwia wielu użytkownikom rezerwowanie tych samych miejsc?

text: W kinie, do którego chodzę, mają kioski z biletami, które pozwalają wybrać miejsca, które chcesz; mają też witrynę, która robi to samo (witryna ma również licznik czasu wynoszący około 30 sekund, w którym musisz wybrać miejsce). Chociaż rozumiem takie rzeczy, jak transakcje bazy danych i inne techniki obsługi wielu jednoczesnych użytkowników, po prostu nie mogę zrozumieć, jak wiele osób może wybrać miejsce w tym samym czasie; czy to takie proste, że pierwszy, który wciśnie KUP, dostaje miejsca, a druga osoba dostanie komunikat o błędzie, czy czegoś mi brakuje?


title: Dlaczego piszemy nasze specyfikacje w różnych plikach z naszego źródła?

text: Język programowania D obsługuje pisanie testów jednostkowych w linii ze źródłem. Istnieje klejnot Ruby o nazwie test_inline, który pozwala pisać specyfikacje w tym samym pliku, co kod. Dlaczego na ogół trzyma się kod źródłowy w zupełnie innym katalogu niż kod testowy?


title: Jak stworzyć wspólny interfejs dla klas z różnymi podzbiorami członków

text: Nie wiem jak to ująć, ale postaram się być jak najbardziej klarowny Mam projekt w którym tworzę wiele klas i te klasy mają pewne wspólne właściwości i metody ale te metody mogą mieć w sobie inny kod , Postanowiłem więc stworzyć interfejs, abym mógł odziedziczyć, że we wszystkich klasach i wszystkie klasy będą miały w sobie te same metody, takie jak `insert, update, delete` z innym kodem wewnątrz tych metod, ale ta sztuczka nie powiodła się, gdy odkryłem, że nie wszystkie klasy mają taką samą strukturę, jak niektóre mają metodę wstawiania, ale nie aktualizują i jeśli dziedziczę interfejs, muszę podać publiczną deklarację dla wszystkich członków tego interfejsu, których nie chcę. Sztuczka druga Myślałem o utworzeniu klas abstrakcyjnych, ale ten sam problem wszystkie abstrakcyjne składowe muszą być zaimplementowane publicznie. Krótko mówiąc **Chcę stworzyć wspólną dziedziczną strukturę, która działałaby jako niemożliwy do wystąpienia instancja schemat dla klas i mogłaby być dziedziczona na wiele klas, ale w wielu klasach nie chcę implementować wszystkich członków tej struktury ** UWAGA : Mogę zrobić no-op (puste metody, które nic nie robią lub zwracają na przykład wartość null), jak niektórzy mi zasugerowali, ale to nie jest rozwiązanie, którego szukam, ponieważ te niepotrzebne elementy będą widoczne podczas wywiadu i tego właśnie chcę uniknąć. Jak mogę to zrobić ?


title: Obsługa żądania zastąpienia zachowań przeglądarki (Wstecz i Odśwież)

text: Jestem nowym facetem w tej firmie i otrzymałem zadanie zbadania możliwych obejść zachowań przeglądarki w celu zaspokojenia wymagań naszego klienta. Trochę tła; chcą wyświetlać „niestandardowe” okno dialogowe za każdym razem, gdy użytkownik chciałby opuścić stronę (nie domyślną przeglądarki), która ma formularz, tak jak robi to Facebook. Znalazłem obejście za pomocą przycisku „Wstecz” w postaci stanów przeglądarki i zintegrowałem je z moją lokalną kompilacją aplikacji sieci Web. Działa jak urok, choć nie jestem przekonany, że to dobra praktyka. (więcej triku, jeśli mnie pytasz) Problemem jest zdarzenie `Refresh`. Wszystkie moje badania (oto jedno) mówią mi, że powinienem się poddać. Ech... Więc szukam sposobu, aby przekonać moich przełożonych, że pomijanie zachowań przeglądarki jest złą praktyką lub że praktycznie niemożliwe jest pominięcie zachowania odświeżania; tak dyplomatycznie, jak to tylko możliwe. (Gdybym mógł cytować artykuły, które dodatkowo potwierdziłyby mój punkt widzenia, byłoby świetnie) Czy nadal szukam możliwych obejścia tego problemu w Internecie? (zbyt dużo wysiłku badawczego, ale niewiele osiągnięć, jeśli mnie pytasz, ale hej, co ja wiem?)


title: Czy istnieje wada instalacji programu Visual Studio Ultimate, jeśli nie potrzebuję wszystkich funkcji?

text: Firma Microsoft udostępniła dziś ostateczne kompilacje programu Visual Studio 2012 w witrynie MSDN. Próbuję zdecydować z tej strony porównania wersji, którą edycję zainstalować (mogę zainstalować dowolną edycję, którą chcę za darmo). Jestem samodzielnym programistą, który tworzy głównie aplikacje webowe i konsolowe w C# i Pythonie. Niektóre funkcje Ultimate/Premium wyglądają potencjalnie fajnie (takie jak UML i „debugowanie historyczne”), ale większości funkcji nie będę potrzebował lub nigdy nie słyszałem. Z jednej strony byłoby miło mieć te funkcje na wypadek, gdybym kiedyś ich potrzebował. Z drugiej strony w przypadku niektórych programów dodatkowe funkcje powodują, że edycje z wyższej półki (1) są wolniejsze i zużywają więcej pamięci oraz (2) mają bardziej zagracony interfejs użytkownika. Czy tak jest w przypadku programu Visual Studio?


title: Zmiana zespołu z TFS Source Control na TFS z Git, niepewny, jak radzić sobie ze złożoną strukturą projektu

text: Używam git do moich osobistych projektów od lat, ale to zawsze działa samotnie, nie trzeba dużo rozgałęziać itp. Nasz zespół programistów w pracy zdecydował, że zdecydowanie przechodzimy na git i jako jeden z najbardziej doświadczonych użytkowników git na zespół mam za zadanie rozpracować strukturę naszego projektu. Nasza obecna struktura ma jedną kontrolę źródła z wieloma projektami. Te „projekty” kontroli źródła mogą zawierać wiele folderów zawierających wiele rozwiązań programu Visual Studio, które mogą zawierać wiele projektów programu Visual Studio, z których niektóre są współużytkowane. Przykład: * Katalog główny * Folder 1 * Rozwiązanie 1 * Projekt 1 * Projekt udostępniony 1 * Folder 2 * Rozwiązanie 2 * Projekt 2 * Projekt 3 * Rozwiązanie 3 * Projekt 4 * Projekt udostępniony 1 * Projekt udostępniony 2 * Folder 3 * Rozwiązanie 4 * Shared Project 1 * Shared Project 2 Nie jestem pewien, jak poprawnie przetłumaczyć to na git. Główną obawą, o której mi wspomniano, jest to, że jeśli używamy podmodułów git, to podczas wprowadzania zmian musi być zastosowany do wielu repozytoriów. Czy można to obejść? Czy program TFS w programie Visual Studio radzi sobie z tym w łatwy do zarządzania sposób? Czy ktoś ma dobre informacje na ten temat?


title: Pełna podpisana część dwóch dopełniaczy długich

text: Zajmuję się inżynierią wsteczną pliku danych (z syntezatora). Wydaje się, że m.in. -1 jest zapisywane jako FF FF FF FF, czyli w czterech bajtach. podczas gdy +1 jest zapisywane jako 00 00 01 (--), więc tylko trzy bajty. Czy coś takiego jest powszechne? Słyszałem tylko o formacie 3 lub 4 bajtowym, ale nie 3 LUB 4 w zależności od znaku. A czy jest jakiś sposób na poradzenie sobie z tym w C#? Klasa BitConverter jest na to trochę zbyt ograniczona.


title: Jaki jest status prawny starego materiału referencyjnego?

text: Jestem na bardzo, bardzo wczesnym etapie pisania emulatora Amigi 500 i chciałbym dołączyć dokumentację sprzętową obok mojego kodu źródłowego lub w osobnym pakiecie `doc`. Jako jeden z przykładów, oto informacja o prawach autorskich z Commodore Amiga A500/A200 Technical Reference Manual: ![tutaj wpisz opis obrazu](http://i.stack.imgur.com/4nOx4.png) To nie brzmi obiecująco . Inne dokumenty, które chciałbym dołączyć to Motorola 68000 Programmer's Reference Manual, AmigaDOS Technical Reference Manual i być może inne w przyszłości. Czy muszę zajmować się tymi dokumentami jeden po drugim, czy istnieje parasol „Tak, możesz” lub „Nie, nie możesz”, który obejmuje je wszystkie? Jeśli istnieje szeroka odpowiedź, nie musi ona dotyczyć w szczególności moich dokumentów. Z góry dziękuję!


title: Testowanie zgodności z pomniejszymi wersjami przeglądarki

text: Tworzę aplikację internetową i testujemy ją na przeglądarkach takich jak Firefox i Internet Explorer. Podczas naszego rozwoju testujemy aplikację na Firefox 3.5. **2**, a nasz zespół testujący testuje to samo w wersji 3.5. **6** i okazało się, że interfejs wygląda dobrze. Ale nagle klient narzeka, że nie wygląda dobrze w 3.5. **8**. Jak radzimy sobie z tymi drobnymi problemami z wersją? Jak możemy sprawdzić kompatybilność przeglądarki podczas tworzenia i testowania? Czy jest jakieś narzędzie do testowania aplikacji na 3.5. **X** , gdzie X to wszystkie wersje pomocnicze?


title: Programowanie aspektowe i niejawność

text: Załóżmy, że mam klasę, która reprezentuje obraz i ma kilka metod. class Image { circle(x,y,promień,kolor); kwadrat(x,y,w,h,kolor); floodfill(x,y,kolor) clear(); } Ponadto chcę mieć funkcję cofania. Prostym sposobem na zaimplementowanie tego jest prowadzenie listy wszystkich wykonanych czynności. Kiedy cofam, po prostu ponownie uruchamiam wszystkie akcje. Jednym z rozwiązań byłoby zaimplementowanie aspektu, czegoś takiego: aspekt ImageUndo { na Image::circle, Image::square, Image::floodfill precall(object, args) { object.actions_list.add(args) } } Zasadniczo, ten aspekt zmodyfikował teraz zachowanie Image. To mnie niepokoi. W szczególności inny programista nie zaznajomiony z istnieniem aspektu ImageUndo może napotkać następujące problemy: 1. Dodaje metodę i nie działa z funkcją cofania. 2. Próbując debugować mechanizm cofania, nie jest jasne, gdzie zostanie dodana lista_działań. Z drugiej strony możemy mieć class Image { @undoable_action circle(x,y,radius,color); @undoable_action kwadrat(x,y,w,h,kolor); @undoable_action floodfill(x,y,color) @undoable_action clear(); } Co nie przeszkadza mi tak bardzo, ponieważ daje wyobrażenie o tym, gdzie szukać kodu cofania i sprawia, że nowy koder prawdopodobnie go zauważy i automatycznie doda go do nowej metody. Podsumowując: aspekty (przynajmniej te, które pokazałem) wydają się wnosić „ukrytą magię” do tego, co robi kod. Wydaje mi się, że niejawność jest niebezpieczna i naprawdę powinniśmy to wyraźnie zaznaczyć. Czy istnieją dobre powody do niejawności? Czy ludzie, którzy faktycznie używają AOP, piszą kod, który dokonuje tego rodzaju modyfikacji? Uwaga: to jest przeróbka Czy programowanie zorientowane na aspekty to dobry pomysł? który został zamknięty, ponieważ moja poprzednia wersja przypadkowo trafiła na ranting.


title: Skuteczne sposoby na popularyzację projektu OSS?

text: Po napisaniu kilku (stosunkowo niejasnych) frameworków OSS, na własnej skórze przekonałem się, że napisanie dobrego frameworka to za mało — trzeba poświęcić trochę czasu na marketing swojego frameworka, tak samo jak czas poświęcony na jego kodowanie. Oto moje pytanie: Jakie są skuteczne sposoby na to, aby Twój projekt OSS stał się dobrze znany? Poza blogowaniem, w jaki sposób mogę uzyskać największą uwagę rynku dla mojego kodu przy najmniejszym wysiłku, jak to tylko możliwe? (EDIT: Jestem leniwym programistą i nienawidzę dokumentacji, ale gryzę kulę. Chcę być sławny)


title: Co sprawia, że programiści C są tak ciekawi, jeśli "i++ == ++i"?

text: Tylko przypadkowa obserwacja, wydaje się, że na StackOverflow.com pojawiają się pytania o to, czy „++i == i++”. To pytanie jest jednak zadawane cały czas, wydaje mi się, że w ciągu ostatnich 2 miesięcy widziałem je 6 lub 7 razy. Zastanawiam się tylko, dlaczego programiści C są tak zainteresowani? Ta sama koncepcja/pytanie istnieje również dla programistów C# i Java, ale wydaje mi się, że widziałem tylko jedno pytanie związane z C#. Czy to dlatego, że tak wiele przykładów używa ++i? Czy to dlatego, że jest jakaś popularna książka lub samouczek? Czy to dlatego, że programiści C po prostu uwielbiają upychać jak najwięcej w jednej linii w celu uzyskania „wydajności”/„wydajności” i dlatego częściej spotykają się z „dziwnymi” konstrukcjami przy użyciu operatora ++?


title: Czy prezenter powinien zależeć od widoku, czy na odwrót?

text: Do tej pory kilka razy używałem wzorca architektury **MVP**. Co jakiś czas zastanawiam się, czy mój „Prezenter” powinien zależeć od mojego „Widoku”, czy odwrotnie, czyli „Widok” zależy od mojego „Prezentera”. **UWAGA** > Chociaż podany przykładowy kod jest w języku C#, nie mam nic przeciwko językowi. > Moje pytanie dotyczy dokładniej wzorca **MVP**. Dodatkowo został dostarczony z czubka mojej głowy wyłącznie po to, aby zilustrować moje obawy. Może > się nie skompilować. Oto krótka próbka tego, co robię: interfejs publiczny IHasUiHandler<H> gdzie H : IUiHandler { H Handler { set; } } interfejs publiczny IView { void Close(); nieważne Ukryj(); nieważne Pokaż(); } public abstract class Presenter<V> gdzie V : IView { protected Presenter(V view) { this.view = view; } public void CloseView() { view.Close(); } public void UkryjWidok() { zobacz.Ukryj(); } public void ShowView() { view.Show(); } prywatny widok V tylko do odczytu; } Załóżmy, że tworzę funkcję zarządzania klientami. interfejs publiczny ICustomerManagementUiHandler : IUiHandler { Klient UtwórzNowegoKlienta(); IList<Klient> ListaKlientów(); void RemoveCustomer (klient klienta); Aktualizacja klientaKlient (klient klienta); } public class CustomerManagementPresenter : Presenter<ICustomerManagementView> , ICustomerManagementUiHandler { public CustomerManagementPresenter(ICustomerManagementView view , CustomerManagementService service) : base(view) { view.Handler = this; klienci = obsługa; } public Zmiana KlientaExistingCustomer(Klient klienta) { powrót klientów.Aktualizacja(klient); } public Klient UtwórzNowegoKlienta(Klient klienta) { powróć klienci.Dodaj(klient); } public IList<Klient> ListKlienci() { return klienci.List(); } public void RemoveCustomer(Customer customer) { customers.Remove(customer); } prywatni klienci tylko do odczytu CustomerManagementService; } interfejs publiczny ICustomerManagementView : IHasUiHandler<ICustomerManagementUiHandler> { } public class CustomerManagementForm : Form, ICustomerManagementView { public CustomerManagementForm() { } public ICustomerManagementUiHandler Handler { private get { return handler; } set { if (handler == null) handler = wartość; } } private void changeCustomerButton_Click(object sender, EventArgs e) { if (Handler == null) throw new InvalidOperationException("Nie można zmienić klienta. Nie określono procedury obsługi."); Handler.ChangeExistingCustomer(bieżący); } private void createCustomerButton_Click(object sender, EventArgs e) { if (Handler == null) throw new InvalidOperationException("Nie można dodać nowego klienta. Nie określono procedury obsługi."); Handler.UtwórzNowegoKlienta(); // Brak parametrów dla uproszczenia próbki. } private void deleteCustomerButton_Click(object sender, EventArgs e) { if (Handler == null) throw new InvalidOperationException("Nie można dodać nowego klienta. Nie określono procedury obsługi."); Handler.UsuńKlienta(bieżący); } prywatny menedżer ICustomerManager tylko do odczytu; prywatny program obsługi ICustomerManagementUiHandler; } Czuję, że `Widok` powinien zależeć od prezentera, aby nie było potrzeby posiadania właściwości `Handler` w samym `Widoku`. Wtedy „Prezenter” może zależeć od usługi dostępu do danych lub podobnej do obsługi podmiotów gospodarczych i tym podobnych. To odsunęłoby **metodę wstrzykiwania**, co jest korzyścią, IMHO. Ponadto wydaje się, że zmniejsza to złożoność w przypadku rezygnacji z interfejsów „IHasUiHandler” i „IUiHandler”. To sprawia, że jest to kod łatwo testowalny, ponieważ `Presenter` jest klasą łatwą do przetestowania. Jednak w ten sposób obawiam się, że „Prezent” nie ma realnej kontroli nad widokiem, który powinien być w stanie pokazać lub ukryć. Więc to jest miejsce, w którym zaczynam się zastanawiać, co powinno zależeć od czego.


title: Jak sformatować identyfikatory widoków Androida

text: Zmagam się z tym za każdym razem, gdy pracuję nad projektem. Nie jestem do końca pewien, jakie są standardowe konwencje tworzenia identyfikatorów widoków. Zwykle używam czegoś takiego jak view_more_button, ale jeśli mamy, powiedzmy, wiele okien dialogowych z przyciskiem widoku więcej, zacznę robić view_more_button_dialog1 i od tego momentu po prostu spirala w dół. Jakieś sugestie?


title: .Net buduj i wdrażaj rozwiązania dla aplikacji desktopowych i internetowych

text: Mój pracodawca wciąż jest w ciemnych wiekach, jeśli chodzi o tworzenie, testowanie, tworzenie i wdrażanie oprogramowania. Nasz cykl życia aplikacji od rozwoju do wdrożenia to: 1. Po zakończeniu rozwoju/zmian, budujemy pakiet msi przy użyciu konfiguracji i projektu wdrożeniowego Visual Studio. 2. Msi jest umieszczany w folderze sieciowym 3. Odpowiedniemu zespołowi przekazuje się instrukcje dotyczące wdrożenia pakietu. Wdrożenie aplikacji dla systemu Windows może składać się z msi, skryptów SQL i zmian konfiguracji aplikacji, a ich wdrażanie odbywa się ręcznie. Obecnie chcemy zautomatyzować proces kompilacji i wdrażania naszych aplikacji Windows i aplikacji internetowych. Większość naszych aplikacji nie posiada testów jednostkowych, które mogą być uruchamiane automatycznie, ale w przyszłości będziemy to robić. Jaki jest najlepszy sposób, aby to zrobić?


title: Gdzie obecnie rozproszone systemy kontroli wersji mogą znajdować się w cyklu szumu firmy Gartner?

text: **Edytuj** : Biorąc pod uwagę niedawne głosowanie w dół (+8/-6 w tym momencie), stało się dla mnie jasne, że cykl życia Gartnera jest tendencyjną metryką z perspektywy programisty. To jest coś, co jest częścią artykułu, który zamierzam przedstawić **kierownictwu**, a osoby zarządzające są częścią odbiorców Gartnera. Dając DVCS ekspozycję i entuzjazm (które „można” uznać za szum, **lub przynajmniej zaatakowane jako takie** ), zastanów się nad następującym pytaniem podczas czytania tego: **„jak mogę wykorzystać cykl szumu Gartnera, aby przekonać kierownictwo że DVCS są dla nas gotowe (lub wystarczająco gotowe) i że to nie jest tylko reklama”** Samo pytanie, czy DVCS to reklama, nie byłoby konstruktywne, cykl reklam firmy Gartner jest bardziej obiektywnym instrumentem niż samo pytanie (nawet jeśli instrument ten jest uważany za stronniczy). Jeśli znasz jakiś inny instrument, proszę, koniecznie wspomnij o nim. **Edytuj #2** : Zgadzam się, że cykl życia Gartnera nie jest dla każdej technologii, ale uważam, że mógł wygenerować wystarczająco dużo szumu, aby być uznanym przez niektórych za szum, więc może zasługuje na to, aby przynajmniej zostać oceniony/rozważony przez używanie tego instrumentu w celu udowodnienia/obalenia go w dowolnym stopniu. Jestem zwolennikiem DVCS, BTW. **Edytuj #3** : Dziękujemy za odpowiedzi. Bounty trafia do Caleba za odpowiedź na moje pytanie ze szczegółami i praktyczną radą. Przyjęta odpowiedź trafia do philosodad za dostarczenie kolejnego przydatnego narzędzia i odpowiedzi wykraczającej poza moje pytanie. * * * Prowadzę badania do białej księgi, którą piszę na rzecz przyjęcia DVCS w firmie i natknąłem się na koncepcję dowodu społecznego. Chcę udowodnić, że społecznym dowodem adopcji DVCS niekoniecznie jest kult cargo i prowadząc dalsze badania, natknąłem się na cykl szumu Gartnera, który opisuje dojrzałość technologii w 5 fazach. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/CnhKu.gif) Moje pytanie brzmi: co może być wskaźnikiem aktualnej lokalizacji rozproszonych systemów kontroli wersji (mam na myśli git, mercurial, bazar itd. w ogóle) w określonej fazie cyklu szumu?... innymi (mniej zawiłymi) słowami, **czy powiedziałbyś, że obecnie oczekiwania DVCS są a) początkowe, b) zawyżone, c) malejące (rozczarowanie) ), d)zwiększające (oświecenie) lub e)stabilizujące (dojrzałe) i (co ważniejsze) _dlaczego_?** Wiem, że to trudne pytanie i w grę wchodzi subiektywność, ale udzielę odpowiedzi (i tradycyjne ciasteczko) do najjaśniejszego argumentu/dowodu dla danej fazy.


title: Czego powinienem oczekiwać od przewodnika dla programistów?

text: Razem z przyjaciółmi mam ochotę stworzyć przewodnik dla programistów dla punktu sprzedaży typu open source napisany w Javie. Chodzi o to, że nigdy do nikogo nie napisałem, więc nie wiem dokładnie, co tam włożyć, aby spełnić standardy. Zastanawiam się nad wprowadzeniem UML i wykorzystaniem Java doc, ale nadal nie wiem, jakie są oczekiwania programistów wobec przewodnika programistów. Jak możemy powiedzieć, że przewodnik dewelopera jest naprawdę wart?


title: Dlaczego C++ pisać kompilator?

text: Zastanawiałem się, dlaczego C++ jest dobrym wyborem do napisania kompilatora. Oczywiście C jest również dobre do tego celu, ponieważ wiele kompilatorów jest napisanych w C lub C++, ale tym razem bardziej interesuje mnie C++. Jakieś dobre powody? Szukałem tego w Internecie, ale nie mogę znaleźć dobrych powodów.


title: Implementacja logiki „state-machine” dla metod wymaganych przez obiekt w C++

text: Co mam: 1 hipotetyczny obiekt/klasa + inne klasy i powiązane metody, które dają mi funkcjonalność. Czego chcę: 1. łączenie tego obiektu z metodami od 0 do N w czasie rzeczywistym na żądanie po wyzwoleniu zdarzenia 2. Każde zdarzenie jest powiązane z pojedynczą metodą lub klasą, więc pojedyncze zdarzenie niekoniecznie oznacza „połącz tę 1 metodę tylko”, ale może również oznaczać „połącz wszystkie metody z tej klasy lub grupy metod” 3. Unikanie list połączonych, ponieważ muszę przejrzeć całą listę, aby dowiedzieć się, jakie metody są połączone, ponieważ nie zapewnia mi to, że połączone metody są utrzymywane w określonej kolejności (powiedzmy w kolejności alfabetycznej według ich nazw lub klas), a także dlatego, że wiąże się to z ogromną ilością użycia wskaźników. Przykład: mam obiekt `Pracownik Jon`, Jon zdobywa wiedzę i zapomina rzeczy dość łatwo, więc jego umiejętności mogą się zmieniać w czasie, jestem odpowiedzialny za to, co Jon może dodać lub usunąć ze swojego CV, jak mogę wdrożyć ta logika?


title: Różnica między REST a CRUD

text: Nauczyłem się REST i jest to bardzo podobne do CRUD (z tego, co czytałem o CRUD). Wiem, że są różne i zastanawiam się, czy myślenie, że są podobne, oznacza, że ich nie rozumiem. Czy to, że REST jest „supersetem” CRUD? Czy wszystko, co robi CRUD i nie tylko?


title: Czy oferty pracy wyolbrzymiają ich wymagania?

text: Czuję się jak rozsądnie wykwalifikowany programista, ale wiele ofert pracy, na które natrafiam, sprawia, że czuję się inaczej. Prawie wszystkie z nich dzielą kwalifikacje na wymagania i pożądane, ale nawet część dotycząca wymagań może być zniechęcająca. Widziałem wiele wpisów, które mówią, że wymagają kilkuletniego (2 lub więcej) doświadczenia w stosunkowo niewielkiej technologii lub bibliotece, coś specyficznego dla ich firmy. Innym razem widzę, że język wymaga 5 lub nawet 7 lat doświadczenia. Niektóre z nich same w sobie byłyby w porządku, ale staje się śmieszne, gdy firma z małego miasteczka mówi, że potrzebujesz 3 lat w 2 językach, biegłości w programowaniu sieciowym, pisaniu skryptów, bazach danych i takich rzeczach, jak „doświadczenie z dużymi, wysoce redundantnymi systemami krytycznymi dla biznesu” wszystko w tym samym czasie. Czy naprawdę spodziewają się znaleźć kogoś, kto ma duże doświadczenie w pracy z dokładnie tym samym zestawem technologii, z którego korzystają? Trudno mi znaleźć pojedynczy post, w którym nie mam co najmniej 1 lub 2 dziur w moim zestawie umiejętności. W kółko słyszałem, że większość miejsc ceni twoją zdolność do szybkiego uczenia się i nauczy cię w pracy, ale dlaczego mówisz, że jest to wymagane? Czy po prostu próbują zniechęcić dno beczki (niepowodzenia FizzBuzz) do aplikowania?


title: Niezerowy status wyjścia dla czystego wyjścia

text: Czy dopuszczalne jest zwrócenie niezerowego kodu zakończenia, jeśli dany program działał poprawnie? Załóżmy na przykład, że mam prosty program, który (tylko) wykonuje następujące czynności: Program przyjmuje N argumentów. Zwraca kod wyjścia min(N, 255). Zauważ, że każdy N jest ważny dla programu. Bardziej realistyczny program może zwracać różne kody dla pomyślnie uruchomionych programów, które oznaczają różne rzeczy. Czy te programy powinny zamiast tego zapisywać te informacje w strumieniu, na przykład na standardowe wyjście?


title: Co oznacza „Teraz masz dwa problemy”?

text: Jest popularny cytat _Jamiego Zawińskiego_: > Niektórzy ludzie w obliczu problemu myślą: „Wiem, użyję wyrażeń > regularnych”. Teraz mają dwa problemy. Jak należy rozumieć ten cytat?


title: Jak ładować w zwinnym podejściu iteracyjnym?

text: Mam wątpliwości co do budżetowania podczas pracy w zwinnym podejściu iteracyjnym. Jeśli dobrze zrozumiałem, w agile na końcu każdej iteracji mamy produkt użytkowy, więc spełniliśmy część wymagań i wtedy jakaś część oprogramowania będzie już działała. Jak rozliczamy się za naszą pracę w tej metodologii? Czy pobieramy opłatę za iterację, tj. za spełnienie głównych wymagań, czy po prostu obciążamy klienta, gdy oprogramowanie jest rzeczywiście gotowe, a następnie otrzymujemy za wszystko na raz?


title: Czy ma znaczenie sposób adiustacji, czy tylko końcowa kalibracja?

text: Firma produkuje oprogramowanie (i sprzęt), który jest używany zarówno do wykonywania automatycznych _regulacji_ na elektronicznym sprzęcie testowym, jak i wykonywania _kalibracji_ tego samego sprzętu. Wyniki wzorcowań umieszczane są na świadectwie wzorcowania przesyłanym do klienta wraz z urządzeniem. Ten certyfikat kalibracji określa różne warunki kalibracji, takie jak sprzęt (modele/numery seryjne) i oprogramowanie (wersja) użyte do przeprowadzenia kalibracji, a także warunki środowiskowe itp. Przyjęcie założenia, że oprogramowanie używane do przedstawić dane (i wymienione w certyfikacie wzorcowania) użyte w certyfikacie wzorcowania muszą przejść przez proces „testu/dopuszczenia” i muszą być uważane za „dopuszczone” oprogramowanie – czy to oznacza również, że oprogramowanie używane do adiustacji również musi być wydany? Uważam, że metoda (oprogramowanie/warunki środowiskowe/itd.) zastosowana lub obecna podczas regulacji nie ma znaczenia, liczy się tylko końcowy wynik kalibracji, warunki _obecne podczas kalibracji_ oraz to, czy sprzęt był w zakresie Specyfikacja. Prawdziwe pytanie, na które mam nadzieję uzyskać odpowiedź: _Czy istnieje renomowane źródło (np. NIST lub podobne), które zajmuje się tym pytaniem?_ (Przeszukałem...) Myślenie jest takie, że podczas produkcji na dużą skalę, „niepublikowane " system może być używany do wykonywania regulacji, o ile zwolniony system jest używany do wykonywania kalibracji, ponieważ czas wymagany do wykonania regulacji jest znacznie dłuższy niż kalibracja. Ten niewydany system zostanie w końcu dopuszczony do użytku, ale obecnie tak nie jest. Proszę również nie zauważyć, że istnieje rozróżnienie między „regulacją” a „kalibracją”. Definicja ze słownika metrologii BIPM International, 2.39: Operacja, która w określonych warunkach, w pierwszym kroku, ustanawia związek między wartościami ilościowymi a niepewnościami pomiaru dostarczanymi przez normy pomiarowe i odpowiednimi wskazaniami z towarzyszącymi niepewnościami pomiaru (z skalibrowanym przyrządzie lub wtórnym > wzorcem) i, w drugim kroku, wykorzystuje te informacje do ustalenia > zależności dla uzyskania wyniku pomiaru ze wskazania. A następnie UWAGA 2 (podkreślenie w tekście oryginalnym): > Kalibracji nie należy mylić z **regulacją systemu pomiarowego** > , często błędnie nazywaną „samokalibracją”, ani z **weryfikacją** > kalibracji Jako uwaga na marginesie, nie jestem pewien, dlaczego zostało to przegłosowane. Dotyczy oprogramowania i jego użytkowania przed i po wydaniu do użytku. Uważam, że istnieje najlepsza praktyka, którą można zastosować i która (mam nadzieję) nie opiera się głównie na opiniach.


title: Czy łudzę się? Przejście analityka biznesowego na programistę

text: Obecna praca: Praca jako główny analityk biznesowy dla firmy z Wielkiej Czwórki, kierowanie zespołem programistów i testerów pracujących nad projektem zmiany platformy na dużą skalę (4 programiści onshore, 4 programiści offshore, kilku testerów onshore/offshore). Pracuj również w podobnym charakterze przy innych mniejszych projektach. Zakres mojej roli: zbieranie/pisanie wymagań, tworzenie specyfikacji funkcjonalnych, projektowanie interfejsu użytkownika (zasadniczo mapowanie wszystkich aspektów front-endowych systemu), ścisła współpraca z twórcami w celu komunikowania/klarowania wymagań i wymyślania rozwiązań, gdy napotykamy przeszkody , pisanie przypadków testowych (i wykonywanie większości testów), praca z kierownictwem wyższego szczebla i kluczowymi interesariuszami, zarządzanie beta testerami, tworzenie podręczników użytkownika i prowadzenie sesji szkoleniowych, zapewnienie kluczowego wsparcia technicznego. Piszę też sporo makr w Excelu używając VBA (kilka moich makr jest teraz używanych w całej firmie, więc używa ich może około 1000 osób) i używam SQL na co dzień, zarówno w kompaktowych plikach SQL, jak i w programie opiera się na naszych danych SQL Server i dowolnych bazach danych Access, które tworzę. Deweloperzy czują, że jestem całkiem dobry w tej roli, ponieważ bardzo dobrze rozumiem programowanie, nieodłączne ograniczenia systemu, strukturę baz danych itp., więc łatwiej jest mi komunikować się z pomysłami i wysuwać sugestie, gdy mamy problemy. To, co mnie naprawdę interesuje, to tworzenie oprogramowania. Robię sporo programowania w VBA i od jakiegoś czasu chciałem nauczyć się C# (zespół programistów używa C# - od czasu do czasu recenzuję kod dla siebie, ale nie mam żadnego praktycznego doświadczenia z jego używaniem). Interesuje mnie nie tylko proces biznesowy, ale także techniczna strona rzeczy, więc tradycyjna rola BA nie rozbudza mojego apetytu na rzeczy, które chcę robić. W tej chwili mam kilka małych projektów, które powierzyli mi menedżerowie i szukam nowych sposobów ich realizacji (takich jak tworzenie niestandardowych aplikacji Access), więc jest trochę tu i tam, aby mnie zainteresować. Moje pytanie brzmi: to, co chciałbym zrobić, to tworzyć niestandardowe aplikacje Excel lub Access dla małych firm jako niezależny biznes (pracując jako jednoosobowy sklep; być może mając okazjonalnego kontrahenta w zależności od złożoności projektu). To oczywiście zaczęłoby się jako przedsięwzięcie w niepełnym wymiarze godzin, podczas gdy ja mam pracę dzienną, ale ostatecznie stałoby się pracą na pełny etat. Czy łudzę się myśleniem, że mogę przejść od BA/niepełnoetatowego programisty VBA do pracy w pełnym wymiarze czasu pracy jako freelancer (gdzie zaczynałbym od pisania niestandardowych aplikacji Excel/Access w VBA)? A może tego typu rzeczy zwykle nie podejmuje się, dopóki ktoś nie zdobędzie lat doświadczenia w programowaniu w pełnym wymiarze godzin? A czy istnieje w ogóle rynek na tego typu aplikacje wśród małych firm (a może średnich)?


title: W jakiej kolejności są pobierane wiersze bez klauzuli ORDER BY?

text: Jeden programista testuje i porównuje tę samą aplikację, która używa tej samej struktury bazy danych i tych samych danych, tylko w dwóch oddzielnych bazach danych, jednej z Oracle 8 i jednej z Oracle 9. Aplikacja uruchamia zapytanie z **no** `ORDER Klauzula BY. **Udaje, że zapytanie typu ORDER-BY-less powinno zwrócić wiersze w tej samej kolejności w obu bazach danych.** Mówię mu, że nie ma gwarancji tej samej kolejności wierszy **chyba że wyraźnie podasz klauzulę ORDER BY.** baza danych ma te same indeksy i klucze. Ale plan wyjaśniania pokazuje, że w jednej z baz danych silnik używa klucza lub jednej z połączonych tabel, podczas gdy w drugiej bazie danych używa innego. Insynuuje, że dwa środowiska DB nie są równe, ponieważ mają różne statystyki, różne silniki rdbms itp., ale nie dlatego, że nie udało mi się zreplikować każdego indeksu oryginalnej bazy danych. Mówię mu, że musi wyraźnie podać klauzulę „ORDER BY”, jeśli zamówienie jest naprawdę takie ważne. ## Pytanie Mogę mu to lepiej wyjaśnić: **W jakiej kolejności zapytanie pobiera wiersze, gdy nie piszesz jawnie klauzuli ORDER BY i dlaczego to zapytanie nie zwraca wierszy w tej samej kolejności?**


title: Debuger do tworzenia we/wy plików?

text: OK, tytuł pytania może być nieco zagadkowy. Ale trafnie opisuje to, czego szukam: Myślę, że każdy doświadczony programista przechodził przez to wiele razy: dostajesz specyfikację formatu pliku binarnego, implementujesz do niego czytnik i… nic nie działa tak, jak oczekiwano. Więc uruchamiasz swój kod w debuggerze, wykonujesz kod linia po linii, każde pole nagłówka jest odczytywane pozornie poprawnie, ale jeśli chodzi o dane zbiorcze, offset i indeksy już nie pasują. To, co naprawdę pomogłoby w tej sytuacji, to przeglądarka plików binarnych, która pokazuje postęp wskaźnika pliku podczas przechodzenia przez kod, a najlepiej również podświetla wszystkie mapy pamięci. Wtedy można było zobaczyć kontekst bieżących operacji we/wy, zwłaszcza te cholerne błędy „poza jednym”, które są jeszcze bardziej irytujące podczas czytania pliku. Implementacja takiego debuggera nie powinna być zbyt trudna. ślady na deskryptorach/obsługach plików procesu i wyzwalacze funkcji we/wy, aby zaktualizować wyświetlacz. Tylko: nie wiem, czy istnieje taki debugger. Czy po prostu brakuje mi wiedzy o istnieniu takiego narzędzia, czy naprawdę nie ma czegoś takiego?


title: Jak przed instalacją sprawdzić, czy wszystkie pliki są nienaruszone?

text: Od dłuższego czasu pracuję nad swoim systemem CMS (na platformie PHP). Główny program jest gotowy i aktualnie rozwijam część Instalatora. Sama instalacja będzie dość prosta: 1. Prześlij wszystkie pliki 2. Sprawdź, czy katalog "content/" ma poprawne uprawnienia 3. Sprawdź, czy WSZYSTKIE pliki są nienaruszone i nie zmodyfikowane [To jest temat tego pytania] 4. Wstaw konfigurację dane i pierwsze ustawienia 5. Uruchom instalację (Wygeneruj wszystkie tabele bazy danych i wstaw przykładowe dane itp.) Teraz znak zapytania znajduje się w kroku 3. Jak mogę zweryfikować WSZYSTKIE pliki? Sama weryfikacja powinna porównać wszystkie pliki katalogów głównych CMS z listą ze zdalnej lokalizacji. Lista powinna zawierać nazwę pliku, rozmiar i typ pliku. W ten sposób użytkownik może sprawdzić, czy nie ma niepotrzebnych lub uszkodzonych plików, które mogłyby wskazywać na naruszenie oprogramowania. Widziałem, jak robią to niektórzy instalatorzy oprogramowania, ale nie mogę ich teraz znaleźć, ponieważ nie mam pojęcia, jaka jest najbardziej optymalna metoda. Oczywiście zawsze istnieje prosta sztuczka typu „tablica”, ale na pewno musi istnieć lepsza i szybsza metoda?!


title: Korzystanie z dynamicznego LINQ w celu uzyskania filtra dla mojego internetowego interfejsu API

text: Rozważamy użycie przykładu Dynamic.CS linq zawartego w katalogu „Samples” Visual Studio 2008 dla naszego projektu WebAPI, aby umożliwić klientom zapytanie o nasze dane. Interfejs mógłby wyglądać mniej więcej tak (oprócz normalnych metod GET): public HttpResponseMessage List(string filter = null); Plan jest taki, aby użyć biblioteki dynamicznej do przeanalizowania zmiennej „filtr”, a następnie wykonać zapytanie w bazie danych. Masz jakieś przemyślenia, czy to dobry pomysł? Czy to problem bezpieczeństwa?


title: Dlaczego preferuje się C# (ASP.NET MVC) lub Java (JSP) zamiast PHP dla aplikacji/projektów internetowych

text: Zastanawiam się, dlaczego ktoś (rozważ to nie tylko pojedynczy programista, ale firma) preferowałby C# lub Javę do aplikacji internetowych? Jakie są ich rozważania dotyczące tego pytania. Chodzi mi o to, że firma ma zlecenie na wykonanie strony internetowej dla klienta, gry online lub portalu internetowego, w jaki sposób kierownictwo projektu lub/i architekt oprogramowania (i główny zespół) doszli do wniosku - " zrobimy to na przykład w ASP.NET MVC? Wiem, że to specyficzne, ale jakie są najczęstsze powody? Zwłaszcza dlaczego zamiast PHP? Ponieważ PHP jest przeznaczony wyłącznie do sieci. Może jeśli chodzi o pojedynczą stronę internetową, jest wiele CMS-ów, które klient zna, ale powiedzmy, że PHP ma również wiele CMS-ów, a większość z tych ASP.NET jest tak spaghetti jak wordpress. Poza tym, jak zdaję sobie sprawę, powszechnym serwerem sieciowym jest serwer sieciowy Windows, w czasach, gdy zaczynałem od komputerów, wszyscy mówili, że administracja w systemie Windows jest gorsza niż na platformach opartych na uniksie. Naprawdę nie widzę sensu. Dla mnie to jak marnowanie zasobów, myślę, że będziesz potrzebował dwukrotnie lepszej maszyny działającej w systemie Windows, aby uzyskać te same osiągnięcia. C# dla komputerów stacjonarnych — kciuki w górę, ale dla sieci — dlaczego? To samo dla JSP. Jego wspólny serwer jest wieloplatformowy, więc nie ma potrzeby korzystania z systemu Windows, ale czy nie jest to również marnowanie zasobów? A pytanie jest takie samo jak w akapicie – w jaki sposób firma zdecydowałaby się na wykorzystanie JSP. Pytanie zostało podniesione, ponieważ obecnie w ASP.NET pojawia się wiele witryn. Szczerze mówiąc, widziałem zbyt mało witryn w JSP. PS: Przepraszam, nie znalazłem odpowiedniego tagu, więc oznaczyłem języki i związane z tym rzeczy


title: Jak uniknąć błędów i niczego nie przegapić

text: Mam problem, który jest poważniejszy, niż mogłoby się wydawać. Programuję od około trzech lat, dużo się nauczyłem i poprawiłem, łatwo czytam kod innym, rozumiem problemy i przekształcam je w kod, łatwo dostosowuję się do nowych technologii i uwielbiam się uczyć, jak to wszystko Pracuje . Wszystko w porządku. Problem, jaki mam, polega na tym, że często zapominam drobne szczegóły, które potem okazują się krytyczne. Na przykład wczoraj, po zmianie zapytania bazy danych, aby pobrać jakieś dane filtrowane według dwudziestu pól, zapomniałem wczytać wszystkich danych (zapytanie zwróciło tylko dane klucza głównego całego obiektu). Innym razem są drobiazgi, które nie sprawiają, że cały proces się nie powiedzie, ale mimo to boję się ponieść porażkę w czymś poważnym, że moi przełożeni zmęczą się moimi błędami itp. . Chciałbym wiedzieć, jak mogę zaplanować pracę, aby niczego nie zapomnieć lub przynajmniej szybko zdać sobie sprawę, że czegoś zapomniałem lub coś przeoczyłem ...


title: Dlaczego programowanie oparte na funkcjach jest uważane za metodologię Agile?

text: W kilku miejscach Feature Driven Development (FDD) nazywany jest metodyką Agile – m.in. wpis Wikipedii na temat FDD. Jednak generalnie, aby uznać za FDD, wydaje się, że muszą być spełnione następujące wymagania: * Kolorowy UML **musi być użyty** (ale dokumentacja nie jest konieczna); * Zamiast programowania w parach zespół jest podzielony według funkcji oprogramowania; * **refaktoryzacja jest odradzana** lub przynajmniej nie jest to zadanie o wyraźnym zakresie; * **testy jednostkowe są uznaniowe** , mogą zdecydować liderzy zespołów; * przepływ pracy musi przejść przez pięć faz FDD; Z drugiej strony wydaje mi się, że Agile to * UML to **opcjonalne** narzędzie * Testy są dokumentacją * Testy są **obowiązkowe** * **refaktoryzacja** jest konsekwencją prośby o zmianę przez klienta i to **nie jest zniechęcone**. Czy mylę się z moim zrozumieniem obu koncepcji?


title: Ćwicz przykłady

text: Mam licencjat z CS, ale generalnie nazywam siebie początkującym w programowaniu. Z naciskiem na naukę kodowania i tworzenia aplikacji na Androida. Przeszedłem przez ten wspólny (http://developer.android.com/training) samouczek. Przeczytaj do końca i pod koniec, aby uzyskać ogólne zrozumienie. Zrobili swój przykład Hello world. Następnym, którego chcę, jest zestaw kodów, przez który mogę przejść, ćwiczyć z nimi, aby rozwinąć moje umiejętności na wyższy poziom. Naprawdę chcę tego tak bardzo i chcę tworzyć aplikacje jako przewoźnik. Doceniam każdą udzieloną radę.


title: Konwersja pustego ciągu na liczbę

text: Jeśli projektujesz funkcję, która powinna konwertować łańcuch na liczbę całkowitą, jak skonwertowałbyś pusty łańcuch? Pytanie dotyczy tylko tej jednej konkretnej wartości wejściowej (pusty ciąg). Pomiędzy wyrzuceniem wyjątku `ExcStringIsEmpty` a konwersją na opcje `0` wolę to pierwsze. Wydaje mi się to bardziej logiczne. Ponieważ, gdy wykonujesz przeciwną konwersję liczby całkowitej `0`, prawie nie przekonwertujesz jej na pusty łańcuch, ale zamiast tego na łańcuch `0`.


title: Jaki jest dobry sposób na udostępnianie wewnętrznych pomocników?

text: Wszystkie moje projekty mają tę samą bibliotekę podstawową, którą budowałem od dłuższego czasu. Zawiera narzędzia i statyczne klasy pomocnicze, które pomagają im tam, gdzie .NET nie oferuje dokładnie tego, czego chcę. Pierwotnie wszystkie pomocniki zostały napisane głównie do celów wewnętrznych i tak musi pozostać, ale czasami okazują się bardzo przydatne dla innych zgromadzeń. Teraz upublicznienie ich w niezawodny sposób jest bardziej skomplikowane, niż mogłoby się wydawać, na przykład wszystkie metody, które zakładają typy dopuszczające wartość null, muszą teraz zawierać sprawdzanie argumentów, bez obciążania wewnętrznych narzędzi kosztami takiego działania. Cena może być znikoma, ale daleko jej do słuszności. Podczas refaktoryzacji wielokrotnie zmieniałem ten przypadek i do tej pory wymyśliłem następujące rozwiązania: 1. **Miej wewnętrzną i publiczną klasę dla każdego helpera** Klasa wewnętrzna zawiera rzeczywisty kod, podczas gdy klasa public służy jako punkt dostępowy, który sprawdza argumenty. Wady: * Klasa wewnętrzna wymaga prefiksu, aby uniknąć niejednoznaczności (najlepsza prezentacja powinna być zarezerwowana dla typów publicznych) * Nie można rozróżniać metod, które nie wymagają sprawdzania argumentów 2. ** Jedna klasa zawiera obie wewnętrzne i publicznych członków (jak konwencjonalnie implementowane w .NET framework).** Na początku może to brzmieć jak najlepsze możliwe rozwiązanie, ale ma te same pierwsze nieprzyjemne wady co rozwiązanie 1. Wady: * Metody wewnętrzne wymagają prefiksu, aby uniknąć niejasności 3. **Miej wewnętrzną klasę, która jest implementowana przez klasę publiczną, która nadpisuje wszystkie składowe, które wymagają sprawdzania argumentów.** Wady: * Jest niestatyczna, wymagana jest co najmniej jedna instancja. To naprawdę nie pasuje do idei klasy pomocniczej, ponieważ generalnie składa się z niezależnych fragmentów kodu, nie powinno wymagać tworzenia instancji. * Metody niestatyczne są również nieznacznie wolniejsze, co również nie uzasadnia tej opcji. Jest jedna ogólna i nieunikniona konsekwencja, dużo konserwacji jest konieczne, ponieważ każdy członek wewnętrzny będzie wymagał publicznego odpowiednika. Uwaga dotycząca rozwiązania 1: Pierwszej konsekwencji można uniknąć, umieszczając obie klasy w różnych przestrzeniach nazw, na przykład możesz mieć prawdziwego pomocnika w głównej przestrzeni nazw, a pomocnika publicznego w przestrzeni nazw o nazwie „Pomocnicy”.


title: Wyzwania programistyczne dla początkujących

text: > **Możliwy duplikat:** > Jak mogę nauczyć inteligentną osobę bez doświadczenia w programowaniu, jak > programować? Jestem w nietypowej sytuacji. Mój kolega chce „uczyć się programowania”, a jako programista dostałem zadanie nauczenia go „programowania”. Osobiście jestem samoukiem i nigdy wcześniej nie uczyłem nikogo innego, więc nie jestem pewien, od czego zacząć. Poza tym wciąż muszę się wiele nauczyć (chociaż nie wszyscy)! Piszę w C#, ale czy C# jest dobrym językiem dla początkującego? Myślałem, że Visual Basic .Net byłby lepszym punktem wyjścia, więc rozważałem skonfigurowanie go do Visual Studio Express 2010, nauczenie go kilku podstaw (zmienne, funkcje, klasy itp.), a następnie znalezienie kilku wyzwań programistycznych i poproszenie go o pracę przez te. Czy ktoś ma dobre źródło tego typu wyzwań? Czy to też dobra strategia? Na koniec, jakie masz doświadczenia związane z uczeniem programowania innych osób i jakich rad byś udzielił?


title: Jaki jest najlepszy sposób na nauczanie początkujących?

text: > **Możliwy duplikat:** > Jak mogę nauczyć inteligentną osobę bez doświadczenia w programowaniu, jak > programować? Niedawno starszy przyjaciel pracujący w urzędzie miasta zapytał mnie, czy byłbym skłonny prowadzić letni kurs programowania skierowany do uczniów w wieku gimnazjalnym i licealnym z minimalnym doświadczeniem w programowaniu lub bez niego. Jestem w ostatniej klasie liceum, ale programuję od najmłodszych lat i pracowałam lokalnie z moim miastem nad różnymi projektami wymagającymi programowania. Po pierwsze, nie chcę uczyć czegoś, czego można łatwo nauczyć się w dowolnym miejscu online. Gdybym spędził cały dzień w ciągu dwóch tygodni ucząc tylko podstawowego HTML z kawałkami CSS, czułbym się, jakbym je oszukiwał (ponieważ zajęcia są zaplanowane na 30,00 USD na osobę, chociaż nie dostanę żadnych pieniędzy ). Co więcej, w rzeczywistości są już prowadzone zajęcia z projektowania stron internetowych i odniosłem wrażenie, że nie powinienem koncentrować się na tworzeniu stron internetowych. Gdyby to wszystko zależało ode mnie (a tak nie jest, muszę stworzyć plan i przedstawić go przed radą ds. programów letnich do zatwierdzenia), pierwszy tydzień spędziłbym ucząc Haskella, a drugi używając go do rozwiązywania matematyki problemy (jak te widziane w Project Euler). Niestety, prawdopodobnie jestem jedyną osobą, która byłaby zainteresowana podjęciem takich zajęć i prawdopodobnie powinienem skupić się bardziej na programowaniu niż na matematyce. Widziałem w tym wątku, że Java nie była zbyt lubiana, i widziałem w praktycznie każdym innym wątku, że ludzie kochają dialekty Lisp (zwłaszcza Scheme, i podejrzewam, że jest to nieco związane z miłością do książek takich jak SICP). Mam problem z tym, aby kurs był interesujący i wciągający, a jednocześnie edukacyjny. Niekoniecznie muszę im „sprzedawać” programy, ponieważ powinni być w pewnym stopniu zmotywowanymi kandydatami, ale też nie chcę ich zanudzać i „rujnować” im programowania. Co powinienem zrobić? Czego powinienem uczyć?


title: Skąd mam wiedzieć, o ile poprosić o pensję?

text: Zmierzam do mojej pierwszej pracy (tzn. zatrudniają mnie na pełne stanowisko) w rozwoju oprogramowania i jestem dość zdenerwowany tym, jak przebiega cała ta sprawa z negocjacjami wynagrodzenia. Glassdoor.com mówi, że moja pozycja dla mojego (braku) doświadczenia oferuje coś absurdalnie wysokie, jak 85 tys. Salary.com podaje, że programiści bez doświadczenia w mojej lokalizacji zarabiają około 65 tys. Z niektórych badań wiem, że nie powinienem podawać liczby, zanim to zrobią. Ale powiedzmy, że oferują mi _Xk_. Z czym mam się skontrować? Czy mówię rzeczy typu: „Z moich badań wynika, że osoby na podobnym poziomie doświadczenia na tym stanowisku w tej firmie zarabiają znacznie więcej...” itp.?


title: Ponowna kompilacja projektu Java podczas jego działania

text: Mam program w języku Java, którego uruchomienie zajmuje około godziny. Gdy jest uruchomiony, jeśli zmienię kod źródłowy i ponownie go skompiluję, czy wpłynie to na powyższe uruchomienie?


title: Gdzie mam zacząć to budować?

text: Zajmuję się nieruchomościami, a częścią mojej pracy jest codzienne skanowanie bazy danych w poszukiwaniu nieruchomości dla potencjalnego nabywcy inwestora. Jestem prawie pewien, że można stworzyć program, który przeskanuje tę bazę danych dla mnie i powiadomi mnie, gdy się pojawi, że powinienem zajrzeć. Decyzję o tym, co kupują, podejmuję na podstawie kilku danych. Rzeczy takie jak powierzchnia, wanny w łóżkach itp. Zasadniczo porównuję potencjalną zagrożoną nieruchomość z nieruchomościami, które spełniają kryteria, aby określić, jak blisko są, a następnie wymyślam prawdopodobną wartość po naprawie na podstawie innych sprzedanych domów w pobliżu. Teoretyzuję, że mój program powinien być w stanie przeskanować bazę danych, zebrać wszystkie dodane nowe właściwości. Weź każdą nieruchomość. określić, które inne sprzedane nieruchomości są najbardziej porównywalne i wymyślić prawdopodobne po ARV. Następnie porównaj to ARV z ceną katalogową, jeśli mieści się w określonym zakresie, zaalarmuj mnie. Do tej pory poszedłem i potwierdziłem, że mogę pobrać kanał dla tych danych. Myślę, że będzie w formacie xml, ale nie będę znał struktury danych, dopóki nie złożę wniosku o licencję na paszę. Mój problem polega na tym, że nie mam pojęcia, od czego zacząć. Od około 10 lat majsterkowałem przy niewielkim budowaniu stron internetowych i bardzo podstawowym html i php, ale nigdy tak naprawdę nie zostałem w tym mistrzem. Czy to za dużo dla nowicjusza do zbudowania? powinienem zapłacić? czy wyssać to i nauczyć się?


title: Jak mogę poprawić swoją produktywność w Linuksie?

text: Głównie używam systemu Windows, ale znam się na systemie Linux, ale nie jestem tak wydajny, jak w systemie Windows. Poszukuję wskazówek dotyczących „przetrwania”, na czym powinienem się skupić, aby móc poprawić swoją produktywność w Linuksie (głównie będąc bardziej wydajnym z interfejsem wiersza poleceń).


title: Ile wywołań „malloc” to za dużo? Jeśli w ogóle?

text: Wdrażam system w C, zaimplementowany częściowo jako biblioteka. Biblioteka sama zajmuje się większością zarządzania pamięcią, a warstwa aplikacji musi po prostu wywoływać funkcje `*_destroy` na obiektach najwyższego poziomu. Podczas sprawdzania wycieków pamięci zauważyłem, że liczba wywołań `malloc` wydaje się dość duża w stosunku do rozmiaru kodu aplikacji. Wydajność kodu wydaje się być dobra, ale już wcześniej byłem ugryziony przez "wystarczająco szybki" kod, gdy próbowałem skalować. Liczba alokacji w przybliżeniu odpowiada liczbie utworzonych obiektów, w tym obiektów podrzędnych najwyższego poziomu. Tak więc utworzenie pojedynczego obiektu najwyższego poziomu może wywołać 7 wywołań malloc, ponieważ potrzebuje jednego dla siebie, a następnie pary dla swoich dzieci, które mogą również potrzebować kilku dzieci. Niestety, jestem stosunkowo nowy w programowaniu w C, chociaż ogólnie mam doświadczenie jako programista i nie mam pojęcia, czy te liczby są normalne, czy nie. Więc jaka byłaby dobra zasada dotycząca liczby alokacji? Wiem, że generalnie mniej byłoby lepiej, ale zmiana kodu w celu umożliwienia wprowadzenia złożoności, której nie chcę dodawać bez znacznego wzrostu wydajności. Ponadto, czy powinienem się martwić o wydajność „malloc/free”, czy jest to sfera wydajności w czasie rzeczywistym (gry itp.)?


title: Dobry przykład tablicy o zmiennej długości C

text: To pytanie spotkało się z chłodnym przyjęciem w SO, więc postanowiłem je tam usunąć i spróbować tutaj. Jeśli uważasz, że to również nie pasuje tutaj, zostaw przynajmniej komentarz na temat sugestii, jak znaleźć przykład, którego szukam... ** Czy możesz podać _przykład_ , w którym korzystanie z VLA C99 daje realną przewagę nad czymś takim jak obecny standardowe mechanizmy sterty wykorzystujące mechanizmy C++ RAII?** Przykład, za którym podążam, powinien: 1. Osiągnąć łatwo mierzalną (może 10%) przewagę wydajności nad używaniem sterty. 2. Brak dobrego obejścia, które w ogóle nie wymagałoby całej tablicy. 3. Właściwie skorzystaj z używania dynamicznego rozmiaru zamiast stałego maksymalnego rozmiaru. 4. W normalnym scenariuszu użytkowania nie może spowodować przepełnienia stosu. 5. Bądź na tyle silny, aby skusić programistę potrzebującego wydajności do włączenia pliku źródłowego C99 do projektu C++. * * * Doprecyzowanie kontekstu: mam na myśli VLA w rozumieniu C99, a nie zawarte w standardowym C++: `int array[n]` gdzie `n` jest zmienną. Idę o przykład użycia, w którym przebija on alternatywy oferowane przez inne standardy (C90, C++11): int array[MAXSIZE]; // Tablica stosu C ze stałą czasu kompilacji size int *array = calloc(n, sizeof int); // Tablica sterty C z ręcznie wolną int *array = new int[n]; // C++ tablica sterty z ręcznym usuwaniem std::unique_ptr<int[]> array(new int[n]); // C++ tablica sterty z RAII std::vector<int> array(n); // Kontener STL ze wstępnie przydzielonym rozmiarem * * * Kilka pomysłów: * Funkcje przyjmujące varargs, co naturalnie ogranicza liczbę elementów do czegoś sensownego, ale nie ma żadnego użytecznego górnego limitu na poziomie API. * Funkcje rekurencyjne, w których zmarnowany stos jest niepożądany * Wiele małych alokacji i wydań, w których obciążenie sterty byłoby złe. * Obsługa tablic wielowymiarowych (takich jak macierze o dowolnej wielkości), w których wydajność jest krytyczna, a małe funkcje mają być często inline. * Z komentarza: współbieżny algorytm, w którym alokacja sterty ma narzut synchronizacji. Wikipedia ma przykład, który nie spełnia moich kryteriów, ponieważ praktyczna różnica w używaniu sterty wydaje się nieistotna, przynajmniej bez kontekstu. Jest to również nieidealne, ponieważ bez większego kontekstu wydaje się, że liczba elementów może bardzo dobrze spowodować przepełnienie stosu. Uwaga: Konkretnie szukam przykładowego kodu lub sugestii algorytmu, który mógłby na tym skorzystać, abym sam zaimplementował przykład.


title: Przygotowanie do wydania kodu jako open-source

text: Opracowałem w pełni funkcjonalne narzędzie, którym chciałbym nie tylko podzielić się z wszystkimi zainteresowanymi, ale także uzyskać wsparcie społeczności. To narzędzie jest wieloplatformowe, napisane w C++ z Qt, kod jest dobrze skomentowany, ale wciąż brakuje mi dokumentacji. Jest też kilka drobnych problemów i ulepszeń, które należy wprowadzić, zanim będę mógł nazwać to stabilną, ostateczną wersją. Jakie są pierwsze kroki, które muszę podjąć, aby opublikować kod jako open source i przyciągnąć ludzi zainteresowanych współpracą? To moja pierwsza poważna próba wydania kodu open source i naprawdę nie wiem od czego zacząć. Czy powinienem po prostu wepchnąć to na Github, zmontować małą wiki i modlić się o najlepsze?


title: Jak radzić sobie ze wskazówkami od dziecka do rodzica?

text: Mam klasę, która reprezentuje plik w określonym formacie binarnym na dysku (nadrzędny w tytule) i inną klasę, która reprezentuje obiekt wewnątrz tego pliku (dziecko). Kiedy obiekt się zmienia, czasami musi zostać przeniesiony do nowej pozycji w pliku, a klasa pliku musi zostać powiadomiona o tej nowej pozycji. Aby to zrobić, dodałem do obiektu pole `weak_ptr`, które wskazuje na plik. Poza tym oznacza to, że musi istnieć `shared_ptr` dla pliku, więc używam do tego `static` metody fabrycznej zamiast publicznego konstruktora. A obiekt nie może być teraz zainicjowany w konstruktorze, więc używam do tego `unique_ptr`. W kodzie wygląda to tak: class File; class Object { private: std::weak_ptr<Plik> plik; public: Object(std::weak_ptr<Plik> plik) : plik(plik) {} void zmodyfikuj(); }; class File { private: std::unique_ptr<Object> obiekt; std::shared_ptr<Plik> własny; File() {} public: void setObjectPosition(std::uint64_t newPosition); statyczny std::shared_ptr<Plik> create(); }; void Object::modify() { std::uint64_t newPosition = …; file.lock()->setObjectPosition(nowaPozycja); } void File::setObjectPosition(std::uint64_t objectPosition) { // przechowuj objectPosition } std::shared_ptr<File> File::create() { auto file = std::shared_ptr<File>(new File()); plik->ja = plik; plik->obiekt = std::unique_ptr<Obiekt>(nowy obiekt(plik)); plik zwrotny; } Czy to jest właściwe podejście do tego? A może istnieje lepsze/bardziej idiomatyczne rozwiązanie? Czuję, że za dużo używam `*_ptr`, ale nie mogę wymyślić nic lepszego.


title: W jaki sposób bootcampy tworzenia stron internetowych mogą spełnić swoją obietnicę?

text: Natknąłem się na koncepcję bootcampów związanych z tworzeniem stron internetowych, te 9-10 tygodniowe intensywne kursy awaryjne mają na celu nauczenie początkujących programistów stron internetowych i pomagają im uzyskać 80 000 początkowych prac zarobkowych. Wielu z was mogło o nich słyszeć. Czy to, co obiecują bootcampy, jest możliwe? Czy możliwe jest nauczenie technologii internetowych, takich jak Ruby on Rails, HTML5, CSS i JavaScript od podstaw w tak krótkim czasie? A dla osób bez przygotowania technicznego?


title: Python — kiedy klasa powinna mieć-a, a nie być-a?

text: Ma to związek z „Extends is evil” a OCP? ale oddzielne, ponieważ idea „implementacji interfejsu” nie istnieje w Pythonie. Piszę klasę, aby pobrać niektóre dane ze strony internetowej. Będzie musiał przechowywać plik cookie w celu uwierzytelnienia, więc użyję obiektu `requests.Session` w jakiejś formie. Nigdy nie jestem pewien, jak do tego podejść – jaki jest właściwy wybór? class FooFetcher(requests.Session): def __init__(self): super.__init__() lub class FooFetcher(object): def __init__(self): self.session = request.Session() ? Ten pierwszy wydaje się kończyć na tym, że `FooFetcher` ma o wiele więcej publicznych metod niż to konieczne. Wygląda na to, że to ostatnie może być niepotrzebnie zawiłe, ponieważ prawie każda metoda `FooFetcher` będzie obejmować wywołanie metody tego obiektu `Session`, a także może niektóre znalezione parsowanie JSON.


title: Czy repozytorium powinno zostać przekazane do interfejsu użytkownika?

text: W Dependency Injection Marka Seemana w .NET wstrzykuje repozytorium do swojej warstwy interfejsu użytkownika. Wierzę, że robi to po to, aby móc przechowywać wszystko w konfiguracji interfejsu użytkownika, jednak wydaje mi się, że jest to zły projekt. Czy nie byłoby lepiej przekazać odwołanie do usługi do interfejsu użytkownika? Co ma powstrzymać przyszłego programistę od bezpośredniego korzystania z repozytorium? Mówi również, że buduje to jako architekturę n-warstwową. Ale teraz połączył warstwę danych z warstwą interfejsu użytkownika (bez względu na to, czy DI jest używane, czy nie). Co jeśli chce hostować wszystkie trzy warstwy na różnych samodzielnych serwerach. Chociaż jego podejście MOŻE zadziałać, wydaje mi się to po prostu niewłaściwe. Chciałem więc zobaczyć, co ma do powiedzenia cała społeczność. Czy mam rację w swoich myślach, czy czegoś mi brakuje? Uproszczona wersja kodu: public class UI { IRepository _repo; publiczny interfejs użytkownika (repozytorium IRepozytorium) { _repo = repozytorium; } publiczne rzeczy UIMethod() { var svc = new Service(_repo); return svc.GetStuff(); } } public class Service { IRepository _repo; Usługa publiczna (repozytorium IRepozytorium) { _repo = repozytorium; } rzeczy publiczne GetStuff() { var persistenceStuff = _repo.GetStuff(); //Zrób tutaj jakąś logikę biznesową return persistenceStuff.ToServiceStuff(); } }


title: Różnice między TypeScript a Dart

text: Microsoft niedawno zaprezentował Typescript, nowy język programowania podobny do JavaScript. Jakiś czas temu usłyszałem o Dart, nowym języku programowania stworzonym przez Google do rozwiązywania problemów związanych z Javascriptem, takich jak wydajność, skalowalność itp. Przeznaczenie obu nowych języków wydaje mi się takie samo.. Co o tym myślisz? Czy cele języków są takie same? Jakie są między nimi prawdziwe różnice?


title: Czym jest piękny kod w C++ i dlaczego większość programistów tak bardzo się tym przejmuje?

text: Ponieważ większość projektów korzysta z interfejsu API C++, zajmują się ograniczeniami interfejsu API i ograniczeniami samego projektu. Jestem początkującym programistą, w ogóle nie lubię używać OOP, ponieważ nikt nie zdołał mi jasno wyjaśnić DLACZEGO tak ważne jest ograniczanie się do prywatnego zakresu, aby uniemożliwić innym programistom złamanie pewnego rodzaju spójności organizacji danych. Nadal mogę być w porządku z OOP, ponieważ nadal pozwala na tworzenie świetnych rzeczy, takich jak Qt i Ogre3D, ale to tylko API, a nie aplikacje, a te kody muszą być doskonałe, aby nikt nie mógł krytykować pracy. Nie rozumiem, dlaczego większość programistów, skoro tworzą aplikacje, a nie interfejsy API, chce tworzyć doskonały kod, tak jak projektuje jakiś genialny kawałek kodu, i marnuje na to czas.


title: Świetne firmy korzystające z FPA jako kosztorysu

text: Czy ktoś wie, czy wielkie przedsiębiorstwa (Google, Oracle, SAP) używają Functional Point Analysis do szacowania pracochłonności tworzenia oprogramowania?


title: Jak napisać bardzo prosty kompilator

text: Zaawansowane kompilatory, takie jak `gcc`, kompilują kody do plików odczytywalnych maszynowo zgodnie z językiem, w którym kod został napisany (np. C, C++ itp.). W rzeczywistości interpretują znaczenie każdego kodu zgodnie z biblioteką i funkcjami odpowiednich języków. Popraw mnie, jeśli się mylę. Chciałbym lepiej zrozumieć kompilatory, pisząc bardzo prosty kompilator (prawdopodobnie w C) do kompilacji pliku statycznego (np. Hello World w pliku tekstowym). Próbowałem kilku samouczków i książek, ale wszystkie dotyczą praktycznych przypadków. Zajmują się kompilacją kodów dynamicznych ze znaczeniami związanymi z odpowiednim językiem. Jak napisać podstawowy kompilator, aby przekonwertować tekst statyczny na plik do odczytu maszynowego? Następnym krokiem będzie wprowadzenie zmiennych do kompilatora; wyobraźmy sobie, że chcemy napisać kompilator, który skompiluje tylko niektóre funkcje języka. Wprowadzenie praktycznych samouczków i zasobów jest bardzo mile widziane :-)


title: Jaki byłby najlepszy sposób na poznanie kompilatorów i formatów wykonywalnych?

text: Chcę napisać własny kompilator dla własnego języka. Tak, będzie ciężko i potrwa to długo, ale myślę, że będzie warto. Zajrzałem do OSDev.org i przeczytałem tam o formatach wykonywalnych, ale nie są one zbyt pomocne. Szukam informacji poza tym, co tam mają. Więc wszystko pomoże. Książki, strony internetowe, pliki PDF, cokolwiek. Szukam wersji 32-bitowej, a nie 64- lub 16-bitowej.


title: Implementacja pierwszego podstawowego tłumacza: czego powinienem się najpierw nauczyć?

text: Mam zamiar zaimplementować własny, bardzo prosty język programowania i interpreter do wykonywania kodu w tym języku. Język będzie bardzo prosty. Przykładowy kod: var x = 3 if x > 2 print x if x < 2 print "hello" Język nie zawierałby niczego bardziej złożonego niż jednowierszowe instrukcje `if`. To dlatego, że po raz pierwszy próbuję czegoś takiego, więc zaczynam od małych rzeczy. Interpreter zostanie napisany w Javie, a zatem wykona kod za pomocą operacji Javy. Moje pytanie brzmi: wiem, że temat tworzenia kompilatorów i interpreterów jest bardzo złożony. Ale ponieważ jestem w tym nowy, uważam, że powinienem zacząć od podstawowych technik i podejść. ** Czego powinienem się nauczyć przed rozpoczęciem pracy nad tym projektem? Zwłaszcza jakiej wiedzy dotyczącej parsowania i interpretacji powinienem się nauczyć przed rozpoczęciem?** Czy wystarczy po prostu „rozbić tekst na podciągi, a potem jeszcze więcej podciągów”, czy też powinienem nauczyć się bardziej zaawansowanych technik i zastosować je? ** Zdobyta wiedza i doświadczenie ma na celu umożliwienie mi późniejszego budowania większej wiedzy, gdy kontynuuję naukę i wdrażanie tłumaczy ustnych. Ale nie powinno być „za dużo” na pierwszą próbę.**


title: Czym jest „metoda refaktoryzacji” do zrozumienia kodu napisanego przez kogoś innego?

text: Napisałem kod, ale sam wiele razy nawet nie rozumiem kodu, który napisałem. Słyszałem ludzi używających "metody refaktoryzacji", aby pomóc im zrozumieć kod innych. Po prostu niewiele wiedziałem o refaktoryzacji. To jest użycie połączonego klawisza **Alt Shift R** w eClipse, ale automatycznie zmieni cały powiązany kod, a zatem nie przyniesie żadnych korzyści dla zrozumienia kodu. Czym więc jest „metoda refaktoryzacji” (do zrozumienia kodu napisanego przez kogoś innego), o której ludzie mówią?


title: Czy w Git jest konieczne użycie gałęzi „PRODUKCJA” i/lub czy byłoby możliwe posiadanie więcej niż jednej z nich?

text: **Krótkie podsumowanie tego, jak zarządzamy gałęziami** : Z gałęzi MASTER można utworzyć jedną lub wiele gałęzi funkcji (dla średnio- i długoterminowego rozwoju), gdy możliwe do wdrożenia zmiany zostały scalone do MASTER, a następnie tworzone są gałęzie wydania . Gałęzie wydania są przechowywane w celu utrzymania wdrożonej wersji do momentu pojawienia się następnego wydania i są scalane z PRODUKCJĄ w celu zbudowania TAGÓW, które są wdrażane w środowiskach Live. **Pierwszy werset pytania**: Czy rzeczywiście konieczne jest posiadanie etapu gałęzi PRODUKCJA? Z pewnością TAGI można niezawodnie utworzyć z gałęzi wydania w tym samym punkcie, w którym zostałyby połączone z gałęzią PRODUKCJI? Jeśli warto je mieć, to **drugi werset pytania**: Czy odpowiednią kontrolą źródła byłoby posiadanie więcej niż jednej gałęzi PRODUKCJI i posiadanie tylko jednego MASTER? **Motywacja** : Wkrótce rozpoczniemy wewnętrzny projekt, który (miejmy nadzieję) będzie produktem „white-label”, którego będziemy mogli użyć do zastąpienia trzech oddzielnych aplikacji wewnętrznych, z których obecnie korzystamy (jak również w przyszłych aplikacjach). Byłby to jeden back-end, jedna biblioteka, jedno API, ale trzy zespoły korzystające z niego i zarządzające własnymi interfejsami użytkownika oraz dodające funkcje wielokrotnego użytku do back-endu. Pomyślano, że projekt może być jednym repozytorium z jednym MISTRZEM, różnymi gałęziami funkcji dla dowolnego zespołu, który musi rozwijać rzeczy (od średnio do długoterminowego). Ale czy powinniśmy mieć gałąź PRODUKCJI dla każdej z trzech „wersji” produktu, czy po prostu TAG wyłączyć odpowiednie gałęzie wydania? Aby mogli wdrażać niezależnie od sprintów i wymagań innych (o ile nie psują wspólnej infrastruktury). PS: Każda z trzech aplikacji jest wdrażana w niezależnych środowiskach Live i wykorzystywana przez różne działy firmy. PPS: Jeśli znasz jakieś inne przepływy wersjonowania, które byłyby bardziej odpowiednie, proszę powiedz mi! [EDYTUJ - Po przeczytaniu odpowiedzi jhr] Pomyśl o tym jako o jednym DUŻYM projekcie/aplikacji. Ale zamiast jednego DUŻEGO zespołu pracującego nad sekcjami używanymi przez 3 działy (każdy z własnymi wymaganymi przepływami interfejsu użytkownika i funkcjami itp.), możemy zostać podzieleni na trzy zespoły, z których każdy pracuje nad funkcjami działu, na tej samej bazie kodu (repo) . To nie jest pytanie o specyfikację techniczną, ale raczej o opinię, doświadczenie lub preferencje itp.


title: Boss boi się korzystać z systemu kontroli wersji w nowym projekcie, czy powinienem?

text: Zobacz Przełożony odmawiający użycia subversion Moje pytanie jest podobne, ale oto główne różnice w moim scenariuszu: * Rozpoczynamy nowy projekt od zera, używając PHP i technologii internetowej. Nie byłoby przestojów w rozwoju, ponieważ przyjmowalibyśmy to od początku, gdybym miał swój sposób. * Mój zespół deweloperski składa się ze mnie i mojego szefa. Jesteśmy działem "IT" stosunkowo niewielkiej firmy. Jest inny pracownik IT, który obsługuje komputery stacjonarne, ale nie zajmuje się programowaniem. * Mój tytuł zawodowy to programista; mój szef jest kierownikiem IT. Wyższy szczebel zarządzania lubi mojego szefa. Oni też mnie lubią, ale prawdopodobnie nie na tyle, by dać mi władzę nad nim. Aplikacja internetowa zastąpi starszą aplikację FoxPro bez żadnej kontroli źródła. W rzeczywistości, ze względu na wymagania prawne, podjęto decyzję (zanim zostałem zatrudniony) o podzieleniu aplikacji na 7 całkowicie oddzielnych programów - nie tylko pliki obliczające rzeczy, które mogą się różnić w zależności od stanu - ale mam na myśli skopiowanie całego katalogu, 7 razy, a różnym deweloperom przyznano różne stany. Sprawy odbiegały od tego miejsca. Pomysłem mojego szefa na kontrolę wersji jest kopiowanie i wklejanie całych plików źródłowych ze stanu, w którym pracuje, do wszystkich innych stanów, w ten sposób nadpisując te pliki. Małe poprawki są zapisywane w plikach tekstowych ręcznie i muszą być kopiowane i wklejane przez programistę dla stanu docelowego. To nie zawsze działa tak ładnie. Obwinia się mnie za zmienianie rzeczy i powodowanie awarii, gdy te pliki są wklejane. Propozycja mojego szefa, wklejona bezpośrednio z e-maila: * Aktualizacje należy przesyłać jako paczki w folderze ZGŁOSZENIA. Paczka powinna zawierać wszystkie odpowiednie pliki oraz plik „UPDATE.NFO”, który zawiera opis aktualizacji, listę wszystkich dołączonych nowych plików (wraz z opisami) oraz listę wszystkich zmodyfikowanych plików ze szczegółami modyfikacji. * Pakiety aktualizacji powinny skupiać się na pojedynczym elemencie i nie odbiegać od zamierzonego celu. Kod powinien być zaprojektowany tak, aby był modułowy i wielokrotnego użytku, gdy tylko jest to możliwe. * Wszystkie przesłane pakiety powinny zostać zainstalowane w środowisku testowym każdego programisty wkrótce po przesłaniu. Każdy programista ma obowiązek przejrzeć nowy dodatek i zgłosić wszelkie wątpliwości dotyczące jego instalacji w środowisku produkcyjnym. Standardowa aktualizacja pakietu powinna być wstrzymana przez co najmniej 3 dni robocze dla tego procesu przeglądu, zanim zostanie załadowana do środowiska produkcyjnego. Aktualizacje/poprawki o wysokim priorytecie mogą pominąć to wymaganie. (koniec e-maila) Powodem, dla którego wynaleziono kontrolę źródła, jest zautomatyzowanie tego wszystkiego, prawda? Zasugerowałem wywrotowość, bo tego używałem na studiach. Szef nie lubi dywersji, ponieważ "robi bałagan w kodzie", a ludzie w internecie mówili mu, że to złe. (Gdzie on szuka???) Nie wiem, czy nie lubi tylko subversion, czy wszystkich produktów kontroli źródła (jeszcze nie odpowiedział na to pytanie). Nie proszę o porównanie/kontrast różnych systemów, takich jak svn vs git, mogę to zrobić sam. Poszukuję osoby trzeciej, która może przedstawić logiczny argument za skorzystaniem z NIEKTÓREJ formy kontroli wersji. Proszę, koledzy koderzy, pomóżcie mi. Jeśli coś, co możesz powiedzieć, skierowane do mojego szefa, miałoby wpływ na moje położenie, błagam, abyś wyszedł. Mojemu szefowi można się porozumieć, jeśli zostanie przedstawiony logiczny argument. Ja staram się go przekonać poprzez badania i demonstracje, ale jeśli ludzie ze społeczności programistów są w przeważającej mierze po mojej stronie, myślę, że może się zastanowić. Aby być uczciwym, muszę również poprosić osoby sprzeciwiające się kontroli wersji o zabranie głosu. RSVP. A może całkowicie się mylę? Czy kontrola źródła jest naprawdę konieczna w mojej sytuacji? To jest nasze główne oprogramowanie o krytycznym znaczeniu dla biznesu, o którym mówimy, więc bez wątpienia będzie to ogromne. Ale jest tylko 2 programistów (obecnie). MOJE AKTUALNE PYTANIE: Jeśli nie mogę go przekonać, czy byłoby sens, abym używał go tylko dla siebie? Mówię jako ktoś z bardzo ograniczonym doświadczeniem, faktycznie używający svn; wszystko, co naprawdę wiem, to kasa i zatwierdzenie. Jakie są cechy kontroli kodu źródłowego (może obejmować inne produkty niż svn), które pomogłyby w moim indywidualnym wysiłku programistycznym? I proszę nie dodawać komentarzy "Zdobądź inną pracę". Wiem, ludzie, wierzcie mi, że wiem. Zanim nawet się pojawi, możesz założyć, że jestem szalony. Może jestem tylko frajerem wyzwań lub zwykłym starym masochistą. Ale po prostu uważaj, że to nie jest opcja.


title: Jak przebiega gra online po odejściu gospodarza?

text: **Uwaga:** to pytanie dotyczy sieci, a nie gier. Używam StarCrafta jedynie jako przykładu. Gra _StarCraft_ (nie StarCraft 2) obsługuje rozgrywkę online. Jedna osoba jest gospodarzem, a inne osoby dołączają. Jeśli gospodarz opuści grę w trakcie gry, gra może być kontynuowana bez gospodarza w nieskończoność. Jak to działa? Rozważmy następujący scenariusz: * Hostuję 3 kontra 3. Pamiętaj, że aby ludzie mogli się przyłączyć, mój router musi być skonfigurowany do przekazywania portów 6112, TCP i UDP (patrz Pomoc Blizzarda). * Dołącza pięć osób. Wszyscy (w tym ja) są za routerem. Zaczynam grę. * Po trzech minutach gry około dwudziestu fanatyków wlewa się do mojej bazy. Nikt mi nie pomaga. * Moja baza została zlikwidowana, więc odchodzę (gra nie daje wyboru). * Gra jest kontynuowana bez gospodarza (w drużynie gospodarzy pozostało dwóch graczy). W jaki sposób pozostałych pięciu klientów (którzy nie wymagali przekierowania 6112) pozostaje połączonych? Jeśli dobrze rozumiem: jeśli dwa programy chcą ze sobą rozmawiać, jeden z nich musi być „serwerem” i nasłuchiwać połączeń na porcie, a drugi musi być „klientem” i na tym inicjować żądanie połączenia Port. Nie mogą po prostu zacząć wysyłać do siebie pakietów (a nawet nie wiem, jak by to zrobili, jeśli obaj są za routerami). Ktoś, kto hostuje grę, to serwer, a osoby, które do niej dołączają, to klienci. Łatwo zobaczyć, jak klienci mogą zacząć komunikować się z serwerem. Czego nie rozumiem to: jak klienci zaczynają komunikować się ze sobą bez przechodzenia przez serwer? Czy protokół internetowy umożliwia serwerowi inicjowanie połączeń między klientami? Całkiem możliwe, że w przypadku StarCrafta ruch w grach przechodzi przez serwery Battle.net. StarCraft utrzymuje połączenie z Battle.net podczas gier (dla wiadomości od znajomych itp.). Wątpię jednak, aby ruch w grach przechodził przez to, ponieważ gdyby tak było, dlaczego hosty miałyby przekierowywać 6112? Moje pytanie brzmi: czy serwer, do którego podłączonych jest wielu klientów, może inicjować połączenia między nimi?


title: Konto organizacji GitHub. Bezpieczny w użyciu do osobistych projektów?

text: Tak więc mój duży klient dał mi dostęp do swojego konta GitHub organizacji. Wraz z nim przyszedł login dla siebie (na github.nazwafirmy.com) i oczywiście dostęp do pewnych repozytoriów na ich koncie firmowym (przełączając użytkownika do firmy za pomocą przycisku w lewym górnym rogu). Teraz zastanawiałem się, skoro mogę tworzyć prywatne repozytoria dla siebie, czy bezpiecznie jest używać ich w niepowiązanych projektach, czy też administratorzy firmy mogą uzyskać dostęp do repozytoriów moich użytkowników, mimo że są prywatne? Moje zrozumienie Github jest ograniczone, więc ta dodatkowa warstwa złożoności z konta organizacji nie pomaga zbytnio. Dzięki, Mike **AKTUALIZACJA:** Dziękuję wszystkim, którzy publikowali odpowiedzi i pisali komentarze, wszyscy byli bardzo pomocni. Zdecydowałem się nie hostować żadnych osobistych projektów na ich koncie firmowym, zgodnie z sugestią, i ponownie, zgodnie z zaleceniami, teraz hostuję moje repozytoria u prywatnego dostawcy, takiego jak bitbucket. Mikrofon


title: Czy w przypadku asp.net mvc jest to rozwiązanie trójpoziomowe?

text: Jestem programistą asp.net mvc i jeśli chcę rozpocząć projekt, robię to: 1. Tworzę bibliotekę klas o nazwie `Model` dla moich modeli. 2. Tworzę bibliotekę klas o nazwie `Infrastructure.Repository` dla procesów bazodanowych. 3. Tworzę bibliotekę klas o nazwie `Application` dla warstwy logiki biznesowej 4. I na koniec tworzę projekt MVC dla UI. Ale teraz niektóre rzeczy mnie dezorientują. Czy używam programowania 3-poziomowego? Jeśli tak, to czym jest programowanie n-warstwowe, a które jest lepsze? Jeśli nie, to czym jest programowanie trójpoziomowe? Niektóre, w których widzę, że nazewnictwo poziomów to DAL i BIZ. Który jest poprawny zgodnie z konwencją nazewnictwa?