title: Zapewnienie integralności koncepcyjnej w projekcie Pythona z wieloma programistami

text: Jeden zarzut, który _często_ słyszałem pod adresem Pythona, że trudno jest zsynchronizować zespół wielu programistów w dużym projekcie Pythona. Uwaga: synchronizacja w takim projekcie jest _możliwa_ niekoniecznie oznacza, że jest praktyczna, tania czy łatwa. Nadal istnieje n*(n-1) kanałów komunikacji między programistami, więc koszt komunikacji rośnie średnio wraz z kwadratem liczby programistów. Jedną z rzeczy, które podobały mi się w Javie, są interfejsy. Niestety, zarówno PEP 245, jak i zmodyfikowana wersja Guido na interfejsach ( http://www.artima.com/forums/flat.jsp?forum=106&thread=87182 ) nie zostały zaimplementowane. Myślałem, że ograniczone interfejsy w stylu kaczki (bez typów, tylko nazwy metod) mogą być bardzo przydatne, zdecydowanie nie ze względu na pychecker, szybszy kod lub zmuszanie (głupich) programistów do podążania za (inteligentnym) projektem architekta, ale jako środek łatwej synchronizacji między 2+ programistami. Tak więc, poza typową, ale niezbyt dobrze działającą sugestią „więcej dokumentacji” (nikt nie chce tego pisać), jakie są twoje sposoby na synchronizację projektowania wysokiego poziomu i integralności koncepcyjnej przy tak dużych, wieloosobowych projektach? (częściowo pytam, ponieważ duże projekty, w których brałem udział, nigdy nie używałem Pythona) Osobiście słyszałem zastrzeżenia, o których mowa powyżej: Co najmniej 3 razy w rozmowie ze startupami (2 startupy Scala, więc mają skłonność do statycznego pisania) i przynajmniej raz w ciągu corp przy rozważaniu różnych języków programowania dla projektów. W sieci: nie pamiętam tego teraz, mam mglistą pamięć, jak czytałem to na niektórych blogach i forach OO. Faceci od pisania statycznego (Java, Scala) wydają się mieć duże znaczenie w tej kwestii, mimo że typowo statyczne pisanie i interfejsy są zwykle przeznaczone do innych rzeczy (szybkości, autouzupełniania IDE). Uwaga: znam obronę TDD, ale problem polega na tym, że jest ona defensywna, ponieważ zazwyczaj jest to jedna osoba, która pisze testy jednostkowe. Oczywiście można sobie wyobrazić 1+ programistów siedzących razem i piszących testy jednostkowe przed kodowaniem jako rodzaj pośredniej specyfikacji + testu, ale czy widzieliście, jak to się robi? Nie mam. Uważam również, że testy jednostkowe, nawet pisane przez grupy, nie są całkowicie (ograniczone) projektem lub specyfikacją. W końcu są na niskim poziomie. Jest powód (może dobry?), że Java ma interfejsy oprócz, a nie zamiast JUnit.


title: Projekty open source w C#

text: Do jakich projektów C# wziąłbyś udział, gdybyś był początkującym, próbującym doskonalić swoje umiejętności w C# i .NET Framework? Projekt powinien być (poza wszystkimi) aktywnym, a nie czymś mniej aktywnym i/lub stagnującym.


title: Na jakim poziomie architektury prowadzisz testy BDD (np. Cucumber)

text: W zeszłym roku bardzo polubiłem korzystanie ze SpecFlow (czyli portu .NET Cucumbera) Używałem go zarówno do testowania aplikacji ASP.NET MVC na warstwie webowej, czyli z wykorzystaniem automatyzacji przeglądarki, ale także na kontrolerze warstwa. Pierwsza daje mi większą pewność co do poprawności aplikacji, ponieważ testowany jest JavaScript, a także wyłapywana jest niewłaściwa konfiguracja kontrolera. Ale te testy są wolniejsze do wykonania i bardziej złożone w implementacji niż testy tylko w warstwie kontrolera. Moje testy są pełnymi testami funkcjonalnymi, tj. ćwiczą wszystkie warstwy aplikacji, aż do bazy danych. Tak więc pierwszą rzeczą przed jakimkolwiek scenariuszem jest oczyszczenie bazy danych z danych, co pozwala testowi założyć, że istnieją tylko dane określone w bloku „Given”. Potem widzę przykład, jak z niego korzystać, gdzie testują po prostu ćwiczenie warstwy modelu. Jakie są Twoje doświadczenia z tymi narzędziami? Którą warstwę aplikacji testujesz?


title: Jak zaprojektować aplikację P2P

text: [Przeniesiony tutaj na sugestię użytkowników SO (10k SO+)] Chciałbym stworzyć aplikację peer-to-peer. Chociaż mam duże doświadczenie w aplikacjach LOB, jestem nowy na arenie P2P. Mam ogólne pojęcie o tym, jak wszystko powinno działać, ale potrzebuję więcej szczegółów, aby wypełnić moje zrozumienie. Co wiem (wierzę) muszę zrobić: * Znaczna część klientów musi włączyć połączenia przychodzące (reguły ala uPnP/NAT) * Węzły powinny dzielić inne znane węzły, aby zapewnić odporność na awarię dowolnego konkretnego węzła * Pewna forma synchronizacji /route find jest wymagane do wysyłania danych między dowolnymi klientami * Prawdopodobnie podsłuchiwanie zasobów w celu rozróżnienia między "głupimi" klientami a bardziej zaawansowanymi "super węzłami" do obsługi synchronizacji/udostępniania list węzłów i być może przekazywania wiadomości * Klienci bez obsługi przychodzącej powinni wstrzymać otworzyć połączenie wychodzące, przez które mogą otrzymywać informacje o węzłach, z którymi mogą się połączyć Krótko mówiąc, mam nadzieję zaoferować (na początku) usługę czatu/komunikatora, która nie opiera się na połączeniu z żadnym konkretnym serwerem centralnym. Chociaż wyobrażam sobie, że będę musiał dostarczyć pewną liczbę scentralizowanych „superwęzłów”, aby zacząć wszystko (lub po znaczących aktualizacjach), powinny one być opcjonalne po ustanowieniu funkcjonalnej sieci P2P. Widzę mnóstwo problemów i nie wiem, jak je rozwiązać. Głównie jak... * Uwierzytelniać użytkowników w innych węzłach bez centralnego uprawnienia do weryfikacji * Koordynować, które węzły wiedzą o których innych węzłach (liczba min-maks/opóźnienie/???) * Pozwól danemu użytkownikowi określić, czy inny użytkownik (lub węzeł) jest online * Zajmij się sytuacją, w której 2 grupy węzłów są fizycznie odłączone (przerwa powietrzna) i jak ponownie zsynchronizować się po ponownym połączeniu grup * Itd. -Wzorce projektowania poziomów byłyby mile widziane, to, czego naprawdę szukam, to przyzwoity przewodnik po tym, jak inni poradzili sobie z tymi problemami (i tymi, których jeszcze nie brałem pod uwagę).


title: Testowanie z perspektywy programisty

text: Mam książkę, w której jest napisane: > „Istnieje wiele rodzajów testów, w tym testowanie jednostkowe, testowanie > testowanie integracyjne, testowanie funkcjonalne, testowanie systemowe, testowanie wydajnościowe i > testowanie akceptacyjne”. Często zauważa się, że wielu programistów przeprowadza tylko testy jednostkowe lub w ogóle nie wykonuje testów. Z powyższych typów testów, które ma przeprowadzić deweloper? Jakie są obowiązki programisty, jeśli chodzi o testowanie?


title: Migracja ze złożonej aplikacji C++ do C# - dobry pomysł?

text: Obecnie posiadamy złożoną aplikację VC++, która wykorzystuje bibliotekę taką jak ObjectARX do budowania biblioteki dll. Czuję, że w C# jest wiele funkcji, takich jak kolekcje, generyki i inne biblioteki, które można wykorzystać do zbudowania bieżącej aplikacji w lepszy i wydajny sposób. Myślałem o tym, ale nie jestem pewien, jak przedstawić to mojemu promotorowi i współpracownikom. Byłbym wdzięczny za każdą pomoc, aby pomóc mi myśleć we właściwym kierunku i podkreślić punkty, które wniosą do zespołu. Kilka punktów, o których myślałem; 1. Z kilkoma aktualnymi przykładami, zaimplementuj go w C# z funkcjami. 2. Zaznacz, że czas rozwoju jest stosunkowo krótszy w C# niż w C++. 3. Użyj architektury projektu.


title: Czy jest możliwe dodanie typu integer do standardu ECMAScript?

text: W JavaScript każda liczba, jakiej kiedykolwiek użyjesz, będzie zawsze reprezentowana przez to, co programista C nazwałby „podwójnym”. Uważam, że oficjalny typ to „liczba”. Jeśli dobrze pamiętam, fakt ten został wymieniony przez Google jako „podstawowy” problem z JavaScriptem i jeden z powodów, dla których chcieli zerwać z Dartem. Teraz nie mogę pomóc, ale zastanawiam się: * Czy standard ECMAScript może po prostu dodać ten typ? Czy byłoby to możliwe bez łamania istniejącego kodu? * W każdym razie, czy silnik JIT nie może obserwować użycia liczb całkowitych i generować kodu, który jest prawie tak wydajny, jak używanie natywnego typu liczb całkowitych, przy użyciu rejestrów liczb całkowitych i kodów operacji? W efekcie: czy można to zrobić? _Dlaczego powinno to być zrobione?_


title: Recenzje kodu czy naprawdę działają w prawdziwym Agile?

text: Zacząłem więc pracować dla dużej korporacji, jednej z tych z 3 literami w nazwie, którzy próbują stać się Agile, ale mają mnóstwo procesów, które moim zdaniem nie są Agile. Najbardziej nakręca mnie recenzja kodu. Moja ostatnia praca dotyczyła startupu, który, powiedziałbym, jest najbardziej zwinnym zespołem programistycznym, jaki widziałem, w jakim kiedykolwiek słyszałem. W każdym razie, moim argumentem jest to, że przeglądy kodu to strata czasu w iteracyjnym lub zwinnym rozwoju, w którym UX/UI jest ekstremalny/intensywny (pomyśl o perfekcji Apple/Steve Jobs). Może ktoś tutaj może pomóc zrozumieć, zanim mnie zwolni? Oto mój proces rozwoju i ten w moim ostatnim startupie... bardzo zwinny. Wykonujemy wczesną pracę nad funkcjami, aby posortować zadania programistyczne/do zrobienia. Wyśmiewaliśmy kilka wersji i prezentowaliśmy użytkownikom, zespołowi i marketingowi, aby uzyskać opinie. Następnie wykonujemy kolejną iterację makiety, aby uzyskać jedną rundę od tych samych interesariuszy powyżej. Następnie dzielimy pracę i zaczynamy. Mamy kamienie milowe i daty do spełnienia, ale wciąż się odkręcamy. W żadnym z tych wydarzeń nie przeprowadzamy żadnych przeglądów kodu. Kilka razy w ciągu tygodni naszego rozwoju ponownie przeprowadzamy sesje z interesariuszami, aby sprawdzić, czy nadal zgadzają się, że cechy/funkcje/UX/UI są nadal odpowiednie i zgodne z celem. Gdy zbliżamy się do końca 8-tygodniowego cyklu iteracji, kontrola jakości rozpoczyna się od testowania, następnie trafia do użytkowników wersji alfa, a na koniec do użytkowników wersji beta. Ale w fazie alfa i beta programiści analizują nowe funkcje i starsze funkcje, wprowadzając iteracyjne codzienne lub godzinne zmiany w interfejsie użytkownika w celu ulepszenia UX. Tak więc funkcja, która była opracowywana w tym wydaniu, może zostać zmieniona jeszcze 3 razy w ciągu ostatnich czterech tygodni, aby ją ulepszyć i udoskonalić lub dodać kilka drobnych funkcji (np. sprawić, by komponent był trochę ładniejszy lub inteligentniejszy). Czasami zmiany mogą być powierzchowne, co oznacza, że żadne operacje CRUD nie są zmieniane ani modyfikowane, ale zmienia się tylko cały interfejs użytkownika. Czy w przypadku tego typu procesu programowania, ekstremalnego Agile, przeglądy kodu nie byłyby stratą czasu? Oznacza to, że gdybym inny programista lub dwóch przeglądało mój kod, ale potem ten kod zmieniał się jeszcze 3 razy, zanim wyszedł, z powodu wszystkich ulepszeń UI / UX, czy nie marnujemy czasu na pierwsze 3 razy, gdy go przeglądali? kod, ponieważ ten kod/komponent/UI został złomowany? Nigdy nie mieliśmy wielu problemów z jakością tego procesu i owszem, jeśli programista zostawił całą wiedzę, wyszedł za drzwi, ale zawsze znajdowaliśmy inteligentnych programistów, którzy ją przejmą i przejmą. _**I tak, mamy wielu testerów, ponieważ być może będą musieli powtórzyć test 3 lub 4 razy. Również proszę, nie rozłączaj się z pytaniem, dlaczego wszystkie zmiany UI/UX… tak właśnie się robi… to dlatego aplikacja wygrywa mnóstwo nagród za UI/UX, a użytkownicy będą zabijać dla aplikacja. Proces myślowy polega na tym, że mogę zrobić nawet 2% poprawę w czymś, ponieważ mam dodatkową godzinę, to zrób to. Użytkownicy będą szczęśliwsi, co oznacza więcej $ lub użytkowników. I tak, nasi użytkownicy są w porządku, że aplikacja ciągle się zmienia, ponieważ tak to robi się od pierwszego dnia, więc nie postrzegają jej jako złej lub negatywnej._** Mam nadzieję, że ten post nie wyjdzie jako pompatyczny, ale ja po prostu nie rozumiem, dlaczego przeglądy kodu nie są marnotrawstwem. Może 2% całego naszego kodu w przejrzanym kodzie zawiera błędy. W każdym wydaniu możemy znaleźć 3 błędy poprzez przegląd kodu. Czyli kończy się to 40 godzinami przeglądu kodu przez programistę na wydanie (4 x 40 = 160 godzin), aby znaleźć od 3 do 5 błędów? Szanse są 50%, że te 3 do 5 błędów i tak zostałyby wykryte przez kontrolę jakości. Czy nie byłoby lepiej poświęcić te 40 godzin na programistę, dodając nową funkcję lub ulepszając istniejące?


title: Stan lokalizacji w aplikacjach webowych

text: Biorąc pod uwagę, że przeglądarki (do tej pory Chromium/Chrome AFAIK) wydają się wprowadzać wbudowane tłumaczenia witryn i narzędzia, takie jak Wibiya oraz biorąc pod uwagę ilość pracy, jaką może wymagać zlokalizowanie witryny (w zależności od frameworka, przepisywanie widoku, lokalizacja wiadomości oparta na bazie danych , itp.), czy ma sens podejmowanie pracy w celu zlokalizowania witryn przeznaczonych na rynek międzynarodowy? Opracowuję taką aplikację solo i zastanawiam się, czy jest to _naprawdę_ opłacalna inwestycja w tym momencie i mam nadzieję usłyszeć od innych, którzy opracowują międzynarodowe aplikacje na dużą skalę. Nie szukam tak bardzo opinii (choć te też są cenne), ile rzeczowych liczb, czyli udziału w rynku, jaki mogą mieć Chromium i Chrome w porównaniu do innych przeglądarek, które przeglądarki oferują natywną lokalizację itp. W zasadzie szacunkowy procent użytkowników, których mogę wykluczyć z użyteczności bez integracji lokalizacji opartej na witrynie.


title: Niech instancja modelu wybierze odpowiednią klasę widoku za pomocą kategorii. Czy to dobry projekt?

text: Załóżmy, że mam abstrakcyjną klasę modelu bazowego o nazwie MoneySource. Oraz dwie realizacje BankCard i CellularAccount. W MoneysSourceListViewController chcę wyświetlić ich listę, ale z ListItemView inną dla każdej podklasy MoneySource. Co jeśli zdefiniuję kategorię na MoneySource @interface MoneySource (ListItemView) - (Class)listItemViewClass; @end A następnie nadpisz go dla każdego konkretnego podkasy MoneySource, zwracając odpowiednią klasę widoku. @implementation CellularAccount (ListItemView) - (Class)listItemViewClass { return [klasa BankCardListView]; } @end @implementation BankCard (ListItemView) - (Class)listItemViewClass { return [klasa CellularAccountListView]; } @end @implementation MoneySourceListController - (ListItemView *)listItemViewForMoneySourceAtIndex:(int)index { MoneySource *moneySource = [elementy objectAtIndex:index]; Klasa viewClass = [listItemViewClass]; ListItemView *view = [[viewClass alloc] init]; [zobacz konfiguracjęWithMoneySource:moneySource]; return [wyświetl automatycznie wydane]; } @end więc mogę zapytać obiekt modelu o jego widok, nie naruszając zasad MVC i unikając introspekcji klas lub konstrukcji. Dziękuję Ci!


title: porady dotyczące wzorca projektowego: wykres -> obliczenia

text: Mam model domeny, utrwalony w bazie danych, która reprezentuje wykres. Wykres składa się z węzłów (np. NodeTypeA, NodeTypeB), które są połączone gałęziami. Dwa ogólne elementy (węzły i gałęzie będą miały właściwości). Wykres zostanie wysłany do silnika obliczeniowego. Aby wykonać obliczenia, silnik musi zostać zainicjalizowany w ten sposób (uproszczony pseudokod): Silnik Silnik = new Engine(); Identyfikator obiektu1 = Engine.AddNodeTypeA(TypeA.Property1, TypeA.Property2, …, TypeA.Propertyn); Identyfikator obiektu2 = Engine.AddNodeTypeB(TypB.Właściwość1, TypB.Właściwość2, …, TypB.Właściwość); Silnik.AddBranch(ID1,ID2); Wreszcie obliczenia są wykonywane w następujący sposób: Engine.DoSomeComputation(); Zastanawiam się tylko, czy istnieją jakieś odpowiednie wzorce projektowe, które pomagają osiągnąć powyższe przy użyciu dobrych zasad projektowania. Mam nadzieję, że to ma sens. Wszelkie opinie byłyby bardzo mile widziane.


title: Przestrzeń sterty Java

text: Dlaczego w Java/JVM nazywamy miejsce pamięci, w którym Java tworzy obiekty, jako „Sterę”? Czy używa struktury danych sterty do tworzenia/usuwania/utrzymywania obiektów? Jak wyczytałem w dokumentacji struktury danych Heap, algorytm porównuje obiekty z istniejącymi węzłami i umieszcza je w taki sposób, aby obiekt Parent był "większy" od dzieci. (Lub „mniejszy” w przypadku min sterty). Więc w JVM, jak obiekty są porównywane ze sobą przed umieszczeniem ich na stercie?


title: Różnica między metodami BeginWrite i BeginRead TSimpleRWSync?

text: Niedawno przełączyłem się na TSimpleRWSync z TRTLCriticalSection. Metody BeginRead i BeginWrite dezorientują mnie, ponieważ gdziekolwiek czytam pomoc, pozornie robią to samo, tj. zdobywają sekcję krytyczną za każdym razem, gdy zostanie porzucona. Ponieważ TSimpleRWSync nie zezwala na wiele wątków odczytu, pozornie nie ma sensu posiadanie dwóch oddzielnych metod. Czy jest między nimi jakaś szczególna różnica poza kontekstową?


title: Nazwa zmodyfikowanego wzorca singleton Osherove?

text: Jestem całkiem dobrze sprzedany w myśleniu „singletony są złe”. Niemniej jednak istnieje ograniczona liczba przypadków, gdy chcesz ograniczyć tworzenie obiektu. Roy Osherove radzi: > Jeśli planujesz użyć singletona w swoim projekcie, rozdziel logikę > klasy singletona i logikę, która czyni go singletonem (część, która > na przykład inicjuje zmienne statyczne) na dwie oddzielne zajęcia. W ten sposób > możesz zachować zasadę pojedynczej odpowiedzialności (SRP), a także mieć możliwość > nadpisania logiki singletona. ( _Sztuka testowania jednostkowego_ 261-262) Ten wzorzec nadal utrwala stan globalny. Jednak daje to testowalny projekt, więc wydaje mi się, że jest to dobry wzorzec do złagodzenia uszkodzeń singletona. Jednak Osherove nie nadaje nazwy temu wzorowi; ale nazywanie wzorca, według Gang of Four, jest ważne: > Nazwanie wzorca natychmiast zwiększa nasze słownictwo projektowe. Pozwala nam > projektować na wyższym poziomie abstrakcji. (3) Czy istnieje standardowa nazwa tego wzorca? Wydaje się na tyle odmienny od standardowego singletona, że zasługuje na osobną nazwę. Może _Singleton oddzielony_?


title: Jak zastosować stopień naukowy w dziedzinie informatyki do tworzenia stron internetowych?

text: Jestem programistą internetowym, ale nie znalazłem wielu możliwości skorzystania z formalnej edukacji w zakresie informatyki. Może nie szukam we właściwych miejscach, ale wydaje mi się, że większość prac internetowych, na które natrafiam, to CRUD, formularze internetowe i siatki danych. W przypadku tych zadań formalne przygotowanie do obsługi CS nie wydaje się konieczne, a książki kucharskie O'Reilly w jQuery, CSS 3, PHP, SQL lub ASP.NET MVC można sobie dobrze poradzić. Jakie są rodzaje pracy dla programistów internetowych, które naprawdę pozwalają Ci zastosować swoje doświadczenie w informatyce? Czy muszę zajmować się innymi dziedzinami programowania, aby w pełni wykorzystać mój stopień naukowy?


title: Opcje implementacji zbiorczego przetwarzania komunikatów

text: Zajmuję się tworzeniem usługi sieci web w java, która wymaga wykonania asynchronicznego wywołania do aplikacji innej firmy przez agregowanie około 100 żądań lub przez minutę (w zależności od tego, co nastąpi wcześniej). Czy istnieje jakikolwiek framework open source lub znane wzorce projektowe, które mogą mi w tym pomóc. Przyjrzałem się JMS i Spring-Batch. JMS przetwarza każdy komunikat (a nie agregację), a Spring Batch zapewnia wykonanie wsadowe, ale również nie zapewnia obsługi agregacji. Mogę zaimplementować własną usługę kolejki i obsługi, aby mieć pewność, że agreguję wyniki i je przetwarzam, ale szukałem rozwiązań takich jak JMS, który również dba o utrwalenie wiadomości/danych w przypadku awarii i ponowne ich wykorzystanie po powrocie systemu w górę.


title: Alternatywne paradygmaty dziedziczenia w projektowaniu obiektowym

text: Przepraszam, jeśli wariacja tego pytania była już wcześniej zadawana, ale ze względu na jej charakter trudno jest znaleźć. Rozmawiam z kolegą na temat projektowania obiektowego i zasadniczo sprowadza się to do wyboru między dwoma różnymi paradygmatami. To, czego szukałem w Google, to dyskusja między nimi - jak widziałem, obaj dyskutowali. **Paradygmat A** Miej małą liczbę klas, które odpowiadają na wiele publicznych metod, z których wiele nie ma zastosowania, chyba że w pewnych okolicznościach. W takich przypadkach zgłaszają wyjątek środowiska uruchomieniowego. _Przykład: matematyczna klasa wektora może mieć dowolną liczbę elementów. Ta klasa odpowiada „Krzyż”, ale zwraca błąd, jeśli zawiera cokolwiek innego niż 3 elementy._ **Paradigm B** Głębsze drzewo dziedziczenia, w którym metody pojawiają się tylko tam, gdzie mają zastosowanie. _Przykład: klasa wektorów matematycznych jest wyspecjalizowana jako wektor 3D, przy czym tylko wektor 3D odpowiada 'Krzyż'. Wektory 3D są szczególnym przypadkiem, ponieważ istnieje wiele funkcji związanych z samym wektorem pozycyjnym (kropka, krzyż, odległość, kąt do itp). !), ale gdzie mogę znaleźć dobrą dyskusję na temat tych - i podobnych - zagadnień projektowych. Mogę znaleźć wiele dyskusji/poradników dla początkujących na ten temat, ale nie udało mi się znaleźć bardziej szczegółowych artykułów.~~ * * * Edytuj: Po zachęcie od @JohnDibling przeformułuję pytanie ( i dodaj kolejny Paradigm na żądanie): **Paradigm C** Lekkie obiekty z zestawem funkcji do ich interpretacji i zgłaszania błędów, jeśli podane argumenty są nieprawidłowe. _Przykład: wszystkie wektory odpowiadają tylko na najbardziej podstawowe żądania, a szereg funkcji, takich jak Size(vector), Cross(vector) wykonuje całą pracę. Cross zgłosi błąd (w czasie wykonywania), jeśli zostanie podany argument o niewłaściwym rozmiarze._ Czy ktoś mógłby podać mi konkretne powody, dla których A lub C mogą być lepsze niż B, lub wskazać mi artykuł, który szczegółowo omawia ten problem?


title: Wzorce warstwy dostępu do danych Fowlers

text: Fowler mówi o wielu wzorcach projektowych dostępnych dla warstwy dostępu do danych, m.in. Brama danych tabeli, brama danych wiersza, rekord aktywny i mapowanie danych. W książce sugeruje użycie Data Mapper ze skryptem transakcji i Active Record z modelem domeny. Nie wydaje mi się to logiczne, ponieważ klasy skryptów transakcji zawierają logikę biznesową i logikę danych, a model domeny oddziela logikę biznesową i logikę danych. Active Record łączy logikę biznesową i logikę danych (jak skrypt transakcji zamiast modelu domeny), a Data Mapper oddziela logikę biznesową i logikę danych (jak model domeny zamiast skryptu transakcji). Czego tu nie rozumiem?


title: Czy uważasz, że samo GAE wystarczy, aby usprawiedliwić naukę Pythona zamiast Rubiego?

text: Biorąc pod uwagę fakt, że nie musisz angażować się w konfigurowanie/kupowanie serwera, a nawet kupowanie domeny, czy uważasz, że sam ten fakt wystarczy, aby wybrać jedną z drugiej? Niekoniecznie chcę pracować na Google App Engine, po prostu uważam, że jest to wygodne, jeśli chodzi o hosting/środowisko/itd. i zastanawiasz się, czy to wystarczający powód, aby nauczyć się Pythona. W każdym razie nie szukam debaty między pythonem a ruby, ale bardziej na temat Google App Engine i tego, czy jego wartość jest wystarczająca, aby dyktować język, którego powinieneś się uczyć.


title: Przeglądasz długą książkę?

text: To może wydawać się dziwne pytanie, ale ponieważ jako inżynierowie stoimy przed wyzwaniem ciągłego dostosowywania się do zmieniających się technologii, zawsze tkwimy w dokumentacji. To powiedziawszy, musimy również wziąć pod uwagę, że czas jest najważniejszy, ponieważ ludzie chcą, aby ich rzeczy zostały naprawione i ulepszone bez wahania, jeśli w ogóle. Jak w krótkim czasie radzisz sobie z długimi podręcznikami, książkami/podręcznikami? Weźmy na przykład: „The Linux Programming Interface” Michaela Kerriska, który ma około 1500 stron. Jak przebrnąłbyś przez potwora takiej książki, gdybyś miał presję na czas, wciąż ucząc się większości materiału?


title: Czy obraz maszyny wirtualnej jest dobrą ochroną kodu źródłowego?

text: Opracowaliśmy aplikację, która jest sprzedawana jako usługa online. Po pewnym czasie zdaliśmy sobie sprawę, że niektórzy klienci będą potrzebować/wolą/wymagają zainstalowania go lokalnie w intranecie. Jednak aplikacja została napisana przy użyciu języka skryptowego i nie chcielibyśmy udostępniać klientom kodu źródłowego. Pytanie brzmi: jakie są techniczne wady dystrybucji aplikacji jako obrazu maszyny wirtualnej?


title: Jakiej matematyki powinienem nauczyć się, aby zostać lepszym informatykiem?

text: Jestem programistą samoukiem i chociaż wiem, że wiele osób uważa, że matematyka nie jest potrzebna, w wielu przykładach algorytmów, z którymi się spotykam, mówi się o dość złożonej matematyce. Chciałbym w końcu mieć solidne zrozumienie matematyki, którą powinien znać dobry, wykształcony na uniwersytecie informatyk. Tak naprawdę nie pamiętam żadnej matematyki poza algebrą 2. W tym miejscu, w którym skończyłem, jaki powinien być mój punkt wyjścia? Jakie tematy matematyczne powinienem badać iw jakiej kolejności? Zamierzam stworzyć dla siebie program nauczania, który będzie dość łatwy do przyjęcia od miejsca, w którym skończyłem, i ciągłego uczenia się, dopóki nie będę miał podobnego zrozumienia do tego, co zapewniłby uniwersytet.


title: Jakie są role menedżera dostarczania oprogramowania

text: Poinformowano mnie o stanowisku, które może być dla mnie otwarte - roli Software Delivery Manager. Z tego, co rozumiem, ta rola nie istnieje już w mojej organizacji. Szczerze mówiąc, nie jestem do końca pewien, jakie są role Software Delivery Managera. Mam kilka pomysłów i byłbym wdzięczny za informacje dotyczące tego, czy są poprawne, czy nie, lub czy czegoś brakuje: * upewnij się, że dostarczane oprogramowanie jest wysokiej jakości * udokumentuj relacje między dostarczanymi komponentami * upewnij się, że dostawa komponenty nie psują innych komponentów * upewnij się, że tworzone komponenty najlepiej wykorzystują środowiska, w których są wdrażane * bycie pod ręką podczas dostarczania oprogramowania (chociaż faktycznie nie dostarczają oprogramowania, a raczej dają Go) Mam powiedziano mi również, że rola ta obejmuje pewne prace związane z rozwojem oprogramowania (co jest ważne dla mnie, jako programisty w sercu!) – czy istnieje tworzenie oprogramowania konkretnie związane z rolą Software Delivery Manager, czy jest to bardziej prawdopodobne, że będzie to tylko przypadek pomaganie zespołowi, gdy brakuje czasu?


title: Dlaczego DRY jest ważne?

text: Całkiem proste, dlaczego miałbym chcieć pisać kod, który działa we wszystkich przypadkach i skalowalnych danych, kiedy wszystko, co muszę zrobić, to powtórzyć ten sam proces kilka razy z kilkoma drobnymi poprawkami? Prawdopodobnie w najbliższym czasie nie będę musiał tego ponownie edytować. Wygląda na to, że wystarczy przejść o wiele mniej pracy... function doStuff1(){/*.a.*/} function doStuff2(){/*.b.*/} function doStuff3(){/*.c. */} A jeśli kiedykolwiek będę musiał coś dodać... function doStuff4(){/*.d.*/} A jeśli muszę to usunąć, to usuwam. Trudniej jest wymyślić, jak połączyć to wszystko w jeden prosty wzorzec, do którego mogę po prostu wprowadzać dane i radzić sobie ze wszystkimi przypadkami, a także wprowadzać wiele zmian, których nie wydaje mi się, że kiedykolwiek będę miał do zrobienia. Po co być DRY, skoro wygląda na to, że szybkie cięcie + wklejanie będzie o wiele mniej pracy?


title: Przejście do Pythona (SciPy i NumPy) do obliczeń naukowych

text: Po prostu przeczytaj prezentację na temat używania Pythona do obliczeń naukowych. Obecnie używam MATLAB (licencja studencka FTW, która wygaśnie, gdy wkrótce ukończę studia). Zastanawiałem się więc **jak dojrzałe są SciPy i NumPy, jeśli chodzi o poleganie na nich przy wszystkich obliczeniach naukowych**, które muszę wykonać. Zaletą jest to, że to nic nie kosztuje. Skupiam się głównie na przetwarzaniu sygnału, dźwięku, akustyce. Wyobrażam sobie, że projekty NumPy i SciPy ewoluują pod względem obsługi bardziej złożonych technik. Więc **jak szybko się rozwijają**, czy stoją za nimi duże społeczności? Wreszcie, **czy istnieją inne rozwiązania**?


title: Potencjał Pythona do zastosowań naukowych?

text: Jestem początkującym programistą. Hobbystycznie uczę się Pythona. Jednak po przeczytaniu kilku rzeczy, dotyczących na przykład jego szybkości, ponownie zadałem sobie pytanie, czy naprawdę powinienem nauczyć się Pythona, czy nauczyć się innego trudniejszego języka. Uczę się nauk ścisłych w szkole, interesuję się fizyką i mikrokontrolerami, więc język mądry do wydajności byłby potrzebny na przykład do obliczeń obliczeniowych i tak dalej. Więc prawdopodobnie język taki jak C lub C++ byłby bardziej przydatny z punktu widzenia przyszłego stopnia uniwersyteckiego. Moje pytania brzmią więc: * Widziałem, że Python jest językiem interpretowanym, a więc wolniejszym (do 100 razy z C++, z tego, co przeczytałem na Stack Overflow, a to dużo). Czy nie można go tak skompilować, że nie jest potrzebny interpreter i ma dużą szybkość? (jak C) Mam na myśli to, co robi tłumacz, czyż nie? * Czy Python ma szansę być przydatny w nauce? Jak może przewyższyć brak prędkości? * Czy nie ma możliwości napisania programu w Pythonie i przetłumaczenia go na C++ w celu skompilowania? Dlatego masz proste pisanie w Pythonie i szybkość C++? Czy są jakieś translatory z Pythona na C++?


title: Czy piszesz dokumentację w języku innym niż angielski?

text: Kilka miesięcy temu przeprowadziłem się do Niemiec. Biorąc kilka projektów na własną rękę, miałem ostatnio okazję rozwijać się w firmowym frameworku, który był bardzo dobrze udokumentowany, ale w języku niemieckim. Mój niemiecki jest całkiem niezły, ale brakuje mi trochę terminologii programistycznej. Krótko mówiąc, zastanawiałem się, jak powszechne jest dokumentowanie kodu w języku innym niż angielski? Przykro mi, że wydaje mi się, że angielski jest skoncentrowany, ale wydaje się, że to zły nawyk.


title: Jakie jest dobre IDE do programowania JavaScript po stronie klienta?

text: Niedawno zacząłem uczyć się JavaScript i szukam dobrego edytora JavaScript/IDE. Znalazłem ich dziesiątki w wyszukiwarce Google, ale byłbym wdzięczny, gdyby użytkownicy, którzy mają doświadczenie w korzystaniu z takiego IDE, mogli je polecić. Chcę IDE z **podświetlaniem składni** , prawdopodobnie **IntelliSense** i **obsługą debugowania** dla kodu JavaScipt. Jestem użytkownikiem **Windows 7** i zajmuję się tylko **klientem** programowaniem JavaScript. Jakieś sugestie??


title: Co to jest błąd niesprawdzony?

text: Jestem studentem studiów licencjackich na kierunku Informatyka. Kiedy próbowałem zgłaszać błędy w kilku projektach, często natrafiałem na klasyfikację _niezweryfikowany_. Wyszukiwarka internetowa tak naprawdę nie wyjaśniła, co to oznacza. Czy możesz mi powiedzieć, co to jest błąd niesprawdzony?


title: Czy są jakieś zalety używania oddzielnych RDBMS do raportów?

text: Moja produkcyjna baza danych to SQL Server 2008 R2 Express. Ma ograniczone funkcje i testuję go w środowisku produkcyjnym. Aby lepiej obsługiwać zapytania raportujące w wysoce współbieżnym środowisku, chcę użyć dowolnego RDBMS o otwartym kodzie źródłowym z tabelami, które będą działały jako tabele tymczasowe, aby często wypełniać ostatnie rekordy i usuwać je po użyciu. Jedynym problemem jest to, że muszę utrzymywać dwa połączenia dla każdego RDBMS, ale czuję, że Firebird lub PostgreSQL mogą zapewnić mi lepszą wydajność raportów w wysoce współbieżnym środowisku. Jakie są twoje sugestie? Czy to podejście jest stosowane w jakimkolwiek scenariuszu komercyjnym?


title: Czy Agile ma zastosowanie również w firmach zajmujących się opracowywaniem produktów?

text: Poniższe zasady rozwoju Agile sprawiają, że Agile jest przeznaczone głównie dla firm usługowych: * Zadowolenie klienta dzięki szybkiemu dostarczaniu użytecznego oprogramowania * Mile widziane zmieniające się wymagania, nawet na późnym etapie rozwoju * Działające oprogramowanie jest dostarczane często (tygodnie, a nie miesiące) * Działające ściśle z klientem. Często wiąże się to z udziałem przedstawiciela klienta w zespole programistycznym. * Rozmowa twarzą w twarz jest najlepszą formą komunikacji (kolokacja) Moje pytanie brzmi: Czy Agile jest przeznaczone wyłącznie dla firm zorientowanych na usługi, czy nawet firmy rozwijające produkty (w tym firmy internetowe) korzystają z technik Agile?


title: Ile lat jest „za stary”?

text: Powiedziano mi, że aby być traktowanym poważnie jako kandydat do pracy, powinienem usunąć lata odpowiedniego doświadczenia z mojego CV, usunąć rok, w którym uzyskałem stopień naukowy, lub jedno i drugie. Albo nawet nie zawracać sobie głowy aplikowaniem, bo nikt nie chce zatrudnić starszych od nich programistów1. Albo żebym założył firmę nie dlatego, że chcę, albo dlatego, że mam produkt, na którym mi zależy, ale dlatego, że w ten sposób mogę uzyskać pracę, jeśli/kiedy moja firma zostanie przejęta. Albo że powinienem bardziej skupić się na zadaniach kierowniczych (co z powodzeniem wykonywałem w przeszłości), ponieważ… cóż, nie potrafili tego wyjaśnić, z wyjątkiem tego, że w pewnym wieku jesteś przegrany, jeśli… nadal piszę kod. Ale lubię pisać kod. Widziałeś to? Czy to tylko problem lokalny (północna Kalifornia)? Jeśli kiedykolwiek zatrudniałeś programistów:2 * Z życiorysów, które otrzymałeś, ile lat miał najstarszy kandydat? * Jaki był wiek najstarszej osoby, z którą rozmawiałeś? * Ile lat (w momencie zatrudnienia) miała najstarsza zatrudniona osoba? Ile lat jest „za stary” na zatrudnienie jako programista? 1 Zakładam, że wszyscy kandydaci mają równoważne odpowiednie doświadczenie. Nie chodzi o to, że ktoś z trzydziestoletnim stażem w języku COBOL stara się o pracę jako guru Java. 2 Tak, wiem, że (przynajmniej w USA) nie należy pytać, ile lat ma wnioskodawca. Z mojego doświadczenia wynika jednak, że ogólny pomysł można uzyskać z CV.


title: Kwestionuję wybór edukacji, bo mówią, że nie ma miejsca dla starych programistów

text: > **Możliwy duplikat:** > Ile lat to „za stary”? Niedługo zacznę CS w przyszłym roku. Uwielbiam zarówno kodowanie, jak i matematyczne aspekty programowania. Jednak ostatnio spotkałem się z wieloma tyradami o tym, że nie można być programistą po 45 roku życia, chyba że jesteś na stanowisku kierowniczym lub zajmujesz bardzo konkretną niszę. Jakakolwiek rada? Poważnie kwestionuję mój wybór kariery tutaj i byłbym wdzięczny za wkład.


title: Czy deweloper może rozpocząć karierę w szybkim tempie w późniejszym życiu?

text: > **Możliwy duplikat:** > Ile lat to „za stary”? Większość programistów, których znam, bardzo mocno naciskała na początku swojej kariery, a potem może zwolniła około 10 do 15 lat, aby się ożenić i założyć rodzinę. Nie. Miałem rodzinę na początku mojej kariery, wiedząc, że dzieci są dla mnie ważniejsze niż moja kariera. Będę po czterdziestce, kiedy moje dzieci pójdą na studia, i wydaje mi się, że będę w stanie wykorzystać przerwę w moich obowiązkach i przejść do przodu na poziomie doświadczenia, na którym tak wielu programistów zwalnia, by wydawać więcej czas z rodzinami. Jednak zastanawiam się też, czy wysiłek opłaci się tak późno w życiu. Szczególnie martwię się o age-izm, szczególnie jako kobieta w rozwoju. Kobiety są silniej dotknięte przez wiek wiekowy w większości zawodów, a rozwój wydaje się być znacznie bardziej nastawiony na młodość niż w większości dziedzin. Wiem również, że kobiety, które zajmują się tworzeniem oprogramowania, prawdopodobnie odejdą z tej dziedziny w wieku od 35 do 40 lat, chociaż zastanawiam się, czy jest to bardziej związane z opóźnieniem rodzenia dzieci w tej dziedzinie. Czy starszy programista może czerpać te same korzyści z intensywnej pracy, co młodsi programiści? A może będę automatycznie postrzegany jako „stabilny” i „znużony” w tym wieku, niezależnie od tego, czy interesuje mnie pójście naprzód i poświęcenie dużej ilości czasu na karierę, gdy dzieci dorosną? Czy lepiej byłoby zaplanować rozpoczęcie własnej działalności gospodarczej w tym czasie, jeśli chcę dokonać dużej inwestycji w swoją karierę i mieć to (finansowo) opłacalne? ETA: Małe wyjaśnienie: spodziewam się, że będę pracować od teraz do tego czasu i rozwijać się w pracy. Więc w tym wieku byłbym bardzo starszym SDETem. Nie spodziewam się, że w tym momencie będę miał kłopoty ze znalezieniem pracy; moje pytanie dotyczy bardziej wspinania się po drabinie, aby uzyskać awanse i podwyżki płac. Widzę pracę, jaką wykonuje wiceprezes ds. technologii i wygląda na zabawną – ale dotarł do tego punktu, szybko podnosząc się na początku swojej kariery. Czy mogę osiągnąć taki sam wzrost w dalszej karierze? A może ograniczę się do tempa wzrostu na stanowisku, które osiągnę w mojej wcześniejszej karierze?


title: Czy warto używać goto?

text: Goto jest prawie powszechnie odradzany. Czy warto korzystać z tego stwierdzenia?


title: Jakie są argumenty przeciwko analizowaniu sposobu Cthulhu?

text: Przydzielono mi zadanie wdrożenia języka specyficznego dla domeny dla narzędzia, które może stać się dość ważne dla firmy. Język jest prosty, ale nie trywialny, umożliwia już zagnieżdżone pętle, łączenie ciągów itp. i jest praktycznie pewne, że inne konstrukcje zostaną dodane w miarę postępu projektu. Z doświadczenia wiem, że ręczne pisanie leksera/parsera – chyba że gramatyka jest banalna – jest procesem czasochłonnym i podatnym na błędy. Zostały mi więc dwie opcje: generator parserów à la yacc lub biblioteka kombinatorowa, taka jak Parsec. To pierwsze też było dobre, ale wybrałem to drugie z różnych powodów i zaimplementowałem rozwiązanie w funkcjonalnym języku. Wynik jest dla mnie spektakularny, kod jest bardzo zwięzły, elegancki i czytelny/płynny. Przyznaję, że może to wyglądać trochę dziwnie, jeśli nigdy nie programowałeś w niczym innym niż java/c#, ale wtedy dotyczyłoby to wszystkiego, co nie zostało napisane w java/c#. Jednak w pewnym momencie zostałem dosłownie zaatakowany przez współpracownika. Po szybkim spojrzeniu na ekran stwierdził, że kod jest niezrozumiały i że nie powinienem na nowo wymyślać parsowania, tylko używać stosu i String.Split, tak jak wszyscy. Narobił dużo hałasu i nie mogłem go przekonać, częściowo dlatego, że zostałem zaskoczony i nie miałem jasnego wyjaśnienia, częściowo dlatego, że jego opinia była niezmienna (gra słów nie zamierzona). Zaproponowałem nawet, że wyjaśnię mu język, ale bezskutecznie. Jestem przekonany, że dyskusja pojawi się ponownie przed zarządem, więc przygotowuję solidne argumenty. **To kilka pierwszych powodów, które przychodzą mi do głowy, aby uniknąć rozwiązania opartego na String.Split:** * potrzebujesz wielu instrukcji, aby poradzić sobie ze specjalnymi przypadkami, a rzeczy szybko wymykają się spod kontroli * wiele zakodowanych na sztywno indeksów tablicowych sprawia, że konserwacja bolesne * bardzo trudne do obsługi rzeczy, takich jak wywołanie funkcji jako argument metody (np. add( (dodaj a, b), c) * bardzo trudne do dostarczenia sensownych komunikatów o błędach w przypadku błędów składniowych (bardzo prawdopodobne) * I Jestem za prostotą, przejrzystością i unikaniem niepotrzebnych sprytnie zagadkowych rzeczy, ale uważam również, że błędem jest ogłupianie każdej części bazy kodu, aby nawet burger flipper mógł to zrozumieć.To ten sam argument, który słyszę, by nie używać interfejsów , nieprzyjmowanie separacji obaw, kopiowanie-wklejanie kodu, itp. Do pracy nad projektem oprogramowania wymagane są jednak minimum kompetencji technicznych i chęci do nauki. a rozpoczęcie wojny nie idzie komukolwiek pomóc) **Jakie są twoje ulubione argumenty przeciwko parsowaniu metodą Cthulhu?*** *oczywiście, jeśli przekonasz mnie, że ma rację, też będę całkowicie szczęśliwy


title: Kiedy łączysz się z interfejsem API innej firmy, co może sprawić, że rzeczy będą trudne?

text: Ponowne wykorzystanie komponentów w tworzeniu oprogramowania jest zawsze ujawniane przez API. Większość produktów w dzisiejszym świecie (takich jak Facebook, Google, .Net, JDK, ...) udostępnia interfejsy API do ponownego wykorzystania ich komponentów bez konieczności kodowania od samego początku. Również API zapewniają ogromną abstrakcję wysokiego poziomu dla leżących poniżej komponentów. Moje pytanie dotyczy użyteczności tych interfejsów API. Oczywiście we wszystkich API są Przeszkody. Przeszkodą mogą być * zestawy umiejętności, * zasoby, * dokumentacja API * samo API. Co według programistów jest prawdziwą przeszkodą? Wymień kilka swoich opinii. Aby zakwestionować to tutaj: Jako programista zbadałem przeszkody podczas korzystania z zewnętrznych API, jednym z nich jest Highcharts. Chociaż mam mocne strony, dlaczego biblioteki Highchart są świetne w porównaniu z innymi bibliotekami wizualizacji JavaScript (nie porównując ich z interfejsami API wizualizacji Google), na samym początku zagubiłem się w użyteczności wykresów. Rzeczywiście, ich forum wsparcia jest dobre, aby uzyskać odpowiedzi na pytania. Deweloperzy korzystający z API - przez większość czasu - nie rozumieją (czasami nie muszą) intencji projektowych API, projektu architektonicznego i decyzji podejmowanych podczas rozwoju API. Jakie będą Twoje sugestie, aby stworzyć lepsze API, które dotrze do dużego grona programistów? Nie jestem do końca pewien tarcia związanego z nauką nowych API. PS: To może nie być konstruktywna odpowiedź. Ale jestem pewien, że komunikuję się z prawdziwymi programistami na tej stronie.


title: Co muszę wiedzieć o Agile, aby przebić się przez agenta rekrutacyjnego?

text: Aktualnie szukam nowej pracy. Jestem programistą serwera c#/SQL, ale nigdy nie pracowałem w środowisku agile. Jestem w Wielkiej Brytanii, gdzie bardzo niewielu pracodawców (IT) ogłasza się bezpośrednio, ale zamiast tego korzysta z agencji rekrutacyjnych. Problem, jaki mam, polega na tym, że wielu agentów ma niewielkie lub żadne pojęcie o umiejętnościach, do których starają się rekrutować. Agile, jako najnowsze modne hasło, pojawia się jako „absolutny wymóg” w wielu ofertach pracy. Rozmawiałem już dzisiaj z kilkoma agentami, którzy wierzą, że jest to jakiś rodzaj języka programowania, a nie metodologia programowania. Wygląda na to, że będę musiała powiedzieć kilka białych kłamstw, aby moje CV trafiło w ręce potencjalnych pracodawców. Czy ktoś może zasugerować źródło podstaw Agile, abym mógł przynajmniej brzmieć przekonująco do agenta.


title: Co to jest mikroframework?

text: Dlaczego niektóre frameworki (np. Flask dla Pythona, Sinatra dla Ruby) są nazywane microframeworks? Co odróżnia je od pełnoprawnych frameworków, takich jak Django czy Rails?


title: Używanie abstrakcyjnych metod do wymuszenia na podklasach definiowania wartości dla pól składowych

text: Często w moich projektach definiuję abstrakcyjną nadklasę, której podklasy będą się różnić głównie pod względem wartości dla pól zdefiniowanych w nadklasie. Na przykład, w grze, którą rozwijam, jest klasa abstrakcyjna `Rakieta` z wieloma podklasami. Każda z nich definiuje inną wartość dla zmiennych składowych, takich jak `MAX_SPEED`, `MASS`, `FLYING_FORCE`, które są następnie używane w obliczeniach wykonywanych w superklasie. Używam abstrakcyjnych metod w `Rakietach` aby wymusić definiowanie tych zmiennych przez jego podklasy. Na przykład mam po prostu abstrakcyjną metodę `defineMass()`, która wymusza na podklasach zdefiniowanie własnej wartości masy. Innym przykładem może być moja klasa `Entity` (nadklasa wszystkich klas gier) definiująca abstrakcyjną metodę `loadImage()`, która zmusza podklasy do samodzielnego definiowania obrazu. Czy to dobra praktyka? Czy to powszechne?


title: Funkcjonalne strategie programowania w językach imperatywnych

text: Od jakiegoś czasu jestem przekonany, że niektóre strategie w programowaniu funkcjonalnym lepiej nadają się do wielu obliczeń (np. niezmienność struktur danych). Jednak ze względu na popularność języków imperatywnych jest mało prawdopodobne, abym zawsze pracował nad projektami, które są funkcjonalnie zaimplementowane. Wiele języków (Matlab, Python, Julia) obsługuje paradygmat funkcjonalny, ale w wielu przypadkach wydaje się, że jest to przyczepione (patrząc na ciebie, anonimowe funkcje w Matlab). Biorąc to pod uwagę, jakie są funkcjonalne metody i strategie, których mogę używać nawet w kodzie OOP/imperatywnym? Jak mogę napisać solidny kod funkcjonalny, który nie dopuszcza skutków ubocznych nawet w językach, które mają zmienne stany i zmienne globalne?


title: Alternatywy dla Octopus do wdrażania aplikacji .NET?

text: Nasz sklep posiada serwer TeamCity, który produkuje pakiety wdrożeniowe. Pakiety to aplikacje internetowe ASP.NET, usługi systemu Windows lub różne pliki binarne (które po prostu są kopiowane gdzieś do sieci). Wszystkie pakiety są prostymi plikami zip. To wszystko działa dobrze, ale w tej chwili proces wdrażania wymaga ręcznego rozpakowania pakietu przez programistę i skopiowania go we właściwe miejsce, uruchomienia/zatrzymania usług Windows, jeśli to konieczne, radzenia sobie z procesami synchronizacji w celu wypychania plików na wszystkie serwery w farmie internetowej, itp. Pracuję nad znalezieniem najlepszego sposobu na zautomatyzowanie tego wszystkiego. Pojawiło się nowe narzędzie o nazwie Octopus, które wydaje się być dokładnie tym, czego potrzebujemy. Jednak z różnych powodów (koszt, niedojrzałość produktu) nie możemy go używać. Na drugim końcu spektrum oczywiście mógłbym to wszystko napisać za pomocą MSBuild. Ale jakie mam inne opcje? Czy istnieją narzędzia podobne do Octopus? Czy istnieją odpowiedniki open source? Jak rozwiązują to inne sklepy?


title: Nie znam C. A dlaczego mam się tego uczyć?

text: Moim pierwszym językiem programowania był PHP ( ** _gasp_** ). Potem zacząłem pracować z JavaScriptem. Ostatnio wykonałem pracę w C#. Nigdy nie spojrzałem na języki niskiego lub średniego poziomu, takie jak C. Ogólny konsensus w społeczności programistów jest taki, że „programista, który nie nauczył się czegoś takiego jak C, szczerze mówiąc, po prostu nie radzi sobie z koncepcjami programowania jak wskaźniki, typy danych, przekazywanie wartości przez odniesienie itp." Nie zgadzam się. Twierdzę, że: 1. Ponieważ języki wysokiego poziomu są łatwo dostępne, więcej "nie-programistów" nurkuje i robi bałagan 2. Aby naprawdę zrobić cokolwiek w języku wysokiego poziomu, trzeba zrozumieć te same podobne pojęcia, które większość zwolenników ewangelizacji „najpierw niski poziom nauki”. Niektórzy ludzie muszą znać C; ci ludzie mają pracę, która wymaga od nich pisania kodu od niskiego do średniego poziomu. Jestem pewien, że C jest niesamowite i jestem pewien, że jest kilku złych programistów, którzy znają C. Dlaczego stronniczość? Jako dobry, uczciwy, głodny programista, gdybym miał nauczyć się C (z jakiegoś nieprzewidzianego powodu), nauczyłbym się C. Biorąc pod uwagę mnogość języków, czy dobrzy programiści nie powinni skupiać się na nauce tego, co nas rozwija? Czy nie powinniśmy dowiedzieć się, co nas interesuje? Czy nie powinniśmy wykorzystywać naszego skończonego czasu, posuwając się do przodu? Dlaczego niektórzy programiści się z tym nie zgadzają? Uważam, że dążenie do doskonałości w tym, co robisz, jest podstawową cechą deterministyczną między dobrymi i złymi programistami. Czy ktoś ma jakieś rzeczywiste przykłady tego, jak coś napisane w języku wysokiego poziomu — powiedzmy Java, Pascal, PHP lub Javascript — naprawdę skorzystało z wcześniejszej znajomości języka C? Przykłady byłyby najbardziej mile widziane.


title: Po co uczyć się więcej języków programowania?

text: > **Możliwy duplikat:** > (Dlaczego) Czy powinienem nauczyć się nowego języka programowania? W tym artykule natknąłem się na wiersz, który brzmi: > Ucz się jednego języka programowania każdego roku Dlaczego dobrzy programiści sugerują, aby uczyć się więcej języków programowania . W tym przypadku możemy być waletem wszystkich i mistrzem niczego.


title: (Dlaczego) Czy powinienem nauczyć się nowego języka programowania?

text: Jestem dość biegły w Javie, C/C++, JavaScript/jQuery i przyzwoicie dobry w Objective-C. Jestem dość produktywny z językami i odpowiadającymi im frameworkami i tworzę systemy na poziomie korporacyjnym (a także te na małą skalę) z wystarczającą łatwością, jednocześnie utrzymując kod "czysty" i łatwy w utrzymaniu (tak, mogę przeczytać własny kod po sześciu miesięcy :) O ile nie jest to wymagane przez platformę (iPhone, iPad itp.) lub przez klienta/organizację wdrożeniową, tylko „dlaczego” mam uczyć się nowego języka programowania? Dla żartu"? I co z tą zabawą, jeśli nie zamierzam z nią robić nic wartościowego? Wielu moich rówieśników jest gotowych do nauki „następnej nowej rzeczy/języka” i jest to zwykle Python, Ruby lub PHP (wymienię tylko kilka popularnych). Teraz sama znajomość języka jest daremna IMHO. Musisz również znać frameworki, nauczyć się ich użycia/interfejsów API, a także „dobrych praktyk implementacyjnych” itp. Czy z punktu widzenia „ekonomicznego” jest jakaś korzyść z nauki nowego języka programowania? Jeśli język jest nauczony w szybki i brudny sposób, prawdopodobnie będzie również używany do szybkiego i brudnego prototypowania/implementacji - ale nie uważam tego za uzasadnioną inwestycję czasu/wysiłku. Dlaczego więc powinienem (lub ktokolwiek inny) uczyć się nowego języka programowania innego niż „to fajnie, więc wypróbujmy go” – jeśli inwestycja czasu może nie być tego warta na dłuższą metę?


title: Czy C jest językiem, którego programista musi się nauczyć?

text: > **Możliwy duplikat:** > Nie wiem C. A dlaczego mam się tego nauczyć? Programowanie zaczynam od Javy i uczyłem się PHP. Ponadto dzięki pracy nauczyłem się Objective-C. Ale większość programistów uczy się od C. Czy zatem jest to konieczne, aby programista nauczył się C? Jeśli tak, jakie to ważne? Proszę zostawić swoje komentarze, dzięki.


title: Dlaczego nadal potrzebujemy C w zakresie programowania dla modułów programowania wysokiego poziomu?

text: > **Możliwy duplikat:** > Nie wiem C. A dlaczego mam się tego nauczyć? Byłem trochę niezręczny w kodowaniu w C, chociaż trochę go znam. Lubię Javę i C#. Powodem, dla którego lubię kodować z nimi, jest lepsze tworzenie aplikacji GUI. W C trudno jest kodować, aby uzyskać lepszy wygląd dowolnej aplikacji. Rozumiem, że C jest podstawą wszystkiego. Ale teraz mamy mnóstwo bibliotek, które mogą nam pomóc zrobić wszystko w mgnieniu oka. Ale dlaczego wiele osób nadal koduje w języku programowania C?


title: Czy powinienem nauczyć się C/C++, nawet jeśli chcę tylko programować w sieci?

text: > **Możliwy duplikat:** > Nie wiem C. A dlaczego mam się tego nauczyć? Moim celem jest tworzenie aplikacji internetowych i dynamicznych stron internetowych opartych na bazach danych. Na przykład, jeśli w przyszłości wpadnę na pomysł kolejnego Digga lub Facebooka, chcę sam go zakodować. Myślę, że aby tam dotrzeć, mam w zasadzie dwie ścieżki: ### Ścieżka 1 Zacznij od podstawowego poziomu, ucząc się C, następnie C++ dla OOP, a następnie algorytmów i struktur danych, w celu zdobycia solidnego zrozumienia programowania komputerowego. Dopiero wtedy przejdź na PHP/MySQL/HTTP i zacznij pracować nad praktycznymi projektami programistycznymi. ### Ścieżka 2 Zacznij bezpośrednio od PHP/MySQL/HTTP i od razu ubrudź sobie ręce praktycznymi projektami. Co byście polecili?


title: Java void metody niejawnie zwracające to

text: istnieje kilka dyskusji na SO o metodach ustawiających zwracających "ten" typ. I wygląda na to, że java 7 zaproponowała metody void zwracające to. Ale ta propozycja nie mogła przejść do funkcji Java 7. Nie mogłem znaleźć, czy ta propozycja została przeniesiona do java 8 lub przyszłości, czy została całkowicie odrzucona. Czy to jest? Link ref - Design: Java i zwracanie autoreferencji w metodach ustawiających


title: Dokumentacja z obrazami - jakie jest najbardziej przyjazne dla git podejście?

text: Dokumentując oprogramowanie, tradycyjnie piszę zwykły plik tekstowy (np. README.txt), który działa dobrze, ale niestety nie może zawierać obrazów, takich jak HTML. Niestety obrazy muszą być przechowywane jako osobne pliki z normalnym dokumentem HTML (przy użyciu <a href=".../foo.png">), co powoduje niepotrzebny bałagan. Funkcja "Zapisz pojedynczą stronę internetową" w programie Internet Explorer używa MIME HTML (MHTML), aby zapisać wszystkie zasoby w jednym pliku. Wymóg korzystania z przeglądarki do jej odczytania nie jest w dzisiejszych czasach przeszkodą. Najwyraźniej Opera i Word obsługują bezpośrednio edycję tych dokumentów. Używamy git dla naszego kodu źródłowego, stąd różnice widoczne przez git między dwiema edycjami tego samego dokumentu nie powinny być duże, aby uniknąć niepotrzebnego użycia dysku i nieużytecznych różnic podczas patrzenia na dokument poza edytorem MTHML. Jaki jest najlepszy główny edytor HTML do tworzenia plików MHTML przyjaznych dla git?


title: Czy możemy traktować strukturę systemu plików jako część architektury?

text: Umieść ten obraz w folderze `images`. Wszystkie pliki JavaScript powinny znajdować się w folderze o nazwie `js`. Umieść szablony w folderze o nazwie site-templates, a dla każdego szablonu umieść trzy foldery o nazwach „układy”, „wyglądy” i „strony”. Wszyscy znamy te struktury systemów plików, w których staramy się logicznie i wydajnie kategoryzować pliki i foldery w akceptowalnej hierarchii w naszych projektach. Z drugiej strony, ponieważ wiele razy wykonujemy operacje we/wy na tych plikach, zmiana struktury systemu plików zmusza nas do aktualizacji części naszego kodu, bez względu na to, jak bardzo jest on zaawansowany technologicznie i oddzielony od naszego kodu. Moje pytanie brzmi, czy w oparciu o wpływ, jaki struktura systemu plików ma na cały projekt, możemy uznać go za część architektury oprogramowania? Ponieważ w wielu przypadkach wybranie prawidłowej struktury systemu plików uniemożliwia nam duplikowanie pliku, powiedzmy jQuery, w wielu miejscach.


title: Zmniejsz listę IPv4 do najniższego wspólnego CIDR

text: Mam długą listę adresów IP, które wykazują pewien wzór bliskości Przykład: XX.249.91.16 XX.249.91.21 XX.249.91.32 XX.249.91.160 XX.249.91.165 XX.249.92.15 XX.249.92. 25 XX.249.92.51 XX.249.92.234 a czasami whois ujawnia taki zakres XX.163.224.0 - XX.163.239.255 Chciałbym utworzyć listę CIDR, która daje mi najniższą wspólną liczbę Wygląda na to, że Python już ma coś takiego - iprange_to_cidrs - ale potrzebuję go w JavaScript XX.249.90.0/16 jeśli to by obsłużył XX.249.91.0 - XX.249.92.255 jw XX.163.200.0/nn do obsługi XX. 163.224.0 - XX.163.239.255 Kalkulator, który może zrobić jeden zakres na raz, kiedy bawię się maską, jest tutaj http://www.subnet-calculator.com/cidr.php Moim preferowanym językiem jest JavaScript i ja mają następujący początek, ale potrzebują algorytmu, który dopasuje i przekształci var list = [[1234,"10.249.91.16"], [5678,"10.249.91.21"], [123,"10.249.91.32"], [456,"10.249.91.160"], [789,"10.249.91.165"] , [3456,"10.249.92.15"], [7890,"10.249.92.25"], [1234,"10.249.92.51"], [5432,"10.249.92.234"] ] function dec2bin(ip) { return ip. split(".").map(function(num) { return ("00000000"+parseInt(num,10).toString(2)).slice(-8); }).Przystąp("."); } $(function() { $res = $("#res"); $.each(list,function(_,arr) { $res.append('<br/>'+dec2bin(arr[1]) +" - "+arr); }); }); UPDATE po przejrzeniu odpowiedzi FIDDLE function getDec(ip) { var octet = ip.split("."); return (oktet[0] << 24) | (oktet[1] << 16) | (oktet[2] << 8) | oktet [3]; } var res = document.getElementById("res"); var adr1 = "111.163.224.0"; var adr2 = "111.163.239.255" var XOR = getDec(adr1)^getDec(adr2); // co teraz? Aktualizacja 2: czy wynikiem zakresu 111.163.224.0 - 111.163.239.255 może być `111.163.224.0/20` ? ponieważ mamy 01101111.10100011.11100000.00000000 - 0,111.163.224.0 01101111.10100011.11101111.11111111 - 0,111.163.239.255


title: Czy ktoś z powodzeniem wykorzystał przepływ pracy systemu Windows do mechanizmu reguł biznesowych/walidacji?

text: Zastanawiałem się, czy ktoś z powodzeniem wykorzystał Windows Workflow Foundation do silnika BusinessRules/Validation lub czy znasz jakiś przykładowy kod lub artykuły na ten temat. Jeśli używałeś go wcześniej, co o nim myślisz? Jak to wygląda w porównaniu z innymi systemami BusinessRule/Validation? Myślę o regułach takich jak if (A, B i C) AllowAccess(); Lub jeśli (Wartość między X i Y) zwraca prawdę;


title: Projektowanie sterowane zdarzeniami i separacja logiki core/UI

text: Jestem nowy w programowaniu opartym na zdarzeniach i czuję się zagubiony, gdy próbuję zaimplementować zdarzenia, które powinny przekroczyć granicę core/UI. W moim programie mam następujące (przykład w c#): UI.RuleForm Core.RuleList UI.ResultForm Cell 1 Rule 1 Cell 2 Rule 2 Cell 3 Rule 3 To, czego chcę, to: gdy zmieni się komórka RuleForm, zaktualizuje odpowiednią reguła na liście reguł. A gdy RuleList ulegnie zmianie, resultFrom zostanie przeliczony z reguł. Moja obecna myśl jest taka, że aby zachować logikę rdzenia oddzieloną od logiki interfejsu użytkownika (tj. rdzeń nie powinien nic wiedzieć o interfejsie użytkownika), rdzeń powinien wtedy tylko generować zdarzenia, ale nie przetwarzać zdarzeń generowanych przez innych. Muszę więc stworzyć jakiś rodzaj UI.RuleListWrapper, który może przetwarzać zdarzenia zmiany RuleForm, aktualizując Core.RuleList. RuleList w terminie powinien uruchamiać zdarzenia OnChange, z których może korzystać UI.ResultForm. Podsumowując, moje pytania brzmią: Chcę wiedzieć, czy moje rozumowanie i celowa implementacja jest w porządku, czy nie, co prawdopodobnie oznacza: **czy moduł podstawowy powinien być w stanie przetwarzać zdarzenia generowane przez zewnętrzny interfejs użytkownika** Czy moja separacja jest jakimś rodzajem „myzofobia”, czy też było to zrobione wcześniej. Czy istnieją inne lepsze podejścia?


title: Jaki jest najlepszy sposób na kreślenie wykresów 3D/2D z danymi w czasie rzeczywistym?

text: Przede wszystkim lubię używać Pythona, ponieważ łatwo się z nim pracuje. Nie jestem programistą, więc wolę wszystko, co jest łatwe w użyciu i zrozumiałe. Rozumiem, że programowanie 3D w C/C++ lub cokolwiek innego może być szybsze, ale to wykracza poza mój zakres. Teraz chciałbym stworzyć wykres 3D wielu punktów danych (z sonaru naukowego). Otrzymuję około 5-10 aktualizacji na sekundę, a każda aktualizacja zawiera tysiące punktów. Tak więc rysowanie wykresu 3D musi być szybkie. Poniżej wykresu 3D chcę mieć wykres 2D „widziany z góry”, a po prawej kolejny wykres 2D „widziany z boku”. Oba te wykresy 2D zostaną zaktualizowane w tym samym czasie, co wykres 3D, z taką samą liczbą punktów. W dowolnym momencie będę chciał wstrzymać odtwarzanie danych w czasie rzeczywistym i wybrać punkty z wykresów 2D i wyodrębnić dane z tych punktów. Chciałbym również przedstawić punkty o różnej wielkości i kolorze w zależności od siły celu. W trybie wstrzymanej selekcji pokaż wybór, zmieniając kolor wybranych punktów i/lub sprawiając, że poszczególne punkty migają lub w podobny sposób (zastosuj jednocześnie dwie różne selekcje). Zrobiłem trochę badań i wygląda na to, że En Thought ma kilka fajnych narzędzi. Przede wszystkim Mayavi dla fabuły 3D, a następnie Chaco dla fabuły 2D. Wydaje się, że mają one ładną wbudowaną funkcjonalność wybierania punktów itp. Ale jestem trochę zaniepokojony szybkością kreślenia. Czy są w stanie wykreślić tysiące punktów 5-10 razy na sekundę w czasie rzeczywistym? Może też przegapiłem coś podczas moich badań i istnieją lepsze alternatywy? Np. ile pracy kosztuje kodowanie bezpośrednio dla OpenGL i czy w tym przypadku jest to warte dodatkowego wysiłku? Albo jakiś silnik do gier? Lub matplotlib? Byłbym wdzięczny za każdą radę, jaką mogę uzyskać w tej sprawie. A jeśli jest niezależny od platformy, tym lepiej. Używam zarówno Ubuntu, jak i Windows7.


title: Decyzje dotyczące architektury bazy danych

text: Nie wiem zbyt wiele o bazach danych, więc ostatnio pojawiło się wiele pytań dotyczących architektury. Dwie z tych rzeczy to: 1. Jeśli mam tabelę z wieloma wpisami (prawdopodobnie milionami), jak mogę przyspieszyć zapytania `select`? Myślałem o posortowaniu tabeli alfabetycznie, a następnie podzieleniu jej na dwie części, ale nie wydaje mi się to ułatwiać sprawy. Masz jakieś sugestie? 2. Mam tabelę _user_ i jedną _message_. W _message_ powinienem mieć `sender_id` i `receiver_id`. Z tego co wiem nie mogę zrobić obu _kluczy obcych_ dla _użytkownika_ , więc muszę wybrać jeden z nich. Czy to jednak nie prowadzi do niespójności danych (która, o ile wiem, jest zła)? Jakie jest tutaj właściwe podejście? Nie sądzę, że to ma znaczenie, ale używam MySQL 5.5.


title: Czy iterator ma nieniszczącą umowę dorozumianą?

text: Powiedzmy, że projektuję niestandardową strukturę danych, taką jak stos lub kolejka (na przykład - może to być jakaś inna arbitralnie uporządkowana kolekcja, która ma logiczny odpowiednik metod `push` i `pop` - tj. destrukcyjne metody akcesora). Jeśli implementujesz iterator (w .NET, w szczególności `IEnumerable<T>`) w tej kolekcji, która pojawiała się w każdej iteracji, czy byłoby to złamaniem niejawnego kontraktu `IEnumerable<T>`? Czy `IEnumerable<T>` ma ten niejawny kontrakt? np: public IEnumerator<T> GetEnumerator() { if (this.list.Count > 0) yield return this.Pop(); w przeciwnym razie przerwa plonów; }


title: Jak nawigować i refaktoryzować kod napisany w dynamicznym języku?

text: Uwielbiam to, że pisanie Pythona, Ruby czy Javascriptu wymaga tak mało bodźca. Uwielbiam proste, funkcjonalne konstrukcje. Uwielbiam czystą i prostą składnię. Są jednak trzy rzeczy, w których jestem naprawdę zły podczas tworzenia dużego oprogramowania w dynamicznym języku: * Poruszanie się po kodzie * Identyfikacja interfejsów obiektów, których używam * Efektywna refaktoryzacja Próbowałem prostych edytorów (np. Vim) jak również IDE (Eclipse + PyDev), ale w obu przypadkach czuję, że muszę poświęcić dużo więcej pamięci i/lub stale "grepować" i czytać kod, aby zidentyfikować interfejsy. Jest to szczególnie ważne podczas pracy z dużą bazą kodu z wieloma zależnościami. Jeśli chodzi o refaktoryzację, na przykład zmianę nazw metod, to w dużej mierze zależy to od jakości moich testów jednostkowych. A jeśli spróbuję wyizolować moje testy jednostkowe, „odcinając je” od reszty aplikacji, nie ma gwarancji, że interfejs mojego kodu pośredniczącego pozostanie na bieżąco z obiektem, który stukuję. Jestem pewien, że istnieją obejścia tych problemów. Jak efektywnie pracujesz w Pythonie, Ruby czy JavaScript?


title: Nie pracuję jako programista od trzech lat, odkąd skończyłam studia i chciałabym otrzymać jakąś radę?

text: Ukończyłem studia licencjackie w CS w czerwcu 2009, a następnie podjąłem pracę w pobliżu szkoły, w której powiedzieli mi, że będzie konserwacją strony internetowej. W rzeczywistości była to internetowa obsługa klienta z niewielką ilością pracy na stronie firmy. Po około sześciu miesiącach znudziło mi się to bardzo i postanowiłem wrócić do domu. Desperacko szukałem pracy, żeby móc opłacić czynsz i zacząć spłacać kredyty studenckie. Po sześciu miesiącach poszukiwań znalazłem swoją obecną pracę, w której byłem przez około półtora roku. Mój obecny szef obiecał mi również, że praca będzie polegać na rozwijaniu i utrzymywaniu strony internetowej firmy, ale w końcu zostałem wciągnięty do ponownej obsługi klienta. Właśnie dowiedziałem się, że mój szef ma stronę internetową stworzoną przez znajomego, o której chyba będę proszony o aktualizowanie. Jestem naprawdę nieszczęśliwa w swojej pracy i czuję, że moja edukacja pójdzie na marne. Nie mogę znaleźć żadnych ofert pracy dla studentów studiów CS, którzy nie mają doświadczenia w tworzeniu oprogramowania. A teraz, gdy minęły trzy lata odkąd ukończyłem studia i nadal nie jestem w branży, wygląda na to, że wyglądam naprawdę źle dla pracodawców. Około rok temu zaproponowano mi staż w firmie programistycznej, ale mój narzeczony poprosił mnie, żebym odmówiła, ponieważ byłaby nieopłacana i kończyły nam się pieniądze. Moja obecna praca pochłania tyle czasu i energii, że jestem tak wyczerpana, że ciężko mi pracować nad projektami w domu, a nawet znaleźć czas, aby ubiegać się o nową pracę. Tak więc moje pytanie jest dwojakie: 1. jak przezwyciężyć piętno braku pracy w branży od czasu ukończenia studiów i 2. jak znaleźć pracę CS w tak krótkim czasie, jaki mam. Publikowanie życiorysów i aplikowanie na ogłoszenia o pracę online, pisanie listu motywacyjnego po liście motywacyjnym wydaje się bezużyteczne.


title: Czy metodologia „Software Project Survival Guide” jest zgodna z metodami Agile?

text: Rozważam ponowne przeczytanie doskonałego "Przewodnika przetrwania projektu oprogramowania" Steve'a McConnella i być może zastosowanie go dosłownie w moim następnym projekcie. Uderzyła mnie jednak jedna myśl: książka została napisana w 1998 roku, zanim Scrum i inne zwinne metodologie stały się popularne. Czy nauki zawarte w tej książce są nadal aktualne w świetle nowszych metodologii? Czy są kompatybilne? Jeśli to drugie, czy masz jakieś doświadczenie w zwinnych projektach prowadzonych zgodnie z książkami McConnella?


title: Czy możesz użyć w programie 2 modułów Pythona wydanych na licencji LGPL i BSD?

text: Tworzę program do rysowania jako mój pierwszy program open source tylko po to, by poznać smak społeczności open source. Do stworzenia wspomnianego programu używam Pythona 2.7. Używam następujących modułów: 1. EasyGUI 0.96 - Na licencji 3-klauzulowej BSD 2. Pygame 1.9.1 - Na licencji LGPL 2.1 Zamierzam tylko stworzyć program używający tych modułów, które są od niego zależne, i prześlij go do publicznego repozytorium GitHub, aby inni mogli swobodnie modyfikować i rozpowszechniać. _Jeżeli_ używanie mojego kodu jest dozwolone w oprogramowaniu z zamkniętym kodem źródłowym lub inne osoby mogą czerpać zyski, nie chcę tego. Nie chcę też modyfikować samych Pygame ani EasyGUI. Wystarczy je zapewnić, aby uruchomić oprogramowanie. Czy jest to możliwe dzięki dwóm wymienionym powyżej licencjom? Jeśli miałbym to zrobić, na jakiej licencji musiałbym wydać swój program i dlaczego? Czy niektóre wybory są lepsze niż inne? Czy możliwe jest również wydanie kodu mojego programu do rysowania na zasadzie wzajemnej licencji, aby osoby, które wnoszą wkład, odesłały swoje poprawki błędów w moim skrypcie?


title: Czy szczegółowe wymagania dotyczące stylu są nieodpowiednie ze strony marketingu?

text: Pracuję po stronie interfejsu użytkownika projektu, który jest intensywnie analizowany przez naszą grupę ds. marketingu. Przez większość czasu sprawdzamy wymagania dotyczące funkcjonalności. Jednak od czasu do czasu będą bardzo dogłębnie omawiać kolory, style itp. Na przykład dział marketingu zlecił mi, aby jeden konkretny przycisk miał bardzo konkretny kolor i bardzo konkretny rozmiar. W innych projektach Pracowałem nad tym jednak, tego typu wymagania zostały po cichu zignorowane lub odrzucone, gdy pochodziły z marketingu. Menedżerowie i liderzy techniczni nalegali, aby marketing nie określał szczegółów, takich jak kolory, style, układy kontrolek itp., ale nigdy tak naprawdę nie powiedziano mi _dlaczego_. Czy marketing nie powinien zawierać szczegółowych wymagań dotyczących stylu interfejsu użytkownika, w tym kolorów, odcieni, układu, rozmiarów itp.? Jeśli tak, dlaczego? Czy to tylko przypadek sprzecznych filozofii dotyczących obowiązków marketingowych? (Prawdopodobnie powinienem wspomnieć, że nie pracujemy z ujednoliconym przewodnikiem stylu dla aplikacji ogólnofirmowych. W przeszłości inne projekty, nad którymi pracowałem, „skrzydlały” podczas tworzenia interfejsów użytkownika.) * * * **Edytuj :** Usunąłem komentarz redakcyjny, który prawdopodobnie sugerował, że ten post jest skargą zawartą w pytaniu. Nie interesuje mnie to, co powinienem _zrobić_ , ale raczej chciałbym lepiej zrozumieć, jaka jest odpowiedzialność marketingu w odniesieniu do tego typu wymagań. Miałem bardzo mało kontaktu z marketingiem (byłem od nich bardziej zdystansowany w poprzednich projektach) i nie rozumiem ich roli, ponieważ dotyczy stylizacji interfejsu użytkownika.


title: Dlaczego `main` nie może zwrócić double lub String zamiast int lub void?

text: W wielu językach, takich jak C, C++ i Java, metoda/funkcja `main` zwraca typ `void` lub `int`, ale nie `double` czy `String`. Jakie mogą być tego przyczyny? Wiem trochę, że nie możemy tego zrobić, ponieważ `main` jest wywoływany przez bibliotekę uruchomieniową i oczekuje pewnej składni, takiej jak `int main()` lub `int main(int,char**)`, więc musimy się trzymać do tego. Więc moje pytanie brzmi: dlaczego `main` ma sygnaturę typu, którą ma, a nie inną?


title: Czy opłaca się testowanie jednostkowe lub programowanie sterowane testami?

text: Mój zespół w pracy przenosi się do Scrum, a inne zespoły zaczynają wykonywać programowanie oparte na testach z wykorzystaniem testów jednostkowych i testów akceptacji użytkownika. Podoba mi się UAT, ale nie jestem sprzedawany na testach jednostkowych do programowania sterowanego testami lub ogólnie do programowania sterowanego testami. Wygląda na to, że pisanie testów to dodatkowa praca, daje ludziom wsparcie podczas pisania prawdziwego kodu i często może nie być skuteczne. Rozumiem, jak działają testy jednostkowe i jak je pisać, ale czy ktoś może stwierdzić, że to naprawdę dobry pomysł i wart wysiłku i czasu? Czy jest coś, co sprawia, że TDD jest szczególnie dobre dla Scruma?


title: Przekonywanie moich współpracowników do korzystania z Hudson CI

text: Jestem naprawdę świadomy pewnych korzyści z używania Hudsona jako serwera CI. Ale mam problem, aby przekonać moich współpracowników do zainstalowania i używania go. W pewnym kontekście opracowujemy dwa różne produkty (jeden to wyszukiwarka korporacyjna oparta na Apache Solr) oraz kilka projektów wyszukiwania korporacyjnego. Mamy do czynienia z wieloma problemami z wersjonowaniem i myślę, że Hudson rozwiąże ten problem. Kłócili się o jego produktywność i krzywą uczenia się Jakie korzyści Hudson byś zauważył?


title: Jak często używane są jQuery DataTables i jakie są alternatywy?

text: Robię trochę pracy nad projektem, który używa jQuery DataTables. Nigdy wcześniej nie korzystałem z tego konkretnego rozszerzenia jQuery. W przeszłości korzystałem z kontrolki ASP.net DataGrid, która oczywiście nie jest dostępna w ASP.net MVC. Użyłem również siatki interfejsu Telerik Kendo, która jest droga. Zastanawiałem się, jak powszechnie używane są jQuery DataTables w Internecie (zwłaszcza z ASP.net MVC) i jakie inne technologie są używane do zastąpienia wcześniej wszechobecnego DataGrid ASP.net.


title: Czy istnieje trend na wieloplatformowe zestawy narzędzi GUI?

text: Jaki jest obecnie trend w korzystaniu z **wieloplatformowych** frameworków GUI? Czy więcej osób zaczyna korzystać z platform wieloplatformowych (takich jak GTK+, Qt i wxWidgets), czy może więcej osób korzysta z bardziej powiązanych platform (np. Cocoa lub WPF)? Czy jest mniej lub bardziej stagnacja? Czy to jak kolejka górska? Jak myślisz, jaki będzie trend, powiedzmy, za 5 lat? Krajobraz systemów operacyjnych zmienia się wraz z mniejszą liczbą osób korzystających z systemu Windows (obserwacja osobista). Powinno to zwiększyć popyt na wieloplatformowe zestawy narzędzi, prawda? Edycja: Ponadto, które (międzyplatformowe) zestawy narzędzi rozwijają się najbardziej, jeśli tak?


title: Czy aplikacje webowe są ograniczone ilością pamięci lub szybkością serwera bazy danych po stronie serwera?

text: Wiele witryn internetowych w większości wykonuje tylko operacje CRUD (tworzenie, odczytywanie, aktualizowanie, usuwanie) w bazie danych dla różnych adresów URL. Załóżmy, że mamy rozwiązanie trójwarstwowe z serwerem bazy danych na serwerze dedykowanym i serwerem WWW na innym serwerze. To pytanie nie dotyczy serwera bazy danych, ale serwera WWW. Serwer sieciowy używa zawartości dynamicznej, więc wykonuje kod dla każdego żądania i komunikuje się z serwerem bazy danych. Jakie powinny być ograniczenia serwera WWW, jeśli aplikacje internetowe nie są obciążane obliczeniami przy dużym obciążeniu? Czy aplikacja webowa nie powinna być ograniczona szybkością serwera bazy danych? czy jest ograniczona ilością pamięci? Przy dzisiejszych szybkościach procesorów nie sądzę, że ograniczeniem jest szybkość procesorów serwerów WWW. W przypadku serwerów internetowych z treściami statycznymi, takich jak Nginx i Lighttpd, serwer internetowy prawie zawsze zużywa bardzo mało pamięci i jest ograniczony szybkością we/wy dysku. Ale jak to jest w przypadku treści dynamicznych?


title: Zawiera wiele plików JS, jeden łamie wszystko, inteligentne podejście do naprawy?

text: Robię projekt, który używa svg-edit (narzędzie do rysowania JS), a strona się rozrasta. Do tej pory na stronie znajduje się około 20 plików JS - wtyczki i tak dalej. Jeden z plików edytora ma coś w rodzaju „Uncaught TypeError”, ale jest skompresowany i nie może nic zrozumieć. Użyłem kilku wtyczek jquery, które są ważne dla użyteczności strony i nie ma możliwości usunięcia żadnej z nich. Oczywiście są poważne konflikty, ale nie mogę przepisać żadnej z wtyczek. Jakieś sprytne podejście, aby to naprawić? Gdzie mogę zacząć?


title: Czy nieuczciwe byłoby używanie narzędzi pomocniczych podczas rozmowy telefonicznej?

text: Dużo czasu na przyzwoitą pracę techniczną musisz przejść przez proces weryfikacji telefonu. Jeśli ssiesz przez telefon, generalnie nie masz szansy, aby osobiście pokazać, jak kiepski jesteś. Wywiady te, nawet dla doświadczonych i zaawansowanych stanowisk, bardzo często zawierają pytania w stylu ciekawostek ponad podstawy. Niestety dla mnie zawsze są w czymś, o czym generalnie nie myślę i nie wyobrażam sobie, żebym się na to przygotowała. Z większym doświadczeniem z nimi (nie aplikowałem na wiele takich pozycji) wyobrażam sobie, że może mi się lepiej, ale w międzyczasie... Czyli na przykład konwersja jakiejś wartości dziesiętnej XX na szesnastkową lub binarną. Ostatnim razem, kiedy przeprowadzałem wywiad na temat czegoś, miałem totalne bzdury na temat tego, jak to zrobić. Bardzo rzadko muszę się tym przejmować. Używam szesnastkowego za każdym razem, gdy chcę kojarzyć wartości z konstrukcją bitową i dziesiętną, gdy chcę myśleć o wartości jako liczbie. Rzadko nawracam się między nimi. Kiedy potrzebuję, po prostu otwieram kalkulator i pozwalam mu zrobić to za mnie. To nie jest trudne ani nic, ale z jakiegoś powodu po prostu nie pamiętałem, jak to zrobić. Powiedziałem dziennikarzowi prawdę i powiedziałem mu, że będę miał większą szansę na nawrócenie w inny sposób (ponieważ jest to sposób, sposób łatwy i nadal pokazuje zrozumienie, jak sądzę). Następnie wspomniał, że większość ludzi boryka się z tym problemem i zastanawiał się, czy to jakaś różnica wieku. Może, może nie. Wyjaśniłem, skąd pochodzę i na to pozwoliłem. Ale będąc wywiadem telefonicznym, nie mógł dokładnie powiedzieć, jak znalazłam odpowiedź. Może używanie narzędzi, które zawsze robię, jest całkowicie uzasadnione? Co myślisz? Jeśli przeprowadzasz z kimś wywiad, zadajesz takie pytanie, a następnie dowiadujesz się, że użyli narzędzia lub odnośnika, aby odpowiedzieć na twoje pytanie, zamiast robić to ręcznie lub w głowie… czy byłbyś wkurzony? Czy uznałbyś to za nieuczciwe lub dobre wykorzystanie dostępnych narzędzi do rozwiązania problemu?


title: Jak rozpowszechniać nasze oprogramowanie w systemie Linux bez wysyłania kodu źródłowego?

text: Na potrzeby naszej firmy musimy sprzedać jedno z naszych programów w systemie *nix-like. Jak możemy rozpowszechniać i chronić nasze oprogramowanie? Wiem, że prawie każdy program na linuksie jest open-source, więc jak możemy chronić kod źródłowy? Czy musimy rozpowszechniać część kodu źródłowego w plikach obiektowych? Oprogramowanie napisane w C.


title: Czym jest ActiveRecord w Railsach?

text: Dzisiaj rozmawiałem z wiceprezesem o dużym ego na stanowisko Rails and Rails w dochodowej firmie w moim mieście. Poprosił mnie o wyjaśnienie, czym jest ActiveRecord w Railsach. Powiedziałem mu, co następuje: > ActiveRecord zapewnia zorientowany obiektowo interfejs do bazy danych aplikacji, aby uczynić programowanie łatwiejszym i bardziej przyjaznym dla programisty. Zapewnia również funkcję walidacji, która pomaga w utrzymaniu czystości danych w > bazie danych. ActiveRecord odnosi się również do części modelowej MVC. Powiedział mi wtedy, że to „rodzaj myszki miki”. Więc, CZY moje wyjaśnienie jest „myszką miki”, czy też powinienem odłożyć słuchawkę od razu?


title: Jaki jest najprostszy przykład wyjaśniający różnicę między drzewami analizy a drzewami składni abstrakcyjnej?

text: W moim rozumieniu parser tworzy drzewo analizy, a następnie je odrzuca. Może jednak również wyskoczyć abstrakcyjne drzewo składni, z którego podobno korzysta kompilator. Mam wrażenie, że zarówno drzewo parsowania, jak i drzewo składni abstrakcyjnej powstają pod etapem parsowania. Czy ktoś mógłby wyjaśnić, dlaczego są różne?


title: Jak kompilatory powinny zgłaszać błędy i ostrzeżenia?

text: Nie planuję pisać kompilatora w najbliższej przyszłości; nadal jestem dość zainteresowany technologiami kompilatorów i tym, jak można to ulepszyć. Począwszy od języków kompilowanych, większość kompilatorów ma dwa poziomy błędów: ostrzeżenia i błędy, z których pierwszy to najczęściej niekrytyczne rzeczy, które należy naprawić, oraz błędy wskazujące w większości przypadków, że nie można wyprodukować maszynowego (lub bajtowego) kod z wejścia. Chociaż jest to dość słaba definicja. W niektórych językach, takich jak Java, pewnych ostrzeżeń po prostu nie da się pozbyć bez użycia dyrektywy `@SuppressWarning`. Ponadto Java traktuje pewne niekrytyczne problemy jako błędy (na przykład nieosiągalny kod w Javie powoduje błąd z powodu, który chciałbym znać). C# nie ma tych samych problemów, ale ma kilka. Wydaje się, że kompilacja odbywa się w kilku przebiegach, a niepowodzenie przebiegu uniemożliwi wykonanie kolejnych przebiegów. Z tego powodu liczba błędów, które otrzymujesz, gdy twoja kompilacja nie powiedzie się, jest często rażąco niedoszacowana. Za jednym razem może powiedzieć, że masz dwa błędy, ale gdy je naprawisz, może otrzymasz 26 nowych. Kopanie do C i C++ po prostu pokazuje złą kombinację słabości diagnostycznych kompilacji Javy i C# (chociaż może być bardziej dokładne stwierdzenie, że Java i C# po prostu poszły w swoją stronę z połową problemów). Niektóre ostrzeżenia naprawdę powinny być błędami (na przykład, gdy nie wszystkie ścieżki kodu zwracają wartość), a mimo to są ostrzeżeniami, ponieważ przypuszczam, że w czasie, gdy pisali standard, technologia kompilatora nie była wystarczająco dobra, aby tworzyć tego rodzaju kontrole obowiązkowe. W tym samym duchu kompilatory często sprawdzają więcej niż mówi standard, ale nadal używają "standardowego" poziomu błędu ostrzeżenia dla dodatkowych ustaleń. Często kompilatory nie zgłaszają wszystkich błędów, które mogą znaleźć od razu; usunięcie ich wszystkich może wymagać kilku kompilacji. Nie wspominając o tajemniczych błędach, które kompilatory C++ lubią wypluwać, gdzie jeden błąd może spowodować dziesiątki komunikatów o błędach. Teraz dodając, że wiele systemów kompilacji można skonfigurować tak, aby zgłaszały błędy, gdy kompilatory emitują ostrzeżenia, otrzymujemy po prostu dziwną mieszankę: nie wszystkie błędy są krytyczne, ale niektóre ostrzeżenia powinny; nie wszystkie ostrzeżenia są zasłużone, ale niektóre są wyraźnie tłumione bez dalszej wzmianki o ich istnieniu; a czasami wszystkie ostrzeżenia stają się błędami. Języki nieskompilowane nadal mają swój udział w kiepskim raportowaniu błędów. Literówki w Pythonie nie zostaną zgłoszone, dopóki kod nie zostanie faktycznie uruchomiony, a tak naprawdę nigdy nie można wyrzucić więcej niż jednego błędu naraz, ponieważ skrypt przestanie się wykonywać po spełnieniu jednego z nich. Ze swojej strony PHP ma kilka mniej lub bardziej znaczących poziomów błędów, _i_ wyjątków. Błędy analizy są zgłaszane pojedynczo, ostrzeżenia są często tak złe, że powinny przerwać działanie skryptu (ale nie domyślnie), powiadomienia naprawdę często pokazują poważne problemy z logiką, niektóre błędy naprawdę nie są wystarczająco złe, aby zatrzymać skrypt, ale nadal zrobić, i jak zwykle w PHP, jest tam kilka naprawdę dziwnych rzeczy (po co do diabła potrzebujemy poziomu błędu dla błędów krytycznych, które tak naprawdę nie są krytyczne? `E_RECOVERABLE_E_ERROR`, mówię do ciebie). Wydaje mi się, że każda implementacja raportowania błędów kompilatora, o której myślę, jest zepsuta. A szkoda, ponieważ wszyscy dobrzy programiści podkreślają, jak ważne jest prawidłowe radzenie sobie z błędami, a mimo to nie mogą uzyskać do tego własnych narzędzi. Jak myślisz, jaki powinien być właściwy sposób zgłaszania błędów kompilatora?


title: Próbkowanie i dokładność VisualVM

text: W innych pytaniach zostało powiedziane, że próbkowanie jvisualvm działa jako „lekkie” narzędzie do profilowania, obliczając metryki bezpośrednio z ramek stosu Java. Prawie jednogłośnie zgodziła się, że taka technika jest _szybsza_, ale nie tak _dokładna_ pod względem "czasów". Moje pytanie: dlaczego ta metoda nie jest tak dokładna? A co nie jest tak dokładne (w przeciwieństwie do czego? Czy istnieją bardziej precyzyjne techniki profilowania?)?


title: Czy „Code Smell” nadal jest użyteczną metaforą, czy też niewłaściwe użycie tego terminu podważyło jego znaczenie?

text: Natknąłem się na kilka komentarzy i odpowiedzi na Programrs.SE, które potępiają użycie wyrażenia "Code Smell" i zastanawiałem się, jakie jest to rozumowanie dla tych, którzy go nie lubią. Po raz pierwszy zetknąłem się z tym terminem, kiedy przeczytałem Fowler's Refactoring w 2000 roku, ale dopiero w ciągu ostatniego roku lub dwóch słyszałem jakiekolwiek narzekania na użycie tego wyrażenia. **P:** Czy słuszne byłoby stwierdzenie, że wyrażenie _Kod Zapach_ ostatnio zaczęło popadać w niełaskę, a jeśli tak, to dlaczego ta metafora nie ma już zastosowania? * * * Szukam dobrze zdefiniowanych odpowiedzi popartych zdrowym rozumowaniem, ponieważ zdaję sobie sprawę, że to pytanie jest na granicy subiektywnego.


title: Gdzie wypełniać obiekty

text: Jak wspomniano w tym pytaniu, przenoszę nasz zespół w stronę obiektów (w przeciwieństwie do rzucania wszędzie tabel DataTables i zmiennych). Wybrałem odpowiednie miejsce dla projektu, które zawiera definicje obiektów, ale nie jestem pewien, jak mam zająć się wypełnianiem niektórych obiektów. W szczególności, co mam zrobić z klasami jako właściwościami? Klasa publiczna Class1 Właściwość publiczna SomeProperty As String Właściwość publiczna SomeOtherProperty As String Właściwość publiczna SomeKey As Integer Właściwość publiczna Foo As Class2 End Class W tym podstawowym przykładzie mogę łatwo wypełnić pierwsze trzy właściwości z zapytania, ale `Foo` ma swój własny zestaw właściwości. Teraz, aby utworzyć `List(Of Class1)` generuję dane dla wszystkich obiektów Class1, a następnie używam `SomeKey`, aby cofnąć się i, jeden obiekt na raz, wypełnić wszystkie `Foo`. Na pewno to działa, ale w moim przypadku jest to raczej powolne i wydaje się, że być może po prostu robię to źle. Czy radzę sobie z tym niewłaściwie? Jeśli tak, co powinienem robić? Jedyną inną rzeczą, jaką mogę wymyślić, jest utworzenie zapytania (lub procedury składowanej), która zwraca wszystkie odpowiednie dane dla wszystkich obiektów. W moim przypadku testowym jest to lista zawierająca 154 klasy „Class1”, z których każda ma cztery właściwości, takie jak „Foo”, a niektóre z nich mają klasy jako właściwości.


title: Unikaj operatora przyrostu Postfix

text: Czytałem, że powinienem unikać operatora przyrostu przyrostka ze względu na wydajność (w niektórych przypadkach). Ale czy to nie wpływa na czytelność kodu? Moim zdaniem: for(int i = 0; i < 42; i++); /* nigdy nie dorównam 42! */ Wygląda lepiej niż: for(int i = 0; i < 42; ++i); /* nigdy nie dorównam 42! */ Ale to chyba tylko z przyzwyczajenia. Trzeba przyznać, że nie widziałem wielu używających `++i`. Czy wydajność jest tak zła, żeby w tym przypadku poświęcić czytelność? A może jestem po prostu niewidomy, a „++i” jest bardziej czytelne niż „i++”?


title: Jakie są zalety ujednoliconego procesu tworzenia oprogramowania?

text: Dlaczego organizacja powinna przyjąć ujednolicony proces nad innymi? Jakie są względne zalety? Wiem, że jest ściśle powiązany z UML, ale to oczywiście nie może być jedyna zaleta. Dlaczego warto wybrać to podejście od innych?


title: Jakie są przydatne metryki kodu źródłowego?

text: Jakie są przydatne metryki do przechwycenia kodu źródłowego? W jaki sposób metryki, takie jak na przykład _(Wykonywalny?) Wiersze kodu_ lub _Złożoność cykliczna_ mogą pomóc w zapewnieniu jakości lub jak są ogólnie korzystne dla procesu tworzenia oprogramowania?


title: Dlaczego interpretery nie interpretują kodu bajtowego (takiego jak maszyny wirtualne) — zamiast kodu źródłowego?

text: **Zredagowałem pytanie, aby było bardziej jasne:** Wiadomo, że interpretacja kodu bajtowego jest znacznie szybsza niż interpretacja kodu źródłowego lub niektórych wersji kodu źródłowego IL. **Interpreter znacznie łatwiej rozumie kod bajtowy niż kod źródłowy lub IL podobny do kodu źródłowego.** Maszyny wirtualne interpretują kod bajtowy. Ten kod bajtowy interpretowany przez maszyny wirtualne jest wynikiem kompilacji kodu źródłowego do kodu bajtowego. Jednak „niezależne interpretery” (nie wewnątrz maszyny wirtualnej) są znane z interpretowania kodu źródłowego lub kodu źródłowego podobnego do kodu źródłowego, zamiast kodu bajtowego. **Dlaczego? Dlaczego interpretery nie interpretują kodu bajtowego, tak jak maszyny wirtualne?** Wszystko, co jest potrzebne, to najpierw skompilować kod źródłowy do kodu bajtowego (jak w przypadku maszyn wirtualnych), a następnie interpreter może zinterpretować ten kod bajtowy. **Czy powodem tego jest to, że interpreter, który interpretuje kod bajtowy, jest z definicji maszyną wirtualną?** (Tylko zgaduję). A może to coś innego?


title: Język funkcjonalny ze składnią podobną do C

text: Szukałem języka funkcjonalnego ze składnią podobną do C i statycznym typowaniem. Do tej pory moim wyborem byłby Nemerle. Czy jest coś jeszcze/lepszego? EDYCJA: drugi wybór to Lua lub Go. Jakieś plusy i minusy?


title: Budowanie bezserwerowego systemu CMS/systemu p2p

text: Zastanawiam się nad stworzeniem Open Source, bezserwerowego, replikowanego offline CMS p2p, ale obawiam się, że naprawdę działa w prawdziwym środowisku. Jak byś to zrobił, zmniejszając ekspozycję na ryzyko/błędy? _Na razie myślałem o tym schemacie._ Na lokalnym urządzeniu mamy folder o nazwie "cmsfiles" zawierający pliki oprogramowania oraz podfolder "database-shards", wewnątrz tego podfolderu mamy: shard0.sqlite, shard1.sqlite, shard2.sqlite i tak dalej... każdy fragment ma limit 50 GB. Wewnątrz tych fragmentów przypiszemy tabele w losowy sposób, czyli: komentarze, posty, odpowiedzi, użytkownicy itp. Jeśli urządzenie odwiedza portal, ma dostęp tylko do odczytu i do interakcji musi mieć lokalnie zainstalowaną instancję, o takiej samej treści, jak wyjaśniono powyżej. Kiedy instaluje oprogramowanie, proszony jest o podanie nicka i hasła, które następnie zostaną zapisane na kluczu prywatnym do późniejszej weryfikacji. Kiedy urządzenie robi wstawkę (w tym przypadku odpowiedź na post), musi również wysłać inne informacje. _**Lokalnie żądanie jest przetwarzane w następujący sposób:_** Zdalny peer jest pytany o swój adres IP/proxy/węzeł-tor i sprzętowy UUID. Następnie sprawdzane jest, czy zdalny peer znajduje się na czarnej liście, jeśli TRUE, wszystkie operacje/negocjacje są odrzucane, ale jeśli oceni FALSE, sprawdzane jest, czy jest obecny w „dzienniku prób złamania” lista i jeśli liczba jest mniejsza niż 5 i nie równa 0, liczba jest ++zwiększana, jednocześnie wszystkie operacje ze zdalnym peerem są odrzucane. W przeciwnym razie, jeśli liczba jest równa 0, przystępujemy do dalszej weryfikacji. Pobierana jest wiadomość (odpowiedź), klucz prywatny i pliki znajdujące się w folderze „cmsfiles” od zdalnego peera. Pliki są teraz kompresowane lokalnie do cmsfiles.lz, mieszając i porównując. Ten skrót jest następnie porównywany z lokalnym i jeśli nie są równe, liczba na liście „dziennika prób złamania” jest ++zwiększana, a wszystkie wykonywane operacje są odrzucane. Ale jeśli się zgadzają, przystępujemy do podpisywania zdalnego klucza prywatnego kluczem publicznym, jeśli podpisuje się pomyślnie, sprawdzamy, czy wpis (odpowiedź) już istnieje. Jeśli istnieje (jeśli TRUE), liczba w "dzienniku prób złamania" jest ++zwiększana, a każda operacja odrzucona, w przeciwnym razie (jeśli FALSE) sprawdzamy, czy liczba głosów na post jest równa 0 (nowy post nie może mieć więcej niż 0 głosów!) , jeśli nie, liczba na liście "dziennika prób złamania" jest ++zwiększana, a wszelkie operacje odrzucane. W przeciwnym razie, jeśli rzeczywiście wynosi 0, możemy w końcu dodać wiadomość (odpowiedź) do lokalnej bazy danych. Dołączam reprezentację schematu drzewa na wszelki wypadek: ![przykładowe drzewo](http://i.stack.imgur.com/7m7Xe.jpg)


title: określić ograniczenia językowe przed rozwojem

text: Zdarza się, że otrzymujesz specyfikację projektu, a Twoja wiedza o języku jest bardzo podstawowa. W projekcie są funkcje, z którymi nigdy nie pracowałeś. Ale masz kilka pomysłów i logiki, jak to można wdrożyć. Później, w miarę rozwoju, odkrywasz, że wymagane funkcje nie mogą zostać opracowane z powodu pewnych ograniczeń językowych lub innych problemów. Teraz musisz przekonać do tego swojego klienta, co nie jest łatwe. **Edytuj** : powodem pracy z niezbyt wygodną technologią jest to, że firma czasami nie może sobie pozwolić na zatrudnienie kogoś do tego zadania. Dlatego opiera się na istniejących pracownikach, aby nauczyć się czegoś nowego i wnieść swój wkład. Jak więc uniknąć takich sytuacji? Jak mogę zapoznać się z funkcjami przed zaakceptowaniem projektu?


title: Jak zaczął się mem "Rails can't Scale"?

text: Jednym z memów o Railsach jest to, że Railsy nie potrafią skalować. Czy wiadomo, jak ten mem się zaczął? Czy był jakiś konkretny post na blogu, w którym argumentowano, że tak jest?


title: Testowanie funkcji niecentralnych

text: Tylko 1% naszych klientów korzysta z określonych funkcji lub scenariuszy. Czy uważasz, że powinniśmy poświęcić tyle czasu na testowanie tych funkcji i scenariuszy, ile poświęcamy na nasze główne funkcje i scenariusze, czy też powinniśmy przetestować głównie „szczęśliwą ścieżkę” dla tych funkcji? **AKTUALIZACJA** Może powinienem zadać pytanie w inny sposób. Czy uważasz, że firma musi poświęcić więcej czasu na testowanie głównych funkcji swoich produktów? Na przykład zakładam, że zespół Windows 8 przetestował sekwencję rozruchową bardziej szczegółowo niż przetestował sterownik dla bardzo rzadkiej karty graficznej. Koszt błędu w sekwencji rozruchowej jest ogromny, ponieważ nikt nie byłby w stanie korzystać z systemu operacyjnego. Ale błąd w sterowniku niejasnego procesora graficznego zaszkodzi tylko małej bazie klientów.


title: Czuję, że mój przełożony spowalnia moją pracę, jak sobie z tym poradzić?

text: Wydaje się to dziwne, ale mój menedżer siedzi tuż obok mnie i, cóż, kiedy nie ma go w pobliżu, czuję się wolny i planuję, robię, itp., wykonując swoją pracę z błyskami w oczach, czuję osiągnięcia. Ale wszystko jest odwrotnie, gdy jest w swoim miejscu pracy, po prostu muszę się zmuszać do robienia czegokolwiek, bardzo się martwię i denerwuję, a mój mózg nie pracuje normalnie. Jak sobie z tym poradzić?


title: Czy mogę coś zrobić, aby poprawić wydajność w VS 2010?

text: Używam VS 2010, ponieważ tworzymy aplikację w .Net 4, a wydajność doprowadza mnie do szału. Zwykle jest źle, gdy nie oglądam IDE przez jakiś czas (na przykład, gdy odciągają mnie na wezwanie pomocy technicznej lub przychodzę rano). Zdaję sobie sprawę, że jest prawdopodobnie wbudowany w WPF, który zwalnia swoje zasoby, gdy nie jest używany, ale kilkuminutowe opóźnienie podczas ładowania wszystkich kopii zapasowych jest naprawdę denerwujące. Zauważyłem również pewne znaczne opóźnienia podczas otwierania plików lub kompilacji.


title: skupienie się na samym języku VS skupienie się na języku + CS

text: Tak więc pracowałem nad Rubim w celu samozatrudnienia (jestem zubożałym filozofem (nawet na uniwersytecie!) i nie mogę znaleźć normalnej, niskopłatnej pracy). Ale na mojej drodze uczenia się i odkrywania jest dylemat: CS ciągle mnie odwraca (głównie teoretyczny). Zaczynam myśleć, że powinienem świadomie powstrzymać się przed zabłąkaniem w teorię, dopóki, nie wiem, nie będę głodował? :) Chciałabym więc uzyskać opinie na temat tego, czy mój pogląd jest racjonalny (chyba lepszy termin byłby pragmatyczny) i oczywiście mile widziana jest ogólna dyskusja dotycząca wzajemnych relacji między biegłością językową a ogólną znajomością CS.


title: Jakie umiejętności powinienem poprawić, aby zostać profesjonalnym inżynierem oprogramowania?

text: > **Możliwy duplikat:** > najbardziej pożądane umiejętności dla absolwenta inżynierii oprogramowania Obecnie robię doktorat z fizyki i skończę za około dwa lata. Planuję później zostać inżynierem oprogramowania. Teraz szukam porady, które umiejętności powinienem poprawić w tym czasie, aby osiągnąć swój cel. Moje wykształcenie: Do moich badań muszę pisać własne programy. Programuję od czasu do czasu od dziecka, ale dopiero w ciągu ostatnich 2,5 roku spędziłem dużo czasu na kodowaniu. Mam około 2 lata doświadczenia w C++ i uważam, że jestem w tym dobry. Niedawno zacząłem uczyć się Pythona. Nie uczęszczałem na żadne kursy uniwersyteckie dotyczące algorytmów, struktur danych czy baz danych, więc może brakuje mi tutaj podstawowej wiedzy. Myślałem o przeczytaniu książek na następujące tematy: * Książki ogólne, takie jak Code Complete czy The Pragmatic Programmer. * Programowanie sterowane testami i metody programowania zwinne (choć nie jestem pewien, jak szeroko są stosowane w firmach) * Bazy danych * Algorytmy i struktury danych Myślałem też o nauce Javy... Co uważasz za przydatne w mojej sytuacji? Jakie umiejętności są ważne dla firmy?


title: Co oznacza „projektowanie downstream/upstream”?

text: Co oznacza „projektowanie downstream/upstream” w tworzeniu oprogramowania?


Korzystałem z tej funkcji we wcześniejszych wersjach systemu Windows, takich jak XP i NT. Udało mi się uruchomić GUI z usługi Windows. Ale nie jest to możliwe w późniejszych wersjach. Jaki jest powód usunięcia tej funkcji? Dlaczego usługi Windows nie mogą mieć graficznego interfejsu użytkownika?


title: Projektowanie bazy danych rutynowych ćwiczeń fitness / podnoszenia ciężarów

text: Chciałbym stworzyć aplikację podobną do Barbell Pro na Androida, naprawdę do celów praktycznych / zainteresowań / edukacyjnych. Lub nawet jako kolejny przykład dla celów bazodanowych, Fitocracy Problem w tym, że nie mam pojęcia, jak można by zaprojektować bazę danych... Na przykład: * Mamy 1000 Osób korzystających z aplikacji * Każda Osoba może mieć 1-7 zindywidualizowanych Programów Treningowych, w zależności od dnia. (Być może nawet więcej -> Treningi AM / Treningi PM) * Każdy Program Treningowy posiada indywidualny Zestaw Ćwiczeń, z pewnymi zwrotnicami np. ktoś mógłby przecież robić Bench Press w poniedziałek i piątek. * Każde ćwiczenie ma pewną liczbę zestawów * Każdy zestaw ma pewną liczbę powtórzeń Teraz wydaje mi się, że potencjalnie może to być duża ilość informacji do przechowywania dla każdej osoby, co może być dość skomplikowane. Mam tylko trochę doświadczenia z relacyjnymi bazami danych i nie wiem, jak zaprojektować to w wydajny sposób dla relacyjnej bazy danych. Nie proszę o projekt, tylko jak bym zaczął się do tego zabierać. Potencjalna złożoność jest dla mnie zniechęcająca ze względu na brak doświadczenia w bazach danych. Może to nawet nie jest takie skomplikowane, ale jak mówię, ignorancja od siebie.


title: Znaczenie relacji wiele-do-wielu?

text: Jak ważne są relacje do wielu w programowaniu na iOS? Czy często trzymasz w swoim kodzie listę wskaźników do obiektów w tablicy? Chyba nie rozumiem w pełni pojęcia relacji za-wielu, nie mówiąc już o tym, jak zaimplementować je w kodzie. Z mojego obecnego rozumienia, do-wiele relacji zawiera listę wskaźników do jednego lub więcej obiektów klasy i odpowiadających im właściwości i zmiennych instancji?


title: Czy istnieją różnice między funkcjonalnością a wymaganiami funkcjonalnymi?

text: Piszę dokumentację w projekcie w narzędziu. W tym moim narzędziu i piszę w konkretnym obszarze, mam tutaj użycie Case, Business Rule, N-Diagram Types oraz Functional and Functional Requirements. Zastanawiałem się więc, czy istnieją różnice między funkcjonalnością a wymaganiami funkcjonalnymi? Czy w mojej wizji Funkcjonalność jest implementacją Wymagania Funkcjonalnego, czy jest poprawna? Jakie inne różnice można znaleźć między nimi?


title: Jakie korzyści osiągam dzięki programowi uczenia się?

text: Jestem programistą Java i postanowiłem dowiedzieć się trochę o informatyce teoretycznej. Nie mam dyplomu w tej dziedzinie, a małe doświadczenie bardzo by mi pomogło, ponieważ nie znam się na programowaniu poza programowaniem. Przeszukałem tę stronę w poszukiwaniu odpowiedzi i znalazłem wiele osób, które polecają książkę „Struktura i interpretacja programów komputerowych”, ale ponieważ nie mam wymaganej wiedzy matematycznej, aby poradzić sobie z tą książką, postanowiłem iść z „Jak projektować programy”. Moje pytanie brzmi, co bym zyskał dzięki temu doświadczeniu? Czy nauczyłby mnie informatyki tak, jak chcę? A może lepiej jest czytać o algorytmach i strukturach danych?


title: Jak powinienem podjąć się ponownego wydania projektu na licencji GPL?

text: Kilka miesięcy temu znaleźliśmy bibliotekę na licencji GPL, która pasowała do tego, co chcieliśmy zrobić w tym czasie. Umieściliśmy go w naszej bazie kodu i wszystko było w porządku. Teraz, kilka szalonych miesięcy kodowania później, zrefaktoryzowaliśmy bibliotekę: jest bardziej kompletna, bardziej stabilna, w pełni przetestowana jednostkowo, kompatybilna z PSR-0, itd. Teraz chcielibyśmy użyć biblioteki w innym jeden z naszych projektów i to dało mi do myślenia, dlaczego nie wydać ponownie biblioteki? Problem polega na tym, że nie mam pojęcia, jak przypisać pracę, którą włożyli oryginalni programiści (która w rzeczywistości jest tak mocno przerobiona, że jest trochę nierozpoznawalna) podczas ponownego wydawania biblioteki jako GPL. Z biegiem czasu wszystkie nagłówki dokumentacji plików z oryginalnymi kredytami zostały zastąpione, a wszystko, co pozostało, to plik LICENSE, który jest dokładną kopią licencji GPL v3. Absolutnie nie mam problemu z przyznaniem mi zasług tam, gdzie jest to słuszne, ale chciałbym to zrobić zgodnie z tym, co jest słuszne w świecie FOSS. Czy ktoś może mi powiedzieć, jak mam postępować?


title: Czy można wdrożyć OOP bez użycia rozległych operacji na stercie?

text: Czy koncepcja obiektów obiektowych jest ściśle związana z alokacją obiektów na stercie? Czy można napisać normalne OOP bez tworzenia nadmiernych obiektów na stercie?