title: Inżynieria odwrotna: do czego to naprawdę służy?

text: Mam kilka niewinnych/początkujących pytań: * Do czego służy inżynieria wsteczna? * Czy jako programista powinienem nauczyć się sztuki inżynierii wstecznej? * Jakie są korzyści dla programisty, który ma w tym doświadczenie?


title: Projektowanie DAO z obiektami potomnymi

text: Jeśli mam obiekty, które reprezentują hierarchię relacji. Na przykład: Osoba Współmałżonek Współmałżonek Kontakt Współmałżonek Osoba Kontakt Osoba Adres Każdy z wymienionych elementów ma tabelę bazy danych związaną z obiektem. Każdy obiekt/tabela ma identyfikator, identyfikator rodzica (identyfikator małżonka dla rekordów adresu małżonka) i identyfikator podstawowy (w tym przykładzie osoba). Biorąc pod uwagę, że hierarchie mogą być dowolnie głębokie i szerokie, jak zaprojektowałbyś warstwę obiektów i dostępu do danych?


title: Rozwiązanie z wieloma projektami i (GitHub) pojedynczym trackerem i repozytorium problemów

text: Mam rozwiązanie Visual Studio z wieloma projektami: * `Acme.Core` * `Acme.Core.Tests` * `Acme.UI.MvcSite1` * `Acme.UI.MvcSite2` * `Acme.UI.WinformsApp1` * ` Acme.UI.WinformsApp2` * ... Całe rozwiązanie jest zaewidencjonowane w jednym repozytorium GitHub (prywatnym). `Acme.Core` zawiera naszą logikę biznesową, a wszystkie projekty `UI` można wdrażać. Projekty UI mają różne wymagania i funkcje, ale niektóre z nich są implementowane w więcej niż jednym projekcie. Wszystkie sprawy są otwierane w pojedynczym trackerze problemów i klasyfikowane za pomocą etykiet (`[MvcSite1]`, `[WinformsApp1]`, itp.), ale myślę, że zaczyna się bałagan. Czy można używać jednego repozytorium i trackera problemów do śledzenia wielu projektów w jednym rozwiązaniu?


Czym różnią się oszacowania nakładu pracy od oszacowań czasu trwania? Obecnie rozumiem, że wysiłek jest związany z ilością pracy wymaganej przez jedną osobę do wykonania zadania, a czas trwania to całkowity czas wymagany do wykonania zadania, niezależnie od zasobów. Czy to powszechnie przyjęta definicja?


title: W jaki sposób warstwy interfejsu aplikacji i bazy danych oddziałują na swoich granicach?

text: Oglądałem jeden z filmów wujka Boba, który przywołał warstwę interfejsu bazy danych. Miał ten diagram pokazujący to: ![Widok wysokiego poziomu](http://i.stack.imgur.com/TKb0b.png) Te strzałki pokazują, że warstwa interfejsu DB jest świadoma i wywołuje warstwę aplikacji i bazy danych, ale nie odwrotnie. Warstwa interfejsu DB zawiera „rekordy danych”. Są to „klasy”, które mają nazwę tabeli i pola kolumn. To są to, co zwykle nazywam DTO. Ale te rekordy danych mają wszystkie pola publiczne i nie ma/kilka metod. Warstwa interfejsu DB jest odpowiedzialna za pobieranie danych z bazy danych, wypełnianie „rekordów danych” i implementowanie interfejsu w warstwie aplikacji, jak na przykład: ![Obraz granicy](http://i.stack.imgur.com /PxFzN.png) Jestem trochę zdezorientowany, ponieważ nigdy wcześniej nie słyszałem o tej separacji. Każdy projekt, nad którym pracowałem, używa DTO w widoku, który najwyraźniej jest błędny (przynajmniej według wideo wujka Boba). Ponadto nigdy nie pracowałem nad projektem, w którym warstwa interfejsu DB wywołuje warstwę aplikacji. Zawsze jest to warstwa aplikacji, która pyta warstwę interfejsu DB o informacje. Na przykład za pomocą DAO. Ale to zaczyna mieć sens. Za każdym razem, gdy używam hibernacji, zawsze wyrywam sobie włosy, ponieważ staram się, aby DTO było bardziej OO, a biblioteka zawsze ze mną walczy. Tak więc, myślę, że próbuję zapytać, jak wygląda kod na/na granicy między warstwą aplikacji i interfejsu bazy danych? Na przykład, w jaki sposób aplikacja uzyskuje implementację Implementation Gateway? Czy Implementacja Bramy Zamówień jest DAO? Nie mam jasnego obrazu tego, w jaki sposób POS może korzystać z bramki zamówień w porównaniu z tym, jak/kiedy bramka zamówień zostanie wypełniona danymi.


title: cały projekt korzystania z usług internetowych z php

text: Jesteśmy w środku dziwnej sytuacji. Wraz z firmą partnerską musimy stworzyć portal internetowy. Mają już wiele funkcji wykonanych na swoim innym portalu, a my jesteśmy firmą zarządzającą projektem. Ale po ich stronie potrzebne są również nowe rozwiązania, które zostały zaprojektowane przez nas. Dziwne jest to, że zrobimy GUI w projekcie i dostarczą nam usługi sieciowe do zbierania danych. Oni używają .NET, a my będziemy używać PHP w projekcie frontendowym. Jak więc sądzisz, że najlepszym podejściem jest unikanie problemów komunikacyjnych i integracyjnych? Na przykład 1. Dostarczamy im tylko pliki widoków, a oni sami robią resztę? 2. Tworzymy projekt PHP, w którym zbieramy wymagane dane za pomocą usług internetowych SOAP/REST? Z góry dziękuję chłopaki.


title: Czy to poprawny sposób używania klas zagnieżdżonych do śledzenia danych?

text: Mam kilka instrumentów. Każdy instrument powinien mieć nazwę (struna) i opis (struna). Każdy instrument może mieć kilka ustawień, z których każda jest serią poleceń (string[] lub List). Chcę, aby ta klasa była elastyczna, abym mógł łatwo dodawać lub usuwać cały instrument lub dodawać lub usuwać konfiguracje dla dowolnego instrumentu, który istnieje w klasie. Na koniec chcę zapisać tę klasę we właściwościach mojego złożenia, aby przy każdym uruchomieniu programu można było ją wczytać. Zastanawiam się również nad jego serializacją i zapisaniem na dysku w celu przeniesienia do innej kopii oprogramowania. Daj mi więc znać, co myślisz o tym podejściu i jeśli uważasz, że można to poprawić lub nawet powinienem rozważyć inną drogę, daj mi znać! przestrzeń nazw MeasurementSuite { /// <summary> /// Ustawienia dla wszystkich instrumentów /// </summary> public class Setups { /// <summary> /// Instrument /// </summary> public class Instrument { / // <summary> /// Nazwa instrumentu /// </summary> public string Nazwa { get; ustawić; } /// <summary> /// Informacje o instrumencie /// </summary> public string Info { get; ustawić; } /// <summary> /// Lista istniejących ustawień /// </summary> public List<Setup> SetupList { get; ustawić; } /// <summary> /// Dodaje konfigurację do instrumentu /// </summary> /// <param name="name"></param> /// <param name="commands">< /param> private void AddSetup(string name, string[] command) { this.SetupList.Add(new Setup(nazwa, polecenia)); } /// <summary> /// Usuwa konfigurację z instrumentu /// </summary> /// <param name="name">Nazwa konfiguracji</param> public void RemoveSetup(string name) { foreach (Konfiguracja konfiguracji w SetupList) { if (setup.Name == nazwa) { SetupList.Remove(setup); } } } } /// <summary> /// Konfiguracja instrumentu /// </summary> public class Konfiguracja { /// <summary> /// Nazwa konfiguracji /// </summary> ciąg publiczny Imię { get; ustawić; } /// <summary> /// Zestawy poleceń do instalacji /// </summary> public string[] CommandSet { get; ustawić; } /// <summary> /// Konstruktor /// </summary> /// <param name="name">Nazwa konfiguracji</param> /// <param name="commands">Zestawy poleceń konfiguracji< /param> public Setup(string name, string[] command) { this.Name = name; this.CommandSet = polecenia; } } } }


title: Czy praktyczne jest porzucenie STL w programowaniu C++?

text: Wiem, że w niektórych dziedzinach (na przykład w branży gier) STL nie jest zalecane. Więc moje pytanie brzmi: czy naprawdę dobrą praktyką jest nieużywanie STL w niektórych przypadkach? Jeśli tak, jakie są największe powody niekorzystania z STL współczesnego C++?


title: Czy istnieją przestarzałe praktyki dotyczące programowania wielowątkowego i wieloprocesorowego, których nie powinienem już używać?

text: We wczesnych dniach FORTRAN i BASIC zasadniczo wszystkie programy były pisane za pomocą instrukcji GOTO. Rezultatem był kod spaghetti, a rozwiązaniem było programowanie strukturalne. Podobnie wskaźniki mogą mieć trudne do kontrolowania cechy w naszych programach. C++ rozpoczął się od wielu wskaźników, ale zalecane jest użycie referencji. Biblioteki takie jak STL mogą zmniejszyć część naszej zależności. Istnieją również idiomy do tworzenia inteligentnych wskaźników, które mają lepsze właściwości, a niektóre wersje C++ zezwalają na odwołania i kod zarządzany. Praktyki programistyczne, takie jak dziedziczenie i polimorfizm, używają wielu wskaźników za kulisami (tak jak w przypadku programowania strukturalnego generuje kod wypełniony instrukcjami gałęzi). Języki takie jak Java eliminują wskaźniki i używają wyrzucania elementów bezużytecznych do zarządzania dynamicznie przydzielanymi danymi, zamiast polegać na programistach, którzy dopasowują wszystkie ich instrukcje new i delete. W mojej lekturze widziałem przykłady programowania wieloprocesowego i wielowątkowego, które wydają się nie używać semaforów. Czy używają tej samej rzeczy pod różnymi nazwami, czy też mają nowe sposoby strukturyzacji ochrony zasobów przed jednoczesnym użyciem? Na przykład konkretnym przykładem systemu do programowania wielowątkowego z procesorami wielordzeniowymi jest OpenMP. Reprezentuje region krytyczny w następujący sposób, bez użycia semaforów, które wydają się nie być zawarte w środowisku. th_id = omp_get_thread_num(); #pragma omp krytyczny { cout << "Witaj świecie z wątku" << th_id << '\n'; } Ten przykład jest fragmentem z: http://en.wikipedia.org/wiki/OpenMP Alternatywnie, podobne zabezpieczenie wątków od siebie za pomocą semaforów z funkcjami wait() i signal() może wyglądać tak: wait(sem) ; th_id = pobierz_numer_wątku(); cout << "Witaj świecie z wątku " << th_id << '\n'; sygnał(sem); W tym przykładzie wszystko jest dość proste i wystarczy prosty przegląd, aby pokazać, że wywołania wait() i signal() są dopasowane i nawet przy dużej współbieżności zapewnione jest bezpieczeństwo wątków. Ale inne algorytmy są bardziej skomplikowane i używają wielu semaforów (zarówno binarnych, jak i liczących) rozłożonych na wiele funkcji ze złożonymi warunkami, które mogą być wywoływane przez wiele wątków. Konsekwencje tworzenia impasu lub niezapewnienia bezpieczeństwa wątków mogą być trudne do opanowania. Czy takie systemy jak OpenMP eliminują problemy z semaforami? Czy przenoszą problem gdzie indziej? Jak przekształcić mój ulubiony semafor za pomocą algorytmu, aby nie używał już semaforów?


title: Jakie są dostępne metody, aby pokazać współpracownikom zalety rozwiązania baza danych + aplikacja w porównaniu z programem Excel?

text: Pracuję w firmie, w której wszędzie są arkusze Excela. Ponieważ moi koledzy nie są programistami, jestem pewien, że nie rozważali, że może istnieć lepszy/łatwiejszy/bardziej produktywny sposób zarządzania ich danymi. Oczywiście opowiadam się za aplikacją, która może wykorzystywać funkcje, które można znaleźć w relacyjnych bazach danych i interaktywnych interfejsach, dostosowanych do potrzeb różnych przepływów pracy obecnie rozproszonych w różnych arkuszach kalkulacyjnych. Problem, jaki mam, polega na tym, że próbowałem wytłumaczyć zalety takich systemów różnym stronom, ale poza napisaniem ich od podstaw, trudno mi ich przekonać, a nawet po prostu wystawić na bardziej zieloną trawę. Ludzie na ogół rozumieją program Excel (nawet jeśli nie są zaawansowanymi użytkownikami), ale mogą się rozmyć, gdy pojawi się słowo „baza danych” lub zaczniesz mówić o „kodzie”. Czy ktoś może zaproponować metodę, z dowodami na to, jak usprawniono przepływ pracy poprzez przejście z arkuszy kalkulacyjnych do rzeczywistej aplikacji? **AKTUALIZACJA** Dziękujemy wszystkim za odpowiedzi. Wydaje się, że nie ma podręcznikowych metod jako takich, a raczej szereg filozoficznych podejść do problemu, tj. problem nie polega na tym, że Excel jest rozrzutny, ale na tym, jak zakomunikować, że czasami są lepsze narzędzia do pracy.


title: Użyj TFS do śledzenia błędów z działu wsparcia produkcyjnego

text: Właśnie przeprowadziłem się do nowej firmy i używają TFS 2010 (2012 za kilka miesięcy) jako systemu kontroli wersji, a ostatnio zaczęli używać go jako systemu śledzenia pracy dla programistów. Jednak wydaje się, że nie ma systemu śledzenia błędów do użytku przez osoby spoza środowiska programistycznego i testowego. Wsparcie produkcyjne otrzymuje raporty o problemach, naprawia je w locie i na bieżąco informuje swoich użytkowników. Trzeba to zmienić, ale tak naprawdę nie chcę mieć specjalnego systemu do śledzenia błędów i śledzenia pracy deweloperów. Czy jest sposób, w jaki mogę stworzyć bardzo lekki sposób wprowadzania błędów do TFS, podobnie jak robi to FogBugz? Logowanie do TFS w celu wypełnienia raportu o błędzie wydaje się dużo cięższe i trzeba je powiązać z konkretną aplikacją. Pomoc techniczna może to zrobić, ale chcę mieć możliwość sprawdzenia elementu i potencjalnie zmienić skojarzenie na coś innego niż aplikacja. Korzystałem z FogBugz w przeszłości i dodając błąd, możesz dodać dużo/mało, ile chcesz do przedmiotu, aby był przynajmniej nagrany, a później możesz go odrzucić, aby uzyskać więcej informacji, gdy przyjdziesz do triage biletu .


title: Projektowanie drzewa binarnego/bazy wiedzy C++

text: Obecnie mam konfigurację szablonu drzewa binarnego, w której moja główna używa go z ciągami do tworzenia gry pytań/odpowiedzi. Korzystam z bazy wiedzy, która działa jako interfejs do drzewa binarnego, którego używa main (main nie ma dostępu do klas węzłów lub drzew binarnych). Wydaje się, że mój kod działa dobrze, wstawiając / zmieniając węzły w razie potrzeby, ale myślę, że mój projekt jest dość zły. Czy zazwyczaj najlepiej jest po prostu umieścić klasy Node i BinaryTree w tym samym pliku, ponieważ żadna z nich nie jest przydatna niezależnie? Czy jest to nawet standard, gdy używa się drzew binarnych, aby po prostu uczynić węzeł klasą zagnieżdżoną wewnątrz klasy drzewa? Nie jestem pewien, jak nie używać zaprzyjaźniania się z klasami (zakładając, że to zły projekt), chyba że po prostu zlikwiduję bazę wiedzy. Bez bazy wiedzy, która mogłaby zobaczyć członków prywatnych węzłów, nie byłaby w stanie przenieść swojego „bieżącego” wskaźnika węzła wokół drzewa za pomocą pytań/domysłów, chyba że przekazałby swój bieżący wskaźnik przez odniesienie do funkcji drzewa binarnego, która przeniosła go za każdym razem. Również z tą konfiguracją drzewo binarne nie robi nic poza dostarczeniem węzła głównego, ponieważ k base obsługuje wstawianie/przestawianie/rozróżnianie między pytaniami i domysłami, więc nie jestem pewien, jak przenieść niektóre funkcje przechodzenia itp. z kbase do btree bez tworzenia kilku funkcji kbase, które wywołują ich odpowiedniki w btree. Czy istnieje sposób na użycie std::swap w każdym pliku (węzeł/drzewo/baza) również bez zanieczyszczania nagłówkiem narzędzia? Ten projekt wygląda na zły, jeśli chodzi o OO, każda pomoc jest mile widziana.


title: DOŁĄCZ vs. DOŁĄCZENIE WEWNĘTRZNE i PEŁNE DOŁĄCZENIE ZEWNĘTRZNE

text: Wiem, że istnieje różnica między „INNER JOIN” i „FULL OUTER JOIN”, widzę to, ale jaka jest różnica między dwoma następującymi: „JOIN… ON…” i „INNER JOIN”. .ON...` i wciąż jeszcze `JOIN...ON...` vs `FULL OUTER JOIN...ON...` Powodem jest to, że myślę, że użycie `JOIN` psuje zapytanie. praca nad tym jest zamieszczona na SO, link do pytania TUTAJ. Więc w zasadzie jaka jest różnica syntaktyczna między rzeczywistymi operacjami na zbiorach? Dziękuję,


title: Motywuj programistów do nadążania za zadaniami administracyjnymi

text: Zaczęliśmy od Scrum, ale ostatnio zmieniliśmy na Kanban, ponieważ naprawione iteracje nie działały w naszej sytuacji. Kanban też nie działa, ponieważ członkowie zespołu nie aktualizują tablicy Kanban. **Każdy rozumie, do czego służy** i dlaczego go mamy. **Wszyscy zgadzają się, że powinniśmy to aktualizować** , ale jakoś tak się nigdy nie dzieje. Powodem jest to, że wypisanie nowej karty i przypięcie jej do tablicy zajmuje zbyt dużo czasu. Jeden programista powiedział, że chce całkowicie elektronicznej płyty, aby uniknąć tego obciążenia, ale nie wierzę, że to rozwiąże problem. (Płyta znajduje się tuż obok kabiny, w której siedzą deweloperzy.) Nie jestem liderem zespołu (w rzeczywistości nie jestem nawet w zespole). Nie mogę nakładać sankcji ani oferować nagród – zresztą i tak bym tego nie chciał, ponieważ uważam, że to źle wpływa na morale zespołu. W każdym razie zespół musi całkowicie samodzielnie administrować każdym znalezionym rozwiązaniem. Skończyły mi się pomysły. Jakieś sugestie?


title: Ile należy rejestrować w środowisku produkcyjnym dla SQLExcpetions?

text: Piszę małą aplikację zorientowaną na bazę danych w Java Swing, która będzie używana wewnętrznie w małej firmie. Nie mam dużego doświadczenia w tworzeniu aplikacji na poziomie produkcyjnym. Nie używam ORM, tylko kilka prostych metod, które uruchamiają zapytania SQL z Java JDBC. W każdej metodzie, która uzyskuje dostęp do bazy danych, używam wyrażenia `try-catch` dla `SQLException` i `IOException`. Czy powinienem tutaj logować się? W przypadku, gdy powinienem, ile powinienem zalogować? Proszę podać przykłady dobrych praktyk w tym przypadku.


title: Dlaczego ludzie wciąż mówią, że Java jest wolna?

text: Od dłuższego czasu w SO iw innych miejscach Java ma opinię powolnej. Od żartów po wiele komentarzy w pytaniach i odpowiedziach, ludzie nadal uważają, że Java jest powolna, opierając się wyłącznie na doświadczeniach z nią w latach 90. To jest mój problem: obaliliśmy (większość) powodów, dla których ludzie uważają, że Java jest wolna. Poza drobiazgami Java jest dość szybka. Dlaczego więc ludzie nadal nie chcą uwierzyć, że Java jest teraz szybka? Czy to część ich sposobu myślenia, że wszystko, co nie jest C/C++, jest powolne? Czy to dlatego, że ludzie nie sprawdzają z czasem? Czy to dlatego, że ludzie są po prostu stronniczy?


title: int* i; lub int *i; lub int * i;

text: Jaka jest twoja ulubiona metoda deklarowania wskaźnika? int* i; lub int *i; lub int * i; lub int*i; Proszę wyjaśnić dlaczego. zobacz też: http://www.stroustrup.com/bs_faq2.html#whitespace


title: Jak radzisz sobie z celowo złym kodem?

text: Istnieje wiele historii o celowo złym kodzie, nie tylko na TheDailyWTF, ale także na SO. Typowe przypadki to: * Posiadanie bezużytecznej, marnującej czas konstrukcji (np. pusta pętla licząca się do jakiejś ogromnej wartości), dzięki czemu programiści mogą łatwo „przyspieszyć” aplikację, usuwając ją, gdy mają do niej zadanie. * Dostarczanie celowo wprowadzającej w błąd, błędnej lub braku dokumentacji w celu wygenerowania kosztownych wniosków o pomoc. * Łatwe generowanie błędów lub, co gorsza, generowanie, mimo że wszystko działało dobrze, blokowanie aplikacji, więc do odblokowania wymagane jest kosztowne wezwanie pomocy technicznej. Punkty te wykazują mniej lub bardziej złośliwą postawę (choć czasami przypadkowo), zwłaszcza pierwszy punkt pojawia się dość często. Jak postępować z takimi konstrukcjami? Zignorować problem, czy po prostu usunąć obraźliwy kod? Powiadom swojego przełożonego lub porozmawiaj z osobą, która wprowadziła „funkcję”?


title: Dla programistów Windows, którzy chcieliby wejść do branży tworzenia oprogramowania dla systemu Mac OS X, jaki jest świetny sposób na rozpoczęcie?

text: Jaki jest najlepszy sposób na rozpoczęcie pracy dla programisty, który chce rozpocząć tworzenie oprogramowania dla systemu Mac OS X?


title: Antywzorzec Stałego Interfejsu - PHP

text: Natknąłem się na artykuł z Wikiepedii, który mówi, że używanie interfejsów do definiowania stałych nie jest dobrą rzeczą. Sugerowanym rozwiązaniem jest zdefiniowanie stałych w końcowej klasie i użycie statycznego importu. To działa dla Javy. Pochodzę ze świata PHP, który nie posiada funkcji „import”. Jakie jest więc dopuszczalne rozwiązanie dla PHP?


title: Tworzenie stron internetowych dla skądinąd bardzo doświadczonego programisty?

text: Od lat zajmuję się programowaniem [hobby] i dobrze znam kilka języków, w tym Objective-C, Java, C#, Python, C i C++. Rozumiem wiele wzorców programistycznych i korzystałem z kilku różnych frameworków. Jednak o tworzeniu stron internetowych nie wiem prawie nic. Szukam zasobu, który zamiast zagłębiać się w kod, daje mi widok z lotu ptaka na to, jak wszystkie technologie współpracują ze sobą. Często widzę kilka rzeczy dogłębnie przestudiowanych, takich jak HTML, CSS, JavaScript, ActionScript, AJAX itp., ale bez wyjaśnienia, gdzie wszystkie one pasują do ogólnego obrazu. Chciałbym również uniknąć zaczynania od wszechogarniającego IDE, ponieważ zwykle utrudnia to zrozumienie tego, co dzieje się w fazie uczenia się. Wszelkie linki, zasoby, najlepiej bezpłatne i online, porady itp. są mile widziane. Dziękuję!


title: Jak się uczyć/stać się zdolnym do nieszablonowego myślenia?

text: W każdym rozwiązywaniu problemów zawsze są ludzie myślący inaczej, którzy przychodzą z szóstą opcją, gdy tylko 5 zostało zaproponowanych przez innych, którzy myślą "nie z pudełka". Proszę powiedzieć, jak można osiągnąć taką umiejętność? I czego potrzeba, aby to osiągnąć?


title: Python — czy to zły wzorzec strategii?

text: Mam projekt w Pythonie, w którym tworzony jest podstawowy obiekt i różne różne atrybuty są mu modyfikowane/nadawane przez to, co uważałem za dobry przykład wzorca strategii. W tej głupiej grze występują wrogowie z wieloma różnymi potencjalnymi wzorcami ruchu. Klasa wroga ma domyślnie podstawowy wzorzec ruchu; w przeciwnym razie wdrażany jest wzorzec strategii, aby losowo wybierać różne w miarę postępu gry. `obj.update()` wroga jest mniej więcej tak: def update(self): self.unique_action() self.check_if_shooting() self.find_new_rect() Więc zamieniłem `self.unique_action` w locie na wzorzec strategii wykorzystujący, jak sądzę, „funkcje wyższego rzędu”. def nowy_wzorzec_ruchu(obj, func): def inner(*args, **kwargs): ##kod do robienia różnych rzeczy ##celowo NIE zwraca funkcji - ##pomysł polega na zastąpieniu domyślnej unikalnej akcji return inner … ##ewentualnie podczas generowania złoczyńców dla poziomu… newEnemy = Enemy() new_AI = random.choice([new_pattern_of_movement, other_pattern, some_other_pattern]) #etc itd. newEnemy.unique_action = new_AI(newEnemy, newEnemy.unique_action) Po chwili pomyślałem: „ siebie, dlaczego nie zmienić ich atrybutów również jako część opakowania? Zmieniasz ich metody, po prostu ustawiasz ich wartość_punktu i grafikę oraz wszystkie te głupie rzeczy” i pomyślałem „dobrze, mogę to zrobić” def alt_action(obj): def inner(*args, **kwargs): ##kod ich unikalnej_akcji ##ponownie, bez zwracania obj.unique_action obj.point_value += 100 obj.color = colors.YELLOW obj.s peed -= 1 return inner Oczywiście jest to uważane za "bardzo JavaScript-y". Uważam jednak, że jest to strasznie proste i lepsze niż ciągnięcie wzdłuż wielu obiektów, które dziedziczą po długim łańcuchu przodków. Moja praca nie jest na linii ani nic tutaj, ale czy w takiej sytuacji naprawdę ważne jest, aby podzielić je na osobne klasy? Przynajmniej pierwszy przykład wydaje się w porządku, ponieważ tak naprawdę jest to po prostu zamiana jednej metody na inną, ale w drugim przykładzie zdecydowanie przedefiniowuję atrybuty obiektu i idę trochę dalej niż przedstawiono tutaj (zastępując „ja” obiektu). metody .draw()` i jeśli to konieczne). To może być złe, ale jest _tak głupio łatwe_. Czy to dobry przykład tego, jak _nie_ zaimplementować wzorca strategii?


title: jeśli jeszcze puste nawiasy klamrowe

text: for(int i = 0; i < str.length(); i++) { if(i != str.length() - 1 && Character.toString(str.charAt(i)).equals("*")) { if(i != 0 && Character.toString(str.charAt(i - 1)).equals(Character.toString(str.charAt(i + 1)))) { } else if(i == 0) { } else { return false; } } } zwróć true co oznaczają puste nawiasy klamrowe po instrukcji if/else lub jaka wartość jest zwracana


title: Piątek po południu, nic do roboty - spróbuj się czegoś nauczyć?

text: Jest piątkowe popołudnie i zrobiłem dosłownie wszystko, czego ode mnie oczekiwałem. Myślę, że powinienem wydać to produktywnie i mam ochotę przejść przez samouczek asp.net mvc (ponieważ nie mamy tu nic MVC) - czy to zła rzecz? Nie chcę marnować czasu w firmie.


title: Jak mogę oszacować moją pierwszą witrynę?

text: Technicznie nie mój pierwszy, ale mój nowy klient chce rozpocząć negocjacje dotyczące kosztu strony internetowej. To dość proste, to trochę więcej niż strona portfolio i powinienem ją ukończyć bez większych komplikacji. Nie wiem jednak, jak zrobić wycenę, żeby przystąpić do negocjacji. Takiej, która nie odstraszy klienta i zapewni, że ja również wykorzystam to, co najlepsze.


title: Jak szczegółowe powinny być informacje o publicznym wydaniu?

text: Jak szczegółowe powinny być uwagi podczas udostępniania aktualizacji oprogramowania? W szczególności, jak szczegółowe powinny być poprawki błędów?


title: generator losowy nie jest wystarczająco dobry?

text: Podczas wywiadu zostałem poproszony o zaimplementowanie generatora losowego w javie bez korzystania z istniejących bibliotek liczb losowych, które przyjmują jako argument int n i zwracają liczbę losową z zakresu od 0 do n. Taka była implementacja, którą dostarczyłem: public static int random(int n) { int r = 0; for (int i =0; i <n;i++) { r+=pomocnik(); } powrót r; } // helper zwracający 0 lub 1 private static int helper() { long t = System.nanoTime(); if (t%2 == 0) { return 1; } else { return 0; } } Powiedział, że to nie w porządku, ale nie powiedział mi, czego się spodziewał. Dlaczego powiedział, że to źle? Jak byś zrobił to inaczej?


title: Ustandaryzowany format dokumentacji kodu, gdzie to jest?

text: Obecnie przyglądam się narzędziom do generowania dokumentacji API i zauważyłem, że najwyraźniej nie ma żadnych wysiłków w zakresie standaryzacji. Styl Javadoc to rodzaj wszechobecnej konwencji... jest używany w Javie (duh), PHP (PHPDocumentor, Doxygen, Stubbles), C/C++ (znowu Doxygen)... i jest nawet obsługa IDE nawet w innych języki, które nie są java. Nawet NaturalDocs, który ma zupełnie inną składnię dokumentacji, ma z nią pewną kompatybilność. Więc moje pytanie brzmi: ** czy są jakieś wysiłki w zakresie standaryzacji składni dokumentacji w kodzie?** , która z kolei może być używana do generatorów dokumentacji lub metadanych języka w różnych językach?.


title: Po co tworzyć bibliotekę do własnej aplikacji?

text: Dlaczego programista miałby kiedykolwiek rozwidlić bibliotekę w celu włączenia jej do powszechnie używanej aplikacji? Zadaję to pytanie, ponieważ czytałem artykuł o tym, dlaczego Chromium nie jest pakowany dla wielu dystrybucji Linuksa, takich jak Fedora. Najwyraźniej jest to w dużej mierze spowodowane faktem, że Google rozwidlał szereg bibliotek, zmodyfikował je i umieścił w Chromium. Zwiększyło to złożoność wydań opakowań. Istnieje wiele powodów, dla których może to być złe, ale jak silną argumentację możesz zrobić w przypadku dużej, szeroko stosowanej aplikacji, takiej jak Chromium? Oryginalny artykuł: http://ostatic.com/blog/making-projects-easier-to-package-why-chromium-isnt-in-fedora Czy zwykle nie opłaca się wprowadzać drobnych modyfikacji we własnym programie w aby skorzystać z popularnej i dobrze rozwiniętej biblioteki?


title: Kombinator parsera, który wygląda jak BNF

text: Czy można skonstruować bibliotekę kombinatora parsera, która czyta jak gramatyka BNF? Nie znam żadnego, więc zacząłem się zastanawiać, czy istnieją powody, dla których jest to niemożliwe lub niepożądane. Wydaje mi się, że byłoby to najlepsze z obu światów. Języki funkcjonalne, takie jak F#, umożliwiają przeciążanie operatorów. Czy to tylko kwestia dostarczenia odpowiedniej składni, czy może jest coś więcej?


title: Jaka jest korzyść z przekazywania delegata do konstruktora zamiast po prostu tworzenia kodu klienta i przekazywania ParserSettings?

text: Odpowiadając na pytanie dotyczące Stack Overflow, biblioteka wydawała się mieć dziwny sposób na określenie konfiguracji poprzez `Akcję` przekazaną do konstruktora: public Parser(Action<ParserSettings> configuration) { if (configuration == null) throw new ArgumentNullException ("konfiguracja"); this.settings = new ParserSettings(); konfiguracja(to.ustawienia); this.settings.Consumed = prawda; } internal Parser(ParserSettings settings) { this.settings = ustawienia; this.settings.Consumed = prawda; } Aby określić ustawienia, podajesz `Action<ParserSettings>`, który modyfikuje ustawienia: var parser = new Parser( s => { s.CaseSensitive = false; } ); Nie rozumiem, co osiąga ten wzór. Jaka jest korzyść z przekazania delegata do konstruktora zamiast po prostu tworzenia kodu klienta i przekazywania `ParserSettings` do konstruktora?


title: Czy uczciwe jest ponowne naliczanie opłat za sprawdzenie, dlaczego mój kod nie działa na serwerze klienta?

text: Tak więc otrzymałem zadanie od klienta, aby pomóc mu przekonwertować jego menu wp na rozwijane menu javascript. Zrobiłem na moim serwerze deweloperskim. Zobaczył zmianę i otrzymałem zapłatę. Dostarczam kod, który go wdraża. Ale bez zmian na jego serwerze. Więc muszę spędzić godziny na debugowaniu go na jego serwerze. Okazuje się, że jego druga wtyczka nie jest zgodna z moją zmianą. Ta wtyczka jest naprawdę niestandardowa. Muszę zmienić kod, aby upewnić się, że jest kompatybilny z tą wtyczką. Moje pytanie brzmi: **czy mogę obciążyć go opłatami za godziny spędzone na debugowaniu ORAZ na naprawie?** czy **czy nadal jestem odpowiedzialny za upewnienie się, że mój kod został prawidłowo wdrożony?**


title: Czy lepiej specjalizować się w kilku dziedzinach, czy mieć ogólne umiejętności w wielu?

text: Moja sytuacja jest taka. Niedługo kończę studia na kierunku informatyka. Przez jakiś czas pracowałem jako Web Developer w małej firmie zajmującej się projektowaniem graficznym. W tym czasie pracowaliśmy nad kilkoma dużymi projektami dla lokalnej uczelni. W końcu musiałem odejść z tej pracy po tym, jak gospodarka załamała się z powodu braku dostępnej pracy. Od tego czasu nie miałem żadnej pracy związanej z moją dziedziną, ponieważ zwykle nie ma wielu dostępnych w okolicy, w której mieszkam. Aktywnie szukałem pracy przez ostatnie 4 miesiące i otrzymałem bardzo niewiele pozytywnych opinii. To sprawiło, że zacząłem się zastanawiać, czy moje kwalifikacje są takie, jakie powinny być. Powiedziałbym, że ogólnie mam podstawową lub średnio zaawansowaną znajomość wielu języków i systemów. Nie jestem pewien, czy mógłbym powiedzieć, że specjalizuję się w czymkolwiek, chociaż tworzenie stron internetowych przy użyciu PHP/MySQL byłoby najbardziej zbliżone do specjalizacji. Biorąc to pod uwagę, w tym momencie nie jestem pewien, czy chcę kontynuować tylko tworzenie stron internetowych, ponieważ wolałbym bardziej zająć się tworzeniem aplikacji desktopowych. Czy pracodawcy bardziej poszukują osób o specjalnościach niż tych, które mają szerokie umiejętności ogólne?


title: Kiedy powinienem rozpocząć kodowanie po stronie serwera?

text: Tworzę stronę internetową, na której użytkownicy mogą zamieszczać własne filmy. Na razie buduję tylko główną strukturę za pomocą HTML i CSS. Czy lepszą praktyką jest pisanie kodu po stronie serwera _przed_ zakończeniem układu witryny? Czy to nie robi różnicy?


title: Co Linus Torvalds miał na myśli, mówiąc o przenośności?

text: W debacie z Andrew Tanenbaumem na temat architektury mikrojądra kontra monolitycznej architektury systemu operacyjnego, Linus Torvalds powiedział: > Przenośność jest dla ludzi, którzy nie potrafią pisać nowych programów. Co przez to miał na myśli?


title: Dokładność GPS z oprogramowaniem

text: Rozmawiałem z facetem, który twierdził, że pracuje (programuje) w systemie GPS, który będzie dokładny co do centymetra. * Czy to w ogóle możliwe? * Jaki jest czynnik ograniczający, duża odległość między satelitą a GPS, czy może to oprogramowanie? * Czy można ulepszyć oprogramowanie, aby GPS był dokładny do centymetrów?


title: Licencja open source, która wymaga widocznego przypisania autorstwa w utworach pochodnych?

text: Moja firma ma aplikację internetową po stronie klienta, którą chcielibyśmy udostępnić. Nie chcemy narzucać żadnych ograniczeń użytkowania, z wyjątkiem tego, że wszelkie modyfikacje i prace pochodne powinny zawierać **widoczne** przypisanie, np. pokaż naszą nazwę i/lub logo - chcemy, aby było widoczne, że nasz kod jest używany w aplikacji. Jak rozumiem, podczas gdy licencje takie jak BSD 3-klauzula zawierają wymóg uznania autorstwa, można je zaspokoić jedynie komentarzem HTML. Jak uzyskać licencję, aby zapewnić, że utwory pochodne są wyraźnie oznaczone?


title: Jaki jest najlepszy sposób obsługi zawartości dynamicznej?

text: Prowadzimy więc witrynę, w której znajdują się elementy interfejsu, które potencjalnie mogą zostać zmienione w dowolnym momencie w backendzie. W szczególności prowadzimy serwis internetowy, w którym pewne funkcje są ładowane dynamicznie. Jednak zdarzają się sytuacje, w których usuwamy pewne funkcje i chcemy, aby środowisko było jak najbardziej płynne dla użytkownika. Rozważyliśmy teraz kilka metod rozwiązania tego problemu. 1. Pinguj serwer co kilka sekund. Jeśli funkcje są nieaktualne/nie są już dostępne, odśwież stronę użytkowników. Chociaż działałoby to najlepiej, wydaje mi się, że taka ilość IO nie może być zbyt dobra. 2. Gdy użytkownik kliknie funkcję, jeśli jest nieaktualna/niedostępna, powiadom go w odpowiedzi i odśwież stronę. To również działałoby całkiem dobrze. Chyba bardziej zastanawiam się, jak działają aplikacje internetowe, takie jak Dokumenty Google, w których masz treści, które muszą być synchronizowane dla wielu użytkowników, a to nie jest przestarzałe o kilka sekund Przepraszamy, jeśli nie jest to najlepsze miejsce, aby o to zapytać . Pomyślałem, że to bardziej pytanie o architekturę witryny i że może to być miejsce, w którym można zadać to pytanie przez SO.


title: Porady dotyczące nauki JavaScriptu z wcześniejszą znajomością C++?

text: Ostatnio zainteresowałem się nauką języka JavaScript do tworzenia stron internetowych. Obecnie znam HTML, CSS oraz C++ dla początkujących/średniozaawansowanych. Rozumiem polimorfizm, dziedziczenie i wszystkie te fajne rzeczy. Czy któraś z tych umiejętności zostanie przeniesiona na JavaScript? Pod jakimi kluczowymi względami JavaScript różni się od C++?


title: Jak mogę zbierać dane klienta w Google App Engine bez nadmiernego korzystania z Datastore/instancji backendowych?

text: Jednym z projektów, nad którymi pracuję, jest silnik ankiet online. To mój pierwszy duży komercyjny projekt w Google App Engine. Potrzebuję Twojej porady, jak zbierać statystyki i sprawnie je zapisywać w DataStore bez bankructwa mnie. Wstępne wymagania to: * Po zakończeniu ankiety klient wysyła listę par [ID (int) + PercentHit (double)]. Ta lista pokazuje, jak blisko odpowiedzi tego użytkownika pasują do wstępnie zdefiniowanych odpowiedzi osób odpowiadających na odnośniki (które są identyfikowane przez identyfikatory). Nazywam je „identyfikatorami celów”. * Twórca ankiety chce zobaczyć zagregowany % dla podanych identyfikatorów za ostatnią godzinę, konkretny przedział czasowy lub od początku ankiety. * Niektóre ankiety mogą mieć tysiące odpowiedzi docelowych/referencyjnych. Stworzyłem więc klasę publiczną encji HitsStatsDO implementuje Serializable { @Id przejściowy private Long id; przejściowe prywatne Wersja długa = (długa) 0; przejściowe prywatne Długi startDate; @Parent przejściowy klucz prywatny rodzic; // fałszywy rodzic zawierający identyfikator celu @Transient int targetId; prywatny podwójny avgPercent; prywatny długi hitCount; } Ale napisanie HitsStatsDO dla każdego celu od każdego użytkownika dałoby dużo danych. Na przykład miałem ankietę z 3000 celów, na którą odpowiedziało ~ 4 miliony osób w ciągu jednego tygodnia, a 300 000 osób wzięło udział w ankiecie pierwszego dnia. Nawet jeśli założymy, że odpowiadali na to równomiernie przez 24 godziny, dałoby nam to ~1040 zapisów na sekundę. Oczywiście osiąga limit współbieżnych zapisów w Datastore. Postanowiłem, że będę zbierać dane przez godzinę i je zachowam, dlatego w `HitsStatsDO` znajdują się `avgPercent` i `hitCount`. Instancje GAE są bezstanowe, więc musiałem użyć dynamicznej instancji backendowej. Mam coś takiego: // Zawiera statystyki z jednej godziny private class Shard { ReadWriteLock lock = new ReentrantReadWriteLock(); Mapa<Integer, HitsStatsDO> mapa = new HashMap<Integer, HitsStatsDO>(); // Kluczem jest ID celu public void saveToDatastore(); public void updateStats(Long startDate, Map<Integer, Double> hits); } i mapa z fragmentem na bieżącą i poprzednią godzinę (która nie zostaje tutaj na długo) prywatne fragmenty HashMap<Long, Shard> = new HashMap<Long, Shard>(); // Klucz to HitsStatsDO.startDate Tak więc raz na godzinę zrzucam fragment z poprzedniej godziny do Datastore. Dodatkowo mam `class LifetimeStats`, która przechowuje `Map<Integer, HitsStatsDO>` w memcached, gdzie map-key jest identyfikatorem celu. Również w mojej metodzie haka zamykania backendu zrzucam statystyki z nieskończonej godziny do Datastore. Jest tu tylko jeden poważny problem - **Mam tylko JEDNĄ instancję backendową** :) Pojawiają się następujące pytania, na temat których chciałbym poznać Twoją opinię: * Czy mogę to zrobić bez użycia instancji backendowej ? * Co jeśli jedna instancja nie wystarczy? * Jak mogę podzielić dane między wiele instancji backendowych _dynamic_? Trudno, bo nie wiem ile mam, bo Google tworzy nowy w miarę wzrostu obciążenia. * Wiem, że mogę uruchomić dokładną liczbę instancji backendowych _resident_. Ale ile? 2, 5, 10 ? A co, jeśli przez tydzień nie mam żadnego obciążenia. Ciągłe uruchamianie 10 instancji backendowych jest zbyt drogie. * Co mam zrobić z danymi od klientów, gdy instancja zaplecza nie działa/restartuje? Należy zauważyć, że nie mogę zbytnio zmienić klienta. Obecnie jest to JavaScript osadzony na stronach internetowych klientów. Mogę w jakiś sposób zmienić RPC, ale architektonicznie nie mogę zastąpić klienta np. formularzami Google Docs.


title: Jak zdobyć doświadczenie w dużych bazach danych?

text: Napisałem aplikacje na bardzo małą skalę i kod, który piszę, działa dla nich dobrze. Ale często zastanawiałem się, jak pisany przeze mnie kod po stronie serwera mógłby skalować się od setek zapytań dziennie do milionów. Również patrząc na możliwe prace/projekty, ludzie często szukają programistów z doświadczeniem w tego rodzaju projektowaniu baz danych o dużym natężeniu ruchu, więc chciałbym przynajmniej móc powiedzieć, że nie pracowałem nad tak popularnym projektem, ale przynajmniej próbowałem to zasymulować. Czy istnieją narzędzia lub frameworki, które mogą generować duży ruch lub przynajmniej symulować, co stanie się z ruchem o różnych rzędach wielkości, abym mógł poćwiczyć pisanie zoptymalizowanego kodu dla aplikacji o większym natężeniu ruchu?


title: Co jest nie tak z moją logiką algorytmu dziel i zwyciężaj dla problemu z najbliższą parą?

text: Śledziłem kurs Coursera na temat algorytmów i wpadłem na pomysł dotyczący algorytmu dziel/zwyciężaj dla problemu najbliższej pary, który chcę wyjaśnić. Zgodnie z algorytmem prof. Roughgardena (który możesz zobaczyć tutaj, jeśli jesteś zainteresowany): Dla danego zbioru punktów P, z których mamy dwie kopie - posortowane w kierunku X i Y - Px i Py, algorytm można podać jako NajbliższePair(Px,Py): 1. Podziel punkty na lewą połowę - Q i prawą połowę - R i utwórz posortowane kopie obu połówek wzdłuż kierunków x i y - Qx,Qy,Rx,Ry 2. Niech NajbliższePair(Qx, Qy) będą punktami p1 i q1 3. Niech najbliższyPair(Rx,Ry) będzie p2,q2 4. Niech delta będzie minimum dist(p1,q1) i dist(p2,q2) 5. To jest niefortunny przypadek, niech p3 ,q3 być najbliższąSplitPair(Px,Py,delta) 6. Zwróć najlepszy wynik Teraz wyjaśnienie, którego chcę, jest związane z krokiem 5. Powinienem powiedzieć to wcześniej, że to, co sugeruję, nie jest wcale poprawą , ale jeśli nadal jesteś zainteresowany, czytaj dalej. Prof R mówi, że skoro punkty są już posortowane w kierunkach X i Y, aby znaleźć najlepszą parę w kroku 5, musimy iterować po punktach w pasie o szerokości 2*delta, zaczynając od dołu do góry i w pętli potrzebujemy tylko 7 porównań. Czy można to ulepszyć tylko do jednego? To, jak myślę, że jest to możliwe, wydawało się trochę trudne do wyjaśnienia zwykłym tekstem, więc narysowałem diagram, napisałem go na papierze i przesłałem tutaj: ![tutaj wpisz opis obrazu](http://i.stack.imgur.com/ XhqWc.jpg) Ponieważ nikt inny tego nie wymyślił, jestem prawie pewien, że w moim toku myślenia jest jakiś błąd. Ale dosłownie myślałem o tym już od GODZIN i po prostu MUSIAŁEM to opublikować. To wszystko, co jest w mojej głowie. Czy ktoś może wskazać, gdzie robię źle?


title: Dlaczego można wywołać MaybeChannelBound?

text: Klasa Queue w bibliotece kombu Pythona dziedziczy po MaybeChannelBound, które z kolei implementuje metodę **call** (dzięki czemu można ją wywoływać). Sama metoda **call**() jest cienkim opakowaniem wokół metody bind(). Nie jest jasne, dlaczego tak się stało, ponieważ wywołanie metody bind() wydaje się (przynajmniej w moim prostym umyśle) jaśniejsze i bardziej opisujące intencje funkcji. Dlaczego ktoś miałby użyć metody **call** () w takiej sytuacji?


title: Jak wdrożyć MPL? Co to za „Dowód A”?

text: Mam zamiar rozpocząć projekt open-source, który będzie licencjonowany w ramach Publicznej Licencji Mozilli (MPL). Problem w tym, że nie jestem pewien, co to za „Dowód A”... Czy mam umieścić ten przegadany „Dowód A” w każdym pliku źródłowym zawartym w projekcie? A co z właściwym tekstem MPL; czy muszę podać pełny tekst MPL w katalogu głównym projektu? Byłbym naprawdę wdzięczny, gdyby ktoś wskazał mi przewodnik, jak _wydawać_ oprogramowanie pod MPL (w przeciwieństwie do _używania_ oprogramowania z MPL). TIA.


title: Zamek FIFO z wieloma wątkami/procesami

text: Muszę użyć FIFO w mojej aplikacji w linux+C, mam wiele wątków i procesów, przeczytałem trochę, że pisanie do FIFO jest atomowe poniżej pewnej wartości (wierzę, że 4k) szczególnie piszę max 300 bajtów, Am Jestem tu bezpieczny?


title: Wstrzykiwanie zależności: tylko dla obiektów jednoinstancyjnych?

text: Co zrobić, jeśli chcę również oddzielić moją aplikację od klas takich jak Product lub User? (które zwykle mają więcej niż jedną instancję) Spójrz na ten przykład: class Controller { public function someAction() { $product_1 = new Product(); $produkt_2 = nowy produkt(); // zrób coś z produktami } } Czy można powiedzieć, że kontroler teraz zależy od produktu? Myślałem, że moglibyśmy je też rozdzielić (tak jak w przypadku obiektów jednoinstancyjnych, takich jak Database) W tym przykładzie, jakkolwiek brzydkie, są one oddzielone: class Controller { public function someAction(ProductInterface $new_product) { $product_1 = clone $new_product ; $produkt_2 = klon $nowy_produkt; // zrób coś z produktami } } Czy ktoś już kiedyś coś takiego zrobił? Czy to nadmierne?


title: Czy *dowolne* zadanie programu może być wyrażone bez stanu?

text: To jest pytanie teoretyczne, ale po wielu latach programowania w „normalnej” technice imperatywnej, używając głównie C++, odkryłem ten inny świat programowania funkcjonalnego, na który natknąłem się przypadkowo podczas nauki JavaScriptu. To skłoniło mnie do zastanowienia się, czy można technicznie zastąpić dowolny kompletny program zorientowany na stany inną implementacją, która jest czysto funkcjonalna i bez stanu? To intrygujący pomysł i muszę przyznać, że w programowaniu funkcjonalnym jest przejrzystość i elegancja, która naprawdę mnie zaskoczyła.


title: Czy niektóre najlepsze praktyki zależą od umiejętności?

text: Czy istnieją dowody na to, że niektóre najlepsze praktyki tworzenia oprogramowania zależą od poziomu umiejętności programowania? Chodzi mi o to, że te metody są dobre, ale może sposób ich użycia lub zakres może się różnić? To pytanie pojawiło się po przeczytaniu komentarza Paula Grahama na temat OOP i ostatniego punktu tej przyjętej odpowiedzi. Proponuje, że gdzie, jak i ile użyć testów jednostkowych może zależeć od twoich umiejętności programowania. Czy najlepsi programiści stosują inne podejścia niż przeciętni programiści?


title: Czy kontrola jakości lub testowanie wiąże się z dużym narzutem, czy też nie jest właściwie wykorzystywane?

text: Z moich doświadczeń w tworzeniu oprogramowania (np. Waterfall ) widzę, że w większości przypadków to zespół programistów poci się z ludźmi z BA, aby uzyskać jasność wymagań. Następnie programiści starają się dotrzymać terminów dostawy. Gdzie jest kontrola jakości — mogą być bezpłatne — ale połączą się z modą dopiero po dostarczeniu kodu. Następnie rozpoczyna się mnóstwo komunikacji dotyczącej tego, co jest wadą, a co wymaga zmiany / jasności potrzebnej. Z punktu widzenia kontroli jakości – zarejestruj defekt / błąd / problem – a następnie zespół programistów jest odpowiedzialny za to, aby go rozwiązać. Oczywiście jest to problematyczne i wpływa na moją opinię na temat roli i wartości, jaką zapewnia QA w modelu Waterfall. Pytanie brzmi, czy Agile jest rzeczywiście nastawiony na zmniejszenie tego „marnotrawstwa” poprzez zaangażowanie testów na wczesnym etapie rozwoju, tak aby problemy zostały wyeliminowane na początku? Jeśli tak, to jakie aspekty Agile pomagają rozwiązać niektóre z powyższych problemów, których doświadczyłem?


title: Proszę wyjaśnić stwierdzenie, że funkcja an+b należy do O(n^2) and oraz Θ(n)?

text: Powiedzmy, że mam funkcję liniową `f(n)= an+b`, jaki jest najlepszy sposób udowodnienia, że ta funkcja należy do O(n2) i `Θ(n)`? Nie potrzebuję tutaj matematycznego rygoru. Potrzebuję odpowiedzi programistów. Jakiś logiczny sposób wyjaśnienia. Właśnie dlatego nie zamieściłem pytania w matematyce Q&A, a zamiast tego w Q&A programistów.


title: Czy istniał jakiś formalny dowód, że dokumentacja jest ogólnie niekompletna i przestarzała do pewnego stopnia?

text: Jestem web developerem i obecnie ponownie znalazłem się w sytuacji, w której częściowo bezmyślny dział ops wymaga „kompletnej” dokumentacji wymaganej do wsparcia technicznego naszej aplikacji przez firmę trzecią, w tym „każdej możliwej sytuacji błędu”. Ponieważ nie ma wspólnej płaszczyzny, do czego ta osoba trzecia powinna być zdolna (ops ciągle mówią o „człowiek z ulicy powinien to umieć”), uważam, że taka dokumentacja jest niemożliwa i moje doświadczenie mówi mi, że każda dokumentacja jest przestarzałe i niekompletne, nawet jeśli tylko trochę. Nie mogę przestać się zastanawiać: czy były jakieś badania, a może nawet dowód, że tak właśnie jest? Może można tu zastosować nawet twierdzenia o niezupełności Gödla?


title: RequestContextHolder.currentRequestAttributes() i dostęp do sesji HTTP

text: Potrzebuję dostępu do sesji `HTTP` do pobierania i przechowywania niektórych informacji. Używam `Spring-MVC` dla mojej aplikacji i mam tutaj 2 opcje. 1. Użytkownik `Request/ Session` w mojej metodzie Controller i wykonaj moją pracę. 2. Użyj `RequestContextHolde`, aby uzyskać dostęp do informacji o sesji. Oddzielam pewną logikę obliczeń od kontrolera i chcę uzyskać dostęp do informacji o sesji w tej nowej warstwie, a do tego mam 2 opcje 1. Przekaż sesję lub obiekt Request do innej metody w innej warstwie i wykonaj swoją pracę. 2. użyj `RequestContextHolder.currentRequestAttributes()`, aby uzyskać dostęp do `request/ session` i wykonać moją pracę. Nie jestem pewien, która droga jest właściwa? przy drugim podejściu widzę, że wywoływanie metod będzie bardziej przejrzyste i nie muszę za każdym razem przekazywać `request/ session`.


title: Jak odróżnić rzeczy należące do standardowej biblioteki, konkretne klejnoty od tych, które są generowane przez użytkowników w Rubim?

text: Jestem początkującym programistą, który z różnych powodów używa istniejącego kodu Rubiego do nauki programowania. Moim celem jest umiejętność zrozumienia i ewentualnego rozszerzenia tej bazy kodu. Jednak trudno mi zrozumieć, co to jest _standardowa funkcja biblioteki_ , _gem function_ lub funkcja _user-created_. Rozróżnianie funkcji może nie być jedyną rzeczą, którą muszę zrobić, mogą też poruszać się inne "rzeczy". Powodem tego pytania jest to, że chcę móc odczytać kod, a kiedy przechodzę przez to określenie, jaką dokumentację muszę przeczytać, aby zrozumieć kod. Stąd moje pytanie brzmi: w kodzie Rubiego, jak odróżnić rzeczy należące do biblioteki standardowej, konkretne klejnoty od tych, które są generowane przez użytkowników, abym mógł zajrzeć we właściwe miejsce, aby zrozumieć, jakie zidentyfikowane funkcje (i inne rzeczy) nie?


title: Licencja Apache, v2.0: licencja praw autorskich a licencja patentowa

text: > # Licencja Apache, v2.0 > > [..] > > **2\. Przyznanie licencji praw autorskich** > > Z zastrzeżeniem warunków niniejszej Licencji, każdy Kontrybutor niniejszym > udziela Tobie bezterminowej, ogólnoświatowej, niewyłącznej, nieodpłatnej, > bezpłatnej, nieodwołalnej licencji dotyczącej praw autorskich do powielania, przygotowywania Prace Pochodne >, publiczne prezentowanie, publiczne wykonywanie, udzielanie podlicencji i rozpowszechnianie Dzieła > oraz takich Prac Pochodnych w formie Źródła lub Obiektu. > > [..] > > **3\. Przyznanie licencji patentowej** > > Z zastrzeżeniem warunków niniejszej Licencji, każdy Kontrybutor niniejszym > udziela użytkownikowi wieczystej, ogólnoświatowej, niewyłącznej, bezpłatnej, bezpłatnej > > nieodwołalnej licencji (z wyjątkiem przypadków określonych w niniejszej sekcji) licencja patentowa na tworzenie, > składanie, wykorzystywanie oferty sprzedaży, sprzedaży, importu lub innego transferu Dzieła, > gdzie taka licencja ma zastosowanie tylko do tych roszczeń patentowych, na które licencja takiego > Współtwórcy jest z konieczności naruszana przez jego Wkład(y) ) samodzielnie lub > poprzez połączenie ich Wkładu (Wkładów) z Dziełem, do którego taki Wkład (Wkłady) został przesłany. Jeśli wniesiesz spór patentowy przeciwko > dowolnemu podmiotowi (w tym roszczenie wzajemne lub wzajemne w procesie sądowym), twierdząc, że > Dzieło lub Wkład włączony do Dzieła stanowi bezpośrednie lub > przyczyniające się do naruszenia patentu, wówczas wszelkie licencje patentowe przyznane Tobie w ramach niniejszej Licencji na prace te wygasną w dniu wniesienia > takiego sporu. Chociaż znaczenie przepisu **Licencja praw autorskich** jest dość jasne, nie zrozumiałem znaczenia przepisu **Licencji patentowej**. * Jakie korzyści zapewnia współtwórcom postanowienie „Przyznanie licencji patentowej”? Dlaczego są przydatne? * Czy klauzula „Przyznanie licencji patentowej” jest przydatna tylko w przypadku sporu patentowego?


title: Jak przydatne są makra Lisp?

text: Common Lisp pozwala pisać makra, które wykonują dowolną transformację źródła. Schemat zapewnia higieniczny system dopasowywania wzorców, który pozwala również na wykonywanie transformacji. Jak przydatne są makra w praktyce? Paul Graham powiedział w Beating the Averages, że: > Kod źródłowy edytora Viaweb zawierał prawdopodobnie około 20-25% makr. Jakie rzeczy ludzie faktycznie robią z makrami?


title: Jak zapobiegać głębokim wcięciom?

text: Jakie kroki i środki mogę podjąć, aby zapobiec głębokim wcięciom w moim kodzie?


title: Czy naprawdę potrzebuję wyłączenia odpowiedzialności za wolne oprogramowanie?

text: Jeśli publikuję na swojej stronie internetowej jakieś oprogramowanie, które można pobrać i używać bezpłatnie, czy nadal potrzebuję wyłączenia odpowiedzialności? To znaczy, nawet niczego nie sprzedam, nie ma umowy, więc dlaczego miałaby istnieć _dorozumiana gwarancja_? (Co również sprawia, że zastanawiam się, dlaczego istnieją zastrzeżenia dotyczące takich rzeczy, jak licencja MIT.) **Edytuj:** Nie jestem obywatelem USA, szukam odpowiedzi tak ogólnych, jak to możliwe i tak szczegółowych, jak to konieczne.


title: Jakie są obecnie najlepsze praktyki dotyczące wielowątkowości w C?

text: Przez większość życia byłem programistą Java (i PHP), ale będę musiał używać C w moim następnym projekcie. Pamiętam kilka podstawowych rzeczy, które robiliśmy w szkole z widelcem, pthreadem, semaforami itp., ale nie jestem pewien, czy to nadal jest „droga do zrobienia” tutaj, czy też były jakieś ostatnie zmiany/ulepszenia itp. Wyniki Google wydają się dość przestarzałe. Czy to po prostu oznacza, że jest to wciąż aktualny „stan techniki”? A może będę musiał użyć (niezależnej od systemu) biblioteki, takiej jak glib, jeśli chcę abstrakcji wyższego poziomu, na przykład zsynchronizowanych kolejek? Jakie są inne biblioteki? (Program będzie musiał działać tylko na Linuksie)


title: Szyny + architektura Heroku

text: Jestem w trakcie tworzenia aplikacji Railsowej, którą planuję następnie wdrożyć w Heroku. Nigdy nie uruchamiałem aplikacji w Heroku (poza darmową prostą aplikacją), więc mam kilka pytań na temat tego, jak powinienem zaprojektować niektóre aspekty mojej aplikacji do uruchomienia. Chcę, aby usługa działała zgodnie z harmonogramem, aby sprawdzać, czy nieaktywni użytkownicy wysyłają e-maile typu „od jakiegoś czasu Cię nie widzieliśmy”. Czy to byłaby tylko własna hamownia robotnicza w Heroku? A może byłoby to zintegrowane z aplikacją internetową jako swego rodzaju praca w tle? W związku z tym będę miał hamownię roboczą, która będzie obsługiwać wysyłanie e-maili z potwierdzeniem konta, między innymi losowymi e-mailami, czy byłoby sensowne, aby ta operacja była połączona z powyższym procesem? A może musiałaby to być zupełnie osobna hamownia? Wykonałem wiele tego typu prac w .Net, stąd niektóre z moich nieporozumień przy tym przejściu na Railsy.


title: Testowanie na różnych systemach operacyjnych

text: Jestem programistą, który ma zainstalowany system Windows 7 jako system operacyjny hosta z vmware. Mam zainstalowany linux przy użyciu vmware. Dzięki temu mogę testować aplikacje java i c++ na Windows 7 i Linux. Chcę je również przetestować na Windows 8 i chcę zapoznać się z Windows 8. Zastanawiam się, czy zaktualizować system operacyjny hosta do Windows 8, czy zainstalować go na vmware?


title: Rozwijający się programiści mobilni w organizacji zajmującej się tworzeniem stron internetowych

text: Pracuję dla "dojrzałego start-upu internetowego" jako web developer (głównie używając PHP). Nasza główna strona ma obecnie około 8 milionów zarejestrowanych użytkowników. Jednak strona jest w zasadzie niemożliwa do użycia na niczym, co nie jest prawdziwym komputerem. Jedną z naszych najbardziej pożądanych funkcji, jeśli nie najbardziej pożądaną, jest aplikacja mobilna lub mobilna wersja witryny. Myślę, że musimy to zrobić. Kierownictwo uważa, że musimy to zrobić. W rzeczywistości wszyscy w firmie myślą, że musimy to zrobić. Ale na obecnym rynku jest prawie niemożliwe, aby zatrudnić kogoś z umiejętnościami iPhone/Android. Jestem obecnie jedyną osobą w firmie, która ma jakikolwiek poziom doświadczenia w programowaniu mobilnym i nie jestem (jeszcze) tak dobra, więc szukam komentarzy na temat tego, jak załadować zdolność do rozwoju mobilnego. Wszystko, od ogólnych wskazówek (czy powinienem najpierw skupić się na rozwijaniu moich umiejętności osobistych, czy spróbować wybrać bardziej doświadczonego programistę mobilnego?) po konkretne zalecenia dotyczące szkoleń itp., może być pomocne, o ile nie sprowadza się to do „do bani”. być tobą." :-)


title: Czy wszystkie klasy powinny mieć domyślny konstruktor w ramach dobrej konwencji kodowania?

text: Z tekstów, które przeczytałem do tej pory, konwencje mówią o organizowaniu `konstruktorów`, zaczynając od `default`, jeśli takie istnieją. Zastanawiam się, czy i tak wszystkie klasy powinny mieć 'domyślny konstruktor'. Pomoże to przynajmniej w stworzeniu prostej instancji `klasy` w locie, bez konieczności używania `sparametryzowanego konstruktora`, który sam może wymagać dodatkowych `importów` dla określonego typu parametru.


title: Projektowanie API dla operacji serwisowych o ściśle powiązanych parametrach

text: Mam problem z podjęciem decyzji, jak zaprojektować ten interfejs API usługi. public class GetCurrentValuesRequest { public int ReferenceID { get; ustawić; } public int[] FilterIDs { get; ustawić; } } public class GetDefaultValuesRequest { public int[] FilterIDs { get; ustawić; } } public class GetValuesAsOfDateRequest { public int ReferenceID { get; ustawić; } public int[] FilterIDs { get; ustawić; } public DateTime AsOf { get; ustawić; } } public class GetValuesAsOfChangeSetRequest { public int ReferenceID { get; ustawić; } public int[] FilterIDs { get; ustawić; } public long ChangeSetIDs { get; ustawić; } } public class GetProposedValuesRequest { public int ReferenceID { get; ustawić; } public int[] FilterIDs { get; ustawić; } public long ApprovalKey { get; ustawić; } } public class GetValuesIfModifiedRequest { public int ReferenceID { get; ustawić; } public int[] FilterIDs { get; ustawić; } public DateTime Od { get; ustawić; } } public class GetValuesResponse { public string[] Results { get; ustawić; } } public class GetValuesIfModifiedResponse { public string[] Results { get; ustawić; } public bool IsModified { get; ustawić; } } publiczny interfejs IService { GetValuesResponse GetValues(GetCurrentValuesRequest żądanie); GetValuesResponse GetValues(GetDefaultValuesRequest żądanie); GetValuesResponse GetValues(GetValuesAsOfDateRequest żądanie); GetValuesResponse GetValues(GetValuesAsOfChangeSetRequest żądanie); GetValuesResponse GetValues (żądanie GetProposedValuesRequest); GetValuesIfModifiedResponse GetValuesIfModified(GetValuesIfModifiedRequest żądanie); } Zastanawiałem się nad zmianą tego, aby utworzyć podklasy żądania/odpowiedzi `IfModified` prostej odpowiedzi żądania `GetValues` i zawierać tylko jedno wywołanie `GetValues`. Serwer zwróciłby inną odpowiedź w zależności od żądania wejściowego, ale wymaga to od użytkownika wywołania `IService` w następujący sposób: var response = (GetValuesIfModifiedResponse)serviceClient.GetValues(new GetValuesIfModifiedRequest() { ... }); Myślałem również o umieszczeniu `IsModified` w prostym `GetValuesResponse` i wypełnianiu go tylko wtedy, gdy zostanie do niego przekazany `GetValuesIfModifiedRequest`. Ale wydaje się to trochę dziwne, aby uwzględnić go w wyniku metody, która w rzeczywistości nic z nim nie robi. Ponadto może wyrzucić użytkownika, jeśli go zobaczy i spodziewa się, że będzie mógł go użyć w swoim kodzie. bool? IsModified` jest lepszy, ale nie zostałem jeszcze całkowicie sprzedany. Jakieś sugestie, jak najlepiej zaprojektować ten interfejs API?


title: Klient automatycznie wykrywa wymagany serwer

text: Mam projekt, który wymaga aplikacji klienckiej do komunikowania się z serwerem. Zastanawiałem się, czy istnieje sposób, aby aplikacja kliencka mogła wykryć dostępne serwery i „wiedzieć” w taki czy inny sposób, który serwer jest tym, którego potrzebuje. Klient jest zbudowany z .net i c#, serwer jest prostą bazą danych SQL.Są w tej samej sieci. Czy jest do tego wbudowany mechanizm, czy też zadanie jest bardziej złożone, niż się wydaje? Więcej szczegółów nie mam ATM, to jeszcze tylko pomysł. Powodem tego jest to, że gdy użytkownik korzysta z aplikacji klienckiej, nie chcemy, aby ręcznie wprowadzał parametry połączenia, jeśli nie musi.


title: Przetwarzanie obrazu w przeglądarce jest zbyt wolne na Androidzie w porównaniu z przeglądarką na komputery stacjonarne

text: ## Sytuacja Napisałem prostą aplikację czarno-białego filtru obrazów z JavaScript używając html5 canvas. Oto przykład aplikacji . (Nie wiem dlaczego nie działa w jsfiddle, więc podałem link do kodu źródłowego). W mojej przeglądarce na komputerze i Firefox OS, dla obrazów o wymiarach mniejszych niż 1024X768 px, aplikacja działała dobrze, więc umieściłem ją na rynku. Ale kiedy pobrałem go na Androida za pomocą przeglądarki Firefox, aplikacja działała bardzo wolno, nawet dla obrazów 500x500 o rozmiarze 100kbs. ## Implementacja Zasadniczo ustawiłem kanwę `display: hidden`, pobrałem dane z bufora obrazu, wziąłem poszczególne wartości pikseli i zmodyfikowałem je (typowe operacje punktowe), a następnie wygenerowałem obraz .png z wynikowej operacji i użyj tagu `img`, aby go wyświetlić, ponieważ nie mogłem kontrolować płótna, aby pasowało do ekranu użytkownika bez przepełnienia (dla obrazów o wymiarach większych niż wymiary ekranu). Poniżej znajdują się fragmenty kodu z oryginalnej funkcji kodu $(tagname, classname){ if(!classname) return document.getElementsByTagName(tagname); if(!tagname || tagname == '') return document.getElementsByClassName(classname); return document.querySelectorAll(tagname + '.' + nazwa klasy); } function init(imageObj){ var ctx, i, data,image, len = $('canvas').length; parentCanvas = $('canvas')[0]; parentContext = parentCanvas.getContext('2d'); if(!parentContext) alert("błąd"); w = (obiektObrazu.Szerokość naturalna); h = (obiektObrazu.Wysokość naturalna); parentCanvas.width = w; parentCanvas.height = h; parentContext.drawImage(obiektObrazu, 0, 0, w, h); parentBuffer = parentContext.getImageData(0, 0, w, h); image = document.getElementById("płótno"); if(!obraz){ obraz = document.createElement('img'); image.id = "płótno"; } image.src = parentCanvas.toDataURL("obraz/png"); $('','kontener')[0].appendChild(obraz); //pasować(); } var Effects = { '1' : function redfilterbw (brgba) { var utils = new Utils(); var res = utils.monochrome(brgba, 1, 0, 0); rgba = { r : res, g : res, b : res, a : brgba.a }; }, '11' : function subcontrast(brgba) { var utils = new Utils(); var res = utils.adjustContrast(brgba,5,-1); rgba = { r : res.r, g : res.g, b : res.b, a : brgba.a }; }, ... '12' : function addcontrast(brgba) { var utils = new Utils(); var res = utils.adjustContrast(brgba,5,1); rgba = { r : res.r, g : res.g, b : res.b, a : brgba.a }; }; function Utils () {} Utils.prototype.monochrome = function (brgba, rwt, gwt, bwt) { var opr, scale; skala = 1 / (rwt + gwt + bwt); rwt *= skala; gwt *= skala; mc *= skala; opr = parseInt(brgba.r) * rwt + parseInt(brgba.g) * gwt + parseInt(brgba.b) * bwt ; powrót opr; }; Utils.prototype.adjustContrast = function (brgba, mag, charge) { var opr, adjust = mag * charge, //charge określa, czy kontrast obrazu zwiększy się, czy zmniejszy, a mag jest magnitem, więc to znaczy współczynnik +5 lub -5 = (259 * (dostosuj + 255)) / (255 * (259 - dostosuj)); opr = { r : (współczynnik * (brgba.r - 128) + 128), g : (współczynnik * (brgba.g - 128) + 128), b : (współczynnik * (brgba.b - 128) + 128) , a : brgba.a }; powrót opr; }; function fit(){ document.getElementById("canvas").src = parentCanvas.toDataURL("image/png"); } funkcja proces (indeks) { var i, j, len, dane, warstwa, ctxn, bufor, utils; narzędzia = nowe Narzędzia(); // indeksy od 9 do 12 służą do regulacji jasności, dlatego potrzebuję bieżącego kontekstu, podczas gdy reszta to niezależne operacje wymagające parentContext. if (indeks != 9 && indeks != 10 && indeks != 11 && indeks !=12) { ctxn = utils.getParentContext(); } else { ctxn = utils.getthisContext(); } bufor = ctxn.getImageData(0, 0, w, h); dane = bufor.dane; for(i = 0; i < dane.length; i += 4){ rgba = { r : dane[i], g : dane[i+1], b : dane[i+2], a : dane[ i+3] }; okno['Efekty'][indeks](rgba); dane[i] = parseInt(rgba.r); dane[i+1] = parseInt(rgba.g); dane[i+2] = parseInt(rgba.b); } ctxn.putImageData(bufor, 0, 0); pasować(); } ## Wyjaśnienie prób Po pierwsze nie sądzę, że to, co tu zrobiłem, jest najlepszym sposobem na wykonanie pracy, ani może standardowym sposobem napisania dobrej aplikacji. Na razie myślałem, że mam rozwiązanie, które polegało na tym, aby najpierw mieć podgląd wyświetlanego obrazu, na który użytkownicy nałożyliby filtr, a po jego zapisaniu efekt zostałby nałożony na oryginalny obraz. Ale algorytmy, które znalazłem http://stackoverflow.com/questions/18922880/ były powolne, mam na myśli, że najwyżej oceniany algorytm zajmuje prawie minutę na moim komputerze. Nie sądzę, żeby to podejście zadziałało. ## Zapytanie Szukam recenzji mojego kodu i implementacji, szczególnie interesuje mnie jak można by go ulepszyć i przyspieszyć. Jestem również otwarty na nowe sugestie i konwencje wdrożeniowe dotyczące obsługi obrazów w aplikacjach internetowych.


title: Czy w tym scenariuszu odpowiednie jest mocowanie do testów jednostkowych?

text: Napisałem około 20 metod w Javie i wszystkie wywołują niektóre usługi sieciowe. Żadna z tych usług internetowych nie jest jeszcze dostępna. Aby kontynuować kodowanie po stronie serwera, na stałe zakodowałem wyniki, które ma dać usługa internetowa. Czy możemy przetestować te metody jednostkowo? O ile mi wiadomo, testowanie jednostkowe polega na wyśmiewaniu wartości wejściowych i zobaczeniu, jak reaguje program. Czy naśmiewanie się z wartości wejściowych i wyjściowych ma sens? **Edytuj :** Odpowiedzi tutaj sugerują, że powinienem pisać przypadki testów jednostkowych. Teraz **jak mogę to napisać bez modyfikowania istniejącego kodu?** Rozważmy następujący przykładowy kod (kod hipotetyczny): public int getAge() { Service s = locate("ageservice"); // linia 1 int wiek = s.execute(empId); // wiersz 2 zwrotny wiek; // linia 3 } Teraz Jak mockujemy wyjście? W tej chwili komentuję _'wiersz 1'_ i zamieniam _wiersz 2_ na `int age= 50`. Czy to jest poprawne ? Czy ktoś może wskazać mi właściwy sposób na zrobienie tego?


title: Porady/wytyczne dotyczące zarządzania rozproszonym zespołem programistycznym

text: Jakie są strategie, metodologie i najlepsze praktyki zarządzania rozproszonym zespołem? * Co można zrobić, aby zachęcić i wymusić komunikację między różnymi członkami zespołu? * Czy możliwe jest dostosowanie/wdrożenie istniejących metodologii programowania zwinnego w rozproszonym zespole? Powiązane, ale nie identyczne: * http://programmers.stackexchange.com/questions/7942/what-tools-are-available-for-remote-communication-when-working-from-home-or-with * http:// programers.stackexchange.com/questions/18/which-programming-specialities-are-needed-in-a-good-web-development-team


title: Jakieś najlepsze praktyki dla rozproszonego zespołu Agile?

text: Nasze zespoły scrumowe są podzielone geograficznie (nie jest to idealne, wiem!), ponieważ konkretna wiedza jest dostępna tylko w niektórych krajach. Tak więc jeden zespół składający się powiedzmy z 7 członków ma biznesmena w jednym mieście, 2 programistów w innym, 2 innych programistów w innym i 2 qa w innym. Jakieś sugestie, jak zarządzać tego typu rozproszonym graficznie zespołem? Jakieś najlepsze praktyki? Jak robisz stójki? przez Skype wideo? czy zapewniamy, że ludzie podróżują co 6 tygodni (najwyraźniej połowa czasu zaufania)? jak robimy tablicę zadań? Wirtualnie czy przez wideo? czy Kanban działałby lepiej w tej konfiguracji?


title: jak skrócić czas komunikacji w zespołach rozproszonych

text: W naszej firmie mamy 10 rozproszonych zespołów i tworzymy 3 ogromne aplikacje internetowe. Dużo czasu naszych programistów spędzają na pisaniu e-maili. Używamy scrum i do tego mieliśmy codzienne spotkanie stand-up, ale inne pytania dotyczące cech produktu, problemów projektowych zawsze przekazujemy mailowo? Czy istnieje metoda lub technika, która pozwala skrócić czas komunikacji?


title: Jak wybrać odpowiedni generator parserów dla PHP

text: Niektórzy programiści unikają wyrażeń regularnych w niektórych sytuacjach (zobacz ten popularny komentarz @nickf), być może używając frameworka parsującego, takiego jak Lex/Yacc. Inni wolą pozostać w PHP, być może używając wyrażeń regularnych, ponieważ pozwala to uniknąć konieczności stosowania innego frameworka. Kiedy musimy użyć "prawdziwego" generatora parserów zamiast kodować parser bezpośrednio w PHP? Jaki jest najlepszy zestaw narzędzi PHP do analizowania złożonych rzeczy i jakie czynniki mogą pomóc mi określić, który jest najlepszy? Jak wspomniałem wcześniej, być może nie ma najlepszego rozwiązania, ale po prostu dobre praktyki pomagające wybrać rozwiązanie. * * * ## UWAGA **Przeczytaj poniżej tylko jeśli jesteś autorem odpowiedzi** Moje pytanie zostało zredagowane: teraz miej dobry angielski i obiektywizm (!), wielkie dzięki za @FrustratedWithFormsDesigner, @gnat i @Matt. Ale być może dzięki edycji @Matt straciłem swój punkt widzenia. * Nie chodzi mi o dychotomię „Wyrażenia regularne vs. framework” (!). * Myślę (i patrzę na przykłady), że programując PHP, mamy dobry "zestaw narzędzi", nie tylko z _wyrażeniami regularnymi_ (zobacz moc preg_replace_callback), funkcjami stringów itp., do prostych lub bardzo specyficznych zadań parsowania; ale także z manipulacją XML, do złożonych zadań! Zobacz de "parsing power" procesu za pomocą DOM i/lub XSLT... * Widzę również przypadki, w których mam dylemat dotyczący użycia tego "natywnego zestawu narzędzi PHP", lub zainstaluj i poznaj jakiś zewnętrzny _generator paserów_ (podłączony jako biblioteka, klasa itp.).


title: Jak sprawić, by Twoje aplikacje wyglądały bardziej sexy?

text: Drugi tytuł tego pytania mógłby brzmieć: Jak poprawić swoją kreatywność? W ciągu ostatnich lat zauważyłem, że łupy z moich małych aplikacji, które piszę w wolnym czasie, aby ułatwić sobie życie, mogą być przydatne również dla niektórych moich znajomych. Poprosili mnie o kopię. Nawet jeśli aplikacje działają tak, jak powinny, czuję się trochę zawstydzony, ponieważ wszystkie GUI wyglądają naprawdę brzydko. Problem polega na tym, że zawsze używałem standardowych i domyślnie wyglądających przycisków, pól tekstowych itp. Teraz pomyślałem, jak to ulepszyć. I tak, wiem, że można używać motywów, ImageButtons, ColorBrushes i tak dalej. A teraz prawdziwy problem polega na tym, że tak naprawdę nie widzę, które kolory pasują do siebie i tworzą dobry projekt. Czy są jakieś techniki, książki, inne zasoby, które pomagają ulepszyć, aby wyczuć dobre projekty, kombinacje kolorów, wybrać element UI?


title: Jak czytać tysiące linijek kodu bez dokumentacji?

text: Wcześniej szukałem dobrej kontroli TimeLine dla projektu WPF. Znalazłem odpowiedź w Tutaj, która kieruje mnie do tego projektu CodePlex. Teraz chcę zmienić kod, aby zaspokoić potrzeby mojej kultury. Ale są pewne niedopasowania! Moje pytanie brzmi: **Jak wchodzisz w interakcję z takimi tysiącami linijek kodu?** EDIT: Każdy skrót będzie świetny!


title: Jak uruchomić nową główną wersję mojej aplikacji, ale nadal zachować starą wersję „żywą”

text: Mam dwie aplikacje o nazwach A i B. Obecna wersja tych aplikacji to 7.x (niektórzy klienci korzystają z 7.1, inni z 7.2, ...). Obie aplikacje używają tego samego wspólnego frameworka (nazwijmy to C), tak jak to: +---+ +---+ | | | B | +---------+ | C | +---------+ Ze względu na kilku ważnych nowych klientów chcę mieć funkcjonalność A i B w jednej dużej aplikacji. Połączenie A i B w jedną aplikację nie jest możliwe, więc teraz próbuję zintegrować funkcjonalność A z B. Jak na razie dobrze, ale zaczynam napotykać pewne problemy. Po pierwsze, klienci, którzy korzystają tylko z podstawowej funkcjonalności B, nie są zainteresowani wszystkimi dodanymi nowymi funkcjonalnościami A (i które powodują dla nich dodatkowe koszty). Chcą po prostu uaktualnić swoją wersję B z obsługą nowych wersji Windows, ... a może również chcą wszystkich fajnych funkcji dodanych do C (wspólny framework). Po drugie, klienci, którzy obecnie korzystają z aplikacji A, nie chcą bezpośrednio przenosić się do aplikacji B, chociaż połączona funkcjonalność A+B pomogłaby im na dłuższą metę. W celu ułatwienia aktualizacji chcą pozostać przy A, a nawet zobaczyć pewne ulepszenia w C. Po trzecie, wszystkie zmiany, które robię w B, mogą mieć wpływ na wspólną warstwę C. Np. aby poprawić wydajność modułu w B, muszę dokonać refaktoryzacji modułu w C, ale ponieważ C jest również używane w A, muszę wykonać znacznie więcej pracy. Ponadto A jest starszą, mniej ustrukturyzowaną aplikacją, a każda zmiana w C może sprawić, że A będzie bardziej niestabilny. Pytanie brzmi, jak postępować? Obecnie myślę o podzieleniu B w wersji 7.x (w razie potrzeby mógłbym jeszcze wprowadzić kilka drobnych zmian i wydać 7.3, 7.4 w nadchodzących latach) oraz wersję 8.x (która zawierałaby wszystkie nowe funkcje) . Aby rozwiązać problem warstwy wspólnej, mógłbym również podzielić C na stare C (7.x) i nowe C (8.x). Daje to następujący wynik: +-------+ +-------+ +-------+ | 7.x | | B 7.x | | B 8.x | +-----------------+ +-------+ | C 7.x | | C 8.x | +-----------------+ +-------+ Aplikacja A nie będzie już ewoluować i będzie trzymać się wersji 7.x wspólnej warstwy C. Podział C oznacza, że wszystkie zmiany w C albo nie będą widoczne w starych A i B (które nadal będą wersjami 7.x), albo jeśli muszą zostać wykonane w wydaniach 7.x A i B, będą wymagały wykonania zmian w obu wydaniach. Alternatywą może być podzielenie B na B 7.x i B 8.x, ale ograniczyłoby to możliwości refaktoryzacji w C i faktycznie rozwiązuje tylko dwa pierwsze problemy. Czy ktoś ma jakieś doświadczenie z tak dużą zmianą w wydawnictwie? Jakieś inne pomysły?


title: Kiedy kod jest „starszy”?

text: Wszyscy to zrobiliśmy, oznaczyliśmy jakiś kod (często rzeczy, które odziedziczyliśmy) jako „stary”? Ale nadal jest używany w systemach produkcyjnych - więc czy to naprawdę dziedzictwo? A co sprawia, że jest to dziedzictwo? Czy powinniśmy unikać tego nieuzasadnionego etykietowania doskonale działającego kodu; gdzie etykietowanie jest czystą wygodą, która pozwala nam przeforsować nowe rzeczy i sprawić, by wyższe kierownictwo było miłe i szczęśliwe? * * * ### Podsumowanie odpowiedzi Przeglądając odpowiedzi dostrzegam cztery główne tematy. Oto jak widzę podział: 1. Dowolny dostarczony kod: 6 2. Martwe systemy: 2,5 3. Brak testów jednostkowych: 2 4. W pobliżu nie ma programistów: 1,5


title: Jaki jest najlepszy sposób na naukę kodu, jeśli dopiero zaczynasz?

text: Dopiero zaczynam od kilku artykułów i samouczków. Szukam wskazówek, od jakich języków zacząć i jaki jest najlepszy sposób na naukę kodu, książki, tutoriale, zajęcia. Które samouczki lub książki są najlepsze? Czy można się tego nauczyć online? Jeśli tak to jak? Dzięki za wszelką pomoc!


title: Dlaczego miałbym używać kontraktów na kod?

text: Niedawno natknąłem się na ramy kontraktów kodowych firmy Microsoft. Przeczytałem trochę dokumentacji i ciągle pytałem: „Dlaczego miałbym kiedykolwiek chcieć to zrobić, skoro nie wykonuje i często nie może przeprowadzić analizy statycznej”. Teraz mam już pewien rodzaj defensywnego stylu programowania, z ochroną wyjątków takich jak ten: if(var == null) { throw new NullArgumentException(); } Używam również często NullObject Pattern i rzadko mam problemy. Dodaj do niego testy jednostkowe i gotowe. Nigdy nie korzystałem z twierdzeń i nigdy ich nie przegapiłem. Wręcz przeciwnie. Naprawdę nienawidzę kodu, który zawiera wiele bezsensownych twierdzeń, które są dla mnie tylko szumem i odwracają uwagę od tego, co naprawdę chcę zobaczyć. Umowy na kod, przynajmniej w sposób Microsoftu, są takie same – a nawet gorsze. Dodają dużo szumu i złożoności do kodu. W 99% i tak zostanie wyrzucony wyjątek - więc nie obchodzi mnie, czy pochodzi z asercji/kontraktu, czy z faktycznego problemu. Tylko bardzo, bardzo niewiele przypadków pozostaje, w których stany programu naprawdę ulegają uszkodzeniu. Szczerze mówiąc, jakie są korzyści z używania kontraktów na kod? Czy w ogóle istnieje? Jeśli już korzystasz z testów jednostkowych i kodu defensywnego, czuję, że wprowadzanie kontraktów po prostu nie jest warte kosztów i powoduje szum w twoim kodzie, który opiekun będzie przeklinał, gdy aktualizuje tę metodę, podobnie jak ja, gdy nie mogę zobaczyć, co robi kod z powodu bezużytecznych twierdzeń. Nie widzę jeszcze dobrego powodu, by zapłacić taką cenę.


title: Kiedy należy zatrzymać rozwój i rozpocząć kontrolę jakości?

text: Piszemy kompletną specyfikację funkcjonalną dla naszego dwuosobowego zespołu programistów. Nie mamy profesjonalnych testerów, jednak z pomocą naszego dostępnego personelu helpdesku zorganizowaliśmy „testowanie jakości”. W przeszłości mieliśmy problemy, w których kompletna część funkcji nie działała lub kod jest dostarczany niezgodnie ze specyfikacją. Moje pytania brzmią: na jakim etapie programiści powinni przestać kodować i przekazać zespołowi QA? Czy to za dużo, aby prosić programistów o sprawdzenie ich kodu pod kątem specyfikacji przed przekazaniem go zespołowi QA?


title: Licencjonowanie kodu na GPL: czy wersje przed dodaniem licencji GPL są nadal objęte GPL?

text: Załóżmy, że mam już istniejącą bazę kodu, która nie ma żadnych nagłówków licencji w żadnym z plików źródłowych, ani nie ma pliku `COPYING`. Więc kiedy dodam wszystkie potrzebne GPL „cruft” do, powiedzmy, wersji 1000, czy wszystkie poprzednie wersje również będą objęte GPL, czy też muszę przepisać historię mojego repozytorium, aby uwzględnić licencję GPL z wersji 0?


title: Sprytny sposób na licencjonowanie/zaciemnianie aplikacji internetowych, dopóki klient za to nie zapłaci

text: Wykonuję prace kontraktowe dla różnych klientów i zastanawiałam się jak najlepiej zabezpieczyć się przed brakiem płatności. Projekty będą aplikacjami webowymi ASP.NET, najprawdopodobniej opartymi na intranecie. Nie mam więcej szczegółów. Wyobrażam sobie, że klient będzie chciał uruchomić i przetestować aplikacje ze swojej strony przed dokonaniem jakiejkolwiek płatności. Czy jest jakiś sposób na „spakowanie” aplikacji, aby nie miały dostępu do kodu źródłowego? Czy istnieje prosty sposób na to, aby aplikacja przestała działać po określonej liczbie dni, chyba że zostanie przeze mnie „odblokowana”?


title: Jak bardzo ufasz automerge?

text: Załóżmy, że pobierasz najnowszą wersję pliku z kontroli źródła i występuje konflikt. Istnieją cztery rodzaje zmian w konflikcie: 1. Twoje 2. Ich 3. Oba 4. Konflikt Oczywiście w przypadkach 3 i 4 chciałbyś przejrzeć zmiany ręcznie (w tym drugim przypadku musisz nawet je rozwiązać ). Co do przypadków 1 i 2 nie jestem pewien, ale myślę, że tylko zmiany typu 2 (ich) powinny skłonić do ręcznego sprawdzenia. Powodem jest to, że wiesz, co zmieniłeś, w przeciwieństwie do „ich” zmian, które mogą zakłócić twoje zmiany. Myślę więc, że można pominąć przeglądanie własnych zmian (przypadek 1) i ręcznie przejrzeć / rozwiązać inne zmiany (przypadki 2-4). Inni programiści sugerowali bardziej ekstremalne podejścia - takie jak przeglądanie tylko sprzecznych (lub "obu") zmian i ufanie automerge dla reszty. Druga skrajność to przeglądanie wszystkich zmian za każdym razem. Oczywiście mogą mieć na to wpływ inne parametry. Na przykład, jeśli dokonałeś tylko jednej poprawki w pliku, a inni wprowadzili 200 zmian, to pod warunkiem, że możesz mieć wystarczającą pewność, że Twoja zmiana nie jest powiązana (powiedzmy, że jest to plik SQL i napisałeś nową oddzielną procedurę składowaną), być może możesz pominąć przeglądanie innych zmian. Jestem rozdarty między niebezpieczeństwem niekontrolowania zmian a czasem i energią, które można by zaoszczędzić, ufając automatycznemu połączeniu. Podobno masz testy kompilacji i jednostek/komponentów/e2e, które ujawnią złe połączenia.


title: Java: jak sprawić, by lokalne pola i parametry były ostateczne bez słowa kluczowego „final” w każdej deklaracji?

text: Domyślnie chcę, aby wszystkie moje zmienne lokalne i parametry metody były ostateczne. Niestety, projektanci języka Java wybrali inną wartość domyślną: zmienne&parametry domyślnie nie są ostateczne, a końcowe zmienne&parametry muszą być zadeklarowane za pomocą słowa kluczowego `final`. Więc muszę dodać dużo finałów. (I oczywiście nie robię tego ręcznie, ale moje IDE dodaje je za mnie.) Tak więc kończę z kodem źródłowym, w którym każdy domyślny przypadek jest zaznaczony, podczas gdy wyjątki od moich preferowanych wartości domyślnych są ledwo widoczne. Dla czytelności chciałbym, żeby było odwrotnie, tzn. tylko nieostateczne zmienne lokalne i parametry powinny być zaznaczone/podświetlone/adnotowane/... Czy to możliwe? Jestem otwarty na rozwiązania integrujące się na różnych poziomach, m.in. składanie w edytorze, sprawdzanie stylu, kroki budowania itp...


title: Jak sprawić, by zabezpieczenia działały w aplikacji webowej?

text: Jestem na etapie planowania tworzenia aplikacji internetowej, którą chcę uczynić tak bezpieczną, jak to tylko możliwe. Z technicznego punktu widzenia wiem, jak to zrobić, ale istnieje jedna potężna potencjalna luka w zabezpieczeniach: chcę, aby witryna miała użytkowników. Jak wie każdy, kto kiedykolwiek był użytkownikiem, użytkownicy zapominają nazwy użytkownika, zapominają hasła, czasami zapominają, że mieli nawet konto w Twojej witrynie. Użytkownicy odpowiadają na wiadomości phishingowe i udostępniają swoje dane uwierzytelniające. Jeśli zrobisz coś, co uznają za zbyt skomplikowane, nie będą korzystać z Twojej witryny, musi to być proste i wszystko odbywa się za pomocą jak najmniejszej liczby kliknięć, ale musimy to zrównoważyć, maksymalnie utrudniając użytkownikom przypadkowe przypadkowe przekazać swoje dane uwierzytelniające i zapewnić jak najbezpieczniejszy dostęp do usługi. Szczególnie interesują mnie strategie, które wykraczają poza standardową kombinację nazwy użytkownika i hasła oraz sposoby odzyskiwania lub resetowania haseł, które ułatwiają użytkownikom, ale utrudniają każdemu, kto próbuje ukraść ich konto. Wiem, że wiele witryn udostępnia dodatkowe pytanie zabezpieczające ustawiane przez użytkownika, ale ponieważ nie ufam użytkownikom, że nie utworzą głupiego pytania typu „co to jest 1+1”, nie wiem, jak to może zagwarantować bezpieczeństwo. Czy istnieją strategie, które mogą być przydatne dla najbardziej nieświadomych użytkowników, ale stanowią wyzwanie dla zdeterminowanego i ukierunkowanego ataku mającego na celu włamanie się na ich konto? Jeśli nie, jakie są najbliższe rzeczy, które możemy uzyskać? Jako użytkownik, jakie są najlepsze/najgorsze witryny, z którymi się spotkałeś i dlaczego?


title: Najkrótsza odległość między dwoma punktami (aby rozwiązać problem)

text: Niedawno rozpocząłem pracę w firmie korzystającej z autorskiego systemu CMS. Niestety praktycznie nie ma dokumentacji do aplikacji, a komentarze źródłowe są również dość skąpe. Zwykle przy danym zadaniu przechodzę przez poniższe opcje, przechodząc do następnego kroku, jeśli nie mogę znaleźć rozwiązania 1: Zajrzyj do dokumentacji (nie dotyczy), jak wykonać zadanie X (tj. Utwórz stronę) 2: Odczytaj kod źródłowy — zmienne wyjściowe — zwykle zatrzymaj wyszukiwanie po przekopaniu 4 lub 5 kroków do łańcucha klas/metod 3: Zapytaj istniejący zespół programistów, jak mogą osiągnąć X w swojej aplikacji 4: Ponownie przeczytaj (niezakomentowane) źródło — przejdź "polowanie na króliki" - prowadź każdy łańcuch do końca 5: Zrób herbatę Z jednej strony mój pracodawca szuka możliwości technicznych. Z drugiej strony szukają szybkości wykonania. Niechętnie proszą o pomoc drugiego programistę (pomimo braku dokumentacji), ale wydają się być zaskoczeni, gdy musiałem wtedy spędzić godzinę (lub dwie) na polowaniu na króliki poprzez ich wniosek o pochodzenie zmiennej lub metody X. Pamiętaj, że jestem zatrudniony jako średniozaawansowany programista. Więc chciałem uzyskać zewnętrzną perspektywę, czy mój proces eliminacji jest nierozsądny? Nie wyobrażam sobie, aby ktoś napisał aplikację Zend Framework bez dokumentacji (a czasami mimo to mają problemy...) - więc praca nad jakąś zastrzeżoną aplikacją bez żadnej okazuje się nieco trudna.


title: Jak ograniczyć kod CSS przesyłany przez użytkownika w <div>

text: Mamy bogaty edytor tekstu, w którym możemy wstawić html. jeśli jakiekolwiek wejście zawiera znacznik `<style>`, css jest stosowany do całego okna. czy można ograniczyć stosowanie CSS w obrębie `<div>`, a nie całego okna?


title: Jaka jest etymologia wyrażenia „Kod źródłowy”?

text: Z filmem „Kod źródłowy”, który właśnie wychodzi dzisiaj, musiałem wyjaśnić znaczenie tego wyrażenia nie-technicznym. Wtedy zostałem zapytany _dlaczego_ kod źródłowy nazywa się kodem źródłowym i tak naprawdę nie mogłem odpowiedzieć. Wiem, że niektórzy z moich współpracowników wolą odnosić się do kodu źródłowego jako „tekst programu” lub „pliki programu”. „Tekst programu” ma dla mnie znacznie więcej sensu niż „kod źródłowy”, ale większość ludzi wydaje się używać wyrażenia „kod źródłowy”. Czy ktoś zna pochodzenie i etymologię wyrażenia „kod źródłowy”?


title: Algorytm sortowania: wyjście

text: Spotkałem się z tym problemem na stronie internetowej i nie mogę zrozumieć wyników, proszę pomóż mi to zrozumieć :- Bogosort, to głupi algorytm, który losowo tasuje sekwencję, dopóki nie zostanie posortowana. Ale tutaj trochę to poprawiliśmy, więc jeśli po ostatnim przetasowaniu kilka pierwszych elementów znajdzie się we właściwych miejscach, naprawimy je i nie tasujemy ich więcej. To samo zrobimy z ostatnimi elementami, jeśli znajdą się we właściwych miejscach. Na przykład, jeśli początkowa sekwencja to (3, 5, 1, 6, 4, 2) i po jednym przetasowaniu otrzymamy (1, 2, 5, 4, 3, 6) zachowamy 1, 2 i 6 i będziemy kontynuować z sortowaniem (5, 4, 3) przy użyciu tego samego algorytmu. Oblicz oczekiwaną liczbę przetasowań dla ulepszonego algorytmu sortowania sekwencji pierwszych n liczb naturalnych, biorąc pod uwagę, że początkowo żadne elementy nie znajdują się we właściwych miejscach. Wejście: 2 6 10 Wyjście: 2 1826/189 877318/35343 Dla każdego przypadku testowego wypisz oczekiwaną ilość tasowań potrzebnych do ulepszonego algorytmu, aby posortować ciąg pierwszych n liczb naturalnych w postaci nierozkładalnych ułamków. Po prostu nie mogę zrozumieć wyjścia.


title: Jaka jest bardziej testowalna implementacja funkcji C?

text: Piszę kod w C. Staram się pisać bardziej testowalny kod, ale jestem trochę zdezorientowany decydowaniem między pisaniem czystych funkcji, które są naprawdę dobre do testowania, ale wymagają mniejszych funkcji i szkodzą czytelności moim zdaniem, a pisaniem funkcji, które modyfikują niektóre stan wewnętrzny. Na przykład (wszystkie zmienne stanu są zadeklarowane jako statyczne, a zatem są "prywatne" dla mojego modułu): Która z tych zmiennych jest Twoim zdaniem bardziej testowalna: int external_API_bar() { // Modyfikuj stan wewnętrzny internal_foo() } int internal_foo() { / / Zrób coś if (internal_state_variable) { // Zrób więcej internal_state_variable = false; } } OR int outer_API_bar() { // Modyfikacja stanu wewnętrznego internal_foo(internal_state_variable) // To może być inna funkcja, jeśli zostanie powtórzona wiele // razy w module if (internal_state_variable) { internal_state_variable = false; } } int internal_foo(bool arg) { // Zrób coś if (arg) { // Zrób więcej rzeczy } } Chociaż druga implementacja jest bardziej testowalna wrt do internal_foo, ponieważ nie ma skutków ubocznych, ale sprawia, że pasek jest brzydszy i wymaga mniejszych funkcji, które utrudnij czytelnikowi nawet śledzenie małych fragmentów, ponieważ musi stale przenosić uwagę na różne funkcje. Jak myślisz, który z nich jest lepszy? Porównaj to z pisaniem kodu OOPS, funkcje prywatne przez większość czasu używają stanu wewnętrznego i nie są czyste. Testowanie odbywa się poprzez ustawienie stanu wewnętrznego na próbnej instancji obiektu i przetestowanie funkcji prywatnej. Jestem trochę zdezorientowany, czy używać, czy przekazywać w stanie wewnętrznym do funkcji prywatnych ze względu na „testowalność”


title: Czy cytowanie adresów URL jako odnośników w komentarzach to zła praktyka?

text: Czasami myślę, że warto zacytować stronę internetową ( _np. pytania dotyczące przepełnienia stosu ) w celu uzasadnienia i wyjaśnienia fragmentu kodu. Czy jest to uważane za złą praktykę?


title: Ogólna zasada dotycząca rozmiarów pól

text: Jakich rozmiarów VARCHAR należy użyć dla imion i nazwisk, numerów telefonów (najlepiej międzynarodowych), adresów e-mail, adresów URL, słów słownikowych i nazw plików? Edycja: Zepchnął wstępną frazę, aby sformułować konkretne pytanie.


title: Jak zdobyć osobistą praktykę w metodykach rozwoju wagi ciężkiej?

text: Jestem w nowej pracy, w której projekt musi spełniać surowe standardy jakości, być dobrze udokumentowany, zarządzany bardzo szczegółowo, diagramy UML i wszystkie te rzeczy, które są przeciwieństwem „kodowania kowbojskiego”, w którym większość mojego dotychczasowego doświadczenia zawodowego była . Pomyśl o sposobie opracowywania oprogramowania dla przemysłu lotniczego lub medycznego na dużą skalę. Cieszę się, że mogę wyjść z chaosu kodowania kowbojskiego i jestem ciekaw, jak dobrze radzą sobie metody inżynierii ciężkiej. Ale jak szybko zdobyć doświadczenie z ciężkimi metodami? Poza tym po prostu bycia w pracy przez kilka miesięcy/lat. Za pomocą samego języka lub nowego interfejsu API można zhakować program do testowania zabawek, czytać, celowo popełniać błędy, aby zobaczyć, co się stanie, itp. Ćwiczenie jest niezbędne, podobnie jak bycie dobrym w jeździe na rowerze lub graniu na instrumencie muzycznym. Łatwo jest podnieść flet i spędzić pół godziny każdego dnia; nie trzeba dołączać do orkiestry ani być pełnoetatowym konsultantem ds. fletu. Ale jak ćwiczyć działania związane z inżynierią oprogramowania, które są duże, złożone, angażują zespoły, a większość z nich polega na komunikacji i planowaniu oraz unikaniu nieporozumień i przekraczaniu limitów harmonogramu i budżetu? Nie wydaje się to możliwe do zrobienia w pojedynkę. Czy istnieje sposób, aby niewielka liczba osób mogła symulować inżynierię całego dużego projektu na małą skalę w krótkim czasie (jeden dzień)?


title: Czy programiści, którzy ignorują jakość/standardy, są lepsi dla firmy?

text: Czy programiści, którzy decydują się nie stawiać optymalizacji kodu, standardów i najlepszych praktyk na pierwszym miejscu, tworzą bardziej użyteczny kod niż ci, którzy decydują się martwić optymalizacją, wdrażaniem standardów i praktyk kodowania ponad terminowe wykonywanie zadań? Jak te różniące się metodologie wypadają w porównaniu z poszczególnymi ocenami wyników? Jak wypada porównanie tych stylów w recenzjach? Jaki jest najlepszy sposób, aby wpłynąć na swój zespół, aby wdrożyć więcej najlepszych praktyk podczas SDLC?


title: Jak zautomatyzować system zadań w oprogramowaniu CMS

text: Obecnie rozwijam v2.0 mojego osobistego cmsa. Jednak utknąłem. Mocno czuję, że moje stare rozwiązanie „zadań” nie jest zbyt dynamiczne i trzeba je ponownie odwiedzić. Obecnie szukam całej koncepcji jak dynamicznie dodawać zadania i je uruchamiać. **Co mam na myśli przez system zadań** Jak zawsze w oprogramowaniu cms, jest dużo treści, takich jak obrazy, pliki dynamiczne, wpisy do bazy danych itp. Stworzyłem własny system zadań aka. Parser (brzmi źle, prawda?) Składa się z dwóch plików, jednego parser-class, a drugiego wyzwalacza z `$parser = new ParserClasses();` (mam nadzieję, że rozumiesz, o co mi chodzi). Niektóre funkcje parser: * Najpierw wyłącza stronę (po zakończeniu parsera włącz go ponownie) * Sprawdza aktywne pliki (pliki, które nie mają nadrzędnego wpisu mysql, zostaną usunięte) * Czyści stary cache * Generuje nowe statyczne cache * Zajmuje się pamięcią podręczną języków i tłumaczeń * i innymi zadaniami związanymi z zarządzaniem i utrzymaniem cms **Dlaczego chcę uczynić to bardziej automatycznym** W zasadzie wszystkie wtyczki i niektóre motywy (ogólnie dodatki) używają tego systemu zadań . Problem w tym, że nie jest to zbyt dynamiczne, bo wszystkie funkcje mieszczą się w jednej ogromnej klasie. Oznacza to, że dodatek nie może zostać zainstalowany bez otwarcia edytora php. **Jak planowałem to zrobić** Najpierw stworzyłbym swój własny _język zadań_ , z gotowymi funkcjami do obsługi plików, pamięci podręcznej itp. (bardzo szeroki przykład: `GenerateFreshCache('pages')`). Teraz problem polega na przechowywaniu. Moje pomysły to: 1. Utworzenie tabeli zadań w bazie mysql. Następnie dodaj tam zadania, używając mojego _języka zadań_. Później `while()` je z bazy danych i `eval()`. _(To dobry sposób, ponieważ mogę dodawać zaplanowane godziny i podobne funkcje dla zadań CRON. Lub nawet kategoryzować zadania.)_ 2. Dodaj pliki .php do jakiegoś folderu, gdzie zostaną załadowane. Prawdopodobnie będą używać tego samego _języka zadań_ , ale nie trzeba ich używać `eval()`'. _(Boję się, że spowolniłoby to parser, bo tak wiele plików jest dołączanych.)_ Jednak nie jestem pewien tych pomysłów i mam nadzieję, że ktoś już natknął się na tę funkcjonalność i może mi dać wskaźniki. Wszystkie szalone pomysły i koncepcje są mile widziane, z góry dzięki. **Wniosek** Dziękuję wszystkim, którzy odpowiedzieli. Wybrałem odpowiedź, która najbardziej mi pomogła, a nie „och, za dużo pracy, korzystaj z frameworka”. Mój rdzeń systemów zadań jest gotowy i działa. Zajęło to 2-3 dni i obecnie ~600 linijek kodu i dwie klasy (zewnętrzny i wewnętrzny rdzeń). W końcu dostałem dwie tabele mysql, jedną z zadaniami (task db) i drugą z kombinacjami (wiele zadań połączonych razem dla łatwiejszego uruchamiania .) Ponadto dodano kilka funkcji, aby można było bezpiecznie uruchomić przez ajax (nie mogę o tym mówić, ściśle tajne^^). Może być zbyt wiele pętli obsługujących parsowanie zadań, jednak to sprawia, że dodawanie nowych zadań jest bardzo proste. Po prostu dodaj je do DB zadań i dodaj zadanie do cron-list-automatic-run-list lub uruchom je bezpośrednio przez panel administracyjny.


title: Jakie są korzyści z posiadania zdalnej bazy danych dla narzędzia wiersza poleceń?

text: Obecnie pracuję nad aplikacją wiersza poleceń, która będzie pobierać zasoby online podczas lokalnego konfigurowania nowego projektu. W tej chwili wszystkie potrzebne mi adresy URL są zakodowane w aplikacji, a dodawanie nowych celów wymaga aktualizacji oprogramowania. Jakie są zalety zdalnego hostowania bazy danych, o które aplikacja wysyła zapytanie w celu uzyskania nowych pakietów. Coś jak `npm` i każdy inny ogólny menedżer pakietów. Czy są jakieś najlepsze praktyki w konfigurowaniu czegoś takiego?


title: Czy wyrażenie regularne może być użyte do sprawdzenia palindromów?

text: Czy dopasowywanie wzorców regexp może być użyte do sprawdzenia palindromów w danym tekście w Javie? Moja intuicja jest taka, że aby sprawdzić palindromy, być może będziemy musieli zapamiętać znak, który został przetworzony, czego nie można zrobić za pomocą wyrażenia regularnego. Czy to jest poprawne?


title: używanie / linkowanie do kodu na licencji MS-PL z (A)GPLv3

text: Mam pewne problemy ze zrozumieniem warunków MSPL (Microsoft Permissive License) dotyczących łączenia/korzystania z biblioteki pod MSPL z mojego projektu, który chcę licencjonować na AGPLv3 lub czystej GPLv3 (część Affero nie powinna odgrywać większej roli w moim pytanie o ile widzę - ale proszę mnie poprawić, jeśli się mylę). Wiem na pewno, że MSPL jest niekompatybilny ze wszystkimi wersjami GPL. Ale czy istnieje jakiś rodzaj wyjątku linkowania, który pozwala na używanie go z kodu objętego GPL? Tło: Chcę używać ASP.NET MVC 2 oraz Managed Extensibility Framework (oba licencjonowane w ramach MSPL) w moim projekcie aplikacji sieci web jako frameworki. Dlatego będę się do nich odwoływał. Ale chcę, aby moja aplikacja internetowa była licencjonowana na licencji GPLv3. NIE chcę modyfikować ani rozpowszechniać ASP.NET MVC2 ani MEF ani w formie źródłowej, ani binarnej wraz z moją aplikacją internetową. Naprawdę sądzę, że jest to możliwe, ale nie mogę znaleźć żadnego fragmentu w MSPL, który wyraźnie by mi na to pozwalał. Jeśli ktoś ma link z dodatkowymi informacjami na ten temat, bardzo dziękuję! Co też jestem całkiem pewien: jeśli ASP.NET MVC2 lub MEF byłyby licencjonowane na licencji GPLv2 (i tylko v2), zdecydowanie NIE mógłbym używać GPLv3 jako licencji moich projektów. Mimo że nie wysłałbym źródła ani pliku binarnego ASP.NET lub MEF, mój projekt nadal byłby uważany za pracę pochodną. EDYCJA: Powinienem wspomnieć, że nie chcę używać oryginalnego .NET4 firmy Microsoft, ale Mono. Mono jest dostarczany z ASP.NET MVC2 i MEF, oba licencjonowane w ramach MSPL.


title: Czy tymczasowy kod powinien być objęty kontrolą wersji iw jaki sposób?

text: Oto kilka przykładów kodu tymczasowego/lokalnego. Jest to potrzebne do pracy z bazą kodu, ale bycie jej częścią byłoby szkodliwe: 1. Pliki projektu. Ścieżki mogą wymagać edycji w celu odzwierciedlenia układu na bieżącym komputerze. 2. Pliki Make. Na przykład optymalizacja może wymagać wyłączenia podczas debugowania, ale nie dla serwera CI. 3. Brudne brzydkie hacki. Na przykład `return 7` w środku funkcji, aby coś przetestować, w zależności od funkcji i podejrzewa się, że pęknie przy wartości 7. Lub 7 to kod jeszcze nie zaimplementowanego przycisku, który implementuję i muszę testować przez całe życie mojego oddziału. Próbowałem trzymać je w zatwierdzeniu git, które zawsze przestawiam na górę przed wypchnięciem do repozytorium, a następnie wciśnij `HEAD~`. Jest to dość niewygodne i nie działa z svn. Stashing przeraża mnie jeszcze bardziej - "czy pamiętałem, żeby popchnąć po wciśnięciu?". Utrzymywanie kodu poza kontrolą wersji wprowadza nieprzyjemny hałas za każdym razem, gdy commit jest kompilowany, a ponadto może przypadkowo zostać wprowadzony do commita w piątek wieczorem. Jakie byłoby rozsądne rozwiązanie dla takiego jednorazowego kodu?


title: Dlaczego Aptana wymaga zainstalowania Git w systemie Windows?

text: Dlaczego Aptana Studio wymaga zainstalowania Git w systemie Windows?


title: Rozszerzanie funkcjonalności podklas bez powielania kodu w C++

text: Muszę dodać wspólną funkcjonalność do niektórych klas, które mają tę samą superklasę, najlepiej bez nadużywania superklasy. Uproszczony łańcuch dziedziczenia wygląda tak: Element -> HTMLElement -> HTMLAnchorElement Element -> SVGElement -> SVGAlement Domyślna metoda `doSomething()` w `Element` jest domyślnie no-op, ale istnieją pewne podklasy, które wymagają rzeczywistego implementacja, która wymaga dodatkowych nadpisanych metod i członków instancji. Nie mogę umieścić pełnej implementacji `doSomething()` w `Element`, ponieważ 1) ma to znaczenie tylko dla niektórych podklas, 2) jej implementacja ma wpływ na wydajność i 3) zależy od metody, która może być nadpisana przez klasa w łańcuchu dziedziczenia między nadklasą a podklasą, np. `SVGElement` w moim przykładzie. Zwłaszcza ze względu na trzeci punkt, chciałem rozwiązać ten problem za pomocą klasy szablonu (jest to swego rodzaju dekorator dla klas): struct Element { virtual void doSomething() {} }; // T powinno być instancją elementu Element template<class T> struct AugmentedElement : public T { // doCoś jest drogie i używa T virtual void doCoś() override {} // Używane przez doSomething virtual bool shouldDoSomething() = 0; }; class SVGElement : element publiczny { /* ... */ }; class SVGAElement : public AugmentedElement<SVGElement> { // nietrywialne sprawdzenie bool shouldDoSomething() { /* ... */ return true; } }; // Podobnie w przypadku HTMLAElement i innych rozejrzałem się (w istniejącej (ogromnej) bazie kodu i w Internecie), ale nie znalazłem żadnych podobnych fragmentów kodu, nie mówiąc już o ocenie skuteczności i pułapkach tego podejścia. Czy mój projekt jest właściwą drogą, czy jest lepszy sposób na dodanie wspólnej funkcjonalności do niektórych podklas danej superklasy?