title: Co możesz zrobić, aby zmniejszyć liczbę błędów wdrażania działającej witryny internetowej?

text: Jestem pewien, że wielu z was doświadczyło tego problemu. Witryna lub aplikacja internetowa jest uruchomiona i działa. Chcesz wgrać następną wersję, ale nie wymyśliłeś wszystkiego, jak ustawienie wartości false w pliku konfiguracyjnym, wstawienie kolejnego rekordu do bazy danych i robienie wielu drobnych rzeczy, które czasami mogą liczyć do 20 lub więcej parametrów. Jak tylko wgrasz nową wersję, wszystko się psuje. Teraz naprawienie problemu może zająć tylko do 20 minut, ale czasami nie można zapomnieć o ogólnym stresie, który tolerujesz, a także o szkodach finansowych i reputacji firmy. Jakie są sposoby na zmniejszenie tego typu błędów, które wynikają z początkowej konfiguracji wdrażania nowej wersji? PS: Proszę nie wspominać o listach kontrolnych, bo już je mamy. Problem z listami kontrolnymi polega na tym, że zawsze powinny być aktualizowane, ale tak się nie stanie.


title: Jak kończymy wszystkie nasze historie do końca sprintu, a nie po i dlaczego jest to ważne?

text: Prowadzimy dwutygodniowe sprinty, w których zespół ledwo zakończy rozwój do ostatniego dnia sprintu, ale karty nie są kompletne, ponieważ testy nie są zakończone. Definicja ukończenia to tak naprawdę „kiedy rozwój jest zakończony”, a nie „kiedy historie są kompletne”. Mamy tygodniowe opóźnienie między ostatnim dniem sprintu a datą premiery. Zespół kończy sprint przed datą premiery, ale wydaje się, że to nie do końca spełnia cel scrum. Drużyna rozpoczyna kolejny sprint dzień po zakończeniu poprzedniego sprintu. Widzę następujące problemy: 1. zespół nie używa testów całego zespołu 2. zespół nie jest zbyt zainteresowany programowaniem w parach lub układaniem na jednej karcie na raz. 3. Może historie są zbyt obszerne i powinniśmy je bardziej rozłożyć, aby finiszować w bardziej stabilnym tempie przez cały sprint? Jakieś sugestie, jak zmusić zespół do ukończenia sprintu przed datą końcową? Lub inne pomysły? Dlaczego uważamy, że ważne jest, aby skończyć do ostatniego dnia? Dlaczego to ma znaczenie, że zespół wciąż kończy przed datą premiery? (Mam własne odpowiedzi, ale jestem ciekaw, co myślą tutaj inni.)


title: Czy dobrym pomysłem jest mierzenie wydajności metody za pomocą limitu czasu testu jednostkowego?

text: W projekcie, w którym istnieją niefunkcjonalne wymagania, które określają maksymalny czas wykonania określonej czynności, kontrola jakości musi sprawdzić wykonanie tej czynności na dedykowanej maszynie przy użyciu precyzyjnego sprzętu pod precyzyjnym obciążeniem, przy czym zarówno sprzęt, jak i obciążenie są określone w wymaganiach. Z drugiej strony niektóre błędne zmiany w kodzie źródłowym mogą poważnie wpłynąć na wydajność. **Wczesne zauważenie tego negatywnego wpływu** , _zanim_ kod źródłowy osiągnie kontrolę nad kodem źródłowym i zostanie zweryfikowany przez dział kontroli jakości, może być korzystny pod względem czasu straconego przez dział kontroli jakości zgłaszający problem, a także przez programistę naprawiającego go kilka zatwierdzeń później. Aby to zrobić, czy jest to dobry pomysł: * Aby użyć testów jednostkowych, aby uzyskać wyobrażenie o czasie spędzonym na wykonywaniu tej samej akcji² _n_ razy, * Aby użyć limitu czasu na test za pomocą atrybutu `[TestMethod, Timeout(200)]` w C#? Spodziewam się kilku problemów przy takim podejściu: * _Koncepcyjnie_ , testy jednostkowe nie są tak naprawdę do tego: mają testować małą część kodu, nic więcej: ani sprawdzenie wymagania funkcjonalnego, ani test integracyjny, ani wydajność test. * Czy limit czasu testu jednostkowego w programie Visual Studio naprawdę mierzy to, co ma być mierzone, biorąc pod uwagę, że inicjowanie i czyszczenie nie istnieją dla tych testów lub są zbyt krótkie, aby wpłynąć na wyniki? * Pomiar wydajności w ten sposób jest brzydki. Przeprowadzenie testu porównawczego na dowolnej maszynie¹ niezależnie od sprzętu, obciążenia itp. przypomina wykonanie testu porównawczego, który pokazuje, że jeden produkt bazodanowy jest zawsze szybszy od drugiego. Z drugiej strony, **Nie oczekuję, że te testy jednostkowe będą ostatecznym wynikiem, ani czymś, co jest używane przez dział QA**. Te testy jednostkowe będą używane tylko do **podania ogólnego poglądu** na temat oczekiwanej wydajności i zasadniczo **do ostrzeżenia programisty, że jego ostatnia modyfikacja coś zepsuła, poważnie wpływając na wydajność**. * TDD jest niemożliwe dla tych testów. Jak by się to nie udało, po pierwsze, przed rozpoczęciem implementacji kodu? * Zbyt wiele testów wydajności wpłynie na czas wymagany do uruchomienia testów, więc to podejście ogranicza się tylko do krótkich działań. Biorąc pod uwagę te problemy, nadal uważam za interesujące stosowanie takich testów jednostkowych w połączeniu z rzeczywistymi metrykami wydajności przez dział QA. Czy się mylę? Czy istnieją inne problemy, które sprawiają, że używanie do tego testów jednostkowych jest całkowicie niedopuszczalne? Jeśli się mylę, **jaki jest prawidłowy sposób**, aby ostrzec programistę, że zmiana w kodzie źródłowym poważnie wpłynęła na wydajność, zanim kod źródłowy osiągnie kontrolę źródła i zostanie zweryfikowany przez dział QA? * * * ¹ Oczekuje się, że testy jednostkowe będą przeprowadzane tylko na komputerach deweloperskich o porównywalnej wydajności sprzętowej, co zmniejsza przepaść między najszybszymi maszynami, które nigdy nie przejdą testu wydajności, a najwolniejszymi maszynami, które nigdy nie przejdą pomyślnie testu. przekazując to. ² Przez akcję rozumiem raczej krótki fragment kodu, którego uruchomienie trwa kilka milisekund.


title: Jak zaimplementować wybraną licencję na oprogramowanie?

text: Zawsze się zastanawiałem, ale nigdy nie poświęciłem czasu, aby zadać te pytania dotyczące licencjonowania. Większość z tych pytań jest prawdopodobnie dość prosta, ale nie mam pojęcia, z czym mam tutaj do czynienia. Najbardziej zdumiewa mnie to, jak dokładnie „wdrażasz” licencję dla swojego OSS. Czy wystarczy powiedzieć w poście, w którym publikujesz kod, „swoją drogą, to jest na licencji GPL”? A może powinno mieć miejsce coś bardziej delikatnego, na przykład rejestracja oprogramowania gdzieś? Ponadto, * Jeśli powiem, że używam konkretnej licencji, czy to wystarczy? * Czy dodaję kopię licencji do dystrybuowanego kodu? * Czy muszę dodać nagłówek do każdego pliku z wyszczególnieniem informacji licencyjnych? Czy zarządzam tym za pomocą mojego systemu kontroli wersji (np. Subversion)? * Czy powyższe nie wystarczy? * Jakie są najczęściej używane licencje na oprogramowanie? * Czy są jakieś upominki/licencje, które lepiej zostawić w spokoju?


title: Wykorzystanie pliku pdb w plikach wykonywalnych kompilacji wydania

text: To pytanie dotyczy tylko programów stworzonych na platformie Windows. Jeśli zbuduję wydanie mojego programu z opcją /Zi (utwórz plik pdb i zapisz ścieżkę do pliku w exe), nie muszę wysyłać pliku pdb z wydaniem, ale możemy zachować do użytku wewnętrznego. Plik pdb zostanie zachowany do naszego wewnętrznego użytku zapewniania jakości. Następnie, jeśli doszłoby do awarii, mamy system drukowania śladu stosu w momencie awarii i ten „system” miałby dostęp do symboli exe i otrzymalibyśmy ładnie zapełnioną ścieżkę stosu w tym pliku. Istnieje jednak niewielka komplikacja, ponieważ ostateczny plik wykonywalny jest tworzony przez osobny dział kompilacji w naszej firmie. My, programiści, możemy oczywiście stworzyć wersję wydania. Moje zapytanie jest takie, że jeden z moich kolegów mówi, że plik exe zbudowany przez zespół ds. Budowania będzie inny niż kompilacja wydania stworzona przez nas w fazie rozwoju. Ale nie rozumiem dlaczego? Czy mój kolega ma rację? Jeśli tak, dlaczego? A jeśli tak, czy to oznacza, że mój plan używania plików pdb z kompilacjami wydania nie jest możliwy?


title: Budowanie komponentu aukcji na żywo

text: Chcę zintegrować komponent aukcji na żywo (podobny do BigDeal.com) ze stroną internetową. Generalnie programuję w PHP. Jaki jest najlepszy plan działania w tego typu projektach (Timer, oferty na żywo...)?


title: Jakie są nazwane bajty między MSB i LSB?

text: Przeszukałem i nie mogę znaleźć niczego na temat tego, jak nazywają się środkowe bajty >16-bitowej liczby całkowitej, jeśli w ogóle. **Czy istnieją standardowe nazwy tych bajtów?** Np. liczba `0x0D0C0B0A` miałaby: MSB ??? ??? LSB 0D 0C 0B 0A


title: Po co używać string.Empty over "" podczas przypisywania do obiektu ciągu?

text: Używałem StyleCop na moim kodzie i jednym z zaleceń SA1122 jest użycie string.Empty zamiast "" podczas przypisywania pustego ciągu do wartości. Moje pytanie brzmi, dlaczego jest to uważane za najlepszą praktykę. Czy jest to uważane za najlepszą praktykę? Zakładam, że nie ma różnicy kompilatora między tymi dwoma instrukcjami, więc mogę tylko myśleć, że jest to kwestia czytelności? AKTUALIZACJA: Dzięki za odpowiedzi, ale uprzejmie zwrócono uwagę, że to pytanie było już wielokrotnie zadawane na SO, co z perspektywy czasu powinienem był rozważyć i najpierw przeszukać przed pytaniem tutaj. Niektóre z tych, szczególnie przekierowujących linków, stanowią ciekawą lekturę. SO pytanie i odpowiedź Jon Skeet odpowiedź na pytanie


title: Zbliżający się wywiad w Google, szukanie porad dotyczących przygotowania

text: Cóż, uderzałem w książki, gdzie tylko mogłem. Zbliża się rozmowa kwalifikacyjna, najpierw telefoniczna, na stanowisko inżyniera oprogramowania. Przeczytałem wszystkie posty na blogu, przeczytałem wszystkie relacje z wywiadów (niektóre dość stare), a samo Google zasugerowało nawet listę lektur, z których żadna nie zaskoczyła nikogo tutaj. Mimo to, po pewnym czasie przygotowań, nie mogę się oprzeć wrażeniu, że jest tak duży teren do pokonania i nigdy nie jestem pewien, czy iść w głąb, czy wszerz. Nauczyłem się na nowo całej dziedziny compsci, tylko po to, by zapomnieć o większości najdrobniejszych szczegółów, przechodząc do następnego. Nie wiem więc, czy istnieje dobra odpowiedź na to pytanie, ale szukam praktycznych rad, jak poradzić sobie z pozostałymi tygodniami przed rozmową kwalifikacyjną. Część mojego mózgu jest zmęczona wkuwaniem i oczywiście reszta musi być wykorzystana do rozwiązywania trudnych problemów w moim obecnym miejscu pracy.


title: Fikcja zawierająca programy BASIC

text: Wracając do tego, co musiało być w połowie lat 80., kiedy każdy mikrokomputer zawierający BASIC i Choose Your Own Adventure Books były naprawdę popularne, istniały pewne powieści, które miały programy w języku BASIC wymienione w tekście, aby można było wpisać i dalej cieszyć się. Na przykład, o ile pamiętam, w jednej z tych książek poszukiwacze przygód infiltrowali podwodną bazę (i ostatecznie wyczyścili przechowywanie danych złoczyńcy [sądzę, że był to dysk twardy, chociaż wtedy byli niespotykani]). Jeden z programów obejmował grę, w której pilotowałeś łódź podwodną i musiałeś unikać lub strzelać do rekinów. Kod był w języku BASIC; drobne zmiany (takie jak 'CLS' -> 'HOME') musiały zostać wprowadzone dla konkretnego komputera, a do wyświetlania akcji używano starego, dobrego 40-kolumnowego trybu tekstowego. IIRC, fabuła nigdy nie zależała od programów. Moje pytanie brzmi, czy ktoś jeszcze pamięta takie książki? Czy znasz jakieś tytuły, których mógłbym poszukać lub któreś z sieci? Bawię się pomysłem napisania takiej historii (nie, nie w BASIC!) i naprawdę chciałbym zobaczyć, jak to zostało zrobione kiedyś.


title: Co to jest „programowanie bez ego”?

text: Po raz pierwszy usłyszałem ten termin jakieś piętnaście lat temu. Moje rozumienie jest podobne do opisanego w artykule Wikipedii i artykule TechRepublic: pracujesz ze swoimi kolegami w „przyjazny, kolegialny sposób, w którym osobiste uczucia są odkładane na bok”. Obejmuje to takie rzeczy, jak robienie wzajemnej oceny z wzajemnym szacunkiem i chęcią uczenia się, a nie poczucie, że jesteś „własnym” kodem, więc jeśli ktoś ma sugestię lub mówi, że jest błąd lub musi go zmienić, nie przyjmujesz postawy obronnej to. Myślałem również, że w dużej mierze chodziło o nastawienie, które sprzyja dobrym relacjom z innymi programistami w celu ulepszenia kodu. Więc nie uważam tego za niezgodne z dumą z jakości swojej pracy lub żalem, jeśli coś, co zrobiłeś, spowodowało problem u klienta. Jednak odpowiedź na ostatnie pytanie skłania mnie do myślenia, że niektórzy programiści mają inne rozumienie „programowania bez ego”. Więc jaka jest prawidłowa definicja? A jakie są jego implikacje?


title: Jaka jest praca wirtualnej maszyny językowej i jej tworzenie

text: Ostatnio niesamowicie zainteresowałem się rozwojem języka. W ciągu ostatnich kilku tygodni napisałem wiele interfejsów językowych (lexer, parser), w tym kalkulator języka/parsera wyrażeń i wiele innych. Po stworzeniu tylu rzeczy zdałem sobie sprawę, że MUSI być więcej abstrakcji między parsowaniem a wykonaniem kodu niż to, co mam obecnie, co prowadzi do moich głównych pytań. Moje pierwsze pytanie brzmi: to. Czym dokładnie jest językowa maszyna wirtualna, jak na przykład JVM (oczywiście mój wyobrażony system byłby znacznie, znacznie bardziej mniejszy). Co to robi? Czy faktycznie emuluje sprzęt i wykonuje instrukcje niskiego poziomu na emulowanym sprzęcie? Czy może po prostu zapewnia abstrakcję i wykonuje w systemie instrukcje zarządzane niższego poziomu? (Przeczytałem to pytanie, ale tak naprawdę nie pomogło mi to zrozumieć) Drugie pytanie. Czym dokładnie jest kod bajtowy? Czy to jakiś kod maszynowy dla maszyny wirtualnej? A może jest to możliwe do odczytania przez człowieka asembler, takie jak instrukcje, i czy te instrukcje są bezpośrednio wykonywane lub w jakiś sposób skompilowane do kodu natywnego? Trzecie pytanie. Jak mam to zrobić? Uważam się za kompetentnego programistę i w żadnym wypadku nie potrzebuję instrukcji krok po kroku, tylko przegląd tego, co dokładnie muszę robić i jak niski jest to poziom. Dziękuję bardzo za wszelką pomoc/sugestie/wyjaśnienia. Zadawaj pytania, jeśli coś, co powiedziałem, było mylące lub potrzebujesz więcej szczegółów na ten temat. Dzięki jeszcze raz!


title: Co to jest środowisko programistyczne? np. Włóczęga

text: Szczęśliwym trafem trafiłem na tę stronę http://www.vagrantup.com/ Mówi się, że oprogramowanie jest przeznaczone dla środowiska programistycznego. Moje pytanie brzmi, jaka dokładnie definicja środowiska programistycznego (w tym przypadku jest włóczęga)? Zastanawiam się, co włóczęga może dać mi korzyści jako programistę PHP, moje obecne przemyślenia na temat środowiska programistycznego to Web Server. Czy to prawda?


title: Używanie publicznej nazwy użytkownika jako nazwy logowania

text: Właśnie dotarło do mnie, że rozwijany przeze mnie system udostępnia nazwę użytkownika w URI. Jest to problem, ponieważ niektóre strony użytkowników są publiczne. Dlatego ludzie będą znali swoją nazwę użytkownika. Myślałem, że będzie to kwestia bezpieczeństwa, ale potem zdałem sobie sprawę, że wielkie nazwiska, takie jak Twitter, robią to samo. Prawie każdy użytkownik Twittera ma swoją nazwę użytkownika na pełnym ekranie. Jeśli wielkie nazwisko, takie jak Twitter, uważa je za bezpieczne, czy powinienem również założyć to samo?


title: Uniemożliwić programistom używanie stałych

text: Mam jeden system oprogramowania, który pozwala programistom określić identyfikator lub nazwę w celu utworzenia `NodeReferences`. Oba działają dobrze, ale nie ma gwarancji, że identyfikatory będą takie same w różnych środowiskach. Próbowałem w dokumentacji i rozmowach podkreślać, że identyfikatory nie powinny być zakodowane na sztywno (ponieważ psują się po wdrożeniu w innym środowisku), ale niektórzy programiści nadal ich używają. Działa to tylko w środowisku deweloperskim: var level = LevelReference.ById(20); var node = NodeReference.ByName(poziom, _patientGuid.ToString()); Działa to we wszystkich środowiskach: var app = ApplicationReference.ByName("Raportowanie"); var area = AreaReference.ByName(app, "Default"); var level = LevelReference.ByName(obszar, "Pacjent"); var node = NodeReference.ByName(poziom, _patientGuid.ToString()); Myślę, że odwołanie polega na tym, że generuje mniej linii kodu. Używanie identyfikatorów samo w sobie nie jest złe (ponieważ istnieją prawidłowe przypadki użycia, takie jak buforowanie identyfikatora zwróconego z serwera i późniejsze używanie go do szybszego wyszukiwania), ale identyfikatory zakodowane na sztywno są złe. W większości przypadków pierwszy kod zgłosi wyjątek, ale możliwe, że może to być poprawny identyfikator obiektu innego niż zamierzony przez programistę, co może spowodować bardzo poważne problemy. Jaki jest najlepszy sposób na zniechęcenie do używania takich stałych w kodzie? Idealnie chciałbym zgłosić jakiś błąd kompilatora, gdy widzę kod taki jak pierwszy przykład, lub przynajmniej zgłosić wyjątek, zanim wywołanie dotrze do bazy danych.


title: Jakie języki są obecnie używane do programowania niskopoziomowego?

text: Kiedy słyszę programowanie niskopoziomowe, takie jak sterowniki, systemy wbudowane, systemy operacyjne itp., od razu myślę o C i być może o C++. Ale głównie C. Ale jakie inne języki są również używane do tego rodzaju zadań? Dzisiaj mam na myśli nie to, co było używane.


title: Czy kontrola jakości powinna zgłosić 5 oddzielnych błędów, czy jeden błąd z wieloma częściami?

text: Pytanie może nie być tak proste, jak się wydaje, ponieważ trochę się z tym zmagaliśmy. Jeśli istnieje 5 oddzielnych błędów, którymi można się zająć za pomocą jednej poprawki, to marnotrawstwo jest takie podejście. Jeden błąd może prześlizgnąć się przez szczeliny i zabrać pełny obraz, lub po prostu zostać ukryty na jakiś czas (mamy kilka lat zaległych błędów, a nasz tracker błędów jest do bani w wyszukiwaniu :( ). Teraz, jeśli złożysz wniosek błąd składający się z ponad 100 części (takich jak brak podpowiedzi pomocy we wszystkich 234 oknach dialogowych), należy go traktować jako projekt i podzielić.Jeśli jednak jest to błąd składający się z 3-4 części, programista spróbuje naprawić wszystkie 3 lub 4 naraz.Tutaj robi się interesująco.Co jeśli koder naprawi tylko 3 lub 3,5 z 4?Czy po przetestowaniu nowego błędu należy zgłosić nowy błąd, a stary zamknąć?Jeśli tak, to zachęca to do niechlujnego programowania praktyk, gdzie wystarczająco blisko jest wystarczająco dobre. Jeśli błąd ma się nie powieść, wszystko musi zostać ponownie wykonane i przetestowane. A teraz ... co, jeśli część 1 ma rozmiar chlebaka pod względem rozmiaru i ryzyko, część 2 jest bardziej jak samochód, część 3 jest jak dom i tak dalej :) Przy ustalaniu rozmiaru i ustalaniu priorytetów tego błędu (muszę wspomnieć, że używamy Scruma), część dotycząca domu była nie zauważono - kto i tak czyta cokolwiek poza tytułem błędu? Został więc uznany za nisko wiszący owoc - niski wysiłek, niskie ryzyko, zadowolony użytkownik = wysoka nagroda. Ale ostatnio zostaliśmy ugryzieni z jednym z nich. To, co wydawało się logicznie tym samym obszarem, było w rzeczywistości kodem w stanie przejściowym, w którym próbujemy odrzucić jedną metodę robienia rzeczy lub jedną bibliotekę do tworzenia widżetów z inną, nową i lepszą. Problem polega na tym, że musieliśmy wydać w połowie konwersji, więc stworzyliśmy dwie bardzo różne bestie, które wyglądają podobnie. Nasi ludzie zajmujący się kontrolą jakości nie wiedzieli o tym, nie oczekuje się, że będą o tym wiedzieć, więc w ich mniemaniu są to te same problemy. Musimy być przyjaźnie nastawieni do QA - nie naciskać zbyt mocno lub zbyt często, ale także starać się podać zestaw heurystyk, które pomogą zdecydować, czy zgłosić jeden błąd, czy wiele. Przypuszczam, że problem może leżeć w słabych narzędziach, gdzie dzielenie i łączenie błędów jest trudne. Jak jednak ogólnie sobie z tym radzisz? PS W Scrumie - gdy już postanowisz coś naprawić, prawdopodobnie powinno to zostać naprawione. Złam tę zasadę zbyt wiele razy, a dyscyplina się pogorszy.


title: Narzędzie do zarządzania wymaganiami przez cały cykl życia oprogramowania

text: Poszukuję narzędzia do zarządzania wymaganiami lub funkcjami projektu programistycznego. Będzie on używany przez niewielki, zróżnicowany geograficznie zespół składający się z 5-10 osób do podnoszenia, omawiania i śledzenia wymagań. W związku z tym będzie potrzebować: * Obsługa wielu użytkowników * Oparta na sieci WWW * Obsługa hierarchii wymagań, np. relacja rodzic / dziecko * Zapewnienie środków do omówienia indywidualnych wymagań * Obsługa przesyłania plików * Opłacalne. Idealnie bezpłatne lub Niektóre z dostępnych narzędzi do zarządzania projektami są przesadne lub koncentrują się na zadaniach lub planowaniu zasobów, a nie na funkcjach / wymaganiach. Czy ktoś ma rozwiązanie?


title: Czy to poltergeist, czy jest to uzasadnione?

text: Doszedłem do punktu przeprojektowania mojego kodu, w którym mam do czynienia z nieuchronnym zagrożeniem Poltergeist Anti-Pattern. Główny obiekt aplikacji ma dwa obiekty „oko”. Obiekty oka mają funkcję „RenderHUD”, która ma wykorzystywać (a) stan obiektu oka i (b) stan obiektu aplikacji do renderowania HUD w każdej klatce. Mam teraz funkcję, która pobiera informacje HUD z obiektu aplikacji, a następnie przekazuje je jako argumenty do funkcji „RenderHUD” każdego oka. Problem polega na tym, że te listy argumentów są baaaaaaaaaaaaadzebawniej dłuuuugie. Oczywistym rozwiązaniem jest umieszczenie ich wszystkich w strukturze, np. HUD_Info. Ale to byłby nowy poltergeist, który byłby tworzony i niszczony przy każdej klatce, prawda? Jakiś łatwy sposób na uniknięcie tego?


title: Nauka YACC w dzisiejszych czasach ma sens?

text: Mam ogromny projekt, który używa YACC i musiałbym naprawić w nim błąd. Mógłbym poprosić kogoś, kto to napisał, aby to naprawił, ale interesuje mnie, jak działają kompilatory. Czy w dzisiejszych czasach warto uczyć się YACC? Powiedziano mi, że jest stary i przestarzały. Chciałbym zrozumieć, jak działają kompilatory/llvm i inne podobne rzeczy... a co z YACC?


title: algorytm programowania - gra w byki i krowy

text: Pracuję nad grą w Byki i Krowy. I mam następujący kod, który obliczył liczbę byków i krów: niech User i comp będą listami, które mają 3 cyfry wprowadzone przez użytkownika i liczbę losowo wygenerowaną przez comp cows = 0 byków = 0 dla x w User: if x in comp: if comp.index(x) == User.index(x): byki += 1 else: krowy += 1 To działa całkiem dobrze, chyba że liczba wygenerowana przez komputer powtórzyła się cyfra (np. 277) i wpisuję 447. to co się dzieje, to że dostaję 1 krowę i zero byków. A ja powinienem dostać 1 byka i 0 krów. **Pamiętaj, że nie ma problemu z grą, gdy nie ma powtarzających się cyfr.** Nie jestem w stanie zrozumieć, na czym polega problem i dlaczego się pojawia. Byłbym bardzo wdzięczny za jakąkolwiek pomoc w zrozumieniu źródła tego problemu. **Co ważniejsze** chcę to zrobić. Więc chcę wyjaśnienia tego podejścia lub nowego sposobu myślenia o tym. Do programowania tej gry używam Pythona Tkintera. **proszę** pomóż mi rozwiązać ten problem.


title: czy wydarzenie z subskrybentami uniemożliwi GC'ed obiektu?

text: Mam obiekt, który ma zdarzenie, które z kolei ma subskrybentów. Wiem, że subskrybujące obiekty nie zostaną poddane GC, ponieważ delegat, który przechowywali dla zdarzenia, jest z nimi połączony, dzięki czemu są one połączone z wykresem obiektów, dopóki nie zostanie ich wyraźnie anulowana subskrypcja. Jest to logiczne, ponieważ w przeciwnym razie nic dobrego nie wydarzy się po wyzwoleniu zdarzenia. **Czy dotyczy to również właściciela wydarzenia?** _Myślę_, że tak nie jest, ponieważ zgodnie z moją wiedzą obiekty subskrybujące nie mają z nim połączenia. I znowu używając zdrowego rozsądku (który wiem, że niekoniecznie odnosi się do rzeczywistości IT): Nic złego nie może się stać, jeśli właściciel wydarzenia jest GC'ed, tylko wydarzenie nigdy się nie uruchomi (znowu). **Czy to założenie jest prawidłowe?**


title: Czy MongoDB to właściwy wybór w moim przypadku?

text: Zamierzam zbudować mój pierwszy prawdziwy projekt w Rails, który składa się z aplikacji webowej składającej się z 3 głównych części: * Część statyczna, w której nie jest używana żadna baza danych * Część dotycząca rejestracji użytkownika, która będzie wymagała bazy danych i mogę używać MySQL od każdego wiersz użytkownika będzie miał te same pola * "Aplikacja", w której użytkownicy będą mogli tworzyć, organizować, edytować... elementy w kolekcjach i udostępniać je innym użytkownikom Będzie kilka typów elementów, a każdy z nich będzie miał na przykład inne opcje Mogę mieć elementy „wideo” z następującymi opcjami: * identyfikator * identyfikator_użytkownika * identyfikator_kolekcji * tytuł * platforma (jeśli jest osadzony) * adres URL (jeśli jest osadzony) * nazwa pliku (jeśli jest hostowany w mojej aplikacji) * rozmiar pliku (identyfikator hostowany w mojej app) i elementy "mapy": * id * identyfikator_użytkownika * id_kolekcji * tytuł * platforma (mapy google, mapy bing...) * lokalizacja * adres URL * rozmiar mapy Jak możesz, podczas gdy dla użytkowników mogę używać MySQL do MongoDB może być przydatne, ponieważ każdy element może wymagać innych opcji niż inny element Do teraz zawsze używam PHP i MySQL (zawsze na hostingu współdzielonym dla małych projektów), a skalowalność to dla mnie zupełnie nowe słowo. Mam czas na naukę, ale chciałbym móc zrobić coś konkretnego w około 1 miesiąc. Dużo czytałem o MongoDB i NoSQL vs RDMS i MySQL i po wypróbowaniu muszę powiedzieć, że podoba mi się, jak działa MongoDB: bez tabel, bez wierszy i dokumentów JSON tak: * W mojej sytuacji, co byś polecał? Dlaczego? * O skalowalności mogą występować problemy z MongoDB? jeśli tak, kiedy (pod względem rozmiaru bazy danych) i czy te problemy znacznie spowalniają moją aplikację? **Edycja: jak aplikacja będzie działać** Ponieważ wielu pytało, jak chciałbym, aby działała aplikacja: 1. Użytkownik rejestruje się 2. Jest zalogowany 3. Tworzy swoją pierwszą kolekcję, obok której może tworzyć nieskończoną ilość Pozycje 4. Pozycje są różnego typu i każdy z nich wymaga innych danych do zapisania w bazie danych oraz dodawania lub modyfikowania typów pozycji Użytkownicy mogą tworzyć w niej inne kolekcje i pozycje. Więc mamy CRUD dla kolekcji i elementów w nich, a każda kolekcja/element jest odnoszony do konkretnego użytkownika. Głównym problemem z MySQL jest to, że nie ma elastycznego schematu, jest sposób na rozwiązanie tego (obejście?)? Myśląc o NoSQL jedyna wątpliwość, jaką mam, to join, na przykład biorąc pod uwagę pewną kolekcję chcę pobrać dane związane z polem User z id = user_id w kolekcji **EDYTUJ: Pomysł, aby dalej używać MySQL** Utwórz pole w tabela "pozycje" z opcjonalnymi ustawieniami, każde ustawienie podzielone przez | lub inny symbol. Następnie zapiszę gdzieś strukturę opcjonalnych ustawień każdego elementu, na przykład typ elementu "notatki" wymaga dwóch opcjonalnych ustawień "kolor" i "strange_setting", gdy otrzymam dane z MySQL, podzielę pole na opcjonalne ustawienia na tablica wiedząc, że pierwsza pozycja w tablicy dotyczy "koloru" i tak dalej. Co myślisz? są problemy z tym rozwiązaniem? masz inne pomysły?


title: co jest lepsze z tych dwóch architektur i dlaczego?

text: PhpServer obsłuży żądania gSoap i żądania http od klientów. PushServer będzie wysyłał powiadomienia do klientów i działał jako serwer plików. Istnieje wiele maszyn serwerowych. Każdy PhpServer będzie komunikował się z określonym PushServerem w razie potrzeby. Każdy PhpServer musi zarejestrować się w PushServer, aby PushServer mógł pomóc w wysyłaniu powiadomień do klientów. Oto dwie architektury: 1) Architektura A Ta architektura będzie uruchamiać każdy serwer PushServer z serwerem PhpServer na tej samej maszynie. Każdy klient zarejestruje się na serwerze PhpServer i serwerze PushServer działającym na tej samej maszynie z serwerem PhpServer |Baza danych| _____|_____ | | | | (|PhpServer| + |PushServer|) //ten sam serwer \ / |Client| 2) Architektura B W tej architekturze każdy serwer PushServer będzie działał na jednym komputerze. Każdy klient zarejestruje się na PhpServer i PushServer, które rejestruje PhpServer. |Baza danych| _____|_____ | | (|PhpServer|) （|PushServer|） //dwa serwery \ / |Client| Która architektura jest lepsza i dlaczego? **[aktualizacja]** Martwimy się o wydajność, rozszerzalność i elastyczność. Właściwie pierwszą architekturą jest to, co aktualnie posiadamy i jeśli wybierzemy drugą, musimy zmodyfikować nasze oprogramowanie: PhpServer, PushServer i Client. Tak więc, o ile druga architektura sieci nie jest znacznie lepsza (z punktu widzenia równoważenia obciążenia lub projektowania aplikacji sieciowych), nie wybierzemy drugiej.


title: Książki weryfikacji i walidacji

text: Potrzebuję więc pomocy z weryfikacją i walidacją oprogramowania. Tak więc znam definicje obu, ale… Nie mogę znaleźć żadnych prawdziwych książek na poziomie podstawowym na temat procesu od ustalenia wymagań klienta po wykonanie gotowego produktu. I oczywiście upewniając się, że przetestowałeś go pod kątem tego, co Twoim zdaniem powinien zrobić i czego faktycznie chce klient. Czy ktoś może mi polecić jakieś dobre książki dla początkujących, blogi, prawie wszystko, co tylko daje przegląd V&V? Po prostu szukam konkretnych metod/przykładów, jak sobie z nimi radzić. Szukałem i znalazłem kilka dobrych (zaawansowanych, jeśli mnie pytasz) tekstów drapiących powierzchnię V&V, ale nic na poziomie podstawowym :( Każda pomoc jest bardzo mile widziana.


title: Czy powinienem obsługiwać tryb zgodności z IE?

text: Więc mam klienta, który uruchamia wiele wersji wielu przeglądarek. Obecnie wspieram IE7, IE8, IE9, Firefox4/5, Safari 5 i Chrome. Witryna działa we wszystkich wymienionych przeglądarkach. IE ma funkcję zwaną „trybem zgodności”, która jest obecną zmorą mojej egzystencji. Problem polega na tym, że w trybie zgodności przyciski formularzy działają inaczej. Nie będę wchodził w szczegóły, ale byłoby dużym wysiłkiem, aby strona obsługiwała „tryb zgodności”. Czy jest to coś, o co często pojawiają się prośby? Czy nie mogę odepchnąć klienta i powiedzieć mu, że to po prostu nie wchodzi w grę?


title: Czy powinienem polegać na Visual Studio przy dodawaniu HTML i CSS?

text: Zastanawiam się, czy powinienem polegać na Visual Studio przy dodawaniu elementów HTML i CSS za pomocą viusalnych pasków narzędzi, czy powinienem je pisać sam? Czy jest to uważane za złą praktykę, jeśli polegam na programie Visual Studio, aby to zrobić?


title: Czy przyczyniłbyś się do rozwoju oprogramowania z otwartym rdzeniem?

text: Niedawno rozważałem przyczynienie się do powstania oprogramowania z otwartym rdzeniem (produktu, którego rdzeń został wydany z licencją open-source przez firmę, która go opracowała, ale zachował płatną licencję na bardziej zaawansowaną funkcjonalność). Pojawiły się jednak pewne pytania dotyczące charakteru pracy z projektem open-core i chciałbym mieć wkład społeczności. Moje pytanie brzmi, czy nadal będziesz zmotywowany do wniesienia wkładu, jeśli: * większość, jeśli nie całe oprogramowanie, zostało wniesione przez płatnych programistów. * będziesz korzystał z finansów jednej firmy (w przeciwieństwie do korzyści dla społeczności) * kierunek rozwoju oprogramowania byłby określany przez firmę, a nie przez Ciebie (lub społeczność). Chciałbym też, aby ktoś potwierdził, czy są to mity, czy nie * wdrożenie tych samych funkcji, które są sprzedawane przez firmę, nie będzie dozwolone. * rozwidlenie projektu nie będzie dozwolone (może to zależeć od licencji open-source). Dziękuję Ci. ps: Czy ktoś mógłby stworzyć tag "open-core"?


title: Dlaczego HTTP nie ma przekierowania POST?

text: Przekierowania HTTP są wykonywane za pomocą kodów HTTP 301 i 302 (może również innych kodów) oraz pola nagłówka znanego jako „Lokalizacja”, które zawiera adres nowego miejsca, do którego należy się udać. Jednak przeglądarki zawsze wysyłają żądanie „GET” do tego adresu URL. Jednak wiele razy trzeba przekierować użytkownika do innej domeny za pośrednictwem POST (na przykład płatności bankowe). Jest to typowy scenariusz i tak naprawdę wymóg. Czy ktoś wie, dlaczego tak powszechne wymaganie zostało pominięte w specyfikacji HTTP? Obejściem tego problemu jest wysłanie formularza (z parametrami w ukrytych polach) z akcją ustawioną na lokalizację docelową (wartość pola nagłówka **Lokalizacja**) i użycie `setTimeout` do przesłania formularza do lokalizacji docelowej.


title: dystrybucja języków programowania w systemach wbudowanych

text: Poszukuję statystyk dotyczących dystrybucji języków programowania w sektorze systemów wbudowanych. Znasz dobre strony internetowe, artykuły lub książki? Znalazłem to jako pierwsze odniesienie, ale nadal szukam dalszych informacji: http://www.eetimes.com/electronics-blogs/industrial-control-designline-blog/4027479/Real-men-program-in-C?pageNumber =0 Potrzebuję tego do mojej pracy licencjackiej, która dotyczy programowania HAL mikrokontrolerów za pomocą OOP.


title: Jak ważne jest, aby programiści wyglądali i zachowywali się mądrze?

text: Wiem, że dobry wygląd i ubiór ma ogromne znaczenie w dziedzinach takich jak sprzedaż, marketing czy zasoby ludzkie. Ale czy jest to naprawdę ważne dla programistów, nawet jeśli nie kontaktują się bezpośrednio z klientami lub osobami trzecimi? Czy programista może ujść na sucho z nędznym ubieraniem się i nadal otrzymywać podwyżki, na które zasługuje, wyłącznie na podstawie swoich umiejętności kodowania?


title: Ładowanie następnego poziomu po zakończeniu poprzedniego

text: tworzę grę w wisielca w Visual Studio używając C#. jak mogę załadować 2 poziom po zakończeniu pierwszego.


title: Bity stylu a oddzielne bool's

text: Moja główna platforma (WinAPI) nadal intensywnie używa bitów do stylów sterowania itp. (przykład). Wprowadzając niestandardowe kontrolki, cały czas zastanawiam się, czy zastosować ten styl, czy raczej użyć poszczególnych boolów. Porównajmy je ze sobą: enum EMyCtrlStyles { mcsUseFileIcon = 1, mcsTruncateFileName = 2, mcsUseShellContextMenu = 4, }; void SetStyle(DWORD mcsStyle); void ModifyStyle(DWORD mcsRemove, DWORD mcsAdd); DWORD GetStyle() const; ... ctrl.SetStyle(mcsUseFileIcon | mcsUseShellContextMenu); vs. CMyCtrl i SetUseFileIcon(bool enable = true); bool GetUseFileIcon() const; CMyCtrl & SetTruncteFileName(bool enable = true); bool GetTruncteFileName() const; CMyCtrl & SetUseShellContextMenu(bool enable = true); bool GetUseShellContextMenu() const; ctrl.SetUseFileIcon().SetUseShellContextMenu(); Jak widzę, **Pro Style Bits** * Zgodne z platformą * mniej kodu biblioteki (bez zwiększania złożoności), mniej miejsc do modyfikacji w celu dodania nowego stylu * mniej kodu wywołującego (bez utraty zauważalnej czytelności) * łatwiejszy w użyciu niektóre scenariusze (np. zapamiętywanie / przenoszenie ustawień) * Binary API pozostaje stabilne, jeśli wprowadzane są nowe bity stylu Teraz, pierwszy i ostatni są w większości przypadków niewielkie. **Pro Individual booleans** * Intellisense i narzędzia refaktoryzacji redukują wysiłek związany z „mniejszym pisaniem” * Jednolite jednostki celowe * Bardziej umiejętny kod (jak w przypadku „płynie bardziej jak zdanie”) * Brak zmiany paradymu dla właściwości innych niż bool bardziej nowoczesne, ale i „miękkie” zalety. Muszę przyznać, że „spójność platformy” jest o wiele bardziej kusząca, niż mógłbym to uzasadnić, mniej kodu bez utraty jakości to fajny bonus. **1\. Co wolisz? Subiektywnie za napisanie biblioteki, czy za napisanie kodu klienta?** **2\. Jakieś (pół)obiektywne stwierdzenia, badania itp.?**


title: Jaki jest kluczowy aspekt C/C++, który muszę wiedzieć?

text: Na uniwersytecie miałem pewne doświadczenie w C, jednak programowałem w javie od 2 lat i większość rzeczy z C została pominięta. Teraz muszę przygotować się do testu z C/C++, wątpię, żebym mógł się do tego od razu przystąpić, mając jedynie resztki wiedzy na temat C. Co mogliby pokryć w teście?


title: Przenoszenie wieloGB repozytorium SVN do Git

text: Obecnie moja firma ma rozwiązanie Visual Studio w repozytorium SVN, które jest zorganizowane w następujący sposób: SolutionFolder (~3,5 GB) |-> SolutionName.sln |-> .. Niektóre foldery z kodem źródłowym... (~250 MB) |-> ThirdParty (~3 GB) |-> Narzędzia | -> Narzędzie1 | -> Tool2 Tool1 i Tool2 są budowane niezależnie (mają własne rozwiązania), ale produkują pliki wykonywalne, które są używane w głównej kompilacji. Folder ThirdParty zawiera wszystkie zależności projektu, w tym niektóre wstępnie skompilowane pliki .lib o wielkości ponad 100 MB i duże biblioteki, takie jak boost. Wygodnie jest mieć to wszystko w jednym repozytorium SVN, dzięki czemu (1) programista musi wykonać tylko jeden check-out i (2) nie musimy śledzić, których wersji zależności potrzebujemy dla każdej wersji kompilacji. Z drugiej strony sprawdzenie tego repozytorium zajmuje trochę czasu. Jaki byłby najlepszy sposób przeniesienia tej struktury projektu do git? Przypuszczalnie najlepiej jest wykluczyć ThirdParty i być może Tools z głównego repozytorium, ale chcielibyśmy, aby ThirdParty było łatwe do pobrania w jednym kroku i podoba nam się jego wersja (a niezgodności wersji między głównym repozytorium a ThirdParty/Tools byłyby złe). W tym momencie nie interesuje mnie zachowywanie historii, tylko wymyślanie, jak zorganizować taki projekt.


title: Zapobieganie dwukrotnie wywołanej funkcji obiektu JavaScript

text: Próbuję ponownie użyć obiektu, ale moja funkcja jest wywoływana dwukrotnie. Oto co mam: var KEYBOARD = { template: 'klawiatura'; getkeyboard: function(){ console.log(this.template); } } teraz w jednym pliku robię to: $.extend(KEYBOARD, { template: 'keyboard', }).getKeyboard(); następnie w innym pliku robię: $.extend(KEYBOARD, { template: 'keypad', }).getKeyboard(); Teraz w drugim pliku wypisuje się funkcja getKeyboard: klawiatura klawiatury Czy ktoś może mi powiedzieć, co robię źle? Pomyślałem, że mógłbym zmienić właściwości i uruchomić je przez funkcję, ale z jakiegoś powodu przechowuje ona wartości pierwszego obiektu.


title: Nowe CAPTCHA używające zdań?

text: Właśnie myślałem o tym, jak recaptcha staje się trudniejsze, gdy pomyślałem o innym możliwym rozwiązaniu. Obrazy nie będą trwać wiecznie, więc pewnego dnia będziemy potrzebować czegoś innego - jak ludzka logika czy emocje. Google i inni próbują grupować obrazy według kategorii (znajdź obraz, który nie należy), ale wymaga to dużej ilości obrazów i nie działa dla osób niewidomych. W każdym razie, co by było, gdyby zgromadzono ogromną kolekcję tekstu (książki z domeny publicznej z każdego języka), a użytkownikowi pokazano zdanie z 1 (lub 2) słowami, które byłyby polem wyboru? Tylko komputery, które znały poprawną gramatykę angielską/hiszpańską/niemiecką, byłyby w stanie określić, które ze słów należy do zdania. Czy byłyby jakieś problemy z takim podejściem? Przypuszczam, że każdemu, kto znał język, w którym wyświetlane jest zdanie, łatwiej byłoby znaleźć odpowiedź, niż próbować przeczytać tekst reCAPTCHA. Co więcej, przechowywanie szalonej liczby zdań zajęłoby tylko kilka gigabajtów miejsca i nie zajęłoby prawie czasu procesora na tworzenie obrazów/dźwięków. Innymi słowy, każdy może hostować własny system captcha przy minimalnym wpływie na wydajność systemu. **Czy jest jakiś problem z tym podejściem?** Dokładniej szukam głównego problemu z tym podejściem. migrowane z stackoverflow


title: Aplikacja webowa Django z gniazdami sieciowymi

text: Chcę stworzyć usługę sieciową za pomocą Django, ale ma ona również funkcjonalność websocket. Po przeczytaniu trochę, oto stos technologiczny, na który patrzę: ------------------------------- -- | Django (obsługa żądań synchronizacji) | ---------------------------------- | | (wsgi) | ------------------------------------- | Tornado (obsługa gniazd sieciowych, wsgi) | ------------------------------------- | | | ------------------------------------- | Gunicorn (tarła robotników tornado) | ------------------------------------- | | | --------------------------------------- | nginx (odwrotne proxy do gunicorn) | --------------------------------------- Tak więc żądania synchronizacji (strona internetowa, większość wywołań API) przejść całą drogę przez stos do Django, ale żądania websocket będą obsługiwane bezpośrednio przez Tornado (wywołania websocket będą rozróżnialne po adresie URL). Czy nadmiernie to komplikuję? Dodałem warstwę Gunicorn, ponieważ pojedynczy pracownik tornada blokowałby się podczas obsługi żądania WSGI, ale może jest sposób na obejście tego? Zadaję pytanie tylko dlatego, że wydaje mi się, że jest to wiele warstw. Czy to wygląda na rozsądny sposób na zrobienie Django z websocketami?


title: Liczne połączenia Sync/Async do usługi internetowej z aplikacji hybrydowej

text: Mam wymóg, w którym muszę wielokrotnie dzwonić do serwisu internetowego, aby zaktualizować lokalną bazę danych. Ponieważ muszę również obsługiwać niższe telefony z Androidem, nie jestem jeszcze pewien, w jaki sposób byłoby to możliwe bez faktycznego wyczerpania pamięci urządzenia i ostatecznego zawieszenia aplikacji? Możliwy problem: Rozważmy, że muszę zsynchronizować 100 rekordów z usługą internetową, a każdy z nich ma określony zestaw zwracanych wyników i powiązane z nim operacje na lokalnej bazie danych. Problem, z którym mam teraz do czynienia, polega na tym, że jeśli używam połączeń synchronicznych, problem z pamięcią staje się poważny, a aplikacja ulega awarii, a jeśli używam połączeń asynchronicznych, aplikacja zajmuje zbyt dużo czasu, a także rozpoznawanie zwracanych danych będzie ogromną trudnością. **Platforma** : iOS + Android **Technologia** : AngularJS + Phonegap **Webservice** : RESTful **Uwaga** : Pamiętaj, że używam wyłącznie technologii front-endowych i byłaby to aplikacja hybrydowa.


title: Jak radzisz sobie ze szczegółami podczas czytania kodu?

text: Po przeczytaniu kilku projektów stwierdzam, że to nie architektura oprogramowania jest naprawdę trudna do poznania. Nie jest trudno od razu rozgryźć architekturę, jeśli projekt jest jasno zaprojektowany i zaimplementowany, jeśli jest trudny i nigdy wcześniej nie widziany, jakiś dzień później mogę znaleźć jakiś wzór podobny do tego, który czytałem w tej samej domenie. Trudność polega na tym, że pojęcia i mechanizmy zdefiniowane przez autora są naprawdę trudne do odgadnięcia, a pojęcia te mogą rozprzestrzenić się w całym projekcie, co utrudnia zrozumienie. Sytuacja jest normalna i uniwersalna, a będąc w firmie możesz zadawać pytania koledze. Jednak jest gorzej, jeśli nikt wokół ciebie nie zna tych szczegółów. Jak radzisz sobie z tymi szczegółami, które blokują czytanie?


title: Udostępnij warstwę danych dla projektu outsourcingowego

text: Jesteśmy małym zespołem programistów, a teraz mamy do czynienia z sytuacją, w której część pracy musimy zlecić na zewnątrz, aby wykonać ją na czas. Projekt dotyczy strony internetowej, która została wcześniej zbudowana przy użyciu formularzy webowych asp.net, EF i serwera SQL. Wcześniej zbudowaliśmy warstwę danych i zoptymalizowaliśmy SQL, ale musimy skompletować frontend projektu. Klienci chcą asp.net MVC i HTML5. Problemem jest dla nas jak otworzyć warstwę danych dla zespołu outsourcingowego bez narażania lub ujawniania jakichkolwiek danych?


title: Czy należy zdefiniować interfejs i zakodować dla niego adapter za każdym razem, gdy zostanie znaleziona zależność?

text: Biorąc pod uwagę konkretną klasę/bibliotekę innej firmy, z której chcesz skorzystać, najprostszą rzeczą do zrobienia byłoby po prostu zakodowanie wywołań API do niej za pośrednictwem aplikacji. Z drugiej strony masz możliwość zdefiniowania interfejsu, który ogólnie dyktuje, co chcesz - nie _jak_ -, a następnie postępuj zgodnie ze wzorcem Adapter, aby powiązać swój interfejs z klasą innej firmy. Obecnie czuję się skłonny do drugiej opcji, ponieważ: * Tworzy pojedynczy punkt zmiany, jeśli kiedykolwiek będziesz chciał zmienić dostawcę funkcjonalności * W podobny sposób pozwala dodać więcej dostawców bez zmiany kodu aplikacji * Pozwala na śledzenie twojego własne konwencje nazewnictwa, prostsze sygnatury metod itp. Rzecz w tym, że nie mam doświadczenia z tym podejściem i nie wiem, jak skomplikowane lub niewygodne może się to stać. Chciałbym również wiedzieć, czy są jakieś typowe błędy podczas podążania za tym wzorcem. W moim konkretnym przypadku nie chcę zawijać ani gigantycznej biblioteki -np. GUI- lub mała funkcja. Są też realne możliwości, że zmienię dostawcę w przyszłości, więc to nie jest YAGNI. Dziękuję Ci


title: Czy mogłoby być bardziej wydajne, aby systemy w ogóle pozbyły się stosów i po prostu używały sterty do zarządzania pamięcią?

text: Wydaje mi się, że wszystko, co można zrobić ze stosem, można zrobić ze stertą, ale nie wszystko, co można zrobić ze stertą, można zrobić ze stosem. Czy to jest poprawne? Następnie, dla uproszczenia, a nawet jeśli stracimy trochę wydajności przy pewnych obciążeniach, czy nie byłoby lepiej po prostu wybrać jeden standard (tj. stertę)? Pomyśl o kompromisie między modułowością a wydajnością. Wiem, że nie jest to najlepszy sposób na opisanie tego scenariusza, ale ogólnie wydaje się, że prostota zrozumienia i projektowania może być lepszą opcją, nawet jeśli istnieje potencjał do lepszej wydajności.


title: Jaki stos klient+serwer Java umożliwia asynchroniczne wyświetlanie wyskakujących okienek i odpowiedzi z informacjami o kliencie?

text: Będąc nowicjuszem w Javie, chciałbym skorzystać z następującego scenariusza, aby pokierować moją nauką i przydałoby się kilka rad! Najpierw chcę zbudować aplikację serwera Java, która obsługuje ustawienia logowania i klienta, a na podstawie informacji o kliencie pobiera losowe wpisy bazy danych i wysyła te losowe wpisy do klienta na czasomierzu. To musi działać dla wielu klientów, każdy z własnymi prywatnymi licznikami czasu względem głównej bazy danych i po prostu zapętla liczniki czasu, więc nie jest to jednorazowe wyszukiwanie. Po drugie chcę, aby klient był zalogowany przez cały dzień i powiadamiał, a może wyskakiwał lokalnie z informacjami z serwera. To wyskakujące okienko będzie małym formularzem wejściowym, który zostanie następnie odesłany na serwer. Nie mogę tego zrobić jako strony sieci Web, ponieważ chcę, aby była uruchamiana za każdym razem, gdy klient chce uruchomić aplikację lokalną. Może to być ewentualnie wykorzystane jako kalendarz, terminarz spotkań lub powiadamianie o harmonogramie dla klientów, które są moimi historyjkami użytkowników. Doceniamy sugestie dotyczące odpowiednich wzorców i technik projektowych!


Cześć Społeczność **Programistów**. Co sądzisz o następujących kwestiach: _Czy warto, aby nowi programiści (absolwenci) zaczynali jako testerzy/naprawiacze błędów?_ Są tu dwie szkoły myślenia, z którymi się spotkałem. 1. Mając nowych programistów (absolwentów) zaczynających jako testerzy / naprawiający błędy / wykonujący pracę SLA (Service Level Agreement), zapoznaj ich z bazą kodu. Daje im również możliwość nauczenia się, jak czytać kod [innych ludzi]. Co więcej, naprawiając błędy, nauczą się pewnych złych i dobrych praktyk, które, miejmy nadzieję, mogą im pomóc w przyszłości. 2. Innym sposobem myślenia jest to, że jeśli natychmiast zaczniesz nowych programistów coś takiego jak testowanie/naprawianie błędów/praca SLA, ich apetyt na świat deweloperski może zniknąć i/lub mogą odejść z firmy i potencjalnie uwolnić się od wspaniałego przyszłego zasobu. Czy istnieje równowaga, którą należy zachować między tymi dwoma? Obecnie tam, gdzie pracuję, nie ma jednoznacznej definicji tego, czym zajmują się nowicjusze. Niektórzy przechodzą bezpośrednio do pracy z klientem, podczas gdy inni wpadają w świat SLA. Czy firmy powinny mieć taką politykę? A może powinien być rozpatrywany indywidualnie, czy w oparciu o możliwości? Mam nadzieję usłyszeć od niektórych z Was, którzy mają doświadczenie w tej dziedzinie. Dziękuję!


title: Jaki jest najlepszy sposób na programowanie za pomocą git?

text: Szukam najlepszych praktyk w Internecie, ale nie widzę niczego, co jest spójne. Jeśli masz doskonały proces rozwoju, który obejmuje udane wydania Twojego produktu, a także poprawki/łatki i wydania konserwacyjne i używasz git. Chciałbym usłyszeć, jak używasz git, aby to osiągnąć. Używasz oddziałów, tagów itp.? Jak ich używasz? Proszę o szczegóły.


title: Pytanie o udostępnianie kodu API i aplikacji internetowych

text: To jest pytanie projektowe. Mam aplikację wieloczęściową z kilkoma typami użytkowników. Istnieje klient użytkownika dla pacjenta, który współdziała z usługą sieciową. Za usługą sieciową rozwija się interfejs API, który będzie dostępny dla „użytkowników” instytucjonalnych oraz interfejs dla lekarzy, badaczy i administratorów. Interfejs użytkownika to Flex. Część aplikacji dla lekarza/administratora to RoR. Interfejs API jest oparty na RoR/rack. Komponentem usługi WWW jest Java WS. Wszystkie komponenty mają dostęp do tego samego źródła danych. Te komponenty są wdrażane jako osobne komponenty w swoich własnych subdomenach. Ta decyzja została podjęta, aby umożliwić indywidualne skalowanie komponentów w razie potrzeby. Początkowo podjęto decyzję o podzieleniu kodu aplikacji internetowej RoR z RoR API. Decyzja ta została podjęta w trosce o bezpieczeństwo i koncentrację komponentów na konkretnych zadaniach. Z biegiem czasu koniecznie będzie się nakładać na siebie i po raz drugi zgaduję, że moja decyzja o całkowitym oddzieleniu kodu. Zauważyłem, że kod podnoszony po stronie administratora jest podnoszony, modyfikowany i używany w API. W takim przypadku rozważałem połączenie repozytoriów opartych na Ruby. Interesują mnie pomysły i wgląd w tę sytuację wraz z uzasadnieniem twoich myśli. Dziękuję.


title: Ogólny proces myślowy dla pytań do rozmowy kwalifikacyjnej „Jak zbudowałbyś tę stronę/aplikację”

text: Zebrałem kilka pytań do wywiadu, takich jak „Opisz, jak zaprojektowałbyś aplikację do albumu ze zdjęciami”, „Opisz, jak zaprojektowałbyś tę konkretną funkcję tej konkretnej witryny” (np. polubienia na Facebooku, rekomendacje na Amazon, koszyk, gra blackjacka). A co, jeśli są miliony takich rzeczy? Co byś zmienił? Wygląda na to, że oczekuje się schematu bazy danych lub kilku definicji klas (a może obu?). Nauczyłem się o bazach danych w szkole, ale nigdy wcześniej nie projektowałem aplikacji i nie wiem, od czego zacząć, czy projekty, które wymyślę, są „dobre” i co mogę zmienić, aby była skalowalna. Czy przy projektowaniu tych systemów istnieje ogólne podejście lub proces myślowy? A ogólne problemy/problemy, które wydają się często pojawiać w projekcie, których powinienem unikać? Czy ktoś mógłby przeprowadzić mnie przez jeden (a najlepiej wszystkie, porównując potrzeby każdego) z nich i wyjaśnić: 1) Jak wymyślasz, jakie podmioty są potrzebne? 2) Jak decydujesz o tym, jakie relacje będzie mieć wszystko? 3) Jak włączyć optymalizację wydajności do swojego projektu? 4) Czy robię to za pomocą klas lub baz danych? Czy to ma znaczenie (tzn. czy miałbym klasę, której tak naprawdę nie można przetłumaczyć na przykład na tabelę bazy danych?) Głównym powodem, dla którego pytam, jest to, że przechodziłem przez „Cracking the Coding Interview” i moje odpowiedzi były zupełnie inne od autora – miałem bardzo różne wyobrażenia o tym, jakie zajęcia są ważne. **MOJA PRÓBA:** Dzięki aplikacji do udostępniania zdjęć na pewno będę miał zajęcia/tabele: Zdjęcie i Użytkownik. Następnie myślę, że jeśli próbujemy stworzyć schemat, istniałaby tabela łącząca zdjęcie i użytkownika, jeśli założymy, że każda osoba na zdjęciu jest połączona ze zdjęciem (czy ta tabela jest konieczna? Jeśli nie, czy nadal jest to powszechna praktyka mieć osobną tabelę dla relacji wiele-do-wielu, czy nie?). Ale jeśli próbujemy przyjąć podejście obiektowe, może zamiast tego mielibyśmy klasę o nazwie album, która wykonuje całą pracę i zawiera wszystkie informacje z dwóch innych tabel/klas. To jedna rzecz, którą zauważyłem w książce - jest kilka klas, a następnie jedna klasa, która zasadniczo zawiera wszystkie informacje i łączy inne klasy - czy to powszechne? Na przykład w moich powyższych przykładach wydaje się, że to miałoby zastosowanie? Mam tylko nadzieję na pewne ogólne zasady/wytyczne do przestrzegania, ponieważ w tej chwili nie mam pojęcia, jak powiedzieć, jak wygląda dobra architektura dla dużego systemu.


title: Czy języki funkcyjne są rodzajem wyprowadzania programu?

text: Wyprowadzenie programu jest definiowane jako wyprowadzenie programu z jego specyfikacji. Zwykle ten język specyfikacji jest jakąś formą logiki zdań, ale z tego, co rozumiem, nie musi tak być. Gwoli ścisłości mam tutaj do czynienia tylko z językami czysto funkcjonalnymi, takimi jak Haskell. Kiedy piszesz program w Haskell, nie opisujesz _jak_ wykonuje się obliczenia, ale jakie rzeczy _są_. Na przykład w tej funkcji, która generuje liczby Fibonacciego, wszystko to jest podane w specyfikacji liczb Fibonacciego, a nie w jaki sposób funkcja powinna być zaimplementowana. fib :: int -> int fib n = (fib n-1) + (fib n-2) fib 1 = 1 fib 0 = 1 Aby ten kod działał, kompilator Haskella musi przekonwertować tę deklaratywną specyfikację funkcji na imperatyw kod maszynowy. Czy nie jest to z definicji rodzaj wyprowadzenia programu?


title: Jakie znaczenie ma XML w świecie JSON?

text: Jak ważna jest nauka języka XML, skoro JSON jest w stanie zrobić prawie wszystko, czego potrzebuję? To powiedziawszy, używam JSON głównie do żądań AJAX i pozyskiwania danych z różnych API. Jestem totalnym nowicjuszem w tworzeniu stron internetowych, a powodem, dla którego o to pytam, jest to, że chcę wiedzieć, czy powinienem kupić książkę o XML, czy po prostu mogę ją przepuścić.


title: Czy oficjalne wydanie „Mango” pozwoli na sideloading aplikacji na urządzeniach WP7?

text: Jakieś wieści, czy oficjalne wydanie Mango pozwoli na sideloading aplikacji? Mam na myśli możliwość wdrażania aplikacji bez przechodzenia przez MarketPlace? Chciałbym zobaczyć możliwość wdrażania własnych aplikacji na własnym urządzeniu bez korzystania z usług stron trzecich i ponoszenia dodatkowych opłat. Nie planuję publikować aplikacji publicznie. (Próbowałem ChevronWP7 i nie mógł działać zgodnie z przeznaczeniem. Prawdopodobnie przestarzały przez MS.)


title: Wzorzec konstruktora wewnątrz interfejsu. Zła decyzja projektowa?

text: Mam problem z oceną implementacji wzorca konstruktora, który właśnie wymyśliłem. Kontekst jest biblioteką API, więc staram się nie ujawniać żadnych implementacji, aby mieć stabilny interfejs, a jednocześnie móc później zmieniać implementacje. Myślę, że chociaż istnieje odniesienie do implementacji w pliku _file_ interfejsu, interfejs i implementacja nie są w rzeczywistości połączone, ponieważ > W efekcie statyczna klasa zagnieżdżona jest behawioralnie klasą najwyższego poziomu... Zaleta tego projekt polega na tym, że klienci mogą wywoływać `Osoba osoba = new Person.Builder().age(20).firstName("John") .lastName("Doe").build();` bez potrzeby posiadania dedykowanej klasy typu Factory . Czy czegoś mi brakuje, czy jest to ważna decyzja projektowa? Pakiet **Osoba.java** net.mhi.rd; interfejs publiczny Osoba { int getAge(); Ciąg pobierzFirstName(); Ciąg pobierzNazwisko(); public static class Builder { int wiek; Ciąg imię; Ciąg nazwisko; wiek budowniczego publicznego (wiek int) { this.age = wiek; zwróć to; } public Builder firstName(String firstName) { this.firstName = firstName; zwróć to; } public Builder lastName(String lastName) { this.lastName = lastName; zwróć to; } public Person build() { return new PersonImpl(this); } } } **PersonImpl.java** pakiet net.mhi.rd; class PersonImpl implementuje Person { prywatne końcowe int wiek; prywatne końcowe String imię; prywatne końcowe String nazwisko; PersonImpl(Person.Builder builder) { this.age = builder.age; this.firstName = budowniczy.firstName; this.lastName = budowniczy.lastName; } @Override public int getAge() { zwróć wiek; } @Override public String getFirstName() { return firstName; } @Override public String getLastName() { return lastName; } }


title: Czy Perl jest przestarzały dla CGI i FCGI?

text: Kiedy tworzyliśmy strony internetowe w 1996 roku, na backendzie były CGI, FCGI i Perl. Dlaczego Perl nie jest już tak popularny i zamiast tego używamy Javy, Pythona, Go, PHP, C# i wszystkiego oprócz Perla? Wydaje mi się, że Perl powinien być dobry, ponieważ miał dużo czasu na dojrzewanie. Co się stało, że Perl stracił przydatność jako język serwera?


title: W oprogramowaniu MVC, kto powinien ładować modele?

text: Pracuję w kliencie REST JavaScript i staram się podążać za wzorcem MVC, ale przyszło mi do głowy bardzo podstawowe pytanie: kto powinien wykonać żądanie http i załadować dane do modelu? Moja intuicja podpowiada mi, że kontroler powinien to zrobić, ale w wielu przykładach (dokumentacja ember.js na przykład) robi to model z metodą find(). Ale inne frameworki, takie jak Django, robią to w kontrolerze. Jak myślisz, jaki jest lepszy sposób na zrobienie tego?


title: Uprawnienia Subversion i projekty Visual Studio

text: Mam dość konkretne pytanie dotyczące struktury Subversion, różnych poziomów uprawnień oraz projektów i rozwiązań Visual Studio: Opracowujemy framework z zewnętrznymi partnerami o funkcjonalności, której partner nie może widzieć. Rozważ następującą strukturę rozwiązania VS: example.sln |_ /unit1/unit1.csproj (w tym pliki cs) |_ /unit2/unit2.csproj (w tym pliki cs) |_ /unit3/unit3.csproj (w tym pliki cs) unit1 i unit2 należą do frameworka, unit3 to specyficzna (tajna) funkcjonalność. Framework jest funkcjonalnie bez jednostki unit3 (która zostanie dostarczona jako biblioteka dll). Moje pytanie brzmi teraz: Jak można zorganizować ten projekt, jeśli obie strony powinny mieć funkcjonalne środowisko programistyczne, example.sln references unit3, ale nasz zewnętrzny partner nie będzie miał tej części ze względu na pozwolenie SVN. Oczywiście mamy pełny dostęp do repozytorium. Mam nadzieję, że moja prośba stała się jasna... Czy myliłem się z moim pytaniem? **EDYTUJ:** Dzięki tej odpowiedzi widzę wyraźniej. Ostatnie pytanie: Jak zaimplementować różne rozwiązania dla różnych grup, aby każda grupa mogła tylko sprawdzić swoje rozwiązanie: * dwa pliki sln w jednym katalogu z różnymi uprawnieniami * dwa drzewa katalogów dla każdego rozwiązania z linkami do współdzielonych projektów?


title: Sposoby prezentacji wyników badań

text: Robię projekt szkolny, który wymaga od nas stworzenia aplikacji komputerowej, a następnie napisania dokumentacji; dlatego muszę napisać dokumentację testów, mam już plan testów (Weryfikuj wszystkie dane wejściowe i testuj wszystkie funkcje), ale jak mam zaprezentować wyniki testów w moim projekcie (np. tabela itp.)?


title: Scalanie TFS - jak śledzić, jakie zmiany trafiają do MAIN?

text: Jestem nowy w gałęziach TFS i zdecydowałem się na utworzenie gałęzi \Dev i \Main (docelowo będą też gałęzie wydania). Używam TFS2012. Rozumiem, że będę pracował na co dzień w gałęzi \Dev. Po naprawieniu błędu lub ukończeniu historyjki użytkownika połączę \Dev z \Main, zbuduję i przekażę testerowi. W \Dev mam politykę zapewniającą, że zaewidencjonowanie jest skojarzone z elementem pracy. Kiedy jednak połączę z \Dev do \Main i zaewidencjonuję to scalenie, z czym bym skojarzył to zaewidencjonowanie, jeśli w ogóle? Powodem, dla którego pytam, jest to, że zastanawiam się, jak ktoś mógł dowiedzieć się, jakie zmiany zostały wprowadzone w konkretnej kompilacji \Main? Jest to oczywiste w \Dev, ponieważ zobaczysz powiązane elementy pracy w danych wyjściowych kompilacji. Ale nie będzie takiej historii w \Main, chyba że skojarzę zaewidencjonowanie scalania z jakimś elementem pracy. Tester musi wiedzieć, co przeszło w konkretną kompilację \Main, ale w jaki sposób? Czy jest to proces ręczny, w którym programista po prostu podaje mu listę zmian, które zostały scalone w \Main? Przeczytałem wskazówki dotyczące rozgałęziania/scalania MS, ale tak naprawdę nie rzucają one światła na tego rodzaju rzeczy.


title: Jak odkrywane są nieudokumentowane funkcje?

text: Zawsze zastanawiałem się, jak znaleźć **nieudokumentowane/prywatne** API? Przykład _Apple_ nieudokumentowane / prywatne API, _Play Station_ , _Windows Phone 7_ , _Jądro Win32_ , _Windows API_ , _ukryte wywołanie zwrotne_ , itd... Jakich narzędzi używają hakerzy, aby dowiedzieć się o prywatnych i nieudokumentowanych funkcjach? Gdzie mogę przeczytać o doświadczeniach ludzi zagłębiających się w prywatne interfejsy API i techniki inżynierii wstecznej, które ujawniają tajemnice zwykle wyjaśniane w dokumentacji API? dzięki


title: Jak naukowcy zajmujący się danymi używają Pythona?

text: Czy wiesz, w jaki sposób Data Scientists używają Pythona i jeśli wymaga to danych, gdzie mogę uzyskać przykładowe dane do ćwiczeń? Obecnie uczę się języka i planuję aplikować na stanowiska Data Scientists, więc byłoby pomocne, gdybym wiedział, czy istnieją określone typy zadań, w których używam Pythona. Jeśli jest to istotne, regularnie używam C#.


title: Jakie są najbardziej znane podejścia do implementacji arytmetyki arbitralnej precyzji?

text: Zamierzam napisać bibliotekę klas dla platformy .NET, która zapewnia implementację arytmetyki dowolnej precyzji dla liczb całkowitych, wymiernych i być może zespolonych. Z jakimi najbardziej znanymi podejściami powinienem się zapoznać? Próbowałem zacząć od TAOCP tom 2 Knutha (Algorytmy półnumeryczne, rozdział 4 – Arytmetyka), ale jest to zbyt skomplikowane. Przynajmniej nie mogłem zdobyć pomysłów w stosunkowo krótkim czasie.


title: Dlaczego nazwa prostego typu logicznego Java nie jest „bool”?

text: Java ma * `int` i `Integer` * `boolean` i `Boolean` Wydaje się to trochę niespójne, dlaczego nie * `bool` vs `Boolean` użyć ustalonej krótszej nazwy dla typu pierwotnego? lub * `integer` vs `Integer`, aby zachować spójność nazw typów? _Myślę_, że C++ zdecydował się na użycie `bool` trochę wcześniej niż Java zdecydowała się użyć `boolean`, a może także niektórych (niestandardowych w tamtym czasie?) rozszerzeń C, więc istniałoby historyczne pierwszeństwo dla `bool `. Zauważyłem, że często instynktownie próbuję na początku użyć `bool` (dobrze, że współcześni redaktorzy od razu to zauważają bez dodatkowej rundy kompilacji), więc byłoby miło poznać powody obecnego stanu rzeczy. Jeśli ktoś pamięta (część) historii, a nawet może znaleźć i połączyć się z odpowiednią dyskusją historyczną w sieci, byłoby świetnie.


title: Wyjście z aplikacji zorientowanej obiektowo

text: Piszemy program, który wykonuje standardowe "automatyczne aktualizowanie oprogramowania przy starcie". Jeśli oprogramowanie znajdzie gotową aktualizację, rozpocznie proces aktualizacji, a następnie zakończy działanie (i nie uruchomi programu). Mamy dwa różne projekty, jak napisać logikę aktualizacji. Projekt 1: Pozwól naszej klasie AutoUpdate obsłużyć wszystko, łącznie z wyjściem z programu, jeśli jest to wymagane. Projekt 2: AutoUpdate wykonuje większość logiki, a jeśli chce, aby program zakończył działanie, zwraca wartość wskazującą na to, a Main() zajmuje się zakończeniem. Jeśli chodzi o kod, główna funkcja wyglądałaby następująco: Projekt 1 (w razie potrzeby funkcja AutoUpdate kończy działanie wewnętrznie) Main() { AutoUpdate.DoAutoUpdate(); RunMainProgram(); } Projekt 2 (AutoUpdate zwraca true jeśli musi zakończyć, Main obsługuje wyjście) Main() { if (AutoUpdate.DoAutoUpdate() == false) { RunMainProgram(); } }


title: Koszt projektu w oparciu o koszt programowania

text: Jaka jest Twoja metodologia, gdy musisz określić koszt projektowania interfejsu użytkownika, jeśli znasz koszt (godziny pracy) programowania w jakimś projekcie? Powiedzmy, że programowanie logiki w jakimś projekcie kosztuje X dolarów. Czy istnieje jakiś ogólny procent (np. 30% kosztów programowania), który może pomóc określić koszt projektu? Obszarem zainteresowania jest rozwój telefonów komórkowych (głównie narzędzia biznesowe i gry 2D, a nie 3D). Jest tu mniej prac projektowych w porównaniu z projektowaniem stron internetowych lub projektowaniem gier na PC.


title: Do czego służą IEEE i ACM?

text: Członkostwo w IEEE i ACM jest czasami przedstawiane jako oznaka profesjonalizmu. Ale o ile wiem, wszystko, co jest z tym związane, to wysłanie im pieniędzy. W zamian, poza potencjalną linią CV, organizacje te sponsorują konferencje i czasopisma. Zawsze mogę wziąć udział w konferencji, zapisać się lub przesłać artykuł do czasopisma, niezależnie od tego, czy jestem jego członkiem, czy nie. Jeśli bycie członkiem sprawia, że niektóre z nich są tańsze lub jest warunkiem wstępnym przyjęcia, to OK, ale nadal nie widzę celu tych organizacji. * * * Odpowiedź, o ile wiem, jest taka, że ich najważniejszą wartością jest dostarczenie jakiegoś materiału do czytania. Sugeruję, że nie jest to warte swojej ceny, biorąc pod uwagę szeroką dostępność innych wartościowych materiałów do czytania.


title: OOP, modele domen i użytkownik

text: Tworząc modele dziedzinowe, dostrzegam dwa główne sposoby myślenia o użytkowniku: * Pierwszy zakłada, że program jest rodzajem „symulacji” tego, co dzieje się w świecie rzeczywistym, a użytkownik jest widzem. Dzięki takiemu podejściu będziesz miał klasę Customer - na przykład - z być może metodami, które odpowiadają czynnościom, które może wykonać klient. Ilekroć klient chce coś zrobić, wywoływana jest odpowiednia metoda. * Innym podejściem byłoby zaprojektowanie klas tak, jakby były wystawione na użytkownika, a on/ona ma wtedy możliwość tworzenia i zabawy z obiektami „bezpośrednio”, myśląc o programie jako o swego rodzaju rozszerzeniu rzeczywistości użytkownika . Przy takim podejściu klasa Customer prawdopodobnie nie miałaby sensu, ponieważ klient jest już „zaangażowany”. Czytałem kilka artykułów mówiących o dodawaniu zabezpieczeń na poziomie metody, co wydaje się być spójne z drugim podejściem, ale uważam, że pierwsze podejście jest znacznie bardziej popularne. Jak najlepiej sobie z tym poradzić? Dziękuję.


title: jaka jest koncepcja sstatic.net?

text: Pytanie jest dość proste. za każdym razem, gdy loguję się do stackoverflow lub niektórych witryn, otrzymuję wiele typów http://sstatic.net/, takich jak żądanie. Jaka jest cała koncepcja tego? Jak pomaga przyspieszyć stronę internetową?


title: Jak ograniczyć czas do innego okresu?

text: Na planowanie projektu mam okres początkowy, nazwijmy go `PPStart-PPEnd`. Planowanie związane jest z projektem. Posiada również kropkę `PrjStart-PrjEnd`. PrjStart i PrjEnd są stałe i mogą być niezwiązane, tzn. czas rozpoczęcia lub zakończenia projektu nie jest zdefiniowany. `PPStart-PPEnd` należy dostosować tak, aby ludzie mogli planować zadania tylko w obowiązującym okresie projektu. Jeśli to zmieni czas trwania, w porządku. Jak skutecznie ograniczyć `PPStart-PPEnd` do `PrjStart-PrjEnd` bez konieczności przechodzenia przez wszystkie możliwe kombinacje? Może pierwsze wykrycie nakładających się okresów to dobry początek? 4 przykłady na osi czasu ([-- = bound, <\-- = unbound): Okres planowania projektu: [---PPStart-PPEnd---] Okresy projektu względem ppp: [---PrjStart-PrjEnd- --] PPStart powinno być ustawione na PrjStart, PPEnd niezmienione [---PrjStart-PrjEnd---] PPEnd powinno być ustawione na PrjEnd, PPStart bez zmian [---PrjStart-PrjEnd----------- --------> Brak regulacji [---PrjStart-PrjEnd---] PPStart należy ustawić na PrjStart, a PPEnd na PrjEnd. Przypadki takie jak ten ostatni komplikują sprawę.


title: Jaka jest główna praca lidera zespołu?

text: * Jaka jest główna praca lidera zespołu w projekcie opartym na zwinnym modelu programowania? * Jakie są różnice w pracy między liderem zespołu a kierownikiem projektu?


Kiedy Java jest dobrym wyborem do tworzenia stron internetowych? Proszę nie mówić „Kiedy masz zespół programistów, który zna tylko Javę”.


title: Moduł klas JavaScript: Jak uniknąć antywzorca?

text: Widziałem wiele różnych metodologii, jeśli chodzi o stosowanie dziedziczenia opartego na klasach w projektach opartych na JS/ECMA. W ciągu ostatnich kilku miesięcy stosowałem przestrzenie nazw IIFE do moich modeli klas, gdy potrzebuję klas. Skutkuje to trochę dodatkowym standardowym kodem, który można łatwo wyabstrahować dla bardzo dynamicznych klas. _(Zauważ, że używam klas tylko wtedy, gdy rzeczywiście pasują do zadania.)_ Ogólnie widzę, że klasy są używane na jeden z następujących 4 sposobów: **Konstruktor:** function MojaKlasa(arglist) { this.property = value ; this.method = function(){}; } **Prototype:** function MojaKlasa(arglist) { this.property = value; } MojaKlasa.prototype.method = function(){}; **Object.create** Object.create(MyClassPrototype, {prop-list}); **IIFE Class** MyClass = (function(){ function MyClass(arglist) { this.property = value; } MyClass.prototype.method = function(){}; return MyClass; }()); Oczywiście istnieją pewne funkcje pomocnicze, które redukują naciśnięcia klawiszy, takie jak pomocniki `extend()` i/lub `inherit()`. Powiem z góry, że generalnie nie lubię najbardziej akceptowanych bibliotek klas _(z różnych powodów)_ , więc eksperymentowałem z własną metodologią. To, co wymyśliłem, jest następujące: **Class Module** (function(Class){ //Private Static Property var staticProperty = value; //Public Static Function Class.staticMethod = function(){} //Potencjalnie pozwala na konstrukcję statyczną Class.create = function(config){ //Public Object Member this.property = value;} //Konstruktor faktycznie działa Class.prototype.class = Class //Metoda obiektu publicznego Class.prototype. method = function(){}; //Zezwala na przypisanie do var lub przestrzeni nazw. return MojaKlasa; }(function MojaKlasa(){this.class.create.apply(this, arguments)})); Chciałbym wiedzieć, jakie są potencjalne pułapki tego wzorca? Oto niektóre z zalet, które moim zdaniem ma ten wzorzec: * Użycie prywatnych funkcji o statycznym zakresie. Z mojego własnego doświadczenia wynika, że może to radykalnie poprawić wydajność, usuwając funkcje z konstruktora, które nie muszą ani a) tam być, ani b) nie mają sensu jako domknięcia. * Możliwość użycia new(), statycznego create(), Object.create() według potrzeb. * Nie łamie żadnej wymaganej przez standardy funkcjonalności dla klas (tj. `new`, `instanceof`, `typeof`, prototype chain, `constructor`, etc.) * Nadaj każdemu obiektowi odniesienie do jego aktualnej "klasy". W wielu przypadkach nie jest to konieczne, ale zawsze tego pragnę, gdy nie istnieje. * Może wykorzystać klasę jako fasadę dla wielu klas bez naruszania logiki lub przepływu. Chociaż nie używałem tego zbyt często, jest to niezwykle przydatne, gdy to robię. * Podnoszenie różnych metod w różnym czasie może dostosować punkty odniesienia zgodnie z potrzebami konkretnej klasy. Na przykład, jeśli potrzebuję go do szybszego konstruowania obiektów, mogę przenieść metodę konstruktora na prywatny poziom statyczny. W przeciwieństwie do tego, jeśli potrzebuję określonej metody, aby działała szybciej, mogę przenieść metodę prototypową na prywatny poziom statyczny. * Zagnieżdżanie klas jest proste * Ponieważ określanie zakresu jest tak ważne dla metryk bezpieczeństwa, użyteczności i wydajności JS, uważam, że jest to najbardziej elastyczne. * Osobiście uważam, że jest bardzo czytelny (ogólnie). Na pierwszy rzut oka wiem, czy metoda jest publiczna czy prywatna, statyczna czy obiektowa. * Wreszcie, chociaż bardzo rzadko, czasami potrzebuję „klasy” do różnych zachowań, gdy nie wchodzimy w interakcję z obiektem. Ten wzór pozwala mi to zrobić za pomocą jednego prostego sprawdzenia. Moje pytanie brzmi: ponieważ jestem dość stronniczy w stosunku do tego wzorca podczas wdrażania zachowania podobnego do klas, jakich pułapek powinienem być świadomy, aby uniknąć stania się antywzorcem? Czy są jakieś wyraźne powody, aby całkowicie unikać tego schematu, poza uprzedzeniami lub konwencją?


title: Czy powinienem nauczyć się Javascript przed Coffeescriptem?

text: Jestem dość doświadczonym programistą próbującym nauczyć się tworzenia stron internetowych. Staram się opracować aplikację webową po stronie klienta, która używa svg lub kanwy do grafiki. Postanowiłem, że chcę napisać kod aplikacji w Coffeescript. Nie znam ani Javascript, ani Coffeescript. Jak potrzebna jest znajomość Javascript do tworzenia stron internetowych Coffeescript? Czy prawdopodobnie trafię na jakiś gnarny problem, który wymaga ode mnie zrozumienia JavaScript? Czy mogę szczęśliwie pracować z API Javascript od Coffeescript? **Edytuj** : w tydzień mogłem łatwo nauczyć się podstaw JavaScriptu. Jestem bardziej zaniepokojony tym, że Javascript wydaje się mieć wiele ukrytych ostrych krawędzi. W najdziwniejszej funkcji językowej pytanie dotyczące StackOverflow JavaScript jest jednym z najczęstszych języków. Posiada nietypowy model obiektowy i klasowy. Ma nieoczywiste zasady określania zakresu nazw. Uważam, że poznanie języka zajmuje mi ponad tydzień. Zamierzam pracować nad małym prostym projektem, aby nauczyć się tworzenia stron internetowych. Czy lepiej byłoby użyć Javascript lub Coffeescript? Myślę, że na dłuższą metę wolę Coffeescript, ale jestem gotów zacząć od JavaScriptu, jeśli będę potrzebować dokładnego zrozumienia JavaScript, aby używać Coffeescript.


title: Programiści ASP.NET Webforms i projektanci stron internetowych: jak współdziałać?

text: Jestem programistą ASP.NET Webforms i napotykam pewne problemy, gdy mam do czynienia z projektantami. Projektanci zawsze narzekają na `kontrolki serwera asp.net`. Wolą po prostu mieć plik html i tworzyć pliki `css` wraz z wymaganymi obrazami. Czasami, jeśli faza projektowania jest wykonywana z wyprzedzeniem, otrzymuję pliki html z powiązanymi plikami css, ale wtedy napotykamy wiele problemów z integracją projektu z plikami `aspx` (sterowniki serwera, kontrolki telerik itp.). Chciałbym zapytać o to: * Jak przezwyciężyć te problemy? Projektanci preferują programistów php i mvc ze względu na problemy z kontrolkami serwera .net. Muszę wiedzieć, jak we właściwy sposób współdziałać z projektantami. * Czy są jakieś narzędzia lub aplikacje, które zapewniają projektantom renderowane (strona html) stron .aspx? Mam tu na myśli stronę w runtime, a nie aspx w Visual Studio. Używają Web Expression, ale chcą renderowanej strony również w html.


title: Co oznacza „spłaszczyć”?

text: Gdybym miał drzewo, czy „spłaszczenie” intuicyjnie sugerowałoby > uzyskanie listy wszystkich elementów w drzewie, przechodzących od lewej do prawej? Jeśli mam połączoną listę, intuicyjnie „spłaszczyłbym” > otrzymam listę wszystkich elementów, zaczynając od tego. Na przykład połączona lista składałaby się z wyjątku, który agreguje jego wewnętrzny wyjątek. Czy byłoby słuszne nazwanie metody dla wyjątku „flattenInnerExceptions” z oczekiwaniem, że zwróci ona sekwencję wyjątków, pierwszy wyjątek zewnętrzny, a ostatni wyjątek wewnętrzny?


title: Znaczenie posiadania wiedzy o architekturze technicznej jako programista

text: Jestem młodszym programistą (pół roku poza uczelnią) obecnie pracującym w małym projekcie. Zespół projektowy liczy około 30 osób. Zastanawiam się, jak ważna jest dla nas, deweloperów, znajomość architektury technicznej (sprzętowej, sieciowej itp.) rozwiązań. Nie sądzę, żebym mógł robić poboczne projekty dla małych firm bez silnego zaplecza TA. Czy są książki, w których mógłbym dowiedzieć się więcej o oprogramowaniu TA i tym podobnych?


title: Szukasz porównania wydajności języków internetowych

text: Nie tak dawno byłem tu na przepełnieniu stosu i widziałem ten świetny diagram porównania wydajności języków programowania, a teraz nie mogę go znaleźć... Czy ktoś ma podobne porównanie? Dwa, które mnie najbardziej interesują, to PHP vs Python.


title: Co można wykorzystać, aby uzyskać dane z serwera na Androida tak szybko, jak dotrą do serwera?

text: Jaki jest najlepszy sposób na uzyskanie danych z serwera tak szybko, jak do niego dotrą? (Na przykład wiadomość błyskawiczna lub prosta transmisja). Najpierw pomyślałem o użyciu miniaturowego serwera WWW w Androidzie i otrzymywaniu do niego żądań pocztowych z danymi. Jednak dzięki takiemu podejściu szybko zrozumiałem, że będę miał wiele problemów z NAT i podobnymi problemami. Później myślałem o ręcznym poolingu serwera z Androida, ale wydaje się to nieco niestabilne podejście do problemu, ponieważ dane są pobierane w nieregularnych odstępach czasu (jak obrazek z tekstem). Myślałem o użyciu czegoś takiego jak webrtc lub rtp, aby mieć połączenie między serwerami, ale te podejścia są nieco złożone i na wpół upieczone. Znalazłem bardzo mało informacji na temat operacji na danych. Myślałem, że udało mi się uzyskać w moich „eksperymentach” transfer wideo i dźwięku, znalazłem bardzo mało informacji, jak uzyskać transfer danych. Co powinienem zrobić? Teraz zastanawiam się nad połączeniem z serwerem i uzyskaniem jakichś zdarzeń w androidzie, które po aktualizacji na serwerze mogą pobrać wszystko z serwera. Aktualizacja: Moje dane to przetworzony w formacie html5 obraz png w formacie html5. Pewnie dodam do tego jakieś dane tekstowe do bloba. Jest generowany na stronie internetowej, która powinna jak najszybciej dotrzeć do telefonu przez serwer. Problem polega na tym, że dane obrazu przechodzą z serwera do telefonu. Rozmiar danych na żądanie wynosi ~50 KB.


title: Czy języki programowania są na razie dość „stabilne”?

text: Ostatnio przyjrzałem się „**oś czasu**” języków programowania i chociaż wiele się zmieniło w ciągu ostatnich 5-10 lat, istnieje wiele języków, które w zasadzie „pozostały” takie same w swojej niszy/użytkowaniu . Weźmy na przykład język C. Tak naprawdę nie widzimy zbyt wielu języków, które są opracowywane (popraw mnie, jeśli się mylę), aby spróbować usunąć C. Jednak jest wiele języków, które próbują robić podobne rzeczy (spójrz na wszystkie SQL/No-SQL języki skryptowe itp. Czy jest jakiś powód tego trendu? A może tylko dlatego, że C został zaprojektowany bardzo dobrze? i tak naprawdę nie ma potrzeby na nowy raz?


title: Jak często zespół Scrumowy powinien wywiązywać się ze swojego zobowiązania do Sprintu?

text: Zaangażowanie jest obietnicą i wszyscy nas uczono, że musisz dotrzymywać obietnic. Ale czy realne jest dotrzymanie zobowiązania w każdym Sprincie? Czasami ludzie chorują, czasami okazuje się, że podejście techniczne jest złe i trzeba wszystko przemyśleć, czasami podczas dalszych dyskusji z właścicielem produktu lub użytkownikami rozumiesz, że funkcja powinna być zupełnie inna niż pierwotnie myślano. Wiem, że oficjalny Scrum Guide używa teraz słowa „prognoza” zamiast zobowiązania, prawdopodobnie w celu rozwiązania tych problemów. Moje pytanie brzmi więc, jak często zespoły w waszych organizacjach utrzymują swoje zaangażowanie i czy podoba wam się takie podejście, czy też chcecie je zmienić. Dziękuję Ci.


title: Reprezentacja danych w aplikacji a baza danych

text: Wykonam aplikację, która będzie miała dane do umieszczenia w bazie danych. Dane będą w większości takie same, ale sposób ich formatowania będzie się bardzo różnić (może to być wszystko, od plików tekstowych po .xls do .doc). Nie jestem bardzo doświadczonym programistą, ale widzę potencjalne problemy i chcę je zminimalizować. Po pierwsze zdecydowałem się na użycie wzorca DAO, dzięki czemu mogę bez problemu obsługiwać nowe formaty plików lub pliki nagle sformatowane na różne sposoby. Jednak naprawdę zastanawiam się, w jaki sposób powinienem zarządzać samymi danymi w mojej aplikacji. Myślę, że baza danych DAO powinna mieć modele reprezentujące każdą tabelę bazy danych z takimi samymi relacjami między nimi, aby ułatwić proces przesyłania. Ale czy systemy plików DAO powinny używać tych samych modeli? Mogę sobie wyobrazić, że gdy zmieni się baza danych, zmiana ta nagle rozprzestrzeni się w całym systemie, we wszystkich DAO i modelach. A to oczywiście zła rzecz. Jestem trochę zmęczona i nie mam czasu. Zaktualizuje wszelkie pytania, które masz. Dziękuję!


title: Czy maszyna wirtualna zaimplementowana w języku zbierającym elementy bezużyteczne wymaga modułu odśmiecania pamięci?

text: To jest bardziej pytanie teoretyczne. Jeśli jvm jest zaimplementowane w go, które samo w sobie jest językiem gromadzącym elementy bezużyteczne, to czy to jvm potrzebuje oddzielnego modułu odśmiecania pamięci do zaimplementowania dla jego własnego działania?


title: w razie wątpliwości korzystania z generatorów kodu

text: Wchodzę teraz w świat java ee 6. I mam używać różnych technologii, takich jak jsf, jpa, różne rodzaje fasoli i tak dalej. Uczę się korzystając z netbeans IDE, który jest, powinienem powiedzieć, bardzo wydajny, jeśli chodzi o wykonywanie pracy. Po prostu wyszedłem ze starego środowiska programowania serwletów, używając skryptletów na swoich stronach jsp, gdzie możesz napisać każdą linię i każdy parametr/atrybut żądania, który musisz ustawić ręcznie. co jest w jakiś sposób dobre, ponieważ rozumiesz, że programujesz TAK DOBRZE. ale z tym java ee 6, z generatorami kodu z NETBEANS, mogę tworzyć kontrolery, strony jsf i encje bez pisania kodu (chociaż pomijając część DB). Rozumiem przepływ aplikacji, ale nie do tego stopnia, aby zrozumieć, co robi linia, jak do niej dotarła, jakie są zastosowania zmiennych i co robi po. wszystkie te drobiazgi. krótko mówiąc, używam generatorów bez NAPRAWDĘ zrozumienia kodu tak dobrze (głównie na nowych tagach jsf). Chcę tylko zapytać, czy jest to zła ścieżka/praktyka, czy jest to w porządku, ponieważ chcemy WYDAJNOŚCI?


title: Czy mogę GPL ten kod?

text: Pracuję nad ożywieniem kodu C++, który nie został naruszony od 1997 roku. Jest to akademickie oprogramowanie do analizy tekstu, które pierwotnie było niefunkcjonalne, nie dałoby się nawet skompilować. Poprawiłem kod, aby działał, i dodałem kilka nowych funkcji. Robię to prywatnie dla kogoś innego, a oni zapłacą mi za kontrakt studencki. Nic z nimi nie podpisałem, więc ostatecznie moja praca należy do mnie. Biorąc pod uwagę, że się zgadzają (nie chcę być niegrzeczny), czy byłbym w stanie ponownie licencjonować ten kod na GPL i opublikować go na stronie takiej jak GitHub? Obecna licencja jest następująca: > Copyright (C) 1997, Carnegie Mellon University. Wszelkie prawa zastrzeżone. To > oprogramowanie jest udostępniane wyłącznie do celów badawczych. Może być > w tym celu swobodnie rozpowszechniana, w całości lub w części, pod warunkiem, > że cała ta informacja o prawach autorskich jest dołączona do wszelkich kopii tego oprogramowania oraz > aplikacji i ich pochodnych. > > To oprogramowanie jest dostarczane w stanie, w jakim jest, bez jakiejkolwiek gwarancji, wyraźnej lub dorozumianej, w jakiejkolwiek sprawie, w tym między innymi gwarancji przydatności do celu, przydatności handlowej lub wyników uzyskanych z > korzystanie z tego oprogramowania. Wygląda na to, że musiałbym również dołączyć tę informację.


title: Czy prawa autorskie spadną, jeśli przepiszę projekt open source na inny język?

text: Przepisałem projekt open source z java na haxe, a następnie z haxe skompilowanego do javascriptu, z zupełnie innym interfejsem użytkownika. Pytanie brzmi, czy kod jest uważany za mój po przepisaniu go na inny język w projekcie o zamkniętym kodzie źródłowym? czy mogę z niego swobodnie korzystać, nie martwiąc się o oryginalne prawa autorskie?


title: Czy programowanie proceduralne jest źródłem wszelkiego zła obiektowego?

text: Jeśli przeczytasz Pracując efektywnie z Legacy Code, Clean Code, Refactoring: Usprawnianie projektu istniejącego kodu i wzorców projektowych, zrozumiesz, o co mi chodzi. Wiele przykładów i tematów omawianych w tych książkach ma na celu poprawę jakości i projektu kodu. Z moich obserwacji wynika, że większość problemów wspomnianych w tych książkach dotyczy zamiany proceduralnego lub półproceduralnego kodu w dobrze ustrukturyzowany kod obiektowy. Obiekty Think God, długie przypadki przełączników, zakodowane na stałe zależności itp. To, co skłoniło mnie do zadania takiego pytania, to to, że często słyszę ludzi mówiących o programowaniu funkcjonalnym i że dobrze jest uczyć się takich języków, nawet jeśli robisz programowanie obiektowe, ponieważ wpływa to na twój sposób myślenia i perspektywę kodu. Aby temat był jak najbardziej konstruktywny, skoncentrowany i obiektywny: 1. Czy są jakieś badania lub dowody na to, że uczenie się programowania proceduralnego przed programowaniem obiektowym prowadzi do niesławnych anty-wzorców zorientowanych obiektowo? 2. Czy ten sam problem występuje podczas nauki OOP po DF? 3. Czy istnieje właściwy/sprawdzony sposób podejścia do ogólnego OOP, aby uniknąć większości jego pułapek?


title: Problem architektoniczny komunikacji Activity w aplikacji na Androida

text: Prowadzę otwartą aplikację Flickr Glimmr na Androida. Obecnie istnieje problem architektoniczny związany z paginacją, który staram się rozwiązać od dłuższego czasu i byłbym wdzięczny za pomysły. Oto komponenty, których to dotyczy: 1. Zadania - różne podklasy AsyncTask, które pobierają zdjęcia ze źródeł, takich jak strumień zdjęć użytkowników (LoadPhotoStreamTask), zestaw zdjęć (LoadPhotoSetTask), itp. 2. PhotoGridFragment - fragment, który wyświetla zdjęcia pobrane przez zadania w krata. Istnieją podklasy tego typu pasujące do każdego zadania, np. PhotoStreamGridFragment, PhotoSetGridFragment itp. Siatka jest podzielona na strony, więc gdy użytkownik przewinie do końca zdjęć, uruchamiane jest zadanie przejścia i pobrania następnej strony zdjęć. 3. PhotoViewerActivity - odpowiada za wyświetlanie listy zdjęć z siatki w trybie pełnoekranowym. Rozpoczyna się to od PhotoGridFragments z dwiema informacjami, a) listą zdjęć znajdujących się obecnie w siatce i b) indeksem, od którego można rozpocząć przeglądanie. Problem pojawia się, gdy użytkownik dotrze do końca listy _z poziomu PhotoViewerActivity_. Ta aktywność nie ma informacji wymaganych do rozpoczęcia prawidłowego zadania i aktualizacji listy zdjęć, które zostały przekazane. Chcę dowiedzieć się, jak to zrobić, zachowując jak najmniejsze sprzężenie między PhotoGridFragment i PhotoViewerActivity. Osoby zaznajomione z systemem Android wiedzą, że ponieważ mamy do czynienia z dwoma oddzielnymi działaniami, cała komunikacja między nimi musi odbywać się za pośrednictwem intencji, a dane muszą być utrwalane lub serializowane. Afaik PhotoViewerActivity nie może łatwo oddzwonić do sieci i poprosić o więcej zdjęć. Sprawy komplikuje fakt, że każde zadanie wymaga innego stanu i informacji, aby wykonać swoją pracę. np. a LoadPhotosetTask wymaga identyfikatora zestawu, LoadPhotoStreamTask wymaga określonego użytkownika, ale nie dba o zestawy itp. Tak więc samo przekazanie nazwy zadania wymaganej do pobrania większej liczby zdjęć do aktywności widza nie wystarczy. Innym rozwiązaniem może być wyodrębnienie typowych elementów funkcjonalności z PhotoViewer do klasy abstrakcyjnej, a następnie utworzenie określonych przeglądarek zdjęć dla każdego źródła, podobnie jak mamy określone PhotoGridFragments dla każdego źródła. To przesada, ale prawdopodobnie jest to rozwiązanie, które teraz mam przed oczami. Jak byś to rozwiązał?


title: Jak działają systemy logowania?

text: Zakładam, że kiedy użytkownik rejestruje się na stronie, hasło i nazwa użytkownika są przechowywane w bazie danych. Czytałem, że hasło jest często szyfrowane za pomocą soli. Czy więc szyfrowanie haseł za pomocą soli i zapisywanie ich w tym samym schemacie z nazwą użytkownika jest bezpieczne? Po drugie, jak działa uwierzytelnianie? Firmy takie jak Google mają gigantyczne bazy danych par nazwa użytkownika/hasło. W jaki sposób walidacja działa tak szybko i jak jest wdrażana?


title: PHP OOP - Gettery / settery a przechowywanie bazy danych

text: ### Problem Próbuję zoptymalizować architekturę mojej aplikacji webowej napisanej w PHP przy użyciu frameworka Symfony. Mam obiekt "basen", który zawiera "pływaków". Muszę pokazać liczbę pływaków w moim basenie, ale tylko tych w różowym kostiumie kąpielowym. Aby to zrobić, widzę wiele możliwych podejść : ### Podejścia 1. Utwórz niestandardową metodę pobierającą w mojej klasie Pool i filtruj pływaków według koloru kostiumów kąpielowych : public function getSwimmersInPinkSuit() { for each($this-> getSwimmers() as $swimmer) { if($swimmer->getBathSuitColor() == "różowy") { $pinkSwimmers[] += $swimmer; } return $pinkSwimmers; } > {{ pool.getSwimmersInPinkSuit | length }} 2. Utwórz w moim kontrolerze niestandardowe zapytanie SQL, zdefiniuj tam numer przed wysłaniem go do mojego szablonu. 3. Dodaj właściwość „$pinkSwimmers” do mojej klasy Pool i zwiększaj/zmniejszaj ją za pomocą eventListener za każdym razem, gdy utrzymuję w bazie danych zdarzenie „pinkSwimmer dołącza/opuszcza pulę”. Następnie mogę uzyskać dostęp do wartości tam, gdzie chcę: > {{ pool.pinkSuits }} 4. Użyj gęstszego żądania gałązki, aby odfiltrować różowych pływaków bezpośrednio w moim szablonie > {{ pool.swimmers.suitColor("pink") | długość }} // Jeśli to w ogóle możliwe o0 ### Pytanie W czterech powyższych propozycjach widzę wady i zalety każdej z nich, więc : * Jaka jest najlepsza praktyka w tej sytuacji ? Czy nadzoruję lepszą logikę oprócz tych wymienionych powyżej? Staram się znaleźć implementację, która byłaby lekka pod względem wydajności (pamięć, przepustowość), ale także łatwa do rekonfiguracji (zmiana z różowych na zielone lub z koloru kostiumu na styl pływacki).


title: Programowanie sterowane zdarzeniami?

text: Przyglądałem się programowaniu sterowanemu zdarzeniami w C i wydaje się, że język nie ma dla niego wsparcia. To skłoniło mnie do zastanowienia się nad naturą programowania sterowanego zdarzeniami. Czy poprawne jest stwierdzenie, że program obsługi zdarzeń zasadniczo tworzy wątek, który czeka na odpowiedź z we/wy i ustawia zmienną? A może jest coś bardziej skomplikowanego w tym procesie.


title: Startup jako aplikacja webowa, później rozbudowana jako aplikacja mobilna. Jak to zrobić poprawnie?

text: Mam pomysł, który chcę zbudować. Chcę rozpocząć pomysł jako web-app, a następnie przejść do aplikacji mobilnej i ewentualnie aplikacji desktopowej. Projekt powinien mieć bazy danych (głównie stringi). Również użytkownicy mieliby konta i dostęp do tych baz danych. Projekt zapewnia więc dostęp do zasobów użytkownika przez Internet. Chcę, aby baza danych była łatwo dostępna na różnych platformach. Projekt ma też wyostrzyć moje IT, więc nie chcę łatwej drogi, ale lepszej. * Jakie są moje najlepsze opcje frameworków/umiejętności? * Dobre narzędzia do zarządzania projektem? * Czy zaczynanie jako aplikacja internetowa to dobry wybór, czy powinienem najpierw zbudować ją jako aplikację mobilną? Posiadam pewną wiedzę (ale nie duże doświadczenie) w: C, C++, Java, PHP, Javascript, MySQL, HTML/CSS. Edycja: Wiem, że moje pytanie jest zbyt ogólne, chciałem tylko kilku pomysłów i wskazówek, aby mieć dobry początek. @Nathan Taylor, jeśli chodzi o aplikację internetową, nie mam nic przeciwko żadnej opcji (czy powinienem nauczyć się Pythona, czy w tym względzie trzymać się php)? Prawdopodobnie zrealizuję projekt na Androidzie i ewentualnie na iPhonie.


title: Jaki jest odpowiedni identyfikator URI danych do użycia w przypadku zawartości 0-bajtowej?

text: Mam metodę, która generuje identyfikator URI danych z tablicy bajtów. W przypadku, gdy tablica bajtów wejściowych jest pusta, co jest właściwe dla metody? Oto opcje, które widzę: 1. Zwróć `data:,` 2. Zwróć pusty Łańcuch 3. Zrzuć wyjątek Z mojego odczytania wynika, że RFC 2397 nie odnosi się wprost do pojęcia pustych danych.


title: Ogonowa rekurencyjna implementacja take-while

text: Próbuję napisać rekurencyjną implementację tail-recursive funkcji `take-while` w Scheme (ale to ćwiczenie można wykonać również w innym języku). Moją pierwszą próbą było (zdefiniuj (w czasie p xs) (if (lub (null? xs) (nie (p (samochód xs)))) '() (cons (samochód xs) (w czasie p (cdr xs) ))))), który działa poprawnie, ale nie jest rekurencyjny. Moją następną próbą było (define (take-while-tr p xs) (let loop ((acc '()) (ys xs)) (if (lub (null? ys) (not (p (car ys)))) (reverse acc) (pętla (cons (car ys) acc) (cdr ys))))), która jest rekurencyjna, ale wymaga wywołania `reverse` jako ostatniego kroku w celu zwrócenia listy wyników we właściwej kolejności. Nie mogę wymyślić rozwiązania, które 1. jest tail-recursive, 2. nie używa `reverse`, 3. używa tylko list jako struktury danych (używanie funkcjonalnej struktury danych, takiej jak sekwencja Haskella, która pozwala na dołączanie elementów, nie jest opcja), 4. ma złożoność liniową względem rozmiaru przedrostka, a przynajmniej nie ma złożoności kwadratowej (dzięki Delnanowi za wskazanie tego). Czy istnieje alternatywne rozwiązanie spełniające wszystkie powyższe właściwości? Moja intuicja podpowiada mi, że nie da się akumulować prefiksu listy w sposób tail-recursive przy zachowaniu oryginalnej kolejności między elementami (tj. bez konieczności używania rewersu w celu dostosowania wyniku), ale nie jestem w stanie tego udowodnić . **Uwaga** Rozwiązanie wykorzystujące „odwrotne” spełnia warunki 1, 3, 4.


title: Kiedy zakres dynamiczny byłby przydatny?

text: Dzięki dynamicznemu określaniu zakresu osoba wywoływana może uzyskać dostęp do zmiennych swojego rozmówcy. Pseudo kod C: void foo() { print(x); } void bar() { int x = 42; bla(); } Ponieważ nigdy nie programowałem w języku, który obsługuje dynamiczne określanie zakresu, zastanawiam się, jakie byłyby rzeczywiste przypadki użycia dynamicznego określania zakresu.


title: Koncepcja abstrakcji w OOP

text: Słyszałem, że abstrakcja to technika, która pomaga nam określić, które konkretnie informacje powinny być widoczne, a które ukryte. Enkapsulacja to technika pakowania informacji w taki sposób, aby ukryć to, co powinno być ukryte, a uwidocznić to, co ma być widoczne. Dobrze rozumiem enkapsulację... Prostym przykładem może być metoda obliczania kalorii na podstawie podanych przez nas parametrów. CalculateCalories(x,y,z) Tutaj nie wiem, jak ta metoda oblicza kalorie, ale mogę ją wywołać, aby obliczyć kalorie. Jestem zdezorientowany abstrakcją. Jakie są te techniki, które wykorzystuje abstrakcja, aby pomóc określić, które konkretne informacje powinny być widoczne, a które powinny być ukryte? Czy może źle rozumiem koncepcję? Czy ktoś mógłby podać intuicyjny przykład?


title: Praktyka kodowania PHP

text:
Jestem programistą PHP samoukiem. Ponieważ nie mam formalnego szkolenia w PHP, często uważam, że mój styl kodowania znacznie różni się od przykładowego kodu, który znajduję w Internecie. Powoli zacząłem dostosowywać niektóre z bardziej powszechnych praktyk, które znalazłem. Zanim jednak zmienię swoje przyzwyczajenia, staram się znaleźć dobry powód do zastosowania nowego stylu. Po prostu nie widzę powodu, aby zmieniać nawyk, jeśli nie jest on faktycznie korzystny. Widzę, że wiele osób pisze kod PHP, taki jak:
<?php echo $cTitle; ?>

<?php print $cContent; ?>
 Podczas gdy ja generalnie piszę: <?php echo "
", $cTitle, "
"; print("
" . $cZawartość . "
"); Widzę, że ludzie często wchodzą i wychodzą z PHP, podczas gdy ja używam PHP tylko do drukowania/echo zawartości html wraz ze zmiennymi PHP. Czy istnieje mierzalna różnica między tymi dwiema metodami? Czy jest dobry powód, aby zmienić swoje postępowanie?


title: Jak Nic nie jest podtypem każdego innego typu w Scala

text: Uczestniczę w kursie Coursera Martina Odersky'ego na temat programowania funkcjonalnego ze skalą i na razie nauczyłem się dwóch rzeczy, które razem nie mają sensu: 1. Scala nie obsługuje wielokrotnego dziedziczenia 2. „Nic” jest podtypem każdego innego typu Te dwa stwierdzenia nie mogą żyć razem, więc jak to się właściwie dzieje? i co dokładnie oznacza "podtyp każdego innego typu" **Edytuj 1** W API Scala, `Nic` jest zdefiniowane jako `abstrakcyjna klasa końcowa Nic nie rozszerza Any`... więc jak może rozszerzać inne klasy?


title: Dlaczego duże firmy korzystają z Perforce?

text: Słyszałem o kilku dużych firmach m.in. Google, Facebook używają Perforce Czy jest jakiś powód, dla którego SVN/Git nie może zastąpić Perforce?


title: Promowanie skalowalności w małych aplikacjach biznesowych

text: Jestem częścią małej firmy programistycznej, która specjalizuje się w małych i średnich aplikacjach biznesowych, a moje doświadczenie z architekturą rozproszoną/SOA jest ograniczone. Proszę daj mi znać, jeśli mam do tego wszystko źle. Często zaczynamy tworzenie aplikacji dla małych firm, w których rozproszona architektura wydaje się przesadą i nie zostanie zaimplementowana jako taka. Jednak w niektórych przypadkach projekt wykracza daleko poza pierwotny zakres, a preferowane rozwiązanie może później stać się rozwiązaniem rozproszonym. W jaki sposób możemy zapewnić od samego początku, aby ta zmiana przebiegła tak płynnie, jak to tylko możliwe, przy minimalnych kosztach wykonania i (przede wszystkim) czasie? W szczególności szukam porady w zakresie architektury rozwiązania, aby to osiągnąć. Weźmy ten prosty przykład: * Na początku aplikacja Windows działa na kilku komputerach, wywołując lokalnie całą logikę biznesową w zestawie dystrybuowanym wraz z aplikacją. * Później logika biznesowa zostanie przeniesiona na serwer centralny, a aplikacja Windows musi teraz komunikować się z warstwą biznesową za pośrednictwem usługi WCF. Oczywistą odpowiedzią byłoby po prostu utworzenie usługi WCF od samego początku i uruchomienie jej lokalnie na każdym komputerze, ale początkowo pomyślałem, że może to spowodować niepożądane zużycie czasu w projektach o ścisłych terminach, ze względu na zwiększone koszty rozwoju ( konieczność utrzymania warstwy (warstw) pośrednich itp.). Jednym z konkretnych problemów z początkową architekturą jest to, że instancje obiektów są przekazywane z aplikacji Windows do warstwy biznesowej, tworząc w ten sposób zależność, która może złamać kod podczas przechodzenia do rozwiązania rozproszonego. „Symulując” rozwiązanie rozproszone, możemy zapewnić, że nasi programiści nie będą przypadkowo wprowadzać tego rodzaju problemów. * Jaki jest najlepszy sposób na osiągnięcie tej skalowalności? * Czy mylę się w swoich założeniach dotyczących czasu i wydajności?


title: W jaki sposób sprawdzasz swoje biblioteki open source pod kątem rejestratorów naciśnięć klawiszy?

text: Przypadkowa osoba w Internecie powiedziała mi, że technologia jest bezpieczna(1), bezpieczna w użyciu i nie zawiera keyloggerów, ponieważ jest open source. Chociaż mogę łatwo wykryć rejestrator naciśnięć klawiszy w tej aplikacji o otwartym kodzie źródłowym, co mogą zrobić _deweloperzy_ (2), aby uchronić się przed oszustami w projektach open source? Przeprowadzając analizę zagrożeń kopert, gdybym był nieuczciwym programistą, rozwidlałbym gałąź na gita i promowałby jej pobieranie, ponieważ miałby obsługę Twittera (i tajny rejestrator naciśnięć klawiszy). Gdyby to było repozytorium SVN, utworzyłbym po prostu nowy projekt. Jeszcze lepiej byłoby umieścić złośliwy kod w procedurach automatycznej aktualizacji. (1) Nie wspomnę o których, ponieważ mogę mieć do czynienia tylko z jednym rodzajem fanatyków na raz. (2) Zwykli użytkownicy są na łasce swojego oprogramowania do wykrywania wirusów i złośliwego oprogramowania — absurdem jest oczekiwać, że babcia przeczyta kod źródłowy kodu źródłowego ich edytora tekstu open source, aby znaleźć rejestrator naciśnięć klawiszy.