title: Ewolucyjne zasoby programowania behawioralnego

text: Jakiś czas temu zrobiłem Grę w życie Conwaya. Chciałbym zrobić coś podobnego (w C++), gdzie każda komórka wykazywałaby zachowania takie jak: * Ruch * Reprodukcja * Zabijanie innych komórek (na przykład przechodzenie do innej komórki) Z biegiem czasu komórki "uczą się", i (mam nadzieję) skończę z zestawem zachowań, które są korzystne dla całego ekosystemu, a nie dla pojedynczej komórki. Jestem na 100% pewien, że to nie jest nowe, ale nie wiem: 1. Jakie terminy techniczne obejmują to, co próbuję zrobić (jakie słowa kluczowe pokrywają mój cel, abym mógł szukać innych implementacji) , 2. Zasoby, najlepiej online, chociaż styl martwego drzewa też jest dobry, co byłoby dobrą lekturą dla tego typu programowania. 3. Jak powinienem to zaimplementować (#2 pomogłoby w tym); Mogę modyfikować swoje komórki, aby wykonywać pewne czynności (na przykład przemieszczać się), ale nie jestem pewien, jak powinienem wdrożyć uczenie; czy powinienem używać algorytmu genetycznego, czy może lepiej nadaje się inny rodzaj algorytmu ewolucyjnego?


title: Jak skonfigurować interfejs użytkownika do edycji drzewa binarnego?

text: Muszę zezwolić użytkownikowi na utworzenie drzewa binarnego. Mam prawidłowo zapełniony model szkieletu z bazy danych, problem, na którym utknąłem, polega na tym, jak skonfigurować elementy interfejsu użytkownika w sposób, który jest dość łatwy w użyciu? Ogólna idea jest taka, że chcę utworzyć wyrażenie logiczne zawierające logikę i tokeny. Tokeny zostaną zastąpione później w czasie wykonywania odpowiednimi danymi modelu, gdy wyrażenie zostanie ocenione. Otrzymasz końcowe wyrażenie takie jak to: ((({Claim.State})=(TX))||(({Claim.PolicyState})!=(UT))) Tj. Oceń jako prawda, jeśli stan = TX lub Policy State to nie UT Każde wyrażenie może byćwęzłem końcowym i będzie miało wartość lub nie będzie miało żadnej wartości, a lewy i prawy będą wskazywaćna następne odpowiednie wyrażenia i Operator Struktura bazy danych wygląda mniej więcej tak : 1. Sprawdzenie stanu: Lewo: **2** Prawo: **3** Operator: LUB 2. Stan TX: Lewo: **4** Prawo **5** Operator: Równa się 3. Stan inny niż UT : Lewo: **6** Prawo **7** : Operator: Nie 4. Stan roszczenia: Lewo: zero Prawo: zero Wartość: {Claim.State} 5. Texas Literał: Lewo: zero Prawo: zero Wartość: " TX" 6. Stan polityki: Lewo: zero Prawa: zero Wartość: {Claim.PolicyState} 7. Utah Literał: Lewo: zero Prawo: zero Wartość: "UT" Obrazuję coś podobnego do wyrażenia powyżej, tworząc panel z 3 listy wyboru, a nad nimi etykieta: -------------------------------------------- -------------- ---------- Nazwa: |Kontrola stanu| [.] Wartość [0] Wyrażenie Lewo (Edycja/Nowy) Operator Prawo (Edycja/Nowy) Wyrażenie: [ Stan to TX ] [ Lub ] [ Stan nie jest UT ] (Zapisz) ---------- -------------------------------------------------- ---- W tym momencie utknąłem. Co powinno się stać, gdy powiedzmy, że użytkownik chce edytować wartość po lewej stronie? Czy otwieram nowe wyskakujące okienko, aby renderować ten sam formularz, zaczynając od **2** zamiast **1** dla początkowego klucza wyrażenia? Czy powinienem zastąpić istniejący formularz nowymi wartościami i jakoś śledzić, gdzie znajduje się użytkownik w odniesieniu do wyrażenia początkowego? Może przesuń nowy panel edytora w dół poniżej obecnego? Co myślicie? Naprawdę nie wiem, co robić.


title: Wdrażanie bardzo prostej aplikacji

text: Mam bardzo prostą aplikację konsolową napisaną w C++, połączoną z lekką biblioteką statyczną. To jest tylko do celów testowych. Teraz, gdy część dotycząca kodowania została zakończona, chciałbym poznać proces faktycznego wdrażania programu. Napisałem bardzo prosty plik CMakeLists.txt, który tworzy pliki makefile lub projekty VS do budowania źródeł. Mam też program, który wywołuje bibliotekę statyczną w celu wykonania testów google. Dla mnie dystrybucja tej aplikacji wygląda tak: > * dla developerów : katalog src z plikiem CMakeLists.txt (dystrybucja na wiele platform) z README.txt i INSTALL.txt > * dla użytkowników : plik wykonywalny i README.txt > * git repo : wszystko wymienione powyżej plus źródła do testowania i > zewnętrzna biblioteka gtest > A ten punkt : biorąc pod uwagę złożoność mojej aplikacji, czy robię to dobrze? Czy istnieje jakieś odniesienie, które sformalizowałoby ten proces wdrażania, dzięki czemu mogę uzyskać lepsze i iść dalej? Powiedzmy, że chciałbym dodać biblioteki dynamiczne, które można aktualizować, biblioteki zewnętrzne, takie jak boost : jak mam to spakować, aby wdrożyć je w profesjonalny sposób?


title: Jaki język programowania najlepiej pasowałby do małych gier przeglądarkowych?

text: Chcę tworzyć małe aplikacje internetowe zawierające małe gry (wieloużytkownikowe lochy, gry typu tower defense i roguelikes) lub kalkulatory talentów do gier MMO itp. Po kilku badaniach ludzie powiedzieli, że ASP.NET MVC byłby idealny do tych zadań. Patrząc na to, nie jestem pewien, czy jest to właściwa droga do osiągnięcia tych celów. Która technologia byłaby najlepsza do tworzenia małych, internetowych gier przeglądarkowych?


title: Czy istnieją opcje oprogramowania (najlepiej .NET) do analizy odległości i prędkości piłkarzy poruszających się na wideo?

text: Edytowanie pytania dla jasności Dziękujemy za dotychczasowe opinie, bardzo wnikliwe. Nie jestem pewien, jak daleko jest ta część społeczności programistów i co, jeśli istnieją jakieś biblioteki, z których mogę korzystać. Oto co próbuję zrobić. Problem: Nagraj istniejący film z meczu ligi rugby. Boisko Rugby League ma 100 metrów długości, 70 metrów szerokości i jest oznaczone białymi liniami co 10 metrów biegnącymi wzdłuż szerokości boiska, a także wzdłuż linii bocznych. Każda strona ma 13 graczy na boisku. Zawodnicy w każdej drużynie mają identyczne koszulki, które zwykle mocno kontrastują z kolorami tła (zielony/brązowy kolor pola) i kolorem sędziego (zwykle żółty) i wyznaczonego zawodnika w wodzie (pomarańczowy). Wszyscy gracze mają na plecach unikalny numer z grubymi białymi literami do identyfikacji. Film jest nagrywany kamerą o wysokiej rozdzielczości. Obecnie używana jest tylko jedna kamera (2D), a istniejące wideo nie zawiera obiektu pierwszoplanowego o stałych wymiarach przestrzennych (co sugerowano w jednej odpowiedzi dla pomiarów porównawczych, jednak mógłbym dodać to do przyszłych sesji filmowych, jeśli jest to warte zachodu). Gracz nie biegnie po linii prostej przez 50% czasu, ale porusza się bokiem po przekątnej, aby zagrać piłkę. Mierzony dystans zawsze zaczyna się od miejsca poprzedniego „odbicia”, które kończy się w miejscu zatrzymania ruchu do przodu. Nie zawsze jest możliwe określenie liczby graczy na podstawie wideo (skierowani w inną stronę, światło słoneczne, inni stojący na drodze kamery). Ale nie jest to ważne, ponieważ oprogramowanie może pozwolić na ręczne wprowadzanie nieznanych „przebiegów” w późniejszym momencie po analizie. Określ odległość między dwoma punktami (tj. gdzie gracz rozpoczął swój „bieg” i gdzie go zakończył). Zgaduję, że byłoby to całkiem wykonalne, gdybym ręcznie oznaczył punkt początkowy i końcowy w filmie. Ale w jaki sposób wykorzystałbym punkty orientacyjne w tle, aby określić odległość (zakładając, że osoba nagrywająca film powstrzymała go przed szarpnięciem). Pytanie: Czy istnieją pakiety oprogramowania lub biblioteki, które są wystarczająco wyspecjalizowane, aby pomóc w pisaniu oprogramowania do analizy w celu określenia odległości przebytej przez sportowców na podstawie nagrania wideo z występu?


title: Jak zaimplementować czytnik EPUB w JavaScript?

text: Zastanawiam się, czy mogę stworzyć czytnik EPUB (darmowy i otwarty standard e-booków) w JavaScript. Podstawowe wymagania to: 1. Serwerowe części czytnika EPUB z serwera API. 2. Przeczytaj dane EPUB w JavaScript. 3. Wyrenderuj go na stronie. 4. Zapewnij dodatkowe funkcje, takie jak wyróżnienia tekstu lub notatki na stronie. Nie mam informacji, jak mógłbym to zrobić. Chcę wypróbować projekt prototypowy. Jakie kroki mógłbym podjąć, aby wdrożyć coś takiego?


title: Czy metodologia testowania oprogramowania opiera się na błędnych danych?

text: Jest dobrze znanym faktem w inżynierii oprogramowania, że koszt naprawy błędu rośnie wykładniczo wraz z późniejszym wykryciem błędu. Potwierdzają to dane opublikowane w _Code Complete_ i dostosowane w wielu innych publikacjach. Okazuje się jednak, że te dane nigdy nie istniały. Dane cytowane przez _Code Complete_ najwyraźniej nie wykazują takiej korelacji koszt/czas opracowania, a podobne opublikowane tabele wykazały korelację tylko w niektórych szczególnych przypadkach i płaską krzywą w innych (tj. brak wzrostu kosztów). **Czy są jakieś niezależne dane, które to potwierdzają lub odrzucają?** A jeśli to prawda (tzn. po prostu nie ma danych na poparcie tego wykładniczo wyższego kosztu w przypadku później wykrytych błędów), **jak to wpływa na metodologię tworzenia oprogramowania?**


title: W jakiej kolejności należy zdefiniować gettery i settery?

text: Czy istnieje najlepsza praktyka dotycząca kolejności definiowania pobierających i ustawiających w? Wydaje się, że istnieją dwie praktyki: * pary pobierające/ustawiające * najpierw pobierające, potem ustawiające (lub na odwrót) Aby podkreślić różnicę, podajemy przykład w Javie par pobierających/ustawiających: public class Foo { private int var1, var2, zm3; public int getVar1() { return var1; } public void setVar1(int var1) { this.var1 = var1; } public int getVar2() { return var2; } public void setVar2(int var2) { this.var2 = var2; } public int getVar3() { return var3; } public void setVar3(int var3) { this.var3 = var3; } } A oto przykład w Javie pierwszych pobierających, potem ustawiających: public class Foo { private int zm1, zm2, zm3; public int getVar1() { return var1; } public int getVar2() { return var2; } public int getVar3() { return var3; } public void setVar1(int var1) { this.var1 = var1; } public void setVar2(int var2) { this.var2 = var2; } public void setVar3(int var3) { this.var3 = var3; } } Myślę, że ten drugi rodzaj porządkowania jest jaśniejszy zarówno w kodzie, jak iw diagramach klas, ale nie wiem, czy to wystarczy, aby wykluczyć inny rodzaj porządkowania.


title: Jak nowe[] i malloc są zaimplementowane w systemie Windows?

text: Więc kiedy wywołujesz malloc lub new [] z aplikacji C/C++, w jaki sposób CRT tłumaczy to na wywołania interfejsu API systemu Windows?


title: Jak wytłumaczyć mojemu klientowi, że dostawca hostingu jest fatalny pod względem bezpieczeństwa?

text: Jako niezależny programista czasami mam dostęp do paneli administracyjnych dostawców hostingu moich klientów. To zadziwiająco przerażające doświadczenie. Poniżej znajduje się kilka punktów, które zauważyłem podczas uzyskiwania dostępu do niezbyt popularnego dostawcy hostingu z siedzibą w Wielkiej Brytanii, w którym słowo „bezpieczne” jest wymienione dużymi literami na stronie głównej: * Domyślne konto administracyjne jest tworzone z ** okropnym hasłem: pięć małe litery i cyfry tylko znaki** , bez wielkich liter, bez symboli. * Hasło jest wyświetlane w kilku miejscach w panelu administracyjnym, co jest dobrym znakiem, że jest **zapisane w postaci zwykłego tekstu** w bazie danych. * To konto administracyjne służy do uzyskiwania dostępu do _wszystko_: FTP, MySQL i samego panelu administracyjnego (w tym dane osobowe, faktury itp.). * Niemożliwe jest utworzenie dodatkowych kont, co zmusza klienta do **podania tego samego hasła administracyjnego wszystkim freelancerom pracującym nad projektem** (daje im nieograniczony dostęp do wszystkiego). * **Baza danych MySQL jest dostępna z dowolnego miejsca** , nie tylko lokalnie. Tego zachowania nie można zmienić. * Nie ma **audytu**. * Nic nie pomaga ani nie zachęca klienta do **regularnych kopii zapasowych**. * Hosting korzysta z **PHP 5.2.4, wersji wydanej 30 sierpnia 2007** i nie można go zaktualizować do nowszej wersji. Dla tych, którzy nie są zaznajomieni z PHP, język ten jest często aktualizowany ze względu na wiele regularnie wykrywanych problemów z bezpieczeństwem, a prowadzenie strony internetowej w 2012 roku, nawet w wersji wydanej w 2011 roku, jest bardzo złym pomysłem. Moje doświadczenia z innymi znanymi firmami hostingowymi w Wielkiej Brytanii, USA i Francji są podobne. Niektóre są nieco lepsze pod względem bezpieczeństwa, ale zbyt wielu robi wszystko, co w ich mocy, aby egzekwować najgorsze praktyki. Następnie twierdzą, że są bezpieczne i łatwe w użyciu, co daje poczucie, że klient może polegać na dostawcy hostingu we wszystkim, co związane z bezpieczeństwem. * * * Jaka powinna być profesjonalna reakcja dewelopera na klienta w sprawie takich firm hostingowych? Co powinienem zrobić jako programista, który ma obowiązek informować mniej zaznajomionych technologicznie klientów o zagrożeniach, z jakimi się spotykają? * Krótko mówiąc, że dostawca hostingu jest do bani, ponieważ nie jest bezpieczny, nie jest rozwiązaniem: jeśli dostawca hostingu nie jest niepopularny, klient będzie ufał dużej firmie hostingowej, a nie niezależnemu programiście. * Szczegółowe wyjaśnienie każdego aspektu bezpieczeństwa i zarządzania ryzykiem też by nie pomogło, ponieważ byłoby zbyt długie i nudne dla klientów. Spędzanie godzin na rekonfiguracji rzeczy również byłoby dla nich przerażające.


title: GO zamiast C/C++ z cgo

text: Czy możliwe jest zastąpienie C i C++ przez Go + cgo i frameworków interfejsów takich jak Qt czy DirectX na Go? Jakieś potencjalne pułapki, o których powinienem wiedzieć? AKTUALIZACJA: Widzę, że moje pytanie nie było wystarczająco precyzyjne. Oczywiście spodziewałem się problemów z koncepcjami Go, które nie są dostępne w C/C++, m.in. gorutyny. Naprawdę chciałem wiedzieć, czy możesz użyć Go do zastąpienia standardowej funkcjonalności C++. Mam nadzieję, że uda mi się przekazać mój pomysł: myślałem o Go jako o "języku skryptowym" do wykorzystania bibliotek C/C++ w nowym języku. Chciałbym wiedzieć: * Czy można zarejestrować metody Go jako wywołania zwrotne C/C++? * Czy mogę dostarczyć zmienne Go jako parametry funkcji C/C++? * Czy ich wskaźniki są kompatybilne? Go działa na natywnej maszynie wirtualnej, więc domyśliłem się, że może istnieć warstwa abstrakcji nad pamięcią, która unieważnia wskaźniki C/C++. Czy kiedykolwiek używałeś cgo lub wiesz o jego możliwościach?


title: Skalowalne rozwiązanie do odpytywania stron internetowych

text: Chcę dodać powiadomienia push do jednej z moich aplikacji na iOS. Aplikacja jest klientem strony internetowej, która nie oferuje powiadomień push. Co do tej pory wymyśliłem: * Aplikacja wysyła wiadomość do serwera macierzystego przy przejściu w tło, prosząc serwer o rozpoczęcie odpytywania witryny pod kątem zalogowanego użytkownika. * Serwer macierzysty rozpoczyna nowy proces odpytywania tego użytkownika. Odpytywanie odbywa się co tyle sekund/minut. * Gdy użytkownik wraca do aplikacji na iOS, aplikacja wysyła wiadomość do serwera macierzystego, aby zatrzymać odpytywanie. * Serwer macierzysty zabija proces odpytywania użytkownika. * Powtarzać. Problem w tym, że szybko staje się to głupie: setki użytkowników to setki różnych procesów. To po prostu nie jest skalowalne w najmniejszym stopniu. To, co do tej pory napisałem, jest w PHP, używając CURL do odpytywania i zacząłem z PHP kilka dni temu, więc może brakuje mi czegoś oczywistego, co mogłoby mi w tym pomóc. Przydałoby się kilka rad.


title: Łącznik biznesowy/rozwojowy chcący pogłębić zrozumienie w programowaniu

text: Kieruję rozwojem oprogramowania dla zespołu około 20 programistów i jesteśmy przede wszystkim sklepem z serwerami .net/sql. Niedawno stworzyliśmy nową rolę w naszej organizacji, która ma charakter bardziej biznesowy, aby pomóc w ustalaniu priorytetów rozwoju i ten łącznik biznesowy zapytał mnie, czy są jakieś książki lub zasoby, z których mógłby skorzystać, aby lepiej zrozumieć koncepcje oprogramowania w znaczący sposób. Wszelkie sugestie lub porady byłyby bardzo mile widziane.


title: Dlaczego nie możemy napisać zagnieżdżonych funkcji skróconych w Clojure?

text: Próbowałem dzisiaj ocenić wyrażenie Clojure za pomocą zagnieżdżonych funkcji skróconych, ale mi to nie pozwoliło. Wyrażenie to: (#(+ % (#(+ % (* % %)) %)) 5) ; przepraszam za krwawienie z oczu Wynik: IllegalStateException Zagnieżdżone #() nie są dozwolone clojure.lang.LispReader$FnReader.invoke (LispReader.java:630) ...i kilka innych śmieci


title: Kiedy należy używać zmiennych statycznych z typami pierwotnymi?

text: Ostatnio natknąłem się na pytanie NSString: Dlaczego używać statycznych zamiast dosłownych? aw komentarzach pojawiło się nowe pytanie. W Objective-C jest kilka „specjalnych” typów, które są po prostu mapami do prymitywów C. Podobnie jak „NSInteger”. #jeśli __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64 typedef long NSInteger; #else typedef int NSInteger; #endif Wiem, jak używać `statycznych` słów kluczowych dla obiektów, ale nie rozumiem implikacji dla typów prymitywnych C. Kiedy należy używać `statycznego NInteger x` zamiast `NSInteger x`? Co dzieje się z pamięcią w obu przypadkach?


title: Czy składnia dowolnego języka programowania została przetestowana pod kątem użyteczności?

text: Czy składnia dowolnego języka programowania została poddana testom użyteczności przed upublicznieniem? Jeśli tak, jakie rodzaje testów zostały przeprowadzone, jakie były wyniki i jaki wpływ miały wyniki testów na projekt języka?


title: Praktyka programowania par CakePHP

text: Jesteśmy na etapie planowania projektu CakePHP. Jest to dla nas stosunkowo duży projekt, ponieważ jako developer+project manager chcę zatrudnić kogoś do współpracy. Ale to, czego naprawdę chcę, to spędzać mniej czasu na rzeczywistym kodowaniu, nie tracąc kontroli nad jakością kodu. To, co chcę zrobić, to zaprojektowanie wszystkich funkcji projektu w CakePHP, przynajmniej wszystkich funkcji modelu, a część implementacyjną pozostawię koderowi, którego mam zamiar zatrudnić. Ale nadal martwię się, czy stosując takie podejście, stracę kontrolę nad jakością kodu? czy jest to wykonalne, czy też zmieni ten projekt w chaos. Z góry dziękuję wszystkim za przeczytanie mojego pytania i udzielenie odpowiedzi.


title: Czy powinieneś naprawić istniejące wcześniej defekty podczas pracy nad czymś innym?

text: Zagadka: W trakcie pracy nad nową funkcją lub naprawiania defektu znajdujesz w kodzie problem ze starszym kodem. Co powinieneś zrobić? Napraw to i zaryzykuj zmianę zachowania kodu. Albo do tej pory działał przez jakiś przypadek, albo wada nie została wykryta lub nie była warta niczyjego zgłoszenia. Czy powinieneś zostawić to w spokoju i pozwolić, aby problem utrudnił później pracę z kodem? Naprawienie problemu wydłuży tylko czas pierwotnego zadania i zmusi Cię do testu regresji. Niewielu doceni tę pracę. Jednak naprawienie tego wydaje się jakoś słuszne. Kod z mniejszą liczbą problemów jest łatwiejszy do refaktoryzacji i rozbudowy. Od czasu do czasu odnajduję się w takiej sytuacji, pracując nad unowocześnieniem aplikacji internetowej. Nie mogę powiedzieć, czy jestem obsesyjny, czy honorowy, kiedy odrywam się od pracy nad tymi starymi błędami. Jak radzisz sobie w takich sytuacjach? Dzięki, Corey


title: Czy w MVC model powinien obsługiwać walidację?

text: Próbuję ponownie zaprojektować aplikację internetową, którą opracowałem, aby używała wzorca MVC, ale nie jestem pewien, czy walidacja powinna być obsługiwana w modelu, czy nie. Na przykład konfiguruję jeden z moich modeli w następujący sposób: class AM_Products extends AM_Object { public function save( $new_data = array() ) { // Zapisz kod } } **Pierwsze pytanie:** Zastanawiam się więc czy moja metoda zapisu powinna wywołać funkcję walidacji na $new_data lub założyć, że dane zostały już zweryfikowane? Ponadto, gdyby miał oferować walidację, myślę, że część kodu modelu do definiowania typów danych wyglądałaby tak: class AM_Products extends AM_Object { protected function init() // Wywoływane przez __construct in AM_Object { // To by pasowało do kolumny bazy danych `age` register_property( 'wiek', 'Wiek', array( 'type' => 'int', 'min' => 10, 'max' => 30) ); } } **Drugie pytanie:** Każda klasa potomna AM_Object uruchomiłaby register_property dla każdej kolumny w bazie danych tego konkretnego obiektu. Nie jestem pewien, czy to dobry sposób, czy nie. **Trzecie pytanie:** jeśli walidacja powinna być obsługiwana przez model, czy powinien zwracać komunikat o błędzie czy kod błędu, a widok powinien używać kodu do wyświetlania odpowiedniego komunikatu?


title: Dlaczego nie ma obsługi typu WSDL dla Web Api?

text: Tak więc dopiero zaczynam pracę z .Net WebApi i od razu zauważam, że nie ma umowy określającej wygląd i sposób wykorzystania interfejsu API (żądanie/odpowiedzi z każdej akcji), zwykle ma to postać WSDL dla WCF/mydła. Wydaje mi się, że jest to coś, co byłoby bardzo cenne i znacznie ułatwiłoby życie konsumentom Twojego Api. Czy istnieje powód, dla którego go nie ma? Czy istnieje paradym programowania lub zasada, której nie jestem świadomy? Czy jest sposób na stworzenie takiego?


title: Czy wszyscy programiści powinni uczyć się przynajmniej jednego języka bardzo wysokiego poziomu?

text: Jeden obowiązkowy kurs na uniwersytecie dotyczył funkcjonalnych i logicznych języków programowania (Haskell i Prolog). To było trochę interesujące, a większość, z którymi rozmawiałam, wykazywała jeszcze mniejsze zainteresowanie kursem (a nawet nauką języków na bardzo wysokim poziomie, jeśli o to chodzi). Ogólny konsensus był taki, że wystarczy znać popularne języki, takie jak C, C++, Java, Python itp. Ale czy tego rodzaju języki są niedoceniane? Czy wszyscy programiści powinni uczyć się przynajmniej jednego języka bardzo wysokiego poziomu, nawet jeśli nigdy nie będą mieli z niego żadnego praktycznego zastosowania?


title: Czy coraz częstsze korzystanie z coraz wyższych języków programowania może prowadzić do deficytu programistów ze znajomością architektury komputerowej?

text: Cytat z Wikipedii dotyczący artykułu „Język programowania wysokiego poziomu”: > Język programowania wysokiego poziomu to język programowania z silną > abstrakcją od szczegółów komputera. W porównaniu z niskopoziomowymi językami programowania > może wykorzystywać elementy języka naturalnego, być > łatwiejsze w użyciu lub bardziej przenośne na różnych platformach. Takie języki ukrywają szczegóły > operacji procesora, takie jak modele dostępu do pamięci i zarządzanie zasięgiem. Oznacza to, że wraz ze wzrostem poziomu języka programowania programista oddala się od sprzętu, na którym działa program. Teraz nie znam statystyk użycia języków na różnych poziomach, ale podejrzewam, że języki wyższego poziomu coraz częściej zastępują języki niższego poziomu. Jeśli tak, to czy może to prowadzić do deficytu programistów ze znajomością architektury komputerowej? Czy byłby to problem dla branży?


title: Przepływ pracy kontroli wersji (Subversion)

text: Nauczyłem się używać subversion i chciałbym, żeby ktoś wyjaśnił, czy moje rozumienie jest prawidłowe? 1. Utwórz repozytorium główne w określonej lokalizacji (czy to na serwerze WWW, czy lokalnie). 2. Dodaj/importuj pliki do wspomnianego repozytorium 3. Pobierz kopię repozytorium do pracy (lub określone pliki) do katalogu roboczego. 4. Zmień/pracuj/dodaj określone pliki. 5. Zatwierdź zmiany z powrotem w repozytorium głównym (z notatką wyjaśniającą zmiany, chociaż zmienione pliki są odnotowane, prawda?) 6. Szczęśliwe dni... Zakładając, że to prawda, mam kilka pytań. **Gdy pracujesz w zespole, co się dzieje, gdy kilka osób pracuje nad jednym projektem i zmienia te same pliki na różne sposoby w ciągu jednego dnia?** **Na pewno, gdy te zmiany zostaną zatwierdzone, nadpiszą się nawzajem?** * *Jak należy testować ich zmiany przed zatwierdzeniem ich z powrotem do głównego repozytorium?** **Używając PHP w moim przykładzie, czy katalog 'working' powinien znajdować się w moim folderze xampp, abym mógł przetestować przed zatwierdzeniem. A może na serwerze internetowym powinny znajdować się dwa „repozytorium główne” – jedno do testowania, a drugie do produkcji?** Przepraszamy za pytania dla początkujących – wydaje się, że nie ma wielu samouczków ani dokumentacji obejmujących podstawy – rozumiem koncepcję kontrola źródła w celu wycofywania, śledzenia zmian i innych, ale może potrzebować wyjaśnienia, w jaki sposób zespoły mogą z niego efektywnie korzystać. Jeśli chodzi o to, że jedna osoba powinna pracować tylko nad jednym plikiem na raz, wydaje się to trochę… dziwne. Jeśli pracujesz z architekturą MVC, widzę potrzebę wspólnych widoków i kontrolerów, które będą potrzebne do pracy przez kilka osób.


title: Jak dużej kontroli mogę oczekiwać nad swoim środowiskiem pracy?

text: Obecnie jestem studentem, ale mam zamiar szukać pracy w przyszłym semestrze i trochę się martwię, że praca, którą dostanę, utknęłam ze zbyt wysokim stołem, który jest za nisko i krzesło, które ledwo podtrzymuje moje plecy. Jest to dla mnie bardzo ważne, ponieważ doświadczyłem już różnych problemów związanych z używaniem komputera z powodu złego ustawienia i naprawdę nie chcę, aby stanowiło to problem, gdy ubiegam się o pracę. Zastanawiałem się więc, jak dużej kontroli mogę się spodziewać w miejscu pracy nad meblami/sprzętem, którego używam? Zakładam, że podłączenie własnej myszy/klawiatury to nic wielkiego, ale co z przyniesieniem własnego krzesła, a może ekranów? Domyślam się, że biurko jest zwykle trudne/niemożliwe do przerobienia, ale czy jest to zupełnie niesłychane? A czy środowisko pracy kiedykolwiek będzie dla ciebie przełomem?


title: Dobra praktyka OnClickListener

text: Który ze sposobów zapewnia lepszą wydajność lub jest dobrą praktyką programistyczną, polegającą na tym, że aktywność posiadacza rozszerza `OnClickListener` i tworzy klauzulę `Switch()` dla `getItemId()` lub tworzy jedną `OnClickListener` dla każdego z przyciski lub widżety, które tego potrzebują, lub tworzenie oddzielnych klas w tym samym (lub innym) pakiecie, który implementuje `OnClickListener` i umieszcza je w działaniu?


title: Czy program obiektowy może być postrzegany jako maszyna skończona?

text: To może być filozoficzne/podstawowe pytanie, ale chcę je tylko wyjaśnić. W moim rozumieniu maszyna skończona jest sposobem modelowania systemu, w którym wyjście systemu będzie zależeć nie tylko od bieżących danych wejściowych, ale także od aktualnego stanu systemu. Dodatkowo, jak sama nazwa wskazuje, skończoną maszynę stanową można podzielić na skończoną liczbę N stanów z odpowiednim stanem i zachowaniem. Jeśli to prawda, to czy każdy obiekt z elementami składowymi danych i funkcji nie powinien być stanem w naszym modelu obiektowym, czyniąc każdy projekt zorientowany obiektowo maszyną skończoną? Jeśli to nie jest interpretacja FSM w projektowaniu obiektów, co dokładnie ludzie mają na myśli, gdy wdrażają FSM w oprogramowaniu? czy czegoś mi brakuje? Dziękuję


title: Wywiad z konsultantami

text: Przeprowadziłem rozmowy kwalifikacyjne z wieloma kandydatami na stanowiska płatne. Niedawno dowiedziałem się, że zatrudniamy konsultanta na kilka miesięcy, który pomoże nam opracować natywną aplikację na iPhone'a. Jesteśmy sklepem .NET i nikt z nas nie ma żadnego doświadczenia z tworzeniem iPhone'a. Słyszałem też plotki, że w przyszłości planujemy zatrudnić więcej konsultantów, aby pomagali rozwijać się na innych różnych platformach. Jak powinienem przeprowadzić wywiad z tymi konsultantami, biorąc pod uwagę, że nie mam doświadczenia z tego typu rozwojem? Bez względu na konkretne pytania dotyczące platformy, o czym muszę pamiętać podczas rozmów z konsultantami? Zwykle podczas rozmowy kwalifikacyjnej zadaję pytania, na które znam odpowiedź. Nigdy nie zapytałbym kandydata o coś, na co nie wiem, jak odpowiedzieć. Ponieważ jest to inna sytuacja, o co muszę zapytać, aby upewnić się, że są ekspertami w danej dziedzinie? Czy właściwe jest zadawanie konkretnych pytań, które ostatecznie będziemy musieli rozwiązać podczas rozmowy kwalifikacyjnej?


title: programowanie generyczne – skąd się wzięło?

text: Próbuję ustalić, czy programowanie generyczne było funkcją programowania funkcjonalnego, która została następnie wprowadzona do Javy, C++ i C#, czy też ten ostatni skopiował ją z języków programowania funkcjonalnego, takich jak Haskell, Lisp, OCaml itp.? Google podaje mi wiele informacji o tym, czym jest programowanie generyczne, ale nie o tym, skąd się wzięło. Widzę tylko, że Ada zaimplementowała to wcześnie. Czy zaklasyfikowałbyś to jako technikę programowania funkcjonalnego?


title: Algorytm wyszukiwania sąsiadów grafu skierowanego

text: Czy istnieje algorytm przeszukiwania grafu skierowanego (drzewa) w poszukiwaniu sąsiadów? Moje obecne rozwiązanie brute-force działa w następujący sposób: dla każdego węzła n: dla każdego dziecka c z n dla każdego rodzica p z c if (p != n) insert edge (p,n) mam do czynienia z ca. 700 000 węzłów, z których każdy ma od 1 do 1000 krawędzi, a obecnie mam do czynienia ze zbyt długimi czasami działania: głównie z powodu tego, że wykonuję ten algorytm na grafowej bazie danych, ponieważ wymagałby zbyt dużej ilości pamięci.


title: Model klient/serwer, w którym serwer odrzuca połączenia od *nowszych* klientów

text: Używam komercyjnego oprogramowania, w którym serwer odrzuci każdą próbę połączenia z _nowszym_ klientem. Innymi słowy, możesz użyć wersji 8 klienta, aby połączyć się z serwerem w wersji 10.0, ale nie wersji 10.1 klienta. Oczywiście to oprogramowanie jest tym, czym jest. Ale dlaczego miałoby to być zaprojektowane w ten sposób? Dlaczego klienci mieliby nie być wstecznie kompatybilny? Jakie korzyści (jeśli w ogóle) ma to rozwiązanie? Ta konfiguracja wydaje mi się bardzo sprzeczna z intuicją i chcę spróbować ją zrozumieć. (Oprogramowanie jest bazą danych, ale nie sądzę, aby miało to znaczenie dla pytania).


title: Projektowanie biblioteki wykresów javascript

text: Zacząłem kodować bibliotekę wykresów na bazie d3js: Moja biblioteka wykresów. Czytałem wykresy wielokrotnego użytku Javascript API i Towards reusable charts. Jednak tak naprawdę NIE podążam za sugestiami, ponieważ nie jestem do nich przekonany. Oto jak moja biblioteka może zostać wykorzystana do stworzenia wykresu bąbelkowego: var chart = new XYBubbleChart(); chart.data = [{"xValue":200,"yValue":300},{"xValue":400,"yValue":200},{"xValue":100,"yValue":310}]; //ustaw dane chart.dataKey.x = "xValue"; chart.dataKey.y = "yValue"; chart.elementId = "#wykres"; chart.utwórzWykres(); Oto moje pytania: 1. Nie używa łańcuchów. Czy to duży problem? 2. Każda własność i funkcja jest publicznie eksponowana. (Przykład: szerokość, wysokość są widoczne w Chart.js). W OOP chodzi o abstrakcję i ukrywanie, ale nie widzę teraz sensu. Myślę, że ujawnienie wszystkiego daje elastyczność w zmianie właściwości i funkcjonalności wewnątrz podklas i obiektów bez pisania dużej ilości kodu. Jakie mogą być pułapki takiej ekspozycji? 3. Zaimplementowałem funkcje takie jak: powiększanie, "pokazywanie okienek informacyjnych po kliknięciu punktu danych" jako "umiejętności". (przykład: XYZoomingAbility.js). Zasadniczo takie "umiejętności" akceptują obiekt "wykres", bawią się publicznymi zmiennymi "wykresu", aby dodać funkcjonalność. To, co mi to pozwala, to dodanie zdolności, pisząc: ActivateZoomAbility(chartObject); Moim celem jest oddzielenie „wizualizacji” od „interaktywności”. Chcę, aby "interaktywność" jak: powiększanie było podłączone do wykresu, a nie wbudowane w wykres. Na przykład nie chcę, aby mój wykres bąbelkowy wiedział cokolwiek o „przybliżaniu”. Jednak chcę powiększać wykres bąbelkowy. Jaki jest najlepszy sposób, aby to zrobić? 4. Jak testować i co testować? Napisałem mieszane testy: jaśmin i rzeczywiste pliki html, dzięki czemu mogę testować ręcznie w przeglądarce.


title: Rekomendowana kolejność nauki wzorców projektowych?

text: Nie mogę nie zauważyć ilości wzorców projektowych, które tam są. Czy ktoś ma jakieś sugestie dotyczące zamówienia, w którym powinienem się ich nauczyć? A może powinienem wybierać i wybierać je na chybił trafił? Jedyny, jaki do tej pory znam, to singleton.


title: Strategia projektowania wtyczki API

text: Pracuję nad aplikacją, dla której kluczowe jest bogate API wtyczek. Jaki jest najlepszy proces tworzenia interfejsu API, który jest intuicyjny i łatwy do nauczenia?


title: Ile WinDbg powinienem wiedzieć?

text: Zacząłem uczyć się WinDbg i wydaje się, że to wielki świat. Zastanawiam się, ile WinDbg powinienem wiedzieć, aby móc używać go w praktycznym świecie. Po drugie, proponuj dobry materiał, aby zrozumieć WinDbg.


title: QlineEdit: brak takiego pliku lub katalogu

text: Mam problem. Mam QT 5.3.1 i Ubuntu 14.04. Na przykład: #include <QWidget> #include <QHBoxLayout> #include <QVBoxLayout> #include <QPushButton> #include <QLabel> #include <QPixmap> #include <QImage> #include <QComboBox> #include <QFileDialog> <QlineEdit> #include <QLabel> #include <QFile> #include <QIODevice> #include <QSlider> #include <QMessageBox> Działa dobrze. Problemem jest następujący wiersz: #include <QlineEdit> Błąd zwrotu kompilatora: QlineEdit: Brak takiego pliku lub katalogu. Jak to naprawić?


title: Architektury procesorów do testowania przenośności C/C++

text: Obecnie pracuję nad bazą kodu C/C++, która jest dość przenośna, może kompilować się na większości systemów uniksowych, a także na MS-Windows (MSVC), używając różnych popularnych kompilatorów. Wcześniej odkryłem, że testowanie na różnych systemach operacyjnych i architekturach może pomóc znaleźć niejasne błędy lub złe założenia. Martwię się z powodu dominacji x86/amd64 nasz kod może nieświadomie stać się mniej przenośny. Poza testowaniem na systemie big-endian (aby znaleźć oczywiste błędy z big/little endian), czy są jakieś architektury, które mają cechy, które czynią je lepszymi pod kątem przenoszenia oprogramowania do testów obciążeniowych? Przykłady możliwych różnic. * inny endian. * inne zachowanie podczas wątkowania. * zachowanie pamięci stosu. * rozmiar typów pierwotnych (char, short, int, long, float... itd.). * wyrównanie/dopełnienie struktur (które mogą ukrywać błędy). * różnica w optymalizacjach dokonanych przez kompilator. Czy są jakieś architektury, które mają bardziej znaczące różnice w stosunku do x86/amd64, co czyni je lepszymi kandydatami do ujawniania problemów z przenoszeniem kodu? (i mieć kompilatory i biblioteki C/C++ - libc, libstdc++). Pytam, ponieważ jest to spora inwestycja czasowa w skonfigurowanie nowego systemu, nawet jeśli jest emulowany. * * * _jeśli nie jest jasne, co mam na myśli przez architekturę procesora, np. (x86, amd64, ia64, mips, risc, arm, m68k, ppc, itanium)_ * * * _Uwaga, nie proponuję tego jako głównym sposobem wykrywania błędów jest uruchamianie wielu narzędzi do analizy statycznej i testów, ale w przeszłości znaleźliśmy błędy w kodzie z powodu różnic w mniej popularnych platformach (SGI, SPARC, Solaris, BSD itp. Jednak niektóre z tych systemów zanikają użytkowania)_


title: Czy w środowisku korporacyjnym stosuje się zasady BDD obok „tradycyjnych” testów jednostkowych, czy zamiast nich?

text: Mam problem z wizualizacją, w jaki sposób wypełniana jest luka między gruboziarnistymi, n-warstwowymi granicami, wysokopoziomowymi, automatycznymi testami akceptacyjnymi a testami jednostkowymi niższego poziomu w zakresie zadania/podzadania. Moją motywacją jest to, aby móc wykonać dowolny test jednostkowy w moim systemie i móc prześledzić wstecz, poprzez pokrycie, które scenariusze wykorzystują ten test jednostkowy. Znam idee `BDD`: Rozszerzenie `TDD` i pisanie scenariuszy na wysokim poziomie projektowania rozwiązań w formacie `Gerkin` oraz prowadzenie tych scenariuszy za pomocą narzędzi takich jak `JBehave` i `Cucumber`. Równie dobrze znam skromny test jednostkowy na poziomie narzędzia lub zadania i używam `xUnit` do testowania różnych ścieżek funkcji. Zaczynam się odczepiać wtedy, gdy próbuję wyobrazić sobie te dwie dyscypliny stosowane razem w środowisku przedsiębiorstwa. Może się mylę, ponieważ masz tendencję do używania jednego lub drugiego podejścia? Próbując wyartykułować moje dotychczasowe myśli, twierdzmy, że mam rację sądząc, że oba są używane. W „zwinnym” świecie, „historyjki użytkownika” są podzielone na „zadania” i „podzadania”, a w środowisku korporacyjnym, gdzie problemy są duże, a liczba programistów na „historię” jest duża, zadania te a podzadania są rozdzielane pomiędzy zespół ludzi ze specjalistycznymi umiejętnościami rozwiązywania problemów. Niektórzy programiści, na przykład, mogą specjalizować się w programowaniu średniego poziomu, rozwijać warstwę „kontrolera” i kontynuować pracę w dół. Inni mogą specjalizować się w rozwoju interfejsu użytkownika i pracować od warstwy „kontrolera” w górę. Deweloperzy mogą zatem dzielić się implementacją pojedynczego ciągu zadań, które po ponownym sklejeniu zrealizują „historię”. W tym przypadku wydaje mi się, że cykle `TDD` na poziomie zadań i podzadań są nadal konieczne, aby zapewnić, że wysiłki tych programistów będą współpracować poprawnie w ramach jednej warstwy i między warstwami (wyśmiewanie współpracowników) . Praca w ten sposób wymaga wcześniejszego zaprojektowania rozwiązania na wysokim poziomie, dzięki czemu umowy między warstwami są uzgadniane i przestrzegane. Być może jest to wyartykułowane jako „diagram sekwencji” i być może wyłania się to podczas sesji podziału „zadań” dla „historii”. Jednak z drugiej strony mamy wartość zdefiniowania testów akceptacyjnych `BDD` na wyższym poziomie, aby skonfigurować, że wszystkie bloki współpracują ze sobą zgodnie z oczekiwaniami – przypuszczam, że jest to forma supertestu integracji. Przypuszczam, że odpowiedź, której tutaj szukam, oprócz prostszego tak/nie na pytanie „oba”, jest wyjaśnieniem/przepracowanym przykładem tego, jak ja i zespół programistów zaczynamy od jednego n-warstwowego scenariusza i kończymy z wdrożeniem w środowisku korporacyjnym, w którym byliśmy w stanie podzielić zadania na warstwy i udostępnić je między sobą oraz pracować równolegle, aby zmienić test scenariusza `BDD` z czerwonego na zielony, zapewniając jednocześnie, że kod, który piszemy, jest pisany tylko dlatego, że wymaga tego scenariusz, a na poziomie drobnoziarnistym napisany przez nas kod jest odpowiednio testowany jednostkowo po cyklach `TDD` na poziomie zadania i podzadania. Jeśli oczywiście to jest _poprawne_?


title: Przejście z Javy i C do C++

text: Nauczyłem się Javy i jestem w niej całkiem kompetentny. Niedawno nauczyłem się również C. Spojrzałem na porównanie między Javą i C++ i podobają mi się funkcje C++, takie jak przeciążanie operatorów i jego szybkość. Tak więc C++ jest językiem OOP, ale ma również wszystkie rzeczy, których nie ma java i C, takie jak wskaźniki i alokacja pamięci. Czy muszę coś zmienić w moim projekcie OOP, aby uwzględnić wskaźniki i alokację pamięci? Jeśli tak, co muszę zmienić? Jeśli nie, dlaczego nie?


title: Licencjonowanie kodu z mojego osobistego projektu do mojej firmy za pośrednictwem licencji open-source

text: Obecnie pracuję nad pewnym problemem dla mojej firmy (tj. gdzie pracuję na zlecenie i nie jestem w żaden sposób właścicielem kodu, który wytwarzam). Wygląda na to, że w jednym z moich przeszłych (albo kto wie, może jeszcze obecnych) osobistych projektów znajduje się kilka przydatnych plików z kodem źródłowym, które powinny pomóc w rozwiązaniu problemu, nad którym pracuję. Ani projekt osobisty, ani projekt firmowy nie są open source i nie będą takie w przewidywalnej przyszłości. Chciałbym zaimportować tę (małą) część mojego osobistego projektu do drzewa źródłowego firmy. Ale ponieważ nie nazywam jeszcze mojego projektu RIP, chciałbym przekazać im kod w taki sposób, aby zachować moje prawa autorskie do kodu. No i oczywiście musieliby mieć również prawa autorskie do kodu – zwabienie ich w pułapkę zdecydowanie nie jest moim zamiarem. W związku z tym chciałbym dać im wszelkie prawo - do modyfikowania, uruchamiania, rozpowszechniania, wykorzystywania w innych projektach itp., ale nie pozbawiać mnie tych samych praw. I nie obchodzi mnie, czy ta (znowu mała) część mojego projektu stanie się w końcu publicznie dostępna. Obecnie mam na to rozwiązanie: 1. Umieść informacje o prawach autorskich wraz z licencją w każdym pliku kodu źródłowego, który zamierzam zaimportować. 2. Zatwierdź to w moim repozytorium Git (hostowanym prywatnie). 3. Zaimportuj określone pliki i zatwierdź je w ich repozytorium (hostowanym jako prywatne repozytorium GitHub). Tekst licencyjny, którego używam, oparty jest na licencji MIT, ale nieco zmodyfikowany (dodałem trzeci akapit), oto on: # Copyright (c) 2013 Prawdziwa nazwa programisty # # Niniejszym udziela się nieodpłatnie pozwolenia na osoba otrzymująca kopię # tego oprogramowania i powiązanych plików dokumentacji ("Oprogramowanie"), w celu zajmowania się # Oprogramowaniem bez ograniczeń, w tym między innymi prawami # do używania, kopiowania, modyfikowania, łączenia, publikowania, rozpowszechniania, udzielania sublicencji i /lub sprzedawać # kopie Oprogramowania i zezwalać na to osobom, # którym Oprogramowanie jest dostarczane, pod następującymi warunkami: # # Powyższa uwaga o prawach autorskich i niniejsza uwaga o zezwoleniu powinny być zawarte w # wszystkich kopiach lub istotnych częściach Oprogramowania. # # Powyższe dotyczy wyłącznie plików zawierających tę notę o prawach autorskich i # nie ma zastosowania do reszty pakietu oprogramowania zawierającego te pliki. # # OPROGRAMOWANIE JEST DOSTARCZANE „TAK JAK JEST”, BEZ JAKICHKOLWIEK GWARANCJI, WYRAŹNYCH LUB # DOROZUMIANYCH, W TYM MIĘDZY INNYMI GWARANCJI WARTOŚCI HANDLOWEJ, # PRZYDATNOŚCI DO OKREŚLONEGO CELU I NIENARUSZANIA PRAW. W ŻADNYM WYPADKU # AUTORZY LUB WŁAŚCICIELE PRAW AUTORSKICH NIE PONOSZĄ ODPOWIEDZIALNOŚCI ZA JAKIEKOLWIEK ROSZCZENIA, SZKODY LUB INNE # ODPOWIEDZIALNOŚCI, CZY W RAMACH UMOWY, CZYNNEGO CZYNNEGO LUB INNEGO OFERTY W # OPROGRAMOWANIE. A więc pytania brzmią: 1. Co najważniejsze, czy ten środek ochroni obie strony przed możliwymi kwestiami prawnymi? 2. Czy dodany przeze mnie fragment (akapit trzeci) jest konieczny i/lub przydatny? Czy można to ulepszyć? 3. Czy generalnie dobrym pomysłem jest przekazanie firmie własnego kodu, aby przyspieszyć rozwój (zakładając, że moje i ich projekty nigdy nie będą konkurować)?


title: Czy mogę skutecznie testować funkcje JavaScript za pomocą frameworka do testowania jednostkowego PHP?

text: Jeśli chcę testować jednostkowo niektóre z moich funkcji javascript, czy bardziej wydajne (i wykonalne) byłoby użycie już zainstalowanego frameworka do testowania jednostkowego PHP, czy też powinienem użyć frameworka do testowania jednostkowego javascript? **EDYTUJ:** Wygląda na to, że muszę trochę wyjaśnić. Używam javascript do walidacji formularzy. Wygląda na to, że jakaś logika nie działa tak, jak chcę, i pomyślałem sobie, że byłby to dobry punkt, aby zacząć używać testów jednostkowych (coś, co pojawiło się w moim zakresie dopiero niedawno). Zacząłem już używać SimpleTest w moim małym projekcie, ale nigdy nie testowałem logiki generowanej po stronie klienta. Teraz wiem, że SimpleTest ma możliwość emulacji np. przeglądarki. Ale zastanawiałem się, jaką inną metodą byłyby testy jednostkowe mojej walidacji formularza. Gdy szukałem pomysłu, zdałem sobie sprawę, że istnieje również framework do testów jednostkowych dla javascript, ale po krótkich poszukiwaniach na niektórych stronach SE nie znalazłem nic na temat korzystania z PHP i Javascript Framework razem, więc Zastanawiał się, jak powszechna była taka sytuacja i jak radzą sobie w takim środowisku inni ludzie.


title: Wstępny projekt klasy: modyfikatory dostępu i konstruktory bezargumentowe

text: Kontekst: Student pracuje nad projektowaniem klas w projekcie osobistym/pobocznym na lato. Nigdy nie napisałem niczego zaimplementowanego przez innych ani nie musiałem utrzymywać kodu. Próba zmaksymalizowania enkapsulacji i wyobrażenie sobie, co ułatwiłoby utrzymanie kodu. Koncepcja: Projekt klasy Tight/Loose, gdzie Tight i Loose odnoszą się do modyfikatorów dostępu i konstruktorów. Ścisłe: początkowo wszystko, w tym ustawiające, jest prywatne i nie ma konstruktora bezargumentowego (tylko pełny konstruktor). Luźny: nie ciasny Wyjątki: oczywiste, jak toString Rozumowanie: Jeśli kod na samym początku jest ciasny, należy zagwarantować, że zmiany w zakresie dostępu/tworzenia nigdy nie uszkodzą istniejących implementacji. Rozluźnienie kodu następuje stopniowo i musi być przemyślane, uzasadnione i bezpieczne (zwalidowane). Korzyść: Istniejący kod implementacyjny nie powinien ulec uszkodzeniu, jeśli zmiany zostaną wprowadzone później. Koszt: tworzenie zajmuje więcej czasu. Ponieważ to moje własne myślenie, mam nadzieję, że otrzymam informację zwrotną, czy powinienem naciskać, aby pracować w ten sposób. Dobry pomysł czy zły pomysł?


Czy można utworzyć niestandardowego klienta poczty e-mail dla Gmaila przy użyciu interfejsów API Java? Czy tylko Google może to zrobić?


title: Wydajne ładowanie autobusów

text: To jest coś, co zrobiłem dla firmy zajmującej się podróżami autobusowymi dawno temu i nigdy nie byłem zadowolony z wyników. Ostatnio myślałem o tym starym projekcie i pomyślałem, że powrócę do tego problemu. ## Problem: Firma zajmująca się podróżami autobusowymi ma kilka autobusów o różnej pojemności pasażerskiej (np. 15 autobusów 50-osobowych, 25 autobusów 30-osobowych ... itd.). Wyspecjalizowali się w oferowaniu transportu dla bardzo dużych grup (300+ pasażerów na grupę). Ponieważ każda grupa musi podróżować razem, musieli efektywnie zarządzać swoją flotą, aby zmniejszyć ilość odpadów. Na przykład, 88 pasażerów jest lepiej obsługiwanych przez trzy 30-osobowe autobusy (2 wolne miejsca) niż przez dwa 50-osobowe autobusy (12 pustych miejsc). Inny przykład, 75 pasażerów byłoby lepiej obsługiwanych przez jeden autobus 50-osobowy i jeden 30-osobowy, co stanowi mieszankę typów. Jaki jest do tego dobry algorytm?


title: Jak założyć licealny klub programistyczny Java/Android dla dzieci w wieku 13-17 lat?

text: Moja żona jest nauczycielką matematyki w liceum i rozważa założenie klubu programistycznego dla osób w wieku 13-17 lat, które wykazują zainteresowanie. Wydaje się, że ich zainteresowanie dotyczy aplikacji i Androida, z którymi mam niewielkie doświadczenie. Dzieciaki byłyby (przypuszczalnie) zainteresowane programowaniem i miałyby dość wysoki poziom wiedzy komputerowej. Zapewnimy im zasoby i trochę wiedzy, ale miejmy nadzieję, że wielu będzie się kierować własnymi wskazówkami. Mam nadzieję, że przepełnienia stosu mogą dostarczyć wskazówek lub punktów wyjścia. Konkretne rzeczy, które myślę, że będę potrzebować; * Środowisko rozwoju; Obecnie szukam Javy i Androida, opracowanych w Eclipse, prawdopodobnie zainstalowanych na podarowanym starszym sprzęcie * Jakiś początkowy kierunek; Wydaje się, że istnieje mnóstwo samouczków „uruchom androida”, więc niektóre zalecenia dotyczące dobrych są cenne, podobnie jak zalecane książki papierowe * Cel; Jakiś ostateczny projekt, do którego powinni kręcić * Trasa; To jest miejsce, w którym utknąłem najbardziej, jak przeprowadzić ich przez wymagane koncepcje Java i naukę, której będą potrzebować Kilka powiązanych pytań już tam Język + IDE do nauczania uczniów szkół średnich? Nauczanie "projektowania/rozwoju stron internetowych" w grupie licealno-szkolnej. Dobre źródła? Jak mogę zainicjować społeczność programistów w mojej szkole?


title: Optymalizacja wyszukiwania skrótów i wydajności pamięci w Go

text: W ramach ćwiczenia wdrażam HashLife in Go. Krótko mówiąc, HashLife działa poprzez zapamiętywanie węzłów w drzewie czwórkowym, dzięki czemu po obliczeniu wartości danego węzła w przyszłości można ją po prostu wyszukać, a nie ponownie przeliczyć. Czyli np. jeśli masz węzeł na poziomie 8x8, pamiętasz go przez czworo dzieci (każde na poziomie 2x2). Więc następnym razem, gdy zobaczysz węzeł 8x8, kiedy obliczasz następną generację, najpierw sprawdzasz, czy widziałeś już węzeł z tą samą czwórką dzieci. Jest to rozszerzone na wszystkie poziomy drzewa czwórkowego, co daje kilka niesamowitych optymalizacji, jeśli np. jesteś 10 poziomów nad liśćmi. Nic dziwnego, że wygląda na to, że sednem wydajności jest wyszukiwanie węzłów według wartości węzłów podrzędnych. Obecnie mam hashmap {&upper_left_node,&upper_right_node,&lower_left_node,&lower_right_node} -> node Więc moja funkcja wyszukiwania wygląda następująco: func FindNode(ul, ur, ll, lr *Node) *Node { var node *Node var ok bool nc : = NodeChildren{ul, ur, ll, lr} node, ok = NodeMap[nc] if ok { return node } node = &Node{ul, ur, ll, lr, 0, ul.Level + 1, nil} NodeMap[nc ] = węzeł zwrotu węzła } Próbuję się dowiedzieć, czy wiersz "nc := NodeChildren..." powoduje alokację pamięci za każdym razem, gdy funkcja jest wywoływana. Jeśli tak, czy mogę / powinienem przenieść deklarację do zakresu globalnego i po prostu modyfikować wartości za każdym razem, gdy ta funkcja jest wywoływana? A może jest na to bardziej efektywny sposób? Wszelkie porady/opinie będą mile widziane. (nawet styl kodowania gnidów; to dosłownie pierwsza rzecz, którą napisałem w Go, więc z chęcią poznam wszelkie opinie)


title: Jak w agile radzić sobie z problemami z ukończonymi historiami?

text: Jestem nowy w Agile i scrum i chcę zapytać o kilka rzeczy. Załóżmy, że mam dwie historyjki użytkownika `1, 2` Załóżmy, że skończyłem `historię 1` w sprincie 1, ale robiąc `sprint 2` zrobiłem coś, co psuje coś tak, że moje rzeczy w `user story 1` się zepsuły i muszę wydać więcej czas na to ponownie. Co muszę zrobić w tej sprawie?


title: Jak zdefiniować szwy między warstwą domeny a bazą danych pełną procedur składowanych?

text: Mamy starszą bazę danych pełną procedur składowanych. Te procedury składowane są w pewnym sensie kategoryzowane przez CRUD, ale po sprawdzeniu niektórych procedur nie są „proste”, ponieważ mogą aktualizować, usuwać, wszelkie inne rekordy w innych tabelach. Więc moim zdaniem (popraw mnie, jeśli się mylę) wydaje się, że używanie ORM byłoby dość trudne, ponieważ 1. Nie mam bezpośredniego dostępu do tabel: muszę użyć procedury składowanej 2. Procedury składowane nie będą mapować do CRUD skłaniam się ku zdefiniowaniu repozytoriów, aby odizolować warstwę domeny od bazy danych, ale obawiam się, że musiałbym zdefiniować dużo infrastruktury (caching, unit of work itp.), którą dostaję „za darmo” w ORM . Jakieś spostrzeżenia?


title: Który zasób byłby najlepszy do nauki C# / .Net?

text: Jestem programistą PHP / Java / Objective-C, który chce w końcu nauczyć się niektórych technologii MS, zwiększyć swoją zbywalność itp. Patrzę na te dwie książki, czy ktoś doświadczony w tej dziedzinie może zasugerować jedną lub drugą książka, która byłaby dobra do nauki C# / .Net itp.? To, co zrobiło na mnie wrażenie, gdy „Pro C# 2010 i platforma .NET 4” przeglądałem je w księgarni, to fakt, że wyjaśniono wiele wewnętrznych zasad działania i paradygmatów MS, a nie tylko język. Nie miałem okazji przejrzeć drugiego i prawdopodobnie nie będę miał szansy. Oto dwa, które rozważam: http://www.amazon.com/2010-NET-Platform-Andrew-Troelsen/dp/1430225491/ http://www.amazon.com/Professional-4-0-NET -Wrox-Programmer/dp/0470502258/ Wiem, że to bardzo specyficzne pytanie, ale czuję, że może ono przynieść wiele korzyści innym, takim jak ja, próbującym dostać się do jakiejś techniki MS.


title: Czy gramatyka GPL Bison infekuje moją aplikację?

text: Zastanawiam się nad użyciem gramatyki GPL Bison dla własnego kompilatora. Czy gramatyka „zainfekuje” mój parser tak, że musi być open source? Gramatyka - pod względem - wejście żubra to GPL.


title: Czy mogę używać nowej licencjonowanej biblioteki/kodu BSD w komercyjnym projekcie o zamkniętym kodzie źródłowym?

text: Znalazłem bibliotekę freetype-gl, której chcę użyć. Posiada nową licencję BSD i chciałbym ją wykorzystać w moim projekcie komercyjnym o zamkniętym kodzie źródłowym. Czy mogę to zrobić?


title: O łączeniu sąsiednich literałów ciągu

text: C i C++ kompiluje sąsiednie literały ciągu jako pojedynczy literał ciągu. Na przykład to: "Jakiś tekst..." "i więcej tekstu" jest równoważne z: "Jakiś tekst...i więcej tekstu" W innych językach, takich jak C# lub Java, jest to błąd składni (co jest bardzo dobre BTW). Jakie jest uzasadnienie/historyczny powód, dla którego C i C++ to robią?


title: Klasa problemów do rozwiązania przez edytory sed lub stream

text: Natknąłem się na pytanie przekształć ten tekst za pomocą sed [tylko sed] i zacząłem się zastanawiać, jaką klasę problemów mogą rozwiązać edytory strumieni lub programy/modele obliczeniowe z podobnymi ograniczeniami. Np. Wyrażenia regularne mogą rozwiązywać problemy wymagające stałej/stałej ilości pamięci (Może rozwiązywać wszystkie problemy, które mają deterministyczną automatykę stanów skończonych) Moje pytanie brzmi: jakie są ograniczenia obliczeniowe seda w szczególności i dowolnego edytora strumieni w ogóle i jakie są klasa/klasy problemów mogą być przez nią rozwiązane? (po zmapowaniu, w razie potrzeby, zestaw alfabetu tekstu)


title: Analiza języka programowania

text: W SICP autorzy stwierdzają (sekcja 1.1), że istnieją trzy podstawowe „mechanizmy” języków programowania: > * **wyrażenia pierwotne** , które reprezentują najprostsze byty, z jakimi dotyczy język > > * **środki kombinacji ** , za pomocą których budowane są elementy złożone > prostsze > > * **środki abstrakcji** , dzięki którym elementy złożone mogą być nazywane i > manipulowane jako jednostki > > Jak mogę analizować główny język programowania (Java, dla przykład) pod względem tych elementów lub mechanizmów?


title: Uzasadnienie relacji dwukierunkowej

text: Zazwyczaj za wszelką cenę staram się unikać relacji dwukierunkowych. Ostatnio staram się podążać za filozofią projektowania bardziej zorientowaną na domenę i szukam porady, jak najlepiej rozwiązać konkretny problem. Realizuję podstawową siatkę 2d. Istnieją 3 podstawowe klasy, Przedmiot, Płytka (ma listę przedmiotów) i Świat (ma tablicę 2d płytek). Borykam się z tym, gdzie umieścić metodę move(), która przenosi przedmiot z jednej płytki na sąsiednią. Moim początkowym zamiarem byłoby umieszczenie metody move w klasie Item, ponieważ jest to element, który faktycznie się porusza. Stworzyłoby to jednak zależność cykliczną. W przeszłości zawsze pracowałem z głupimi obiektami, w którym to przypadku metoda move() znajdowała się na wyższej warstwie (jakiś rodzaj WorldManager lub MoveManager), która wie zarówno o kafelkach, jak i elementach. Interesuje mnie, jakie propozycje mogą mieć inni, które mogą uniknąć kolistej zależności przy jednoczesnym zachowaniu filozofii skoncentrowanej na domenie.


title: Struktura plików i folderów witryny internetowej

text: Mam problem z ustaleniem, jak powinna wyglądać prawidłowa struktura strony. Mam tu na myśli to, jak kodować strony i jak powinna wyglądać struktura folderów. Obecnie poruszam się po mojej witrynie używając zmiennych GET w PHP, gdy chcesz przejść do innej strony, więc zawsze ładuję plik index.php. Załadowałbym stronę, którą chciałem tak: $page = "błąd"; if(isset($_GET["strona"]) AND file_exists("strony/".$_GET["strona"].".php")) { $strona = $_GET["strona"]; } elseif(!isset($_GET["strona"])) { $strona = "dom"; } A to: <div id="strona"> <?php include("strony/".$strona.".php"); ? tytuł> <link href='http://fonts.googleapis.com/css?family=Lato:300,400' rel='stylesheet' type='text/css'> <link rel="stylesheet" href="css/ style.css" type="text/css"> <link rel="ikona skrótu" href="favicon.png"/> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11. 0/jquery.min.js" type="text/javascript"></script> <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js " type="text/javascript"></script> </head> Robienie tego w ten sposób sprawia wiele problemów, ponieważ adresy URL nie wyglądają normalnie („?page=apanel/app”), jeśli próbuję uzyskać dostęp stronę z wewnątrz folderu wewnątrz folderu stron, aby zapobiec bałaganowi. Oczywiście nie jest to jedyny sposób, aby to zrobić i nie mogę znaleźć właściwego sposobu, aby to zrobić, ponieważ jestem pewien, że strony internetowe nie łączą arkuszy stylów w każdym pliku, ponieważ byłoby to bardzo złe, gdybyś zmienił nazwę pliku lub musiałeś dodać kolejny plik, musiałbyś go zmienić w każdym pliku. Gdyby ktoś mógł mi powiedzieć, jak to się właściwie robi, lub wskazać mi tutorial, to byłoby świetnie. Dziękuję za Twój czas :)


title: Zautomatyzowane testy internetowe w zależności od kodu programisty

text: Kiedy kontrolerzy jakości piszą zautomatyzowane testy selenowe do testowania wielowarstwowej strony internetowej (np. testowanie aplikacji webowej, która jest oparta na mvs design, spring i database), czy testy powinny wykorzystywać istniejące klasy i frameworki napisane przez programistów, czy też powinniśmy pisać klasy uproszczone do obsługi test? Wadą polegania na frameworkach opracowanych przez deweloperów jest to, że jeśli wystąpi błąd logiczny we frameworku, będzie on obecny w testach. typowym przykładem jest klasa, która pobiera linki z bazy danych i niektóre frameworki drukujące je na stronie. Jeśli testy opierają się na frameworku do zdefiniowania oczekiwanych wyników, a następnie weryfikują je z wynikami na stronie, to jeśli logika we frameworku jest nieprawidłowa, to zdefiniowane oczekiwane wyniki również będą niepoprawne i istnieje ryzyko, że testy minie, nawet jeśli wyniki są błędne. Moim zdaniem automatyczne testy systemowe napisane przez QA powinny być niezależne od bazowego frameworka, podczas gdy automatyczne testy jednostkowe powinny opierać się na bazowym frameworku. Jakie są Twoje myśli?


title: Metody zabezpieczania logowania użytkowników

text: Wydaje mi się, że to pytanie zadano już wcześniej, ale chciałbym mieć świeże odpowiedzi/pomysły - Szczegóły problemu: Powiedzmy, że istnieje system, który umożliwia użytkownikom udział w ankiecie. Użytkownicy będą się do niego logować za pomocą SSO (pojedyncze logowanie) lub w inny sposób, na przykład użytkownik/hasło. I załóżmy, że ten system jest NAPRAWDĘ DOBRY, wszyscy go uwielbiają i jest mnóstwo oszustów, którzy chcieliby oszukiwać, logując się więcej niż raz, kradnąc tożsamości... itd. Wielkie pytanie: Jaka byłaby najlepsza metoda na uwierzytelnianie użytkownicy? Możliwe odpowiedzi, które przyniosłem do tej pory: 1. Używanie identyfikatora PESEL (lub jakiegokolwiek innego urzędowego numeru ID) 2. Numer telefonu (mniej onieśmielający... ale też mniej bezpieczny) 3. E-mail + jeden z powyższych. A oto pytanie dotyczące e-maili: Jeśli używam SSO (logowanie przez e-mail/facebook), czy mogę stwierdzić, że wprowadzone konta są aktywnie używane? 4. Pliki cookie/flash/storage/... mogą być używane w połączeniu z inną, silniejszą metodą identyfikacji, ale ponieważ logowanie nie jest anonimowe, przechowywanie/pliki cookie przeglądarki i tak nie są właściwą metodą. Każdy pomysł zostanie doceniony! :)


Jeśli chodzi o błędy lub problemy, dostępnych jest teraz wiele dobrych narzędzi do śledzenia problemów, które umożliwiają śledzenie statusu i problemów, a także umożliwiają organizowanie ich w celu zarządzania określonymi wydaniami. Poszukuję narzędzi do przypadków testowych, które powinny być w stanie obsłużyć listę funkcjonalności i przypadków testowych z możliwym powiązaniem z nimi, pozwolić zestawom testowym lub planom testów (jako grupy/hierarchie) je uporządkować. Niektóre potencjalne zastosowania mogą polegać na zidentyfikowaniu listy kluczowych przypadków testowych, które należy wykonać, jeśli dotyczy to określonej funkcjonalności lub modułów. Również dodatkowe parametry do wsparcia związane z systemem wykonania. Najlepiej byłoby, gdyby wynik wykonania testów mógł być odnotowany z niezbędnymi komentarzami. Interfejs sieciowy i ewentualne powiadomienia e-mail mogą być niezbędne. Proszę zauważyć, że _NIE_ patrzę na systemy automatyzacji testów, takie jak tempomat itp., ale bardziej na system zarządzania testami. Bardziej interesuje mnie system, który umożliwia wizualizację macierzy Traceability. Najbardziej cenione są projekty open source, choć proszę również zasugerować, czy istnieje oprogramowanie komercyjne. Czy istnieją narzędzia, które pozwalają śledzić i zarządzać przypadkami testowymi oraz wykonywaniem testów?


title: Czy predefiniowany klucz jest wystarczającym zabezpieczeniem podczas wykonywania żądań HTTP między dwoma bezpiecznymi serwerami?

text: Mam skrypt AdWords, który regularnie przesyła poufne dane na mój serwer za pomocą żądania POST HTTP. Ze względów bezpieczeństwa mam wstępnie zdefiniowany 32-znakowy losowy ciąg znaków, który jest weryfikowany przez mój serwer, zanim zaakceptuje dane. **Czy to jest bezpieczne?** Nie wiem zbyt wiele o protokole HTTP, ale wiem, że dane są przesyłane w postaci niezaszyfrowanej. Czy jest prawdopodobne/możliwe, że ktoś uzyska dostęp do danych podczas żądania? Z tego, co zrozumiałem, protokół HTTPS jest najbardziej przydatny w niezaufanej sieci, w której każdy może łatwo szpiegować twoje pakiety. W moim przypadku dane są wysyłane z serwerów Google na serwery mojego hosta (w tym przypadku DreamHost). Czy rozważłbym przejście na HTTPS, czy byłoby to bezcelowe? Czy są jakieś inne pułapki bezpieczeństwa, o których powinienem wiedzieć? Przyjmę pierwszą odpowiedź, która wyjaśni moją sytuację.


title: Blokowanie CAPTCHA dla mojego skryptu skrobania?

text: Pracuję nad projektem scrapingu, który polega na pozyskiwaniu danych z sieci i parsowaniu ich do dalszego wykorzystania. Pracuję przy użyciu PHP i CURL do tworzenia skryptów scrapingowych, które przemierzają dane internetowe, a do tego rodzaju projektów używam biblioteki PHP Dom lub Simple HTML DOM Parser. W ostatnim projekcie napotkałem pewne wyzwania; początkowo stwierdziłem, że docelowa witryna zablokowała adres IP mojego serwera, tak że serwer nie mógł wysyłać żadnych udanych żądań do witryny. Rozumiejąc te problemy jako powszechne, kupiłem zestaw prywatnych serwerów proxy i próbowałem za ich pomocą wykonywać połączenia z żądaniem. Chociaż może to uzyskać pomyślną odpowiedź, zauważyłem, że skrypt otrzymuje jakieś bloki po 2-3 ciągłych żądaniach. Podczas drukowania i sprawdzania odpowiedzi zobaczyłem wyskakujące okienko z prośbą o weryfikację CAPTCHA. Nie widziałem żadnych znaków captcha do wprowadzenia, a także pokazuje błąd „błąd wejściowy: nieprawidłowy odnośnik”. Po zbadaniu źródła mogłem zobaczyć w nim kilka skryptów Google recaptcha. Utknąłem w tym momencie i nie jestem w stanie wykonać mojego skryptu. Mój skrypt służy do gromadzenia danych i musi okresowo przeglądać dużą liczbę stron w witrynie. Ale w obecnym scenariuszu nie jestem w stanie kontynuować mojego skryptu. Widzę, że istnieje kilka opcji rozwiązania tych problemów z captcha, a skrobanie tego rodzaju witryn również jest powszechne. Sprawdzałem wydajność mojego skryptu i odpowiedzi przez ostatnie dwa miesiące. Widziałem, że w pierwszym miesiącu udało mi się wykonać bardzo dużą liczbę żądań z jednego adresu IP i udało mi się uzyskać wyniki. Później dostaję blokadę IP i korzystam z prywatnych serwerów proxy, które mogą dać mi pewne wyniki. Później mam teraz problem z captcha. Byłbym wdzięczny za każdą pomoc lub sugestie w tym zakresie. (Często w tego rodzaju pytaniach otrzymywałem pierwszy komentarz: „Czy prosiłeś o uprzednią zgodę od obiektu docelowego?”. Nie robiłem tego, ale wiem, że wiele witryn robi to, aby uzyskać szczegółowe informacje z witryn i strony docelowe często nie dają do nich dostępu. Szanuję legalność i etykiety skrobania, ale chciałbym wiedzieć, w którym momencie utknąłem i jak mogłem to przezwyciężyć! ) W razie potrzeby mogę podać wszelkie dodatkowe informacje.


title: Czego programista stron internetowych może się nauczyć pracując w dziale wsparcia IT?

text: Jestem starszym studentem CS i mam zamiar ukończyć studia za około rok. Planuję zostać web developerem, ale mam możliwość spędzenia większej ilości czasu w roli wsparcia IT. Wydaje się, że to zboczenie z wybranej przeze mnie ścieżki kariery jako programisty stron internetowych/aplikacji. Czy to prawda, czy są cenne umiejętności, które mógłbym nabyć po kilku latach w IT?


title: Otwarty kod źródłowy bez licencji... czy mogę go rozwidlić?

text: Kilka lat temu ktoś stworzył kilka naprawdę świetnych i dość popularnych skryptów powłoki. Nie działają w najnowszej wersji Mac OS X, ponieważ zmieniła się ścieżka do pliku. Wszystko, co musisz zrobić, to edytować ścieżkę pliku (w czterech różnych miejscach), aby ponownie działały. Kod jest umieszczony na prywatnej stronie internetowej bez jakiejkolwiek kontroli źródeł, autor nie aktualizował ich od prawie roku, a ten błąd jest już dość długi. Jest wyraźnie open source i ma być używany/modyfikowany/cokolwiek, ale nie wydał go na żadnej licencji. Chcę naprawić błąd i opublikować go na GitHub, najlepiej na licencji OSS w stylu domeny publicznej. Zastanawiam się, jakie mogą być konsekwencje prawne? Kod jest dość prosty (poniżej 300 linii), ale nie mogłem go przepisać bez wcześniejszego przeczytania każdej linii jego kodu. Przynajmniej musi zostać przeniesiony na stronę internetową, która nigdy nie zniknie (jest tylda w adresie URL... konto uniwersyteckie?), a błąd musi zostać naprawiony, ponieważ wielu docelowych użytkowników nie Nie wiem, jak wejść i to naprawić. Wysłałem e-mail do autora, ale z mojego doświadczenia wynika, że gdy proste poprawki błędów nie są stosowane w popularnym projekcie, e-maile nigdy nie otrzymają odpowiedzi. Na potrzeby tego pytania załóżmy, że nie odpowie na mój e-mail.


title: Dlaczego wszyscy piszą do zrobienia komentarze wielkimi literami?

text: robię to samo. Kiedy w moim kodzie jest coś "do zrobienia", piszę `//TODO ...`. Ale jestem ciekaw, kiedy to się zaczęło i czy jest powód do pisania "do zrobienia" wielkimi literami?


title: Czy logika biznesowa naprawdę należy do serwera?

text: Typowy stos dla aplikacji webowej to baza danych, serwer z kodem po stronie serwera oraz użytkownik z przeglądarką z HTML/CSS/JavaScript. Przed rozbudowanym AJAXem rządził MVC, w którym kontrolerem był kod po stronie serwera. Serwer musiał kierować żądania odpowiedzi dla dynamicznych stron internetowych (tj. szablonowych rozwiązań html, takich jak JSP i ASP). Serwer koordynujący wywołania do bazy danych i decydujący, której dynamicznej strony użyć do odpowiedzi na żądanie strony. Rezultatem tego wszystkiego jest to, że serwer ostatecznie zawierał logikę biznesową, mimo że logika biznesowa nie jest mocno związana z ideą serwowania stron. Teraz, gdy przechodzimy do "Web 2.0", serwer obsługuje statyczne strony, które używają JavaScript do wypełniania się i zmieniania tego, co prezentują. Może być w JavaScript. JavaScript często implementuje usługę RESTful, co oznacza, że określa zapytanie do bazy danych. Tak więc serwer jest pozostawiony rolom obsługi rzeczywistych plików i odpowiadania na wywołania AJAX. Odbieranie połączeń AJAX to jedynie zarządzanie sesjami i zapewnianie bezpieczeństwa. I tak naprawdę to, co użytkownik powinien nawet widzieć, to dane, które powinny być określone w bazie danych. Czy więc od tego momentu serwer powinien zostać zdegradowany do roli głupiego pośrednika, który tylko od czasu do czasu robi coś w rodzaju wysłania e-maila lub uruchomienia usługi internetowej? Czy cała logika biznesowa może żyć w JavaScript (kiedy nie jest tajna) lub żyć w procedurach składowanych, gdy jest? Czy będzie sensowne połączenie serwerów i baz danych lub sprawienie, by rozwiązania ERP, takie jak SAP, działały jako serwery?


title: strcpy memcpy powód kolejności parametrów

text: Odpowiadając na pytanie o kolejność parametrów, uderzyło mnie, że strcpy (i rodzina) są w złym kierunku. Kopia powinna mieć postać src -> destination. Czy istnieje historyczny lub architektoniczny powód dla porządku dest,src w tych funkcjach „C”? Coś związanego z optymalizacją stosu na PDP-8 czy coś takiego?


title: Jak w takiej sytuacji zaimplementować przegląd kodu?

text: Moje pytanie dotyczy tego, jak zastosować przegląd kodu w praktyce w miejscu pracy, w którym nikt inny o to nie prosił, nigdy wcześniej tego nie robiłem i nie jestem do końca pewien, czy jest to opłacalne przy tego typu programowaniu. Jestem wykonawcą zadania, które obejmuje głównie inżynierię narzędzi, analizę danych, naprawianie kodu, gdy czyjeś zmiany w szablonie Excela psują makro itp. To totalne kowbojskie kodowanie: prośby to bardziej „zrób to, co musisz zrobić, aby zhakować coś, co działa JAK NAJSZYBCIEJ, potrzebujemy go w produkcji jutro rano i będziemy potrzebować go tylko przez kilka miesięcy”, niż „stworzyć dobrze zorganizowaną aplikację, która będzie łatwa w utrzymaniu i rozwijaniu we wszystkich przewidywalnych okolicznościach”. Zespół inżynierów oprogramowania to ja i jeszcze jeden facet, którego nadzoruję. Obecnie nie stosujemy żadnej metodologii tworzenia oprogramowania poza „stworzeniem czegoś, co spełnia wymagania funkcjonalne” i żaden z nas nigdy nie pracował w żadnym miejscu, w którym istniały jakiekolwiek zasady przeglądu kodu lub projektowania. Wszystko, co tworzymy, to aplikacje desktopowe VBA lub C#, a każdy z nas zwykle pracuje nad osobnym zadaniem, a nie wspólnie buduje ten sam program. Nie istnieje system kontroli wersji i nie mamy dostępu do serwera, aby zainstalować taki system. To, co próbuję ustalić, to, biorąc pod uwagę, że praca jest bardzo doraźna, jaki rodzaj przeglądu kodu, jeśli w ogóle, powinienem wprowadzić? A może jest to nawet konieczne dla rodzaju pracy, którą wykonujemy?


title: Co oznacza „bezkontekstowa” w pojęciu „gramatyka bezkontekstowa”?

text: Biorąc pod uwagę ilość materiału, który próbuje wyjaśnić, czym jest gramatyka bezkontekstowa (CFG), zaskoczyło mnie, że bardzo niewielu (w mojej próbie mniej niż 1 na 20) podaje wyjaśnienie, dlaczego takie gramatyki są nazywane „kontekstem”. darmowy". I moim zdaniem nikomu się to nie udaje. Moje pytanie brzmi, dlaczego gramatyki bezkontekstowe są nazywane bezkontekstowymi? Czym jest „kontekst”? Miałem intuicję, że kontekstem mogą być inne konstrukty językowe otaczające obecnie analizowany konstrukt, ale wydaje się, że tak nie jest. Czy ktoś mógłby podać dokładne wyjaśnienie?


title: Dlaczego zdarzenie kliknięcia jest wyzwalane dopiero po kliknięciu i zwolnieniu myszy?

text: Każde kliknięcie w sieci działa po kliknięciu i zwolnieniu myszy. Czy istnieje sposób na wykonanie akcji na zdarzeniu kliknięcia przed zwolnieniem myszy?


title: Dobre wytyczne i praktyki dotyczące obowiązkowego przeglądu kodu

text: Próbujemy obowiązkowego przeglądu kodu przy każdym zatwierdzeniu -- nic nie trafia do mastera, co nie zostało zatwierdzone przez co najmniej jedną osobę, a nie autora -- przez kilka sprintów. Pozyskaliśmy zarówno deweloperów, jak i kierownictwo (co jest niesamowitą sytuacją) i chcemy uzyskać niektóre z korzyści, z których jest znany: * oczywista redukcja błędów * większa świadomość zmian zachodzących wokół projektu * " Wiem, że ktoś się temu przyjrzy, więc nie będę leniwy"/efekt antykowbojski * zwiększona spójność w ramach/między projektami Ale wprowadzamy coś, co jest _znane_, że zmniejsza prędkość, a jeśli zostanie zrobione źle, może stworzyć głupie biurokratyczny krok w potoku zatwierdzania, który nie robi nic poza czasem. Rzeczy, o które się martwię: * recenzje przeradzają się w po prostu wybieranie drobiazgów * (hiperbolicznie) ludzie otwierają ogromne problemy architektoniczne w ramach dwuliniowej recenzji zatwierdzenia. * Nie chcę fałszować odpowiedzi innymi rzeczami. Chociaż wszyscy jesteśmy rozsądnymi ludźmi i będziemy przeprowadzać wiele samoanalizy, zdecydowanie moglibyśmy wykorzystać zdobyty w bitwach wgląd w to, jakie rzeczy powinniśmy starać się osiągnąć podczas sesji recenzji, aby naprawdę sprawić, by recenzje działały dla nas . Jakie wytyczne i zasady okazały się skuteczne?


title: Zwracanie wielu wartości w JavaScript

text: Często piszę funkcję, która zwraca wiele wartości, na przykład parę współrzędnych: function get_coords() { return ???; } Gdybym używał języka takiego jak Python, użyłbym krotki: return (x, y) Lub, w języku OOP, takim jak Java, utworzyłbym niestandardową klasę współrzędnych: class Coordinates { public int x; int publicznej; Współrzędne publiczne (x, y) { this.x = x; to.y = y; } } Następnie zwróć w ten sposób: return new Coordinates(x, y); **Przejdź do JavaScript.** W JavaScript mamy możliwość zwrócenia prostego obiektu: return {x:x, y:y} lub podejścia podobnego do Java, z niestandardowym obiektem: return nowe współrzędne(x, y ) Czy są jakieś powody, aby używać jednego nad drugim?


title: Dlaczego ASCII był potrzebny?

text: Skoro kodowanie takie jak EBCDIC już istnieje (i jest 8-bitowe do rozruchu), jaka była potrzeba wynalezienia jeszcze innego kodowania, a do tego 7-bitowego? Dlaczego wymyślono ASCII i jakie problemy z EBCDIC miały rozwiązać?


title: Jak utrzymać motywację w hobbystycznych projektach programistycznych?

text: Jest tu już kilka pytań dotyczących motywacji, ale są one związane z programowaniem jako pracą, pracą zespołową i tak dalej. Zauważyłem, że w ostatnich latach moja motywacja do kodowania projektów hobbystycznych spada. Spadało już jakieś 8 lat temu, potem poprawiło się około 4 lata temu, teraz znowu zaczyna się pogarszać. Ponieważ nie pracuję, brak motywacji w pracy nie jest problemem. Projekty, którymi jestem zainteresowany to kilka gier komputerowych oraz biblioteka ORM dla php. Chcę zaprogramować te rzeczy, ale czuję, że straciłem energię do ich wykonywania. Objawy to m.in.: niezdolność do koncentracji, kodowanie przez około 30 minut, a następnie wyjście z projektu, aby zrobić inne rzeczy, utrata przyjemności z robienia wszystkiego. To mnie niepokoi, ponieważ jest (lub kiedyś było) czymś, co sprawia, że czuję się szczęśliwy i nie chcę stracić dobrego poczucia robienia czegoś, co lubię.


title: Odpowiedzialność za delegowanie historii w agile

text: Ostatnio pracowałem nad projektem, w którym lider zespołu komentował, że musi dowiedzieć się, nad którymi historiami będziemy pracować w scrumie. Zrozumiałem, że historie są traktowane priorytetowo i być może kilka historii jest dodawanych do sprintu z tej listy. Na tym etapie podczas naszego scrum, każdy z programistów wybiera historię, którą zamierza wdrożyć, i rusza. Przypuszczam, że jeśli wiele historii ma zależności od nich, które przewodzi zespołowi, może pomóc ułatwić priorytet historii w samym sprincie, ale nie dyktować, który programista robi który? Żaden z nas nie jest juniorem w zespole i wszyscy mamy taką samą wiedzę na temat domeny. Nasze doświadczenia z poszczególnymi aspektami warstw, tj. interfejsem użytkownika, bazą danych, infrastrukturą różnią się, ale nie dramatycznie. Więc moje główne pytanie dotyczy roli lidera zespołu (i chyba innych programistów) w samym sprincie i delegowaniu historii. Jeśli to pomaga, projekt był aplikacją MVC .NET z pewnym wsparciem bazy danych. Nasz zespół składał się z 4 programistów, 1 testera i kierownika projektu.


title: Od programisty do administratora systemu?

text: Wiem, że to brzmi jak dziwne pytanie, ale czy uważasz, że można przejść od pracy programisty do pracy administratora systemu? Mam na myśli profesjonalistów: * Jesteś programistą, więc całkiem dobrze znasz się na pisaniu skryptów (dla Cron Jobs/Bash Scripts) * Zwykle znasz się na systemie Unix * Możesz często debugować rzeczy, które nie działają. * Większość programistów jest zaznajomiona ze sprzętem komputerowym * Masz dyplom, na który ciężko pracowałeś, i jesteś zaznajomiony z konfiguracją różnych systemów oprogramowania Czy myślisz, że można przejść z pracy programisty do pracy administratora systemu? lub prawdopodobnie nie.


title: jak poprawnie zarejestrować eventHandler

text: Pokazywałem część mojego kodu młodszemu programiście i zapytał mnie, dlaczego rejestruję funkcje do obsługi zdarzeń w następujący sposób: button1.Click += new RoutedEventHandler(button1_Click); a nie tak: button1.Click += button1_Click; Jedyne, co mogłem powiedzieć, to: ponieważ po prostu piszesz `+=` i naciskasz tabulator dwa razy... Jaka jest różnica między tymi dwiema metodami (jeśli jest różnica)?


title: Czy REST, Ajax i jQuery dobrze ze sobą współpracują?

text: Próbuję użyć REST (usign spring MVC) jako mojego backendu Ajax, ale podczas korzystania z jQuery wystąpiły pewne problemy. Najlepsze praktyki REST zalecają używanie kodu statusu HTTP, np. 200, 403, 401 itd. i nie mam problemu z kodem statusu 200, metoda ajax jQuery ma wywołanie zwrotne done(data), które pozwala mi odczytać odpowiedź w formacie json. Ale kiedy muszę zwrócić jakiś błąd w formacie json wraz z kodem statusu, utknąłem. Wywołanie zwrotne fail(jqXHR, textStatus) nie obsługuje json w odpowiedzi. Więc jeśli zwrócę JSON po stronie serwera, zostanie on umieszczony w jqXHR.reponseText i zamiast tego będzie traktowany jako zwykły tekst. Więc moje pytanie brzmi, czy REST jest dobry dla Ajaksu? Dlaczego jQuery traktuje dane inaczej w przypadku kodu statusu innego niż 200?


title: Patent w Europie

text: Chciałbym zbudować i sprzedać/lub uwolnić oprogramowanie oparte na ffmpeg i jakiejś innej bibliotece mp3 lgpl, więc wiem, że w USA. jest problem z patentami i tantiemami, ale jeśli mieszkam w Europie, chciałbym wiedzieć, czy mogę tworzyć oprogramowanie z koderem/dekoderem mp3 i dekoderem/enkoderem mpeg, czy powinienem płacić tantiemy? A może ktoś (twórca mp3/mpeg) może postawić mnie przed sądem?


title: wyświetlanie wielosekcyjnych dokumentów html - dobre praktyki

text: Pracuję w organizacji badawczej i publikujemy wiele obszernych dokumentów, zwykle zorganizowanych w sekcje. Chcę wiedzieć, jak najlepiej zaprezentować te wielosekcyjne dokumenty na naszej stronie internetowej. Obecnie ładuję cały dokument jako pojedynczą stronę, z każdą sekcją jako osobnym div. Następnie w razie potrzeby pokazuję i ukrywam div za pomocą spisu treści oraz przycisków „następny” i „poprzedni”. Korzyści z tego płynące to przede wszystkim: 1) możliwość szybkiego przemieszczania się między sekcjami, 2) zapewnia spójne analizy (kiedy strona jest ładowana, wiem, że czytany jest raport). Wady są jednak realne: * Czytelnicy nie mogą korzystać z przycisków przeglądarki wstecz/do przodu do poruszania się między sekcjami. * Tworzenie bezpośrednich linków do poszczególnych sekcji jest skomplikowane (mogę to zrobić za pomocą javascriptu, ale innym osobom nie jest to łatwe do pobrania i udostępnienia). * W przypadku długich raportów musisz poczekać na załadowanie pełnego raportu, zanim będziesz mógł się poruszać (co może obejmować hordy obrazów i wykresów). Czy inni ludzie mają pomysły na lepsze sposoby na zorganizowanie tego? Oto przykład obecnego systemu: http://massbudget.org/825


title: Czy Microsoft Prism jest żywy i aktywny?

text: Dużo czytałem przez ostatnie dwa dni na Microsoft Prism, ale wciąż nie jestem pewien, jak wygląda przyszłość? Wiem, że wersja 4.1 została wydana dopiero kilka miesięcy temu, ale poza własną dokumentacją Microsoftu, nie znalazłem wielu wpisów na blogu napisanych w zeszłym roku na ten temat, większość z tego, co znajduję, to lata 2009-2010. Wygląda to na pewno interesująco, ale krzywa uczenia się wydaje się być nieco stroma i nie chciałbym brać udziału, jeśli w najbliższej przyszłości stanie się przestarzały. Czy ktoś ma w tym jakiś wgląd?


title: Sugestie dotyczące języka znaczników CMS dla PHP

text: Jako doświadczenie edukacyjne i jako projekt próbuję napisać moduł CMS dla ZF2. Jedną z funkcjonalności jaką chciałbym mieć jest możliwość dodawania dynamicznej zawartości na stronach poprzez wywoływanie funkcji PHP w skryptach widoku. Nie chcę jednak dawać użytkownikom swobody w pisaniu kodu PHP bezpośrednio w treści strony, ale raczej zaimplementować niestandardowe pomocniki widoków (lub widżety) do obsługi logiki. Na przykład: wywoływanie `partial`, `partialLoop`, `url`, itp. z podaniem argumentów i tak dalej. Podobał mi się pomysł rozszerzenia Markdowna, ale stałoby się to skomplikowane, gdy próbowałem dodać niestandardową klasę CSS do elementów itp. Potem wpadłem na pomysł, aby po prostu zrobić `preg_replace` na niektórych wzorcach. Na przykład ciąg : ### PartialLoop:['partials/display.phtml',[{id:'p1',price:4.99},{id:'p2',price:12.34}]] ### być zastąpione przez <?php echo $this->partialLoop('partials/display.phtml', array(array('id'=>'p1','price'=>4.99),array('id'=>' p2','price'=>12.34)))) ?> Oczywiście musiałoby się trochę buforować, więc zawartość strony nie jest renderowana za każdym razem. Czy to brzmi dobrze? Jeśli nie, jaki byłby dobry sposób na zrobienie tego? A może istnieje już projekt, który ma to zrobić? (Chciałbym uniknąć ciężkich bibliotek stron trzecich, a coś w miarę lub w pełni zgodnego z ZF2 byłoby miłe.) Dzięki.


title: dvcs - czy "klonowanie do gałęzi" jest powszechnym przepływem pracy?

text: Ostatnio rozmawiałem o dvc ze współpracownikiem, ponieważ nasze biuro zaczyna rozważać przejście z TFS (jesteśmy sklepem MS). W międzyczasie byłem bardzo zdezorientowany, ponieważ powiedział, że chociaż używa Mercurial, nie słyszał o poleceniu „oddział” lub „kasa”, a te terminy były mu nieznane. Po zastanowieniu się, jak to możliwe, że o nich nie wiedział i wyjaśnieniu, jak gałęzie dvcs działają "w miejscu" na lokalnych plikach, był dość zdezorientowany. Wyjaśnił, że podobnie jak działa TFS, kiedy chce stworzyć „oddział”, robi to przez klonowanie, więc ma całą kopię swojego repozytorium. Wydawało mi się to naprawdę dziwne, ale korzyścią, którą muszę przyznać, jest to, że można jednocześnie przeglądać lub pracować na dwóch gałęziach, ponieważ pliki są oddzielne. Przeszukując tę stronę, aby sprawdzić, czy zostało to wcześniej zadane, zobaczyłem komentarz, że wiele zasobów internetowych promuje tę metodologię „klonowania do gałęzi”, ku przerażeniu autora. Czy to jest rzeczywiście powszechne w społeczności DVD? Jakie są plusy i minusy takiego podejścia? Nigdy bym tego nie zrobił, ponieważ nie muszę widzieć wielu gałęzi na raz, przełączanie jest szybkie i nie potrzebuję wszystkich klonów zapełniających mój dysk.


title: Przechowywanie i prezentacja niestandardowych danych tabeli

text: Mam stronę internetową, na której chcę udostępnić użytkownikom możliwość tworzenia tabel danych. Te tabele będą pochodzić z predefiniowanej listy definicji tabel, które dodam do siebie. Ta lista prawdopodobnie rozrośnie się do setek. Definicje tabel zostaną utworzone jako klasy Java. Zdefiniują liczbę kolumn i ich typy danych (łańcuchowe, liczbowe, logiczne, wybierz z listy). Predefiniuje również niektóre kolumny jako automatycznie obliczane z innych kolumn. Liczba wierszy będzie ograniczona, ale może wynosić od 10 do 10000. Dodatkowo dam użytkownikom możliwość stworzenia niestandardowego typu tabeli, w którym ustalają liczbę wierszy i kolumn oraz typy kolumn (ciągowe, liczbowe, logiczne, pobranie z listy - brak formuł). Tabele muszą być możliwe do sortowania w określonych kolumnach (z dodatkowymi kolumnami sortowania w zależności od pierwszej). Sortowanie danych będzie (prawdopodobnie) wykonywane przez aplikację, a nie bazę danych, ponieważ będzie zawierało inną logikę w różnych definicjach tabel. Mogę dołączyć proste wyszukiwanie tekstowe, ale nie filtr. Dane w tabeli mogą być aktualizowane, ale spodziewam się, że będzie to rzadkie (w odstępie dni, w większości nigdy). To, na co nie mogę się zdecydować, to najlepszy sposób przechowywania tych informacji. Używam relacji db (postgres). Ponieważ każdy wiersz będzie składał się z różnych typów kolumn, nie mogę przechowywać danych w oddzielnych wierszach bazy danych z odpowiednimi typami pól dla każdej kolumny. Po stronie internetowej chcę, aby użytkownicy mogli przeglądać dane stronicowane. Użytkownicy, którzy nie mają włączonej obsługi JavaScript, mogą znosić podstawową tabelę stronicowanych danych bez opcji sortowania. Użytkownicy z włączoną obsługą JavaScript powinni mieć możliwość sortowania danych. _Storage_ **Opcja 1** Utwórz dokument XML zawierający wszystkie dane i zapisz go w jednym wierszu bazy danych. Będzie to łatwe do odczytania i zapisania, ale oznacza, że cała tabela internetowa musi być załadowana do pamięci, nawet jeśli tylko kilka wierszy zostanie przesłanych do przeglądarki. **Opcja 2** Utwórz fragment XML dla każdego wiersza i przechowuj w oddzielnych wierszach bazy danych. Ponieważ dane będą sortowane według aplikacji, kolejność musi zostać obliczona, gdy wyświetlana jest pierwsza strona, a następnie dla kolejnych stron zwracane są tylko wymagane wiersze, lub gdy dane są aktualizowane, tworzony jest predefiniowany indeks dla każdej opcji sortowania. Predefiniowany indeks wydaje się lepszą opcją, ponieważ nie będzie się często zmieniał, ale będzie odczytywany wiele razy. _Dostarczanie danych do przeglądarki_ **Opcja 1** Dla przeglądarek obsługujących JS pobierz wszystkie dane za pomocą AJAX/JSON. Odpowiedź byłaby buforowana w przeglądarce i za pomocą JS wypełniłaby tabelę danymi. Dalsze podróże do serwera nie powinny być wymagane, chyba że dane zostaną zaktualizowane (wykrywane tylko wtedy, gdy strona jest odświeżana przy użyciu czasu ostatniej aktualizacji osadzonego na stronie). Kolejne wizyty na stronie powinny korzystać z buforowanej kopii danych. **Opcja 2** Umieść dane stronicowania w html. Jeśli JS jest włączony, dalsze aktualizacje przy użyciu AJAX. Nie chcę używać pamięci offline HTML 5 do obsługi starszych przeglądarek. Myślę, że muszę wybrać obie Opcję 2, aby pomieścić przeglądarki inne niż JS i zminimalizować zużycie pamięci. Czy istnieją inne możliwe rozwiązania?


title: Czy symboliczna sztuczna inteligencja może „uczyć się” modelu danych?

text: Perceptrony, prosta forma nadzorowanego uczenia maszynowego, muszą zostać wytrenowane za pomocą zestawu znanych dobrych danych wejściowych, zanim będą mogły się „nauczyć” poprzez dostosowanie wewnętrznych wag przypisanych do danych wejściowych na podstawie dokładności ich wyników. Podobnie wiemy, że uczenie się ze wzmocnieniem i nienadzorowane sieci neuronowe są w stanie uczyć się bez znanego modelu problemu; mogą być zaprojektowane do zbierania informacji o środowisku tylko poprzez interakcję z nim. Czy symboliczna sztuczna inteligencja może zostać wykorzystana do zaprojektowania systemu, który może osiągnąć to „naiwne uczenie się”, czy też jest to właściwość wyłączna dla niektórych technik komputerowych?


title: Jak zostać superużytkownikiem (programowanie)?

text: Wypróbowujesz nowe narzędzie i nie działa. Wygooglujesz problem i jeśli masz szczęście, losowa odpowiedź mówi, że musisz edytować jakiś dziwny plik konfiguracyjny i umieścić go w określonym katalogu, którego nie znasz. Próbujesz, ale w trakcie procesu wszystko idzie nie tak. Albo dlatego, że nie rozumiesz kroków wymienionych w odpowiedzi, albo dlatego, że rozwiązanie nie jest dokładnie takie samo jak twoje. Nie mogę być jedynym, który jest zdziwiony/zirytowany, gdy znajduję się w tego rodzaju sytuacjach. Uważam, że te problemy są o wiele bardziej przerażające niż wtedy, gdy nie rozumiem konkretnego algorytmu. Często spędzam 10 godzin, próbując coś zrobić, nie robiąc czegokolwiek. Potem po prostu się poddaję. Lubię programować, ale naprawdę nie znoszę tych momentów, kiedy trzeba zintegrować się z narzędziem i kończy się w opisanych sytuacjach. Często nawet nie chcę próbować nowych narzędzi, bo boję się, że tak się stanie. Moje pytanie brzmi: czy jest sposób, aby być w tym lepszym? Czy istnieje szybszy sposób na nauczenie się tego wszystkiego bez ćwiczenia? Myślałem o zdobyciu książek o unixie i rozpoczęciu używania powłoki do codziennego użytku, ale nie jestem pewien, czy warto.


title: Jak powinienem zająć się rozwijaniem podstawowej wiedzy o C/C++, abym mógł zapoznać się z koncepcjami napisanymi w niektórych klasycznych książkach o programowaniu?

text: Bardzo dobrze znam Javę i JavaScript. Nigdy tak naprawdę nie pracowałem nad C/C++. Ale na tym etapie mojej kariery czuję, że z powodu braku odpowiedniej wiedzy na temat składni C/C++ (zwłaszcza wskaźników*) brakuje mi istotnych części dotyczących czytania kilku klasycznych książek z dziedziny programowania. Oto kilka książek, które chciałbym dokładnie przeczytać i zrozumieć, ale nie jestem w stanie zrozumieć przykładowego kodu, ponieważ nie znam składni C/C++: 1. Zaawansowane programowanie w środowisku Unix, w którym używany jest C. 2. Książka GoF, gdzie przykłady są w C++/Smalltalk . 3. Podręcznik projektowania algorytmów autorstwa Stevena Skienny, gdzie ponownie zastosowano C. Nie zamierzam pracować nad projektami C/C++. Nie chcę więc spędzać dużo czasu na nauce zawiłości tych języków, ale chciałbym mieć przynajmniej trochę praktycznej wiedzy, aby móc zrozumieć co najmniej 80% przykładów w tych książkach. Nie chcę przegapić istoty tych klasycznych książek. Co mam z tym zrobić?


title: Najlepszy sposób, aby kierownik techniczny był na bieżąco z technologią

text: Mój menedżer poprosił o listę blogów technicznych, które powinien śledzić, aby być na bieżąco z technologią. Jego problem polega na tym, że wciąż słyszy terminy, o których nie słyszał (np. NoSql, sharding, agure, autobus usługowy itp.) i wolałby przynajmniej mieć szansę na zdobycie wiedzy o nich bez konieczności reagowania i patrząc na nie. Myślę też, że chce mieć ogólny obraz wszystkich pojawiających się technologii i tego, gdzie one do siebie pasują, zamiast uczyć się o każdej rzeczy z osobna. Pytał o blogi, ale myślę, że czasopisma drukowane też mogą pomóc. Co mam mu odpowiedzieć?


title: Używasz swojego laptopa do pracy?

text: Staramy się, aby nasza firma pozwoliła nam używać naszych osobistych laptopów do pracy z klientami. Zgodziliśmy się, że każdy kod/dane zostaną zaszyfrowane przy użyciu czegoś takiego jak TrueCrypt, na wypadek kradzieży lub zgubienia laptopa. Jednak firma nadal jest sceptyczna i nie jest pewna, czy chce umożliwić nam wykorzystanie naszych osobistych maszyn do rozwoju. Woleliby kupować nam laptopy... ale my chcemy korzystać z MacBooków Pro, a oni nie chcą za nie płacić. Nawet gdyby kupili nam laptopy, nadal mielibyśmy problem z koniecznością zaszyfrowania kodu/danych w przypadku kradzieży/zagubienia. Czy do pracy używasz własnego laptopa? Jakie są argumenty za/przeciw temu? * * * **AKTUALIZACJA:** Dzięki za wszystkie odpowiedzi, mamy dużo do przemyślenia. To było początkowo poruszane, ponieważ prosiliśmy o „osobistą pożyczkę” na zakup nowych laptopów dla siebie, a następnie dorzuciliśmy, że będziemy używać tych laptopów również do pracy – ponieważ w tej chwili korzystamy z naszych osobistych laptopów okazjonalnie, m.in. u klienta lub wsparcie weekendowe.


title: Czy agile dotyczy rozwoju czy zarządzania?

text: Podczas debaty na temat tego, o co chodzi w Scrumie, stwierdziłem, że być może całkowicie źle zrozumiałem zwinne podejście. Wydaje mi się, że Scrum (który jest z pewnością uważany za proces Agile) polega na zarządzaniu funkcjami, sprintami, rolami i innymi rzeczami, które nie mają nic wspólnego z TDD, programowaniem w parach, CI, refaktoryzacją i innymi technikami i praktykami skoncentrowanymi na programistach, o których myślałem ( do tej pory) są sercem agile. Teraz mam trudności! 1) Czy Scrum jest niezależny od tego, czy programiści stosują zwinne praktyki? 2) Czy możesz wdrożyć Scrum w zespole, który nie wykorzystuje testów automatycznych? nie wykonuje refaktoryzacji lub nie przestrzega praktyk programowania zwinnego?


title: Agile MVP (najbardziej wartościowy gracz/programista)

text: Ostatnio brałem udział w projekcie zwinnym (przy użyciu scrum), w którym kierownictwo wpadło na pomysł, aby zespół nominował programistę „MVP” oraz „MVP” QA na koniec każdego sprintu, na który głosowali zespół. MVP otrzymuje wtedy niewielką nagrodę pieniężną i darmowy lunch, a także trofeum do wystawienia na swoim biurku. Do tej pory mieliśmy dwa sprinty z tym systemem nagród. Dobro, które z tego widzę, jest następujące: * Naprawiono więcej błędów (co chce zobaczyć wyższe kierownictwo, liczba zmienia się w pożądanym kierunku) * MVP z każdej „drużyny” zostaje rozpoznany i zyskuje poczucie własnej wartości boost (czy jest to podbicie ego?) Zauważyłem kilka rzeczy, które uważam za złe strony robienia czegoś takiego (przynajmniej z punktu widzenia programisty): * Jest kilku programistów, którzy są tak zaniepokojeni liczbą, że spadła jakość poprawek błędów. Poprawki w jednym obszarze powodują regresję w innym. * Jest kilku programistów, którzy wybierają „łatwiejsze/szybsze” błędy, aby zwiększyć liczbę błędów. Myślę, że tutaj może być dobrze lub źle. * Defekty o wyższym priorytecie (co często wiąże się z „trudniejszymi/dłuższymi do naprawienia”) w rzeczywistości stają się defektami o niższym priorytecie. * Błędy blokujące nie są usuwane w odpowiednim czasie, ponieważ zwykle trwają dłużej i wymagają lepszej koordynacji z kontrolą jakości. * Aspekt zespołowy w zespole deweloperskim został utracony. Aspekt zespołowy, w którym Dev i QA pracują razem jako jeden, również się nie poprawił, ale tak naprawdę nie zmienił się zbytnio od wcześniej. * Praca poza poprawkami błędów lub praca nad TYM numerem nie jest łatwo rozpoznawalna/śledzona. Wierzę, że każdy z powyższych „złych” może być do pewnego stopnia rozwiązany, w zależności od tego, jak zespół sobie z nimi poradzi. Moje pytanie brzmi zatem, czy ktoś z powodzeniem wyciągnął coś takiego, gdzie rozpoznajesz MVP na sprint? Jeśli tak, jak myślisz, co przyczyniło się do tego sukcesu?


title: O pracy najemnej, zobowiązaniach wynikających z umowy i dbaniu o siebie…

text: Nie zanudzając was szczegółami, moje dwa ostatnie zlecenia kontraktowe zostały skrócone; Otrzymałem 3 dni wypowiedzenia w jednym i 4 tygodnie w drugim. Żadne z nich nie wynikało z wyników – obaj w zasadzie sprowadzali się do kwestii budżetowych. Przy drugim kontrakcie miałam wrażenie, że może nie byłam świetnym miejscem na pobyt na czas trwania kontraktu. Ze względu na pieniądze/czas spędzony na doprowadzeniu mnie do drzwi i możliwy negatywny wpływ mojego pracodawcy/rekrutera, zdecydowałem się zostać przynajmniej na kilka miesięcy (i zacząć szukać kilka tygodni przed końcem mojego rzekomo „przedłużalnego” kontraktu) . Te doświadczenia sprawiły, że jestem trochę nieufny w stosunku do pracy najemnej. Wygląda na to, że jeśli zdobędę zły kontrakt, mój rekruter odbierze cios (reputację lub nie), jeśli szybko znajdę inną pracę. Ale z drugiej strony firma klienta nie zastanawia się dwa razy przed przedwczesnym zakończeniem umowy z jakiegokolwiek powodu. Wiem, że kontrargumentem do tego jest „może rekruter nie powinien był wsadzać cię do gównianego zadania”… tak czy inaczej, wydaje mi się, że skoro liczę na to, że zapewni mi pracę, to powinienem starać się nie zaszkodzić jego reputacja w firmach klienckich. Zasadniczo jestem zupełnie nowy w kontraktowaniu (to były moje pierwsze dwie umowy), więc te obawy są dla mnie nowe. **TLDR:** Czy praca kontraktowa ze swej natury jest w dużej mierze niestabilna? Czy nie martwię się zbytnio o mojego rekrutera? Czy powinienem szybciej zacząć szukać nowej pracy nawet po kilku tygodniach w nowej firmie (kiedy otoczenie wydaje się niestabilne)? Jeśli tak, czy mam przejrzeć mojego rekrutera, czy po prostu znaleźć inne stanowisko w jakikolwiek sposób?


title: Wybór między Qt/C++ i .NET/C#

text: Mam projekt komputerowy, nad którym pracowałem od kilku miesięcy, który chcę uruchomić na Windows i Mac. Kiedy zacząłem projekt, zacząłem pisać go w Qt 4.8 w C++. Rozwój poszedł dobrze, a aplikacja działa całkiem dobrze zarówno na Windowsie, jak i na Macu, tak jak się spodziewałem. Powiedziałbym, że w tym momencie jest ukończone w około 40%. Aby uzyskać trochę informacji ogólnych, aplikacja jest odmianą klienta poczty e-mail. Ale myślę o porzuceniu tego, co robiłem do tej pory w C++/Qt i zakupie licencji na Xamarin Studio i napisaniu aplikacji w C#. Jest kilka powodów, dla których mocno się nad tym zastanawiam: * Chcę również wydać mobilne wersje tej aplikacji, a dzięki C# wiele kodu backendowego może być ponownie użyte na wszystkich platformach. * Chcę opublikować tę aplikację w sklepach Apple ** i ** Windows. Wiem, że publikujesz aplikacje Qt w sklepie Apple Store, ale nie czytałem ani nie udało mi się znaleźć niczego na temat osób publikujących aplikacje Qt w sklepie Windows. Nie wspominając o tym, że Qt 4.8 nie ma wbudowanego wsparcia dla Metro UI (musiałbym użyć Qt 5.0, co i tak oznaczałoby przepisanie dużej części kodu). * Pracując przez wiele lat zarówno w C# jak i C++, ogólnie jestem "szczęśliwszy" rozwijając się w C#. Mam jednak kilka powodów, aby pozostać na kursie: * Jak wspomniałem powyżej, jestem w około 40% ukończony w pierwszym wcieleniu tego projektu. * Duża część mojego programu opiera się na Lua, do którego mogę dość łatwo używać natywnych bibliotek Lua w C++ i nie jestem pewien, jak dobrze działają implementacje Lua, które widziałem dla Mono/C#. * Utrzymanie dwóch oddzielnych kodów UI dla aplikacji desktopowej (stąd w Qt mogę `#dołączyć <QtCore>` na Windows i Mac, ale w C# musiałbym `używać System.Windows.Forms` w Windows i `używać MonoMac.” na Mac) Szczerze mówiąc, w tym momencie jestem skłonny zacząć od nowa w C#, używając tego, co mam w C++ jako przewodnika i opóźnić moje wydanie o około miesiąc (o ile czasu zajmie mi nadrobienie zaległości rozważając inne obowiązki w moim życiu). Szukałem informacji od ludzi, którzy byli w podobnej sytuacji. Szczególnie interesują mnie osoby, które używały C# do publikowania aplikacji w sklepach Windows i Mac. Co myślisz?


title: Sens testów jednostkowych bez TDD

text: Rozpoczyna się nowy (dość duży) projekt, który planowaliśmy rozwijać w TDD. Pomysł TDD nie powiódł się (wiele powodów biznesowych i pozabiznesowych), ale właśnie teraz rozmawiamy – czy powinniśmy pisać testy jednostkowe, czy nie. Mój znajomy mówi, że nie ma sensu (lub jest bliskie zeru) pisanie testów jednostkowych bez TDD, powinniśmy skupić się tylko na testach integracyjnych. Uważam, że jest wręcz przeciwnie, że jest jeszcze jakiś sens w pisaniu zwykłych testów jednostkowych, tylko po to, by kod był bardziej przyszłościowy. Co myślisz? Dodano: Myślę, że to nie jest duplikat >>tego pytania<< \- Rozumiem różnicę między UT a TDD. Moje pytanie nie dotyczy **nie różnic**, ale **sensu** pisania testów jednostkowych bez TDD.


title: Dlaczego zagnieżdżone pętle są uważane za złą praktykę?

text: Mój wykładowca wspomniał dzisiaj, że w Javie można „oznaczać” pętle, aby można było się do nich odwoływać, gdy mamy do czynienia z pętlami zagnieżdżonymi. Poszedłem więc do domu i sprawdziłem tę funkcję, ponieważ nie wiedziałem o niej, a w wielu miejscach, w których ta funkcja została wyjaśniona, pojawiło się ostrzeżenie, zniechęcając do zagnieżdżonych pętli. Naprawdę nie rozumiem dlaczego? Czy to dlatego, że wpływa na czytelność kodu? A może jest to coś bardziej „technicznego”?


title: Czy powinienem zatwierdzić mój wygenerowany parser do kontroli źródła?

text: Aby zbudować kompilator używam generatora parsera. Czy powinienem zatwierdzić pliki źródłowe generowane przez generator parsera? Chcę je zatwierdzić, aby uniknąć zależności od generatora parsera podczas procesu kompilacji i testów. Jednak jeśli je zatwierdzę, kuszące jest, aby nigdy nie aktualizować generatora parsera z obawy przed zmianami niekompatybilnymi wstecz. Czy są inne zalety lub wady, o których nie pomyślałem? Referencje: * Czy mogę sprawdzić wygenerowany kod w kontroli źródła, czy nie? * Jaka część twojego projektu powinna być pod kontrolą kodu źródłowego?


title: Piękny interfejs użytkownika a coraz więcej funkcji technicznych?

text: Zrozumiem, jeśli uznasz, że jest to bardziej dyskusja niż pytanie techniczne i jeśli zamkniesz temat (wtedy, gdzie byłoby odpowiednie miejsce do dyskusji na ten temat? z góry dziękuję). Pytanie: jak zdecydować między ulepszaniem interfejsu użytkownika świetnym designem a dodawaniem coraz większej liczby funkcji technicznych? Chciałbym spotkać ludzi zainteresowanych kodowaniem w Windows pięknych interfejsów użytkownika, aby ulepszyć istniejący (bardzo potężny, ale nieprzystojny) projekt open-source, który ma duży potencjał! Wiem, że to chyba nie jest odpowiednie miejsce na takie pytanie, ale może znasz lepsze miejsce?