title: Co sprawia, że w Javie jest „dobry styl”?

text: Zadałem to pytanie na Stackoverflow i zanim zostało wygwizdane, otrzymałem pomocną sugestię od Pétera Töröka, że może to być lepsze miejsce do opublikowania. Od kilku lat programuję w Javie. Często omawiałem z kolegami decyzje projektowe na podstawie tego, co składa się na „dobry styl”. Rzeczywiście, istnieje wiele pytań/odpowiedzi StackOverflow, które omawiają projekt na podstawie tego, czy coś jest „dobrym stylem”. Ale co składa się na „dobry styl”? Jak wiele rzeczy, wiem o tym, kiedy to widzę... ale chciałem mieć lepszy pomysł niż tylko sumienie mówiące, że ten projekt nie wydaje się odpowiedni. O czym myślisz, aby stworzyć dobry, dobrze zaprojektowany kod? (Przyznaję, że jest to nieco subiektywne, ponieważ to, co jest „dobrym stylem”, będzie zależało od wykonywanego zadania). (Dodam też, że nie interesują mnie style zespołowe - np. "stosujemy wcięcia 2 spacji zamiast 4"... i nie interesują mnie konwencje kodu Java.) Edit: dzięki dla wszystkich dobre odpowiedzi/komentarze do tej pory. Jestem szczególnie zainteresowany odpowiedziami, które pomogłyby skodyfikować te rzeczy, które sprawiają, że sumienie (i być może żołądek) programisty dręczy mnie?


title: Czy istnieje licencja oprogramowania zgodna z GPL dla bibliotek, która umożliwia statyczne łączenie, ale wymaga redystrybucji kodu źródłowego biblioteki?

text: Poszukuję istniejącej licencji biblioteki, która spełnia następujące warunki: * Zgodna z GPL * Może być statycznie połączona z programami o zamkniętym kodzie źródłowym * Modyfikacje binarne biblioteki, w tym przypadki, gdy biblioteka jest statycznie połączona z innym projektem, muszą być wraz z kodem źródłowym biblioteki Licencje, które są zbliżone, ale niezupełnie takie, jakich potrzebuję: * LPGL \- nie pozwala na statyczne łączenie z niewolnym oprogramowaniem* * Eclipse Public License \- nie jest zgodne z GPL ze względu na klauzulę patentową * Łączenie z GPL wyjątek \- nie wymaga redystrybucji kodu źródłowego *: LGPL pozwala na statyczne linkowanie z pewnymi specyficznymi warunkami technicznymi - w szczególności musi istnieć możliwość dokonywania modyfikacji lub korzystania z nowszych wersji biblioteki, a w tym celu należałoby udostępnić plików obiektowych i kompilacji skryptów dla niewolnych komponentów. Ogólnie rzecz biorąc, jest to trudne technicznie, a czasami niemożliwe (w przypadku np. szablonów lub funkcji wbudowanych), a bardzo często (jak w moim przypadku) przyczyny, dla których wymagane jest statyczne linkowanie, są sprzeczne z tymi wymaganiami LGPL. Z tego powodu LGPL jest nieodpowiednie dla mojego przypadku użycia i szczerze mówiąc, nie widziałem jeszcze projektu, który używałby w ten sposób statycznego linkowania z biblioteką LGPL, biorąc pod uwagę wszystkie związane z tym problemy techniczne i prawne (szablony/makra/inlining).


title: Jak zacząć kodować dla JBossa

text: Mam pomysł, jak ulepszyć naszą wewnętrzną aplikację, po zapoznaniu się z potrzebami użytkowników, rozwiązywaniu ich bieżących problemów i tym podobnych. Ale nie jestem koderem. Moja ostatnia aplikacja, którą napisałem była na studiach, w C (java nie była wymyślona!) i był to system rezerwacji, z możliwością dodania innych modułów, bla bla. Dostałem A, ale zamiast tego zostałem administratorem systemu, bardziej zainteresowanym projektowaniem i konserwacją sieci i infrastruktury końcowej, ale wraz z pojawieniem się wirtualizacji i narzędzi do zarządzania linuxem, takich jak puppet, mogę teraz zarządzać infrastrukturą we śnie! Teraz chcę napisać kod - postawić na moją infrastrukturę i zbudować....system rezerwacyjny! To tylko po to, żeby zdobyć doświadczenie, ale nie wiem, od czego zacząć. Konfiguracja środowiska zajmie mi około jednego dnia. Pisząc specyfikację, nawet jak chcę, żeby działała, już wiem, ale jeśli chodzi o kodowanie w przyzwoity sposób, mogę się tylko domyślać. Jeśli ktoś może polecić książkę, stronę internetową, bloga, osobę na Twitterze lub po prostu doradzić, jak zbudować podstawową aplikację jboss, to proszę, "JESTEM GOTOWY DO NAUKI" :)


title: Jak uniknąć pozwania za oprogramowanie?

text: Napisałem małą aplikację jako projekt badawczy, który wykorzystuje biblioteki open source. Może wykonywać sniffowanie pakietów, skanowanie sieci i ataki typu man in the middle na Wi-Fi i LAN. To oprogramowanie jest przeznaczone do przeprowadzania audytów bezpieczeństwa. Ale użytkownicy mogą również użyć go do obejścia filtrowania adresów MAC swojego dostawcy usług internetowych i uzyskania bezpłatnego Internetu. Sprawa wydaje się podobna do tej z uTorrent. uTorrent może być używany legalnie, ale prawie każdy używa go do nielegalnego pobierania. Jeśli użytkownicy pobierają moje oprogramowanie i używają go w ten sposób, czy dostawca usług internetowych może pozwać mnie jako autora oprogramowania? Co powinienem umieścić w Warunkach, aby uniknąć pozwu za niewłaściwe użycie mojego oprogramowania? **EDYTUJ** Pochodzę z Europy Wschodniej, ale mieszkam w Wielkiej Brytanii. W jakim kraju powinienem zapytać prawnika? Ludzie mogą pobrać moje oprogramowanie na całym świecie.


title: Jakie są najważniejsze punkty styku między web developerem a IT?

text: Trochę tła: Obecnie pracuję jako jedyny programista w naszej firmie. Zostałem odpowiedzialny za szereg zewnętrznych witryn internetowych, a także za naszą wewnętrzną witrynę intranetową. Witryny zewnętrzne są obecnie hostowane zewnętrznie i albo tworzone/obsługiwane za pomocą systemu CMS, albo niestandardowe zaprojektowane przez hosta zewnętrznego. Przeprowadzę migrację stron internetowych na nasz własny wewnętrzny serwer i przeprojektuję je przy użyciu narzędzi, które uznam za konieczne (php, jquery, MySQL itp.). Intranet jest hostowany wewnętrznie, ale wymaga również całkowitego przeprojektowania. Nasz dział IT przechodzi obecnie pewną reorganizację i historycznie ma niewielkie doświadczenie z technologią sieciową. Chcę zaplanować z nimi koordynację, pomóc w stworzeniu odpowiedniej infrastruktury oraz zidentyfikować podstawowe kanały komunikacji między nami. Moje pytanie brzmi: jakie są główne punkty koordynacji, które normalnie istnieją między programowaniem a IT, koncentrując się na programowaniu internetowym? Mając (stosunkowo) pustą kartę, jaki byłby idealny podział obowiązków i główne punkty bezpośredniej współpracy? Wiem, że niektóre aspekty mojej konkretnej sytuacji mogą być nietypowe (tzn. będę odpowiedzialny za konfigurację środowisk PHP, repozytoriów kontroli źródła, administrowanie bazami danych itp.), ale chciałbym, aby odpowiedzi skupiały się bardziej na typowych konfiguracjach, ponieważ będzie to bardziej przydatne dla innych.


title: Jakie są dobre podejścia do sprzątania starych projektów?

text: Mam oprogramowanie, które napisałem około 2 lata temu i wymaga dodania do niego kilku funkcji. Zdałem sobie sprawę, że jest w strasznym bałaganie i mam ochotę wszystko poruszyć, posprzątać itp. Przeczytałem artykuł Joel on Software o nie zaczynaniu od nowa, więc jaka jest najlepsza droga naprzód?


title: C++ bez plików źródłowych

text: Bjarne Stroustrup wspomina w swojej książce „The C++ Programming Language, 4th Edition”, że nie wszystkie implementacje C++ używają plików do przechowywania i kompilacji kodu: Istnieją systemy, które nie przechowują, nie kompilują i nie prezentują programów C++ programiście jako zestawy akta. (Rozdział 15, strona 419) W dalszej części rozdziału powtarza, że niektóre implementacje nie używają plików, ale nie podaje żadnych przykładów. Jak działałoby takie środowisko w porównaniu z bardziej powszechnym środowiskiem opartym na plikach?


title: Dlaczego potrzebujemy formatu binarnych plików wykonywalnych?

text: Kiedy pliki binarne (tzn. pliki wykonywalne) są zapisywane, zwykle mają format (np. ELF lub .out), w którym mamy nagłówek zawierający wskaźniki do miejsca przechowywania danych lub kodu w pliku. Ale dlaczego nie przechowujemy plików binarnych bezpośrednio w postaci sekwencji instrukcji maszynowych. Dlaczego musimy przechowywać dane oddzielnie od kodu? Po drugie, gdy asembler tworzy plik binarny, czy plik jest jednym z powyższych formatów?


title: Właściwy wzorzec projektowy do korzystania z klasy StopWatch

text: Muszę zmierzyć czas wykonania bloków kodu. Zaimplementowałem prostą klasę `StopWatch` taką jak http://www.goldb.org/stopwatchjava.html. Jeśli będę wywoływał metody klasy `StopWatch` bezpośrednio pomiędzy logiką biznesową to mój kod źródłowy stał się nieczytelny i nieczysty. Jaki wzorzec projektowy może być przydatny w mojej sytuacji, aby kod był czytelny i czysty?


title: Dlaczego powinienem używać JAX-RS REST zamiast zwykłych serwletów?

text: Uczę się technologii J2EE używając Glassfish jako serwera WWW i kontenera EJB. Bardzo interesuje mnie również nauka REST i tworzenie aplikacji zgodnej z zasadami REST. Moim pierwszym projektem jest napisanie klienta czatu. Użytkownik przejdzie do strony internetowej, pobierze stronę internetową ze skryptem java, aby uruchomić klienta czatu (który wysyła dane na serwer i również je pobiera). Wezwania do publikowania danych i pobierania danych z serwera WWW będą odbywać się za pośrednictwem interfejsu RESTful. W tej chwili zrobiłem to za pomocą serwletów, które nasłuchują na URI /chatroom/getMessages i /chatroom/postMessage. Zmarszczka, na którą natrafiam, gdy próbuję przekonwertować to na usługę RESTful przy użyciu JAX-RS, która nie używa serwletów, polega na tym, że czuję, że wymyślam koło na nowo. Ze specyfikacją serwletów miałem ten obiekt HTTPSession, który bardzo ułatwił śledzenie, gdzie ktoś się znajduje w buforze czatu (a zatem, które wiadomości powinny być do niego wysyłane, gdy odwiedza /chatroom/getMessages). Ale teraz, kiedy robię to całkowicie RESTful i po prostu używam POJO z JAX-RS (co w rzeczywistości lubię bardziej z punktu widzenia stylu), teraz muszę ponownie wymyślić stan sesji, jeśli chcę, wręczając osobie token i trzymając ją ręcznie wraca do mnie za każdym razem, gdy rozmawiamy, tak jak zrobiłby dla mnie automatycznie wygenerowany plik cookie sesji, gdybym używał serwletów. DLACZEGO powinienem zaimplementować to w JAX-RS i zrezygnować z serwletów? Nie widziałem żadnych samouczków JAX-RS, które łączą serwlety i JAX-RS (prawdopodobnie nie bez powodu), więc nie wydaje się to być opcją. Naprawdę chcę wiedzieć, jakie są przekonujące powody, dla których warto wybrać REST. Co daje mi nie tylko używanie serwletów w sposób RESTful?


title: Gdzie powinien znajdować się kod trwałości bazy danych w systemie MVC?

text: Widziałem wiele konfiguracji utrwalania informacji w bazie danych. Ogólnie rzecz biorąc, trzy typy projektów wydają się powszechne w moim zakątku świata: * Kontroler zarządza trwałością * Model zarządza trwałością * Biblioteka stron trzecich zarządza trwałością, zwykle wymagając pewnego rodzaju adnotacji na modelu. Zastanawiam się, która konfiguracja (jeśli w ogóle) jest koncepcyjnie najłatwiejsza w użyciu/najbardziej kompatybilna z architekturą MVC? (Jeśli nie jest wymieniony, proszę podać krótki zarys/omówienie jako część odpowiedzi)


title: Znajdź funkcję w NetBeans (lub nawet Eclipse lub inne) z wyłączeniem komentarzy

text: Czy można użyć funkcji wyszukiwania w NetBeans lub innym środowisku Java IDE z wyłączeniem komentowanego kodu z wyników? Jak?? Biorąc pod uwagę projekt, chciałbym znaleźć wszystkie wystąpienia słowa bez zwracania możliwych dopasowań pochodzących z kodu, który jest skomentowany. Czy tylko ja potrzebuje czegoś takiego?


title: Czy MVVM ViewModel powinien wstrzykiwać szablon HTML dla widoku domyślnego?

text: Pracuję nad projektowaniem aplikacji internetowych, które obejmuje Knockout.js i mam ogólne pytanie MVVM: Czy ma sens, aby ViewModel automatycznie wstrzykiwał domyślny szablon HTML (pobrany z oddzielnego pliku)? Więcej szczegółów: załóżmy, że mam taką witrynę... header... widget 1 widget 2 widget 3 stopka ... a widgety 1/2/3 będą to Knockout.js ViewModels **określone w czasie wykonywania** od ogólna lista dostępnych widżetów, każdy z powiązanym plikiem szablonu HTML. Rozumiem, że w MVVM chcesz, aby widok (w tym przypadku szablon HTML) był oddzielony od ViewModel (w tym przypadku plik JavaScript), aby ludzie mogli go edytować osobno i ewentualnie udostępniać wiele szablonów dla różnych „skórek”. Wydaje się jednak, że sensowne byłoby również wskazywanie przez ViewModel na **domyślny** szablon HTML, który jest używany automatycznie, chyba że kod kontrolujący zapewnia inny. Czy patrzę na to poprawnie? Jako przykład zobacz tę odpowiedź na StackOverflow, gdzie zaleca wstrzykiwanie kodu HTML, a następnie ViewModel. Wygląda na to, że w takim przypadku bardziej sensowny byłby jeden wiersz, z możliwością zastąpienia domyślnej wartości szablonu.


title: Czy CType() jest kiedykolwiek preferowaną opcją?

text: Czy kiedykolwiek `CType()` jest odpowiednią opcją w stosunku do innych metod? Sam dużo się nad tym zastanawiałem, ale chciałem zadać to pytanie w nadziei, że będzie odpowiedź na moje pytanie, abym mógł je zostawić w swoim miejscu pracy. Mój pomysł jest taki, że nigdy nie powinno się używać `CType()`. Ale inni wydają się myśleć, że nadal istnieje coś innego niż kompatybilność wsteczna. Czy jest więc jeszcze z niego pożytek? Dużym problemem jest to, że wiele osób wydaje się nie rozumieć różnicy między przesyłaniem a konwertowaniem. ## Konwersja Vs Casting To była jedna z takich linii kodu: With objZipFile.GetEnumerator() While .MoveNext objZipEntry = CType(.Current, ZipEntry) … cała ta praca jest wykonywana z objZipEntry End While End With Jeśli mój znajomy kiedykolwiek to przeczyta , on będzie jak "MÓJ KOD!!!!" kupa śmiechu. Tak, to jest twój kod. Jak już z nim rozmawiałem, .Current jest wyliczeniem objZipFile, ale jego typem jest ZipEntry. Dlaczego więc „konwertuje” za pomocą `CType()`, skoro tak naprawdę robi tutaj przesyłanie. Powinien używać `DirectCast(.Current, ZipEntry)`. Więc właściwym sposobem na Cast coś jest użycie `DirectCast()`. Ale to nie jest dyskusja o `DirectCast()`. Chodzi o to, że `CType()` z pewnością nie powinien być używany do Cast, jest to narzędzie do konwersji, więc porozmawiajmy więcej o konwersji. ## To CType() lub Not To CType(), nie sądzę W tym uproszczonym przykładzie mam łańcuch `"123"` i chcę, aby ten łańcuch został przekonwertowany na liczbę całkowitą. Tyle razy widzisz coś takiego: Dim wynik jako Integer = 0 wynik = CType("123", Integer) Świetnie! To działa! Więc jaka jest różnica między tym a tym: Dim result as Integer = 0 result = Integer.Parse("123") Cóż, w tym dokładnym przykładzie różnica polega na tym, że `CType()` zajęło więcej zasobów do uruchomienia. Gdybym dał ci dwa klarowne drinki i powiedziałbym, że jeden ma wskaźnik zdrowia 10, a drugi 9. Nie wybierasz 9 z zasady, że nie jest dużo mniej zdrowy, wybierasz tamę 10. Również , wiersz `Integer.Parse` to kilka znaków o mniejszej liczbie znaków. No dobrze, ale co, jeśli nie wpisałeś „123”? Co jeśli wejście to „UrMom”? Słyszałem, że `CType()` się nie zepsuje... ale o ile wiem, to nieprawda. `CType()` psuje tak samo jak `Type.Parse()`. Chciałbym kilka argumentów na ten temat. Chociaż sam argument wspierający odporność `CType()` nie jest wystarczającym powodem, aby użyć `CType()`. Z drugiej strony mamy tę opcję w klasie `Type`: Dim MyInt As Integer = 0 Dim TryInt As Integer = 0 If Integer.TryParse("54", TryInt) Then MyInt = TryInt Else 'Obsłuż to odpowiednio End Jeśli nie tylko analizujemy dane, ale jeśli nie analizujemy, obsługujemy je poprawnie. Co jest o wiele lepszą opcją niż rzucenie `Try/Catch` wokół złego kodu i pozwolenie na jego zerwanie przed obsłużeniem jego niepowodzenia w `Catch/Finally`. Pamiętaj, że może istnieć wiele różnych sposobów rzutowania i konwersji, ale głównym celem tego pytania jest udowodnienie lub zaprzeczenie, że nie należy używać funkcji „CType()”. Moim głównym argumentem jest to... Jedyne argumenty, które widziałem, które wspierają użycie `CType()` to te, które mówią, że `CType()` nie zepsuje się, jeśli przekaże złe dane, lub że `CType()` jest lepiej, jeśli nie masz pewności, jakie dane wchodzą. W odpowiedzi mówię Pish-Posh. Przemyśl swój kod, umieść warunki i dowiedz się, do czego chcesz użyć elementu. Jeśli wydarzy się coś, czego się nie spodziewałeś, zajmij się tym poprawnie. Czy jest więc kiedykolwiek, że `CType()` jest odpowiednią opcją w stosunku do innych metod? Proszę podać przykłady.


title: Częściowy kod starszego GPL 2 do projektu GPL 3

text: Planuję importować prace z projektu Java GPL2 do projektu GPL3. 1. W jaki sposób muszę „naprowadzić” wszystkie moje pliki źródłowe wywodzące się z mojego projektu: czy muszę umieścić licencję GPL2 oryginalnego projektu (mówiąc, że „Ten plik jest częścią NAZWA_PROJEKTU...”) nad moim projektem? 2. Jak powinien wyglądać plik LICENSING całego projektu: czy muszę w nim umieścić obie licencje? 3. Jeszcze nie wiem, czy zaimportuję prawie kompletne klasy, czy tylko fragmenty kodów z oryginalnego projektu. W każdym razie, jak mam poinformować użytkownika (mówiąc w oknie dialogowym o): czy wystarczy powiedzieć "Praca pochodna z projektu PROJECT_NAME"? Z góry dziękuję.


title: Zabawne zasoby do nauki języka Java

text: Czy istnieje fajny sposób na naukę języka Java? Zamiast tego, jaki jest „najlepszy” sposób na nauczenie się tego, zastanawiam się, jaki jest najzabawniejszy sposób na nauczenie się tego. Obecnie biorę udział w kursie wprowadzającym do programowania, aby zobaczyć, o co w tym wszystkim chodzi, ale szczerze mówiąc, nie jest to zbyt przyjemne. Z pewnością uwielbiam programować w odpowiednim sensie (do wykonywania zadań związanych z układem i analizą), uważam, że trochę czasu zajmuje mi dotarcie do sedna (zajęło mi to rok z JavaScript), aby poczuć, że można po prostu wymyślać rzeczy i wypróbowywać je na zewnątrz. Zdaję sobie sprawę, że subiektywność pytań sprzyja płomieniom itp., więc powtórzę ducha pytania. Chcę wiedzieć, jakie zasoby/metody ludzie zastosowali, aby nauka języka programowania była przyjemniejsza.


title: Projektant Entity Framework nie jest już skuteczny

text: W moim obecnym miejscu pracy **Entity Framework 5** jest używany do wszystkich operacji dostępu/manipulowania danymi. Jest to podejście oparte na bazie danych, wykorzystujące projektanta modelu do dodawania/edycji/usuwania/aktualizowania encji. **Problem** Mamy teraz mnóstwo stołów i aktualizacja staje się koszmarem. Model jest bardzo zawiły i czasami może spowodować awarię IDE. Nie jestem super zorientowany na stronie Entity Framework rzeczy, ale z pewnością nie jest to zalecane podejście. Nigdy nie lubiłem projektanta od początku. Projektanci podobni do WYSIWYG-a zapowiadają kłopoty w moich oczach. **Rozwiązanie?** Zmiany strukturalne w bazie danych są zasadniczo wykonywane przez DBAdmins, więc nie możemy najpierw wykonać kodu (w każdym razie wolę nie generować tabel bazy danych). Czy istnieje lepsze podejście do tego? Czy nie powinniśmy używać mapera opartego na XML zamiast projektanta. A co z pierwszym kodem do istniejącej bazy danych?


title: Czy istnieje de facto standardowy dokumentator dla Javascript?

text: Próbuję udokumentować mój kod za pomocą JSDOC3, który ma podobną składnię do PHPDocumentator / Apigen. Ale czy istnieje de facto standard dokumentacji wbudowanej JavaScript? Myślę, że zamknięcie Google jest najbardziej kompletne (a przynajmniej tak się wydaje), ale co jest powszechnie stosowane przez IDE i czego większość ludzi oczekuje od dokumentów?


title: Przekazywanie konfiguracji do handlera

text: Buduję własny parser JET i jedną z rzeczy, które próbuję zrobić zgodnie ze specyfikacją JET, jest umożliwienie zmiany znaczników początkowych i końcowych z domyślnych `<%` i `%>`. Obecnie mam moduł obsługi parsera wzorowany na `javax.xml.parsers.SAXParser` i `org.xml.sax.ext.DefaultHandler2`. Program obsługi może przyjąć dyrektywę, która zmieni konfigurację parsera. Więc myślę o następujących opcjach: * posiadanie metody `setParser(Parser)`, która jest wywoływana przez handler i posiada to jako część interfejsu. Metoda jest wywoływana przez Parser podczas uruchamiania procesu analizy. * posiadać metodę `directive(..., Parser )`, która jest wywoływana przez handler i mieć ją jako część interfejsu. Ogranicza to aktualizacje parsera tylko do dyrektyw. * przechowuj startTag i endTag w module obsługi i korzystaj z metod get. * mieć nową klasę konfiguracyjną, która jest przekazywana przy użyciu metody set lub dyrektywy. Moje obecne myślenie to mieć metodę `directive(..., ParserConfiguration )`, która jest wywoływana przez handler i ma to jako część interfejsu. Ogranicza to aktualizacje parsera tylko do dyrektyw i pozwala na zajmowanie się tylko konfiguracją. Czy wybrane przeze mnie podejście jest dobrą opcją dla API, czy może jest lepsza alternatywa, o której jeszcze nie pomyślałem?


title: Czy podejście „Najpierw obiekty” to dobry pomysł?

text: Czy uważasz, że nowicjusze w programowaniu powinni uczyć się obiektów od pierwszego dnia, jak widać w książce „Objects First With Java: A Practical Introduction Using BlueJ” autorstwa Davida Barnesa? A może uważasz, że to zły pomysł? Dla osób niezaznajomionych z książką, oto lista tematów omawianych w rozdziałach: > Rozdział 1 dotyczy najbardziej podstawowych pojęć obiektowych: > obiekty, klasy i metody. Daje solidne, praktyczne wprowadzenie do > tych pojęć bez wchodzenia w szczegóły składni Javy. Daje także > pierwsze spojrzenie na kod źródłowy. Robimy to na przykładzie > graficznych kształtów, które można interaktywnie rysować, oraz drugiego przykładu > prostego systemu zapisów na zajęcia laboratoryjne. > > Rozdział 2 otwiera definicje klas i bada, w jaki sposób kod źródłowy Java > jest napisany w celu tworzenia zachowań obiektów. Dyskutujemy jak definiować pola > i wdrażać metody. W tym miejscu przedstawiamy również pierwsze typy instrukcji >. Głównym przykładem jest wdrożenie automatu biletowego. Spoglądamy również wstecz na przykład zajęć laboratoryjnych z rozdziału 1, aby zbadać > to nieco dalej. > > Rozdział 3 następnie powiększa obraz, aby omówić interakcję wielu > obiektów. Widzimy, jak obiekty mogą współpracować, wywołując nawzajem swoje metody > w celu wykonania wspólnego zadania. Omawiamy również, w jaki sposób jeden obiekt może tworzyć inne > obiekty. Omówiono wyświetlacz z budzikiem cyfrowym, który wykorzystuje dwie liczby > wyświetlane obiekty do pokazywania godzin i minut. Drugim ważnym przykładem jest > badamy symulację systemu pocztowego, w którym wiadomości mogą być wysyłane > między klientami poczty. > > W Rozdziale 4 kontynuujemy budowę bardziej rozbudowanych struktur obiektów. > Co najważniejsze, zaczynamy korzystać ze zbiorów obiektów. Wdrażamy elektroniczny notatnik > oraz system aukcyjny do wprowadzania kolekcji. W tym samym czasie omawiamy iteracje kolekcji i najpierw przyglądamy się pętlom >. Pierwsza używana kolekcja to ArrayList. W drugiej części > rozdziału wprowadzamy tablice jako specjalną formę kolekcji oraz > pętlę for jako inną formę pętli. Jako przykład użycia tablicy omówimy implementację > analizatora logów sieciowych. >> Rozdział 5 dotyczy bibliotek i interfejsów. Przedstawiamy bibliotekę standardową Java > i omawiamy kilka ważnych klas bibliotecznych. Więcej > co ważne, wyjaśniamy, jak czytać i rozumieć bibliotekę > dokumentacja. Dyskutowane jest znaczenie pisania dokumentacji w > projektach rozwojowych, a kończymy ćwiczeniem pisania > odpowiedniej dokumentacji dla naszych własnych zajęć. Random, Set i Map to przykłady klas, które napotkamy w tym rozdziale. Wdrażamy system dialogowy podobny do Elizy i graficzną symulację odbijającej się piłki, aby zastosować te klasy. > > Rozdział 6, zatytułowany Dobrze zachowane obiekty, dotyczy całej grupy zagadnień związanych z > tworzeniem poprawnych, zrozumiałych i możliwych do utrzymania klas. Obejmuje zagadnienia od pisania przejrzystego, zrozumiałego kodu — w tym stylu i komentowania — po testowanie i debugowanie. Strategie testowe są > wprowadzane i szczegółowo omawiane są różne metody debugowania. Korzystamy z przykładowego dziennika do umawiania spotkań i implementacji elektronicznego kalkulatora, aby omówić te tematy. > > W Rozdziale 7 omówimy bardziej formalnie kwestie podziału zagadnienia > domeny na klasy do implementacji. Dobrze wprowadzamy zagadnienia projektowania > klas, w tym pojęć takich jak projektowanie zorientowane na odpowiedzialność, > sprzęganie, kohezja, refaktoryzacja. W tej dyskusji używana jest interaktywna, tekstowa gra przygodowa (World of Zuul). Przechodzimy przez kilka iteracji ulepszania wewnętrznej struktury klas w grze i rozszerzania jej funkcjonalności, a kończymy długą listą propozycji rozszerzeń, które mogą być wykonane jako projekty studenckie. > > Rozdziały 8 i 9 wprowadzają dziedziczenie i polimorfizm wraz z wieloma powiązanymi > szczegółowymi zagadnieniami. Omawiamy prostą bazę danych płyt CD i filmów > w celu zilustrowania koncepcji. Szczegółowo omówiono kwestie dziedziczenia kodu, podtypów, wywołań metod polimorficznych > i nadpisywania. > > W rozdziale 10 wdrażamy symulację drapieżnika/ofiary. Służy to do > omówienia dodatkowych mechanizmów abstrakcji opartych na dziedziczeniu, a mianowicie interfejsów i klas abstrakcyjnych. >> Rozdział 11 przedstawia dwa nowe przykłady: przeglądarkę zdjęć i odtwarzacz dźwięku. > Oba przykłady służą do omówienia tworzenia graficznych interfejsów użytkownika > (GUI). > > Rozdział 12 podejmuje następnie trudną kwestię, jak radzić sobie z błędami. > Omówiono kilka możliwych problemów i rozwiązań oraz szczegółowo omówiono mechanizm obsługi > wyjątków w Javie. Rozszerzamy i udoskonalamy aplikację książki adresowej w celu zilustrowania pojęć. > > Rozdział 13 cofa się do bardziej szczegółowego omówienia > następnego poziomu abstrakcji: jak podzielić niejasno opisany problem na klasy i metody. W poprzednich rozdziałach założyliśmy, że duża część struktury aplikacji już istnieje i wprowadziliśmy ulepszenia. Teraz nadszedł czas, aby przedyskutować, jak zacząć od czystej karty. Wiąże się to ze szczegółowym omówieniem klas, które powinny > wdrażać naszą aplikację, ich interakcji i podziału obowiązków. Aby podejść do tego problemu, projektując system rezerwacji kinowych, używamy kart CRC. > > W rozdziale 14 staramy się zebrać wszystko razem i zintegrować wiele tematów > z poprzednich rozdziałów książki. Jest to kompletne studium przypadku, > poczynając od projektu aplikacji, poprzez projektowanie klas > interfejsów, aż po omówienie wielu istotnych cech funkcjonalnych i niefunkcjonalnych > oraz szczegółów implementacyjnych. Tematy omówione we wcześniejszych > rozdziałach (takie jak niezawodność, struktury danych, projektowanie klas, testowanie, > rozszerzalność itp.) są ponownie stosowane w nowym kontekście.


title: Algorytm niszczarki plików

text: W ramach nauki programowania systemowego zamierzam wdrożyć niszczarkę plików. Najprostszym sposobem (i prawdopodobnie postrzeganym jako naiwny) byłoby zastąpienie bajtów danych zerami (wiem, że system operacyjny dzieli pliki, a ja zamienię bajty we wszystkich tych kawałkach). Ale kiedy przeglądam ten temat w Google, jestem zaskoczony, że znalazłem algorytmy wielu przebiegów, niektóre sięgają nawet 35! Czy ktoś mógłby wyjaśnić korzyści z wielokrotnego przejścia, proszę? Nie mogłem znaleźć żadnego wyjaśnienia. Dziękuję


title: Czy istnieje odpowiednik mod_rewrite dla Twisted web?

text: Od dłuższego czasu zajmuję się programowaniem w PHP, a dopiero niedawno zdecydowałem się na przejście na Pythona. Spośród wszystkich frameworków internetowych Pythona, zdecydowałem się na Twisted Web, aby zbudować framework mojego startupu. Jednak (i wiem, że to brzmi nieciekawie), mod_rewrite był czymś, co naprawdę doceniam w Apache. Chcę, aby cały system był napisany w Pythonie, a nie tylko fragmenty napisane w PHP i Python: chociaż nakładka PHP może działać, unikałbym tego, gdyby było to w ogóle możliwe. Czy można zbudować taką aplikację bez uciekania się do brzydkich adresów URL? Uwaga: zdaję sobie sprawę z faktu, że Django pozwala na przepisywanie adresów URL, ale w pewnym sensie niweczy to cel używania samego Twisteda.


title: Jakieś zalecenia dotyczące konfiguracji/rozrywania testów automatyzacji przeglądarki?

text: Ostatnio przeprowadzałem testy automatyzacji przeglądarki przy użyciu Selenium (i trochę Watina) i osiągnąłem punkt, w którym szukam zaleceń dotyczących kontrolowania środowiska, które testuję. Na przykład, jeśli mam test, który rejestruje nowego użytkownika na stronie (lub podobne zadanie zależne od bazy danych); w jaki sposób ludzie zapewniają, że test nie trwa lub przynajmniej może być powtórzony bez zmiany samego testu? Poszukuję rekomendacji, aby zapewnić, że moje testy integracyjne/akceptacyjne przy użyciu Selenium będą mogły być przeprowadzane bez martwienia się o ręczną zmianę ich lub środowiska.


title: Czy prawidłowo używam klas Factory i Impl?

text: W moim symulatorze derby 2D destrukcji mam klasę CargoTruck i CargoTruckImpl, które implementują interfejs o nazwie Truck. CargoTruck ma odniesienie do CargoTruckImpl, które jest zwracane przez CargoTruckImplFactory. Ale potem zdecydowałem się dodać do tego łańcucha, aby CargoTruckImpl i CargoTruckMovementImpl używały interfejsu o nazwie Movement. CargoTruckImpl ma odniesienie do CargoTruckMovementImpl, które jest zwracane z powrotem do CargoTruck przez MovementImplFactory. CargoTruck->CargoTruckImpl->CargoTruckMovmentImpl FuelTruck->FuelTruckImpl->FuelTruckMovmentImpl Czy dodawanie do łańcucha jest takie złe? Czy używając w ten sposób klas Factory naruszam zasadę separacji czy zasadę otwarte-zamknięte? Czy istnieje lepszy sposób na zrobienie tego?


title: Jakie historie użytkowników należy napisać na początkowych etapach projektu?

text: Rozpoczynając projekt, nie masz nic — żadnego interfejsu użytkownika, żadnej warstwy danych, nic pomiędzy. Tak więc pojedyncza historia, taka jak „użytkownicy powinni mieć możliwość przeglądania swoich głupków”, będzie wymagała wiele pracy. Gdy już masz tę historię, bardziej realistyczna jest taka, jak „użytkownicy powinni móc edytować swoje foos”, ale ta pierwsza historia będzie obejmować skonfigurowanie warstwy interfejsu użytkownika, warstwy logiki prezentacji, warstwy logiki domeny i warstwy dostępu do danych. To nie pasuje do mojej koncepcji "zadań": dla mnie wolałbym mieć coś takiego jak następujące "zadania": * Pokaż fałszywe dane dla foos użytkownika w HTML, pochodzące z obiektów JavaScript. * Skonfiguruj warstwę logiki prezentacji i połącz z nią obiekty JavaScript. * Skonfiguruj warstwę logiki domeny i połącz z nią warstwę logiki prezentacji. * Skonfiguruj warstwę dostępu do danych i połącz z nią warstwę logiki domeny. Czy wszystkie te elementy mieszczą się w jednej „historii” powyżej? Jeśli tak, to czuję, że historie nie są zbyt użytecznym frameworkiem na wczesnych etapach projektu. Jeśli tak, to w porządku ---chcę się tylko upewnić, że niczego nie tracę, ponieważ naprawdę staram się nauczyć tej zwinnej metodologii najlepiej jak potrafię.


title: Przełączyć tryb akapitu na tryb łamania wiersza w edytorze WYSIWYG z powodu żądania klienta?

text: Buduję stronę dla klienta, który używa TinyMCE jako głównego edytora WYSIWYG. Teraz mój klient zapytał, czy można napisać linię i zrobić łamanie linii, a następnie kontynuować bez pozostawiania spacji między tekstem przed i po łamaniu linii (np. tak jak w słowie). Powiedziałem mu, że sieć używa akapitów do formatowania, a nie łamania wierszy. Mimo to chciałby używać łamania wierszy do formatowania. Czy mam go przekonać, aby nie używał łamania linii do formatowania, czy powinienem po prostu przełączyć TinyMCE na tryb łamania linii (co nie jest zalecane w dokumentacji TinyMCE).


title: Czy OpenGL po C++ jest zorientowany na zadania?

text: Po pierwsze, pozdrawiam wszystkich programistów, którzy włożyli niekończący się wysiłek w naukę i stawanie się ekspertami, mądrymi, wydajnymi i najlepszymi. Pozwól, że opiszę moją sytuację. Właśnie ukończyłem Elektronika i Komunikacja Stream. Chociaż bardziej interesuje mnie tworzenie oprogramowania i dlatego zdecydowałem się zostać programistą, a nie Electronics engg. 1. Nauczyłem się C++ i chciałbym zagłębić się w temat. 2. Zacząłem uczyć się OpenGL. Poprowadź mnie w następujących kwestiach: 1. Czy OpenGL jest dobry do nauki i czy jest zorientowany na pracę? 2. Czy po C++ powinienem nauczyć się innego języka niż OpenGL?


title: Jak poprosić szefa o opłacenie kwalifikacji?

text: Pracuję jako młodszy programista w firmie typu start-up i pracuję tu już od około 7 miesięcy. Po 4 miesiącach mieliśmy późny przegląd kwartalny i tuż przed tym, jak szef wspomniał, że był budżet szkoleniowy i powinniśmy dać im znać, jakiego szkolenia potrzebujemy, a oni je dla nas zdobędą. Poprosiłem w tym czasie o szkolenie, ale minęły 3 miesiące, nie wspominając o tym i od tego czasu nauczyłem się tego, czego potrzebowałem w swoim własnym czasie (po prostu nie mogę przestać uczyć się nowych rzeczy!) Niedawno przyjąłem nową rolę , więc otrzymaliśmy za to tanie (60 USD) szkolenie. Teraz zbliża się kolejna recenzja i chciałbym uzyskać kwalifikacje Adobe Qualified Expert dla ActionScript 3 / Flex. Kontraktowany współpracownik, który odszedł, powiedział mi, że powinienem spróbować nakłonić firmę do zapłaty za to, ponieważ jest to coś, co mogą powiedzieć potencjalnym inwestorom jako punkt sprzedaży. Moje pytanie jest jednak; jak mam do tego podejść z moim szefem? Nie chcę, żeby to zabrzmiało, jakbym szukał innej pracy i żeby kwalifikacje szukały gdzie indziej! Edycja: Powinienem wspomnieć, że firma, w której pracuję, ma obecnie bardzo niskie kwalifikacje, a wszyscy programiści flex są obecnie na niższym poziomie. Zależy mi na rozwoju, dlatego zależy mi na kwalifikacjach. Nawet jeśli nie uda mi się przeprowadzić ich przez firmę, sam się tego nauczę, ale wolałbym nie marnować własnej gotówki, gdy ma ona pomóc firmie na dłuższą metę!


title: Szukam pracy po źle zakończonym projekcie

text: Moja firma właśnie odwołała projekt, nad którym pracowałem, ponieważ byli niezadowoleni z jego przebiegu. Byłem nim dość rozczarowany, ponieważ uważałem, że projekt idzie dobrze i wyjaśniłem już ograniczenia, jakie będzie miało oprogramowanie ze względu na ograniczenia czasowe. Postanowiłem, że teraz będę szukał nowej pracy, ale obawiam się, że fatalne zakończenie projektu może sprawić mi pewne trudności. Jakieś porady, jak mogę zminimalizować trudności, które mi to powoduje, nie będąc nieuczciwym?


title: Czy uczciwe jest poproszenie zespołu o rozpoczęcie korzystania z CoffeeScript?

text: Swoją nową pracę jako programista JS rozpocząłem w listopadzie, a wkrótce potem zacząłem wdrażać Backbone. To była wystarczająco duża krzywa uczenia się dla zespołu (włącznie ze mną), jednak zastanawiam się nad spojrzeniem na CoffeeScript, który, jak sądzę, wymagałby, aby wszyscy w zespole wiedzieli? Czy to zbyt duża prośba, żebym była trochę bardziej produktywna?


title: Czy ten wariant Obserwatora jest ulepszeniem?

text: W bazie kodu C++, nad którą pracowałem, mają kilka wystąpień wzorca obserwatora, ale różni się on trochę od wzorca klasycznego. W klasycznym przypadku Observer jest specyficznym interfejsem z określonymi metodami, które są wywoływane, gdy Observable zmienia się lub ma nowe dane. Observable Observer register( Observer* ) update( data1, data2 ... ) W naszej bazie kodu używamy klasy szablonu, która przyjmuje liczbę i typ argumentów do metody update() jako parametry i pozwala określić dowolny wskaźnik -to-metoda jako odbiorca danych. Rejestr obserwowalny ( Functor<data1, data2> ) Czy jest to ulepszenie w stosunku do oryginalnego wzorca? Oto co moim zdaniem są plusami każdego podejścia: Klasyka: * przejrzystość - interfejs oznacza, które klasy są odbiorcami obserwowalnych danych * mniej kodu - kotłownia i brzydka składnia szablonu do tworzenia funktora są nieco uciążliwe Wariant: * elastyczność - ja może sprawić, że dowolny obiekt w moim systemie otrzyma aktualizację (jeśli ma poprawną sygnaturę metody) bez konieczności zmiany oryginalnego obiektu Jako inna opcja, czy mam wszystko źle, że w praktyce jest to wzorzec Observer?


title: Czy programista powinien spierać się z niepotrzebnymi lub szkodliwymi funkcjami?

text: Jakie jest dobre nastawienie deweloperów podczas omawiania nowych funkcji, a mianowicie funkcji niekrytycznych/kwestionowanych? Załóżmy, że tworzysz coś w rodzaju języka podobnego do Javy, a szef mówi: „Potrzebujemy wskaźników, aby programiści mogli bezpośrednio majstrować przy pamięci obiektowej!” Czy programista powinien odrzucić ten pomysł, ponieważ dodaje niewyobrażalną złożoność i luki w zabezpieczeniach, czy powinien zrobić to, o co go poproszono? Może to nie jest dobry przykład, ale co z rzeczami, które są bardziej w szarej strefie, jak dodawanie przycisków, które przerywają przepływ pracy lub są sprzeczne z wewnętrzną strukturą programu itp.? Jaka jest optymalna dystrybucja „mogę zrobić” i „nie mogę” dla zwykłego programisty? EDIT: Pytanie nie dotyczy złego szefa :D Byłem bardziej zainteresowany tym, jak ludzie podchodzą do nowych problemów, które dodają zauważalną ilość problemów, a być może są marginalnie przydatne. Czy ogólne nastawienie powinno brzmieć: 1. tak zrobimy to, schrzanimy złożoność 2. może 3. nie, generalna przeróbka i implikacje nie uzasadniają zmiany Jaka powinna być reakcja dobrego programisty?


title: Jak wdrożyć Scrum z dwoma projektami dla jednego zespołu?

text: Zaczynam w tej nowej firmie jako scrum master, a oni chcą zagłębić się w Scrum, co jest miłe iw ogóle, ale mają wystarczająco dużo osób (4) dla jednego zespołu. Mapa drogowa obejmuje dostarczenie nowego produktu i utrzymanie starego, więc co powinniśmy zrobić? * 2 zaległości produktów dla 1 zespołu? Jak powinniśmy planować w tym przypadku? * 1 rejestr produktów na 2 produkty? Jak w tym przypadku będzie działać przegląd sprintu?


title: Czy jest jakaś zaleta używania „unia” do tworzenia aliasu?

text: Odziedziczyłem trochę kodu i zobaczyłem coś nowego. Mają one definicję struktury danych w pliku .h, aw różnych lokalnych plikach zadeklarują: union globalStructOstuff localVar; **Czy jest w tym jakiś sens?** Mogłem zobaczyć, że globalna jest jakimś symbolem zastępczym, a lokalne wersje będą w końcu inne. Ale tutaj tak nie jest. Więc myślę, że wszystko to powoduje, że nowi faceci mają kilka dodatkowych minut na szukanie definicji. Sięgnąłbym, gdy tylko miałbym szansę, ale chciałem sprawdzić, czy nie tracę jakiegoś większego celu. **Edycja, rozwiązanie** Dzięki Twojej pomocy udało mi się otworzyć oczy i zdać sobie sprawę, że globalStructOstuff wcale nie jest strukturą, tylko unią zawierającą strukturę o podobnej nazwie. I nie używali typedef. Więc wszystko, co się tutaj dzieje, to zadeklarowanie zmiennej lokalnej. Ma rodzaj unii. Brak aliasu na nic globalnego. Przepraszam za zamieszanie, dzięki za całą twoją pomoc.


title: Jak określić datę premiery, gdy zespół korzysta ze Scruma?

text: Jestem nowy w Scrum i używam go w projekcie. Wykonujemy 3 tygodniowe iteracje, estymujemy na początku, a na końcu zbieramy punkty. Mamy rejestr produktów (prawdopodobnie niekompletny). Jeśli na początku robisz oszacowania całego rejestru, czy nie są to tylko „dzikie domysły”. Kiedy więc oceniasz rejestr i jak ustalasz datę wydania? ep


title: Dlaczego wyrażenia przyrostkowe i podstawowe nie są symetryczne?

text: Każde wyrażenie podstawowe jest wyrażeniem przyrostkowym, ale wyrażenie przyrostkowe nie jest wyrażeniem podstawowym. Ale w matematyce równość wydaje się być symetryczna. To znaczy: > Jeśli _A_ to _B_ , to _B_ to _A_ Dlaczego tak nie jest w przypadku wyrażeń przyrostkowych i podstawowych?


title: Czy moja koncepcja w licencji open source jest poprawna?

text: Chciałbym uzasadnić, czy moja koncepcja w licencji open source jest słuszna, ponieważ wiecie, że niezrozumienie warunków może prowadzić do poważnego procesu sądowego. > Główną różnicą między licencją open source jest to, czy licencja jest > copyleft. Licencja typu „copyleft” oznacza, że inni mogą powielać, modyfikować i > dystrybuować produkty, ale wydany produkt podlega tym samym > ograniczeniom licencyjnym. Oznacza to, że muszą używać tej samej licencji dla > zmodyfikowanej wersji. Ponadto licencja copyleft wymaga, aby wszystkie wydane > zmodyfikowane wersje były wolnym oprogramowaniem. > > Z drugiej strony, jeśli inni tworzą prace pochodne zawierające kod nieobjęty licencją > copyleft, mogą wybrać dowolną licencję dla kodu. Kilka rodzajów licencji i porównanie > GPL jest licencją restrykcyjną. Oprogramowanie wymaga wydania jako licencja GPL > jeśli integruje się lub jest modyfikowane w stosunku do innego oprogramowania na licencji GPL. Biblioteka > używana do tworzenia oprogramowania na licencji GPL jest również ograniczona do GPL > i LGPL , oprogramowanie własnościowe nie może być stosowane (ani przestrzegane) > w żadnej części aplikacji GPL. > > LGPL jest podobne do GPL , ale jest bardziej liberalne w kwestii zezwalania na > używanie innego oprogramowania nie na licencji GPL. >> BSD jest stosunkowo prostą licencją, która pozwala programiście na zrobienie wszystkiego na > oryginalnym kodzie źródłowym. Posiadacz licencji nie ponosi żadnej odpowiedzialności > prawnej za wydany produkt. >> Licencja Apache wyewoluowała z licencji BSD. Terminy prawne zostały > ulepszone i pisane przez prawników w bardziej nowoczesny sposób. Obejmuje > kompleksowe kwestie własności intelektualnej i odpowiedzialności. Poza tym, czy istnieją inne popularne licencje?


title: wybór bazy danych i jej projektu dla Rails

text: Mam trudności z podjęciem decyzji o bazie danych i jej strukturze. Powiedzmy, że problem jest taki. W przypadku mojego produktu mam różnych klientów (każdy jest instytucją edukacyjną) Każdy klient ma własnych podklientów (instytucja ma studentów) Każdy rekord ucznia będzie zawierał podstawowe informacje, takie jak "imię" i "numer". Są też dodatkowe informacje, o które klient (instytucja) może chcieć zapytać podklienta (studenta) np. "e-mail" lub "semestr" Wymyśliłem dwa rozwiązania: 1\. Mysql _**__insititution_ ___** id-|- Opis| * * * _**___Student__** id-|-identyfikator_instytucji-|-Nazwisko-|-Numer| * * * _ **_student_additional_details_ ___** student_id -|- field_name -|- Wartość * * * Student_additional_details będzie zawierał wiele rekordów dla każdego ucznia w zależności od liczby pytań zadawanych przez instytucję. 2.MongoDb _**__insititution___** id-|- Opis| * * * _**__Student_ ___** id-|-instituition_id-|-Name-|-Number|-otherfield1 -|- otherfield2 * * * w mongo sama struktura może być dynamiczna, więc tabela studentów wydaje się naprawdę dobra w mongo . Ale problem pojawia się, gdy muszę powiązać studenta z instytucją. Więc który z nich jest lepszym projektem? A może jakiś inny pomysł?


title: Jaka jest najlepsza metoda na udostępnienie darmowego „rozszerzenia” lub przykładowego kodu opartego na zastrzeżonym projekcie o zamkniętym kodzie źródłowym?

text: Posiadam autorski projekt. To prosta biblioteka uwierzytelniania. Chcę napisać dla niego rozszerzenie/przykłady open source (BSD). Te przykłady kodu interfejsu, łączącego moją bibliotekę uwierzytelniania z bazą danych zawierającą użytkowników. Podaję przykłady, których ludzie rzadko używają po wyjęciu z pudełka, ale są doskonałym punktem wyjścia do powiązania ich z własną bazą danych. Chcę móc wydać te rozszerzenia niezależnie od biblioteki. Jaki jest najlepszy sposób na to? Moim pomysłem jest użycie darmowego projektu github i umieszczenie tam rozszerzeń, a także wersji demonstracyjnej mojej biblioteki uwierzytelniania (tj. samego zestawu). Jak mam zarządzać różnymi wersjami biblioteki uwierzytelniania? W tej chwili używam SVN do zarządzania kodem źródłowym biblioteki uwierzytelniającej, chociaż lubię też git, więc zmieniłbym, gdyby to było lepsze. Czy ktoś zna dobry sposób zarządzania tego rodzaju rzeczami?


title: Inicjalizacja zmiennych i pętle for na schemacie blokowym

text: Muszę stworzyć schemat blokowy do programu C# i nie jestem z nim zbyt zaznajomiony. Mój problem polega na tym, że nie wiem, czy należy reprezentować inicjalizację zmiennych w schemacie blokowym, a jeśli tak, jak mam to zrobić. Drugi problem polega na tym, że nie jestem pewien poprawności mojej pętli for. Oto schemat, który stworzyłem jako część programu. Byłoby bardzo miło, gdybyś mógł mi powiedzieć, czy to jest poprawne, a jeśli nie, co powinienem poprawić. Dziękuję Ci! ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/Hey0G.png)


title: Czy muszę usunąć moją aplikację ze sklepu z aplikacjami? (Naruszenie praw autorskich)

text: Właśnie otrzymałem powiadomienie o naruszeniu praw autorskich, które mówi, że moja aplikacja narusza zasady użytkowania usług, z których korzysta moja aplikacja. Ten mail nie pochodzi jednak bezpośrednio od firmy, która prowadzi serwis, z którego pobieram informacje. Poczta pochodzi od firmy, która ma kilka płatnych aplikacji w tej samej kategorii w sklepie z aplikacjami (moja jest bezpłatna), więc najwyraźniej chcą, abym odszedł. Moje pytanie brzmi, czy mogę po prostu zignorować tę wiadomość, dopóki nie otrzymam wiadomości bezpośrednio od firmy, która prowadzi witrynę? Sądząc po ich (firmie, która skontaktowała się ze mną) stronie internetowej, nie mają żadnego związku z firmą, od której pozyskuję informacje.


title: Wycofanie Java API

text: Kto decyduje, że API deprecjonuje specyfikację JEE lub dostawcę JDK, takiego jak Sun, IBM?


title: Czy powinienem umieścić metody narzędziowe w klasie?

text: Pracowałem nad biblioteką, która zawiera duży zestaw funkcji. Dla uproszczenia jako przykład posłużę się tylko jednym zestawem. Nie jestem pewien, który jest lepszy sposób, jeśli chodzi o łatwość użycia i wydajność, czy powinienem umieścić te metody dostarczone jako indywidualne metody, poprzedzone kategorią funkcji, czy też lepiej utworzyć klasę zawierającą wszystkie metody jako metody statyczne. Na przykład: Indywidualne metody: (p.s. można to również napisać bez `request_` w nazwie funkcji i zamiast tego używać przestrzeni nazw) function request_method() { ... } function request_url() { ... } function request_useragent() { . .. } .... Metoda klasyfikowana: class Request { public static function method() { ... } public static function url() { ... } public static function useragent() { ... } ... }


title: Wdrażanie harmonogramowania w aplikacji

text: Tworzę aplikację, a użytkownik końcowy będzie używał ekranu administratora do planowania zawartości na pierwszej stronie. Wybiorą dwie daty, datę rozpoczęcia i datę zakończenia. Oczywiście nie chcę przechodzić przez całą kolekcję, aby sprawdzić, czy dzisiejsza data przypada między którąkolwiek z dat rozpoczęcia lub zakończenia za każdym razem, gdy ładuje się strona główna. Ponadto nie chcesz, aby użytkownik mógł zaplanować dwie rzeczy, które nakładają się na siebie. Powinien istnieć lepszy sposób niż sprawdzanie konfliktów z każdym rekordem przed zapisaniem. Używając Node/Socketio/Express/Mongoose mogłem zindeksować kolekcję w Mongo, a następnie odpowiednio posortować, aby przetestować dzisiejszą datę i upewnić się, że nie ma sprzecznych harmonogramów. Mogę też mieć flagę, która jest ustawiana po zmianie dnia, co oznacza bieżącą treść. Pomyślałem, że może być lepszy sposób. Czy ktoś ma jakieś myśli?


title: Frustracja związana z menedżerami układu Java Swing

text: Od lat próbuję opanować menedżerów układu Swing bez powodzenia. Za każdym razem, gdy muszę coś zrobić ze Swingiem, to tak, jakbym wyciągał gwoździe, aby elementy wizualne ułożyły się tak, jak chcę. Jestem zaznajomiony z frameworkami takimi jak Matisse, ale nie o to chodzi. Moje pytanie brzmi: Dlaczego Swing potrzebuje menedżerów układu? Wydaje się, że to zbyt skomplikowany paradygmat. To, co chciałbym móc zrobić, to opisać prostą ramkę JFrame, a następnie dla każdego komponentu (takiego jak JLabel) po prostu określić współrzędne X i Y, w których chcę, aby się znajdowały - gotowe. Czy ktoś może wyjaśnić, co jest złego w tym prostym podejściu, które działałoby przewidywalnie 100% razy? A może istnieje rzeczywisty menedżer układu, który robi dokładnie takie rzeczy?


title: Gdzie w JSF obiekty takie jak PhaseListeners mieszczą się we wzorcu MVC?

text: Jeśli chodzi o JSF, to miałem problem z rozróżnieniem, gdzie pewne obiekty, które tworzę, pasują do ogólnego wzorca MVC. Widok jest wystarczająco prosty, ponieważ jest obsługiwany przez szablon .xhtml, ale jeśli chodzi o obiekty takie jak: * Odbiorniki akcji/zmiany * PhaseListeners * Walidatory * Nawigacja Beans * Konwertery * Filtry Na początku zakładam, że niektóre z nich należą do kontrolera ale widziałem wiele oświadczeń tutaj i gdzie indziej w Internecie, które stwierdzają, że dla większości programistów korzystających z frameworka MVC, w szczególności JSF, większość/całość kontrolera jest już zaimplementowana przez framework. Poniższe pytania i odpowiedzi: Zrozumienie JSF jako frameworka MVC, choć bardzo pouczające, nadal pozostawia mi dość niejasne wrażenie w tej sprawie. Przyjęta odpowiedź stwierdza, że konsumenci JSF nie implementują kontrolerów, podczas gdy teza połączona na dole odpowiedzi wyraźnie stwierdza, że odbiorniki są częścią wzorca kontrolera.


title: Czy powinienem używać legalnych podszywania się pod e-maile?

text: Ostatnio otrzymuję prośbę: e-maile użytkowników są przechowywane w bazie danych, a na żądanie użytkownika system wyśle e-mail w ich imieniu. Aby dodać więcej kontekstu, przypomina to wysłanie wiadomości e-mail od dostawcy na adresy e-mail klientów. Ale nie jest to stały adres e-mail (zależy od tego, który sprzedawca zapyta system). Używając JavaMail, mogę po prostu ustawić pole `from`. Ale coś wydaje się nie tak. Szukając tego rodzaju pracy natrafiam na "Email spoofing" - co wygląda na to, co zamierzam zrobić. Takie podejście ma pewne wady, na przykład może sprawić, że e-maile będą atrakcyjne dla filtrów antyspamowych itd. Oczywiście mogę po prostu robić to, czego chce klient, ale zastanawiam się, czy jest jakaś lepsza alternatywa?


title: Diagramy sekwencji i implementacja

text: W fazie projektowania tworzymy diagramy sekwencji UML (w OOD). Rozumiem, że po utworzeniu diagramu Przypadku Użycia, jeśli potrzebujemy pokazać dalsze informacje w zakresie sekwencji czasowych zdarzeń tego Przypadku Użycia, możemy przejść do diagramów sekwencji. Moje pytanie brzmi, czy diagram sekwencji powinien przedstawiać dokładne szczegóły implementacji? Jeśli zapytam w inny sposób, czy wszystkie wywołania metod i interakcje z obiektami w implementacji powinny być pokazane na diagramie sekwencji? A może powinna przedstawiać obraz realizacji na wysokim poziomie? Zwykle w implementacji rzeczy mogą być realizowane z niewielkimi różnicami niż określone w diagramach projektowych. Tak więc, jeśli diagram sekwencji powinien pokazywać dokładne szczegóły implementacji, być może będziemy musieli je skorygować po wdrożeniu. Innym powiązanym pytaniem byłoby, kim są odbiorcy tych diagramów sekwencji poza autorem? Odpowiedź na to pytanie może również odpowiadać na pierwotne pytanie.


title: Jaki jest najlepszy sposób na rozpoczęcie korzystania z kontroli wersji w projekcie open source?

text: Zasugerowano, że biorę projekt open source ze względu na jego rozmiar i brak umiejętności, więc sprawdziłem Google Code i zacząłem tworzyć projekt, a teraz pyta mnie, czy chcę, aby projekt miał Git, Mercurial lub Subversion hosting kodu. Nawet nie wiem, czym jest hosting kodu, a wyszukiwanie po prostu bardziej zdezorientowało mnie debatami między tymi wszystkimi rzeczami, a to jest jeszcze gorsze, ponieważ Google Code pyta mnie, jakiego rodzaju licencji chcę. Myślę, że nie do końca rozumiem, co tak naprawdę oznacza open source, czy ktoś może zrobić szybką ściągawkę dla laika na temat tego, co to wszystko jest? Bardzo doceniane. **Edytuj** Było wiele świetnych odpowiedzi na temat tych trzech wersji hostingu kodu, ale myślę, że nie udało mi się przekazać prawdziwego pytania: Zasadniczo nie mam pojęcia, jak działa ten open source, dlaczego miałbym hostować kod gdzieś w ten sposób? Czy to oznaczałoby, że muszę usunąć witrynę z mojego obecnego hostingu, czy jest to zupełnie inny rodzaj hostingu? Co się stanie, gdy udostępnię moją witrynę jako open source, jakie mam prawa, jakie prawa oddaję. Jak to działa, czy ludzie po prostu przychodzą i rzucają we mnie kodem za darmo? Być może są to głupie pytania, a jeśli tak, to chyba potrzebuję głupich odpowiedzi, naprawdę nie mam pojęcia, czym jest open source, poza pojęciem współdzielenia kodu...


title: Czy ocena zwarcia jest konsekwencją call-by-name?

text: Jeśli operatory logiczne &&, || są zaimplementowane jako metody infiksowe, to czy ocena zwarcia nie jest tylko konsekwencją implementacji przy użyciu semantyki wywołania po nazwie, ponieważ na przykład metoda && nie oceniłaby wtedy drugiego argumentu w żadnym wypadku, jeśli pierwszy to fałsz. Zastanawiam się tylko, bo generalnie są one traktowane jako osobne tematy (np. w prowadzonym przeze mnie kursie intro Scala - https://class.coursera.org/progfun-003/lecture/5 ), ale ocena zwarć wydaje się po prostu być konsekwencją call-by-name.


title: Użyj adresu MAC do licencji

text: Jeden z produktów mojej firmy wymaga implementacji mechanizmu licencyjnego. Planuję wygenerować kluczową bazę na podstawie adresów MAC użytkowników. Ale trochę się boję, że ta metoda pomyli się z niektórymi zaawansowanymi urządzeniami. konfiguracje takie jak. * Wiele kart sieciowych. * Wirtualizacja. * Możliwości zmiany adresu Mac (?) * Praca z VPN. Czy generowanie klucza licencyjnego z adresem MAC to dobry pomysł? Jakieś pomysły?


title: Jednostka (regresja) testująca algorytmy naukowe przy zachowaniu zmiennoprzecinkowym

text: Pracowałem nad projektem i napotkałem bardzo trudny problem. Problem można określić po prostu jako testowanie jednostkowe algorytmów numerycznych. Jeśli jednak weźmiesz to proste stwierdzenie, otrzymasz standardowy zestaw izolacji odpowiedzi danych wejściowych, procesów losowych, wyśmiewania, tolerancji itp. Odpowiedź (jeśli istnieje) nie jest z nimi. Przypominam też, że nie chodzi mi o testowanie poprawności algorytmu. Odbywa się to bardzo różnymi metodami i zakłada się, że algorytm jest poprawny. Używam testów jednostkowych, aby upewnić się, że zmiany w innych częściach algorytmów systemu/obsługi nie zmieniają wyników testowanego algorytmu. Tak więc opis problemu: Mamy algorytm, który przetwarza gigabity danych i generuje obraz z odpowiednią mapą, które piksele są dobre, a które nie. To ta mapa, którą muszę sprawdzić, nie zmienia się, a nieważne piksele nie mogą być używane w żaden inny sposób niż to, że są nieważne. Gdyby to było wszystko, co zostałoby podane, miałbym wiele możliwych rozwiązań, a tak naprawdę metodą stosowaną od lat jest przyjrzenie się liczbie prawidłowych pikseli, średniej, odchyleniu standardowemu, pikowi i dolinie obrazu. Okazało się to bardzo czułym detektorem na zmiany. Ale w tym roku pojawiły się komplikacje, które powodują problemy z tym podejściem. * Liczba używanych wątków wzrosła, powodując zmiany w zachowaniu zmiennoprzecinkowym. W przeszłości w stosowanych tolerancjach uwzględniano mniejszą liczbę gwintów. * Używaliśmy zmiennoprzecinkowych (w porównaniu z podwójnymi), aby zwiększyć przepustowość. To spowodowało, że zachowanie zaokrąglania zmieniło się jeszcze bardziej, a w połączeniu z liczbą wątków jeszcze gorzej. Sytuacja uległa również pogorszeniu, gdy przechodzimy do korzystania z przetwarzania SIMD, takiego jak zestawy instrukcji GPU i/lub AVX. * Udoskonaliliśmy algorytmy używane do odzyskiwania większej liczby pikseli, które w przeszłości zostały oznaczone jako nieprawidłowe, nie są prawidłowe. W połączeniu z powyższymi punktami 1 i 2 powoduje to, że niektóre piksele są uwzględniane na niektórych komputerach, a na innych nie. Ponieważ są one na granicy użyteczności, różnice te są obsługiwane przez algorytmy wykorzystujące ten obraz i nie dotyczą systemu jako całości, ale powodują problemy z testowaniem jednostkowym algorytmów. * Niedawno napotkaliśmy również problem polegający na tym, że dwie liczby (wewnętrzne w obliczeniach) są takie same i ze względu na zachowanie zaokrąglania wybierana jest jedna lub druga, co daje różne wyniki. . Ponownie nie jest to problem systemu jako całości, tylko z testowaniem jednostkowym w celu oznaczenia różnic. * Jako drobny przykład poboczny, mamy również inne nieliniowe algorytmy, które ze względu na zachowanie zaokrąglania mogą dawać różne wyniki. Ponieważ algorytmy te korygują się samoczynnie, ostateczne rozwiązanie jest dobre, ale ma większą zmienność, niż można to łatwo wyjaśnić, chyba że tolerancje są większe niż pożądane. Tak więc moje pytania dotyczą tego, jak uwzględnić te problemy w testach jednostkowych. Bardzo potrzebuję testów jednostkowych, ponieważ mamy zespół programistów pracujących nad systemem i potrzebujemy możliwości wykrycia, kiedy ktoś dokona zmiany, która nieświadomie wpływa na inne algorytmy. Tak, miało to miejsce w przeszłości, a metoda używana w tym czasie wychwyciła zmianę, zanim dotarła do produktu końcowego. Jako główny programista algorytmów mogę skorzystać z Twojej pomocy. Miałem wiele pomysłów, ale nie działają one we wszystkich przypadkach i nie jest jasne, kiedy użyć jednej z różnych metod. **Edytuj:** Teraz często nazywa się to testowaniem regresyjnym, ale wiem też, że wiele osób często nazywa to również testowaniem jednostkowym, nawet jeśli nie jest to całkowicie poprawne. Niekoniecznie szukam magicznej kuli (to byłoby miłe), ale potrzebuję sposobu na poradzenie sobie z tymi problemami w sposób, który może być obsługiwany przez innych w grupie, którzy mogą nie mieć tak dużej wiedzy na temat szczegółów. Jeśli jest to „wybieranie” jednej z tych metod, to jest w porządku, jeśli zasada jest jasna. Dopasowujemy parametry, gdy zmieniamy algorytmy, ale po naprawieniu zachowanie zmiennoprzecinkowe nadal powoduje różnice. Kiedy widzimy różnice, zawsze badamy dlaczego i generalnie staramy się dostosować algorytm, aby zmniejszyć różnicę, ale zdarzają się sytuacje, w których nie jest to możliwe ze względu na dodatkowy czas obliczeń. Gdybyśmy trzymali się z dala od ograniczeń, nie byłby to problem (jak w przeszłości), ale aby rozwijać technologię, musimy przesuwać granice powodujące opisane problemy. Możesz to zobaczyć na prostym przykładzie. Obliczanie średniej z wielu liczb. Jeśli pozostaniesz przy liczbach, które są blisko siebie, istnieją proste metody, aby upewnić się, że wyniki są dokładne. Teraz, gdy pozwolisz na liczby, które mają duże (rzędy mag) różnice, z wątkowaniem, liczbą zmiennoprzecinkową w porównaniu z podwojeniem itp., możesz uzyskać bardzo różne wyniki. Tak, wiem, że istnieją algorytmy, które można wykorzystać do rozwiązania tego problemu, ale mogą one być bardzo kosztowne obliczeniowo. Chociaż uśrednianie nie jest moim problemem, możesz sobie wyobrazić, że różnica nie wpływa na przetwarzanie w dalszym ciągu, ale nadal chcesz napisać test do monitorowania obliczeń.


title: Jakie jest najlepsze i najtańsze rozwiązanie do przechowywania filmów i zdjęć przesłanych przez użytkowników?

text: Jestem w trakcie tworzenia aplikacji na iOS, która umożliwi użytkownikom przesyłanie krótkich filmów (w niskiej rozdzielczości i < 5 sekund), a także pełnowymiarowych zdjęć zrobionych przez ich urządzenie z systemem iOS. Nie mając pewności, jak udane będzie to przedsięwzięcie, szukam czegoś solidnego, niedrogiego i można go skalować w razie potrzeby. Oto moje wymagania w skrócie: 1. Użytkownicy będą mogli przesyłać pliki w niskiej rozdzielczości. filmy < 5 sek. długości lub pełnowymiarowych obrazów przechwyconych z urządzenia z systemem iOS. 2. Potrzebuję możliwości monitorowania ilości pamięci używanej dla każdego użytkownika w celu rozliczania, a nawet ograniczania dalszego przesyłania, jeśli na przykład osiągnęły pewien próg 3. Potrzebuję czegoś solidnego, ale opłacalnego (ja w tym momencie jestem jednoosobową operacją). Idealnie byłoby coś, co może rosnąć i skalować się ze mną. Jakakolwiek pomoc w osiągnięciu tego celu jest zdecydowanie doceniana. Dzięki -wg


title: Potrzebuję porady na temat projektowania CLI, muszę zapewnić proste, ale potężne opcje wiersza poleceń

text: Piszę narzędzie, które działa w wierszu poleceń RHEL5. Potrzebuję, aby moje opcje wiersza poleceń były proste, ale potężne. Przyjrzałem się różnym narzędziom UNIX, aby zorientować się, jak proste muszą być narzędzia wiersza poleceń. Czy sugerujecie jakieś dokumenty/linki, które mówią o etykiecie wiersza poleceń? Modeluję swoje narzędzie na LVM (to wszystkie informacje, które mogę na razie podać). Wiem, że to pytanie dotyczące inżynierii oprogramowania, ale pomyślałem, że byłoby stosowne opublikować tutaj. Proszę o radę.... PS: Nie pytam o szczegóły dotyczące parserów narzędziowych getopt lub wiersza poleceń.....


title: Tworzenie kopii zapasowych wiadomości w S3 w topologii Storm

text: W moim projekcie staramy się zbudować architekturę opartą na burzy RODZAJ LAMBDA. Komponent byłby odpowiedzialny za indeksowanie zdarzeń związanych z użytkowaniem witryny, więc spodziewamy się dość masowego losowego obciążenia. Rozwiązanie do przetwarzania wiadomości w czasie rzeczywistym wydaje się w porządku, ale równolegle do „warstwy szybkości” chcemy tworzyć kopie zapasowe wiadomości w surowej formie (tak jak schodzą z kolejki) w Amazon S3. Ponieważ pisanie pliku na wiadomość jest oczywiście wykluczone, musimy jakoś buforować/agregować wiadomości przed wysłaniem do S3 - i tutaj zaczynają się problemy. Mamy dwa równoległe podejścia i żadne nie wydaje się idealne: 1. Użyliśmy Redis jako bufora. Zasadniczo wiadomości przychodzące z kolejki (RabbitMQ) są buforowane w Redis i po osiągnięciu pewnego wstępnie skonfigurowanego rozmiaru partii (powiedzmy 1000), bufor jest opróżniany i przechowywany w S3. Cały cykl przetwarzania wiadomości nie jest transakcyjny. Po zapisaniu wiadomości w Redis zostaje ona potwierdzona w kolejce. Oznacza to, że jeśli Redis umrze, cała partia zostanie utracona i jest to nie do przyjęcia. Możemy pomyśleć o klastrze Redis, aby uczynić rzecz bardziej kuloodporną, ale… czy nie wydaje się, że idzie w złym kierunku? 2. Drugim podejściem byłoby użycie Trident Topology. Zmiana kolejki wejściowej na Kafkę sprawia, że wszystko wygląda mniej lub bardziej prosto. Cykl przetwarzania wiadomości może być transakcyjny. JEDNAK, jest jedno irytujące słowo kluczowe, które jest powtarzane w dokumentacji Tridenta - **małe partie** \-, które Trident zakłada małe partie. Na przykład TransactionalTridentKafkaSpout grupuje wiadomości w 2-sekundowe fragmenty. To dla nas zdecydowanie za mało. Nie jestem pewien, dlaczego partie mają być małe, ale jeśli jest to naprawdę wymagane, może pierwsze podejście jest lepsze? Który z góry jest lepszy? Może ktoś wpadnie na „trzeci” pomysł?


title: Jak stworzyć środowisko konferencyjne 3D oparte na awatarach?

text: Chcę stworzyć środowisko 3D do spotkań i innych tego typu funkcji. Każdy uczestnik mógł zalogować się za pomocą spersonalizowanego awatara, współpracować i dyskutować za pośrednictwem czatu głosowego i tekstowego. Chciałbym również dodać do środowiska funkcje treści multimedialnych. Potrzebuję pomocy w wyborze platformy, najlepiej, jeśli chcę ją zaimplementować jako aplikację internetową bez lokalnej instalacji. Chciałbym uniknąć wtyczki przeglądarki, chyba że jest to absolutnie konieczne. Nie znam się na programowaniu graficznym, więc wolałbym podejście, które wykorzystuje istniejące platformy i gotowe oprogramowanie. Do tej pory rozważałem następujące opcje: * WebGL * Google O3d * web 3d's X3D * VRML * X3doom * Sirikata Platform * yogurt3d * Unity3d * Jibe * OpenSim * Papervision3d * Flash * 3dmlw * Java3d * Infinity3d * Cube3 * CloudMach Czy są inne możliwości?


title: Koncepcje programowania zaczerpnięte ze sztuki i nauk humanistycznych

text: Po przeczytaniu eseju Paula Grahama Hackers and Painters oraz Joela Spolsky'ego Advice for Computer Science College Students, myślę, że w końcu dotarło do mnie, że nie powinienem obawiać się ciężkiej pracy na kursach akademickich, które nie są „programowaniem” lub kursy „informatyka”. Cytując poprzednie: > Odkryłem, że najlepszym źródłem pomysłów nie są inne dziedziny, które mają > słowo „komputer” w swoich nazwach, ale inne dziedziny zamieszkane przez > twórców. Malarstwo jest znacznie bogatszym źródłem idei niż teoria obliczeń. > > -- Paul Graham, „Hakerzy i malarze” Z pewnością są inne, znacznie silniejsze powody, by ciężko pracować na „nudnych” zajęciach. Jednak fajnie byłoby wiedzieć, że te zajęcia mogą kiedyś zainspirować mnie do programowania. Moje pytanie brzmi: jakie są konkretne przykłady, w których idee z literatury, sztuki, nauk humanistycznych, filozofii i innych dziedzin trafiły do programowania? W szczególności pomysły, które nie zostały oczywiście zastosowane w sposób, w jaki były przeznaczone (jak większość wiedzy matematycznej i specyficznej dla danej dziedziny), ale zamiast tego dały wypowiedź lub inspirację do projektu programu i doboru nazw. **Dobre przykłady:** * Termin **endian** pochodzi z _Podróży Guliwera_ Jonathana Swifta (patrz tutaj), gdzie odnosi się do banalnej kwestii, po której stronie ludzie otwierają jajka. * Terminy **dziennik** i **transakcja** odnoszą się do prawie identycznych pojęć zarówno w projektowaniu systemu plików, jak i księgowości z podwójnym zapisem (rachunkowość finansowa). `mkfs.ext2` mówi nawet: Pisanie superbloków i informacji o rozliczaniu systemu plików: gotowe **Poza tematem:** * Nauka dobrego pisania po angielsku jest ważna, ponieważ umożliwia programiście dokumentowanie i ewangelizowanie swojego oprogramowania, a także wydają się kompetentni dla innych programistów online. * Trygonometria jest używana w grach 2D i 3D do implementacji aspektów obrotu i kierunku. * Znajomość finansów przyda się, jeśli chcesz napisać pakiet księgowy. * Znajomość XYZ przyda się, jeśli chcesz napisać pakiet XYZ. **Prawdopodobnie na temat:** * Klasa Monad w Haskell opiera się na koncepcji o tej samej nazwie z teorii kategorii. W rzeczywistości monady w Haskell to monady w kategorii typów i funkcji Haskella. Cokolwiek to znaczy...


title: Jak zoptymalizować aplikację internetową pod kątem użytkowników z dużymi opóźnieniami?

text: Zasadniczo mam aplikację, która wyszukuje i żąda wyników z zaplecza poprzez długie sondowanie. Łączy się z backendem, który zbiera wyniki przez 500 ms, a następnie odsyła je z powrotem do klienta (tu trochę upraszczam). W miarę optymalizacji tego procesu zauważyliśmy rosnącą różnicę między użytkownikami, którzy wyszukują w nocy, a użytkownikami, którzy wyszukują w ciągu dnia. Mianowicie użytkownicy, którzy wyszukują w nocy, są _znacznie_ wolniejsi niż użytkownicy, którzy wyszukują w ciągu dnia, ponieważ są to głównie użytkownicy międzynarodowi i mają większe opóźnienia. Jakie są dobre podejścia wysokiego poziomu do przyspieszenia rzeczy dla tych użytkowników?


title: Nienawidzę powtarzania się do skrajności

text: Programuję w stylu, że wszystko jest drogie lub naprawdę nienawidzę powtarzać czegokolwiek, głównie dlatego, że tworzę dla systemów wbudowanych. Więc bardzo się denerwuję, kiedy **muszę** zrobić coś, co powoduje powtórzenie. Przykładem może być to, że w moim obecnym projekcie tworzę Layout Managera. Miałem tę ogromną funkcję, która wykonywała całą pracę umieszczania wszystkiego, co mi nie przeszkadza, dopóki dobrze komentuję. Niektórzy wskazują w dół linii Zdaję sobie sprawę, że coś, co robię w tej długiej funkcji, muszę zrobić ponownie w innym miejscu, na przykład dostosować się do czegoś, co jest większe niż obecny. Ale to, co mnie naprawdę zirytowało (i dlaczego publikuję ), to fakt, że potrzebna funkcja wymaga trzech zmiennych. Dla mnie te trzy zmienne są drogie i powinny być obliczane tylko raz na połączenie. Ale aby zrefaktoryzować kod tak, jak potrzebuję, muszę umieścić zmienne w potrzebnej funkcji. Teraz zmienne są oceniane trzy razy. To tylko przykład, a takie rzeczy pojawiają się w wielu innych miejscach, więc oprócz powiedzenia mi, że te oceny nie są drogie, w tym momencie powiem „chociaż nadal to powtarzam”, co można zrobić o tego typu rzeczach, czy, ku mojej ogromnej irytacji, jest to nieuniknione? _**Aktualizacja:_** Jedną z głównych podanych sugestii jest przechowywanie wartości. Korzystając ponownie z powyższego przykładu, przechowywanie wartości nie wydaje się opłacalne. Głównie dlatego, że potrzebna funkcja przyjmuje dwie potrzebne wartości, które są używane do obliczenia trzech zmiennych. Oznaczałoby to, że musiałbym utworzyć obiekt i bez obaw poprawiać mnie, jeśli się mylę, przechowywać wartości i zmienne w obiekcie, a następnie testować je, jeśli się zmieniły. Krótko mówiąc, chyba że istnieją inne pomysły, wydaje się to nieuniknione. Jedyne, co możesz zrobić, to zminimalizować do limitu. Jak głęboko tworzę obiekty kosztem wyszukiwania nieruchomości? Ile razy muszę wielokrotnie tworzyć te trzy zmienne? Mam nadzieję, że wpadłeś na pomysł. Jest też fakt, że może mógłbym lepiej zrefaktoryzować swój kod. Mam tendencję do pisania w ogromnych funkcjach i wyciągam tylko to, czego potrzebuję, co prawdopodobnie jest winą KISS. Myślę, że potrzebny jest inny akronim, żeby to zrównoważyć :P .


title: Dlaczego operator strzałki w C++ nie jest tylko aliasem *.?

text: W c++ operator * może być przeciążony, na przykład za pomocą iteratora, ale operator strzałki (->) (.*) nie działa z klasami, które przeciążają operator *. Wyobrażam sobie, że preprocesor mógłby z łatwością zastąpić wszystkie instancje -> przez (*left).right, co sprawiłoby, że iteratory byłyby przyjemniejsze do zaimplementowania. czy istnieje jakiś praktyczny powód -> do bycia innym, czy to tylko specyfika języka/projektantów?


title: Ograniczenia w relacyjnych bazach danych — dlaczego nie usunąć ich całkowicie?

text: Czy jest jakiś powód do budowania ograniczeń między tabelami (wewnątrz serwera SQL) w dzisiejszych czasach? Jeśli tak, to kiedy? Większość aplikacji w moim obszarze opiera się na zasadach obiektowych, a tabele są łączone na żądanie. Popyt jest oparty na potrzebie aplikacji. Nie będę ładować wielu tabel z ograniczeniami do prostego wyszukiwania, które z kolei (po akcji) wymaga od siebie nawzajem prostego wyszukiwania. Narzędzia ORM, takie jak EntityContext, Linq2Data, NHibernate, również same radzą sobie z ograniczeniami, przynajmniej wiesz, które tabele potrzebują siebie nawzajem. Czy wprowadzenie ograniczeń wewnątrz serwera polega po prostu na dwukrotnym wprowadzeniu (wymuszeniu) tych samych zmian? Zwykle nie jest to pytanie do decyzji, ale ta baza danych jest zaprojektowana zupełnie inaczej. Projekt wygląda regularnie dobrze, w większości odzwierciedla obiekty używane przez aplikacje. Niepokoi mnie to, że wszystkie ograniczenia skonfigurowane w SQLserverze z "nie kaskadowo". Oznacza to, że podczas kodowania nowych zapytań do bazy danych musisz bawić się w „szukanie i znajdowanie”. Niektóre przypadki wymagają do 10 poziomów dokładnej kolejności, aby wykonać jedno usunięcie. To mnie zaskakuje i nie wiem, jak sobie z tym poradzić. W moim prostym świecie to ustawienie sprawia, że ograniczenia tracą większość celu. OK, jeśli dostęp do bazy danych uzyskano z hostów bez znajomości projektu. Jak byś się zachował w tym scenariuszu? Dlaczego po prostu nie usunąć wszystkich ograniczeń z bazy danych i zachować je na poziomie aplikacji?


title: Czego najlepsze firmy szukają w wywiadzie?

text: 1. Zasadniczo szukam tego, co jest tym, co wygłupiasz i jesteś poza pozostałym procesem? 2. Czy rundy eliminacyjne są uczciwym sposobem oceny osoby? Każdy może mieć złą godzinę :-( 3. Czy powinieneś kodować najlepiej, jak to możliwe, czy też powinieneś uzyskać odpowiedni algorytm? Generalnie najpierw koduję wykonalne rozwiązanie, a następnie pracuję nad nim do poziomu, który wydaje mi się, że wygląda pięknie. Czy to jest złe podejście ?Niedawno miałem telefoniczny wywiad, w którym zostałem poproszony o napisanie wariacji przechodzenia poziomu kolejności w 20 minut.Mogłem uzyskać algorytm i działający kod w 20 minut, ale nie mogłem uzyskać obsługi wyjątków i konwencji kodowania racja, po czym nie otrzymałem od nich odpowiedzi :-( Wszystkie inne pytania w wywiadzie poszły bardzo dobrze, to była jedyna rzecz, która była „nie do końca”. Nie trzeba dodawać, że podoba mi się firma i zgłoszę się ponownie ale chcę zrobić to dobrze następnym razem :-) Podziel się swoimi doświadczeniami i cennymi sugestiami.


title: Jakie są dostępne zestawy testów zgodności z POSIX typu open source?

text: Pracuję nad małym projektem open source, ELLCC, który używa clang/LLVM jako kompilatora krzyżowego dla różnych procesorów docelowych. W środowisku uruchomieniowym używam bibliotek NetBSD i przenoszę je na docelowe systemy Linux i autonomiczne. Chcę uruchomić na kodzie zestaw testów zgodności z POSIX. Znalazłem Open POSIX Test Suite, który wygląda na dobry początek, ale nie był aktualizowany od 2005 roku. Zrobiłem kilka wstępnych testów (z gcc i ecc pod Linuksem) i wygląda na to, że potrzebuje kilka aktualizacji dla nowoczesnych kompilatorów. Moje pytania to: 1. Czy Open POSIX Test Suite jest gdzieś obecny w bardziej aktualnej formie? 2. Czy istnieją inne alternatywy open source?


title: Przykłady kompozycji w inżynierii oprogramowania?

text: W programowaniu dość często wymienia się różne terminy, takie jak abstrakcja. Czym jednak jest kompozycja? Jaki jest podstawowy, ale skuteczny przykład kompozycji, w której można uzyskać kod dobrej jakości (dobra jakość oznacza łatwy do zrozumienia, krótki i zwięzły itp.).


title: Jak mogę zdobyć QueryOver API NHibernate?

text: Zetknąłem się z ograniczeniami tego, do czego jest zdolny dostawca LINQ NHibernate 3.0 i zdecydowałem, że nadszedł czas, aby dowiedzieć się o jednej z potężniejszych (lub przynajmniej kompletnych) opcji: API `QueryOver`. Problem polega na tym, że nie mam żadnego doświadczenia z `ICriteria` i wszystkimi samouczkami, które udało mi się znaleźć w Internecie: 1. Załóżmy, że jestem ekspertem od `ICriteria` i po prostu pokaż mi, jak przekonwertować kod ICriteria na nowy, płynny interfejs, lub 2. Są trywialnymi przykładami typu „oto jak robisz złącze wewnętrzne”, które tak naprawdę nie pomagają mi _zrozumieć_ bardziej złożonych pojęć, takich jak prognozy, podzapytania, wymagania lub jakąkolwiek inną magię, do której jest zdolne API. Co powinienem przeczytać, aby naprawdę **nauczyć się** o QueryOver i jak w pełni z niego korzystać?


title: Jak zintegrować gorące poprawki produkcyjnej bazy danych z modelem rozwoju współużytkowanej bazy danych?

text: Korzystamy z SQL Source Control 3, SQL Compare, SQL Data Compare z RedGate, repozytoriów Mercurial, TeamCity oraz zestawu 4 środowisk, w tym produkcyjnych. Pracuję nad przeniesieniem nas do dedykowanego środowiska na programistę, ale przynajmniej przez następne 6 miesięcy utknęliśmy przy wspólnym modelu. Podsumowując nasz obecny system, mamy serwer DEV SQL, na którym programiści najpierw wprowadzają zmiany/dodatki. Zatwierdzają swoje zmiany za pośrednictwem kontroli źródła SQL w lokalnym repozytorium hgdev. Kiedy wykonują push hg do głównego repozytorium, TeamCity nasłuchuje tego, a następnie (między innymi) przesyła repozytorium hgdev do hgrc. Inny proces TeamCity nasłuchuje tego, pobiera dane z hgrc i wdraża najnowsze na serwerze QA SQL Server, na którym przeprowadzane są testy regresji i integracji. Po ich przekazaniu następuje wypychanie z hgrc do hgprod. Porównujemy hgprod z naszym PREPROD SQL Server i generujemy skrypty wdrażania/wycofywania dla naszego wydania produkcyjnego. Niezależnie od powyższego mamy bazy danych Hot Fix, które będą musiały zostać zastosowane pomiędzy wydaniami. Proces, w którym nasz zespół operacyjny wprowadza zmiany w bazie danych PreProd, a następnie po testach, aby użyć kontroli źródła SQL, aby wprowadzić zmiany hot fix do hgprod z bazy danych PREPROD, a następnie wykonać porównanie z hgprod do PRODUKCJI, utworzyć wdrożenie skrypty i uruchamiaj je na PRODUKCJI. Gdybyśmy byli w dedykowanej bazie danych na model programisty, moglibyśmy po prostu automatycznie przesunąć hgprod z powrotem do hgdev i połączyć ze zmianą hot fix (poprzez monitorowanie TeamCity w celu sprawdzania hgprod), a następnie programiści mogliby go podnieść i połączyć ze swoim lokalnym repozytorium i bazy danych okresowo. Jednak biorąc pod uwagę, że w modelu współdzielonym źródłem wszystkich zmian jest sama baza danych DEV, to nie zadziała. Przekazywanie poprawek z powrotem do hgdev pojawi się w kontroli źródła SQL jako inne niż DEV SQL Server i dlatego musimy nadpisać repozytorium „zmianą” z DEV SQL Server. Moim jedynym obejściem jak dotąd jest to, że OPS przypisuje programistom zgłoszenie poprawki z dołączonym skryptem, a następnie sami uruchamiamy ich poprawki przeciwko DEV, aby je z powrotem scalić. Nie jestem zadowolony z tego rozwiązania. Oprócz szybszej pracy w celu uzyskania dedykowanego środowiska, czy są to inne sposoby na automatyczne uruchamianie tej pętli?


title: Jakieś sugestie dotyczące programowania w parach z zewnętrznym zasobem?

text: Jestem inżynierem oprogramowania zajmującym się niektórymi projektami pozalekcyjnymi poza moim głównym koncertem. Rozważałem zatrudnienie programisty na Elance do pomocy. Idealnie byłoby, gdybyśmy byli zespołem współpracującym, w którym mógłbym przejrzeć ich kod, a nasze „dni” pokrywałyby się o kilka godzin. W idealnym przypadku, gdy ten dzień osób dobiegnie końca, mógłbym zrobić przegląd kodu, a następnie wystartować tam, gdzie skończyli. Czy ktoś próbował tego? Czy byłoby praktyczne użycie do tego celu serwera Rackspace Cloud Server, w którym po zakończeniu przez jednego programistę po prostu zapisywał obraz maszyny wirtualnej, który byłby dostępny dla innego programisty? Naszym środowiskiem programistycznym będzie ASP.NET 4.0 MVC 3.


title: Architektura aplikacji PyQt

text: Próbuję nadać strukturę dźwięku do aplikacji PyQt, która implementuje grę karcianą. Do tej pory mam następujące klasy: * Ui_Game: oczywiście opisuje ui i odpowiada za reagowanie na zdarzenia emitowane przez moje instancje CardWidget * MainController: odpowiada za zarządzanie całą aplikacją: setup i wszystkie kolejne stany aplikacji (jak rozpoczęcie nowego rozdania, wyświetlenie powiadomienia o zmianach stanu w interfejsie użytkownika lub zakończenie gry) * GameEngine: jest to zestaw klas implementujących całą logikę gry. : class CardWidget(QtGui.QLabel): def __init__(self, nazwapliku, *args, **kwargs): QtGui.QLabel.__init__(self, *args, **kwargs) self.setPixmap(QtGui.QPixmap(':/ res/res/' + nazwa pliku)) def mouseReleaseEvent(self, ev): self.emit(QtCore.SIGNAL('card_clicked'), self) class Ui_Game(QtGui.QWidget): def __init__(self, window, *args, **kwargs): QtGui.QWidget.__init__(self, *args, **kwargs) self.setupUi(window) self.controller = Brak def place_card(self, card): cards_on_table = self.played_cards.count() + 1 print cards_on_table if cards_on_table <= 2: self.played_cards.addWidget (karta) if cards_on_table == 2: self.controller.play_hand() class MainController(object): def __init__(self): self.app = QtGui.QApplication(sys.argv) self.window = QtGui.QMainWindow() self .ui = Ui_Game(self.window) self.ui.controller = self self.game_setup() Czy istnieje lepszy sposób niż wstrzyknięcie kontrolera do klasy Ui_Game w Ui_Game.controller? A może jestem całkowicie off-road?


title: Czy można dołączyć moduł open source innej osoby do projektu, który przesyłasz do GitHub?

text: Wygląda na to, że byłoby to oczywiste „tak”. Jednak chcę się upewnić i próbowałem googlować bezskutecznie. Uczę się Pythona/Django i przesyłam wszystkie projekty, które tworzę do GitHub. Zaczynam dodawać istniejące moduły z innych projektów open-source, które nie należą do mnie. Czy nadal można przesyłać MOJE projekty na GitHub, mimo że zawierają one również moduły open source innych osób? Czy powinienem udzielić im kredytu w README, czy komentując, gdzie znajduje się ich kod? Dziękuję.


title: Jak ocenić zadanie .NET?

text: Od kilku lat jestem programistą i do tej pory pracowałem wyłącznie z PHP, choć stworzyłem kilka małych projektów pobocznych w innych językach. Obecnie przeprowadzam rozmowę kwalifikacyjną z osobą spoza branży IT, która opiera się głównie na .NET i wydaje się, że chcą mnie zatrudnić. Prawdopodobnie powinienem był pomyśleć o tym wcześniej, ale bez doświadczenia komercyjnego w .NET, jakie pytania powinienem zadać, aby upewnić się, że ta praca pomoże mi poszerzyć moją wiedzę na temat platformy .NET lub czy robią .NET we właściwy sposób (biblioteki, frameworki, narzędzia innych firm itp.)?


title: Czy C++ może być używany jako język programowania WWW po stronie serwera?

text: Chciałbym dostać się do tworzenia stron internetowych przy użyciu C++ jako "języka skryptowego" po stronie serwera. Moja infrastruktura serwerowa jest oparta na *nix, więc tworzenie stron internetowych w C++ na platformie Azure nie ma zastosowania, a C++/CLI ASP.NET również nie ma zastosowania. Niezależnie od starszych aplikacji CGI, czy tworzenie stron internetowych można wykonywać przy użyciu C++? Dzięki, Scott


title: Czy można łączyć C/C++ z językami webowymi?

text: Chciałbym stworzyć aplikację internetową (co oznacza, że będzie uruchamiana z przeglądarki). Chodzi o to, że chcę napisać sam interfejs użytkownika w HTML5 + CSS + JS (a może nawet trochę PHP). Z drugiej strony chcę napisać funkcjonalność aplikacji w C lub C++. Następnie chcę połączyć kod dotyczący interfejsu użytkownika i funkcjonalności. Dlatego chciałbym zapytać, czy można połączyć kod C/C++ z webowymi językami znaczników/programowania?


title: Funkcje składowe a funkcje nieczłonowe dla operatorów matematycznych

text: Piszę bibliotekę algebry liniowej (w skrócie, to zadanie szkolne), która zawiera macierze, wektory itp. W procesie tworzenia tej biblioteki będę tworzyć funkcje, które wykonują operacje matematyczne na obiektach. Na przykład transpozycja macierz, odwrócona macierz, normalizacja wektora itp. Byłem ciekawy, jaka jest "najlepsza praktyka" dla tego rodzaju funkcji ... To znaczy, czy powinienem uczynić funkcję funkcją członkowską, czy nieczłonową ? (Dla jasności/użycia biblioteki) Przykład: //Member function Sposób: B = A.transpose(); C = A.odwrotność(); //Nie-członkowa funkcja sposób: B = linalg::transpose(A); //Non-member transpozycja funkcji w przestrzeni nazw algebry liniowej C = linalg::inverse(A); Czy istnieje jakiś standard dotyczący tego rodzaju operacji? A przynajmniej czy istnieje wspólny sposób, w jaki ludzie to robią? Skłaniam się ku pierwszej opcji, ale chciałbym wiedzieć, czy jest to zalecane.


title: Wytyczasz granicę między modelami a bibliotekami?

text: Wraz ze wzrostem rozmiaru moich aplikacji internetowych rośnie złożoność. Aby moje klasy i pliki były uporządkowane i łatwo dostępne, zaczynam się coraz bardziej mylić: w mojej aplikacji mam kilka bardzo jasno zdefiniowanych obiektów danych - `zamówienia`, `faktury`, `produkty` dla przykład. Wszystkie z nich mają własny obiekt encji, który obsługuje egzekwowanie wartości i czystą logikę biznesową wraz z modelem, który obsługuje przechowywanie każdego obiektu w wybranym przeze mnie trwałym magazynie danych (baza danych). Ok - do tej pory wszystko jasne i rozdzielone. Ale co z obiektem o dużej logice, takim jak „użytkownicy”? Użytkownicy logują się i wylogowują, zmieniają hasło (wszystko, co oznacza - hashowanie, szyfrowanie i tak dalej) i wykonują wiele interakcji zarówno w bazie danych, jak i sesjach. Obecnie używam klasy `Authentication`, biblioteki, która zawiera wszystkie wymienione akcje i wiele więcej. Wykonuje swoją pracę, ale jest dla mnie trochę niejasne **co powinienem umieścić w modelu, a co powinno być biblioteką**?


title: Czy powinienem organizować foldery według domeny biznesowej czy technicznej?

text: Na przykład, jeśli używam architektury podobnej do MVC, jakiej struktury folderów powinienem użyć: domena1/ widok modelu kontrolera domena2/ widok modelu kontrolera lub: kontrolery/domena1 modele domeny2/domena1 domena2 widoki/domena1 domena2 Celowo pominąłem plik Rozszerzenia, aby zachować to pytanie niezależne od języka. Osobiście wolałbym rozdzielać według domeny biznesowej (intuicja), ale widzę, że większość/wiele frameworków rozdziela się według domeny technicznej. Dlaczego miałbym wybrać jedno, a nie drugie?


title: Jak opisać lub zmierzyć krzywą uczenia się nowej technologii?

text: Kiedy zaczynam uczyć się kilku ważnych nowych rzeczy, zaczynając od zera, zastanawiam się: czy jest jakiś sposób na opisanie, a może nawet określenie ilościowe, wysokości krzywej uczenia się? Pracując w wielu miejscach przy wielu projektach i przez połowę czasu nie pasują do siebie, widzę, że wszyscy potrzebujemy lepszych sposobów opisywania poziomów umiejętności i umiejętności potrzebnych do projektu. Na potrzeby tego pytania interesuje mnie opisanie stopnia wzrostu umiejętności/wiedzy/świadomości, aby ktoś był skuteczny w danym projekcie, pozostając u tego samego pracodawcy lub ogólnie w tej samej sytuacji. Przykład: Właściciel przychodzi do mnie i mówi: „Hej, ta nowa rzecz, to kluczowa technologia dla naszego następnego dużego projektu. Nikt tutaj nie wie o tym zbyt wiele. Ile czasu zajmie ci nauczenie się tego?” (Przy okazji, chcę brać pod uwagę tylko kompetentnych ludzi. Żadnych PHB ani fanboyów błyskotliwych nowych rzeczy. Te mylące czynniki są ważne w prawdziwym życiu, ale są drugorzędne w stosunku do głównego punktu tutaj.) Luźne względne słowa, takie jak „stromy”, „łatwy” itp. niewiele znaczy. Osoba ucząca się nowej rzeczy i jej menedżer mogą mieć różne oczekiwania. Chciałbym znaleźć coś bardziej obiektywnego, nawet jeśli nie idealnego. W jakimś magicznie idealnym świecie moglibyśmy powiedzieć „nauczenie C++, do poziomu umiejętności (x), w tym wszystkich OO, STL i (bla-bla) zestawu wzorców projektowych, zajmuje (n) godzin”. Godziny można wykorzystać do oznaczania kalendarzy, przypisywania członków zespołu i ogólnie dobrego planowania. Ale oczywiście wszyscy mamy różne style myślenia, różne doświadczenia z przeszłości, różne IQ, różne poziomy pasji do poznawania lub używania nowej rzeczy. A potem, czy chcesz to zaprojektować, naprawić, czy po prostu z niego skorzystać? Godziny mogą nie być przydatne, nawet gdyby istniała jakaś formuła uwzględniająca wszystkie te czynniki. Osobiście uczę się nowych pomysłów w elektronice lub fotografii około 3 do 10 razy szybciej niż nowych pomysłów w oprogramowaniu, ale nie wiem, czy porównuję nowe pomysły o tej samej „wielkości”. (I nie jestem pewien, w jakim sensie mam na myśli „szybciej”; niekoniecznie godzinami czy dniami). Po części zastanawiam się nad „rozmiarem” wiedzy, jaki jest potrzebny, aby stać się kompetentnym lub opanować nowy technologia. Istnieje ogólna zasada, że opanowanie czegoś zajmuje 10 000 godzin. Może po to, by zostać znakomitym flecistą w symfonii, albo by zostać najlepszym pilotem helikoptera, ale oczywiście można opanować wiązanie ich występów w znacznie krótszym czasie. Wiązanie butów to "mała" umiejętność, inne są warte pełnoetatowej kariery. Może pewnego dnia, dzięki przyszłym odkryciom w psychologii, neuronauce i teorii edukacji, można by powiedzieć coś w stylu: „potrzeba (n) miliona umysłowych kwantów myślowych, aby się nauczyć (nowej rzeczy), biorąc pod uwagę, że znasz już x, y i z i masz naturalny talent za grokking (temat)." Istnieje też praktyczna zasada, że średnio milion kwantów myślowych odpowiada tylu minutom lub godzinom, przy czym niektórzy z nas są szybsi lub wolniejsi, dotknięci stresem, zdrowiem i inną pracą. Tak. Ładne science fiction, ale dziś nieprzydatne do decydowania, czy zaakceptować projekt, którego kandydata zatrudnić, czy zmiany kariery. Co możemy dziś zrobić, aby opisać stromość krzywej uczenia się, a raczej wysokość wzgórza, na które się wspinamy, mówiąc metaforycznie? Co jest lepsze niż niejasne subiektywne uogólnienia?


title: Czy można dostać pracę w korporacyjnych software house'ach bez dyplomu?

text: Od dwóch lat zajmuję się tworzeniem aplikacji internetowych w PHP i pracowałem z trzema organizacjami. Zaczynałem bez żadnej wiedzy programistycznej, interesowałem się tworzeniem stron internetowych, więc czytałem kilka książek, śledziłem samouczki i spotykałem się z programistami internetowymi, aby nauczyć się tworzyć strony internetowe, które zaprowadziły mnie do PHP, a następnie do programowania i naprawdę mi się to podobało . Nauka OOP, badanie zachowań serwerów, robienie niesamowitych rzeczy z JS, praca i zrozumienie z frameworkami takimi jak Zend i Yii było dla mnie nie lada przeżyciem. Moje ideały również zmieniły się z gwiazd filmowych na osoby takie jak Dennis Ritchie i Matt Mullenweg. Zajęło mi trochę czasu, zanim dostałem pracę, kiedy moje pierwsze rzeczy stały się dość łatwe, ale jedną z rzeczy, na które natknąłem się podczas pracy w małych firmach programistycznych, jest to, że tak naprawdę nie martwią się o kod, wszystko, czego chcą, to zdobyć to wykonane w dowolny sposób, aby mogli dostarczyć projekt na czas swoim klientom. To naprawdę niepokojące. Zamieniłem dwie organizacje tylko po to, by przodować w programowaniu i wnosić największy wkład w dziedzinie IT, ale wydaje się to niemożliwe, jeśli będę kontynuował pracę w organizacjach, które są bardzo skoncentrowane na kliencie i nie t zawracać sobie głowę kompromisami w zakresie jakości kodu. Moimi wymarzonymi firmami są wordpress i organizacje, które opracowały open source'owe frameworki PHP, takie jak zend, yii itp. Dlaczego? ponieważ są NIESAMOWITE i właśnie dzięki ich wkładowi sieć stała się tak niesamowita, a szybki rozwój jest w zasięgu każdego programisty, ale nie jestem pewien, czy będę w stanie uzyskać szansę w takich firmach, czy nie, ponieważ nie mam stopnia nie dlatego, że nigdy nie chciałem, ale dlatego, że nigdy nie miałem wyboru. Byłem sam od nastolatki i nie było mnie stać na edukację, a teraz, gdy mam zasoby, brakuje mi czasu i skupienia. Mam pracę na pełen etat, bloga i pewne obowiązki. Czy kiedykolwiek będzie można pracować w moich firmach marzeń lub podobnych do moich firm marzeń?


title: Czy rozwój oparty na testach zmusza mnie do podążania za SOLID?

text: Dużo słyszę od praktyków TDD, że jedną z zalet TDD jest to, że zmusza programistów do przestrzegania zasad SOLID (pojedyncza odpowiedzialność, otwarte-zamknięte, substytucja Liskov, segregacja interfejsów i inwersja zależności). Ale jak dla mnie wystarczy napisać kilka testów (przede wszystkim test jednostkowy), aby zrozumieć, że ważne jest przestrzeganie SOLID (a tym samym tworzenie testowalnej architektury). Czy TDD zmusza programistów do bardziej aktywnego śledzenia SOLID niż tylko pisania testów jednostkowych?


title: Czy blokowanie apletów Java jest niezbędnym środkiem bezpieczeństwa?

text: Chrome 11 prosi teraz użytkownika o pozwolenie na uruchamianie zarówno podpisanych, jak i niepodpisanych apletów (tak, w przypadku podpisanych apletów użytkownik jest pytany dwukrotnie). Zespół Chromium uznał, że ten środek jest potrzebny nawet wtedy, gdy użytkownik korzysta z aktualnego środowiska JRE. Oto mój raport o błędzie (który odzwierciedla wyłącznie moją opinię: http://code.google.com/p/chromium/issues/detail?id=84001). Moje pytanie brzmi, jak to widzicie? Czy Java Sandbox jest przestarzała i niebezpieczna? Czy przeglądarki muszą domyślnie nakładać drugą warstwę ochrony? **Aktualizacja:** ciekawi mnie też, ilu z was ma doświadczenie w korzystaniu z Javy w porównaniu z liczbą trafień złośliwego oprogramowania? Jako użytkownik Java Power User przez ponad 10 lat, mój program antywirusowy narzekał na coś związanego z Javą tylko wtedy, gdy był fałszywie pozytywny (pobierałem kilka bibliotek z repozytorium Maven Central).


title: Dlaczego natywnego kodu maszynowego nie można łatwo zdekompilować?

text: W przypadku języków maszyn wirtualnych opartych na kodzie bajtowym, takich jak Java, VB.NET, C#, ActionScript 3.0 itp., czasami słyszysz o tym, jak łatwo jest po prostu pobrać jakiś dekompilator z Internetu, przepuścić przez niego kod bajtowy w odpowiednim momencie i często wymyśl coś niezbyt odległego od oryginalnego kodu źródłowego w ciągu kilku sekund. Podobno ten rodzaj języka jest na to szczególnie podatny. Ostatnio zacząłem się zastanawiać, dlaczego nie słyszysz więcej na ten temat dotyczący natywnego kodu binarnego, skoro przynajmniej wiesz, w jakim języku został napisany (a więc w jakim języku próbować dekompilować). Przez długi czas myślałem, że to tylko dlatego, że natywny język maszynowy jest o wiele bardziej szalony i bardziej złożony niż typowy kod bajtowy. Ale jak wygląda kod bajtowy? Wygląda to tak: 1000: 2A 40 F0 14 1001: 2A 50 F1 27 1002: 4F 00 F0 F1 1003: C9 00 00 F2 A jak wygląda natywny kod maszynowy (w hex)? Wygląda to oczywiście tak: 1000: 2A 40 F0 14 1001: 2A 50 F1 27 1002: 4F 00 F0 F1 1003: C9 00 00 F2 A instrukcje pochodzą z nieco podobnego nastawienia: 1000: mov EAX, 20 1001: mov EBX, loc1 1002: mul EAX, EBX 1003: push ECX Tak więc, biorąc pod uwagę język, w którym próbujemy zdekompilować jakiś natywny plik binarny do, powiedzmy, C++, co jest w tym takiego trudnego? Jedyne dwa pomysły, które od razu przychodzą do głowy, to 1) naprawdę jest to o wiele bardziej skomplikowane niż kod bajtowy, lub 2) coś o tym, że systemy operacyjne mają tendencję do stronicowania programów i rozpraszania ich fragmentów, co powoduje zbyt wiele problemów. Jeśli jedna z tych możliwości jest poprawna, proszę wyjaśnić. Ale tak czy inaczej, dlaczego w zasadzie nigdy o tym nie słyszysz? **UWAGA** Zaraz przyjmę jedną z odpowiedzi, ale najpierw chcę o czymś wspomnieć. Prawie wszyscy odwołują się do faktu, że różne fragmenty oryginalnego kodu źródłowego mogą być mapowane na ten sam kod maszynowy; nazwy zmiennych lokalnych są stracone, nie wiesz, jaki typ pętli był pierwotnie używany, itp. Jednak przykłady takie jak te dwa, które właśnie wymieniłem, są w moich oczach trochę trywialne. Niektóre odpowiedzi skłaniają się jednak do stwierdzenia, że różnica między kodem maszynowym a oryginalnym źródłem jest znacznie większa niż coś tak trywialnego. Ale na przykład, jeśli chodzi o takie rzeczy, jak nazwy zmiennych lokalnych i typy pętli, kod bajtowy również traci te informacje (przynajmniej w przypadku ActionScript 3.0). Wcześniej ściągałem te rzeczy z powrotem przez dekompilator i nie obchodziło mnie, czy zmienna nazywa się `strMyLocalString:String` czy `loc1`. Wciąż mogłem patrzeć w ten mały, lokalny teleskop i zobaczyć, jak jest używany bez większych problemów. A pętla `for` jest prawie dokładnie taka sama jak pętla `while`, jeśli się nad tym zastanowić. Nawet gdy uruchomiłbym źródło przez irrFuscator (który, w przeciwieństwie do secureSWF, nie robi nic więcej niż tylko losowanie nazw zmiennych składowych i funkcji), nadal wyglądało na to, że możesz po prostu zacząć izolować pewne zmienne i funkcje w mniejszych klasach, rysunek Dowiedz się, jak są używane, przypisz im własne nazwy i pracuj z tego miejsca. Aby to była wielka sprawa, kod maszynowy musiałby stracić o wiele więcej informacji niż to, a niektóre odpowiedzi dotyczą tego.


title: Jak programista powinien zaplanować swoje życie na przyszłość?

text: Od 3 lat zajmuję się tworzeniem stron internetowych w php/joomla/jquery/mysql. Uczę się teraz python/django/sysadmin/j2ee tylko po to, aby poszerzyć swoją wiedzę. Mam 28 lat i mogę znaleźć pracę, ale myślałem, że jeśli przekroczę 40 czy 45 lat, to jest szansa, że firmy będą szukać młodszych ludzi, bo zawsze można znaleźć młodych ludzi o podobnych umiejętnościach, jak nie doświadczeniu. Zastanawiałem się więc, czy muszę zachować tę samą rolę, co web developer, czy też muszę szukać ścieżki kariery, w której wiek nie ma znaczenia, a doświadczenie jest kluczem. Mam krewnego, który przez 15 lat pracował jako programista, a teraz ma 38 lat. Został rekruterem dla agencji, która dostarcza kandydatów IT do innych firm. Myślę, że taka pozycja nie jest związana z wiekiem. Mogę się mylić. Inną opcją, o której myślałem, jest pamiętanie, że zanim osiągnę 40 lub więcej lat, powinienem mieć wystarczająco dużo kontaktów z klientami, abym mógł uzyskać wystarczającą ilość pracy jako freelancer, aby zarobić na życie. Bo wtedy nie muszę być na łasce pracy, a wiek nie będzie miał znaczenia. Więc chcę tylko wiedzieć: jako programista jaka będzie przyszłość po 40 czy 50? Ponieważ jeśli mamy taki cel, potrzebujemy co najmniej 10-15 lat, aby dojść do tego punktu.


title: Czy używanie adresu e-mail do logowania to dobry pomysł?

text: Wiele razy muszę zalogować się na stronę, z której korzystałem kilka miesięcy temu i zapomniałem hasła. Klikając link resetowania hasła, witryna wyśle mi wiadomość e-mail z linkiem jednorazowego użytku, który pozwala mi wprowadzić nowe hasło i zalogować mnie. Szczęśliwe dni. To dało mi do myślenia; Może pominiemy całe hasło i po prostu wyślemy link jednorazowego użytku w e-mailu, który klikam, który loguje mnie do sesji trwającej miesiąc. Więc powiedz mi. Dlaczego to nie działa?


title: Jakie są wady korzystania z AuthorizeAttribute w ten sposób w MVC?

text: Mam kod projektu ASP.Net MVC z autoryzacją niestandardową, jak poniżej: public class UpdateAccrualAuthorize: AuthorizeAttribute { public override void OnAuthorization(AuthorizationContext authContext) { AccessPermissions securityObject = AppContext.CurrentUser.Permissions; if (!securityObject.HasCostPageAccrualChangesAccess) { authContext.Result = new RedirectToRouteResult( new RouteValueDictionary(new { controller = Constants.HeaderPage.ErrorController, action = Constants.HeaderPage.AccessDeniedAction })); } } } Tutaj logika przekierowania jest wewnątrz logiki autoryzacji Następnie odniosłem się do zmiany mojej klasy filtra akcji jako atrybutu autoryzacji niestandardowej. Tutaj mówi się o innym podejściu, jeśli (!authorized) base.HandleUnauthorizedRequest(filterContext); i wprowadzić wpis konfiguracji <system.webServer> <httpErrors errorMode="Custom" existingResponse="Replace"> <remove statusCode="403" subStatusCode="-1" /> <error statusCode="403" path="/error /403" responseMode="ExecuteURL" /> </httpErrors> </system.webServer> i zarejestruj trasę routes.Add("Error", new Route("error/{statusCode}", new { controller = "Błąd" , akcja = "Szczegóły" }) ); Aktualizacja Czytam również niestandardowy mechanizm Asp.net Mvc do obsługi nieautoryzowanych żądań dotyczących obsługi żądań ajax w AuthorizeAttribute **PYTANIE** Jakie są zalety tego nowego podejścia w porównaniu z moim podejściem?


title: debugowanie aplikacji internetowych za pomocą parametru debugowania

text: Członek zespołu zasugerował pozostawienie całego kodu debugowania na naszych stronach internetowych w stanie nienaruszonym... a następnie utworzenie zmiennej, którą można włączyć / wyłączyć, aby włączyć / wyłączyć debugowanie. Jest to technika, której używamy w niektórych naszych niskopoziomowych, nieinternetowych kodach. Zastanawiasz się tylko, czy ktoś miał jakieś uwagi na temat tego, jak zaimplementował coś podobnego dla aplikacji internetowych? Niektóre z naszych aplikacji internetowych są napisane w języku lua, a inne w PHP. Podoba mi się ten pomysł i widziałem go w różnego rodzaju rozwiązaniach. Jednak moja odruchowa reakcja jest taka, że w przypadku aplikacji internetowych może to nie być taki świetny pomysł. Nie chcę mieć tony logów generowanych na serwerze WWW. Jednocześnie fajnie byłoby po prostu włączyć zmienną, a następnie zacząć zbierać informacje. Alternatywą może być posiadanie zawsze strony testowej, która wywołuje te same metody, co strona produkcyjna, ale strona testowa zrzuca na ekran mnóstwo danych. Zastanawiam się tylko, czy ktoś ma jakieś doświadczenie / komentarze na temat robienia tego dla sieci, jeśli chodzi o to, jak to wbudować, jak trudno jest utrzymać itp. Dzięki.