title: Jakie są dobre sposoby, by pracodawca wspierał edukację programistów?

text: Mój obecny pracodawca płaci za certyfikaty i zajęcia w college'u (pod warunkiem, że zdobędziesz „A”), ale szukam innych rzeczy, które mógłbym im zasugerować. Niewielu z nas ma czas na skorzystanie z zajęć na uczelni, a materiał objęty egzaminami certyfikacyjnymi nie zawsze jest najbardziej praktycznymi informacjami. (Kod Access Security, ktoś?) Może dodatek na książki? Jakaś zachęta do pracy nad projektem open source? W jaki sposób Twój pracodawca zapewnia Ci ustawiczne kształcenie programistów? ### Zobacz też > Jak zadbać o edukację zespołu programistów


title: Czy powinienem otrzymać wynagrodzenie za czas spędzony na nauce frameworka?

text: Aby wyjaśnić sytuację: obecnie jestem jednym z dwóch programistów pracujących w małej firmie zajmującej się tworzeniem oprogramowania. Część mojej pracy wymaga ode mnie nauczenia się frameworka do tworzenia stron internetowych, którego obecnie nie znam. Płacę za godzinę. Pytanie więc brzmi: czy jest całkowicie etyczne spędzanie wielu godzin dziennie na czytaniu dokumentacji i samouczków i otrzymywanie zapłaty za ten czas, w którym nie rozwijam się aktywnie dla naszego produktu? A może większość tej nauki powinna odbywać się w domu lub poza godzinami pracy, aby umożliwić pełniejszy rozwój naszej aplikacji w ciągu dnia pracy?


title: Przejście z TFS do rozproszonego SCM

text: Obecnie bawię się ideą przekazania DSCM kierownictwu mojej firmy. Obecnie używamy pełnego pionowego stosu TFS (SCM, Bug Tracking, Project Management itp.) – jednak chcę w szczególności skupić się na kontroli źródła (ponieważ nie sądzę, aby przekwalifikowanie QA z czymś takim jak Redmine było możliwe). Prawdopodobnie największym problemem jest tutaj ponowne przeszkolenie bardzo dużej liczby programistów do korzystania z nowego SCM (w tym rozproszonego toku myślenia) - co prawdopodobnie w ogóle nie jest możliwe. Potrzebna jest jakaś forma migracji umiejętności z nowym systemem: tutaj GIT strasznie zawodzi, ponieważ zajęłoby to miesiące (i nie jesteśmy małym sklepem startowym - to bardzo duża firma z prawdziwymi zobowiązaniami). Kolejną kwestią jest fakt, że obecnie wymagamy, aby check-in był powiązany z prawdziwym błędem lub zadaniem (elementem pracy) - wątpię, aby kierownictwo gryziło, gdybyśmy nie mogli tego kontrolować. Idealnie, maszyny deweloperskie powinny mieć konfigurację zerową, tj. powinny zapobiegać „nielegalnym” wypchnięciom, nawet jeśli masz zainstalowanego tylko klienta SCM. Możliwość aktualizowania elementów roboczych TFS również byłaby dużym plusem - nawet gdybym musiał pisać niestandardowy kod, ale po raz kolejny powinno to być kontrolowane przez centralne repozytorium, a nie na maszynach deweloperskich. Wiem, że na dłuższą metę DSCM łagodzi wiele problemów, z którymi borykamy się na co dzień, ale nie możemy sobie pozwolić na czas programistów, którzy mają problemy z łączeniem lub tym podobne. Na przykład, moje pierwsze połączenie GIT zajęło mi dobre 2 dni, aby to rozgryźć, ponieważ byłem tak przyzwyczajony do sposobu myślenia TFS. Jest to nie do przyjęcia, gdy weźmie się pod uwagę rzeczywiste terminy. Narzędzia są dużym problemem: niezwykle łatwo jest wepchnąć zaznaczony plik scalony bezpośrednio z powrotem do kontroli źródła; co spowodowałoby awarię kompilacji - TFS nie pozwala na zrobienie czegoś takiego głupiego. Wreszcie, posiadanie „fajnych rzeczy” do pokazania prawdopodobnie pomogłoby na boisku. Mamy proces recenzji, pokazujący komentarze GitHub FI Commit, które byłyby mocnym przykładem tego, dlaczego te rzeczy mogą być lepsze – jednak, jak wspomniano, GIT jest prawdopodobnie naprawdę niewłaściwą drogą. **TLDR;** Uważam, że większość DSCM to narzędzia, a nie frameworki (np. GIT jest tak zaprojektowany); pozwalające łatwo strzelić sobie w stopę – TFS to framework i to jest coś cennego w firmie. Czy ktoś kiedykolwiek rozwiązał tego typu problemy podczas migracji do DSCM? Z jakich platform DSCM korzystałeś? Jakie wyzwania napotkałeś? Czy masz jakieś pomysły, jak ten proces można usprawnić i uczynić prawie bezbolesnym?


title: Ogólna lista kontrolna przed wydaniem oprogramowania

text: Obecnie buduję narzędzie, które moja firma zamierza sprzedawać. Jestem jedynym programistą w tym projekcie i jest on rozwijany poza naszą normalną bazą kodu i do pewnego stopnia poza naszym normalnym procesem. Próbuję przygotować listę kontrolną elementów do sprawdzenia, zanim uznam, że oprogramowanie jest gotowe do wydania do testów. Oto elementy, które do tej pory wymyśliłem: * Czy kod jest odpowiednio skomentowany? * Czy kod jest zgodny ze zdefiniowanymi Standardami Firmowymi? * Czy istnieje obsługa błędów? * Czy istnieje odpowiednie zabezpieczenie? * Czy istnieje odpowiednie logowanie? * Czy wymagana jest lokalizacja? * Czy sporządzono informacje o wersji i towarzyszącą dokumentację? * Czy cały kod testowania i debugowania został usunięty? * Czy usunięto poufne dane, takie jak hasła i klucze licencyjne? * Czy wydajność została sprawdzona? Wycieki pamięci? Czy ktoś może zasugerować elementy, które można by dodać do tej listy i wyjaśnić, dlaczego uważasz, że byłoby to przydatne? Moim celem jest stworzenie listy kontrolnej szablonów, którą mogę następnie dostosowywać do poszczególnych projektów.


title: Szybka kompresja w C++ i dekompresja w C#

text: ### Przegląd Pracuję nad aplikacją klient-serwer. Klient jest napisany w C++ (pracuje na Windowsie, planuje wsparcie dla Linuksa), a serwer jest usługą .NET RESTful. Potrzebuję HTTP POST niektórych danych na serwerze. Dane to „ciąg” Unicode, który muszę skompresować przy użyciu dowolnego algorytmu szybkiej kompresji (musi być lekki na procesorze). Na serwerze muszę zdekompresować surowe bajty i uzyskać ciąg. ### Problem Nie mogę zdekompresować surowych bajtów i w końcu bufory wyjściowe dekompresora pozostają nienaruszone. ### Próbowałem Próbowałem użyć Google Snappy, jest tylko wersja C/C++ i żadne porty .NET nie wydają się być zakończone. Sprawdziłem również LZ4, gdzie kompresja/dekompresja działa w _jednym_ języku, ale gdy próbuję użyć _oba_ \- nie mogę poprawnie rozpakować danych (rozpakowane bajty są ustawione na 0s). ### Pytanie Czy ktoś próbował użyć szybkiej kompresji C/C++ i dekompresji C#? Jakieś zalecenia? Aplikacja kliencka nie powinna wykorzystywać więcej niż 5% procesora - to niejasne wymaganie, które mam. Planuję wypróbować gzip i może deflacji, ale nie jestem pewien, czy mogę tam skonfigurować poziomy kompresji, czy będzie działać zarówno w C/C++, jak i C#. Klient zbiera niektóre dane w czasie zbliżonym do rzeczywistego do małego bufora, gdy bufor się zapełni, należy go skompresować i wykonać POST. Cały proces systemu operacyjnego zajmie mniej niż 5% procesora maszyny. Bufor jest wysyłany z grubsza 2 razy na sekundę, co powoduje ruch około 2Kb/s.


title: Dlaczego Scala używa operatora „_” do importu pakietów zamiast „*”, jak w Javie?

text: Moim zdaniem jedną z największych zalet Scali jest jej interoperacyjność z Javą i podobna składnia. Jedną rzeczą, która wydała mi się dziwna, jest użycie operatora `_` do importu pakietów w postaci symboli wieloznacznych zamiast operatora `*`, który jest używany w Javie. Czy istnieje techniczna przyczyna używania `_` zamiast `*`? Jeśli nie, to dlaczego dokonano tej zmiany?


title: Jak działa widok zgodności w IE za kulisami

text: Kiedy zdalnie łączę się z moim komputerem służbowym, w IE10, zdalna usługa klienta Juniper, która jest w zasadzie wtyczką uruchamianą w przeglądarce, nie działa. Aby go zobaczyć, muszę włączyć widok zgodności. Moje pytanie brzmi, co dokładnie dzieje się za kulisami w widoku zgodności, aby można było za jego pomocą naprawić tak dużą liczbę problemów ze zgodnością? Co zrobili... zrobić listę przestarzałych interfejsów API, które działały poprawnie w ie8, ale przestarzałe w ie10, a następnie po kliknięciu widoku zgodności te interfejsy API są ponownie obsługiwane?


title: Test jednostkowy i pokrycie kodu skryptów kompilacji Ant

text: W naszym środowisku programistycznym mamy coraz więcej skryptów kompilacji dla mrówki do wykonywania zadań kompilacji dla kilku różnych zadań kompilacji. Te skrypty budujące czasami stają się duże i robią wiele rzeczy i zasadniczo są kodem źródłowym samym w sobie. Tak więc w „świecie TDD” powinniśmy mieć testy jednostkowe i raporty pokrycia kodu źródłowego. Znalazłem AntUnit i BuildFileTest.java do przeprowadzania testów jednostkowych. Ale interesujące byłoby również poznanie pokrycia kodu tych testów jednostkowych. Szukałem google, ale nic nie znalazłem. Czy ktoś zna narzędzie do pokrywania kodu dla skryptów kompilacji Ant?


title: Klasa Java do wymuszania implementacji publicznych metod superklas

text: Mam następujące : public Class A { public void metodaA() { .... } public void metodaB() { .... } } Nie mam kontroli nad Klasą A. Chciałbym utworzyć podklasy Klasy A z ograniczeniem, że musi przesłonić metodę A() (wywołanie super.methodA() musi uruchamiać implementację klasy A). Czy to możliwe? jest tak, jak?


title: MATLAB: Najlepsza kondycja vs średnia kondycja, początkowy zakres

text: 1. Na przykładzie funkcji Rastrigina. W funkcji wykresu, jeśli wybiorę „najlepszą przydatność”, na tym samym wykresie zostanie wykreślone również „przydatność średnia”. Dobrze rozumiem pojęcie „najlepszego dopasowania”, dzięki któremu wykreśla najlepszą wartość funkcji w każdym pokoleniu w porównaniu z liczbą iteracji. Po pewnym czasie osiągnie wartość zero. Nie rozumiem „średniej sprawności” na wykresie. Co oznaczają te wartości „średniej sprawności”? W jaki sposób wykres „średniej sprawności” pomaga zrozumieć funkcję Rastrigina? 2. Jakie jest znaczenie terminu populacja początkowa, wynik początkowy i zakres początkowy? Chciałbym lepiej zrozumieć te terminy. 3. Domyślna wartość początkowego zakresu to `[0,1]`. Czy oznacza to, że „0” to dolna granica („lb”), a „1” to górna granica („ub”)? Czy te wartości kolidują z wartościami `lb` i `ub` ustawionymi w ograniczeniach? 4. Staram się lepiej rozumieć pojęcia `lb` i `ub`. Jeśli moje „lb” to „0”, a „ub” to „5”, czy to oznacza, że moje końcowe wartości punktowe będą się mieścić w zakresie od 0 do 5? 5. Jeśli wiem, że `lb` i `ub` dla mojego problemu są pomiędzy `0` a `5`, czy zawsze ustawiam początkowy zakres jako `[0,5]` i czy mogę założyć, że to jest najlepszą opcją dla początkowego zakresu i nie muszę próbować z innymi wartościami?


title: Czy C# połączy się z natywnym kompilatorem C++?

text: Zgodnie z tym postem: http://channel9.msdn.com/Forums/Coffeehouse/MS-working-on-a-same-compiler-for- C-AND-C--Not-in-incubation-but-for- produkcja- Ile prawdy jest w tym poście? Czy powinni to traktować poważnie programiści C++ (twórcy gier itp.)? Edycja : Jest inny cel tego pytania... Czy C# będzie wstecznie kompatybilny z C++?


title: Czy powinienem tworzyć własne kody statusu HTTP? (a la Twitter 420: Wzmocnij swój spokój)

text: Obecnie implementuję interfejs API HTTP, mój pierwszy w historii. Spędzam dużo czasu na przeglądaniu strony Wikipedii w poszukiwaniu kodów stanu HTTP, ponieważ jestem zdeterminowany, aby zaimplementować odpowiednie kody do odpowiednich sytuacji. Na tej stronie znajduje się kod o numerze 420, który jest niestandardowym kodem, którego Twitter używał do ograniczania szybkości. Istnieje już jednak kod do ograniczania szybkości. To 429. To sprawiło, że zacząłem się zastanawiać, po co mieliby ustawić niestandardowy, skoro istnieje już przypadek użycia. Czy to po prostu bycie słodkim? A jeśli tak, to jakie okoliczności pozwolą na zwrócenie innego kodu statusu i co, jeśli klienci mogą mieć z tym problemy? Przeczytałem gdzieś, że Mozilla nie implementuje odpowiedzi dowcipu „418: Jestem czajniczkiem”, co sprawia, że myślę, że klienci wybierają kody statusu, które implementują. Jeśli to prawda, to mogę sobie wyobrazić, że zabawne, trochę poprawiające twój spokojny kod na Twitterze jest problematyczne. Chyba, że się mylę i możemy przywłaszczyć sobie każdy numer kodu, aby oznaczał to, co nam się podoba, i tylko konwencja nakazuje, że 404 oznacza „nie znaleziono”, a 429 oznacza „spokojnie”.


title: Testerzy automatyzacji vs programiści

text: Jakie są różnice między testerami automatyzacji a programistami?


title: Czy wątki same się usuwają?

text: Powiedzmy, że pracowałem nad aplikacją Swing. Większość z nich jest uruchamiana na EDT za pomocą `SwingUtilities.invokeLater()` wewnątrz metody `main`, ponieważ słyszałem (proszę mnie poprawić, jeśli się mylę), że właśnie to należy zrobić ze Swingiem. Jednak niektóre jego części nie powinny działać na EDT. Te części są częściami, których ukończenie zajmuje dużo czasu (zakładam, że dzieje się tak, ponieważ długie zadania w EDT będą kolidować z tym, co powinno być wykonywane w GUI, a zatem tego rodzaju zadania powinny być wykonywane równolegle, w innym wątku. to założenie jest poprawne?) Aby to zrobić, gdy muszę wykonać zadanie, które trwa długo i dlatego nie może być uruchomione w EDT tak jak reszta programu, tworzę nowy wątek i uruchamiam to zadanie w nim. **Moje pytanie brzmi:** Kiedy metoda `run()` tego nowego wątku się kończy, aka wątek zakończył swoje zadanie. Czy usuwa się? Czy może nadal istnieje w pamięci?


Czy curl jest czymś, co nie powinno być instalowane na serwerach? Pracuję dla małego sklepu deweloperskiego i 99% problemów, które mam, dotyczy curl. Większość projektów, nad którymi pracuję, obejmuje wywoływanie internetowego interfejsu API. Większość internetowych interfejsów API sugeruje domyślnie używanie curl, ponieważ w żądaniu musisz przekazać dane POST. Za każdym razem, gdy skarżę się starszemu, że serwer, na którym pracuję, nie ma zainstalowanego curl, zawsze otrzymuję wymówkę, że curl nie jest potrzebny, zawsze możesz użyć `file_get_contents`. Tak więc pytanie: czy curl jest czymś, co nie powinno być instalowane na serwerach z PHP, czy powinienem zawsze programować przy użyciu `file_get_contents`, a nie curl? Czy są jakieś zalety używania `file_get_contents` nad curl i odwrotnie? Jeśli to pomaga, kontekstem są tu wtyczki wordpress, aplikacje Shopify, moduły drupalowe i inne fragmenty kodu, które może zainstalować wiele osób.


title: Projekt i związek kursora z obiektem, do którego się odnosi

text: Muszę zaimplementować klasę Cursor do wykonywania operacji na obiekcie Document, który jest implementowany wewnętrznie jako prosta lista wierszy. Klasa Cursor musi posiadać metody takie jak poruszanie się po Document, dodawanie linii, usuwanie linii, wstawianie tekstu w danej pozycji itp. Problem jaki mam dotyczy szczegółów projektu. Wydaje mi się, że kursor _musi_ znać szczegóły implementacji odniesionej klasy. W C++ te klasy muszą być klasami zaprzyjaźnionymi, ale nie lubię tego z oczywistych względów (enkapsulacja itp.). Nie mogę sobie wyobrazić interfejsu dla klasy Document, aby jego implementacja była prywatna, co również nie umniejsza celu klasy Cursor, to znaczy, w końcu mam interfejs Cursor w samej klasie Document. Czy wyciekające szczegóły implementacji dokumentu są obowiązkowe podczas implementacji Cursora? Jeśli nie, jaki powinien być interfejs dokumentu?


title: Czy dokumentacja jest historią użytkownika?

text: Musimy zrobić trochę dokumentacji użytkownika dla produktu, nad którym pracowaliśmy przez ostatnie kilka sprintów. Rozpoczynamy teraz nowy projekt w następnym sprincie, a PO tworzy dokumentację produktu wytworzonego wcześniej jako historyjkę użytkownika dla tego sprintu. Zastanawiam się tylko nad Twoją opinią na temat tego podejścia. Osobiście nie zgadzam się, że dokumentacja jest User Story w Scrumie, ponieważ nie tworzy żadnego kodu. EDIT: Dzięki za opinie chłopaki. Miałem z tyłu głowy, że sprint miał na celu wdrożenie przyrostu działającego oprogramowania, ale wasze poglądy zmieniły moje poglądy. Dziękuję za wszystkie odpowiedzi.


title: Jak oceniasz czas potrzebny na „fazę badawczą” w zwinnym rozwoju?

text: W kontekście zwinnego rozwoju, jaka jest odpowiednia ilość nauki, którą inżynier powinien zaangażować przed wdrożeniem rozwiązania problemu? Jeśli inżynier wie, że jest zbyt nieświadomy danego tematu (powiedzmy kompresji), aby rozpocząć wdrażanie, idzie i uczy się tego, co jej zdaniem _potrzebuje_ wiedzieć, a następnie wdraża rozwiązanie. Oczywiście głębsze zrozumienie wspomnianego tematu _mogłoby_ zaowocować lepszą implementacją, ale kosztem zwinności. Z drugiej strony, jeśli inżynier dowie się zbyt mało na dany temat, istnieje niebezpieczeństwo, że w najbliższej lub najbliższej przyszłości wdroży znacząco niewystarczające/uszkodzone wdrożenie, które negatywnie wpłynie na klientów. Do którego końca tej skali, jeśli w ogóle, przewodnie zasady agile prowadzą inżyniera? A może agile pozostawia to jako skalę ruchomą, gdzie odpowiedź może być inna w każdej sytuacji? ### Aktualizacja: Żeby było jasne, pytam konkretnie, co ma do powiedzenia agile, a nie jaka powinna być odpowiednia ilość nauki. Pierwsze ma konkretną odpowiedź, drugie jest subiektywne i nieodpowiednie dla programistów ### Aktualizacja 2: Przeformułowałem tytuł pytania jako pytanie, ale moje pytanie pozostaje takie samo (zwróć uwagę na brak zmian nigdzie poza tą sekcją i tytułem ). Większość odpowiedzi, choć wnikliwa, nie odpowiadała na pytanie (ale zostały docenione! :) Chcę zrozumieć nie kiedy/jak dzieje się badanie rozwoju zwinnego, ale co więcej, jak oszacować „dobrą” ilość czasu na spędź naukę tematu w fazie badawczej, zanim przejdziesz do wdrożenia rozwiązania. Rozumiem, że w niektórych przypadkach nie jest wymagane wiele badań, a w niektórych przypadkach programiści mają do czynienia z tematem, o którym nawet najstarszy programista wie niewiele lub nic, więc odpowiedź na to pytanie zawiera element skalowalności do spełnienia obie sytuacje.


title: Korzystać z najnowszych technologii lub korzystać z dojrzałej technologii jako programista?

text: Chciałbym stworzyć aplikację dla grupy osób. Postanowiłem rozwijać się przy użyciu Pythona, ale myślę o użyciu Pythona 2.X lub pythona 3.X. Jeśli używam Pythona 2.X, muszę go uaktualnić na przyszłość ... Ale jest bardziej dojrzały i ma wiele narzędzi i bibliotek. Jeśli rozwijam się przy użyciu 3.X, nie muszę myśleć o przyszłej integracji, ale obecnie nie ma wielu bibliotek, nawet python do wykonywania nie jest gotowy na wszystkie platformy. Ponadto jednym z rozważań jest to, że jest to zupełnie nowa aplikacja, więc nie mam ciężaru historii, aby utrzymywać stare biblioteki. Jakieś zalecenia dotyczące tego dylematu? Więcej informacji na temat tej aplikacji: * Aplikacja natywna * Czas konserwacji: 5 lat+ * Biblioteka/Narzędzia muszą potrzebować: jeszcze nie mam pomysłu. * Musi potrzebować funkcji, która w 2.X: Konwertuj na plik wykonywalny zarówno dla systemu Windows, jak i Mac OS X


title: Czy usługi mogą się wzajemnie odwoływać?

text: Mam usługę, która potrzebuje informacji zaimplementowanych przez inną usługę w tej samej warstwie. Czy dobrą praktyką jest uzależnienie jednej usługi od innej usługi w tej samej warstwie?


title: Jakie negatywne konsekwencje mogą wyniknąć z tej zasady projektowania języka?

text: _Objaśnienie: reguła ma na celu uniemożliwienie dostępu do zmiennych, które nie są jeszcze zadeklarowane.__ Wyjaśnienie 2: reguła nakazuje, aby kompilator podążał za wywołaniami funkcji, które są zdefiniowane w tym samym zakresie co wywołanie i mają miejsce przed rzeczywistą definicją (odwołanie do przodu) - upodobnienie kompilatora do interpretera._ Myślę o fikcyjnym języku programowania, który zachowuje się podobnie do JavaScript podczas deklarowania funkcji: to znaczy, gdy używamy słowa kluczowego `function` do tworzenia nazwanych funkcji, są one „podnoszone” do w górnej części zakresu i mogą być używane wszędzie tam, gdzie widoczna jest ich nazwa. Na przykład, następujące jest legalne: f(); function f() { console.log("f wywołane") }; Istnieje jednak potencjalny problem: co jeśli funkcja `f` używa zmiennej `x`, która jest zdefiniowana _po_ wywołaniu, jak tutaj: f(); zmienna x = 1; funkcja f() { console.log(x); } W przypadku JavaScript jest to również legalne, ponieważ zmienne są również podnoszone - program zostaje zasadniczo przekształcony w coś takiego: var x; funkcja f() { console.log(x); }          f(); x = 1; I dlatego po prostu wypisuje `undefined`. **W moim fikcyjnym języku zmienne nie zostałyby podniesione** , co oznacza, że powyższy przykład spowodowałby błąd. Reguła dotyczy sposobu generowania tego błędu: > Funkcje są widoczne dla całego bloku, w którym są zdefiniowane, ale > jest niedozwolone wywołanie funkcji, która uzyskuje dostęp do zmiennej zadeklarowanej po wywołaniu >. **Oznacza to, że za każdym razem, gdy kompilator dla tego języka napotkałby wywołanie funkcji, musiałby sprawdzić, czy funkcja jest zdefiniowana w bieżącym zakresie, a jeśli tak, to sprawdzić, czy uzyskuje dostęp do zmiennych w bieżącym zakresie, które są zadeklarowane po wywołaniu.** Powodem tej reguły jest to, że nie ma sensu uzyskiwać dostępu do zmiennych przed ich zadeklarowaniem. Przenoszenie zmiennych na szczyt ich zakresu, tak jak robi to JavaScript, to hack, który pozostawia tylko miejsce na błąd! Dlatego uważam, że nie wolno tego robić, ale takie sytuacje należy wykrywać i traktować jako błędy (ponieważ są, odwołujesz się do czegoś, co chronologicznie jeszcze nie istnieje). **_Szukam powodów, dla których jest to zła reguła, tj. powoduje komplikacje lub niespójności._** Powodem, dla którego podejrzewam, że reguła jest zła jest to, że nie istnieje w języku Scala. Scala rozwiązał ten problem za pomocą znacznie bardziej ogólnej zasady: > Zakres nazwy wprowadzany przez deklarację lub definicję to cała > sekwencja instrukcji zawierająca powiązanie. Istnieje jednak ograniczenie > odwołań do przodu w blokach: W sekwencji instrukcji `s[1]...s[n]` > tworzącej blok, jeśli prosta nazwa w `s[i]` odnosi się do jednostka zdefiniowana przez > `s[j]` gdzie `j >= i`, a następnie dla wszystkich `s[k]` pomiędzy `s[i]` i > `s[j]`, > > * `s [k]` nie może być definicją zmiennej. > * Jeśli `s[k]` jest definicją wartości, musi być `leniwa`. > **AKTUALIZACJA:** Na razie przyjąłem podejście Scali. To podejście jest bardziej ogólną wersją mojej zasady: wyłapuje wszystkie nielegalne dostępy, ale także takie, które nie są - jest to kompromis, na który jestem skłonny, ponieważ uważam, że moja zasada może być zbyt skomplikowana lub nawet niemożliwa do wprowadzić w życie. Oto przeformułowana/wyjaśniona reguła ze Scali: do zmiennych nie można odwoływać się w przód, ale leniwe wartości, funkcje zdefiniowane za pomocą def (które są po prostu cukrem składni dla lambd przypisanych do (leniwych) wartości, mogą nawet je usunąć, jak sugerował Doval), klasy, a moduły mogą. Ograniczenie polega na tym, że między odwołaniem a deklaracją (włącznie) nie może być definicji zmiennych, ponieważ mogą one zostać zmienione przez obiekt, do którego się odwołujemy, zanim zostaną wprowadzone do programu.


title: Konwersja do programowania obiektowego

text: Obecnie pracuję nad projektem, który na razie jest dość mały. Niedawno nastąpiła zmiana polegająca na wdrożeniu architektury trójwarstwowej, dzięki której kod jest teraz odpowiednio podzielony na warstwy dostępu do danych, logiki biznesowej i interfejsu użytkownika. Nie ma jednak zastosowania obiektów poza ich tworzeniem, aby ostatecznie wywołać metodę dostępu do danych. Na bardzo podstawowym poziomie prawie wszystko, co robimy, to: Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load Dim dt As New DataTable dt = objBl.GetSomething 'Assign to Grid 'Format Grid End Sub Chcę zaimplementować coś więcej w stylu: Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load Dim lstSomeObject As New List(Of SomeObject) 'Wypełnij listę obiektów przez wywołania warstwy biznesowej DataGridView1.DataSource = lstSomeObject 'Format Grid End Sub Ostatecznie niewiele się różni. Ale zamiast przekazywać trzydzieści zmiennych, aby uzyskać wynikową tabelę danych, która jest używana raz, moglibyśmy utworzyć obiekt (i listy obiektów) i przekazać je dalej. Mam kilkuletnie doświadczenie w pracy w takim środowisku, ale zero doświadczenia w przechodzeniu na takie środowisko. Szczerze mówiąc, nie wiem, jak to zrobić. Czy tworzę w tym celu oddzielny projekt encji, a następnie czy wszystko się do tego odwołuje? Czy też zmuszam nasze obecne obiekty do przechowywania zarówno właściwości, jak i metod dla każdego typu obiektu (jest to dla mnie sprzeczne z intuicją)? A może coś zupełnie innego? Przeszukałem większość weekendu i nie znalazłem niczego zbyt przydatnego.


title: Wyjątki: po co rzucać wcześnie, po co łapać późno?

text: Istnieje wiele dobrze znanych najlepszych praktyk dotyczących obsługi wyjątków w izolacji. Znam również dobrze i nie bardzo dobrze, ale szukam najlepszych praktyk lub wzorców w większych środowiskach, zwłaszcza kiedy należy ponownie zgłosić i kiedy złapać wyjątki. Co więcej, zawsze jestem zdezorientowany, gdy czytam: „rzucaj wcześnie, łap późno”. Dlaczego miałbym rzucać wcześnie i łapać późno, jeśli w warstwie niskiego poziomu zostanie rzucony NPE? A dlaczego miałbym go łapać na wyższej warstwie? Nie ma sensu wyłapywanie wyjątku niskiego poziomu na wyższym poziomie, takim jak warstwa biznesowa. Narusza obawy każdej warstwy. Wyobraź sobie następującą sytuację: Mam usługę, która oblicza liczbę. Aby obliczyć liczbę, usługa uzyskuje dostęp do repozytorium, aby uzyskać surowe dane i inne usługi w celu przygotowania obliczeń. Jeśli coś poszło nie tak w warstwie pobierania danych, dlaczego mam zgłosić DataRetrievalException na wyższy poziom? W przeciwieństwie do tego, wolałbym zapakować wyjątek w sensowny wyjątek. ### Po co rzucać wcześnie, po co łapać późno?


title: Czym dokładnie jest kod bajtowy maszyny wirtualnej?

text: Chcę pracować na bardzo prostym kompilatorze dla bardzo prostego języka. Kompilator skompiluje kod do podstawowego kodu bajtowego. Później program maszyny wirtualnej uruchomi kod bajtowy i wykona program. Mam kilka pytań dotyczących tego, czym właściwie jest kod bajtowy: * Czy kod bajtowy musi mieć postać binarną, czyli składać się tylko z sekwencji 1 i 0? A może może zawierać więcej rodzajów liczb, a nawet słów? * **Jak dokładnie, najczęściej, jest skomponowany kod bajtowy programu?** Jeden pomysł na to, co będzie zawierał kod bajtowy i jak będzie skomponowany przy użyciu mojego kompilatora, to: Kompilator zeskanuje kod programisty, i przekonwertuj każde polecenie na odpowiednik kodu bajtowego. Na przykład polecenie `print` zostanie przekonwertowane na `1` w kodzie bajtowym. Później, gdy maszyna wirtualna uruchomi kod bajtowy, każdy element w kodzie bajtowym zostanie przekonwertowany na wykonanie w programie. Na przykład, jeśli maszyna wirtualna zeskanuje kod bajtowy i pojawi się jako „1”, coś wydrukuje. Czy takie podejście jest powszechne? Czy to ważne? Jakie jest najczęstsze podejście do tego, jak i co składa się z kodu bajtowego?


title: CQRS i unieważnienie pamięci podręcznej (podczas równoważenia obciążenia)

text: Powoli próbuję przeprowadzić migrację naszej aplikacji sieci web do korzystania z podmiotów CQRS. W szczególności rozdzieliłem interfejsy „zapisu” i „odczytu” na polecenia i zapytania. Zaimplementowałem klasę "reader", która może czytać niektóre dane z DB. Zaimplementowałem również dekorator dla tego czytnika, który buforuje dane, aby uniknąć niepotrzebnych podróży do bazy danych. W tej chwili ten dekorator buforuje na żądanie. Chciałbym buforować te dane na dłuższy czas - np. dla przesuwanego 5-minutowego okna. Problem polega jednak na tym, że polecenie, które aktualizuje dane, powinno unieważnić pamięć podręczną po wystąpieniu zapisu, a ja chciałbym wyraźnie uchwycić to pojęcie w naszym modelu domeny. W szczególności tutaj jest interfejs „odczyt” (c#): interfejs publiczny IRoleLister { IList<DomainRole> Fetch(OtuIdentity otuIdentity); IList<DomainRole> FetchForAuthenticatedId(int userId); } A oto interfejs zapisu: interfejs publiczny ICanChangeDomainRoles { void AddRoleToUser(int userId, DomainRole domainRole); void RemoveRoleFromUser(int userId, DomainRole domainRole); } Zdaję sobie sprawę, że jakiś wariant wzorca obserwatora prawdopodobnie miałby zastosowanie, ale nie jestem pewien, jak to uchwycić w modelu domeny. Zidentyfikowałem też inny problem - mianowicie nazewnictwo kluczy pamięci podręcznej. W IRoleLister chcę buforować IList<DomainRole> według użytkownika (np. typeof(IList<DomainRole>) + ":userid" jako klucz), ale w ICanChangeDomainRoles nie znam nazwy klucza. Uważam, że Obserwator powinien w jakiś sposób być za to odpowiedzialny. (A może jakiś inny interfejs? Jak uchwycić tę koncepcję w mojej domenie). Wreszcie zdaję sobie sprawę, że pomogłaby jakaś forma rozproszonej pamięci podręcznej, ale wydaje się to szczegółem implementacji - chcę uchwycić koncepcję unieważnienia/powiadomienia/obserwatora w moim modelu domeny. Wszelkie wskazówki będą mile widziane


title: co to jest przekazywanie wiadomości w OO?

text: Studiowałem programowanie OO, głównie w C++, C# i Javie. Myślałem, że dobrze to orientuję, rozumiejąc enkapsulację, dziedziczenie i polimorfizm (a także czytając wiele pytań na tej stronie). Jedna rzecz, która wydaje się pojawiać tu i tam, to koncepcja „przekazywania wiadomości”. Najwyraźniej jest to coś, co nie jest używane podczas programowania OO w dzisiejszych językach głównego nurtu, ale jest obsługiwane przez Smalltalk. Moje pytania to: * Co to jest przekazywanie wiadomości? (Czy ktoś może podać praktyczny przykład?) * Czy jest jakieś wsparcie dla tego "przekazywania wiadomości" w C++, C# lub Javie?


title: Wizualizacja gramatyki CUP

text: Wdrażam gramatykę w CUP i często przydałoby się zobaczyć wszystko na pierwszy rzut oka. Może to być również przydatne w szybkim wyszukiwaniu błędów. Czy są jakieś programy, które wizualizują gramatykę w składni CUP? Czy możesz wymyślić bardzo prosty sposób na zrobienie tego (na przykład przekonwertować gramatykę na inny format, który może odczytać program X).


title: Wspólna pamięć podręczna — najlepsze praktyki dotyczące unieważniania

text: Chciałbym wiedzieć, jakie byłoby lepsze podejście do unieważniania/aktualizowania obiektów pamięci podręcznej. **Warunki wstępne** * Posiadanie zdalnego serwera memcached (służącego jako pamięć podręczna dla wielu aplikacji) * Wszystkie serwery są obsługiwane przez platformę Azure (regiony koligacji, te same centra danych) * Rozmiar obiektu pamięci podręcznej waha się od 200 bajtów do 50 kilobajtów **Podejście 1 (zapisz w pamięci podręcznej jak najszybciej)** 1. Obiekt A jest tworzony -> przechowuj w bazie danych i przechowuj w pamięci podręcznej 2. Obiekt A żądany przez klienta -> sprawdź, czy istnieje pamięć podręczna, w przeciwnym razie pobierz z bazy danych i zapisz w pamięci podręcznej 3. Obiekt A otrzymuje aktualizacja -> zapisz w bazie danych, zapisz w pamięci podręcznej Podejście 1 wydaje się prostsze. Jeśli coś jest tworzone, włóż do pamięci podręcznej tak szybko, jak to tylko możliwe. Bez względu na to, kto będzie tego potrzebował. **Podejście 2 (lazy cache store)** 1. Obiekt A jest tworzony -> przechowuj w bazie danych 2. Obiekt A żądany przez klienta -> sprawdź cache czy istnieje, w przeciwnym razie pobierz z bazy danych i zapisz w pamięci podręcznej 3. Obiekt A zostaje zaktualizowany -> zapisz w bazie danych, usuń klucz z pamięci podręcznej. Podejście 2 wydaje się być bardziej pamięciowe. W tym podejściu tylko żądane elementy trafiają do pamięci podręcznej. **Pytanie 1:** Biorąc pod uwagę wydajność, jakie byłoby lepsze podejście? Pamięć ani procesor jeszcze się nie liczą. **Pytanie 2:** Czy moje myśli są rodzajem przedwczesnej optymalizacji? **Pytanie 3:** Masz inne myśli? Inne podejścia?


title: Uporządkowane wyliczenie: IEnumerable lub Array (w C#)?

text: Typowy kontekst: tworzę metodę rozszerzającą dla kolekcji, która uważa, że elementy są uporządkowane. Funkcja zaczyna się od początku, pod indeksem 0, a kolejność ma znaczenie. Przykłady: grupowanie według sekwencji lub indeksów elementu. Jednak zawsze jestem zakłopotany tym, co rozszerzyć: `IEnumerable<T>` lub `T[]`. Moim uzasadnieniem była jasność celu: tablica ma pojęcie porządkowania, podczas gdy IEnumerable jest implementowany przez wiele ogólnych kolekcji, z których nie wszystkie mają pojęcie porządku: * Dictionary — nieuporządkowany * HashSet — nieuporządkowany * LinkedList — uporządkowany * List — posortowane * Kolejka — posortowane * SortedDictionary — posortowane (nie oryginalne) * SortedList — posortowane (nieoryginalne) * SortedSet — posortowane (nieoryginalne) * Stack — odwrócone Jak również każda inna implementacja, która może lub nie może być uporządkowana. Ponadto nie jestem pewien, czy enumerator zostanie zresetowany, jeśli wyliczenie nie zostanie zakończone, więc jeśli jest to zmartwienie, to kto wie, w którym momencie wyliczanie się rozpocznie? Wyliczanie tablicy zawsze zaczynałoby się od początku. Więc dla mnie bardziej sensowne jest rozszerzenie `T[]`. Ale czy mam rację, myśląc o tym? Czy za bardzo się martwię? Jakie jest właściwe podejście do zapewnienia „uporządkowanego” wyliczenia?


title: Algorytm zmniejszania sztuki pikselowej

text: To jest coś, nad czym zastanawiałem się od jakiegoś czasu – czy istnieją jakieś algorytmy do skalowania grafiki pikselowej w dół? Jestem pewien, że wszyscy wiemy o ekskluzywnych wersjach na stronie Wikipedii na temat skalowania obrazu. Wymyśliłbym coś w rodzaju ponownego próbkowania najbliższego sąsiada, aby uzyskać odpowiedni wzór kolorów, a następnie przerysowania konturu lub obszarów o wysokim kontraście na górze. Czy jest tam coś, czy będę musiała się nauczyć, jak to zrobić? Dziękuję!


title: Pierwsze kroki z narzędziami do budowania

text: Jestem na ostatnim roku w CS, pracuję nad pierwszym znaczącym projektem, więc pomyślałem, że nadszedł czas, aby nauczyć się i używać narzędzi do budowania. Czytałem głównie o Maven i słyszałem o Ant. Chciałabym poznać Twoją opinię, którą powinienem nauczyć się wykorzystywać do projektu, który będzie rozwijany tylko przez jedną osobę, mając na uwadze krzywą uczenia się i funkcjonalność, która przyda się w tym przypadku.


title: Dlaczego projekty decydują się pozostać na starszej wersji .NET Framework?

text: Dlaczego projekty decydują się pozostać w starszej wersji platformy .NET Framework? Na przykład pozostaniesz na platformie .NET Framework w wersji 3.5, która została wydana w 2007 roku, zamiast uaktualniać do najnowszej wersji 4.5.1? Noda Time Jona Skeeta dotyczy również platformy .NET 3.5. Czemu?


title: kiedy ładować widoki częściowe

text: Kiedy tworzysz stronę internetową, kiedy należy wczytać widok częściowy, a kiedy wykonać całkowite odświeżenie strony? Patrzyłem na stronę github i zauważyłem, że prawie jedynym miejscem, w którym wykonują częściowe ładowanie, jest obszar folderu projektu. Widziałem kilka miejsc, w których mogli, ale nie (nawigacja po kartach: kanał, Twoje działania, ...). Ale Google plus wykonuje częściowe ładowanie wyszukiwania i klikanie dowolnego przycisku nawigacji w nagłówku (zdjęcia, gry, kręgi, ...). Dlaczego miałbyś nie wykonywać częściowego ładowania, jeśli główny kontener pozostaje taki sam, a zmienia się tylko zawartość?


title: Czy istnieje coś takiego jak Diaspora napisane w PHP?

text: Szukam platformy społecznościowej typu open source. Diaspora jest idealna, z wyjątkiem tego, że nie jest napisana w PHP. Czy istnieje projekt taki jak Diaspora napisany w PHP?


title: Rozwój oprogramowania - Projekt, 1 Programista - Co jeśli trafisz autobusem?

text: Firma, w której obecnie pracuję, zajmuje się tworzeniem szeregu wewnętrznego oprogramowania o krytycznym znaczeniu. Mam jeszcze jedną osobę, która dla mnie pracuje, ale jest raczej testerem, a nie deweloperem. Firma jest zaniepokojona niektórymi z tych projektów i tym, co się stanie, jeśli potrąci mnie autobus. Jak firma podnosi się po czymś takim, kiedy jest tylko jedna osoba, która zna bazę kodu. Jedna osoba, która zna aktualny stan projektu. Wyjaśniłem to za pomocą mojej dokumentacji i dokumentacji zawartej w kodzie, że tak naprawdę będą musieli zatrudnić innego programistę, który rozumie używane języki i że mogliby dość szybko przyspieszyć. Zasugerowali zewnętrzną firmę, która może być „na bieżąco aktualizowana” co miesiąc, która mogłaby „przejąć kontrolę” w przypadku, gdyby coś się wydarzyło. Po prostu nie widzę, jak to może być pomocne poza płaceniem komuś w celu zapłacenia mu. Co gorsza, wyobrażam sobie dzień w miesiącu marnowany na omawianie projektu z tą firmą konsultingową. Widzę, jak to może być pomocne. Po prostu nie uważam tego za bardziej pomocne niż zatrudnienie programisty po mojej przedwczesnej śmierci. Myśli? Podobna sytuacja i jak obecnie wygląda jej sytuacja w miejscu, w którym pracujesz?


title: Jakie korzyści biznesowe z Ruby/Rails można przekazać klientowi?

text: Programuję Rubiego. Programuję Railsy. To zen, sprawia przyjemność i jest fajnie. Ale jakie są prawdziwe techniczne i przede wszystkim biznesowe zalety Railsów, mogę powiedzieć klientowi? Wiem, że szczegóły wdrożenia powinny być dostosowane do wymagań projektu. Ale jeśli mam być szczery, jeśli ktoś powie: „Hej, czemu by nie użyć wordpressa i trochę spersonalizowanego szablonu? Jest o wiele tańszy!”, to nie mam wystarczająco dobrych argumentów dla Railsów. Szczególnie w przypadku mniejszych i średnich projektów. Co więc mówisz swoim klientom, kiedy uważasz, że powinni używać Ruby/Rails?


title: Dlaczego wybrano Javę na Androida?

text: Dlaczego wybrano Javę dla Androida, zamiast czegoś takiego jak C++? Chociaż z pewnością nie jestem ekspertem, słyszałem, że Java używa dość dużo pamięci i przypuszczam, że niskie zużycie pamięci byłoby dość ważne na urządzeniach mobilnych. Czy jest jakaś realna korzyść z używania Javy zamiast języka takiego jak C++ na urządzeniu mobilnym?


title: Jak uniknąć podobieństw w imionach między swoimi klasami a klasami rodzimymi?

text: Właśnie natknąłem się na „ciekawy problem”, na temat którego chciałbym poznać Twoją opinię: rozwijam system iz wielu powodów (tj. abstrakcji, niezależności technologicznej itp.) tworzymy własne typy do wymiany informacji. Na przykład: jeśli istnieje metoda, która nazywa się SendEmail i jest wywoływana przez logikę biznesową, to ma ona parametr typu OurCompany.EMailMessage, który jest obiektem całkowicie niezależnym technologicznie i zawiera tylko „dane biznesowe” (na przykład na przykład brak informacji dotyczących kodowania nagłówka). Wewnątrz funkcji SendEmail otrzymujemy te informacje z naszego obiektu EMailMEssage i tworzymy obiekt MailMessage (ten jest specyficzny dla technologii), aby można go było wysłać przez sieć. Jak już można zauważyć, nasza klasa ma bardzo zbliżoną nazwę do klasy „ojczystej”. Problem polega na tym, że dokładnie takie są, wiadomości e-mail, więc trudno znaleźć dla nich inną sensowną nazwę. Czy często masz ten problem? Jak sobie z tym radzisz? Edycja: @mgkrebbs właśnie skomentował używanie w pełni kwalifikowanych nazw. To jest nasze obecne podejście, ale trochę zbyt gadatliwe, IMHO. Jeśli to możliwe, poproszę o coś czystszego.


title: Historia tablicy asocjacyjnej?

text: W wielu nowoczesnych językach skryptowych (np. Perl, Python, Ruby, PHP, Lua, JavaScript) tablice asocjacyjne są obsługiwane jako prymitywny lub pierwszorzędny typ danych (o różnych nazwach, takich jak mapa, słownik, skrót itp.). w bardzo wygodnej składni, dzięki czemu możliwe są wygodne paradygmaty oparte na danych. Który język jako pierwszy przyjął taki projekt? A jak ewoluował ten projekt?


title: Wypełnianie tablicy liczbami z podanego zakresu tak, aby suma sąsiednich liczb była liczbą kwadratową

text: **Problem:** wypełnij wszystkie komórki różnymi liczbami ze zbioru <1,25>, tak aby suma dwóch sąsiednich komórek była liczbą kwadratową. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/ejYiD.png) (źródło: http://grymat.im.pwr.wroc.pl/etap1/zad1etp1213.pdf; numery 20 i 13 zostały podane) Problem ten rozwiązałem już analitycznie i teraz chciałbym się do niego podejść za pomocą algorytmu. **Chciałbym wiedzieć, jak ogólnie mam podejść do tego rodzaju problemów (nie rozwiązanie, tylko punkt wyjścia).**


title: Co to jest pula wątków?

text: W pytaniu z wywiadu facet został poproszony o „zaimplementowanie puli wątków”… Czytałem na wikipedii dla „puli wątków”, ale nadal nie mogę zrozumieć, co powinien zrobić facet, aby rozwiązać to pytanie (prawdopodobnie dlatego, że nie do końca rozumiem, czym jest pula wątków w prostych słowach). Czy ktoś może mi wyjaśnić prostym angielskim, czym jest pula wątków i jak odpowiedzieć na to pytanie?


title: Dobry pomysł na usunięcie logiki z instrukcji SQL?

text: Poprzem to pytanie, mówiąc, że jestem bardzo nowy w profesjonalnym tworzeniu oprogramowania. Pracuję w zespole, który pobiera dane z innych grup w mojej firmie i przekształca te dane w raporty, z których mogą korzystać dyrektorzy biznesowi. W procesie przesyłania i parsowania danych mamy kilka instrukcji SQL, które dużo przetwarzają dane. Prawie każdy `SELECT` używa `TRIM`, `SUBSTR`, `CAST` itp., aby zredukować pola do odpowiedniego rozmiaru i formatu. Dodatkowo istnieje wiele specjalnych przypadków, które są rozwiązywane za pomocą instrukcji `CASE` w `SELECT`. Oprogramowanie serwera Teradata, którego używamy, emituje niezwykle zagadkowe komunikaty o błędach. W rezultacie dużo zgadujemy, jakie dane psują które polecenie SQL. **Moje pytanie:** czy dobrym pomysłem byłoby zredukowanie tych nieco skomplikowanych instrukcji SQL do mniej złożonej formy, która pomija przetwarzanie i obsługę specjalnych przypadków, a zamiast tego działa to w zewnętrznym skrypcie lub programie? Czy to ma sens?


title: Czy liczba błędów w sekcji kodu jest proporcjonalna do liczby wierszy? Kwadrat z # linii ?

text: Czy są jakieś badania, które agregują dane z szerokiej populacji dostarczonego kodu, które ustalają korelację między ilością kodu napisanego w zatwierdzeniu a liczbą wykrytych błędów w tym kodzie? Trudno byłoby to zrobić na githubie bez wiedzy, czy zmiana była spowodowana nową funkcjonalnością, czy błędem, ale można by określić relację między wierszami kodu na zatwierdzenie a tym, ile thrashowania w kodzie ostatecznie się dzieje.


title: Czy procesor to komputer?

text: Czytałem, że komputer składa się z procesora i pamięci. Przeczytałem też, że sam procesor zawiera pamięć podręczną, którą jest pamięć. Więc jeśli sam procesor zawiera pamięć, to czy procesor nie jest komputerem? Proszę wyjaśnić, dzięki. EDIT: Czytałem tutaj: http://www.dwightsilverman.com/future.htm jest napisane: > Procesor sam w sobie jest komputerem, a teraz są na tyle małe, że > są wbudowane we wszystko, od silników samochodowych po tostery . Chociaż te > procesory są stosunkowo głupie, zaprojektowane do robienia tylko jednej rzeczy, > inteligentne procesory, które są bardziej wszechstronne, również trafiają do małych > miejsc.


title: Jakie były wzorce projektowe ery programowania proceduralnego?

text: Podobne: Jak robiono programowanie 20 lat temu? OOP jest obecnie dość modny, ma swoje korzenie w Simula 67 w latach 60., a później spopularyzowany przez Smalltalk i C++. Mamy SUCHE, SOLIDNE, wiele książek o wzorcach projektowych w świecie obiektowym. _Ale jakie były główne zasady programowania przed powszechnym przyjęciem paradygmatu OOP? A jakie były główne wzorce projektowe?_


title: Jaki jest dobry nietechniczny przykład skumulowanego błędu?

text: Pracuję nad raportem, który w sposób nietechniczny musi wyjaśniać skutki skumulowanego błędu i dlaczego tak ważne jest stosowanie obliczeń bezwzględnych. Definicja „błędu skumulowanego” ze słownika.com: > błąd, którego stopień lub istotność stopniowo wzrasta podczas serii pomiarów lub obliczeń; błąd, który narasta podczas obserwacji Idealnie mógłbym podać **przykład ze świata rzeczywistego**, aby pojęli jego koncepcję, nie znając szczegółów. Pierwszy, o którym pomyślałem, to „chińskie szepty”, który jest dość dobrze znany, ale nie zaklasyfikowałbym go dokładnie do „prawdziwego świata”. Czy ktoś zna lepsze przykłady?


title: Dlaczego formaty plików CSV zwykle używają cytowania zamiast ucieczki?

text: Istnieje wiele wariantów „standardu” CSV (lub jego braku). Nigdy osobiście nie widziałem żadnych, które używają znaku ucieczki (takiego jak `\`) zamiast otaczać każde pole podwójnymi cudzysłowami. Zamiast „foo, bar”, „foo, bar” byłoby „foo, bar, foo \, bar”. Byłoby to przydatne w sytuacjach, w których plik musi być ręcznie sprawdzany lub edytowany ręcznie. Licząc przecinki, aby znaleźć właściwe pole, wydaje się, że łatwiej byłoby stwierdzić, które z nich nie były separatorami pól, gdyby miały ucieczkę zamiast cytowania. Nie widzę jednak, jak to miałoby znaczenie z perspektywy analizowania. Po co cytować zamiast uciekać?


title: Pełna strategia indeksowania tekstu dla dokumentów MS Excel

text: ### Tło W ramach szerszej aplikacji, która pozwala użytkownikom przeszukiwać tysiące dokumentów MS Office w sieci prywatnej, muszę indeksować i tworzyć przeszukiwalne pliki Microsoft Excel. Moje podstawowe podejście do wszystkich typów dokumentów jest następujące: 1. Przechodź przez surowe katalogi, które otrzymałem, 2. Prześlij dokument do udziału sieciowego 3. Wyodrębnij z treści dokumentu jakiś tekst, który można przeszukiwać. 4. Utwórz nowy rekord MS SQL z nazwą dokumentu, adresem URL jego lokalizacji i przeszukiwalną zawartością. 5. Użyj indeksowania `Full Text` MS SQL w kolumnie „treść”, aby użytkownicy końcowi mogli wyszukiwać słowa kluczowe lub frazy za pomocą interfejsu użytkownika. ### Problem/Pytanie Nie jestem pewien, jakie jest najbardziej optymalne podejście do wyodrębniania tekstu z możliwością wyszukiwania z dokumentów programu Excel. Moją pierwszą myślą jest przechodzenie przez dokument w pętli: komórka po komórce i wyciąganie całego tekstu, a następnie łączenie tego tekstu razem w rekord SQL, ale wydaje się to złą strategią, ponieważ może być kilka komórek, które są dokładnymi duplikatami, komórki, które są tylko numeryczne i ogólnie inne rodzaje szumu. Czy istnieje ustalony wzorzec projektowy lub strategia dla przypadku? W przypadku braku tego, witam i doceniam wszelkie sugestie (podobnie jak przyszli użytkownicy Stack Exchange borykający się z tym samym problemem).


title: Czy jest to poprawne podejście do struktury projektowania OOP w php?

text: Konwertuję witrynę opartą na procedurach do projektu OOP, aby umożliwić łatwiejszy w zarządzaniu kod w przyszłości i do tej pory stworzyłem następującą strukturę: /classes /templates index.php Z tymi klasami: ConnectDB Games Użytkownik System -Moderator Użytkownik - Administrator W pliku index.php mam kod, który wykrywa, czy jakieś wartości `$_GET` są umieszczane w celu określenia, na której stronie skompilować zawartość (jest wcześnie, więc jest tylko jeden przykład i brak wartości domyślnej): function __autoload($className) { require "classes/".strtolower($className).".class.php"; } $db = nowy Połącz; $db->connect(); $użytkownik = nowy Użytkownik(); if(isset($_GET['gameId'])) { System::buildGame($gameId); } Następnie uruchamia funkcję BuildGame w klasie systemowej, która wygląda jak poniżej, a następnie używa gets w klasie Game do zwracania wartości, takich jak `$game->getTitle()` w pliku szablonu `template/play.php` : function buildGame($gameId){ $game = new Game($gameId); $game->setRatio(900, 600); wymagają 'templates/play.php'; } Mam również .htaccess, dzięki czemu rzeczywisty adres URL strony gry działa zamiast przekazywać parametry do index.php. Czy są jakieś poważne błędy związane z konfiguracją, czy też mam ogólną koncepcję OOP poprawną?


title: Rekonstrukcja drzewa z informacji o głębokości

text: Mam strukturę danych, która opisuje drzewo. Węzły są uporządkowane, z informacją o „głębokości”, a znając kolejność i głębokość można zrekonstruować drzewo. Nie jestem do końca pewien, jak to opisać, więc mam nadzieję, że ten mały przykład to zilustruje węzeł #1, głębokość 0 // rodzic: brak węzeł #2, głębokość 1 // rodzic: #1 węzeł #3, głębokość 1 // rodzic: #1 węzeł #4, głębokość 2 // rodzic: #3 węzeł #5, głębokość 1 // rodzic: #1 węzeł #6, głębokość 2 // rodzic: #5 (dodałem tam informacje o rodzicu dla wyjaśnienie.To nie jest część struktury danych.) Próbuję napisać algorytm (w JS, jeśli to jakaś pomoc), który będzie iterować po każdym węźle i budować drzewo z danych. Jestem dość rekurencja to droga, ale poza tym nie jestem pewien, od czego zacząć. Jakieś sugestie? Edycja: Z mojego punktu widzenia mam cztery przypadki: 1. Węzeł ma głębokość 0 (początkowy przypadek) 2. Węzeł ma taką samą głębokość jak poprzedni 3. Węzeł ma większą głębokość niż poprzedni (powinien być tylko previous.depth+1) 4 Węzeł ma mniejszą głębię niż poprzedni Oto mój dotychczasowy pseudo-kod JS: process (nodes, 0); process = function(nodes, i) { cur = nodes[i], prev = nodes[i-1] if cur.depth = 0 then cur.parent = null // case #1 else if cur.depth == poprz. depth then cur.parent = prev.parent // sprawa #2 inaczej if cur.depth > prev.depth then cur.parent = prev // sprawa #3 inaczej // sprawa #4... oto gdzie utknąłem. jeśli i <= nodes.length to proces (węzły, i+1) }


title: Jaka jest różnica/zaleta wykonywania podwójnego zadania?

text: Czy jest jakaś zaleta / czy to zła praktyka w Javie, aby wykonać poniższe x = x = 5 Widziałem to w kodzie jednego z moich kolegów i byłem zaskoczony, dlaczego robił podwójne przypisanie? Czy jest to coś, co jest tym samym, co `x = 5` lub czy `x = x= 5` robi różnicę?


title: Pokonaj niezdarność w pisaniu kodu

text: Myślę, że jest to trochę związane z pytaniem: Jak zostać programistą bez błędów?. Ale wierzę, że jest to bardziej związane z niezdarnością w programowaniu, ponieważ wiem, że nie można zostać programistą bez błędów. Często piszę bardzo błędny kod spowodowany moją własną niezdarnością. Na przykład w pisaniu funkcji przeliczania kursu walut, funkcji trywialnej. Mogę zakodować funkcję, która działa dobrze, mając poprawną wartość. Ale czasami po prostu zapomniałem potwierdzić kilka nieoczekiwanych, ale rozsądnych wartości. Czy jest więc jakiś sposób dla niezdarnego programisty, takiego jak ja, aby pisać i testować kod dokładniej? **Dodatkowe** Widzę wiele osób sugerujących pisanie testów jednostkowych lub stosowanie podejścia TDD. Ale pisanie testów jednostkowych nie zawsze idzie dobrze z powodu niezdarności, prawda? Nie robię tego, ponieważ kiedyś próbowałem napisać test jednostkowy, ale nadal często napotykam błędy.


title: Jakich technik powinienem użyć, wdrażając nieskończone przewijanie na stronie internetowej?

text: Obecnie pracuję nad witryną, która implementuje nieskończone przewijanie na swojej stronie wyszukiwania (same wyniki pochodzą z elastycznego wyszukiwania) i, co nie dziwi, im więcej przewijasz, tym wolniej się dzieje. Jest to szczególnie widoczne na urządzeniach mobilnych, a zwłaszcza na urządzeniach o niższych kosztach (z których korzysta większość ludzi). Włożyliśmy dużo pracy, aby strona była responsywna na urządzeniach mobilnych z perspektywy HTML/CSS, ale nieuchronnie, gdy dodajesz więcej elementów do DOM, wszystko zwalnia. Widzę, że serwisy takie jak Twitter i Facebook dobrze sobie radzą z unikaniem tego problemu, ale jak? Zgaduję, że jest to jakaś forma zbierania śmieci DOM, a elementy są ładowane nie tylko podczas przewijania w dół, ale także w górę, a elementy, których nie widać, są GC? Zwiększając złożoność, używamy biblioteki headroom.js, aby menu potrzebne do zmiany opcji wyszukiwania zawsze było dostępne, po prostu lekko przewijając w górę, i zauważamy, że ta akcja staje się wolniejsza i bardziej zakłócana, gdy przewijasz w dół i masz więcej wyszukiwania wyniki do przewijania. Każdy wynik wyszukiwania składa się nie tylko z tekstu, ale także z obrazu. Również wyniki wyszukiwania są odświeżane bez przeładowania strony, używamy do tego celu dwukierunkowego wiązania dostarczonego przez AngularJS (wypychanie wyników wyszukiwania i wysuwanie ich z tablicy, której ng-repeat używa do wypełnienia widoku), ale Podejrzewam, że z tym samym problemem borykają się użytkownicy innych bibliotek (np. Ember.js). Czy ktoś może wyjaśnić, jak powinniśmy do tego podejść? Mamy nieskończony aspekt przewijania (ładowanie większej liczby elementów do DOM podczas przewijania), ale na smartfonach z niższej półki rzeczy szybko spowalniają, więc zgaduję, że jest inny aspekt tego problemu, który przeoczyliśmy. Zakładam, że sztuczka polega na załadowaniu do DOM tylko elementów, które użytkownik może zobaczyć, zachowując pasek przewijania bez zmian i odpowiadając na zdarzenia przewijania, aby załadować elementy, które użytkownik spodziewał się zobaczyć, ale jak sobie z tym poradzić? Czy są dostępne do tego celu biblioteki? Dziękuję


title: Czy istnieje zalecana kolejność zdawania egzaminów certyfikacyjnych Oracle Java EE?

text: Niedawno zdałem egzamin Oracle Certified Professional, Java SE 6 Programmer. Teraz mój szef chciałby, abym zrobił „kolejny krok” w celu poszerzenia swoich kompetencji. Próbowałem wyjaśnić, że nie ma równoważnego egzaminu Java EE 6 Programmer, ale istnieje szereg różnych egzaminów, takich jak usługi sieciowe, komponenty sieciowe i Enterprise JavaBeans. Czy istnieje zalecana ścieżka, którą należy podążać w przypadku różnych certyfikatów Oracle w Enterprise Edition Java? Czy logiczne jest zdawanie niektórych egzaminów przed przystąpieniem do innych, ponieważ treść opiera się na wcześniejszej wiedzy, czy też wszystkie są niezależne?


title: Ile pytań należy zadać jako stażysta?

text: Właśnie rozpocząłem staż i martwię się, że zadaję zbyt wiele pytań. Mój mentor przydziela mi projekty i pomaga poznać wszystkie technologie i metodologie firmy. Jednak podczas realizacji tego projektu jest tak wiele nowego materiału do nauczenia się, że mam wiele pytań. Zazwyczaj zadaję pytania za pośrednictwem wiadomości błyskawicznych lub poczty e-mail (są to podstawowe sposoby komunikacji w mojej firmie). Staram się uważać, aby nie zadawać zbyt wielu pytań: nie chcę wychodzić jako irytujący lub głupi. Ile pytań należy zadać? Raz na godzinę? Więcej? Mniej? Pamiętaj, że mój mentor to także kolega programista, który ma swoje własne obowiązki.


title: Jak działa Jetbrain Phpstorm IDE bez zainstalowanej javy?

text: O ile wiem, Jetbrains PHPStorm jest zaprogramowany w Javie, ale chociaż nie mam zainstalowanej Javy na moim komputerze z systemem Windows 7, PHPstorm jest zainstalowany i działa bez żadnych problemów. Jak to jest zrobione?


title: Przewaga Solr nad innymi bazami danych?

text: O ile mi wiadomo, projekt Apache Solr Lucene to aplikacja internetowa, która służy do wyszukiwania tekstu sformatowanego. Chciałem tylko wiedzieć: * Dlaczego nie mogę używać MySQL do tego i tylko do wyszukiwania tekstu sformatowanego, dlaczego używamy Solr? * Kiedy wszystkie inne rzeczy można wykonać przy użyciu dowolnej bazy danych?


title: Wymóg funkcjonalny czy niefunkcjonalny?

text: Zastanawiam się nad wymaganiami funkcjonalnymi lub niefunkcjonalnymi. Znalazłem wiele różnych definicji tych terminów i nie mogę przypisać niektórych moich wymagań do odpowiedniej kategorii. Zastanawiam się nad wymaganiami, które nie są związane z jakąś akcją lub mają jakieś dodatkowe warunki, np.: 1. Na liście wybranych urządzeń urządzenie może się powtarzać. 2. Baza danych musi zawierać co najmniej 100 pozycji 3. Waluta o określonej wartości musi być wyrażona w dolarach amerykańskich. 4. Urządzenie musi mieć nazwę i wartość poboru mocy w watach. czy te wymagania są funkcjonalne czy niefunkcjonalne?


title: Koncepcje REST API

text: Mam trzy pytania dotyczące projektu REST API, na które mam nadzieję, że ktoś rzuci trochę światła. Szukałem bezlitośnie przez wiele godzin, ale nigdzie nie znalazłem odpowiedzi na moje pytania (może po prostu nie wiem, czego szukać?). **Pytanie 1** Moje pierwsze pytanie dotyczy działań/RPC. Od jakiegoś czasu zajmuję się tworzeniem REST API i jestem przyzwyczajony do myślenia w kategoriach kolekcji i zasobów. Jednak natknąłem się na kilka przypadków, w których paradygmat wydaje się nie mieć zastosowania i zastanawiam się, czy istnieje sposób na pogodzenie tego z paradygmatem REST. W szczególności mam przypadek, w którym modyfikacja zasobu powoduje wygenerowanie wiadomości e-mail. Jednak później użytkownik może wyraźnie wskazać, że chce ponownie wysłać wysłaną wcześniej wiadomość e-mail. Podczas ponownego wysyłania wiadomości e-mail żaden zasób nie jest modyfikowany. Żaden stan nie ulega zmianie. To po prostu czynność, która musi się wydarzyć. Akcja jest powiązana z określonym typem zasobu. Czy właściwe jest łączenie jakiegoś rodzaju wywołania akcji z identyfikatorem URI zasobu (np. `/collection/123?action=resendEmail`)? Czy lepiej byłoby określić akcję i przekazać do niej identyfikator zasobu (np. `/collection/resendEmail?id=123`)? Czy to zły sposób na to? Tradycyjnie (przynajmniej w przypadku HTTP) wykonywaną akcją jest metoda żądania (GET, POST, PUT, DELETE), ale tak naprawdę nie pozwalają one na niestandardowe akcje z zasobem. **Pytanie 2** Używam części adresu URL dotyczącej ciągu zapytania do filtrowania zestawu zasobów zwracanych podczas zapytania o kolekcję (np. `/collection?someField=someval`). W moim kontrolerze API określam następnie, jaki rodzaj porównania będzie robił z tym polem i wartością. Odkryłem, że to naprawdę nie działa. Potrzebuję sposobu, aby umożliwić użytkownikowi API określenie typu porównania, które chce wykonać. Najlepszym pomysłem, jaki do tej pory wpadłem, jest umożliwienie użytkownikowi API określenia go jako dodatku do nazwy pola (np. `/collection?someField:gte=someval` \- w celu wskazania, że powinien zwracać zasoby, gdzie ` someField` jest większa lub równa (>=) bez względu na wartość „someval”. Czy to dobry pomysł? Zły pomysł? Jeśli tak, dlaczego? Czy istnieje lepszy sposób, aby umożliwić użytkownikowi określenie typu porównania do wykonania z podanym polem i wartością? **Pytanie 3** Często widzę identyfikatory URI, które wyglądają jak „/osoba/123/psy”, aby uzyskać „psy”. koniec Doszedłem do wniosku, że tworząc taki identyfikator URI, w rzeczywistości uzyskujesz dostęp do kolekcji `psów` przefiltrowanej według konkretnego identyfikatora `osoby`. Byłoby to równoważne `/dogs?person=123`. Czy jest naprawdę dobry powód aby identyfikator URI REST miał więcej niż dwa poziomy głębokości (`/collection/resource_id`)?


title: Jak programować pod kątem ograniczeń/reguł

text: Najpierw w tle, podczas wywiadów w przeszłości wielokrotnie proszono mnie o zaprojektowanie jakiejś odmiany gry karcianej jako układanki programistycznej i próbowałem zaprojektować ją w sposób OO, ale nigdy nie byłem zadowolony z moich rozwiązań. Jednak dopiero niedawno zdałem sobie sprawę, że podchodzę do problemu z niewłaściwej strony. Konkretnie próbowałem rozwiązać problem modelując pojedynczą kartę jako obiekt. Problem z tym polega na tym, że poszczególne karty nie mają żadnego nietrywialnego wewnętrznego zachowania i dlatego nie są odpowiednimi (lub podstawowymi) kandydatami na obiekty. Ciekawe i ważne w przypadku kart są zasady i ograniczenia, na przykład w każdym kolorze mogą być tylko cztery lub tylko trzynaście kart. Oczywiście istnieje wiele reguł dotyczących gier. Więc moje pytania to 1. Czy są jakieś idiomy/konstrukcje/wzorce do zaprogramowania dla reguł i ograniczeń. 2. Ile w 1 można zastosować w połączeniu z paradygmatem OO.


title: Przepisywanie kodu na licencji BSD

text: Obecnie studiuję OpengGL z OpenGL Supebible 5. edycja. Zainteresował mnie kod C++, który jest rozprowadzany wraz z książką (zobacz też na google code). Ten kod jest objęty Nową Licencją BSD. Piszę swoje oprogramowanie w C# z wrapperem SharpGL i chciałbym wiedzieć następujące rzeczy: 1. Czy mogę przepisać ten C++ do C#? **edid:** Interesuje mnie używanie takich rzeczy jak GLBatch, GLShaderManager i inne rzeczy z GLTools. Problem polega na tym, że biblioteka jest na C++, ale używam C#. 2. Jak mam oznaczyć swój kod źródłowy, jeśli umieściłem go gdzieś na moim koncie github? 3. Jakie powinno być wyłączenie odpowiedzialności? Oryginalna informacja o wyłączeniu odpowiedzialności wygląda następująco: /* GLShaderManager.h Copyright (c) 2009, Richard S. Wright Jr. Wszelkie prawa zastrzeżone. Redystrybucja i używanie w formie źródłowej i binarnej, z modyfikacją lub bez, jest dozwolone pod warunkiem, że spełnione są następujące warunki: Redystrybucja kodu źródłowego musi zawierać powyższą informację o prawach autorskich, tę listę warunków i następujące zastrzeżenie. Redystrybucje w formie binarnej muszą zawierać powyższą informację o prawach autorskich, tę listę warunków oraz następujące zastrzeżenie w dokumentacji i/lub innych materiałach dostarczonych z dystrybucją. Ani nazwisko Richarda S. Wrighta Jr., ani nazwiska innych współtwórców nie mogą być używane do promowania lub promowania produktów wywodzących się z tego oprogramowania bez uprzedniej pisemnej zgody. NINIEJSZE OPROGRAMOWANIE JEST DOSTARCZANE PRZEZ WŁAŚCICIELI PRAW AUTORSKICH I WSPÓŁCZYNNIKÓW „TAK JAK JEST” ORAZ WYŁĄCZA SIĘ WSZELKIE WYRAŹNE LUB DOROZUMIANE GWARANCJE, W TYM MIĘDZY INNYMI DOROZUMIANE GWARANCJE PRZYDATNOŚCI HANDLOWEJ I PRZYDATNOŚCI DO OKREŚLONEGO CELU. W ŻADNYM WYPADKU WŁAŚCICIEL PRAW AUTORSKICH LUB WŁAŚCICIELE NIE PONOSZĄ ODPOWIEDZIALNOŚCI ZA JAKIEKOLWIEK BEZPOŚREDNIE, POŚREDNIE, PRZYPADKOWE, SZCZEGÓLNE, PRZYKŁADOWE LUB WTÓRNE SZKODY (W TYM MIĘDZY INNYMI ZAKUP TOWARÓW LUB USŁUG ZAMIENNYCH; UTRATĘ KORZYSTANIA, DANYCH LUB USŁUG LUB PRZERWY W DZIAŁALNOŚCI) JEDNAK SPOWODOWANE I NA DOWOLNEJ TEORII ODPOWIEDZIALNOŚCI UMOWNEJ, ŚCISŁEJ LUB CZYNNEJ (W TYM ZANIEDBANIA LUB INNEGO) WYNIKAJĄCE Z KORZYSTANIA Z TEGO OPROGRAMOWANIA, NAWET JEŚLI JEST WSKAZANE. */ **Edytuj:** Czy moje prawa autorskie powinny wyglądać po przepisaniu czegoś takiego? Copyright (c) 2014, My Name Copyright (c) 2009, Richard S. Wright Jr. Wszelkie prawa zastrzeżone. Redystrybucja...................


title: Komercyjne wykorzystanie systemu wbudowanego

text: Rozwijam system wbudowany (komputer + system + programy) do sprzedaży firmie. Jestem zdezorientowany co do licencji i oprogramowania, którego chciałem użyć do opracowania systemu. Więc chcę wiedzieć, czy mogę korzystać z tych programów bezpłatnie i bez rozpowszechniania kodu źródłowego do użytku komercyjnego. Chciałem użyć: * Linuksa dystrybucja custom linux build: myślałem, że Arch Linux * Web Server + PHP + MySQL: myślałem, że XAMMP, mówią, że jest darmowy do użytku komercyjnego, ale nie wiem, czy komponenty również. * Backend i frontend QT, ale nie wiem, czy mogę używać wersji LGPL do użytku komercyjnego, czy muszę korzystać z licencji komercyjnej. * jQuery (widziałem, że jeśli utrzymam ogłoszenie, mogę z niego skorzystać) Dziękuję za odpowiedź


title: Zapobiegaj kopiowaniu modelu 3D

text: Więc bawiłem się z Thingiview, odkąd chciałem mieć przeglądarkę 3D dla modeli na mojej stronie. Działa świetnie i wszystko oprócz jednego problemu. To nic złego w Thingiview, to fakt, że skoro model jest ładowany do przeglądarki, oznacza to, że model można również skopiować. Więc moje pytanie brzmi, czy istnieje sposób, aby zapobiec swobodnemu kopiowaniu pliku modelu 3D, który jest ładowany do Thingiview, który używa three.js. Jedynym pomysłem, jaki mogę wymyślić, jest zabezpieczenie przed kopiowaniem, to wygenerowanie migawek, a następnie użytkownik może je po prostu przeglądać, ale to jest do bani w porównaniu z możliwością rzeczywistego wyświetlenia pliku. Więc jakieś pomysły?


title: Do jakiej dyscypliny należy informatyka?

text: Czy informatyka, matematyka stosowana, inżynieria, sztuka, filozofia? "Inny"? Aby zapewnić tło, oto wpis na blogu Stevena Wartika dla Scientific American zatytułowany „Nie jestem prawdziwym naukowcem i to jest w porządku”. Artykuł obejmuje kilka dobrych tematów na to pytanie, ale pozostawia więcej otwartych niż odpowiedzi. **Jeśli możesz pomyśleć o tej dyscyplinie, jak informatyka pasowałaby do jej definicji?** Czy dyscyplina informatyki powinna być oparta na tym, co robią _programiści_, czy na tym, co robią _naukowcy_? Jakie odpowiedzi otrzymujesz od ludzi, którzy wydawali się głęboko nad tym zastanawiać? Jakie podają powody?


title: Algorytm procentowy bez znajomości całkowitej liczby

text: Załóżmy, że istnieje `n` linii na infolinię. Za każdym razem, gdy klient dzwoni na infolinię, połączenie jest przekazywane na jedną z linii `n`. I chcę przypisać procent połączeń do każdej z n linii. Załóżmy, że są dwie linie i jedna linia ma przydzielone 60%, a druga 40%, całkowita liczba połączeń wynosi 10, więc pierwsza linia otrzyma 6 połączeń, a druga 4 połączenia. Znam z góry procent połączeń na każdą linię, ale problem polega na tym, że nie znam liczby połączeń, które zostałyby odebrane w ciągu dnia. **Jak mogę rozdzielić liczbę połączeń bez znajomości łącznej liczby połączeń?**


title: Opracowujesz funkcję, której jedynym celem jest usunięcie?

text: Jak nazywa się wzorzec, w którym poszczególni współtwórcy (programiści/projektanci) opracowali artefakt wyłącznie w celu odwrócenia uwagi, aby **_zarządzanie mogło usunąć tę cechę w produkcie końcowym_**? To folklor, który usłyszałem od byłego kolegi, który pracował w dużej firmie zajmującej się tworzeniem gier. W tej firmie dobrze wiadomo, że kierownictwo średniego szczebla jest zmuszane do „wnoszenia wkładu” i „wprowadzania zmian” w produkcie, w przeciwnym razie istnieje ryzyko, że zostanie postrzegane jako niewnoszące wkładu w projekt. Ta sytuacja opóźniła wiele projektów z powodu tych zbędnych „wkładów kierownictwa”. W jednym projekcie w powyższej firmie artyści i programiści stworzyli nadliczbową animowaną postać, która pojawia się w każdej przerywniku filmowym i wystaje jak obolały kciuk. Zaprojektowali go w taki sposób, aby można go było łatwo usunąć przed wysłaniem gry (było to wtedy, gdy gry były nadal sprzedawane na nośnikach fizycznych, a nie jako produkt do pobrania). Oczywiście kierownictwo głosowało następnie za usunięciem animacji. Pozytywne jest to, że _kierownictwo nie wprowadziło żadnych niepotrzebnych zmian, które opóźniłyby projekt_, ponieważ pokazały, że wniosły konstruktywny wkład do produktu. Ten **_wzorzec procesu_** ma swoją nazwę wśród programistów gier pracujących w korporacjach, ale zapomniałem, jaka była prawdziwa nazwa. Myślę, że to kaczka- _coś_. Ktoś może pomóc wskazać nazwę i być może jakieś dość wiarygodne odniesienie do tego, jak rozwija się wzór?.


Czy istnieje znana standardowa struktura danych, która jest tabelą mieszającą, która rozwiązuje kolizje przy użyciu drzewa binarnego? Jeśli tak, jak nazywa się ta struktura danych? Wyobrażam sobie, że taka struktura byłaby przydatna, ponieważ powinna skrócić czas wyszukiwania najgorszego przypadku do O(log(n)) w porównaniu do O(n) w tablicy mieszającej, a najlepszym przypadkiem nadal będzie O(1).


title: Dlaczego potrzebujemy identyfikatorów URI dla przestrzeni nazw XML?

text: Próbuję dowiedzieć się, dlaczego potrzebujemy identyfikatorów URI dla przestrzeni nazw XML i nie mogę znaleźć dla tego celu. Czy ktoś może mnie nieco rozjaśnić pokazując ich zastosowanie na konkretnym przykładzie? **EDYTUJ:** Ok, więc na przykład: mam to z w3schools <root xmlns:h="http://www.w3.org/TR/html4/" xmlns:f="http://www.w3schools .com/furniture"> <h:table> <h:tr> <h:td>Jabłka</h:td> <h:td>Banany</h:td> </h:tr> </h: table> <f:table> <f:name>Afrykański Stolik Kawowy</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table > </root> Więc co powinien zawierać `http://www.w3schools.com/furniture`?


title: Diagram klas UML - czy zagregowany obiekt może być częścią dwóch zagregowanych klas?

text: Niektóre źródła podają, że agregacja oznacza, że klasa jest właścicielem obiektu i udostępnia referencję. Załóżmy przykład, w którym klasa firmy posiada listę samochodów, ale działy tej firmy mają listę używanych przez siebie samochodów. class Department { lista<Samochód> listOfCars; } class Firma { lista<Samochód> listOfCars; //inicjalizacja listy } Czyli na diagramie klas UML zrobiłbym to w ten sposób. Ale zakładam, że jest to niedozwolone, ponieważ oznaczałoby to, że zarówno firma, jak i dział są właścicielami obiektów. [FIRMA]<>------[SAMOCHÓD] [DZIAŁ]<>---| //wyobraź sobie, że to idzie do klasy samochodu


title: Czy w tym przypadku dobrym pomysłem jest zachowanie obiektów pośrednich jako pól składowych?

text: Obecnie piszę serię zajęć w javie, które mają na celu przetłumaczenie wyrażenia regularnego (napisanego z definicją formalną, a nie skrótami specyficznymi dla języka) na deterministyczny automat skończony. Aby utworzyć DFA, najpierw konwertuje wyrażenie regularne na przyrostek, potem na drzewo składni, potem na NFA, a na końcu na DFA, który jest następnie minimalizowany. Czy powinienem zachować odniesienie do każdego obiektu pośredniczącego jako członka obiektu, do którego został użyty? np. Odwołanie do drzewa składni w NAS i odwołanie do NAS w DFA? Nie są publicznie dostępne, więc czy po prostu niepotrzebnie rozsadzają zajęcia i program?


title: Ilościowe określenie zalet nowoczesnego systemu kontroli wersji

text: Pracowałem jako kierownik zespołu/programista w środowisku dużego przedsiębiorstwa finansowego przez prawie trzy lata. Nasz proces wydawania produkcji to koszmar, ponieważ kręci się wokół Clearcase. Mamy grupę zarządzania zmianami, która wykonuje wszystkie wydania i zezwala na produkcję tylko kodu, który został z niego pobrany. Jedną z pierwszych rzeczy, które zrobiłem, kiedy dołączyłem, było utworzenie mojego zespołu z Git. Wszyscy zgodzili się, że Clearcase jest okropny i niepraktyczny w załatwianiu codziennych spraw związanych z kontrolą źródła. Więc ustawiliśmy coś w rodzaju „nieoficjalnego” repozytorium na moim lokalnym komputerze i napisałem skrypt do synchronizacji naszych repozytoriów git i Clearcase w okolicach czasu wydania. Wieść o tym rozeszła się po innych zespołach i kilka przyjęło ten sam proces. Używanie git w „nieoficjalny” sposób do codziennych czynności i „oficjalnie” używanie Clearcase do wydań. Stałem się kimś w rodzaju faceta w przypadku jakichkolwiek problemów z Gitem. Dlatego w tym tygodniu mam spotkanie z SVP w sprawie zmiany infrastruktury, która konkretnie chce, abym wyjaśnił jej zalety Gita. Najwyraźniej dotarły do niej wieści o moich częstych narzekaniach na Clearcase. Jeśli przyjmie moje argumenty, będę miał prawdziwą szansę pomóc mojemu pracodawcy pozbyć się tej obrzydliwości. Moje doświadczenie z kadrą kierowniczą mówi mi, że a) chcą bardzo zwięzłych wyjaśnień na wszystko b) interesują się tylko faktami, które dotyczą liczb w dolarach. Programiście mogę wyjaśnić zalety Git przez Clearcase (lub JAKIKOLWIEK inny system kontroli wersji przez Clearcase w tym przypadku ), ale nie wiem, jak to zrobić kierownikowi technicznemu bez wykształcenia technicznego (ma dyplom MBA i zrobiła licencjat z geografii). Czuję, że każdy argument, który jej podnoszę, będzie albo brzmiał jak techniczny bełkot, albo że ewangelizuję swoje osobiste preferencje. To, co staram się znaleźć, to konkretne fakty, które pokazują, że programiści efektywniej pracują z Git lub DOWOLNYM nowoczesnym systemem kontroli źródła. Myślę, że fakt, że inne zespoły zaczęły używać Git wewnętrznie, jest znaczącym znakiem, ale wciąż nie jest wystarczająco silny, ponieważ nadal można go odrzucić jako osobiste preferencje. To, czego naprawdę potrzebuję, to coś wystarczająco potężnego, aby przebić się przez „Ten proces działał przez 20 lat, dlaczego mielibyśmy go zmieniać?” argument.


title: Czy są obszary, w których TDD zapewnia wysoki ROI i inne obszary, w których ROI jest tak niski, że nie warto go śledzić?

text: Rozwój oparty na testach. Rozumiem, lubię to. Ale pisanie testów wymaga narzutu. Tak więc TDD powinno być używane powszechnie w całym kodzie, czy też istnieją obszary, w których TDD zapewnia wysoki zwrot z inwestycji oraz inne obszary, w których zwrot z inwestycji jest tak niski, że nie warto go śledzić.


title: Czy znasz jakieś badania dotyczące relacji produktywności programisty i używanej stacji roboczej?

text: Zastanawiałem się, czy są jakieś badania (formalne lub mniej formalne), które pokazują korelację między produktywnością programisty a stacją roboczą używaną do tworzenia oprogramowania. Często słyszy się jako argument, że stacje robocze o wysokiej specyfikacji zwiększają produktywność (lub maszyny o niskich specyfikacjach mają większy wpływ na produktywność). Dla mnie brzmi to rozsądnie, jednak chciałbym zweryfikować to stwierdzenie z pewnymi badaniami, jeśli takie istnieją. Czy możesz mi z tym pomóc?


title: Jakiego procesu używa typowy (większość) kompilatorów języka wysokiego poziomu podczas zmiany nazwy zmiennej kodu źródłowego na nazwę kodu maszynowego?

text: Czy długie (bardzo długie) nazwy zmiennych spowalniają kompilację kodu źródłowego? Zdaję sobie sprawę, że długość zmiennych ma 0% wpływu na interpretację, ponieważ kompilator zamienia je na kod maszynowy, który jest zawsze tej samej długości. Ale moje pytanie brzmi, czy szybkość, z jaką kompilator różni się w zależności od długości zmiennych? Na przykład, jeśli mam nazwę zmiennej, która ma milion znaków, z pewnością kompilator miałby problemy z rozpoznaniem zmiennej **jest** zmienną, musiałby najpierw przeczytać całą rzecz, co z pewnością zajęłoby więcej czasu w zależności od jego wielkości? Aby wyjaśnić, jaki proces jest używany w typowym (większości) kompilatorach języka wysokiego poziomu podczas zmiany nazwy zmiennej kodu źródłowego na nazwę kodu maszynowego? Czy odnajdują początek zmiennej działającej od lewej, a potem odnajdują koniec działający od prawej, czy czytają całą nazwę zmiennej (po jednym znaku naraz) aż do znalezienia końca, czy nawet nie patrzą na nazwa zmiennej w ogóle i po prostu wiesz, że kod wymaga zmiennej typu int (na przykład) i natychmiast przypisz jej nazwę na poziomie maszyny, a następnie całkowicie zignoruj wszelkie nazwy zmiennych zdefiniowane przez użytkownika? Zauważ, że jestem kompletnym nowicjuszem (nadal studentem), więc wybacz moją ignorancję, jeśli pomylą mi terminy.


title: Jak zmotywować zespół do sesji dzielenia się wiedzą

text: Pracuję w zespole posiadającym szeroką wiedzę i doświadczenie. Staram się wprowadzać cotygodniowe sesje dzielenia się wiedzą. Sesje o długości 30-60 minut, podczas których każdy ma szansę coś zaprezentować i o tym porozmawiać. Przyczyni się to do poprawy umiejętności prezentacyjnych i językowych. Jednak zespół nie jest do tego zmotywowany, albo frekwencja jest zbyt niska, albo żadna. Jak sprawić, by zespół pracował nad takim pomysłem?


title: Diagram sekwencji powinien składać się z obiektów View, obiektów DB itp.?

text: Przeczytałem wiele artykułów, widziałem dużo obrazków i nie potrafię odpowiedzieć na pytanie, czy obiekty klas View czy klasy DB powinny być zawarte na diagramie sekwencji, czy też powinny być bardziej uogólnione?


title: Czy powinienem utworzyć klasę wewnętrzną tutaj, czy wyjść tak, jak jest?

text: Ludzie, mam dwie oddzielne klasy. Jeden z nich wykonuje żądania/odbiera odpowiedzi http do/z serwera, a drugi konwertuje otrzymane obiekty JSON na moje modele (osobne klasy). Myślę, że pomysłem byłoby dołączenie tej klasy do konwersji danych jako klasy wewnętrznej mojej pierwszej klasy. Czy moja pierwsza klasa nie byłaby z tego powodu bardzo duża i muszę zostawić wszystko tak, jak jest, czy też jest to dobra powszechna praktyka, aby się tak zachowywać?


title: Gdzie są redaktorzy nowej generacji?

text: Czytałem stary artykuł Coding Horror o wcięciach, kiedy to przeczytałem: > A może używasz edytora nowej generacji, który traktuje kod jako > „dane”, a układ (w tym białe znaki) jako „widok” ", co sprawia, że > wszystkie te obawy są w dużej mierze nieistotne. Do jakich dokładnie redaktorów nowej generacji odnosił się Jeff Atwood?


title: W jaki sposób przed objęciem stanowiska można ustalić jakość kodeksu potencjalnego pracodawcy?

text: Z mojego doświadczenia wynika, że przed rozpoczęciem pracy w firmie nie ma się możliwości spojrzenia na bazę kodów (prosiłem i ze względu na poufność wszyscy zawsze odmawiali, myślę, że to sprawiedliwe), więc podczas rozmowy kwalifikacyjnej co Czy uważasz, że są to najważniejsze pytania, które należy zadać, aby dowiedzieć się, w jakim stanie jest kod (w końcu, jeśli to pies, to będziesz jednym z biednych nieszczęśników, którzy muszą go codziennie chodzić)? **AKTUALIZACJA:** Lista kontrolna: Zapytaj; * Co _oni_ myślą o bazie kodu. A kiedy to zrobisz, zwróć szczególną uwagę na mimikę i czas potrzebny na reakcję. [Anon] * Jaki jest poziom CMM firmy [DPD] (i jeśli usłyszysz Poziom 5, uruchom w drugą stronę [Doug T]) * Z jakiego cyklu życia korzystają [DPD] (A jeśli usłyszysz „Agile”, to wtedy zadaj kilka wnikliwych pytań, aby spróbować dowiedzieć się, czy przez „zwinność” mają na myśli „zwinne czy „kodowanie kowbojskie” [Carson63000]) * Jakich narzędzi używają do oceny jakości kodu? [DPD] * Jakich narzędzi używają do programowania? [ DPD] (Poszukaj narzędzi do refaktoryzacji i serwerów do ciągłego budowania) * Jakiego systemu kodu źródłowego (kontroli wersji) używają i dobrym następstwem jest pytanie, dlaczego go używają.[Zachary K] * Jakie są ich procedury testowe? [Karl Bielefeldt] (Szczególnie zwracaj uwagę na zespoły, które używają frameworków mockingowych i kładą nacisk na dokładne zautomatyzowane testowanie jednostkowe za pomocą ustalonych frameworków, takich jak NUnit / JUnit; nie zniechęcaj się zespołami, które nie używają TDD do programowania sterowanego testami, ale bądź uważaj, jeśli nie uważają, że testowanie jest integralną częścią i podstawą solidnego tworzenia oprogramowania ams z dedykowanymi testerami.) * Jakie zadania są przydzielane nowym programistom? Do doświadczonych programistów? [Karl Bielefeldt] * Ile osób pracuje nad projektem? [Karl Bielefeldt] * Czy refaktoryzacja jest dozwolona? Zachęcał? [Karl Bielefeldt] * Jakie zmiany procesu lub architektury związane z jakością są rozważane lub zostały ostatnio wprowadzone? [Karl Bielefeldt] * Jak dużą autonomię mają jednostki nad swoimi modułami? [Karl Bielefeldt] * Czy będziesz rozwijać nowsze projekty (rozwój greenfield) czy projekty starsze (rozwój terenów zdegradowanych)? (Rozwój greenfield jest generalnie fajniejszy i ma mniej problemów, ponieważ nie usuwasz błędów innych osób). * Czy rotacja pracowników jest wysoka w organizacji lub zespole? (To często oznacza niższą jakość kodu) [M.Sameer] * Niektóre własne problemy programistyczne; ale unikaj wydawania się palantem. [Sparky] * Jak współpracują programiści i jak wiedza jest dzielona między zespołem? (Powinno to pasować do twojej osobowości; powiedziałbym, że połączenie pracy solo i w parach jest prawdopodobnie najlepsze, ze stosunkiem odpowiadającym twoim potrzebom społecznym) * Jak blisko ich bazy danych jest trzecia forma normalna (3NF) i czy odbiega, gdzie i dlaczego ? (Jeśli powiedzą "3NF???", odejdź. Jeśli nie, a mogą być ku temu dobre powody, dowiedz się, jakie one są). **UWAGA:** Zaakceptowałem odpowiedź Anon, ponieważ po około tygodniu społeczność uważa, że jest najlepsza – myślę, że sugeruje to, że jest to po prostu coś, do czego trzeba jakoś wypracować szósty zmysł. Ale myślę, że każdy miał coś wartościowego do powiedzenia.


title: Jak działa praca jako freelancer?

text: Chcę znaleźć pracę jako freelancer, ale nigdy wcześniej nie pracowałem jako freelancer. Chcę wiedzieć, na czym polega ten proces. Czy możesz odpowiedzieć na poniższe pytania? 1. Jeśli programista znajdzie odpowiednią pracę jako freelancer, w jaki sposób może aplikować i jak przyszły pracodawca oceni jego umiejętności? 2. Jak programista wykonuje swoją pracę? 3. Jak programista otrzymuje pieniądze? Co jeśli pracodawca i pracownik znajdują się w różnych krajach? Jak płacą? 4. Czy naprawdę czytasz umowę, podpisując konto w serwisie freelancera? 5. Jakieś pułapki? W jakich okolicznościach pracodawca nie zapłaci po wykonaniu pracy?


title: Przetwarzanie Multi MVC a pojedynczy proces MVC

text: Pracowałem dość intensywnie z cakephp frameworkiem MVC, jednak stwierdzam, że wolałbym, aby moje strony były kierowane przez wiele MVC niż tylko przez jeden MVC. Moim powodem jest przede wszystkim zachowanie zasady bardziej SUCHEJ. W CakePHP MVC: wywołujesz adres URL, który wywołuje pojedynczy MVC, który następnie wywołuje układ. To, czego chcę, to: wywołujesz adres URL, przetwarza on układ, który następnie wywołuje wiele MVC na komponent/blok html na stronie. Kiedy porównujesz komponenty JavaScript, AJAX i renderowanie HTML po stronie serwera, wydaje się, że najbardziej spójną metodą tworzenia stron jest używanie bloków komponentów lub widoków HTML. W ten sposób blok widoku może znajdować się na serwerze lub kliencie. Technicznie jest to JEDYNA moja niezgoda z modelem MVC. Poza tym IMHO MVC rządzi! Moje pytanie brzmi: Jakie inne frameworki RAD są zgodne z tymi samymi zasadami co MVC, ale są napędzane raczej przez stronę View MVC? Przyjrzałem się Django i Ruby on Rails, ale wydaje się, że są one bardziej oparte na kontrolerach. Lift/Scala wydaje się być w pewnym stopniu dobrze dopasowana, ale jestem zainteresowany, aby zobaczyć, jakie istnieją inne.


title: Edukacja a doświadczenie

text: Przechodzę ciężki okres. Jestem studentem CS na UIUC, który, jak słyszałem, jest jedną z najlepszych szkół CS. Kocham komputery i programowanie. Robię to przez całe życie. Jestem teraz na pierwszym roku (właściwie to junior, ale byłem wcześniakiem, zanim przerzuciłem się na historię z CS). Uważam, że krążenie jest dość trudne i wymagające, ale oczywiście w ten sposób wiele się nauczysz. Ze względu na wymagający charakter tego programu, zwłaszcza w tej szkole, nie zawsze uzyskuję najlepsze wyniki, podczas gdy inni wydają się nie mieć problemu. Szybko się zniechęcam i mówię sobie coś w stylu „cokolwiek, wiem, nawet jeśli nie skończę tego programu, znajdę sposób, żeby to zrobić sam”. Oczywiście mówię to tylko po to, by poczuć się lepiej w swojej sytuacji. Ale naprawdę chcę tutaj skończyć i zdobyć ten dyplom, ale z dnia na dzień tracę coraz więcej motywacji. Dla tych z Was, którzy ukończyli studia CS, jakieś wskazówki, jak przez to przejść? Ponadto, jakie są zalety dyplomu CS? Słyszałem, że nie wykorzystam nawet połowy rzeczy, których się tutaj uczę. Dlaczego nie mogę po prostu uczyć się programowania na własną rękę, czytając książki. Większość firm kocha doświadczenie. Do czego to sprowadza się na końcu? Oczywiście bardzo bym chciał mieć ten dyplom, ale przejście przez to będzie wyzwaniem.


title: Jesteśmy maniakami Subversion i chcemy poznać zalety Mercurial

text: Po przeczytaniu jestem maniakiem Subversion, dlaczego miałbym brać pod uwagę Mercurial, Git lub jakikolwiek inny DVCS. Mam powiązane pytanie uzupełniające. Przeczytałem to pytanie i przeczytałem polecane linki i filmy i widzę korzyści, ale nie widzę ogólnej zmiany myślenia, o której mówią ludzie. Nasz zespół składa się z 8-10 programistów, którzy pracują na jednej dużej bazie kodu składającej się z 60 projektów. Używamy Subversion i mamy główny bagażnik. Kiedy programista rozpoczyna nową sprawę Fogbugz, tworzy gałąź svn, wykonuje pracę na gałęzi, a kiedy skończą, łączy się z powrotem do trunka. Czasami mogą pozostać na gałęzi przez dłuższy czas i łączyć pień z gałęzią, aby uwzględnić zmiany. Kiedy obserwowałem Linusa mówiącego o ludziach tworzących oddział i nigdy więcej tego nie robiących, to wcale nie my. Tworzymy prawdopodobnie 50-100 oddziałów tygodniowo bez problemu. Największym wyzwaniem jest łączenie, ale w tym też staliśmy się całkiem dobrzy. Zwykle łączę się przez przypadek i checkin fogbugz, a nie przez cały korzeń gałęzi. Nigdy nie pracujemy zdalnie i nigdy nie tworzymy gałęzi z oddziałów. Jeśli tylko ty pracujesz w tej sekcji bazy kodu, łączenie z magistralą przebiega gładko. Jeśli ktoś inny zmodyfikował tę samą sekcję kodu, scalanie może być bałaganiarskie i może być konieczne wykonanie operacji. Konflikty to konflikty, nie widzę, jak jakikolwiek system mógłby to zrobić w większości przypadków, chyba że byłby wystarczająco sprytny, aby zrozumieć kod. Po utworzeniu oddziału następujące pobranie ponad 60 000 plików zajmuje trochę czasu, ale byłby to problem z dowolnym systemem kontroli źródła, którego używamy. Czy jest jakaś korzyść z DVCS, której nie widzimy, a która byłaby dla nas bardzo pomocna?


title: Pytania, które należy zadać, aby upewnić się, że ktoś rozumie programowanie? (i iOS)

text: Tak więc udzielam korepetycji mojej koleżance od 2 lat. Większość ludzi uczy się programowania samodzielnie w ciągu 3-6 miesięcy (bez algorytmów). To mylące, bo biega wszędzie, gdzie mu powiem, rozumie, jak czytać C i C++ szczerze lepiej niż przeciętny student, i modyfikuje i powtarza wszystko, co robię... ale na miłość boską tak nie przechodzić do nowych rzeczy, a on nadal ma lęk przed testem. Niedawno zdałem sobie sprawę, że kopiował i bawił się istniejącym, ale ani razu nie zrozumiał dlaczego. Miałem wrażenie, że szybko się uczył, bo potrafił to napisać, ale kiedy mówisz „Utwórz funkcję, która pobiera ciąg NSString”, a on mówi „Jak?” i mówię "W ten sam sposób, w jaki tworzysz KAŻDĄ funkcję, która przyjmuje dowolny parametr, NSString jest po prostu typem takim jak int" i słyszę tylko: "Nie, to jest NSString, to szczególna rzecz". i zaczynamy się kłócić, bo mówię: „To po prostu zajęcia, jak każda inna klasa, używałeś ich od miesięcy” i bla… Podświadomie unikałem z tego powodu pytań ze zrozumieniem. W każdym razie, jeśli każesz mu skopiować program i powiedzieć „Po prostu zainicjuj” „Gdzie?” „Nie obchodzi mnie to, didLoad lub initWithCoder lub Awake z końcówki, gdziekolwiek zostanie zainicjowany” i „Nie, musi być dokładnie tam, gdzie go miałeś!” "Nie, nie ma!" Mam tego dość, ale on się nie podda. Więc skończyłem z unikaniem tych wrzasków i od teraz zostaję sadystą. Potrzebuję pomocy w znalezieniu pytań, które zmuszają go do zrozumienia tego, co robi. Potrzebuję pomocy i wszelkich zasobów, które mogę znaleźć. CQuestions wyglądało na dobrą stronę, ale teraz potrzebuję trochę rzeczy dla iPhone'a. Na przykład: *Co robią nieruchomości? Jak się zmieniają? Jak zmienić nazwę pobierającego? *Dlaczego wartości logiczne są nieefektywne? Jaką przewagę ma int nad wartością logiczną i jak pomaga operator przesunięcia bitowego? *Co kopia robi z ciągiem? *Jaka jest różnica między kontrolerem widoku a interfejsem użytkownika? * Napisz program z pamięci, który wyświetla blah na ekranie i miga każdy widok jeden po drugim. Od początkującego do średniozaawansowanego, hobbysty z co najwyżej algebrą. Szukam tylko zasobów do pracy. Zostawiłem w backstory, abyś wiedział, jak „przekręcić” pytania, aby nie wiedział, że ma zainicjować zmienną tu lub tam, ale musi to rozgryźć i dowiedzieć się, dlaczego idzie „tu” lub że „wszędzie jest w porządku tak długo, jak jest". Przykładowe programy, cokolwiek. Jestem stosunkowo otwarty na ten temat, ponieważ jako programista poważnie wątpię, że jest jedynym, który ma ten problem. Chciałbym wiedzieć, jak inni przezwyciężyli podobne. Co sprawiło, że rzeczy „kliknęły”? dla Was? Czy miałeś trudności ze znalezieniem odpowiedzi w Google i jak nauczyłeś się lepszego sposobu znajdowania tego, czego szukasz? (Jest tak dokładny, że będzie szukał, jak napisać program w warcaby z kolorami X i Y w interfejsie użytkownika, jako jego ciąg wyszukiwania, zamiast dzielić go na komponenty, ja też potrzebuję pomocy i wierzę, że jest to powiązane ). Ten rodzaj problemu musi przypominać komuś z nas kogoś, kogo zna. A więc Ćwiczenia, aby zmusić ich do myślenia? Jak przezwyciężyliśmy to w przeszłości? Bardzo doceniam każdą pomoc.


title: Co robisz, gdy klient wymaga edycji tekstu sformatowanego na swojej stronie internetowej?

text: Jak wszyscy wiemy, ataki XSS są niebezpieczne i naprawdę łatwe do wykonania. Różne struktury ułatwiają kodowanie HTML, tak jak robi to ASP.NET MVC: > `<%= Html.Encode("string"); %>` Ale co się dzieje, gdy klient wymaga, aby mógł przesłać swoją zawartość bezpośrednio z dokumentu Microsoft Word? Oto scenariusz: ludzie mogą kopiować i wklejać treść z Microsoft Word do edytora WYSIWYG (w tym przypadku tinyMCE), a następnie ta informacja jest publikowana na stronie internetowej. Witryna jest publiczna, ale tylko członkowie tej organizacji będą mieli dostęp do publikowania informacji na stronie internetowej. Jaki jest najlepszy sposób na sprostanie temu wymaganiu? Obecnie nie sprawdza się, co publikuje klient (ponieważ mogą publikować tylko „zaufani” użytkownicy), ale nie jestem z tego szczególnie zadowolony i chciałbym go dodatkowo zablokować na wypadek włamania na konto. Platforma, o której mowa, to ASP.NET MVC. Jedyną koncepcyjną metodą, o której wiem, że spełnia te wymagania, jest umieszczenie tagów HTML na białej liście i przepuszczenie ich. Czy jest inny sposób? Jeśli nie, to czy najlepiej pozwolić im przechowywać je w Bazie w dowolnej formie, a jedynie wyświetlać je odpowiednio zakodowane i pozbawione złych tagów? > **NB** : Pytania różnią się tym, że zakłada tylko jeden sposób. Zadaję też > następujące pytania: > 1\. Czy istnieje lepszy sposób, który nie polega na białych listach HTML? > 2\. Czy istnieje lepszy sposób, który opiera się na innym silniku widoku? > 3\. Czy istnieje edytor WYSIWYG, który umożliwia tworzenie białej listy w locie? > 4\. Czy powinienem się tym martwić, ponieważ będzie to tylko „prywatne > publikowanie” (w podobny sposób, w jaki prywatny blog zezwala na HTML > od autora, ale ponieważ tylko on może publikować, nie stanowi to problemu)? > **Edytuj #2** : > Jeśli sugerujesz edytor WYSIWYG, musi on być darmowy (jak w mowie lub > piwo). **Aktualizacja** : Wszystkie dotychczasowe sugestie dotyczą konkretnego edytora tekstu sformatowanego do użycia: Podaj edytor tylko jako sugestię, jeśli umożliwia on oczyszczanie znaczników HTML; i spełnia wymóg akceptowania wklejonych dokumentów z edytora WYSIWYG, takiego jak Microsoft Word. Znam trzy metody: 1\. Nie zezwalaj na HTML. 2\. Zezwól na HTML, ale oczyść go 3\. Znajdź edytor tekstu sformatowanego, który oczyszcza i zezwala na HTML. Pozostają poprzednie pytania (1-4 powyżej). * * * ### Powiązane pytanie > Zapobieganie skryptom między witrynami (XSS)


title: Czy obiekty strategiczne powinny mieć stan?

text: Mam obiekt aplikacji, który musi sprawdzić poprawność niektórych danych. Konkretny algorytm walidacji nie jest znany do czasu uruchomienia, więc przekazuję do niego obiekt walidacji, używając wzorca strategii. Aplikacja może wymagać ponownego użycia obiektu walidacji; na przykład może być konieczne jednoczesne wykonanie dwóch walidacji. Idealnie więc, obiekt walidacji nie zawierałby żadnego stanu; byłby to czysto algorytm. Ale co, jeśli sam algorytm walidacji potrzebuje jakiegoś stanu? Na przykład może być konieczne przechowywanie listy błędów walidacji. Jakie jest dobre podejście w tej sytuacji? Stworzenie fabryki tylko dla tego konkretnego obiektu walidacji wydaje się przesadą. (Załóżmy, że jest to w języku takim jak Java lub PHP.)


title: Czy hosting dokumentów na AWS zmniejszy nasze obciążenie?

text: Ze względu na partnerstwa jesteśmy zobowiązani do hostowania naszej strony internetowej za pośrednictwem naszej firmy partnerskiej. Wpadliśmy jednak na pomysł, że być może moglibyśmy przenieść przechowywanie dokumentów na serwer dokumentów AWS. Myślimy, że moglibyśmy obsłużyć html z naszego serwera i obsłużyć dowolne duże pliki dokumentów z serwera AWS, co znacznie zmniejszyłoby nasze obciążenie przepustowości. Jeśli nigdy nie korzystałem z AWS, czy mogę po prostu podać stosunkowo bezpieczny adres URL AWS do przeglądarki, która pobierze dokument z AWS i całkowicie ominie nasz serwer WWW?


title: Mikrousługi i replikacja danych

text: Buduję nową aplikację i czytałem o architekturze mikroserwisów. Sama architektura ma sens z punktu widzenia rozwoju, wdrażania i zarządzania cyklem życia. Jednak pojawił się jeden problem dotyczący sposobu postępowania z danymi podstawowymi. Na przykład mam 2 aplikacje - powiedzmy aplikację Sales i aplikację Ticketing. Załóżmy, że obie te aplikacje są zbudowane jako własne mikrousługi. Jednak obie te aplikacje, po wdrożeniu (zakładając, że są wdrażane osobno, powiedzmy, że Sales używa MongoDB, a Ticketing używa MariaDB), musiałyby mieć dostęp do tych samych wystąpień danych podstawowych, np. Konta, produkty. Oznaczałoby to, że dla danej jednostki danych podstawowych będzie istniała aplikacja właściciela (np. w przypadku kont może to być aplikacja Sprzedaż) i strona zainteresowana (np. aplikacja biletowa musiałaby mieć informacje o kontach). Można to osiągnąć na wiele sposobów: \- Replikacja danych z urządzenia głównego do zainteresowanego \- Synchroniczny odczyt od zainteresowanego do głównego (zależność synchronizacji nie jest zalecana przez paradygmat architektury mikrousług) \- Własne scentralizowane repozytorium Również nawet w ramach Kont może znajdować się główna część, która jest wspólna zarówno dla sprzedaży, jak i sprzedaży biletów (np. nazwa konta, adres itp.). Jednak niektóre aspekty Konta mogą mieć znaczenie TYLKO dla Sprzedaży, a inne TYLKO dla Biletów. Jakieś przemyślenia/najlepsze praktyki/opinie dotyczące którejkolwiek z wyżej wymienionych opcji?


title: Najlepsze nawyki kontroli wersji dla programistów solo?

text: Jestem jedynym programistą w swojej pracy i chociaż rozumiem zalety VCS; Trudno mi trzymać się dobrych praktyk. W tej chwili używam git do tworzenia głównie aplikacji internetowych (które nigdy nie będą open source ze względu na moją pracę). Mój obecny przepływ pracy to wprowadzanie wielu zmian w witrynie deweloperskiej, testowanie, poprawianie, testowanie, zadowolenie i zatwierdzanie zmian, a następnie przesyłanie zatwierdzenia do działającej witryny (więc jeśli pracuję nad dużą nową zmianą; mogę tylko zatwierdź raz w tygodniu, ale moje IDE ma dobrą historię cofania niezatwierdzonych rzeczy). Zasadniczo używam git tylko podczas przełączania się między maszynami (np. z komputera deweloperskiego na komputer stacjonarny lub komputer stacjonarny), ale w ciągu dnia tak naprawdę nie widzę korzyści. To prowadzi mnie do długiej listy zmian do prania (i mam problem ze znalezieniem dobrych wiadomości dla każdego zatwierdzenia; a kiedy jestem w pośpiechu - mam tendencję do zostawiania kiepskich wiadomości, takich jak „różne zmiany dla administratora i szablonów”). Jak często powinienem się angażować? Czy każda jednowierszowa zmiana powinna otrzymać zatwierdzenie? Czy powinienem zatwierdzić przed jakimkolwiek testem (np. przynajmniej w przypadku błędów składniowych / kompilacji, a następnie muszę to całkowicie cofnąć; ponieważ pomysł nie zadziałał lub wiadomość jest kłamstwem)? Czy powinienem upewnić się, że zobowiązuję się każdego ranka/popołudnia, zanim przestanę pracować na obiad, gdy jest jeszcze świeży? Czego tracę, mając złe nawyki VCS?


title: Na co zwrócić uwagę u pracowników Startupów

text: Jestem inżynierem, ale nie mam wykształcenia informatycznego. Biegle posługuję się Pythonem, Django, używam Mongo i znam trochę C++/C#. Baw się z NGinx tu i tam. Mój weekendowy projekt, fajna aplikacja internetowa, właśnie odnotował gwałtowny wzrost. I chcę poszerzyć zespół. Czego powinienem szukać w potencjalnych pracownikach poza oczywistymi (próbki kodu itp.)? Czy powinienem zatrudnić kogoś, kto nosi wiele kapeluszy i większą pensję, czy podzielić ją na mniejsze role?


title: Skakanie do pracy nad różnymi funkcjami, gdy utkniesz, czy jest to źródło niepowodzeń projektu?

text: W projektach osobistych (lub pracy), jeśli ktoś utknie na jakimś problemie lub czeka na rozwiązanie problemu, jeśli przejdziesz do innej sekcji kodu, nie sądzisz, że będzie to dobry powód dla twojej aplikacji będzie buggy lub gorzej, ale nigdy nie zostanie ukończony? Zakładając, że nie używasz git i nie kodujesz każdej funkcji do określonej gałęzi, sprawy mogą wymknąć się spod kontroli, ponieważ masz 3 różne funkcje, nad którymi pracujesz, i w każdej z nich masz nierozwiązane problemy. Więc kiedy kończysz pracę, jesteś zestresowany, ponieważ masz te zawieszone problemy i niedopracowany kod. Jaki jest najlepszy sposób na uniknięcie tego problemu? (jeśli go masz) Zgaduję, że użycie czegoś takiego jak git i utworzenie brancha dla funkcji jest najbezpieczniejszym sposobem na uniknięcie tego złego nawyku. Jakieś inne sugestie?


title: Czy korzystanie z VSS powinno być przełomem w ofercie pracy?

text: Czytałem ostatnio niektóre z horrorów o VSS i wydaje mi się, że jest to kiepski wybór dla każdego, kto nadal go używa. To jest rodzaj dwuczęściowego pytania: * Czy są jakieś obiektywnie dobre powody, aby używać VSS? * Jeśli nie, czy powinno to być łamaniem umowy o zatrudnienie? Mam osobiste doświadczenie tylko z jedną firmą, która obecnie używa VSS (w czasach przed deweloperem, więc jej nie używałem), a tamtejsza kultura była niezwykle reakcyjna i niechętna do zmian. Nie chcę przenosić mojego doświadczenia z tą firmą na inne organizacje, jeśli istnieją obecnie uzasadnione powody do korzystania z VSS, ale nie przychodzi mi do głowy żaden inny powód niż utknięcie w rutynie, że dane miejsce korzystałoby z VSS 7+ lata po wycofaniu wsparcia, kiedy wydaje się, że istnieją stosunkowo bezbolesne opcje migracji.


title: Czynności testowe realizowane w projekcie deweloperskim OO

text: Czy ktoś zna czynności testowe przeprowadzane w projekcie programistycznym zorientowanym obiektowo, który wykorzystuje podejście przyrostowe do tworzenia i dostarczania?


title: Co to za wzorzec projektowy JavaScript?

text: W naszym miejscu pracy używamy prostej biblioteki ajax do pobierania danych strony i przesyłania zmian do serwera, w niektórych przypadkach musimy zmienić wartości pól formularzy, teraz wiemy, że pola mogą być dowolnego typu (dropdown, textbox i radiobuttons itp.) i jednym z najbardziej denerwujących i żmudnych zadań, jakie znalazłem, było zapamiętywanie różnych pól id, aby móc wykonać manipulację (zadanie może przekroczyć kilka dni, więc musiałem przechowywać identyfikatory w notatniku), następnie stworzyłem ten wzorzec projektowy dla łatwej pracy z pola. function FormFieldsManager() { var FormMgr = { txtGradeName: function (txt) { if (txt) { $('#txtGradeName').val(txt); } else { return $('#txtGradeName').val(); } }, txtGradeDesc: function (txt) { if (txt) { $('#txtGradeDesc').text(txt); } else { return $('#txtGradeDesc').text(); } }, ddStatus: function (txt) { if (txt) { if (isNaN(txt)) { $("#ddStatus").val(txt); } else { $("#ddStatus")[0].selectedIndex = txt; } } else { return $('#ddStatus :selected').val();//wybrana wartość: A } } }; powrót FormMgr; }; Aby skorzystać z tej funkcji, po prostu wywołuję metodę i mogłem poruszać się po polach formularza i otrzymuję pełny intellisense JavaScript. var form = FormFieldsManager(); form.txtGradeName('Programista');//aby ustawić wartość pola form.txtGradeName();//aby uzyskać wartość pola **Więc moje pytania brzmią** 1. Co to za wzorzec projektowy? 2. Jakie sugestie ulepszeń możecie dać? **PS:** lubię nazywać to jsPageObject :)


title: Czym projekt API różni się od ogólnego projektowania aplikacji internetowych?

text: Jeśli pracowałem nad aplikacją internetową projektującą i piszącą API, czym różni się to od ogólnego tworzenia aplikacji internetowych? Jakie rzeczy powinienem wziąć pod uwagę i wziąć pod uwagę? Czy są jakieś standardowe procesy, których należy przestrzegać podczas tworzenia interfejsu API, z którego mogłyby korzystać tysiące klientów?