title: Jak wyglądałoby życie rynkowe struktury oprogramowania opartej na JVM?

text: Widziałem, jak Struts 1 trwał od 2000 do 2013 roku. Słyszałem, że ludzie przenoszą się ze Struts 2 do Spring. Ale w przypadku projektu, który może wymagać utrzymania przez dekadę lub dwie, czy byłoby wskazane wybrać framework lub bezpośrednio kodować za pomocą `serwletów` i `jquery`? Czy architekturę systemu można naprawdę zaprojektować, mając na uwadze konkretną strukturę? **Jaka jest naprawdę żywotność rynkowa frameworka? Czy twórcy frameworka tworzą go z założeniem, że za dekadę stanie się przestarzały?**


title: Wskaźniki referencji a dereferencji w argumentach C++/C

text: OK, borykam się z tym cały czas w wielu funkcjach, które piszę, których powinienem użyć? void sth(int* a) void sth(int& a) Który z nich jest szybszy w dwóch osobnych przypadkach: a jest małą zmienną lub a jest dużą strukturą danych. Chciałbym uzyskać szczegółowe odpowiedzi dotyczące rzeczywistego procesu sprzętowego i stosu.


title: Jakie jest najlepsze miejsce, w którym programista ze szkoły średniej może zwrócić uwagę na swoją pracę?

text: Jestem 16-letnią uczennicą liceum, z zamiłowaniem do programowania komputerowego. Jestem w 11 klasie i uczę się tego w ramach programu szkolnego od około 8 miesięcy. Wyszedłem poza to, czego uczy się w szkole, i złożyłem kilka (dość dobrych) aplikacji. Język, w którym programuję to C++ na platformie Windows. W końcu chciałbym studiować CS na dobrej uczelni, a potem pracować jako programista. Konkretne pytania, które mam to: * Jakie jest dla mnie dobre miejsce, aby moja praca została zauważona? * Czy są jakieś czasopisma lub publikacje przeznaczone specjalnie dla młodych programistów? * Jeśli nie publikacje, to czy są jakieś dobre blogi, czy po prostu lepiej założyć własny? * Czy jest coś jeszcze, co pomogłoby mi zostać zauważonym jako programista? Starałem się być jak najbardziej obiektywny. Gdyby to wszystko było tl;dr: Jaki jest najlepszy sposób, aby zostać zauważonym jako młody programista? Edycja: Nie chcę zostać zatrudniony zaraz po ukończeniu szkoły średniej Celem nie jest zaimponowanie społeczności jako profesjonalny programista. Jest to ukierunkowane na aplikacje na studia, w których oglądanie i krytyka Twojej pracy przez inne osoby poprawi Twoją aplikację. Nie chcę zarabiać na tym, co napisałem (do tej pory).


title: Skąd można mieć pewność, że kontrowersyjna zmiana wprowadzona w oprogramowaniu jest naprawdę najlepsza dla użytkowników?

text: **Tło:** niedawno wprowadziliśmy istotną zmianę w interfejsie użytkownika naszego oprogramowania. Wszystkie poprzednie wersje używały interfejsu MDI (okna unoszące się wewnątrz okna nadrzędnego). Nowa wersja używa zadokowanego interfejsu (okna przyciągają się obok siebie, wypełniają całą dostępną przestrzeń i mogą być nakładane na siebie przeciągnięty na inny ekran.) Pomyśleliśmy – i nadal myślimy – że to wielka poprawa. Jednak opinie naszych testerów wersji alfa są bardzo zróżnicowane. Jedni go uwielbiają, inni twierdzą, że trudno im go używać i chcą korzystać ze starego systemu. Wielu naszych użytkowników korzysta z oprogramowania od ponad dekady i są bardzo przyzwyczajeni do jego starego zachowania interfejsu użytkownika. **Sytuacja ogólna:** Jestem pewien, że inne software house’y napotkały podobne problemy, tj. myślę, że jest to problem mający szerokie zastosowanie, z którym prawdopodobnie wszyscy spotkamy się w pewnym momencie: wprowadzasz zmianę (zwłaszcza znaczącą zmianę), o której myślisz przyniesie wiele korzyści użytkownikom Twojego oprogramowania i nie zdobędziesz powszechnego uznania. * Skąd możesz mieć pewność, że Twoja zmiana naprawdę jest lepsza _dla użytkownika_ , a nie tylko zmiana, którą akurat lubisz? * Z mojego doświadczenia wynika, że zmiana jest zwykle bardziej lubiana, gdy jest dobrowolna lub poszukiwana, a nie wymuszona. Jak zarażasz swoich użytkowników, aby było to dobrowolne? Czy powinieneś w ogóle spróbować? Jak radzisz sobie w tej sytuacji? _Otagowałem to pytanie 'delphi', ponieważ istnieje interesująca konkretna paralela: mniej więcej dekadę temu IDE Delphi i C++Builder (którego używamy!) zmieniło się z pływających okien na zadokowany interfejs użytkownika - dokładnie tak samo jak my. Mała, bardzo głośna grupa ludzi głośno narzekała, a niektórzy to robią do dziś. O ile wiem, większość uważa, że była to wielka zmiana. Jeśli zdarzy się, że czytają pracownicy Borland / Embarcadero, którzy mają ochotę wtrącić się w historyczną opowieść, bardzo chciałbym usłyszeć Twój wkład!_


title: Kiedy przymus typu jest dobrym pomysłem?

text: Kiedy chcesz (celowo) wymusić pisanie w JavaScript? To znaczy, poza porównywaniem ciągów i liczb, kiedy przydaje się coś, co budujesz? Przykłady wymuszania typu: „Odpowiedź to „ + 42 //=> „Odpowiedź to 42” „37” - 7 //=> 30 „37” + 7 //=> „377” var foo = [0] ; console.log(foo == foo); //=> true console.log(foo == !foo); //=> prawda


title: Kiedy aplikacje są preferowanym kontekstem w sieci?

text: Z mojego doświadczenia wynika, że teraz widzimy więcej dyskusji o aplikacjach niż tylko dyskusję o stronach internetowych, która była wcześniej. Czy sie zgadzasz? Kiedy lepiej mówić o aplikacjach w porównaniu do sieci i stron internetowych? Ogólnie rzecz biorąc, jestem bardzo za skłanianiem się ku perspektywie aplikacji, a nie stron internetowych/domen, ponieważ ta ostatnia zależy tak bardzo od nazwy, a nie można zrobić czegoś takiego jak projekt whitelabel jako strona internetowa - to musi być aplikacją. Wydaje mi się więc, że dochodzę do wniosku, że aplikacje są szerszym kontekstem i dlatego są preferowane, szczególnie jeśli projekt jest tworzeniem oprogramowania typu whitelabel, które klient powinien być w stanie wziąć i „markę”, na przykład, na przykład biorąc projekt stackoverflow i banding na nowe forum, co, jak sądzę, działa, gdy otrzymujemy nowe forum.


title: Obsługa „nieokreślonych” wartości w oprogramowaniu

text: Pracuję więc nad oprogramowaniem, w którym mamy wiele pól, które klient może pozostawić puste, a niektóre z nich są numeryczne. Aby zachować je w bazie danych, używamy kolumn dopuszczających wartość null. Bułka z masłem. Zastanawiam się nad użytecznością modelu domeny zorientowanego obiektowo i jedną rzeczą, która mnie wkurza, jest kwestia pól dopuszczających wartość null. Powodem jest to, że w świecie Javy i C# często można znaleźć porady, aby nie mieć wartości null, a pisanie kodu z testami null w każdym miejscu jest do kitu. A potem otrzymujesz wyjątki odwołań o wartości null, gdy zapomnisz sprawdzić wartość null. I jest bałagan. Tak więc „dobrym” podejściem jest inicjalizacja wszystkiego, kiedy to zadeklarujesz. Teraz idea null ma sens dla tych pól… klient nie wprowadził wartości, więc ma wartość „no” (nie 0, nie -1 itd.). Ale programiści aplikacji i języki programowania wydają się być skonfigurowani do logiki binarnej, a nie trójskładnikowej, a także do zmiennych, które po prostu dobrze mają wartość, a nie może mają wartość, ale może też nie. Przy projektowaniu zorientowanym obiektowo, przypuszczam, że można by wymyślić jakiś sprytny system reprezentowania przypadków, w których „nie ma” wartości, ale osobiście nie przeprowadziłem jeszcze analizy i uważam, że stopniowa zmiana lepiej sprzedaje ludziom niż radykalna zmiana tak, więc zaproponowanie zorientowanego obiektowo modelu domeny, który jest „zbyt zorientowany obiektowo”, może zabić ten pomysł, a tym samym moje nadzieje na poprawę struktury naszego oprogramowania. Wolałbym zaproponować model domeny „wersja 0”, który działa i jest łatwy do sprzedania wewnętrznie… więc cała ta sprawa o wartościach zerowych ciąży mi na głowie. Ponieważ używamy C#, mogłem po prostu zdefiniować liczby dopuszczające wartości null, jego bardzo łatwe po prostu dodaje znak zapytania. Ale nie jestem przekonany, że tylko dlatego, że jest to możliwe, to też jest najlepsze podejście. Tak więc, biorąc pod uwagę wszystkie te śmieci w tle, moje pytanie brzmi: jak Ty/Twoja firma poradziliście sobie z „nieistniejącymi” wartościami w zorientowanym obiektowo modelu domeny, w jaki sposób uznaliście to za skuteczne, a na jakie nieskuteczne ? Moje kryteria wyboru „odpowiedzi” będą tymi, które wydają się najbardziej „sprzedawane”, zgodnie z definicją w śmieciach w tle. Ale naprawdę chciałbym zobaczyć, co ludzie wymyślą i dowiedzieć się kilku nowych rzeczy, więc każda odpowiedź z pewną myślą o tym otrzyma ode mnie poparcie. Uwaga: Widziałem inne dyskusje na temat wartości null w innych wątkach, ale nic nie zgadza się z tym, o czym chcę porozmawiać, stąd nowe pytanie. EDYCJA: Zakres mojego pytania obejmuje właściwości wpisane wartościami, takie jak liczby. Tak więc w języku C# jednym ze sposobów umożliwienia reprezentacji ceny zakupu o wartości null byłoby zadeklarowanie "Cena zakupu" jako "dziesiętna?" który jest typem dziesiętnym dopuszczającym wartość null. Po prostu widzę kilka wad liczb (na przykład), które mogą być również puste, więc szukam alternatywy. EDYCJA 2: Wzorzec obiektu zerowego ma sens w przypadku odwołań, a użycie typu dopuszczającego wartość null dla wartości wygląda tak, jakby można go było wykonywać przy łączeniu. To, co przeszkadza mi w łączeniu typów zerowych, to „co, jeśli ktoś zapomni o połączeniu i zostaniemy narażeni na wyjątek zerowego odwołania?”… i przypuszczam, że mógłbym użyć narzędzia do analizy statycznej, które zapewnia, że koalescencja jest używana tam, gdzie oczekiwano rozwiać to zmartwienie. EDYCJA 2 ': W pewnym sensie, jeśli ktoś podjął świadomą decyzję o unieważnieniu pola, dodaje możliwość reprezentowania dodatkowej informacji, która w przeciwnym razie wymagałaby innego pola do reprezentowania go, na przykład wartości logicznej HasValue. Czy to oznacza, że fanatycy „anty-null”, których spotkałem w przeszłości, byli być może niepoprawni, a wymierzone użycie nieważności może w rzeczywistości poprawić projekt?


title: Jak programista samouk może dowiedzieć się więcej o informatyce?

text: Jestem samoukiem programistą iOS (iPhone/iPad), ale nie uczyłem się CS w szkole. Czy są jakieś książki lub strony, które mógłbym przestudiować, które mogłyby ogólnie nauczyć więcej o CS. Na przykład kilka typowych praktyk i jak różne języki współpracują ze sobą itp. Nie potrzebuję pełnych szczegółów, ale po prostu przegląd typowych rzeczy związanych z CS. Wiem, że to szerokie pytanie, ale każda informacja byłaby dobra.


title: Kontrakty IP przyjazne dla open source dla freelancerów

text: Wkraczam po raz pierwszy w świat konsultingu i muszę napisać swoją pierwszą umowę. Jeden problem, jaki mam, dotyczy pracy z otwartym kodem źródłowym i własności intelektualnej. Uwielbiam pracować nad projektami open source, niezależnie od tego, czy jest to istniejący projekt, czy projekt, który zaczynam sam. Pytanie brzmi: jak mogę napisać swoją umowę, aby dostosować się do następujących sytuacji: 1. W trakcie pracy nad projektem klienta chcę udostępnić część kodu źródłową społeczności pod własnym nazwiskiem. 2. W trakcie pracy nad projektem klienta wykorzystuję niektóre z moich istniejących projektów open source i wprowadzam do nich ulepszenia. 3. W trakcie pracy nad projektami klienta wprowadzam ulepszenia w projektach open source stron trzecich i wnoszę je z powrotem. 4. W trakcie pracy nad projektem klienta decydujemy się na open source'ową część kodu pod nazwą klienta. Jakie są tego precedensy, jeśli w ogóle? _Aktualizacja: dodałem pozycję z powyższej listy (pozycja #3)._


title: używanie oprogramowania GNU GPL v2 jako wskaźników do rozwiązania problemu

text: Koduję klasę dostępu szeregowego PHP i pobieram wskaźniki z klasy szeregowej PHP w Google Code (tutaj). Ta klasa jest oparta na PHP 4 i tworzę klasę PHP 5, która zapewnia większą funkcjonalność i jest specyficzna dla niektórych moich wymagań biznesowych. Nie skopiowano żadnego kodu, a kodowanie wykonałem. Czy pisane przeze mnie zajęcia podlegają licencji GPL Google Code, czy mogę wybrać licencję, która moim zdaniem jest odpowiednia? Nie jestem pewien standardu, który stosuje się do licencjonowania, gdy szukasz tylko innej pracy za wskaźniki.


title: Jak ktoś mógłby utrzymać licencję na „nielegalny” kod?

text: Po pierwsze, chcę powiedzieć, że jest to **czysto hipotetyczne** ; to tylko scenariusz, który przyszedł mi do głowy. Nie szukam osobistej porady prawnej, ale raczej staram się ogólnie lepiej zrozumieć licencjonowanie oprogramowania. Załóżmy, że ktoś udostępnia kod open-source związany z botnetem (albo kod do zarażania zombie, kontrolowania zombie, albo oba) na podstawie jakiejś licencji, powiedzmy GPL. Kilka pytań. * Po pierwsze, czy botnety są nielegalne? Nie wiem, czy różni się w zależności od kraju. Pytam, bo jeśli nie, to moje pytanie nie miałoby żadnego sensu. * Czy licencję na oprogramowanie można zastosować do „nielegalnego” oprogramowania? * Jeśli dana osoba zdecyduje się wziąć ten kod i naruszy warunki licencji, czy pierwotny twórca może podjąć działania przeciwko tej osobie? * Nawet gdyby mogli, to czy powinni? Co się stanie, jeśli ktoś otwarcie przyzna, że jest twórcą kodu, który robi nielegalne rzeczy?


title: Poprawa wydajności grepowania nad dużym plikiem

text: Mam FILE_A, który ma ponad 300 000 linii i FILE_B, który ma ponad 30 milionów linii. Stworzyłem skrypt Bash, który grepuje każdą linię w FILE_A nad FILE_B i zapisuje wynik grep do nowego pliku. Cały ten proces zajmuje ponad 5 godzin. Jak mogę poprawić wydajność mojego skryptu? Jako polecenia grep używam `grep -F -m 1`. FILE_A wygląda tak: 123456789 123455321 a FILE_B wygląda tak: 123456789,123456789,730025400149993, 123455321,123455321,730025400126097, Więc w Bash mam pętlę `while`, która wybiera następną linię w FILE_A i przeszukuje ją w FILE_B. Gdy wzorzec zostanie znaleziony w FILE_B, zapisuję go do pliku result.txt. podczas czytania -r linia; do grep -F -m1 $line 30MFplik done < 300Kplik


title: Repozytoria ogólne z kontrolerami DI i kontrolerami intensywnie przetwarzającymi dane

text: Zazwyczaj dużą liczbę parametrów uważam za dzwonek alarmowy, że gdzieś może być problem projektowy. Korzystam z repozytorium ogólnego dla aplikacji ASP.NET i mam kontroler z rosnącą liczbą parametrów. public class GenericRepository<T> : IRepository<T> gdzie T : class { protected DbContext Context { get; ustawić; } protected DbSet<T> DbSet { get; ustawić; } public GenericRepository (kontekst DbContext) { Kontekst = kontekst; DbSet = context.Set<T>(); } ...//metody wyłączone, aby zachować czytelność pytania } Używam kontenera DI do przekazywania w DbContext do repozytorium rodzajowego. Jak dotąd spełniło to moje potrzeby i nie ma innych konkretnych implementacji `IRepository<T>`. Musiałem jednak stworzyć dashboard, który wykorzystuje dane z wielu Encji. Był też formularz zawierający kilka list rozwijanych. Teraz przy użyciu ogólnego repozytorium sprawia to, że wymagania dotyczące parametrów szybko rosną. Kontroler będzie w końcu czymś w rodzaju publicznego HomeController(IRepository<EntityOne> entityOneRepository, IRepository<EntityTwo> entityTwoRepository, IRepository<EntityThree> entityThreeRepository, IRepository<EntityFour> entityFourRepository, ILogError logError, plus ICurrent}Użytkownik ma obecnie kilka innych, aby uwzględnić wymagane dane i opcje listy rozwijanej. Moim zdaniem to za dużo parametrów. Z punktu widzenia wydajności na żądanie przypada tylko 1 DBContext, a kontener DI będzie obsługiwał ten sam DbContext we wszystkich repozytoriach. Z punktu widzenia standardów/czytelności kodu jest to brzydkie. Czy istnieje lepszy sposób na poradzenie sobie z tą sytuacją? Jest to projekt w prawdziwym świecie z ograniczeniami czasowymi w świecie rzeczywistym, więc nie będę się nad nim rozwodził zbyt długo, ale z perspektywy uczenia się dobrze byłoby zobaczyć, jak inni radzą sobie z takimi sytuacjami.


title: rodzaje kodowania w xml

text: Jak działają kodowania? Jakich kodowań można używać w XML? Aby uniknąć błędów kodowania XML podczas korzystania z PHP, słyszałem o kodowaniu znaków: Kodowanie źródłowe: Kodowanie docelowe: Czy mogę wiedzieć, jaka jest różnica między nimi?


title: Jak początkujący programista może zacząć uczyć się i stosować najlepsze praktyki testowania podczas tworzenia oprogramowania?

text: Podczas nauki programowania w PHP było na tyle łatwe, że moje krótkie, jednostronicowe, 20-liniowe skrypty mogłem dodać "kod testowy" bezpośrednio do moich funkcji, aby dowiedzieć się, gdzie jestem lub zbliżyć się do obszaru w kodzie, w którym problem został znaleziony (na przykład "print_r($var)," "var_dump($var)," "print 'jesteś tutaj') wpisz stuff. Teraz, gdy moje bazy kodu są coraz większe w wierszach i wierszach w wielu plikach, przejrzenie i odkomentowanie całego kodu testowego staje się trudne, a następnie wróć i zarekomenduj go ponownie, gdy problem zostanie rozwiązany.Niedawno odkryłem git w zarządzaniu moimi większymi aplikacjami.Zatrzasnąłem gałęzie i Mam gałąź testową i gałąź produkcyjną, między którymi skaczę podczas debugowania.Gałąź testowa ma oczywiście cały mój kod testowy „wydrukuj to lub tamto”.Jednak to nadal nie wydaje się właściwe.W miarę rozwoju kodu, jakie są sposoby testować i debugować? Jakie są najlepsze praktyki testowania i debugowania kodu, gdy aplikacje stają się coraz większe i bardziej złożone? ? Zwrot „testy jednostkowe” przykuwa moją uwagę od czasu do czasu, ale nadal jest mi nieznany. Czy jest to coś, na co powinienem zwracać większą uwagę? Czy duże projekty mają różne podstawy kodu testowego i produkcyjnego i czy system kontroli wersji jest właściwym podejściem do zarządzania nim?


title: Pytanie dotyczące projektowania kodu, cykliczne odwołanie między klasami?

text: Nie mam tutaj kodu, ponieważ jest to bardziej pytanie projektowe (zakładam, że to nadal najlepsze miejsce, aby je zadać). Mam bardzo prosty serwer w javie, który przechowuje mapowanie między pewnymi wartościami i UUID, które mają być używane przez wiele systemów na wielu platformach. Akceptuje połączenie od klienta i tworzy clientSocket, który przechowuje gniazdo i wszystkie inne istotne dane unikalne dla tego połączenia. Każdy clientSocket będzie działał we własnym wątku i będzie blokował gniazdo czekając na odczyt. Spodziewam się bardzo niewielkiego obciążenia tego systemu, rzadko zostanie wywołany, ale kiedy odbierze połączenie, będzie musiał szybko odpowiedzieć, a ze względu na ryzyko, że będzie miał szczyt z wieloma połączeniami przychodzącymi jednocześnie, wątki są nadal lepsze . Każdy wątek ma odniesienie do klasy Mapper, która przechowuje mapowanie UUID, które raportuje innym (oczywiście z odpowiednią synchronizacją). To wszystko działa, dopóki nie muszę dodać nowego UUID do listy. Kiedy tak się stanie, chcę poinformować wszystkich klientów, którym zależy na tym konkretnym UUID, że dodano nowy. Nie mogę multiemisji (ograniczenie systemu, na którym działam), więc każde gniazdo wysyła wiadomość do klienta przez ustanowione gniazdo. Ponieważ jednak każdy wątek wie tylko o gnieździe, na które czeka, nie miałem jasnej metody wyszukiwania każdego wątku/gniazda, który dba o dane, aby poinformować ich o nowym UUID. Odpytywanie jest niedostępne głównie dlatego, że wydaje się zbyt skomplikowane, aby próbować utrzymywać listę nowo dodanych UUID. Moim rozwiązaniem na razie jest posiadanie klasy „rodzica”, która tworzy klasę mapowania i odradza wszystkie wątki, przekazując się jako argument do mapowania. Następnie, gdy program odwzorowujący tworzy nowy UUID, może wywołać klasę nadrzędną, informując ją, aby wysłała aktualizacje do wszystkich innych gniazd, którym zależy na zmianie. Obawiam się, że może to być zły projekt ze względu na użycie odwołania kołowego; parent ma referencję do mappera (aby przekazać ją do nowych wątków ClientSocket), a mapper wskazuje na rodzica. Nie wydaje mi się to złym projektem, ale chciałem to sprawdzić, ponieważ odwołania cykliczne mają być złe. Uwaga: zdaję sobie sprawę, że oznacza to, że wątek powiązany z dowolnym gniazdem, który pierwotnie otrzymał żądanie, które spowodowało utworzenie UUID, pokryje „koszt” wysyłania wszystkim innym klientom, którym zależy na nowym UUID. Nie obchodzi mnie to; jak powiedziałem, podejrzewam, że klient otrzymuje tylko sporadyczne wiadomości. Jest mało prawdopodobne, aby jedno gniazdo otrzymywało wiele wiadomości jednocześnie, a gniazd nie będzie tak wiele, więc wysyłanie wiadomości do każdego z nich nie powinno zająć zbyt dużo czasu. Być może później naprawię fakt, że obciążam się większym obciążeniem pracą na każdym niefortunnym wątku, który otrzyma pierwsze żądanie; ale na razie myślę, że to w porządku.


title: Rejestrowanie nieudanych prób logowania ujawnia hasła

text: Zacząłem rejestrować nieudane próby logowania na mojej stronie z komunikatem typu `Nieudana próba logowania przez qntmfred` Zauważyłem, że niektóre z tych dzienników wyglądają jak `Nieudana próba logowania przez qntmfredmypassword` Zgaduję, że niektórzy mieli nieudane logowanie, ponieważ wpisali swoją nazwę użytkownika i hasło w polu nazwy użytkownika. Hasła są zaszyfrowane w bazie danych, ale jeśli w jakiś sposób baza danych zostanie naruszona, te komunikaty dziennika mogą być sposobem dla atakującego na ustalenie haseł dla niewielkiego odsetka osób, które w końcu mają nieudane logowanie, takie jak ten. Czy istnieje lepszy sposób na poradzenie sobie z tym? Czy w ogóle powinienem się martwić taką możliwością?


title: Czy Twoi menedżerowie wolą tworzyć dowód koncepcji (POC) przed rozpoczęciem pracy nad prototypem?

text: Na ostatnim spotkaniu zespołu usłyszałem od menedżerów, że musimy stworzyć dowód koncepcji (POC) przed głównym prototypem i zintegrować tę koncepcję z głównym systemem w celu udowodnienia nowej funkcji. 1. Czy możesz mi wyjaśnić główne cechy tej metody? 2. Czy wykorzystujesz POC w swoich projektach przed wdrożeniem? 3. Jakie są główne zalety i wady tej metody?


title: Pytanie dotyczące umiejętności Flowgraph

text: Ostatnio przeglądałem pytanie Flow-Graph. Rozważ 8 pól z następującymi wartościami Pole 1 = 2 Pole 2 = 7 Pole 3 = 2 Pole 4 = 1 Pole 5 = 5 Pole 6 = 7 Pole 7 = 1 Pole 8 = 4 Teraz postępuj zgodnie z instrukcjami: 1. Wpisz liczbę z pola 7 do pola 1 2. Dodaj liczby z pola 1 i pola 2 , a wynik wpisz do pola 1. 3. Zmień instrukcję 2, zwiększ liczbę w polu 2 o 1 4. Jeśli drugi numer pola podany w instrukcji 2 jest większy niż liczba w polu 8, stop. Jeśli nie, przejdź do kroku 2. Jaki numer jest teraz w polu 1? Uwaga: Gdy zostaniesz poproszony o umieszczenie numeru w polu, zrozumiałe jest, że numer, który znajdował się wcześniej w tym polu, został właśnie wymazany. Kiedy próbowałem rozwiązać: 1. b[1] = 1 2. b[1] = 1+7 = 8 3. b[b[2]] = b[7]+1 =b[7]=2 4 b[2] > b[8] 7 > 4 : wynik prawdziwy: 8 Ale rozwiązaniem jest 11! jak? Utknąłem. Czy coś źle interpretuję?


title: Udostępnianie bibliotek dll we wdrożeniu oprogramowania

text: Przenosimy nasz projekt oprogramowania z praktycznie automatycznie tworzonego instalatora Visual Studio w Visual Studio 2010 do instalatora WiX. Chciałbym użyć tej zmiany, aby upewnić się, że wszystko jest w porządku. Aplikacja ta jest spółką zależną od głównej aplikacji naszej firmy, która zostanie już zainstalowana w jej własnym folderze. Główna aplikacja ma wiele bibliotek dll, z których część musi się załadować, aby działała. W poprzednim instalatorze wymagane biblioteki dll są pobierane do projektu i umieszczane w folderze instalacyjnym aplikacji pomocniczej. Wydaje się to jednak stwarzać możliwe problemy: * Wiele wersji tej samej biblioteki dll powoduje zamieszanie, zwłaszcza jeśli w przyszłości stworzymy inną aplikację. * W przypadku zmiany wersji głównej aplikacji aktualizacje są pomijane przez aplikację podrzędną. Nie czuję się komfortowo z dodawaniem naszej aplikacji do tego samego folderu, ponieważ są one tworzone i obsługiwane przez różne grupy. Zamiast tego, być może mógłbym dodać ścieżkę głównej aplikacji do zmiennej środowiskowej PATH. Czy to zadziała i czy są z tym związane obawy? Czy istnieje inny sposób podejścia do tego problemu?


title: Czy potrzebne są parametry?

text: Zastanawiam się, czy moje parametry są potrzebne do metod? Oto pseudokod, który obecnie posiadam: klasa Transaction to Must have Date, Payee, Balance Może mieć Deposit, Withdrawal, Check Number, Memo, Cleared class TransactionBuilder to metoda getTransaction() jest wyprowadzana: Transakcja ze wszystkimi poprawnymi funkcjami i wartości Skonstruuj i zwróć metodę transakcji setDate(date) is input: data wykonania transakcji Poinformuj budowniczego o metodzie daty transakcji setPayee(payee) is input: osoba otrzymująca środki z transakcji Poinformuj budowniczego, kim jest odbiorca metoda setDeposit(depositAmt) to wejście: kwota depozytu Poinformuj budowniczego kwotę depozytu metoda setWithdrawal(withdrawalAmt) to wejście: kwota wypłaty Poinformuj budowniczego kwotę wypłaty metody setBalance(balanceAmt) jest wejściowa: ilość saldo Powiedz konstruktorowi kwotę metody salda setClear() to Spraw, aby konstruktor pamiętał, że transakcja została wyczyszczona Metoda banku setCheckNum(checkNum) jest input: numer czeku napisanego Powiedz konstruktorowi numer czeku dla tej metody transakcji setMemo(memo) to input: notatka o transakcji Przekaż kreatorowi notatkę o transakcji


title: Jak zrobić licencję, aby zabronić redystrybucji?

text: Mam scenariusz, który chcę sprzedać. Jest napisany w PHP, ale to chyba nie ma tu znaczenia. Chcę zabezpieczyć swój skrypt licencją, więc kupującemu nie wolno go redystrybuować. Po raz pierwszy sprzedaję własny skrypt, więc nie mam pojęcia, jak zacząć. Proszę o informację, w jaki sposób mogę zabezpieczyć swój skrypt licencją i jakiego rodzaju licencją.


title: Odwołujesz się do sprzętu/oprogramowania w pierwszej osobie?

text: W mojej firmie inżynierowie mają zwyczaj odnoszenia się do swojego sprzętu/oprogramowania/oprogramowania w pierwszej osobie, tak jakby urządzenie, za które są odpowiedzialni, było manifestacją ich samych. Podam ci przykład: > **Inżynier sprzętu:** "Nie otrzymuję pierwszego bajtu, więc trzymam się z dala." > > **Inżynier oprogramowania:** "Wysyłam ci pierwszy bajt po fladze ack, > więc myślałem, że go otrzymujesz." > > **Inżynier sprzętu:** "Nie, nie podniecasz mnie." To właśnie ten przykład, który dzisiaj podsłuchałem, prawie sprawił, że zaczęłam chichotać w napadach. _ „Nie podniecasz mnie”._ Cóż, powinienem mieć nadzieję, że nie! Czy to powszechna praktyka inżynierów, czy po prostu nieprofesjonalne? Jakieś sugestie dotyczące zmiany tego pozornie złego nawyku?


title: Jak dowiedziałeś się o bezpieczeństwie podczas tworzenia stron internetowych?

text: Zajmuję się tworzeniem witryn intranetowych i witryn publicznych bez większych problemów związanych z bezpieczeństwem. Nie było nic do kradzieży i nic do zyskania. Nic, co mogłoby zachęcić ludzi do próby dotarcia do witryny za kulisami. Nie mówię o loginie i haśle, ale o bezpieczeństwie przed atakami użytkowników. Jaki jest więc najlepszy sposób, aby nauczyć się zabezpieczać dostęp do witryny, dowiedzieć się o typowych błędach lub słabościach do przemyślenia? Czy muszę znaleźć framework związany z językiem, którego używam i na nim polegać, czy jest źródło (książka, strona internetowa, ...), gdzie mogę znaleźć informacje na temat ogólnego projektu i trików?


title: Dlaczego powinienem używać Zend_Application?

text: Pracowałem nad aplikacją Zend Framework, która obecnie robi wiele rzeczy poprzez Zend Application i kilka wtyczek do zasobów napisanych dla niej. Jednak patrząc teraz na tę bazę kodu, wydaje mi się, że używanie Zend_Application tylko komplikuje sprawę; a zwykły, bardziej „tradycyjny” plik bootstrap lepiej sprawdziłby się jako przezroczysty. Dzieje się tak tym bardziej, że poszczególne komponenty Zend - Zend_Controller, Zend_Navigation, itp. - w ogóle nie odwołują się do Zend_Application. Dlatego robią takie rzeczy jak „No po prostu zadzwoń do setRoute i ruszaj w drogę”, a użytkownik drapie się po głowie, jak to zaimplementować w pliku konfiguracyjnym application.ini. Nie oznacza to, że nie można dowiedzieć się, co się dzieje, przeszukując kod źródłowy ZF. Mój problem z tym podejściem polega na tym, że łatwo jest polegać na czymś, co jest szczegółem implementacji, a nie kontraktem, i wydaje się, że wszystko, co robi, to dodanie dodatkowej warstwy pośredniej, przez którą trzeba się przebić, aby zrozumieć aplikację. Patrzę na przykładowy kod sprzed ZF 1.8, zanim istniał Zend_Application i wszędzie widzę zwykłe pliki bootstrap, które konfigurują framework MVC i ruszają w drogę. Kod jest jasny i łatwy do zrozumienia, nawet jeśli jest nieco powtarzalny. Podoba mi się koncepcja DRY, którą zapewnia aplikacja, ale szczególnie, gdy zakładam, że pierwsi ludzie patrzący na kod aplikacji w ogóle nie są zaznajomieni z Zend, rozważam zdmuchnięcie jakiejkolwiek zależności, którą mam od Zend_Application i powrót do tradycyjny plik bootstrap. Teraz obawiam się, że nie mam dużego doświadczenia w robieniu tego i nie chcę pozbywać się Zend_Application, jeśli robi coś szczególnie ważnego, o czym nie jestem świadomy lub coś w tym rodzaju. Czy jest naprawdę dobry powód, dla którego powinienem go trzymać?


title: Testowanie wiadomości SOAP

text: Pracuję w Scali/Java. Testuję infrastrukturę przesyłania komunikatów części mojego systemu, którą zrobiłem kilka lat temu za pomocą CXF i Javy. Dokładniej, przepisuję na nowo specyfikację wymiany wiadomości. To dlatego, że zmieniam kilka jego części. W tym czasie nie używałem TDD/BDD. Teraz wyrzucam wszystko z BDD. Właściwie właściciel systemu chce mieć specyfikację stylu BDD, zanim skończę z projektem. I tak uważam to za przydatne. > Szczególnie interesuje mnie napisanie testu end-to-end, w którym chciałbym > sprawdzić, czy serwer poprawnie odczytał wiadomość. >> Opcjonalnie chciałbym wysłać wiadomość i w środku sprawdzić czy to co jest wysyłane jest zgodne i przekazać wiadomość na serwer. (Właściwie uważam, że> że test jednostkowy wysyłania z jednej strony i odbioru z drugiej strony powinien wystarczyć tutaj) Test od końca do końca powinien wyglądać tak: -> Klient przygotowuje wiadomość -> Klient wysyła wiadomość do serwera ->Po odebraniu wiadomości na serwerze zweryfikuj, czy odebrana wiadomość odpowiada oczekiwaniu, że została wysłana. W szczególności sprawdź, czy wynikowy obiekt złożony skonstruowany z nieprzetworzonej wiadomości jest prawidłowy. To samo w sobie powinno wykluczyć kilka testów jednostkowych w środku. Drugie ograniczenie niefunkcjonalne również pomoże w tej sprawie. Problem polega na tym, że opisywany tutaj test end-to-end w rzeczywistości obejmuje napisanie testu z kodem asynchronicznym. Widziałem takie rzeczy jak oczekiwanie lub przyszłość scala, aby sobie z tym poradzić. Jednak część mnie gnębi, to obserwacja nowej wiadomości otrzymanej na serwerze. Czytałem rzeczy o odpytywaniu systemu przez sondę, ale nadal nie mogę znaleźć części sondy. W każdym razie problem polega na tym, że otrzymana wiadomość jest wewnętrzną zmienną serwera, dobrze zahermetyzowaną. Zastanawiam się, jak sobie z tym poradzić? Jakie techniki można tu polecić ??? Do tego muszą istnieć jakieś haki? Czy ktoś ma jakiś pomysł? Serializować obiekt w pliku dziennika :), czyniąc zmienną publicznie dostępną przez jakiś getter? Stworzenie jakiegoś obiektu śladowego dla sprawy. itd.... Byłbym wdzięczny, gdyby ktoś mógł coś zasugerować.


title: Doświadczenie Ajax Checkout oparte na JSON — czy jest bezpieczne?

text: W przypadku mobilnej witryny e-commerce, która jest zgodna z modelem klient-serwer, w którym wszystkie widoki są wywołaniami json-ajax w celu zwrócenia danych z bezpiecznej usługi, czy bezpieczne jest również przekazanie procesu „zamówienie” przez wywołanie ajax? Cała witryna jest prezentowana przez wykonywanie wywołań ajax w formacie json do usługi (która jest kontrolowana). Jeśli usługa zwróci odpowiedzi TYLKO od klienta-serwera (tj. zablokowanie zakresu adresów IP), czy będzie to bezpieczne? Czy są inne względy? **EDYTUJ:** ajax oparty na formacie JSON ma na celu nadanie kontekstu konfiguracji witryny mobilnej. Model klient-serwer jest dokładniejszy, gdzie logika biznesowa/autoryzacja obsługiwana jest za pośrednictwem innego serwera. Ale ponieważ używa JSON-Ajax, wywołania są łatwo odczytywane w javascript (lub przez proxy http dla transakcji). Certyfikat SSL zostanie zainstalowany. Próbuję tylko dowiedzieć się, czy w tej konfiguracji istnieją konkretne luki w zabezpieczeniach, przed którymi należy chronić.


title: Ściganie wersji DirectX

text: Jesteśmy małym i średnim przedsiębiorstwem (~50 programistów), pracującym nad kilkoma aplikacjami DirectX 9. ( _nie_ gry) Zarówno DirectX 10, jak i 11 były gruntownymi przeróbkami interfejsu, podobnie jak prawdopodobnie będzie DX12. Nie dokonaliśmy aktualizacji do żadnego z nich, a ponieważ VS2013 (teraz migrujący) współpracujący z DX9 staje się co najmniej bardzo niewygodny – chociaż DX9 nie jest technicznie przestarzały, MS bardzo aktywnie odpycha od niego deweloperów. Zastanawiam się, jak inne sklepy deweloperskie radzą sobie z niestabilnością interfejsu DX? Czy faktycznie przepisujesz swój silnik graficzny co około 2-3 lata? Czy korzystasz z oprogramowania pośredniczącego innych firm? Zarówno OGRE, jak i Unity wydają się być toną kodu, mają cele projektowe, na których mi nie zależy (na wielu platformach) i nie jestem nawet pewien, czy ich interfejs jest bardziej stabilny. Czy są inne sposoby, których mi brakuje? Ważna uwaga: _Nie tworzymy gier AAA i nie używamy zbytnio wymyślnych shaderów ani potrzeby wyciskania każdego kawałka wydajności z nowoczesnego sprzętu_. Nasze produkty wyświetlają dane głównie w 3D. * * * wydaje się, że potrzebne są pewne wyjaśnienia. Obecny stan rozwoju grafiki jest taki, że MS wydaje całkowicie przebudowany interfejs DX mniej więcej co 2-3 lata. Wygląda na to, że celowo lub nie celują one w duże sklepy z grami (lub nawet: sklepy z silnikami do gier), które z radością poświęciłyby potrzebne zasoby kadrowe na przepisanie silnika grafiki 3D, aby był zgodny z najnowszymi i najlepszymi. Nasz sklep (i podejrzewam, że wiele innych) nie jest taki. Dużo danych prezentujemy w 3D, ale nie korzystamy z egzotycznych shaderów i nie dbamy o najnowsze konsole czy GPU. Przepisywanie naszego silnika renderującego pod kątem nowych funkcji, na których nam nie zależy, nie ma sensu biznesowego – a jednak stare silniki szybko stają się przestarzałe. Deweloper DX z MS pisze: > możliwość obsługi aplikacji Direct3D 9 jest w ogóle zmniejszona w najnowszych wersjach Windows, i to prawdopodobnie będzie kontynuowane A w odniesieniu do D3DX - chociaż nie jest technicznie przestarzały, jest bardzo trudny w obsłudze na VS2013 . Cytat dyplomatyczny MSDN: > Zbadaj alternatywne rozwiązania do pracy z interfejsem API Direct3D. Jestem ciekaw: jak radzą sobie z tym inne sklepy z podobnymi potrzebami 3D? np. jak sobie radzicie w branży CAD?


title: Zalety korzystania z czystego JavaScriptu nad JQuery

text: Jakie są zalety używania tylko JavaScript w porównaniu z używaniem tylko JQuery? Mam ograniczone doświadczenie w kodowaniu JavaScript i JQuery. Dodałem fragmenty każdego z nich do stron HTML, ale głównie kodowałem rzeczy po stronie serwera w innych językach. Zauważyłem, że chociaż teoretycznie można zrobić to samo, używając jednego z dwóch podejść (i oczywiście można je nawet mieszać w tym samym projekcie), wydaje się, że istnieje tendencja, aby zawsze zaczynać używać JQuery od samego początku bez względu na wymagania projektu. Zastanawiam się więc po prostu, czy są jakieś korzyści płynące z nieużywania tylko JQuery, ale zamiast tego, aby używać zwykłego starego JavaScriptu? Wiem, że to nie jest pytanie, ponieważ można powiedzieć o tym, że „nie ma jednoznacznej odpowiedzi” lub „może to być dyskutowane w nieskończoność”, ale tak naprawdę mam nadzieję na punktualne odpowiedzi, takie jak „Możesz to zrobić w jednym podejściem, a drugim nie da się tego zrobić”. * * * Zgodnie z komentarzem scrwtp nie mam na myśli tylko części dotyczącej obsługi DOM. Moje pytanie brzmi raczej: JQuery to biblioteka. Dla JavaScriptu. To, co wydaje mi się dziwne w tej bibliotece, w przeciwieństwie do innych bibliotek dla innych języków, to to, że w przypadku JQyery wydaje się, że jest zaprojektowana tak, aby móc z niej korzystać wyłącznie i nie musi bezpośrednio dotykać Javascript. Jest to w przeciwieństwie do, powiedzmy, Hibernate i SQL, gdzie chociaż biblioteka (a raczej framework w tym przypadku, ale myślę, że analogia nadal ma zastosowanie) przejmuje DUŻO aspektów, nadal możesz używać SQL podczas jego używania , przynajmniej w niektórych marginalnych przypadkach. Jednak w przypadku JQuery i Javascript możesz zrobić wszystko, co robisz z Javascriptem, używając tylko JQuery (a przynajmniej tak mi się wydaje). * * * Zgodnie z komentarzem Stargazer712: tak, zgadzam się z tobą, pytanie brzmi, jak to ująłeś, "tylko kwestia tego, jak będziesz używać JavaScript". Właśnie o to chciałem zapytać, ale zrobiłem kilka kiepskich sformułowań. Oto kolejna analogia: Spring Expression Language. To biblioteka Java. Nie możesz go używać bez Javy, jest oparty na Javie, a mimo to wszystko, co możesz zrobić, aby używać Javy. Ale w praktyce to, co możesz zrobić, to dodać tę bibliotekę do projektu Java, a następnie napisać cały swój kod przy użyciu języka wyrażeń Spring EL, który skutecznie sprawia, że Twój kod w ogóle nie przypomina Javy, a nawet zmienia paradygmat (na przykład nie masz już silne wymuszanie typu podczas korzystania z tego). Chociaż rozumiem, że JQuery to tylko biblioteka JS, wydaje mi się, że w praktyce ma ona taki sam efekt, jak Spring EL w Javie, tj. można używać tylko jego API w całym projekcie i unikać API JavaScript. I zastanawiałem się, czy to dobrze, jakie mogą być pułapki itp. (i tak, po przeczytaniu odpowiedzi wszystkich rozumiem, że: a. moje pytanie jest trochę bezsensowne do pewnego punktu b. nawet jeśli pytanie było całkowicie trafne, odpowiedź byłaby w zasadzie „nie, nie można po prostu używać tylko JQuery przez cały czas)


title: Wzorce projektowe: Wyodrębnij typy instancji do różnych zasobników

text: Mam następującą hierarchię typów: interfejs I: ----+implementy klasy B I ----+implementy klasy C I ----+implementy klasy D I Mam inną klasę `Consumer1`, która obsługuje typy `C` i `D`, ale nie `B` (w różnych metodach) oraz klasa `Consumer2` obsługująca typ `B`. Mam całkowitą kontrolę nad konsumentami `Consumer1` i `Consumer2`, więc mogę wybrać sposób ich implementacji. Teraz, w czasie wykonywania oczekuję, że moi rozmówcy przekażą mi kolekcję „I”, a ja wewnętrznie zdecyduję, czy przekierować je do „Konsument1” czy „Konsument2”. Teraz bardzo złym sposobem nie-OOP jest sprawdzenie `if instanceof` sprawdzania w całym miejscu i bałagan. Jedną z alternatyw jest zarejestrowanie pomocniczej klasy `Map<Class<?>, Class<?>>`, która powinna zawierać `{{B,Consumer2}, {C,Consumer1}, {D,Consumer1}}`. To jest tak samo złe jak poprzednie, ponieważ będę musiał rzucać obiekty po ustaleniu, czy wysłać je do `Konsument1` czy `Konsument2`. Drugą alternatywą jest zastosowanie wzorca `Visitor`, który rozwiąże to dość ładnie, ale zapobiegnie dalszemu rozszerzaniu mojego interfejsu (chyba że zmodyfikuję odwiedzającego). Czy istnieje ładniejsza alternatywa?


title: Czy (1/(1/x)) zawsze jest idealną podróżą w obie strony?

text: Czy poniższe gwarantuje, że zwróci true dla wszystkich liczbowych i niezerowych wartości `x`? bool IsRoundTrip(double x) { double y = 1 / (1 / x); zwróć x == y; } Jakie warunki spowodowałyby rozbieżność?


title: Jak skutecznie programować, gdy proste przetestowanie kodu zajmuje dużo czasu?

text: Mój przepływ pracy zawsze polegał na napisaniu jednego logicznego kroku, a następnie uruchomieniu programu i sprawdzeniu wyników. Ten proces służył mi niesamowicie dobrze do zadań na uniwersytecie. Ponieważ jednak zajmuję się bardziej programowaniem, często zdarza się, że samo kompilowanie i uruchamianie kodu zajmuje od 1 do 2 minut. Przykłady obejmują przesyłanie programu do mikrokontrolera, wymagające interakcji z zewnętrznym serwerem i niezdolne do wdrożenia automatyzacji ze względu na uwierzytelnianie, architekturę oprogramowania lub złożoność. Tego typu zadania są bardzo nieodpowiednie do tego, jak zwykle programuję i mam trudności z efektywnym kodowaniem. Zwykle popełniam wiele błędów składniowych i logicznych, z których większość łatwo wyłapuję testując. Jednak przy tak długim czasie oczekiwania ta metoda jest zbyt czasochłonna.


title: Korzystanie z obrazów stockowych w projekcie open source

text: Zacząłem projekt open source i bardzo chciałbym mieć uroczą i chwytliwą ikonę, którą można by oznaczyć projekt. Moim dylematem jest to, że mam niewielkie lub żadne doświadczenie w projektowaniu grafiki wektorowej do wykorzystania w takim projekcie. Aby to zrekompensować, pomyślałem, że mogę kupić grafikę z jednego z serwisów fotograficznych (shutterstock itp.). Mój projekt tworzy dokumentację HTML z plików językowych Gherkin i moim zamiarem było użycie tej ikony w stopce każdej strony dla "wyjścia wyprodukowanego przez ...". Moje pytanie brzmi, jakie konsekwencje miałoby to dla mojego licencjonowanego oprogramowania, gdybym użył w nim tej grafiki. Oprogramowanie udostępniam na licencji Apache v2.


title: Zmieniliśmy świat klienta – jak sobie z tym radzimy?

text: Jakiś czas temu otrzymaliśmy zadanie polegające na zrealizowaniu projektu polegającego na zastąpieniu starego systemu Mainframe klienta nowym intranetowym rozwiązaniem ASP.NET wykorzystującym SQL Server jako zaplecze. Częścią tego było również przeprojektowanie biznesu – zasadniczo, gdy zmienialiśmy system, mieliśmy myśleć o tym, jak możemy lepiej prowadzić biznes. Tak więc pierwszym zadaniem było wejście i wykonanie logicznych, a następnie fizycznych modeli danych. Klient brał udział w tych dyskusjach i miał kompletny podpis. Kolejnym etapem było zaprojektowanie i zbudowanie każdego modułu. Cóż, krótko mówiąc, programowanie zostało ukończone i teraz przystępujemy do równoległego testowania systemu. Wszystko układa się wspaniale w przypadku większości dotychczasowych modułów - z wyjątkiem jednego. Mamy jeden system, w którym - gdybyś tylko pozwolił użytkownikom biznesowym zobaczyć aplikację i raporty, wszystko byłoby dobrze. Współpracuje z nowym zintegrowanym przepływem pracy i automatyzuje procesy, które wcześniej były wykonywane ręcznie, i działa doskonale zgodnie ze specyfikacjami. Testy równoległe ujawniły jednak kilka problemów z migrowanymi starszymi danymi. Konstruktorzy starego systemu mają bardzo trudności ze zrozumieniem nowego schematu i procesu biznesowego, dlatego też bardzo trudno jest im zrozumieć, jak wziąć starsze dane i umieścić je w nowym schemacie. Z tego powodu zwołują spotkania użytkowników biznesowych i interesariuszy i mówią im, że nowy system nie dostarcza danych, które dostarczał stary system (kiedy tak naprawdę to robi) - to sprawia, że nowy system wygląda źle. To co najmniej frustrujące. Nowy system działa świetnie i zapewnia wszystko, czego potrzebują i chcieli, a gdyby nie niezdolność personelu IT do wypełnienia nowych tabel starymi danymi, użytkownicy biznesowi byliby zadowoleni z nowych funkcji i funkcjonalności. Proszę o sugestie jak sobie z tym poradzić. Z powodu pewnych posunięć politycznych nowy „architekt” nie ma pojęcia, jak działa system i nie może w pełni zrozumieć konsekwencji zmian, których domaga się personel IT. Personel IT chce pewnych fundamentalnych zmian w systemie, które są w zasadzie niepotrzebne i faktycznie są złym projektem - ale SĄ klientem. jakieś pomysły?


title: Wielkość firmy i rozwój kariery

text: Obecnie pracuję jako inżynier oprogramowania dla dużej firmy (około 1000 pracowników). Niedawno dostałem ofertę pracy w mniejszej firmie, ale z wyższym wynagrodzeniem (na tyle, że naprawdę rozważam przeprowadzkę). Mniejsza firma ma około 17 pracowników i tylko około 4 programistów. Ma też inny tytuł, byłbym programistą aplikacji. Powiedzmy, że za mniej więcej pięć lat, kiedy będę chciał przenieść się do innej pracy, czy przejście z większej firmy do mniejszej będzie postrzegane jako negatywne w moim CV? Czy zmiana tytułu będzie miała jakiś skutek? Najważniejsze pytanie brzmi: jak wielkość firmy i tytuł zajmowanego stanowiska wpływa na twoją karierę?


title: Porównanie specyfiki akademickiego programu nauczania: ogólny a specjalista

text: Dla kogoś, kto jest stosunkowo nowy w tworzeniu stron internetowych, czy poleciłbyś realizację akademickiego programu nauczania, który jest bardziej zróżnicowany (wprowadzenie kilku języków i ram z innymi zajęciami dotyczącymi analizy, sieci, baz danych itp.) lub programu nauczania, który jest bardzo skoncentrowany i rygorystyczny ( tj. głównie zajęcia z technologii związanych z Javą)? **Tło** : Próbuję przejść do dziedziny tworzenia stron internetowych. Obecnie mam licencjat z biologii i prawie dwa lata doświadczenia jako webmaster dla mojego obecnego pracodawcy, a także trochę pracy jako freelancer w projektowaniu stron internetowych. W ciągu ostatniego roku aplikowałem na kilka stanowisk i otrzymuję głośną informację zwrotną, że potrzebuję dyplomu z informatyki lub pokrewnej dziedziny. Zdecydowałem się kontynuować studia magisterskie i zostałem przyjęty na dwa kierunki. **Boston University** \- Magister informatyki z koncentracją na tworzeniu aplikacji internetowych **Brandeis University** \- Master's in Software Engineering BU Program jest bardzo eklektyczny i zapewnia zajęcia z różnych tematów, takich jak HTML5, CSS3 , Javascript, JQuery, JavaSE, baza danych Oracle, sieci itp. Program Brandeis jest bardzo zagłębiony w technologie Java (podstawowa Java SE, J2EE, Struts, Hibernate, Spring, JDBC itp.). Obecnie mam całkiem dobre zrozumienie HTML, CSS, Javascript i Java SE przez około 2 lata samodzielnej nauki. Po prostu nie jestem pewien, czy dobrym pomysłem jest próba poszerzenia mojego ogólnego rozumienia projektowania stron internetowych, czy też lepiej jest spróbować rozwinąć niszę (np. Java), zanim spróbuję zdobyć pierwszą pozycję programisty. Dziekuje i miłego dnia.


title: Czy wzięcie semestru lub roku wolnego od studiów to dobry pomysł?

text: Obecnie jestem Juniorem na kierunku Informatyka na jednej z najlepszych uczelni (w USA). Ponieważ jestem naprawdę zmęczony uczęszczaniem na zajęcia, zastanawiałem się, czy wzięcie semestru lub roku wolnego na praktyki jest rozsądnym pomysłem? Wygląda na to, że dałoby mi to więcej doświadczenia w programowaniu (uczynienie zajęć nieco łatwiejszymi) i dałoby mi szansę na odzyskanie sił po wypaleniu wynikającym z zaliczenia 18 punktów w semestrze. Znajomy zasugerował, że po prostu zaliczę lżejszy kurs, ale mam jeszcze tylko 2 semestry pomocy finansowej, więc muszę wziąć 18 punktów w każdym z nich, aby zakończyć. Wzięcie wolnego od szkoły nie jest normalną rzeczą, przynajmniej w tej szkole. Ponieważ na lato reklamuje się więcej staży (które widziałem), zastanawiałem się, czy są dostępne staże w innych terminach niż lato? Gdybym wystartował na cały rok, czy bardziej opłacałoby się zostać przez cały czas w tej samej firmie, czy też spróbować uzyskać serię staży w różnych? Cenne zarówno w sensie wartości wznowienia, jak i wartości osobistej. Czy łatwiej czy trudniej byłoby dostać kilka krótszych staży?


title: Bezpieczne przechowywanie tajnych danych w aplikacji internetowej po stronie klienta

text: Mam tę aplikację internetową, która będzie w całości oparta na technologii po stronie klienta (HTML, CSS, JavaScript/AngularJS itp.). Ta aplikacja internetowa będzie współdziałać z REST API w celu uzyskania dostępu do danych i ich modyfikacji. W tej chwili nie jest zdecydowane, jakiego typu systemu uwierzytelniania będzie używać REST API. Z mojego zrozumienia, każdy rodzaj systemu uwierzytelniania API (klucze API, OAuth 1/2, itp.) będzie zawierał pewne dane, które muszą być utrzymywane w tajemnicy, w przeciwnym razie dostęp może być zagrożony. W przypadku kluczy API same klucze muszą być tajne, w przypadku OAuth 2 tajne klucze klienta/tokeny dostępu/tokeny odświeżania muszą być utrzymywane w tajemnicy. Jestem pewien, że kilka z 4 kluczy zaangażowanych w OAuth 1 musi być utrzymywane w tajemnicy (nie zbyt duże doświadczenie z OAuth 1). Próbowałem zastanowić się, czy istnieje sposób na przechowywanie tych tajnych rzeczy w czystej aplikacji internetowej po stronie klienta bez pośredniej warstwy sortowania po stronie serwera. Próbowałem o tym myśleć i nie mogę wymyślić żadnego miejsca, w którym mógłbym to zrobić. Chodzi mi o to, że nie mogę przechowywać go w javascript, ponieważ każdy może po prostu wyświetlić źródło lub otworzyć konsolę i uzyskać dane. Nie jestem w 100% pewien, jak bezpieczny jest localStorage i czy użytkownicy mogą uzyskać dostęp do tych danych/modyfikować je. Nawet jeśli lokalna pamięć masowa była bezpieczna, dwa sposoby, które mogę wymyślić, aby uzyskać do niej dane, nie są. Jednym ze sposobów jest po prostu przechowywanie danych w kodzie źródłowym javascript, co jest najbardziej niepewną rzeczą, o jakiej mogę pomyśleć. Teraz, gdybym używał czegoś takiego jak OAuth 2, w którym samo reszta api dałoby mi tokeny, nadal nie byłoby to tak bezpieczne (lepsze niż pierwsza opcja), ponieważ te tokeny byłyby zwracane jako zwykły tekst, aby każdy, kto może zobaczyć żądania, które komputer może zobaczyć. Czy istnieje sposób, aby aplikacja, która jest całkowicie uruchomiona po stronie klienta, mogła bezpiecznie przechowywać tajne fragmenty danych bez jakiejś warstwy środkowej po stronie serwera?


title: Widoki, kontrolery widoków, właściwości i programowanie obiektowe

text: Jestem nowy w OOP, od wielu lat jestem programistą proceduralnym. Uczę się programowania iOS w Objective-C i mógłbym wyjaśnić, kiedy i jak obiekty i właściwości są używane. Powiedz, że mam kontroler widoku, MyViewController. W ramach tego znajduje się UIView, MyView, z właściwością viewProperty. Jak odwoływać się do viewProperty z poziomu MyViewController? Moje przeczucie jest takie, że muszę utworzyć wystąpienie MyView, powiedzmy: MyView *instanceView; a następnie odwołaj się do instanceView.viewProperty. Ale bez tworzenia wystąpienia MyView w ogóle, widok MyView pojawia się w MyViewController po uruchomieniu symulatora iPhone'a. Czy to dlatego, że mój plik XIB niejawnie tworzy wystąpienie MyView? Jeśli tak, jak odwołać się do tego wystąpienia w kodzie? Jeśli muszę utworzyć wystąpienie MyView w MyViewController, które metody powinny zawierać deklarację i dlaczego? Mam nadzieję, że odpowiednio wyjaśniłem moje mgliste spostrzeżenia, aby ktoś wyjaśnił mi sprawy. Przepraszam, jeśli to nie ma sensu, ale czuję, że jeśli ktoś po prostu łączy dla mnie kropki, prawie tam jestem.


title: Najlepsze praktyki Google dla programistów

text: Wydaje mi się, że googling stał się integralną częścią tworzenia oprogramowania. Poświęcam mniej więcej tyle czasu na szukanie odpowiedzi i kopiowanie kodu z blogów i przykładów, co sam piszę nowy kod. Czy są jakieś sprawdzone metody dotyczące Google? Przykłady z mojej głowy: * używaj zaufanych witryn w celu uzyskania odpowiedzi, tj. stackoverflow, strona projektu API * przeczytaj komentarze do blogów zawierających fragmenty kodu * zrozum i przetestuj kod skopiowany z blogów * w razie wątpliwości najpierw wyszukaj rozwiązanie w Google masz już nowy?


title: Jakie narzędzia GUI są dostępne dla jakich DVCS?

text: Kiedy pracowałem w Sun, używaliśmy systemu DVC o nazwie Forte SCCS/Teamware, który używał starego formatu plików SCCS, ale był prawdziwym rozproszonym systemem kontroli wersji kodu źródłowego. Jedną z fajnych funkcji jest to, że miał silne wsparcie GUI: * Możesz przenosić i odkładać zmiany, po prostu klikając i przeciągając. * Narysowałby drzewa/wykresy pokazujące, w jaki sposób obszary robocze odnoszą się do siebie. * Możesz również mieć widok wykresu, aby wyświetlić pełną historię pojedynczego pliku, który mógł mieć kilka rozgałęzień i scaleń. Pozwala na porównanie dowolnych dwóch punktów. * Miał również silne narzędzie do wizualnego scalania, umożliwiające akceptowanie zmian z jednego z dwóch sprzecznych plików. Oczywiście wiele z obecnych DVCS obsługuje te operacje z linii poleceń, ale szukam obsługi GUI, aby używać jej na **kursie licencjackim niższego poziomu**, którego będę nauczać. Nie mówię, że rozwiązanie Forte Teamware było idealne, ale wydawało się, że wyprzedza konkurencję. Niestety nie jest to opłacalna opcja dla mojej klasy. **Pytanie:** Jakie wsparcie mają obecne DVCS w odniesieniu do GUI? Czy któryś z nich działa na Windowsie, a nie tylko na Linuksie? Czy są „gotowe na prime-time”, czy nadal trwają prace? Czy są one samodzielne, czy zbudowane jako wtyczki, np. dla Eclipse? **Uwaga:** aby pomóc w skupieniu się na tej dyskusji, interesuję się _tylko_ narzędziami z graficznym interfejsem użytkownika. I nie metadyskusja, czy narzędzia GUI powinny być używane w nauczaniu.


title: Korzystanie z repozytorium Mercurial w Git: to wykonalne? Rozsądny?

text: Zastanawiam się nad stworzeniem repozytorium Mercurial pod repozytorium Git. np. ..../git-repository/katalog/hg-repo/ 2 repozytoria Czy można zarządzać (zachowując zdrowie psychiczne)? Jak to jest do tego podobne? * * * Jestem studentem informatyki na Uniwersytecie. Zarządzam swoją pracą w Git, głównie jako mechanizm dystrybucji (po uświadomieniu sobie, że rsync zawodzi, gdy masz zmiany w więcej niż jednym miejscu) między moim komputerem stacjonarnym a dyskiem USB. Podczas pracy staram się używać Git jako VCS. Skończyłem semestr, w którym wykonałem projekt w małej grupie, aby przygotować się do większego projektu grupowego w przyszłym roku. Musieliśmy użyć Subversion i doświadczyć radości scentralizowanego VCS (w tym przestojów). Próbowałem trzymać repozytorium subversion oddzielnie od mojego repozytorium Git dla tematu**, jednak irytujące było to, że było oddzielne (nie w miejscu, w którym przechowuję przypisania). Dlatego przeszedłem do korzystania z repozytorium Subversion w moim repozytorium Git. Kiedy myślę z wyprzedzeniem (może myślę zbyt daleko), zdaję sobie sprawę, że będę musiał spróbować przekonać ludzi do korzystania z DVCS, a Mercurial będzie prawdopodobnie preferowany (obsługa Windows i Mac GUI, bliższa Subversion). Po przeprowadzeniu pewnych badań w całej debacie Git vs Mercurial (jednak w ogóle nie korzystałem z Mercurial) nadal wolę Git. Czy mogę mieć repozytorium Mercurial w repozytorium Git bez popadania w szaleństwo (lub niszczenia czegoś)? A może jest to coś, czego w ogóle nie powinienem brać pod uwagę? (A może to złe pytanie, które należy usunąć?) ** Myślę, że poza Australią nazywa się to kursem


title: Jak mogę sprawdzić poprawność kodu html/css i JS zleconego firmie zewnętrznej.

text: Projekt html i css zleciliśmy firmie zewnętrznej. Chcemy mieć pewność, że jakość kodu jest dobra. Jakie wzorce możemy wyznaczyć, aby to osiągnąć.


title: Metoda szablonowa w ramach jednej klasy bez podklas i dziedziczenia

text: Mam algorytm z w większości niezmiennymi częściami, które muszą być ponownie użyte w ramach jednej klasy, aby pozostać SUCHYM. ### Duplikacja kodu z powtarzalną strukturą metody public void save(String klucz, int wartość) { try { if (isValidWrite()) { // Tylko część zmiennej editor.putInt(klucz, wartość); if (!writeOnDisable){ write(edytor); Log.v(TAG, "Zapisane " + klucz + " | "+ wartość); } } } catch (Wyjątek e) { Log.e(TAG, "zapisz", e); } } public void save(String key, String value) { try { if (isValidWrite()) { // Tylko część zmiennej editor.putString(key, value); if (!writeOnDisable){ write(edytor); Log.v(TAG, "Zapisane " + klucz + " | "+ wartość); } } } catch (Wyjątek e) { Log.e(TAG, "zapisz", e); }     }      ### Rozwiązanie? * Wzorzec metody szablonu nie ma zastosowania, ponieważ wymaga podklasy. * Strategia — czy naprawdę muszę stworzyć interfejs i zapewnić różne implementacje, aby przejść do metody uogólnionej jako delegat? Może po prostu narzekam na poprawne wsparcie dla delegatów w Javie.. (w C# można po prostu użyć generycznej Action<>)


title: reprezentacja binarna w Pythonie i zachowanie wiodących zer

text: Chciałem użyć biblioteki Python base64 do zakodowania sekwencji cyfr binarnych w bazie 64. Czy byłoby to możliwe bez konwersji na ciąg znaków? Jeśli nie, jaki jest najlepszy sposób, aby to zrobić, zakładając, że mój ciąg cyfr 1/0 może nie być całkowitą wielokrotnością 8, może to być nawet liczba nieparzysta. Dodatkowo mam pytanie: czy można przypisać do zmiennej konkretny ciąg binarny? Na przykład x = 0b00010101010 y = 0b1110000 Chcę, aby x zawierał trzy początkowe zera i chciałbym móc je połączyć, aby uzyskać z = 0b000101010101110000


title: Jak sieci CDN chronią witryny pracy awaryjnej przed atakami DDoS?

text: Jestem w trakcie projektowania aplikacji internetowej Java, którą prawdopodobnie wdrożę w Google App Engine (GAE). Zaletą GAE jest to, że naprawdę nie muszę się martwić o wzmocnienie mojej aplikacji przed przerażającym atakiem DDoS – po prostu określam „pułap rozliczeniowy”, a jeśli mój ruch osiągnie ten pułap (DDoS lub inny), GAE po prostu zamknie moją aplikację. Innymi słowy, GAE będzie się zasadniczo skalować do dowolnej kwoty, aż po prostu nie będzie Cię stać na dalsze działanie aplikacji. Dlatego staram się zaplanować sytuację, w której jeśli osiągnę ten pułap rozliczeniowy, a GAE zamknie moją aplikację, ustawienia DNS domeny mojej aplikacji internetowej „przełączą się” na inny adres IP inny niż GAE. Niektóre wstępne badania wykazały, że niektóre sieci CDN, takie jak CloudFlare, oferują usługi w tej konkretnej sytuacji. Zasadniczo po prostu zachowuję przy nich ustawienia DNS i udostępniają interfejs API, który mogę uruchomić, aby zautomatyzować procedurę przełączania awaryjnego. Tak więc, jeśli wykryję, że mam 99% mojego pułapu rozliczeniowego dla mojej aplikacji GAE, mogę nacisnąć ten interfejs API CloudFlare, a CloudFlare dynamicznie zmieni moje ustawienia DNS, aby wskazać inny adres IP z serwerów GAE. Moją pierwszą możliwością byłoby przełączenie awaryjne na wersję „tylko do odczytu” (tylko zawartość statyczną) mojej aplikacji internetowej hostowanej w innym miejscu, na przykład przez firmę GoDaddy lub Rackspace. Ale potem nagle olśniło mnie: **jeśli ataki DDoS są skierowane na nazwę domeny, jaka będzie różnica, jeśli przeniosę się z mojego adresu IP GAE na mój (powiedzmy) adres IP GoDaddy?** Zasadniczo przełączenie awaryjne nie zrobić cokolwiek innego niż pozwolić atakującym DDoS na zamknięcie mojej kopii zapasowej/witryny GoDaddy! Innymi słowy, osoby atakujące DDoS koordynują atak na moją aplikację internetową hostowaną przez GAE pod adresem `www.blah-whatever.com`, która w rzeczywistości jest adresem IP _100.2.3.4_. Powodują, że mój ruch wzrasta do 98% mojego pułapu naliczania opłat, a mój niestandardowy monitor wyzwala przełączanie awaryjne CloudFlare z _100.2.3.4_ do _105.2.3.4_. Atakujący DDoS nie dbają o to! Nadal przeprowadzają atak na „www.blah-whatever.com”! Atak DDoS trwa! Pytam więc: jaką ochronę oferują sieci CDN, takie jak CloudFlare, aby - gdy musisz przełączyć się na inny DNS - nie jesteś narażony na ten sam, ciągły atak DDoS? Jeśli takie zabezpieczenie istnieje, czy istnieją jakieś ograniczenia techniczne (np. tylko do odczytu itp.), które są nakładane na stronę przełączania awaryjnego? Jeśli nie, to co z nich?! Z góry dziękuję!


title: Czy nazwa domeny .com jest tego warta dla aplikacji mobilnej?

text: Zaczynam tworzyć aplikację mobilną i mam nazwę pierwszego wyboru, której chcę używać. Jednak domena .com nazwy została już zajęta. Czy naprawdę warto go kupić, czy raczej skusiłbyś się na CoolNameApp.com lub CoolName.net? Jeśli nie byłoby Cię stać na nazwę domeny .com, czy użyłbyś innej nazwy dla rzeczywistej aplikacji? Także po to, żebym wiedział, że jestem studentem z niedużymi pieniędzmi. Fascynuje mnie Twoje pomysły i opinie na temat znaczenia domen .com dla aplikacji mobilnych :-)


title: Jak sprawić, by programiści robili przeglądy kodu w odpowiednim czasie?

text: Firma, w której pracuję, wymaga, aby cały kod został przejrzany przez innych programistów, zanim zostanie zatwierdzony. Członkowie mojego zespołu są często sfrustrowani, ponieważ inni programiści są zbyt zajęci kodowaniem, aby zrobić recenzję, zwłaszcza jeśli jest bardzo długa. Jak zachęcić innych programistów do terminowego sprawdzania kodu? (Używamy git-svn, więc możemy kontynuować kodowanie podczas oczekiwania na recenzję. Jednak nadal uważam, że frustrujące jest to, że muszę długo czekać, zanim będę mógł zatwierdzić swój kod.)


title: Techniczne strony z artykułami na temat iPhone'a, iPada lub ogólnego programowania iOS

text: Chcę tylko wiedzieć, jakie są dobre strony internetowe do czytania artykułów technicznych na iPhonie, iPadzie lub ogólnie w iOS. Można również nazwać dowolne usługi oparte na subskrypcji. mówię o witrynach takich jak http://drdobbs.com, które zawierają artykuły na temat mobilności, ale w rzeczywistości są bardzo ogólne. więc możesz wymienić kilka dobrych stron z artykułami technicznymi na temat iPhone'a, iPada lub ogólnego programowania iOS.


title: Czy przepisywanie projektu to dobry sposób na przećwiczenie umiejętności?

text: W wolnym czasie nie znajduję nic do roboty. I chcę ćwiczyć swoje umiejętności w C++ na projekcie. Pomysł polega na przepisaniu projektu w c++, takim jak Minix. Czy to dobry sposób na poprawę moich umiejętności programistycznych i architektonicznych, czy to strata czasu?


title: Biorąc pod uwagę ciągłą zmianę, jak krótki okres planowania jest zbyt krótki?

text: Zmiana nie jest niczym niezwykłym, zmiana wymagań, zmiana specyfikacji zmiana przepływu pracy. Zgodziłem się, że nastąpią zmiany, ale zastanawiam się: wiedząc, że zmiana nastąpi, jak krótki okres planowania jest zbyt krótki? (Zachęcamy do uzasadnienia) * Iteracja (2-4 tygodnie)? * Tydzień? * 2-3 dniowy okres? * Dzień? * 1/2 dnia? Załóżmy, że firma „plany” 1 [przedział czasowy (od góry)] z wyprzedzeniem w stosunku do obecnego, tak aby każdy plan brzmiał jak: „[dzisiaj rano/dzisiaj/w tym tygodniu/itd.] będziesz pracować nad _tym_ i [tym po południu/jutro/w przyszłym tygodniu/itd.] będziesz pracował nad _tym_. Załóż również, że zmiany w skupieniu/kierunku będą konsekwentnie następować co sekundę do trzeciego przedziału czasowego.


title: Skąd kompilatory wiedzą o innych klasach i ich właściwościach?

text: Piszę mój pierwszy język programowania, który jest zorientowany obiektowo i jak na razie dobrze tworzy jedną „klasę”. Ale powiedzmy, że chcę mieć zajęcia, powiedzmy „Klasa A” i „Klasa B”. Pod warunkiem, że ci dwaj nie mają ze sobą nic wspólnego, wszystko jest w porządku. Jednak powiedzmy, że `ClassA` tworzy `ClassB`\--to stawia 2 powiązane pytania: - Skąd kompilator wiedziałby podczas kompilacji `ClassA`, że `ClassB` w ogóle istnieje, a jeśli tak, to skąd wie o swoich właściwościach ? Moje myśli do tej pory były następujące: zamiast kompilować każdą klasę na raz (tj. Skanować, analizować i generować kod) każdy „plik (nie do końca plik, per se, ale „klasa”) muszę najpierw skanować + analizować każdy , a następnie wygenerować kod dla wszystkich?


title: Jak mam wziąć odpowiedzialność za swój kod, gdy kolega wprowadza niepotrzebne ulepszenia bez powiadomienia?

text: Jeden z moich kolegów z zespołu jest specjalistą od wszystkich zawodów w naszym sklepie IT i szanuję jego spostrzeżenia. Jednak czasami przegląda mój kod (jest zastępcą lidera naszego zespołu, więc tego można się spodziewać) bez uprzedzenia. Więc czasami przegląda moje zmiany, zanim osiągną ostateczny cel i wprowadza zmiany od razu… a nawet raz zepsuł moją pracę. Innym razem wprowadzał niepotrzebne poprawki do mojego kodu, który ma ponad 3 miesiące. To mnie denerwuje z kilku powodów: 1. Nie zawsze mam szansę naprawić swoje błędy 2. Nie poświęcił czasu, aby zapytać mnie, co próbowałem osiągnąć, gdy jest zdezorientowany, co może wpłynąć na jego testy lub zmiany 3. Nie zawsze uważam, że jego kod jest czytelny 4. Terminy nie są problemem, a jego bieżące obciążenie pracą nie wymaga żadnej pracy w moich projektach poza przeglądaniem zmian w kodzie. W każdym razie, powiedziałem mu w przeszłości, aby informował mnie o tym, jeśli zobaczy coś w mojej pracy, co chce zmienić, abym mógł przejąć na własność mój kod (może powinienem był powiedzieć „niedociągnięcia”), a on nie odpowiada . Obawiam się, że mogę wyjść tak agresywnie, kiedy poproszę go o wyjaśnienie mi swoich zmian. Jest po prostu cichą osobą, która trzyma się z dala od siebie, ale jego działania trwają. Nie chcę zabronić mu wprowadzania zmian w kodzie (nie tak, jak ja), ponieważ jesteśmy zespołem — ale chcę zrobić swoją część, aby pomóc naszemu zespołowi. Dodano wyjaśnienia: * Dzielimy 1 gałąź rozwojową. Nie czekam, aż wszystkie moje zmiany zakończą jedno zadanie, ponieważ ryzykuję utratę jakiejś znaczącej pracy — więc upewniam się, że moje zmiany tworzą i niczego nie psują. * Obawiam się, że mój kolega z drużyny nie wyjaśnia powodu ani celu jego zmian. Myślę, że nie powinien potrzebować mojego błogosławieństwa, ale jeśli nie zgadzamy się co do podejścia, pomyślałem, że najlepiej będzie przedyskutować plusy i minusy i podjąć decyzję, gdy oboje zrozumiemy, co się dzieje. * Nie rozmawiałem o tym jeszcze z kierownikiem naszego zespołu, ponieważ wolałbym rozwiązywać osobiste spory bez angażowania kierownictwa, chyba że jest to konieczne. Ponieważ moja troska wydawała się bardziej osobistym problemem niż zagrożeniem dla naszej pracy, postanowiłem nie przeszkadzać kierownikowi zespołu. Pracuję nad pomysłami na proces przeglądu kodu — aby pomóc w promowaniu korzyści płynących z bardziej zorganizowanych przeglądów kodu bez zajmowania się moimi irytującymi zwierzakami.


title: Jakie konkretnie gałęzie matematyki są przydatne dla programisty?

text: Mam mniej niż 6 miesięcy na naukę matematyki na kursie magisterskim z CS. (Bez wcześniejszej formalnej edukacji w jakiejkolwiek dziedzinie związanej z informatyką/matematyką.) Więc muszę przygotować się do egzaminu z matematyki w odniesieniu do informatyki. Jak znalazłem w Wikipedii, matematyka ma wiele gałęzi. Które z nich są najważniejsze dla programisty? * Arytmetyka * Algebra (elementarna, liniowa, wieloliniowa, abstrakcyjna) * Geometria (dyskretna, algebraiczna, różniczkowa) * Rachunek/Analiza * Teoria mnogości * Logika * Teoria kategorii * Teoria liczb * Kombinatoryka * Teoria grafów * Topologia * Teoria kłamstw * Równania różniczkowe /Systemy dynamiczne * Fizyka matematyczna * Analiza numeryczna * Obliczenia * Teoria informacji * Prawdopodobieństwo * Statystyka * Optymalizacja * Teoria sterowania * Teoria gier


title: Separacja obaw między obiektami

text: Mam dwa obiekty, które współpracują ze sobą, aby zapewnić interakcję z HID na maszynie. Jeden obiekt odpowiada za komunikację (odczyt/zapis) do HID, a drugi za modelowanie HID. Informacje są odczytywane i zapisywane w HID jako tablice bajtów. Jako wymyślny przykład: class Hid { private HidComms comms; public DateTime? GetPropertyB() { return comms.GetPropertyB(); } } class HidComms { public DateTime? GetPropertyB() { // żądanie właściwości B z HID // uzyskanie 1 lub więcej byte[] w odpowiedzi return new DateTime(); } } Który z tych dwóch obiektów powinien być odpowiedzialny za kodowanie/dekodowanie tablic bajtów, czy też trzeci obiekt powinien być za to odpowiedzialny? Oznacza to, że obiekt `Hid` wie tylko o stanie, a obiekt `HidComms` wie tylko jak czytać/zapisywać z trzecim obiektem odpowiedzialnym za konwersję?


title: TryUpdateModel a parametr i ModelState.IsValid

text: Ponieważ początkowo uczyłem się o MVC, książka, której używałem, nauczała następującej techniki dla akcji kontrolera: public ActionResult MethodName(Model model) { if (ModelState.IsValid) { } else { } } Jednak szybko natknąłem się na niepowiązany problem , a ktoś na Stack Overflow wskazał mi nową funkcję w MVC3, która wyglądała tak: public ActionResult MethodName() { var model = new Model(); if (TryUpdateModel(model)) { } else { } } Ta nowa technika `TryUpdateModel()` pomogła w osobnym problemie, z którym się spotkałem (oprócz tego, którego dotyczyło moje pytanie), więc używałem tego przez jakiś czas . Jednak ostatnio napotkałem kilka drobnych problemów, które skłoniły mnie do powrotu do oryginału z `ModelState.IsValid`. Żaden błąd nigdy nie był tak poważny, więc wydaje mi się, że jest to raczej scenariusz „najlepszej praktyki”. Te drobne błędy mogły pochodzić z innych problemów w kodzie, który napisałem. Jakie są doświadczenia każdego z tych dwóch metodologii? (Dla przypomnienia, dotyczy to MVC3 i MVC4 w C# 4.0 i Visual Studio 2010).


title: Jaki jest najkrótszy algorytm jednokierunkowego generowania skrótu?

text: Mam identyfikator o długości 24 znaków, który gwarantuje, że będzie unikalny. Chciałbym to skrócić do 7-10 (lub nawet krótszych) znaków. Jeśli losowo wygeneruję krótki identyfikator, musiałbym za każdym razem sprawdzać, czy ten krótkiid jest dostępny. Czy istnieje jednokierunkowy algorytm skrótu, który może zwrócić skrót 7-10 znaków z przekazania 24 znakowego identyfikatora. Czy istnieją inne sposoby zagwarantowania, że wygenerowany krótki identyfikator jest unikalny bez sprawdzania?


title: Dlaczego interfejsy API kolekcji Java nie mają ostatniej metody?

text: Dotyczy to zamawianych kolekcji m.in. java.util.Lista. Dlaczego projektanci języka nie uwzględnili ostatniej metody? Jedyne powody, o których mogę pomyśleć, to: * niejednoznaczność, gdy kolekcja jest pusta (zwróć wartość null lub wyrzuć wyjątek) * rozdęcie interfejsu API Jakieś inne powody?


title: W zwinnym środowisku, w jaki sposób jest skonsolidowane śledzenie błędów i śledzenie iteracji.

text: Ten temat wynikał z mojego innego pytania o harmonogram narzucony przez kierownictwo. Z odpowiedzi w drugim wątku zebrałem tyle informacji na temat ogólnie zalecanych: * Każda historia powinna być ukończona bez błędów. Historia nie jest zamknięta, dopóki wszystkie błędy nie zostaną usunięte. Nie ma tam żadnych wiadomości i myślę, że wszyscy możemy się z tym zgodzić. * Jeśli później QA (lub co gorsza klient) znajdzie błąd, raport trafia do bazy danych śledzenia błędów i staje się historią, która powinna być traktowana priorytetowo, tak jak każda inna praca. Czy to podsumowuje ogólną obsługę błędów w zwinnym środowisku? Jeśli tak, jestem ciekaw, jak zespoły radzą sobie ze śledzeniem w dwóch różnych systemach? (chyba że większość zespołów nie ma różnych systemów). Czytałem wiele porad (w tym na blogu Joela) ogólnie na temat tworzenia oprogramowania, aw szczególności na temat znaczenia dobrego narzędzia do śledzenia błędów. Jednocześnie, gdy czytasz książki o metodyce zwinnej, żadna z nich nie wydaje się obejmować tego tematu, ponieważ w „czystym” zwinności kończysz iterację bez błędów. Wydaje się, że gdzieś tam jest dziura. Jak więc działają prawdziwe zespoły? Aby śledzić iteracje, których używasz (tablica, rajdy...), do śledzenia błędów, użyjesz czegoś z innego zestawu produktów (jeśli masz szczęście, możesz nawet utknąć w HP Quality Center). Czy powinny być 2 oddzielne systemy? Jeśli są oddzielne, czy zespoły spędzają czas na tworzeniu funkcji importu/synchronizacji między nimi? Co zrobiłeś w swojej firmie? Czy jest w ogóle używane oprogramowanie do śledzenia błędów? A może po prostu od razu tworzysz historię?


title: Jak usunąć zduplikowany kod (ogólnie)?

text: W języku OO (np. ale nie ograniczającym się do Javy) jak naprawić zduplikowany kod w zależności od zakresu jego występowania? Zacząłbym od np. * w tej samej klasie (scope) wykonać refaktoryzację Extract Method (fix) * w klasach tej samej hierarchii (scope) wykonać Extract Method i Pull Up (fix) *...


title: Ulepszenia foreach w języku C#?

text: Często spotykam się z tym podczas programowania, gdzie chcę mieć indeks liczby pętli wewnątrz foreach i muszę utworzyć liczbę całkowitą, użyć jej, zwiększyć itp. Czy nie byłoby dobrym pomysłem, gdyby wprowadzono słowo kluczowe, które byłoby liczba pętli wewnątrz foreach? Może być również używany w innych pętlach. Czy jest to sprzeczne z używaniem słów kluczowych, ponieważ kompilator nie pozwoliłby na użycie tego słowa kluczowego nigdzie indziej niż w konstrukcji pętli?


title: Jakie rodzaje prac programistycznych wymagają znajomości zaawansowanych koncepcji?

text: Kiedy byłem na uniwersytecie, brałem udział w konkursie programistycznym; problemy okazały się niezwykle trudne i nudne, wymagały wcześniejszej wiedzy na temat konkretnego zestawu problemów, np. teoria grafów, algebra. Nasz zespół zawiódł całkowicie na tych zawodach, nie rozwiązując w ogóle żadnych problemów. Po ukończeniu studiów i zdobyciu pierwszej pracy jako programista moje codzienne zadania kręciły się wokół logiki biznesowej i nie miały nic wspólnego z trudnymi problemami, które napotkałem na uniwersytecie. Większość obliczeń dotyczy matematyki i nic więcej; poza tym potrzebujemy tylko ogólnej bazy danych i dobrej wiedzy na temat projektowania baz danych. Jakie rodzaje pracy wymagają wiedzy o tych zaawansowanych problemach, które napotkałem na uniwersytecie?


title: Jakie problemy programistyczne najlepiej rozwiązywać za pomocą wskaźników?

text: Cóż, zasadniczo rozumiem, jak używać wskaźników, ale nie wiem, jak najlepiej ich używać, aby lepiej programować. Jakie są dobre projekty lub problemy do rozwiązania, które wymagają użycia wskaźników, abym mógł je lepiej zrozumieć?


title: Czy są jakieś artykuły naukowe na temat zalet imperatywu nad programowaniem funkcjonalnym?

text: Istnieje wiele artykułów naukowych na temat zalet programowania funkcjonalnego. Widzę również wiele debaty (w Internecie) na temat względnych zalet programowania imperatywnego i funkcjonalnego. Interesuje mnie, czy ta debata w środowisku akademickim rozciąga się na opublikowane artykuły (myślę, że im nowsze, tym lepiej) omawiające zalety programowania imperatywnego nad programowaniem funkcjonalnym.


title: Jaki jest dobry wzorzec projektowy/lib dla iOS 5 do synchronizacji z usługą sieciową?

text: Tworzymy aplikację na iOS, która wymaga synchronizacji ze zdalnym serwerem za pomocą usług internetowych. Istniejące usługi sieci Web mają styl "operacje", a nie REST (zaimplementowane w WCF, ale uwidaczniają punkty końcowe HTTP JSON). Nie jesteśmy pewni, jak ustrukturyzować usługi internetowe, aby najlepiej pasowały do systemu iOS i chcielibyśmy uzyskać kilka porad. Interesuje nas również, jak zarządzać procesem synchronizacji w systemie iOS. Bez wchodzenia w szczegóły aplikacja pozwala użytkownikowi oszacować koszty naprawy w odległym miejscu. Koszty te są podzielone na pokój i przedmiot. Jeśli użytkownik ma połączenie z Internetem, dane te mogą zostać odesłane z powrotem na serwer. Każdemu przedmiotowi można zrobić wiele zdjęć, ale będą one trzymane w osobnej kolejce, która jest wysyłana, gdy połączenie jest optymalne (najlepiej Wi-Fi). Nasza aplikacja backendowa kontroluje unikalne identyfikatory dla każdego pokoju i przedmiotu. Dzięki temu za każdym razem, gdy wysyłamy te koszty na serwer, serwer wysyła echo identyfikatorów centralnej bazy danych, dzięki czemu można je zsynchronizować w aplikacji mobilnej. Trochę to uprościłem, ponieważ umowa operacyjna jest w rzeczywistości znacznie większa, ale chcę tylko zilustrować podstawowe wymagania bez komplikowania spraw. Po pierwsze, architektura usługi sieciowej: Obecnie mamy dwie operacje: GetCosts i UpdateCosts. Zakładam, że gdybyśmy użyli ścisłej architektury REST, musielibyśmy podzielić nasze pojedyncze operacje usługi sieciowej na wiele mniejszych usług. Dzięki temu usługi byłyby znacznie bardziej rozmowne, a my musielibyśmy również zagwarantować zamówienie dostawy z aplikacji. Na przykład musimy upewnić się, że pokoje zawierające są dodawane przed elementem. Chociaż wydaje się to znacznie bardziej RESTful, naszym zdaniem te dodatkowe połączenia są kosztownymi połączeniami (kontrole bezpieczeństwa, połączenia z bazami danych itp.). Czy typ web api (operacja na skupieniu na usłudze) determinuje masywny vs rozmowny? Ponieważ jest to telefon komórkowy (3G), czy lepiej obsługujemy wiele mniejszych wiadomości, czy kilka dużych? Po drugie, strona iOS. Jakie są aktualne porady dotyczące zarządzania synchronizacją danych w samej aplikacji iOS (5). Potrzebujemy wielu kolejek i musimy zagwarantować kolejność dostaw w każdej kolejce (i technicznie zamawianie między kolejkami). Serwer musi kontrolować unikalne identyfikatory i inne właściwości oraz wyświetlać je z powrotem w aplikacji. Następnie aplikacja musi zaktualizować wewnętrzną bazę danych, a podczas ponownej aktualizacji upewnić się, że w komunikacie o aktualizacji dostępne są prawidłowe identyfikatory (zasadniczo wiele wstawek i aktualizacji w jednym wywołaniu). Nasz backend ma mnóstwo logiki biznesowej działającej na tych szacunkach kosztów. Nie chcemy tego w samej aplikacji. Obecnie aplikacja na iOS wysyła dane o kosztach, a następnie serwer wysyła te dane z powrotem z wypełnionymi identyfikatorami (i innymi danymi). Istniejące dane o kosztach są usuwane, a dane odpowiedzi echo są dodawane do bazy danych klienta na urządzeniu. To sprawia nam problemy, ponieważ zdjęcia mogły nie zostać wysłane, ale oryginalne drzewo encji zostało usunięte i zastąpione. Oczywiście aktualizacja drzewa kosztów zamiast zastępowania go usunęłaby ten problem, ale nie jestem pewien, czy istnieją jakieś fajne biblioteki xcode do robienia takich rzeczy. Przyjmuję każdą radę, którą możesz mieć.


title: Jaka była potrzeba wprowadzenia Pythona 3, kiedy mieliśmy już Pythona 2?

text: Wciąż uczę się Pythona i zacząłem od Pythona 3. To pytanie nie jest Python 2 vs 3 lub różnica między nimi, jak print() jest funkcją, a nie konstrukcją językową, a 3/2 = 1,5 Moje pytanie brzmi, nawet jeśli nadal jest to Python, jaka była potrzeba wprowadzenia czegoś nowego, co nie jest wstecznie kompatybilne, kiedy - 1. Składnia jest taka sama 2. Filozofia języka jest taka sama (zaimportuj to) Uh .. Aby zmylić miliony programistów, nie zdecydowanie nie. Wiem, że przełączanie między dwoma nie będzie takie trudne, ale ponieważ nie rozumiem wewnętrznych elementów, Python 3 jest zdecydowanie związany z przyszłością Pythona. **Edytuj** \- Powiedzmy, że wszystkie popularne pakiety są przeniesione do Pythona 3, czy to oznacza, że nie potrzebujemy już Pythona 2


title: Czy należy dodać parametry do metod instancji, które używają tych pól instancji jako parametrów?

text: Mam metodę instancji, która wykorzystuje w swojej pracy pola instancji. Mogę pozostawić metodę bez tych parametrów, ponieważ są one dla mnie dostępne, lub dodać je do listy parametrów, dzięki czemu moja metoda będzie bardziej „ogólna” i nie będzie niezawodna w klasie. Z drugiej strony dodatkowe parametry będą znajdować się na liście parametrów. Które podejście jest preferowane i dlaczego? Edycja: w tej chwili nie wiem, czy moja metoda będzie publiczna czy prywatna. Edit2: wyjaśnienie: zarówno metoda, jak i pola są na poziomie instancji.


title: Ocena średniej i std w miarę dodawania symulacji

text: Mam symulacje, które oceniają pewną wartość X. Przeprowadzam symulacje kilka razy i zapisuję wartość X w wektorze V. Po zakończeniu wszystkich przebiegów oceniam średnią i odchylenie standardowe dla wektora V. To podejście działa, ale oznacza zapisanie wszystkich wartości dla X. Ponieważ mój komputer jest dość stary i ma ograniczoną pamięć RAM, zastanawiałem się, czy istnieje sposób na aktualizację średniej wartości M i odchylenia standardowego S, znając wartość X w (n + 1 )-ty przebieg oraz wartości M i S po n przebiegach. Jak mogę zaktualizować wartość średnią i odchylenie standardowe w miarę dodawania symulacji do zestawu? Proszę zauważyć, że jest to tylko przykład koncepcyjny, nie zapisuję tylko jednej liczby X, ale tysiące w każdej symulacji, więc naprawdę mam problemy z uruchomieniem dużej liczby przebiegów, jeśli muszę zachować wszystkie przeszłe wartości w pamięci.


title: 5 lat nauki na uniwersytecie vs. 5 lat doświadczenia zawodowego – co byś wybrał, gdybyś zatrudnił?

text: Powiedzmy, że musisz zatrudnić programistę. Masz przy stole dwóch kandydatów: jeden studiował 5 lat na uniwersytecie (i oczywiście ma tytuł magistra), ale nie ma doświadczenia zawodowego; a drugi nie ma wykształcenia, ale pracuje od 5 lat. Załóżmy również, że oboje znają te same języki programowania, mają mniej więcej tę samą osobowość i spędzają tyle samo czasu na programowaniu w wolnym czasie. Gdybyś miał tylko te informacje, aby kontynuować, co byś wybrał?


title: Jak odpowiedzieć na pytanie, czy jestem programistą front-end, middle tier czy back-end

text: To było pytanie do wywiadu, które mi zadano. Jako programista pracuję nad każdym przydzielonym mi zadaniem, czasami jest to komponent GUI, który wymaga dodania nowego okna dialogowego lub zmiany istniejącego GUI, innym razem jest to logika biznesowa, którą muszę dodać/zmodyfikować, lub nowy interfejs wymagany do ujawnienia funkcjonalności niektórych bibliotek zewnętrznych - więc kiedy zadałem to pytanie w wywiadzie, jak mam na nie odpowiedzieć? Czego dokładnie szukają?


title: Czy można uczyć się z materiałów C# 2002?

text: Znalazłem kilka filmów, które wyjaśniają C#, ale wróciłem do C#.NET, kiedy pojawił się po raz pierwszy, czy jeśli nauczę się z tych filmów, nauczę się czegoś, co zostało usunięte z języka? będę bardzo tęsknić?


title: Jakie jest dobre wyjaśnienie zasady korespondencji Tennenta?

text: Zacząłem się zastanawiać, na czym polega ta zasada i dlaczego jest tak ważna dla projektowania języka. Zasadniczo stwierdza, że dla każdego wyrażenia `expr` w języku powinno być dokładnie to samo, co ta konstrukcja: (function () { return expr; })() Ponadto słyszałem, że Ruby przestrzega tej zasady, podczas gdy Python nie' t. Nie rozumiem, dlaczego to prawda, ani czy w ogóle jest to prawda.


title: Jaka jest dobra metafora programowania?

text: Mam na myśli wyjaśnianie nie-programiście, czym jest programowanie. Upewniłem się, że szukałem podobnych pytań przed utworzeniem tego, ale te kilka, które znalazłem, wydawało się omijać pytanie, a szczególnie chciałbym zobaczyć kilka metafor lub analogii. Osobiście jest mi łatwiej wyjaśnić komuś coś technicznego za pomocą metafor lub analogii. Powodem, dla którego mnie to interesuje, jest to, że wiele osób codziennie styka się z pracą programisty, ale jeśli zapytasz przeciętnego człowieka, czym jest programista lub czym się zajmuje, tak naprawdę nie wie. Prowadzi to do pewnych sytuacji nieporozumień (np. „[...] ale myślałem, że jesteś dobry z komputerami!”). Naprawdę chciałbym znaleźć najlepszy z nich. Chciałbym móc łatwo wytłumaczyć komuś, na czym polega mój wybór kariery. Oczywiście przynajmniej ogólny pomysł. Osobiście nie mam solidnego, ale długo o tym myślałem i zwykle skłaniam się ku metaforze „języka”, gdzie zdarza się, że znamy język, który komputery rozumieją i dlatego jesteśmy w stanie powiedzieć komputerom, co mają robić lub „nauczać” ich, aby rozwiązać nasze problemy. Na przykład: > Wyobraź sobie, że w alternatywnej rzeczywistości istnieją humanoidalne roboty ze sztuczną > inteligencją, a niektórzy ludzie są w stanie komunikować się z nimi > za pomocą wspólnego języka, który jest odmianą angielskiego. Ci ludzie, którzy potrafią komunikować się z robotami, są w stanie nauczyć ich, jak rozwiązywać pewne problemy lub wykonywać określone zadania, takie jak wykonywanie obowiązków domowych. > > Cóż, chociaż takie roboty jeszcze nie istnieją, programiści naszych czasów są > jak tamci ludzie, ale zamiast komunikować się z robotami, > komunikują się z komputerami. Programiści "uczą" komputery jak wykonywać > pewne zadania lub rozwiązywać pewne problemy za pomocą _oprogramowania_, które > tworzą używając tego "wspólnego języka". > > Programiści i ten "wspólny język" dają nam takie rzeczy jak e-mail, > strony internetowe, gry wideo, edytory tekstu, smartfony ( _w uproszczeniu_ ) > i wiele innych rzeczy, których używamy na co dzień. Nie chcę stawiać programowania na tronie ani nic takiego, to po prostu najlepsza metafora, jaką mogłem wymyślić. Jestem pewien, że ktoś znajdzie jakiś problem z tym, prawdopodobnie jest trochę wymyślny, ale znowu dlatego zadaję to pytanie.


title: Pytanie początkującego dotyczące wzorca projektowego Decorator

text: Czytałem artykuł o programowaniu, który wspomniał o wzorcu Decorator. Programuję od jakiegoś czasu, ale bez jakiejkolwiek formalnej edukacji czy szkolenia, ale staram się poznać standardowe wzorce i tym podobne. Poszukałem więc Dekoratora i znalazłem na ten temat artykuł w Wikipedii. Rozumiem teraz koncepcję wzorca Dekoratora, ale nieco zdezorientował mnie ten fragment: > Rozważmy jako przykład okno w systemie okienkowym. Aby umożliwić przewijanie > zawartości okna, możemy chcieć dodać do niego poziome lub pionowe > paski przewijania, w zależności od potrzeb. Załóżmy, że okna są > reprezentowane przez instancje klasy Window i załóżmy, że ta klasa nie ma > funkcji dodawania pasków przewijania. Moglibyśmy stworzyć podklasę ScrollingWindow, która > je udostępnia, lub możemy utworzyć ScrollingWindowDecorator, która > dodaje tę funkcjonalność do istniejących obiektów Window. W tym momencie każde rozwiązanie > byłoby w porządku. >> Teraz załóżmy, że pragniemy również mieć możliwość dodawania obramowań do naszych okien. > Ponownie, nasza oryginalna klasa Window nie ma obsługi. Podklasa ScrollingWindow > stwarza teraz problem, ponieważ skutecznie stworzyła nowy rodzaj > okna. Jeśli chcemy dodać obsługę obramowania do wszystkich okien, musimy utworzyć > podklasy WindowWithBorder i ScrollingWindowWithBorder. Oczywiście ten > problem staje się gorszy z każdą nową funkcją, która ma zostać dodana. W przypadku rozwiązania dekorator > po prostu tworzymy nowy BorderedWindowDecorator — w czasie wykonywania możemy > udekorować istniejące okna za pomocą ScrollingWindowDecorator lub > BorderedWindowDecorator lub obu, według własnego uznania. OK, kiedy mówią, aby dodać obramowania do wszystkich okien, dlaczego nie po prostu dodać funkcjonalności do oryginalnej klasy Window, aby umożliwić opcję? Z mojego punktu widzenia tworzenie podklas polega tylko na dodawaniu określonej funkcjonalności do klasy lub przesłonięciu metody klasy. Gdybym musiał dodać funkcjonalność do wszystkich istniejących obiektów, dlaczego nie miałbym po prostu zmodyfikować superklasy, aby to zrobić? W artykule pojawiła się kolejna linijka: > Wzorzec dekoratora jest alternatywą dla podklas. Podklasa dodaje > zachowanie w czasie kompilacji, a zmiana wpływa na wszystkie wystąpienia > oryginalnej klasy; dekorowanie może zapewnić nowe zachowanie > w czasie wykonywania dla poszczególnych obiektów. Nie rozumiem, gdzie mówią „… zmiana wpływa na wszystkie wystąpienia oryginalnej klasy” – w jaki sposób podklasa zmienia klasę nadrzędną? Czy to nie jest cały sens tworzenia podklas? Zakładam, że artykuł, podobnie jak wiele Wiki, po prostu nie jest napisany jasno. Widzę przydatność Dekoratora w tym ostatnim wierszu - "...zapewnij nowe zachowanie w czasie wykonywania dla poszczególnych obiektów". Nie czytając o tym wzorcu, gdybym musiał zmienić zachowanie w czasie wykonywania poszczególnych obiektów, prawdopodobnie wbudowałbym kilka metod w nadklasę lub podklasę, aby włączyć/wyłączyć to zachowanie. Proszę, pomóż mi naprawdę zrozumieć przydatność Dekoratora i dlaczego moje myślenie nowicjusza jest błędne?


title: Jak zdobyć istniejącą bazę kodu/projekty w squeaksource.com?

text: Jestem bardzo nowy w smalltalku. I obecnie próbuję owinąć głowę wokół GNU smalltalk (środowisko pharo). Przeglądając wstępną sesję pharo na przykładzie, dowiedziałem się, że w repozytorium squeaksource przesłanym przez programistów jest dużo kodu. Strona pharo bardzo dobrze mówi, że każdy może odwołać się do tej ogromnej bazy kodu. Chciałbym wiedzieć, w jaki sposób mogę przeglądać, ładować i zaglądać do kodu źródłowego projektów w moim IDE, aby uzyskać podstawową wiedzę na temat składni smalltalk i jak kodować w pharo? Proszę, pomóż mi z tym.


title: Odpowiedzialność za warunki korzystania z usługi przy opracowywaniu usługi bibliotecznej, która obejmuje API stron trzecich

text: Dla własnej rozrywki i instrukcji rozwijałem bibliotekę C#/.NET, która jest w zasadzie wrapperem wokół API Google Geocoding. Upraszcza cały proces i umożliwia użytkownikom wykonywanie geokodowania w całości w kodzie .NET. W pewnym momencie myślałem o udostępnieniu biblioteki za darmo i ewentualnie udostępnieniu całego projektu poprzez przesłanie go do miejsca takiego jak GitHub lub CodePlex. Jednak Google ma wiele ograniczeń dotyczących korzystania z ich usług w swoich Warunkach korzystania z usługi. Jednym z tych ograniczeń jest: > Uwaga: Geocoding API może być używany tylko w połączeniu z mapą Google; > Geokodowanie wyników bez wyświetlania ich na mapie jest zabronione. Mam więc następujące pytania: 1. Jeśli udostępniam swoją bibliotekę innym osobom (bezpłatnie), czy muszę dołączyć jakąś licencję i czy musi to odnosić się do Warunków korzystania z usług Google? 2. Jeśli ludzie korzystają z mojej biblioteki w sposób, który narusza warunki Google, kto jest za to odpowiedzialny? Nie chcę w żaden sposób otwierać się na odpowiedzialność za działania innych osób podczas korzystania z mojego kodu. **Edytuj:** Doceniam, że ludzie tutaj nie są prawnikami i nie oczekuję porady prawnej. Po prostu bardziej interesuje mnie to, co ludzie zrobili w podobnych sytuacjach lub zrobiliby w takiej sytuacji. Nie będę nikogo pociągał do odpowiedzialności, szczerze!


title: Jak określasz wymagania dotyczące dostępności witryny?

text: Pracuję nad aplikacją internetową do rozliczania określonego rodzaju podatków powiatowych. Nasza firma chce, aby nasz stan nakazał, aby hrabstwa przyjmowały zgłoszenia elektroniczne (w przeciwieństwie do papierowych) z każdego systemu, który spełnia pewne rozsądne wymagania dotyczące czasu pracy, bezpieczeństwa, walidacji danych itp. (Tak, to pomogłoby nam jako firmie, ale zmusiłoby to również rządy hrabstw do większej efektywności.) Tworzymy projekt tych wymagań, które mają zostać przejrzane i dopracowane we współpracy ze stanem. Jedną z sekcji jest „dostępność”. Chcemy określić coś rozsądnie wysokiego, ale nie tak wysokiego, że jakikolwiek nieoczekiwany problem spowoduje ukaranie nas (lub konkurenta). Jak decydujemy, co jest uzasadnione w przypadku wymagań dotyczących dostępności?


title: Odpowiadanie na pytania wywiadu dotyczące nieznanych algorytmów

text: Czy istnieje akceptowalny/skuteczny sposób radzenia sobie z ankieterami, którzy proszą Cię o zaimplementowanie algorytmu, którego nie znasz? Ostatnio dużo przeprowadzam wywiady i często się z tym spotykam. Ankieterzy proszący mnie o zaimplementowanie struktur danych lub algorytmów, których nigdy nie implementowałem i nigdy nie zaimplementuję, kompletnie mnie zbijają z tropu. Konkretnie w moim przypadku jestem przede wszystkim programistą systemów, więc spędzam większość czasu zajmując się problemami paralelizmu i powiązanymi, a nie wymyślając algorytmów na nowo, więc te pytania są dla mnie bardzo nieistotne. Jako przykład poproszono mnie o zaimplementowanie funkcji, która pobiera ciąg i zwraca kontener ze wszystkimi permutacjami tego ciągu (C++). Zasugerowałem, że w standardowej bibliotece istnieją funkcje zajmujące się permutacjami, które mogą być użyteczne, ale nie byłem pewien dokładnie, co oferuje standardowa biblioteka, ponieważ nigdy wcześniej nie używałem tych funkcji. Mogę łatwo rozwiązać ten problem, zagnieżdżając wiele pętli dla ciągu o stałej długości, ale w tym przypadku długość ciągu jest dynamiczna. Nie mogłem podać rozwiązania. Po wywiadzie sprawdziłem implementację `next_permutation` w mojej standardowej bibliotece i teraz nie dziwię się, że nie mogłem wymyślić tego po umieszczeniu na miejscu. Wątpię, by wielu mogło odpowiedzieć bez wcześniejszej znajomości algorytmu. Jakie są sposoby radzenia sobie z takimi pytaniami? Czy istnieje jakaś akceptowalna odpowiedź lub sposób na obejście tych pytań?


title: Jaka jest dobra praktyka w przypadku przechowywania bardzo krótkiego, wstępnie zdefiniowanego zestawu danych?

text: Kiedy pracowałem nad projektem programistycznym. Natknąłem się na problem, w którym dane musiałem przechowywać w dwóch różnych zmiennych. Pierwsza była porcją danych, a druga była, no cóż, kolejną porcją danych, a kolejność, w jakiej napływały informacje, naprawdę nie miała znaczenia. Musiałem więc dokonać wyboru: mogłem nazwać je „miasto1” i „miasto2”, albo „pierwsze miasto” i „drugie miasto”. Mając na uwadze kwestię czasu, postanowiłem po prostu pozostać przy `city1` i `city2`. Ale jaki byłby ~~lepszy~~ dobry wybór, a przynajmniej co mógłbym zrobić zamiast tego?


title: Nowa licencja podobna do AGPL, ale tylko dla Javascript i CSS

text: Zajmuję się tworzeniem oprogramowania (wtyczka WordPress) w PHP oraz Javascript i CSS. Kod PHP musi być objęty licencją GPL, ale CSS i Javascript mogą być objęte inną licencją (o ile dobrze rozumiem). Zastanawiam się nad napisaniem bardziej liberalnej wersji licencji AGPL i wykorzystania jej dla Javascript i CSS. Byłoby to jak AGPL, ale dotyczyłoby tylko plików dostępnych w sieci** (np. Javascript i CSS). Motywacja: 1. Chcę, aby użytkownicy mojego oprogramowania oraz małe firmy, które używają i produkują oprogramowanie open source, mogli korzystać z mojej wtyczki za darmo, bez konieczności publikowania kodu strony serwera (kod PHP) na licencji GPL. 2. Jednocześnie mogę nie chcieć, aby „duże firmy” kopiowały cały kod, który napisałem, bez płacenia mi czegoś. — Większość „dużych firm” prawdopodobnie nie byłaby w stanie korzystać z omawianej tutaj licencji typu AGPL, a zamiast tego proponowałbym im zakup licencji komercyjnej. **Pytanie 1:** Czy z jakiegoś powodu jest to zły/niemożliwy pomysł? **Pytanie 2:** Czy są jakieś oczywiste problemy z poniższym tekstem licencji? (Czy można zadać tutaj pytanie? Jeśli nie, rozważ edycję tego pytania, aby usunąć tę część — lub dodaj komentarz do mnie, że powinienem to usunąć) ...Tekst licencji AGPL v3..., zobacz http ://www.gnu.org/licenses/agpl-3.0.html Dodatkowe zezwolenie na mocy GNU Affero GPL wersja 3 sekcja 7: Jeśli zmodyfikujesz lub połączysz ten Program lub jakiekolwiek objęte nim dzieło, łącząc go lub łącząc z innym kodem, wtedy każdy inny kod niedostępny zdalnie za pośrednictwem sieci komputerowej nie jest z tego powodu (tj. łączenie go lub łączenie) objęty żadnym z wymagań GNU Affero GPL w wersji 3 lub nowszej. Powiązany link: Lesser Affero GPLv3


title: Programowanie organizacji zadań

text: Mój przyjaciel i ja postanowiliśmy wspólnie stworzyć duży projekt programistyczny. Wcześniej nigdy nie pracowałam w parze (sam miałam sporo projektów i w pracy szef wyznaczał mi zadanie). Ale teraz mamy już pomysł, jaką aplikację mamy zamiar zrobić, jak ją zaplanować… ale jak możemy podzielić odpowiedzialność za kod w projekcie, żebyśmy nie wykonywali nawzajem swojej pracy i tak jest nie tak blisko spokrewnione, że musimy nakładać się na siebie nawzajem? Jak podzieliłbyś zadania, jaki jest oryginalny sposób, aby to zrobić? Jak podzieliłbyś zadania na moduły, jeśli reprezentują one jedną aplikację i są bardzo blisko ze sobą powiązane?


title: "Ja", "My" lub Ani w dokumentacji kodu

text: Piszę (miejmy nadzieję) pomocne komentarze w dokumentacji kodu (C++) typu: Powodem, dla którego to robimy, jest... Powodem, dla którego używam "my" zamiast "ja", jest to, że dużo piszę akademicko gdzie „my” jest często preferowane. Oto pytanie. Czy istnieje dobry powód, aby preferować jedno nad drugim w kodzie dokumentującym: 1. **Użyj „My”:** Powodem, dla którego to robimy jest... 2. **Użyj „I”:** Powodem, dla którego robię to... 3. **Użyj mojego imienia:** Powodem `[moje imię]` to... 4. **Pasywny głos:** Powodem tego jest... 5 **Ani:** Zrób to, ponieważ... wybieram #1, bo jestem przyzwyczajony do pisania w ten sposób, ale dokumentacja nie jest dla autora, tylko dla czytelnika, więc zastanawiam się, czy dodać nazwę dewelopera jest pomocne lub jeśli to tylko dodaje kolejną rzecz, którą należy zmienić podczas utrzymywania kodu.


title: Potrzebuję pomocy w zdefiniowaniu składni powłoki

text: Próbuję zrozumieć więcej o muszlach. Zamierzam wdrożyć jeden i chcę przyjrzeć się temu, co zostało zrobione w przeszłości. W zwykłej powłoce masz funkcje takie jak aliasy i ścieżki względne oraz silne konwencje składniowe, takie jak `--flag` i tak dalej. Społeczność IPython dodała do swoich powłok mnóstwo fajnych funkcji z tylko odrobiną nowej składni. Czy istnieją inne projekty, które demonstrują innowacyjne funkcje lub nowatorskie wykorzystanie składni, które mogą być przydatne podczas projektowania języka powłoki? _Jako przykłady, odpowiedzi podane poniżej, onBoo oraz na Forth i Rebol, są doskonałe._


title: Dlaczego F. Wagner uważa, że „NOT (AI_LARGER_THAN_8.1)” jest niejednoznaczne?

text: W swoim artykule na temat środowisk wirtualnych (część jego metody specyfikacji VFSM) Ferdinand Wagner opisuje kilka nowych sposobów myślenia o algebrze Boole'a jako narzędziu do projektowania oprogramowania. Na stronie 4 tego artykułu PDF, opisując operatory w swoim systemie, mówi tak: > Instrukcje sterujące wymagają wartości logicznych. W związku z tym nazwy muszą być użyte do > uzyskania wyników logicznych. Aby to osiągnąć, chcemy je ze sobą połączyć > za pomocą operatorów logicznych. Nie ma nic złego w używaniu operatorów AND i OR > z ich znaczeniem logicznym. Na przykład możemy napisać: > > DI_ON OR AI_LARGER_THAN_8.1 AND TIMER_OVER > > aby wyrazić sytuację sterowania: wejście cyfrowe jest włączone lub wejście analogowe jest > większe niż 8.1 i timer się skończył. >> Nie możemy użyć operatora NOT, ponieważ wynik negacji logicznej > ma sens tylko dla prawdziwych wartości logicznych. Wynik np. > > NOT (AI_LARGER_THAN_8.1) > > byłby niejednoznaczny. Jeśli „AI_LARGER_THAN_8.1” jest dopuszczalne, dlaczego miałby uważać „NOT (AI_LARGER_THAN_8.1)” za niejednoznaczne?


W językach FP wielokrotne wywoływanie funkcji z tymi samymi parametrami zwraca wciąż ten sam wynik (tj. przezroczystość referencyjną). Ale funkcja taka jak ta (pseudo-kod): function f(a, b) { return a + b + bieżącaDataCzas.sekundy; } nie zwróci tego samego wyniku dla tych samych parametrów. Jak te sprawy są obsługiwane w FP? Jak egzekwowana jest przejrzystość referencyjna? Czy nie jest i zależy to od programistów, aby się zachowywali?


title: Przechowywać konfigurację serwera kompilacji w tym samym repozytorium co kod źródłowy?

text: Niektórzy współpracownicy i ja mamy za zadanie „przepisać” starożytną, niemożliwą do utrzymania aplikację i ukształtować ją w coś wykonalnego. Konfiguruję serwer ciągłej integracji, a ponieważ programujemy dla .NET, myślę, że użyję CruiseControl.net Tworzone oprogramowanie będzie miało dużą liczbę celów kompilacji (język, funkcje itp.), więc zmiany w konfiguracja serwera kompilacji może być bardziej częsta. Ponieważ będą one również zawierać sterowniki i przeprowadzą zestaw testów QA, mogą również stać się dość skomplikowane. Mam więc jedno pytanie, czy powinienem umieścić pliki konfiguracyjne i ustawienia serwera kompilacji w tym samym repozytorium źródłowym, co baza kodu. Wtedy łatwo zorientować się, jaka wersja konfiguracji kompilacji została użyta wraz ze zmianą bazy kodu. Ale coś w tym wydaje mi się trochę "wstrętne", ale nie wiem dlaczego. Lub mogę mieć osobne repozytorium lub lokalizację dla konfiguracji serwera kompilacji i utrzymywać rodowód konfiguracji w stosunku do głównej bazy kodu z komunikatami o zatwierdzeniu. Czy ktoś zna jakąś sytuację i czy napotkałeś problemy podczas jednej lub drugiej? Uważam, że CC.NET może automatycznie sprawdzić informacje o konfiguracji, więc obie opcje powinny działać.