title: Testy akceptacyjne dla dużego wieloetapowego formularza online

text: Muszę rozszerzyć/naprawić duży formularz online napisany przez innego programistę. Jest dużo kodu mieszającego PHP i JS. To rodzaj kodowania tylko do zapisu i chcę go całkowicie przerobić, ale obecnie nie mogę. Działa to tak: * Jest to formularz w stylu kreatora z 12 krokami - nazwijmy je _fazami_, aby nie mylić z krokami testów. * Użytkownik musi wypełnić co najmniej ~100 pól, aby zakończyć. * Niektóre pola są pogrupowane według 3-5. Grupy te można dynamicznie dodawać i usuwać za pomocą JS. * Walidacja odbywa się po przesłaniu każdej fazy. Jeśli wystąpiły jakieś błędy, użytkownik jest o tym natychmiast powiadamiany i nie może przejść dalej, dopóki nie naprawi wszystkich błędów. * Przesłane dane są tymczasowo przechowywane w sesji między fazami. Brak stałego przechowywania. * Użytkownik nie może pomijać faz, tylko kolejno przechodzić tam iz powrotem do już ukończonych faz. Testowanie tego ręcznie jest śmieszne, więc napisałem test używając Behat z Mink i Selenium2. Mam teraz tylko 1 test, który wypełnia wszystkie 12 faz formularza. Aby przejść do konkretnego punktu w procesie wypełniania formularza, stworzyłem definicję kroku, która po prostu powoduje, że webdriver czeka 1 godzinę (śmieje się ze mnie). Kiedy potrzebuję przetestować jakąś konkretną fazę, po prostu dodaję ten krok, w którym chcę, aby Selenium się zatrzymało - to pozostawia otwarte okno przeglądarki, dzięki czemu mogę robić, co chcę ręcznie, bez konieczności wypełniania wszystkich poprzednich pól. Oszczędza mnóstwo czasu, ale czuje się głupio. Mam ku temu powody: * Musi być zrobione JAK NAJSZYBCIEJ. * Nie mogę przetestować każdego oddzielnego kroku w formularzu. * Nie mogę ponownie wykorzystać części procesu wypełniania bez konieczności pisania dużej ilości kodu PHP. Teraz mój test to tylko ~120 linijek napisanych w języku Gherkin. Uproszczona wersja mojego pytania to: **jak mam to przetestować?** Mogę wymyślić kilka sposobów: * Zmodyfikuj kod, aby umożliwić pomijanie faz. Można to zrobić bezpiecznie, wykrywając parametry środowiska w aplikacji i decydując, czy klient (sterownik lub użytkownik) może lub nie może pomijać faz, więc pomijanie nie jest dozwolone w środowisku produkcyjnym. * Po prostu napisz więcej testów z dużą ilością kopiowania i wklejania i bądź większą małpą. * Napisz definicje kroków, aby ukończyć poszczególne fazy osobno. Więc mógłbym po prostu napisać Kiedy skończę fazę 1 I skończę fazę 2 I skończę fazę 3… w testach. Tak więc pełna wersja mojego pytania brzmi: **która droga jest lepsza i jakie (nie)zalety ma każda z nich?** Może są inne sposoby, na przykład zaprojektowanie aplikacji w zupełnie inny sposób, więc nie ma takich problemów.


title: Czy kiedykolwiek jest rozsądny czas na testowanie przez urządzenia testowe konstrukcji sterownika MVC3?

text: Niedawno zacząłem pracę w nowej firmie i próbuję zrozumieć mechanizmy stojące za czymś, więc anonimizuję kod i zaprezentuję tylko próbkę: [Test(Description = "Pobiera nowy widok dla XXXX.")] public void New() { "~/XXXX/New".ShouldMapTo<XXXXController>(x => x.New()); "~/XXXX/New".WithMethod(HttpVerbs.Post).ShouldMapTo<XXXXController>(x => x.New(null)); } i jeszcze raz: [Test(Description = "Przetestuj wstrzyknięcie modelu do nowego widoku.")] public void New() { var @new = WXYZController.New(); @new.AssertViewRendered(); Assert.IsInstanceOf<WXYZSettingsModel>(@new.ViewData.Model, "Oczekiwano, że model danych będzie typu WXYZSettingsModel, ale model był innego typu."); var model = @new.ViewData.Model jako WXYZSettingsModel; if (model == null) Assert.Fail("Nie udało się rzutować modelu danych na typ WXYZSettingsModel."); Assert.IsNotNull(model.YYYY, "Oczekiwano wystąpienia komunikatu usługi, ale zwrócono komunikat o wartości null."); Assert.AreEqual(model.YYYY.Status, WXYZ.Success, "Oczekiwano kodu stanu sukcesu, ale został zwrócony inny kod."); Assert.IsNotNull(model.Categories, ""); Assert.AreEqual(model.ZZZZ.Status, ABCD.Success, "Oczekiwano kodu statusu sukcesu, ale zwrócono inny kod."); } Wydaje mi się, że narusza to cel testowania jednostkowego, ponieważ nigdy nie należy testować struktury, ale raczej własnego kodu, prawda? Czy ktoś po prostu dał się ponieść emocjom? A może brakuje mi jakiegoś podstawowego elementu tego kodu, który jest oczywisty dla kogoś, kto jest bardziej zaznajomiony z testowaniem jednostkowym. Zauważ, że istnieją całe pliki (po jednym z każdego z powyższych na kontroler), które nigdy nie testują ani jednej linii kodu wewnętrznego, ale są wypełnione tymi testami. Nawet do tego stopnia jest to dość szablonowe, teraz, gdy go zanonimizowałem. Gdybyśmy zamiast tego testowali w ten sposób (pseudokod teraz) [Test(Description = "thingy tester, duh")] public void ThingTest(){ var mock = new MyDataMock(); var finalMock = new MyFinalMock(); var kontroler = new thingController(); var test = kontroler.Rzecz(mock); attach.AreNotEqual(test,mock,"To nie zmieniło"); attach.AreEqual(test,finalMock,"Udało się!"); } Spodziewałbym się, że tak powinny wyglądać testy jednostkowe, które powinienem zobaczyć, nie?


title: Którą licencję Ext JS należy nabyć (przy tworzeniu aplikacji internetowej Spring MVC/Hibernate/Ext JS)?

text: Pytam o aplikację internetową, która wykorzystuje _Spring MVC_ i hibernuje na serwerze oraz _ExtJS 4_ (framework JavaScript Sencha) dla frameworka klienta (widgety). Aplikacja jest hostowana w chmurze – nie jest „dystrybuowana” do użytkowników. Wymagane jest, aby użytkownicy aplikacji musieli zakupić licencję od dostawcy, aby z niej korzystać. Jestem zupełnie nowy w licencjonowaniu oprogramowania i nie jestem pewien, która licencja ExtJS jest wymagana/preferowana, tj. licencja komercyjna czy licencja GNU GPL? Mam kilka pytań, które, mam nadzieję, pomogą wyjaśnić: 1. Czy możliwe jest korzystanie z licencji GPL lub podobnej pozwalającej na dystrybucję tylko części źródła aplikacji, np. komponenty Extjs, ale nie pozwalają użytkownikom zobaczyć innych komponentów systemu? czyli _Spring MVC_ , hibernacja komponentów serwera? Czy można ograniczyć dostęp do źródła _ExtJS_, jeśli korzysta się z licencji GPL? Ogólnie, czy możliwe jest ograniczenie dystrybucji niektórych aspektów źródła podczas korzystania z GPL? 2. W przypadku nabycia licencji GPL, czy źródło jest dostępne tylko dla użytkowników systemu, czy jest ono ogólnodostępne?


title: Projektowanie tożsamości ASP.NET

text: Próbuję zaprojektować system z poniższymi funkcjami i obecnie staram się znaleźć najlepszy sposób obsługi tożsamości: 1. Będzie wiele oddzielonych części systemu, z tymi samymi klientami uzyskującymi dostęp do różnych części 2. Chciałbym, aby użytkownicy byli zorganizowani według organizacji/firm, tj. użytkownik1 i użytkownik2 należą do ORG1 3. Chciałbym, aby w profilu użytkownika były przechowywane dodatkowe informacje, informacje będą pochodzić z różnych systemów, a także informacje globalne, takie jak adres itp. 4. Dla ról, które mam jeszcze nie zdecydowano, czy będą one obsługiwane przez pojedyncze aplikacje, czy globalnie i wyspecjalizowane w niektórych aplikacjach. Moją zagadką jest to, czy użyć nowej tożsamości MVC wydanej obecnie w ASP.NET Beta, czy użyć WIF lub Active Directory. Zakładam, że scentralizowana aplikacja obsługująca użytkowników i związane z nimi zadania administracyjne, a następnie federacja z innymi aplikacjami jest najlepsza. Jeśli dobrze rozumiem, którykolwiek z 3 jest w stanie to zrobić. Zastanawiam się, którego użyć, aby być najbardziej elastycznym. Zasadniczo coś, co można później rozszerzyć i nie ma ogromnej krzywej uczenia się, prawdopodobnie do użytku mobilnego i interfejsu API. Nie wiem wystarczająco dużo o WIF lub AD, ponieważ nigdy tak naprawdę ich nie używałem, a ASP.NET Identity jest nadal w wersji beta i nie jest w 100% udokumentowana. Moje doświadczenie z systemami uwierzytelniania to praca z tymi po wyjęciu z pudełka. Tak naprawdę nigdy nie miałem do czynienia z SSO lub federacją. Chciałem dodać, że nie ma potrzeby zewnętrznej rejestracji. Rejestracja będzie obsługiwana wyłącznie przez administratorów, nie jestem pewien, czy to w ogóle się łączy, ale pomyślałem, że może to mieć znaczenie


title: Jak obliczyć przepustowość w przypadku ruchu sieciowego

text: Natknąłem się na to pytanie w podręczniku, ale nie ma rozwiązań i nie jestem pewien, jak to rozwiązać. Pytanie brzmi: Załóżmy, że host A chce wysłać duży plik do hosta B. Ścieżka z hosta A do hosta B ma trzy łącza o szybkości R1=500Kb/s, R2=2Mb/s i R3=1Mb/s. Zakładając, że istnieje inny zajęty przepływ, który przechodzi przez ten sam zestaw łączy (np. z hosta C do hosta D), jaka będzie przepustowość tego transferu plików? Wiem, że przepustowość bez ruchu to min (R1, R2, R3), więc czy przepustowość z ruchem będzie wynosić max(R1, R2, R3)?


title: Wygaśnięcie losowej pamięci podręcznej

text: Eksperymentowałem z losowymi czasami wygaśnięcia pamięci podręcznej, aby uniknąć sytuacji, w których pojedyncze żądanie wymusza aktualizację wielu rzeczy naraz. Na przykład strona internetowa może zawierać pięć różnych komponentów. Jeśli każdy z nich zostanie ustawiony na limit czasu za 30 minut, użytkownik będzie miał długi czas oczekiwania co 30 minut. Zamiast tego ustawiasz je wszystkie na losowy czas od 15 do 45 minut, aby prawdopodobnie tylko jeden komponent został ponownie załadowany przy dowolnym załadowaniu strony. Staram się znaleźć jakieś badania lub wytyczne na ten temat, m.in. optymalne parametry wariancji. Przypominam sobie, że widziałem jeden artykuł o tym, jak Google (?) używa tej techniki, ale nie mogę go zlokalizować i wydaje się, że nie ma zbyt wiele na ten temat.


title: Różnica między pętlą zdarzeń a wywołaniami/przerwaniami systemowymi

text: Kiedy tworzysz programy (takie jak serwer gniazd), które są zaprojektowane do działania w systemie operacyjnym, takim jak Ubuntu, frameworki takie jak Qt dla C++ używają czegoś, co nazywa się główną pętlą zdarzeń: app = new QCoreApplication(argc, argv); int rc = app->exec() Teraz języki programowania takie jak C lub C++ umożliwiają programowi wykonywanie wywołań systemowych za pomocą funkcji wbudowanych, takich jak fork() lub pthread_create() i używanie przerwań programowych do zmiany trybu jądra. Na przykład program może zażądać użycia jądra za pomocą wywołania systemowego w celu wykonania uprzywilejowanych instrukcji, takich jak tworzenie procesu lub operacje wejścia/wyjścia. Inne przykłady to open, read, write, close, wait, execve, fork, exit i kill. Wszystko to można osiągnąć bezpośrednio w C/C++ bez pętli zdarzeń. Jaki jest więc cel pętli zdarzeń?


title: Zalety nazw/pakietów

text: Niektóre języki programowania (np. Java i C++) mają funkcje językowe zwane „pakietami” lub „przestrzeniami nazw”. Jak przydatne jest posiadanie przestrzeni nazw? Możliwe jest oznaczenie funkcji i klas jako należących do określonej biblioteki bez użycia takiej cechy języka, jak robi to SDL (np. `SDL_BlitSurface()`). Czy przestrzenie nazw nie są wystarczająco przydatne, aby warto było je mieć? Czy są przydatne w bibliotekach, ale nie w aplikacjach? Czy przydają się wszędzie poza małymi projektami? Myśli?


title: Walidacja formularza JavaScript

text: Czy podczas walidacji formularza JavaScript lepiej byłoby przetwarzać każde pole wejściowe indywidualnie, czy, jeśli to możliwe, sprawdzać zbiorczo? np. validate() { noblanks() fieldOne() fieldTwo() } or validate() { fieldOne() fieldTwo()


title: Jakie jest zastosowanie asocjacji, agregacji i kompozycji (enkapsulacja) w klasach?

text: Przeszedłem przez wiele teorii na temat tego, czym jest enkapsulacja i trzech technik jej wdrażania, którymi są Asocjacja, Agregacja i Kompozycja. Odkryłem, że ## Encapsulation Encapsulation to technika określania pól w klasie jako prywatnych i zapewniania dostępu do pól za pomocą metod publicznych. Jeśli pole jest zadeklarowane jako prywatne, nikt spoza klasy nie może uzyskać do niego dostępu, co powoduje ukrycie pól w klasie. Z tego powodu enkapsulacja jest również określana jako ukrywanie danych. Enkapsulację można opisać jako barierę ochronną, która zapobiega losowemu dostępowi do kodu i danych przez inny kod zdefiniowany poza klasą. Dostęp do danych i kodu jest ściśle kontrolowany przez interfejs. Główną zaletą enkapsulacji jest możliwość modyfikowania naszego zaimplementowanego kodu bez łamania kodu innych, którzy korzystają z naszego kodu. Dzięki tej funkcji enkapsulacja zapewnia łatwość utrzymania, elastyczność i rozszerzalność naszego kodu. ## Powiązanie Powiązanie to relacja, w której każdy obiekt ma swój własny cykl życia i nie ma właściciela. Weźmy przykład Nauczyciela i Ucznia. Wielu uczniów może kojarzyć się z jednym nauczycielem, a jeden uczeń może kojarzyć się z wieloma nauczycielami, ale nie ma własności między obiektami i oba mają swój własny cykl życia. Oba mogą tworzyć i usuwać niezależnie. ## Agregacja Agregacja jest wyspecjalizowaną formą asocjacji, w której każdy obiekt ma swój własny cykl życia, ale istnieje własność, a obiekt podrzędny nie może należeć do innego obiektu nadrzędnego. Weźmy przykład Departamentu i nauczyciela. Pojedynczy nauczyciel nie może należeć do wielu wydziałów, ale jeśli usuniemy wydział nauczyciela obiekt nie zniszczy. Możemy pomyśleć o relacji „ma-a”. ## Kompozycja Kompozycja jest ponownie wyspecjalizowaną formą agregacji i możemy to nazwać relacją „śmierci”. Jest to silny typ agregacji. Obiekt podrzędny nie ma swojego cyklu życia i jeśli obiekt nadrzędny usunie, wszystkie obiekty podrzędne również zostaną usunięte. Weźmy ponownie przykład relacji między Domem a pokojami. Dom może zawierać wiele pokoi, nie ma niezależnego życia pokoju i żaden pokój nie może należeć do dwóch różnych domów, jeśli usuniemy dom, pokój zostanie automatycznie usunięty. **Pytanie brzmi:** Teraz to wszystko są przykłady z prawdziwego świata. Szukam opisu, jak używać tych technik w rzeczywistym kodzie klasy. Mam na myśli _jaki jest sens używania trzech różnych technik do enkapsulacji_, _jak te techniki mogą być zaimplementowane_ i _jak wybrać, która technika ma zastosowanie w danym momencie._


title: Zanim zaczniesz tworzyć aplikację internetową, jakiej specyfikacji potrzebujesz?

text: Jeśli miałbyś przyjąć rolę pełnoetatowego programisty aplikacji internetowych, odpowiedzialnego za tworzenie nowej aplikacji od podstaw, jaka część zdefiniowanej specyfikacji i projektu byłaby potrzebna i/lub spodziewana do rozpoczęcia rozwoju? Jakie narzędzia/oprogramowanie są do tego używane (w przypadku aplikacji internetowych zbudowanych z czymś takim jak RoR)? Spodziewałbym się, że wymagana będzie makieta/makieta, ale co jeszcze robi się na etapie projektowania? Jaka jest najlepsza metoda lub proces przekazywania funkcjonalności aplikacji, aby programiści wiedzieli, co przetłumaczyć na kod. Chciałbym usłyszeć od twórców aplikacji internetowych, którzy pomyśleli: „Gdybym tylko miał <to>, mógłbym to opracować o wiele szybciej/łatwiej/czystsze” lub „Nie mam pojęcia, czego chce ten klient, chyba że to udokumentuje w <rzecz>." Nie próbuję rozpoczynać debaty filozoficznej, jestem ciekawy z perspektywy programistów, jaki jest „właściwy” sposób projektowania aplikacji webowych od podstaw. Prawdopodobnie jest gdzieś książka, którą ktoś może mi przekazać RTFM, ale udało mi się znaleźć tylko materiały dotyczące nauki rzeczywistego kodowania i rozwoju, a nie fazy projektowania.


title: Zalety Hudson i Sonar nad procesem ręcznym lub własnymi skryptami

text: Mój współpracownik i ja niedawno rozpoczęliśmy debatę na temat proponowanego planu w naszym miejscu pracy. Mniej więcej zakończyliśmy przenoszenie naszej bazy kodu Java w jedną zarządzaną i skompilowaną za pomocą Mavena. Teraz chciałbym, żebyśmy zintegrowali się z Hudsonem i Sonarem lub czymś podobnym. Powodem tego jest to, że zapewni to krok kompilacji „bez kliknięcia”, aby zapewnić testerom nowe eksperymentalne kompilacje, że pozwoli nam łatwiej wdrażać aplikacje na serwer, że narzędzia takie jak Sonar zapewnią nam dobrze- potrzebne metryki dotyczące pokrycia kodu, Javadoc, zależności pakietów i tym podobne. Uważa, że narzut związany z przyśpieszeniem pracy z dwoma nowymi frameworkami jest nie do zaakceptowania i że powinniśmy po prostu podwoić dokumentację i stworzyć własne skrypty do wdrożenia. Ponieważ planujemy agresywne przepisywanie, aby spłacić dług techniczny poniesiony przez poprzednich programistów (bezpłatne użycie interfejsu Serializable Java jako mechanizmu przechowywania plików, który w przewidywalny sposób ugryzł nas w tyłek), twierdzi, że możemy dokumentować na bieżąco i że i tak zmienimy duży fragment kodu w procesie. Twierdzę, że posiadanie dokładnych metryk, które zapewnia Sonar (lub wypełnienie ulubionego podobnego narzędzia), daje nam dobre miejsce do rozpoczęcia wszelkich wysiłków związanych z refaktoryzacją, nie wspominając o ogólnej konserwacji — w końcu wiedząc, które klasy są najsłabiej udokumentowane, nawet jeśli to tylko punkt wyjścia, jest lepsze niż zgadywanie. Czy się mylę i próbuję wprowadzić więcej kosztów, niż naprawdę potrzebujemy? Trochę więcej tła: absolwenci naszej firmy pracują teraz w laboratorium badawczym marynarki wojennej i zasugerowali, że te dwa narzędzia w szczególności odniosły wielki sukces w użyciu. Mój współpracownik i ja również mieliśmy wcześniej wiele przyjaznych nieporozumień -- jest bardziej "CLI dla wszystkich, kompiluje Gentoo w wolnym czasie i używa Gita", a ja jestem bardziej "Daj mi intuicyjny GUI, bawi się XNA i jest w porządku z typem SVN, więc na pewno jest tu _jakiś_ element zderzenia kultur.


title: Traktowanie struktury danych 1D jako siatki 2D

text: Mam nadzieję, że to dobre pytanie. Pracuję z natywną klasą, która reprezentuje obraz 2D jako tablicę 1D. Jeśli chcesz na przykład zmienić jeden piksel, musisz teraz dowiedzieć się, jak uzyskać indeks ze współrzędnych `x,y`. I staram się w abstrakcyjny sposób namierzyć, jak zmapować wielowymiarowy obiekt na jego podstawową jednowymiarową reprezentację. Załóżmy więc, że mamy tablicę jednowymiarową „array1d” taką jak ta: array1d = [ a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y ] W kontekście naszego programu, `array1d` reprezentuje siatkę 2D: a b c d e f g h i j k l m n o p q r s t u v w x y I chcemy wykonać operacje na `array1d` takie jak: * Get wartość we współrzędnych `x,y` (w tym przykładzie `1,2` dałoby `l`) * Pobierz dowolną podsiatkę używając `x,y,width,height` (`1,2,2,2 ` dałoby `[l, m, q, r]`). w danych 1D na współrzędne w obiektach 2D/3D/4D...? Jeśli tak, co to jest? Oczywiście wszystkie komputery z wyświetlaczami rozwiązują ten sam problem, więc jak nazywa się ten podstawowy problem i jak jest konwencjonalnie rozwiązywany?


title: W przypadku PL/SQL, czy duże firmy wolą złączenia ANSI SQL czy stare złączenia Oracle?

text: Prowadzę rozmowę kwalifikacyjną na stanowisko PL/SQL w dużej korporacji. Będę musiał napisać egzamin wielokrotnego wyboru. Zastanawiam się, czy egzamin prawdopodobnie użyje złączeń w starym stylu (złączenie ma miejsce w klauzuli 'WHERE') czy ANSI. Przepraszam, jeśli to nie jest właściwe forum dla tego pytania.


title: Czy powinienem zaktualizować ten kod, czy kontynuować z obecnym projektem?

text: Pracuję z aplikacją ASP.NET. Aplikacja jest świetna i działa dobrze, ale ma kilka wad. Aby dać ci przykład, 1. Każda kontrolka używa układu pozycji bezwzględnej. To sprawia, że praca z kodem jest bardzo trudna w trybie projektowania. Pozycja bezwzględna została użyta w kodzie ponad 700 razy. 2. Istnieją różne zastosowania menu zamiast jednego. Aby połączyć je ze sobą, ponownie pozycja bezwzględna jest używana dla każdej kontrolki menu 3. Aplikacja jest oparta na rolach. Wszystkie role są implementowane przy użyciu właściwości Roles.IsUserInRole. Chciałbym użyć odpowiednich uprawnień dla każdej roli z uprawnieniami na poziomie strony. 4. Istnieje kilka zagrożeń bezpieczeństwa w obecnym kodzie, ale jest to łatwe do naprawienia w obecnym programie. 5. Nie ma prawdziwego administratora. Rola najwyższego poziomu pełni rolę administratora, która jest również rolą funkcjonalną, używaną przez innych członków. Teraz, gdy dodajemy nową funkcjonalność do tego kodu i mam na myśli dodanie dużej funkcjonalności, co polecasz. Czy powinienem przepisać ten kod, czy pracować w istniejącym. Chciałbym szczególnie naprawić 1. Problemy z układem. Usuń wszystkie ustalone pozycje i spraw, aby kod był czysty i łatwy w utrzymaniu. 2. Niestety, aby to zrobić, muszę przepisać menu. Ponieważ chcę napisać jedno menu zamiast 4 używanych. 3. Aby osiągnąć punkt 2 powyżej muszę stworzyć nowe role i zapewnić odpowiednie zabezpieczenie aplikacji. Moje pytanie brzmi: **Czy powinienem pracować z obecnym kodem, czy przepisać istniejący, pamiętając, że nasza firma się rozwija i że przepisanie może zająć mi 2-4 tygodnie.** Czy byłby to zły pomysł, czy dobry jeden. Nie mam kierownika technicznego w mojej firmie.


title: Dobry wzorzec projektowy dla otoki c++ wokół obiektu c

text: Napisałem rozszerzalny wrapper C++ wokół bardzo trudnej w użyciu, ale także bardzo przydatnej biblioteki c. Celem jest uzyskanie wygody c++ do alokacji obiektu, ujawnienia jego właściwości, cofnięcia alokacji obiektu, kopiowania semantyki itp. Problem polega na tym: czasami biblioteka c chce bazowego obiektu (wskaźnika do obiektu) i destruktor klasy nie powinien niszczyć podstawowej pamięci. W większości przypadków destruktor powinien cofnąć alokację obiektu. Eksperymentowałem z ustawieniem flagi `bool hasOwnership` w klasie, aby destruktor, operator przypisania, itp. wiedział, czy powinien zwolnić podstawową pamięć, czy nie. Jest to jednak uciążliwe dla użytkownika, a także czasami nie ma sposobu, aby wiedzieć, kiedy inny proces będzie używał tej pamięci. Obecnie mam konfigurację, w której gdy przypisanie pochodzi ze wskaźnika tego samego typu, co typ bazowy, ustawiam flagę hasOwnership. Robię to samo, gdy przeciążony konstruktor jest wywoływany za pomocą wskaźnika z biblioteki c. Jednak to nadal nie obsługuje przypadku, gdy użytkownik utworzył obiekt i przekazał go do jednej z moich funkcji, która wywołuje c_api, a biblioteka przechowuje wskaźnik do późniejszego wykorzystania. Gdyby usunęli swój obiekt, bez wątpienia spowodowałoby to błąd segfault w bibliotece c. Czy istnieje wzorzec projektowy, który uprości ten proces? Może jakieś liczenie referencji?


title: Dlaczego miałbym używać Control.Exception w Haskell?

text: Próbuję naprawdę opanować obsługę błędów Haskella i dotarłem do punktu, w którym nie rozumiem, dlaczego miałbym używać Control.Exception zamiast Control.Monad.Error. Widzę to tak, że mogę złapać wyjątki Control.Monad.Error zarówno w czystych, jak i nieczystych kontekstach. Z kolei wyjątki zdefiniowane w Control.Exception można przechwycić tylko w kontekstach nieczystych/IO. Biorąc pod uwagę, że zapewniają dwa oddzielne interfejsy i semantykę, które musiałbym zapamiętać, w jakich okolicznościach będę potrzebował Control.Exception zamiast Control.Monad.Error?


title: Offshoring: czy to w ogóle działa?

text: Wiem, że było tu sporo dyskusji na temat outsourcingu/offshoringu i generalnie wydaje się, że w najlepszym razie jest to trudne, aw najgorszym zawodzi. Mam bezpośrednie doświadczenie w offshoringu; poprzednia firma, w której byłem kierownikiem ds. rozwoju, chciała wysłać część rozwoju za granicę, a my przeprowadziliśmy program pilotażowy, aby zobaczyć, jak dobrze to zadziała. Oczywiście była to kompletna porażka, chociaż nie jest dla mnie do końca jasne, czy było to spowodowane mniejszym talentem deweloperów offshore, procesem, czy innymi czynnikami (bez wątpienia była to naprawdę kombinacja). Widzę jako firma, jak offshoring _wygląda_ atrakcyjnie (znacznie niższa stawka dzienna), ale według mnie jedynym sposobem, w jaki może _ewentualnie_ działać, jest wykonanie _wyjątkowo szczegółowego_ projektu z góry, z _niesamowicie szczegółowymi_ specyfikacjami; a do czasu, gdy zainwestowałeś w jego produkcję, prawdopodobnie wydałeś prawie tyle samo, ile napisałeś rzeczywisty kod lokalnie (co myślę, że jest to przykład No Silver Bullet). Więc chcę wiedzieć, czy ktoś tutaj ma jakieś doświadczenie z offshoringiem faktycznie działającym _kiedykolwiek_? Zwłaszcza jeśli są jakieś historie sukcesu, w których działa w sposób pół-zwinny? Wiem, że są tu programiści z całego świata; czy ktoś pracował nad projektem offshore, który uważa za udany?


title: Jak pracować z nowym reżyserem z różnymi ideałami?

text: ### Tło W ciągu ostatnich 2 lat zbudowaliśmy przyzwoity zespół programistów. Dyrektor generalny firmy i ja pracowaliśmy nad zamknięciem, aby upewnić się, że idziemy dobrą ścieżką. Gdy nasz dział się rozrósł, mówiłem właścicielowi, że potrzebujemy menedżera/dyrektora, który rozumie technologię, ale może poprowadzić firmę w bardziej biznesowych aspektach prowadzenia interaktywnego sklepu deweloperskiego. Wyszedł i właśnie to zrobił, nie udało mi się go poznać przed jego pierwszym dniem, ale szybko dostałem jego CV. Pod koniec lat 90. był właścicielem firmy, która została wykupiona i od tego czasu pracuje jako konsultant. Większość jego wiedzy dotyczyła dużych systemów korporacyjnych. Tworzymy aplikacje i strony internetowe dla średnich firm. I tu zaczynają się pojawiać problemy. Kilkakrotnie wspomniał o naszej potrzebie przejścia na Flash, Oracle i J++ dla witryn i aplikacji, które tworzymy. W porównaniu ze stosem LAMP, którego obecnie używamy w 90% naszego rozwoju. Nowy facet jest bardzo inteligentny, jeśli chodzi o biznesową stronę projektów technicznych, ale stara się kierować technicznym kierunkiem. A on i ja nie spotykamy się z paroma nadchodzącymi projektami. ### Pytanie Teraz nie chcę zagłębiać się w te komentarze. Chcę zapytać, jak ja, jako starszy programista, mogę współpracować z naszym nowym dyrektorem, aby zapewnić sukces naszego działu w tej firmie. Jednocześnie dbając o zadowolenie naszych programistów i pracując z technologiami, które nam się podobają i z którymi czujemy się komfortowo.


title: Wykorzystanie pirackiego oprogramowania w firmie

text: Kilka miesięcy temu zacząłem pracować w firmie jako inżynier. Jest to mała firma i zasadniczo zajmuje się odbieraniem telefonów. Teraz przechodzą ze zwykłych telefonów na telefony IP, aby komputery zajmowały w pracy ważniejsze miejsce. Jednak wszystkie komputery używane przez pracowników są wyposażone w pirackie oprogramowanie, w tym ich systemy operacyjne. Co więcej, nie kupili nawet jednej licencji na wykonywanie kopii na inne komputery. Innymi słowy, nie wydali żadnych pieniędzy na oprogramowanie w biurze. Nie mówię, że kopiowanie licencjonowanego jest legalne, ale sytuacja jest zbyt duża. Jest jeden facet, który zainstalował pirackie oprogramowanie. Nie ma poczucia winy, a nawet usprawiedliwia się, kiedy o to pytam. Nie jest nawet specjalistą. Po prostu szukał w Internecie, aby zainstalować pirackie oprogramowanie. Nasz szef nie zna się na komputerach, więc wybrał tańszą drogę. Co o tym myślisz? Ponieważ wciąż jestem nowy w firmie, nie prowadzę konserwacji tych złamanych komputerów. Ale muszę codziennie korzystać z tego oprogramowania. A później będę robił wsparcie, coś w rodzaju pomocy technicznej. Naprawdę nie chcę brać odpowiedzialności za obsługę pirackiego oprogramowania. Z punktu widzenia programisty i inżyniera pirackie oprogramowanie nie jest w stanie uzyskać wsparcia prawnego i może działać nieoczekiwanie. Więc myślę o zmianie pracy. Czy myślę za dużo? Czy powinienem poczekać, aż uzyskam większą wiarygodność wobec szefa i spróbować zmienić jego politykę? Jak na razie szef nie bierze ode mnie żadnych słów. Wszelkie opinie są mile widziane. Dziękuję Ci


title: Czy interfejsy API powinny znajdować się w en_US, en_GB, czy w obu?

text: Czy powinienem pisać interfejsy API w pisowni amerykańskiej czy brytyjskiej? A może powinienem zapewnić mapowanie obu z nich do jednego i wewnętrznie używać każdego, kogo lubię, aby oba działały? Obecnie większość interfejsów API ma pisownię amerykańską. Jakie jest na to rozwiązanie? edit: Czy istnieje sposób na standaryzację tego. Może być wsparciem obu?


title: Co proponujesz dla aplikacji wieloplatformowych, w tym internetowych?

text: Odkąd tylko pamiętam, zawsze wolałem rozwój wieloplatformowy od większości innych koncepcji. To jeden z powodów, dla których nigdy nie dostałem się do .Net. Obecnie używam php/javascript/python jako moich podstawowych języków do tworzenia stron internetowych. Którego również używam w pracy. Ale pojawiła się potrzeba nauczenia się C# i jeden z facetów od Windowsa uczył mnie C#, więc wciąż jestem bardzo nowy. Bardzo podobał mi się język. Prowadziłem również burzę mózgów nad aplikacją, którą chciałem zrobić od jakiegoś czasu i nie określiłem najlepszego sposobu jej zbudowania. Główny system będzie online, gdzie użytkownicy będą mogli się logować i robić wszystko. Ale chcę również stworzyć klienta stacjonarnego, który będzie łączył się i synchronizował zawartość użytkowników z serwerem (rozważając użycie couchdb w moim konkretnym przypadku użycia dla tej aplikacji). Powinni być w stanie zrobić wszystko, co potrafi aplikacja internetowa. Chciałbym uruchomić na Linuksie, Windowsa i Maca, a także tworzyć wersje mobilne. W nauce c# mój współpracownik polecił mi spojrzeć na Mono, abym mógł używać .Net jako systemu międzyplatformowego, a nawet używać asp.net jako głównej witryny. Mam więc nadzieję, że uzyskam wgląd w to, dokąd mógłbym się udać. Wygląda na to, że używałem .net z mono, mógłbym ponownie wykorzystać dużo kodu dla sieci i urządzeń mobilnych za pomocą monodroida/monotouch. Ale w takim razie jak ta konfiguracja mogłaby się porównać do użycia czegoś takiego jak sencha touch do tworzenia wersji mobilnej i node.js po stronie serwera (jestem już dość biegły w JS i php, wystarczy nauczyć się c#/.net do pracy i chciałbym aby dowiedzieć się więcej). Czy jest coś jeszcze, co powinienem rozważyć? Tak naprawdę nie pytam, która metoda jest lepsza, chcę tylko wiedzieć, jakie mam opcje, które mógłbym wtedy podjąć wykalkulowaną decyzję w oparciu o moje potrzeby i dalsze badania. Na przykład jakie funkcje miałaby trasa .net/mono, których nie miałbym w sencha/node.js i odwrotnie (node.js jest niesamowity w czasie rzeczywistym, na przykład używany do interakcji z użytkownikiem), szukam tylko wglądu i porady, i pomoc byłaby bardzo ceniona.


title: Funkcje wbudowane w C++. Jaki jest sens?

text: Zgodnie z tym, co przeczytałem, kompilator nie jest zobowiązany do zastępowania wywołania funkcji funkcji wbudowanej jej treścią, ale zrobi to, jeśli będzie mógł. To dało mi do myślenia - dlaczego mamy słowo w wierszu, jeśli tak jest? Dlaczego nie ustawić domyślnie wszystkich funkcji wbudowanych i pozwolić kompilatorowi dowiedzieć się, czy może zastąpić wywołania treścią funkcji, czy nie?


title: Jakie są zalety i wady korzystania z adnotacji Resharper?

text: Nowy kolega podsunął pomysł wykorzystania **adnotacji Resharpera** w naszej bazie kodu (jesteśmy już wielkimi fanami i użytkownikami Resharpera). Mój nowy kolega cytuje takie rzeczy, jak wyraźne stwierdzenie, czy parametr może mieć wartość null, czy nie w czasie kodowania, jest dobrą rzeczą, aby konsumenci tej klasy mogli zobaczyć ostrzeżenia w czasie kodowania. Moje zastrzeżenie jest takie, że dodaje szum do kodu, nie jest wykonywane w czasie wykonywania, dlatego preferuję klauzule Guard. Obawiam się też, że lubię komentarze, że mogą się zestarzeć. Martwię się również o czytelność kodu i narzuty związane z ich pisaniem. Ostatecznie staram się, aby rozwój był szczupły, więc nie chcę dodawać narzutu za stosunkowo niewielki zysk. Wreszcie wydaje się, że kod dekorujący jest niewłaściwy dla wsparcia narzędziowego jednego dostawcy. Jakie są Twoje myśli? Dobre/złe doświadczenia?


title: Co powoduje błędy zaokrąglania liczb zmiennoprzecinkowych?

text: Zdaję sobie sprawę, że arytmetyka zmiennoprzecinkowa ma problemy z precyzją. Zwykle pokonuję je, przełączając się na stałą reprezentację liczby dziesiętną lub po prostu zaniedbując błąd. Nie wiem jednak, jakie są przyczyny tej niedokładności. Dlaczego jest tak wiele problemów z zaokrąglaniem liczb zmiennoprzecinkowych?


title: Co jest złego w kreatywnym kodowaniu?

text: Oglądałem dziś wieczorem Boba Rossa malującego „szczęśliwe drzewa” i zorientowałem się, co ostatnio mnie stresuje w związku z moim kodem. Społeczność ludzi tutaj i na Stack Overflow wydaje się odrzucać każdy powiew niedoskonałości. Moim celem jest pisanie godnego szacunku (a zatem łatwego w utrzymaniu i działającego) kodu poprzez doskonalenie moich umiejętności. Jednak koduję twórczo. Pozwólcie, że wyjaśnię, co rozumiem przez „kreatywne kodowanie”: * Moje pierwsze kroki w projekcie to często usiąść i wywalić trochę kodu. W przypadku większych rzeczy planuję trochę tu i tam, ale głównie po prostu się zanurzam. * Nie tworzę diagramów żadnych moich klas, chyba że pracuję z innymi, którzy tworzą inne elementy w projekcie. Nawet wtedy z pewnością nie jest to pierwsza rzecz, którą robię. Zazwyczaj nie pracuję nad dużymi projektami i nie uważam, aby wizualizacja była zbyt użyteczna. * Pierwsza runda kodu, który napiszę, zostanie przepisana wiele, wiele razy, ponieważ testuję, upraszczam, przerabiam i przekształcam oryginalny hack w coś wielokrotnego użytku, logicznego i wydajnego. Podczas tego procesu zawsze sprzątam. Usuwam nieużywany kod i komentuję wszystko, co nie jest oczywiste. Ciągle testuję. **Mój proces wydaje się iść wbrew temu, co jest akceptowane przez społeczność profesjonalnych programistów, i chciałbym zrozumieć dlaczego.** Wiem, że większość narzekań na zły kod polega na tym, że ktoś utknął w bałaganie byłego pracownika , a naprawa kosztowała dużo czasu i pieniędzy. To rozumiem. To, czego nie rozumiem, to dlaczego mój proces jest błędny, biorąc pod uwagę, że efekt końcowy jest podobny do tego, co można uzyskać planując wszystko od początku. (A przynajmniej tak właśnie znalazłem.) Mój niepokój związany z tym problemem był ostatnio tak silny, że przestałem kodować, dopóki nie dowiem się wszystkiego o każdej metodzie rozwiązania konkretnego problemu, nad którym pracuję. Innymi słowy, w większości całkowicie przestałem kodować. Szczerze doceniam Twój wkład, bez względu na to, jakie masz opinie na ten temat. **Edytuj:** Dziękuję wszystkim za odpowiedzi. Od każdego z nich czegoś się nauczyłem. Wszyscy byliście bardzo pomocni.


title: najlepsza struktura hostingowa do sprzedaży aplikacji na stronie internetowej

text: Zastanawiam się nad sprzedażą małej aplikacji komputerowej (byłbym uważany za jednoosobowego mISV?) w cenie około 20-30 USD. Rozprowadzałbym do klientów tylko przez pobranie. Odnoszę wrażenie, że najlepszym i najbardziej intuicyjnym sposobem na to jest udostępnienie linku do pobrania ze strony internetowej aplikacji. Jakie są najlepsze sposoby na to? Czy powinienem utworzyć stronę internetową za pomocą standardowego dostawcy usług hostingowych (np. DreamHost) i użyć go, aby umożliwić klientom jej pobranie (ma około 18 MB)? Chcę dopuścić możliwość, że wiele osób spróbuje pobrać go na raz (jeśli byłbym w stanie uzyskać zapis na niektórych bardzo poczytnych stronach) i nie chciałbym, aby mój dostawca nie był w stanie obsłużyć to, ponieważ byłby to kluczowy okres sprzedaży. Chciałbym również, aby koszty hostingu/serwowania były jak najniższe, ponieważ nie jestem pewien, czy w ogóle zarobię pieniądze sprzedając to. Chciałbym też, żeby wszystko było stosunkowo proste.


title: Usuwanie wystąpień znaków w ciągu

text: Czytam tę książkę, programuję wywiady ujawnione przez Johna Wileya i synów, aw rozdziale 6 omawiają usuwanie wszystkich wystąpień znaków w ciągu src za pomocą ciągu usuwającego... więc `removeChars(string str, string remove)` writeup podjęli kroki, aby to osiągnąć, aby uzyskać tablicę wyszukiwania wartości logicznych ze wszystkimi wartościami początkowo ustawionymi na fałsz, a następnie przejść przez każdy znak w `remove` ustawiając odpowiednią wartość w tablicy wyszukiwania na true (uwaga: może to być również hash, jeśli możliwy zestaw znaków jest ogromny, jak Unicode-16 lub coś w tym stylu, lub jeśli str i remove są stosunkowo małe ... przypuszczam, że < 100 znaków). Następnie przechodzisz przez str z indeksem źródłowym i docelowym, kopiując każdy znak tylko wtedy, gdy odpowiadająca mu wartość w tablicy wyszukiwania jest fałszywa... Co ma sens... Nie rozumiem jednak kodu, którego używają... Mają for(src = 0; src < len; ++src){ flags[r[src]] == true; }, która zmienia wartość flagi w łańcuchu usuwania indeksowanym w src na true... więc jeśli zaczniesz od `PROSZĘ POMOCY` jako str i `LEA` jako usunięcia, ustawisz w tabeli flag na `0 ,1,2... t|t|t` ale po tym dostaniesz wyjątek poza granicami, ponieważ r nie ma w sobie niczego większego niż 2... nawet używając tam przykładu dostaniesz wyjątek poza granicami wyjątek... Czy istnieje przykład kodu niewykonalnego? **Cała funkcja** string removeChars( string str, string remove ){ char[] s = str.toCharArray(); char[] r = usuń.toCharArray(); flagi bool[] = new bool[128]; // zakłada ASCII! int len = s.Długość; int źródło, dst; // Ustaw flagi dla znaków do usunięcia for( src = 0; src < len; ++src ){ flags[r[src]] = true; } źródło = 0; czas = 0; // Teraz przejdź przez wszystkie znaki, // kopiuj tylko jeśli nie są oznaczone while( src < len ){ if( !flags[ (int)s[src] ] ){ s[dst++] = s[src] ; } ++źródło; } zwróć nowy łańcuch( s, 0, dst ); } jak widać, r pochodzi z łańcucha usuwania. Tak więc w moim przykładzie ciąg usuwania ma tylko rozmiar 3, podczas gdy mój ciąg str ma rozmiar 11. len jest równa długości ciągu str. Czyli byłoby to 11. Jak mogę przejść przez łańcuch r skoro ma on tylko rozmiar 3? Nie skompilowałem kodu, więc mogę go zapętlić, ale patrząc na to, wiem, że to nie zadziała. Myślę, że chcieli zapętlić ciąg r... innymi słowy, otrzymali tutaj długość niewłaściwego ciągu.


title: Jakie są największe wąskie gardła podczas opracowywania dużych projektów?

text: Załóżmy, że moja firma miała opracować replikę MS Worda (jako przykład). Jakie byłoby wąskie gardło w procesie rozwoju, zakładając, że dysponuje się nieskończoną ilością gotówki i organizacją taką jak Microsoft? Innymi słowy, jakie są najczęstsze przeszkody w szybkim tworzeniu takiego oprogramowania? Załóżmy, że wszystkie specyfikacje są na miejscu, a organizacja działa idealnie, więc skupiamy się tylko na rozwoju oprogramowania, dopóki produkt nie będzie gotowy do wysyłki. Niektóre alternatywy mogą być następujące: \- Pisanie kodu \- Pisanie testów \- Ręczne testowanie produktu końcowego \- Przepisywanie kodu przede wszystkim z powodu złego projektu \- Projektowanie kodu \- Przegląd kodu przez doświadczonych programistów \- Projektowanie GUI \- Przeprojektowanie GUI na podstawie opinii użytkowników wersji alfa/beta \- Przetwarzanie opinii użytkowników \- Oczekiwanie na opinie użytkowników wersji alfa/beta Proszę użyć odnośników w swojej odpowiedzi lub wyrazić swoje doświadczenia na ten temat.


title: Czy istnieje znany algorytm planowania rozgrywek turniejowych?

text: Zastanawiam się tylko, czy istnieje już algorytm planowania turniejów, którego mógłbym użyć lub nawet nieznacznie dostosować. Oto moje wymagania: * Zmienna liczba przeciwników należących do różnej liczby drużyn/klubów, każdy musi być sparowany z przeciwnikiem * Dwóch przeciwników nie może być z tego samego klubu * Jeśli jest nieparzysta liczba graczy, 1 z nich losowo jest wybierany, aby pożegnać Wszelkie algorytmy związane z tego rodzaju zestawem wymagań byłyby mile widziane. **EDYTUJ:** Potrzebuję uruchomić to maksymalnie jeden raz, tworząc pojedynki do pierwszej 'rundy' turnieju.


title: Bycie dobrym podopiecznym - podopiecznym

text: Uzupełnienie pytania „Bycie dobrym mentorem”. Pracuję z wieloma bardzo starszymi osobami, które mają ogromną wiedzę i mądrość w zakresie oprogramowania, inżynierii i naszej domeny biznesowej. Jakie są wskazówki, jak zdobyć od nich jak najwięcej wiedzy? Nie chcę zajmować im zbyt wiele czasu, ale chcę też w pełni to wykorzystać, bo to naprawdę może pomóc rozwinąć moje umiejętności. Jakie są dobre pytania, które sprawią, że rozmowa zacznie się toczyć podczas sesji z mentorem/podopiecznym? Niektóre osoby zapewniające mentoring mają niewielkie doświadczenie w tej dziedzinie, więc pomogłoby prowadzić niektóre z tych dyskusji.


title: Odpowiednie opcje licencji Creative Commons dla motywu

text: Po pierwsze nie jestem ekspertem w zakresie warunków licencji i systemu, ale mam podstawową wiedzę. Od dwóch wersji rozwijam motyw dla jednego ze skryptów PHP Open Source. Do tej pory był to pakiet dołączony do GPLv3. Obecnie pracuję nad nową wersją i jestem gotowy do wydania wersji alfa. Ale zanim go wydam, chcę tylko zmienić licencję na Creative Commons. To tylko po to, by trochę zapobiec notatkom o prawach autorskich/kredytach. Chcę zezwolić użytkownikowi na modyfikację, zmianę motywu i redystrybucję. Muszą jednak zawierać oryginalne informacje o prawach autorskich i kredytowych oraz licencję. Nie jestem też pewien, czy mogę wydać nową wersję na licencji CC, a jeśli tak, jaka będzie najlepsza opcja do tego. Czy tylko logo (nie z pełnym opisem) będzie uwzględniało te same prawa?


title: Jak przechowywać dane satelitarne w strukturach danych C?

text: Czytałem Wprowadzenie do algorytmów 3rd Ed i naprawdę podoba mi się ten materiał; mam jednak trudności z realizacją pewnych praktycznych sytuacji. To nie teoria ani implementacja wewnętrznych elementów samych struktur danych, ale raczej sposób zaprojektowania dobrego interfejsu sprawia, że struktury danych są przydatne do przechowywania prawdziwych danych (w przeciwieństwie do samych kluczy). W szczególności powiedziano mi, że C ma filozofię typu „zaufaj programiście”. Po prostu nie wiem, ile zaufania jest zbyt dużym zaufaniem. Na przykład wiele struktur danych można zaimplementować jako połączone struktury z podobnymi węzłami posiadającymi klucz, dane satelitarne i wskaźniki do innych węzłów w ds, np: typedef struct { klucz int; nieważne *dane; węzeł_t *poprzedni; węzeł_t *następny; } węzeł_t; Q1. W jakim stopniu powinienem hermetyzować moje implementacje? W przypadku większości struktur masz zarówno: (a) typ struktury danych, jak i (b) typ, który można wstawić/usunąć ze struktury danych. Czy oba powinny być ukryte? Oczywiście, jeśli ujawnię jakiś `node_t` z intencją, że ktoś zmieni tylko `key` i `*data`.. istnieje możliwość, że `prev` lub `next` zostaną zmienione, niszcząc w ten sposób strukturę danych. Podobne ryzyko istnieje, jeśli ujawnię typ struktury danych i ktoś zadziera z rootem. Q2. Jak należy przechowywać/uzyskiwać dostęp/porównywać klucze? Przypuszczalnie klucze zależą od danych satelitarnych, ale jeśli zastosujesz podejście jak powyżej, oddzieliłeś klucz od samych danych. Co się stanie, jeśli użytkownik zaktualizuje dane, ale zapomni zaktualizować klucz (lub, co gorsza, zaktualizuje klucz, ale nie usunie go/ponownie wstawi do ds.)? Dla czegoś takiego jak drzewo binarne, które używa tylko porównań, mógłbym zaprojektować interfejs tak, aby akceptował komparatory, które akceptują wskaźniki do danych satelitarnych? To sprawia, że struktura jest bardziej uogólniona, ale całe rozbrajanie musi mieć wpływ na szybkość. Alternatywnie (i byłby potrzebny w przypadku struktur takich jak skróty, które wymagają konkretnego klucza), mógłbym zaakceptować wskaźnik do funkcji `int toKey(void *data)`. Jestem stosunkowo nowy w C (i oprogramowaniu do projektowania) i nie jestem pewien, jak dobre oprogramowanie powinno być zaprojektowane do użytku w prawdziwym świecie.


title: Wizualnie i dźwiękowo jednoznaczny podzbiór alfabetu łacińskiego?

text: Wyobraź sobie, że dajesz komuś kartę z kodem „5SBDO0”. W niektórych czcionkach literę „S” trudno jest wizualnie odróżnić od cyfry pięć (podobnie jak cyfra zero i litera „O”). Czytając kod na głos, może być trudno odróżnić „B” od „D”, co wymaga mówienia „B jak chłopiec”, „D jak pies” lub używania „alfabetu fonetycznego”. Jaki jest największy podzbiór liter i cyfr, który w większości przypadków będzie zarówno wizualnie jednoznaczny, jak i jednoznaczny podczas czytania na głos? * * * Tło: Chcemy wygenerować krótki ciąg znaków, który może zakodować jak najwięcej wartości, a jednocześnie będzie łatwy w komunikacji. Wyobraź sobie, że masz ciąg składający się z sześciu znaków, „123456”. W bazie 10 może to zakodować **10** ^6 wartości. W szesnastkowym „1B23DF” możesz zakodować **16** ^6 wartości w tej samej liczbie znaków, ale może to brzmieć niejednoznacznie podczas czytania na głos. ("B" vs. "D") Podobnie dla dowolnego ciągu N znaków otrzymujesz (rozmiar alfabetu)^N wartości. Ciąg jest ograniczony do długości około sześciu znaków, ze względu na chęć łatwego dopasowania się do pojemności ludzkiej pamięci roboczej. Tak więc, aby znaleźć maksymalną liczbę wartości, które możemy zakodować, musimy znaleźć największy jednoznaczny zestaw liter/cyfr. Nie ma powodu, dla którego nie moglibyśmy brać pod uwagę liter G-Z i niektórych popularnych znaków interpunkcyjnych, ale nie chcę ręcznie porównywać parami „czy G brzmi jak A?”, „czy G brzmi jak B?”, „czy G brzmi jak C”. Jak wiemy, byłaby to praca lingwistyczna O(n^2) do wykonania =)...


title: Programowanie deklaratywne a programowanie imperatywne

text: Czuję się bardzo dobrze z programowaniem imperatywnym. Nigdy nie mam problemu z wyrażeniem algorytmicznie tego, czego chcę, aby komputer zrobił, kiedy już zorientuję się, co chcę, żeby zrobił. Ale jeśli chodzi o języki takie jak SQL lub ja często się zacinam, ponieważ moja głowa jest zbyt przyzwyczajona do programowania imperatywnego. Załóżmy na przykład, że masz relacje band(NazwaZespołu,KrajZespołu), miejsce(NazwaMiejsca,KrajMiejsca), plays(NazwaZespo,NazwaMiejsca) i chcę napisać zapytanie, które mówi: wszystkie nazwy miejsca takie, że dla każdego Krajuzespołu jest zespół z ten kraj, który gra w miejscu o tej nazwie. **EDYTUJ (ze względu na odpowiedzi): innymi słowy, chcę mieć wszystkie nazwy miejsc, w których grały zespoły ze _wszystkich_ krajów (bandCountry). Przez „relację” rozumiem również tabelę SQL.** W mojej głowie od razu przechodzę do „dla każdej nazwy miejsca przeprowadź iterację po wszystkich krajach zespołu i dla każdego kraju zespołu uzyskaj listę zespołów, które z niego pochodzą. Jeśli żaden z nich nie gra w nazwa_miejsca , przejdź do następnego nazwa_miejsca. W innym przypadku, na końcu iteracji bandCountries dodaj nazwa_miejsca do zestawu dobrych nazw_miejsca'. ...ale nie można tak mówić w SQL i właściwie muszę zastanowić się, jak to sformułować, z intuicyjnym rozwiązaniem Imperatyw, które ciągle dręczy mi się z tyłu głowy. Czy ktoś jeszcze miał ten problem? Jak to przezwyciężyłeś? Czy wymyśliłeś zmianę paradygmatu? Utworzyłeś mapę z pojęć imperatywnych do pojęć SQL, aby przetłumaczyć rozwiązania imperatywne na deklaratywne? Przeczytaj dobrą książkę? PS Nie szukam rozwiązania powyższego zapytania, rozwiązałem je.


title: Test umiejętności programisty

text: Mam wielu znajomych, którzy widzą to, co robię, uważają to za interesujące i zadają mi pytanie Czy myślisz, że mógłbym zostać programistą? Moja odpowiedź brzmi ... ummm ... lubisz matematykę? Chciałbym otrzymać pomocną odpowiedź, więc nie wiedziałem, czy ktoś znał całkiem przyzwoity test umiejętności dla kogoś, kto zaczynałby od początku, ale ma umiejętności krytycznego myślenia i rozwiązywania problemów?


title: Podatności i szanse na zatrudnienie

text: Jestem programistą stron internetowych. Jeśli znajdę lukę w zabezpieczeniach strony internetowej potencjalnego pracodawcy i powiadomię go o tym w momencie wysłania mojej (niezamówionej) aplikacji, czy jest bardziej prawdopodobne, że dostanę pracę? Mniej prawdopodobne? Czemu?


title: Sposoby znalezienia korepetytora dla studenta I roku Uczelni

text: Próbowałem szukać tutaj (i tak) bez większego powodzenia. Patrzyłem też na żółtą ramkę po prawej i myślę, że to pytanie jest stosunkowo aktualne i można na nie odpowiedzieć. Współpracownik zapytał mnie, czy mam jakieś sugestie, jak znaleźć korepetytora dla jego syna. W tym konkretnym przypadku chodziło o Eclipse i Javę, ale skłoniło mnie to do myślenia o dobrych ogólnych strategiach, które można zastosować w takich sytuacjach. Wolał lokalny 1-do-1, ale przypuszczam, że online może być rozsądną (a może bardziej prawdopodobną) alternatywą. Jakieś sugerowane strategie?


title: Jak poradzić sobie z rosnącymi wymaganiami dotyczącymi raportowania QA?

text: **Some Background:** Nasza firma rozwija się bardzo szybko - w ciągu 3 lat potroiliśmy swoją wielkość i nic nie wskazuje na to, aby w najbliższym czasie się zatrzymać. Rozrósł się nasz dział marketingu i nasze wymagania informatyczne. Kiedy przybyłem po raz pierwszy, wszystko było zarządzane w arkuszach kalkulacyjnych Dreamweaver i Excel i ciężko pracowaliśmy nad wdrożeniem śledzenia błędów, kontroli wersji, ciągłej integracji i wieloetapowego wdrażania. To była długa, trudna droga, a teraz musimy się lepiej zorganizować. **Problem pod ręką:** Kierownictwo chce śledzić, dla poszczególnych programistów, kto generuje najwięcej problemów na etapie kontroli jakości (w szczególności problemy z testami jednostkowymi, regresją i postprodukcją). Staje się to dobrą równowagą, ponieważ wielu problemów nie można raportować szczegółowo (np. według adresu URL lub według „strony”), ale kierownictwo chciałoby, aby raportowanie było podzielone. Ponadto należy wziąć pod uwagę dotkliwość. Dla każdego z tych obszarów opracowaliśmy standardy specyficzne dla naszego środowiska. Deweloperzy nie chcą zostać naznaczeni za ponad 100 wystąpień problemu, jeśli był to problem z dołączaniem lub dziedziczeniem... Miałem sugestię, aby "punktować" błędy na podstawie powagi ... ale nikt tego nie lubi. Nie możemy wprowadzić problemów dla każdego modułu, którego dotyczy problem globalny. **[AKTUALIZACJA] Rzeczywiste pytania:** W jaki sposób średnie firmy i sklepy z kodami radzą sobie ze śledzeniem błędów, raportowaniem i dostarczaniem przydatnych danych zarządowi? Jakie rodzaje KPI są lepszymi miernikami wydajności pracowników? Jaki jest najczęstszy sposób dostarczania raportów na programistę, jeśli chodzi o czas do zamknięcia, ponownego otwarcia itp.? Czy duże przedsiębiorstwa ignorują wysiłki jednostek i skupiają się raczej na zespole? Kilka innych pytań: * Czy to zbyt szczegółowe raportowanie? * Czy jest to uważane za „kulturę winy”? * Gdybyś był programistą pracującym w tym środowisku, jaki _ty_ określiłbyś jako wymierny cel na ten rok dotyczący śledzenia postępów, z premią za osiągnięcie celu?


title: Czy ma sens obliczanie cyklomatycznej złożoności/linii współczynnika kodu?

text: Ogólnie rzecz biorąc, wskaźnik konserwacji zależy od wielu czynników. Na przykład w Visual Studio opiera się na cyklomatycznej złożoności, głębokości dziedziczenia, łączeniu klas i wierszach kodu; te cztery wartości muszą być jak najniższe. Jednocześnie nigdy nie widziałem, ani w narzędziach metryk kodu, ani w książkach, porównania między tylko złożonością cyklomatyczną (CC) a liniami kodu (LC). Czy ma sens obliczanie takiego współczynnika? Jakie informacje podaje o kodzie? Innymi słowy, czy lepiej zmniejszyć bardziej CC niż LC, aby uzyskać niższy stosunek? Zauważyłem, że w przypadku małych projektów stosunek CC/LC jest niski (⅓ i niższy). Innymi słowy, LC jest wysokie, a CC niskie. W dużych projektach CC/LC jest w większości przypadków większe niż ½. Czemu?


title: Jak testujesz swoje oprogramowanie?

text: Obecnie pracuję nad 2 projektami oprogramowania: 1. Portal społecznościowy dla organizacji pozarządowej 2. System zarządzania pacjentami dla szpitala Chociaż programuję od 5 lat, nie mogę po prostu powiedzieć, że jestem bardzo dobry w testowaniu lub projektowaniu opartym na testach. Jak zaaranżowałbyś testowanie oprogramowania przed fazą kodowania, w trakcie kodowania i po zakończeniu fazy kodowania? dostarczanie interesariuszom informacji o jakości testowanego produktu lub usługi. * b. zapewnienie obiektywnego, niezależnego obrazu oprogramowania, aby umożliwić firmie docenienie i zrozumienie ryzyka związanego z wdrażaniem oprogramowania. i jak rozumiesz, że Twój program/aplikacja/produkt * c. spełnia wymagania biznesowe i techniczne, które kierowały jego projektowaniem i rozwojem * re. działa zgodnie z oczekiwaniami p.s. edytuj pytanie, ponieważ mój angielski nie jest zbyt mocny.


title: Jak poprawić swoje umiejętności jako programista Qt GUI?

text: Jestem programistą Pythona i Qt, a moją codzienną pracą jest tworzenie małych programów GUI, które są dostarczane z urządzeniami sprzętowymi. Jednak moja praca jest dość prosta: odczytywanie / zapisywanie danych do urządzenia przez port szeregowy za pomocą pyserial oraz wyświetlanie i edytowanie danych za pomocą PyQt i PyQwt. Ze względu na to, jak podstawowa jest ta praca, nie jestem pewien, czy jest tu dużo bezpieczeństwa pracy. Co mogę zrobić, aby poprawić swoje umiejętności w tym zakresie?


title: Jaki jest najbezpieczniejszy sposób na „Grandfather In” istniejących użytkowników płatnej aplikacji na iOS, która stanie się bezpłatna?

text: Tytuł mówi wszystko, ale mogę to rozwinąć. Mam płatną aplikację na iOS, która ma wielu istniejących klientów. Myślę, że chcę teraz przekonwertować na bezpłatną aplikację i zezwolić na pełną aktualizację poprzez zakup w aplikacji. Problem polega na tym, że nie chcę, aby moi dotychczasowi klienci ponownie kupowali aplikację, aby z niej korzystać, ani nie chcę, aby hakerzy po prostu przerzucili przełącznik i uzyskali wersję pro. Jaki jest **najbezpieczniejszy** sposób na „Dziadek do działania” istniejących użytkowników płatnej aplikacji na iOS, która stanie się bezpłatna?


title: Jak rozwiązać metody o tej samej nazwie i typie parametrów?

text: W wielu przypadkach chcę napisać metody, które mają tę samą funkcjonalność dla różnych typów danych wejściowych. Można to łatwo osiągnąć przez przeciążenie metody, jeśli typy parametrów są różne. Ale jaki jest najlepszy (najbardziej niezawodny) sposób rozwiązania przypadku, gdy typy parametrów są takie same (tj. dwie różne reprezentacje danych tego samego typu)? Przykładem może być macierz liczb całkowitych, która może być naturalnie przechowywana jako `int[][]`. Ale co, jeśli chcesz napisać metodę, która akceptuje również transpozycję macierzy? Transpozycja jest również „int[][]”, ale całkowicie inną reprezentacją. Widzę kilka sposobów na zrobienie tego: * Nadawanie metodom różnych nazw * Dodanie flagi do metody * Zawijanie każdej reprezentacji w różne klasy Myślę, że trzecia metoda jest najbardziej przejrzystym sposobem wykonania tego. Niestety pracuję nad niektórymi bibliotekami o wysokiej wydajności, w których nie jest to wykonalne rozwiązanie.


title: Czy nazywa się to instancją w JavaScript?

text: Powiedzmy, że mam funkcję. function foo(){ //do rzeczy } Następnie tworzę obiekt tej funkcji. var fooObj = nowy foo(); Jak nazywa się `fooObj`? Instancja, instancja obiektu, czy coś zupełnie innego? Wybacz nowicjuszowi pytanie, ale jestem raczej nowy w programowaniu opartym na prototypach (i całym programowaniu).


title: Najlepszy sposób, aby w przekonujący sposób ewangelizować współpracownikom najlepsze praktyki dotyczące front-endu?

text: Miałem w przeszłości doświadczenie w pracy z (tradycyjnie back-endowymi) programistami, którzy od czasu do czasu wkraczają w sferę frontendową. Wynikowy kod zazwyczaj obejmuje: * zanieczyszczenie globalnej przestrzeni nazw (wiele wielu funkcji globalnych zawartych w tekście bez uwzględniania elastyczności lub ponownego wykorzystania) * wiele jednorazowych implementacji funkcji, które są już obsługiwane lub mogą być łatwiej zaimplementowane przy pomocy już dołączona biblioteka (surowe implementacje JS funkcjonalności związanej z AJAX/DOM) * masowe grupowanie stylów wbudowanych Jako (stosunkowo) doświadczony profesjonalista front-end, odniosłem pewne sukcesy w przekazywaniu najlepszych praktyk kolegom zainteresowanym nauką. Jednak ten sukces był w dużej mierze oparty na zaufaniu i otwartości. Jakie są możliwości, jeśli chodzi o odpowiadanie na pytania, dlaczego niektóre przyjęte „najlepsze” praktyki są rzeczywiście lepsze w sposób, który zyskuje wspomniane zaufanie i zainteresowanie?


title: Metodologie programowania w stackoverflow

text: Jestem w trakcie zakładania firmy programistycznej, w której będziemy intensywnie korzystać z ASP.NET MVC i ASP.NET WebAPI w sklepie. Będziemy grupą 4 osób i nie więcej niż 10 osób będzie pracować nad konkretnym projektem w dowolnym momencie (są to podstawowe zasady). Chciałbym wiedzieć, jakie metodologie programowania najlepiej pasują do małego (partyzanckiego) zespołu. W szczególności chciałbym również wiedzieć, które z nich są używane w słynnych sklepach ASP.NET MVC, takich jak Stackoverflow. Te, które znam to: 1. Scrum i 2. Wodospad (wiem, że jest zły). Ale jaki jest zalecany sposób rozwoju dla mniejszej, 9-10 osobowej grupy. Czy Test Driven Development pomoże takiemu zespołowi w tworzeniu wysokiej jakości oprogramowania? Czy są jakieś inne techniki, które zespół będzie musiał znać, aby być dobrym w tworzeniu wysokiej jakości oprogramowania?


Mój pomysł na sklep z aplikacjami dla przedsiębiorstw polega na tym, że w witrynie internetowej firmy znajduje się strona, na której wymienione są wszystkie aplikacje opracowane przez tę firmę dla swoich pracowników, aby mogli z nich korzystać. A dostęp do tych aplikacji jest ograniczony do pracowników firmy. O ile wiem, możesz pobrać aplikację na Androida z dowolnej strony internetowej i zainstalować ją na telefonie z Androidem, nie musisz korzystać z Android Market. Jednak zainstalowanie aplikacji, która nie pochodzi z Android Market, nie jest takie proste. W przypadku Apple możesz zainstalować aplikację tylko z Appstore, więc jak możesz mieć sklep z aplikacjami dla przedsiębiorstw? Proszę mi powiedzieć, czym dokładnie jest sklep z aplikacjami dla przedsiębiorstw. Myślę, że się pomyliłem, dużo też czytam w Internecie o tych słowach kluczowych.


title: Implementacja interfejsu ILogger do rejestrowania danych

text: Mam potrzebę zapisania danych do pliku w jednej z moich klas. Oczywiście przekażę interfejs do mojej klasy, aby go oddzielić. Myślałem, że ten interfejs będzie używany do testowania, a także w innych projektach. To jest mój interfejs: //Może być używany przez system plików, webservice public interface ILogger { List<string> PreviousLogRecords {get;set;} void Log(string Data); } interfejs publiczny IFileLogger : ILogger { string FilePath; bool prawidłowa nazwa pliku; } public class MyClassUnderTest { public MyClassUnderTest(IFileLogger logger) {....} } [Test] public void TestLogger() { var mock = new Mock<IFileLogger>(); mock.Setup(x => x.Log(Is.Any<string>).AddsDataToList()); //Czy to możliwe?? var mojaKlasa = new MojaKlasaUnderTest(mock.Object); myClass.DoSomethingThatWillSplitThisAndLog3Times("1,2,3"); Assert.AreEqual(3,mock.PreviousLogRecords.Count); } To nie zadziała Nie wierzę, ponieważ nic nie przechowuje elementów, więc czy jest to możliwe przy użyciu Moq, a także co myślisz o projekcie interfejsu?


title: Jak określić, który język/framework jest najlepszy dla naszego projektu internetowego?

text: Jestem na wczesnym etapie tworzenia aplikacji internetowej, nad którą pracuje trzech programistów (w tym ja). Projekt jest w istocie internetową bazą danych, z której będzie korzystać około 5000 osób. Jego głównym celem jest śledzenie informacji o postaciach w grze przy jednoczesnym egzekwowaniu zestawu zasad i bezpieczeństwa. Tymczasem ma być jak najbardziej użyteczny. Chociaż główna prezentacja będzie odbywać się w przeglądarce internetowej na komputerze w sieci, mamy również nadzieję, że * niektóre funkcje aplikacji będą dostępne po odłączeniu od sieci oraz * że będziemy mogli opracować wersję frontendu dla urządzeń mobilnych. Oto podstawowe informacje dla programistów; Myślę, że jest to dość istotne dla pytania. * Deweloper A utrzymuje system, który przeprojektowujemy. Został zbudowany w PHP, ale jest bardzo mało rzeczywistego kodu, który możemy zachować. Ma również prawo weta, choć chętnie przyjmuje sugestie. * Deweloper B zna tylko VB i SQL, chociaż ostatnio studiuje AJAX i HTML/CSS. * Developer C (me) ma dyplom z inżynierii oprogramowania z doświadczeniem w wielu (nie MS) językach, a także w ogólnym tworzeniu stron internetowych/baz danych, ale od ukończenia studiów (2009) tworzył kod tylko w Ruby. Dev C ma doświadczenie w starszej wersji PHP i pomógł w pracy nad jednym projektem w najnowszej wersji Rails w 2008 roku. Główne narzędzia, które rozważamy, to Ruby on Rails 3 i PHP 5. Programista A wydaje się dość przeciwny nauce Railsów , ale domyślam się, że zakłada, że nauka jest trudniejsza niż w rzeczywistości. Tego jednak nie wiem na pewno. Niezależnie od tego, co wybierzemy, chcę zastosować architekturę MVC. **Jakie są inne godne uwagi kwestie, które powinniśmy rozwiązać, aby określić, który język będzie dla nas najbardziej odpowiedni?** Czy którekolwiek z wymienionych poniżej problemów są trywialne? Główne kwestie/punkty/obawy, które _myślę_ muszę rozważyć/zaadresować to: * Przeszkoda w nauce dla Railsów - głównie dla programisty A, ale także jeśli trudniej byłoby nauczyć się trochę tylko po to, aby pomóc programiście B, niż byłoby niech nauczy się trochę PHP. * Możliwość wystąpienia problemów z wydajnością w Railsach. * Brak wymuszonej struktury w PHP - czy należy spodziewać się trudności z wymuszeniem MVC * Łatwość integracji AJAX w PHP vs. Rails.


title: Jakie jest prawdopodobieństwo, że programista zostanie dobrym projektantem?

text: Jestem programistą i jestem całkiem dobry w programowaniu. Potrafię z łatwością poruszać większość tematów technicznych, takich jak Linux, administracja systemami, bazy danych i oczywiście nowe języki programowania. Bawiłem się nawet modelowaniem 3d i nie byłem w tym straszny. Jednak jestem okropny w projektowaniu graficznym. Nie mam żadnych umiejętności, a nawet po kilku tutorialach Photoshopa nie mogę zaprojektować strony internetowej (ani naprawdę niczego innego). Zastanawiam się, czy włożę w to całą masę czasu, czy mogę zostać _dobrym_ grafikiem. Więc to, czego szukam, to ktoś inny, kto to zrobił, lub porady, myśli itp.


title: Czy metoda try and catch, która nie zgłasza wyjątku, jest bardziej wydajna niż tryb warunkowy?

text: Ostatnio natknąłem się na ten przykład: > Jeśli 999 razy na 1000 wyjątek nie zostanie zgłoszony, to wyjątek > jest generowany tylko raz. Z drugiej strony warunek warunkowy zostałby > wywołany niepotrzebnie 999 razy, dlatego w tym przypadku wyjątek jest > nadrzędny. W tym przypadku jest to C#, ale ogólnie mówiąc czy to prawda? Wcześniej zakładałem, że instrukcje try/catch mają swój własny narzut, który byłby równy czasowi spędzonemu na obsłudze warunkowego. To prawda, że samo rzucanie bloków try/catch w dowolne miejsce, w którym normalnie przebiegałby tryb warunkowy, byłoby okropnym sposobem na kodowanie, ale pod względem zasobów, czy to stwierdzenie wytrzymuje?


title: Wnioskowanie o typach w języku Golang/Haskell

text: Czytałem, że Go w rzeczywistości nie ma prawdziwego wnioskowania o typie w tym sensie, że mają języki funkcjonalne, takie jak ML czy Haskell, ale nie byłem w stanie znaleźć prostego do zrozumienia porównania tych dwóch wersji. Czy ktoś mógłby wyjaśnić w prostych słowach, jak wnioskowanie o typie w Go różni się od wnioskowania o typie w Haskell, oraz jakie są zalety i wady każdego z nich?


title: Jak stworzyć program, w którym dwa obiekty losowo poruszają się po ekranie, ALE nigdy się nie zderzają?

text: mogą swobodnie poruszać się w dowolnym miejscu na ekranie po liniach prostych lub zakrzywionych, o ile nie znajdują się w tym samym miejscu w danym momencie. btw nie pytam jak to napisać w kodzie, ale raczej logika jak kto woli? 1- jak sprawić, by obiekt poruszał się losowo? (pomijając predefiniowane funkcje lub klasy..etc) 2-Jak zapewnić, że nigdy nie trafią?


title: Najlepsza struktura danych do reprezentowania angielskich form czasownika

text: Muszę wymyślić strukturę danych, aby zachować informacje o formach czasowników w języku angielskim. W większości przypadków czasownik może mieć jedną z 4 form: imiesłów podstawy, imiesłów czasu teraźniejszego, imiesłów czasu przeszłego i imiesłowu czasu przeszłego, na przykład: * wziąć * wziąć * wziąć * wziąć Pozornie łatwo jest zdefiniować 4 typy dla każdej formy i skończyć z tym . Jest jednak kilka wyjątków, które psują ten prosty pomysł. 1. Przedstaw jednoosobową formę trzecioosobową, którą w naszym przykładzie byłyby "ujęcia". 2. Copularny czasownik "być" ma wiele nieregularnych form w czasie teraźniejszym: "am", "jest", "are" oraz "było" i "było" w czasie przeszłym 3. Czasowniki takie jak "may", które nie t odmienia się w obecnej pojedynczej formie trzeciej osoby: „może”. Jaka struktura danych byłaby wydajna, dokładna, ale jednoznaczna dla reprezentacji takich informacji (w wyjątkowych przypadkach) przy spełnieniu następujących warunków: * dla formy dowolnej odpowiedz na pytanie, jakie koniugacje ta forma reprezentuje * dla dowolnej koniugacji i formy odpowiedź pytanie, czy forma reprezentuje daną koniugację, czy nie?


title: Popularne zwroty, aby wiedzieć, które zasoby nie są już dostępne

text: Pracuję nad skryptem do śledzenia adresów URL na stronie internetowej. Ten skrypt jest uruchamiany codziennie, aby zidentyfikować zasoby, które nie są już dostępne. Jeśli strona zwraca „kod stanu”, taki jak „404”, wiem, że zasób nie jest już dostępny, ale czasami strona zwraca „200” z komunikatem takim jak: > Ten zasób został przeniesiony do ...... Lub > Ten zasób nie jest już dostępny.... Chciałbym wiedzieć, które `słowa kluczowe` są używane, aby powiedzieć, że zasób nie jest już dostępny, niezależnie od `kodu statusu`.


title: Gdzie uczyć się zastosowań teorii grafów

text: Jestem zupełnie nowy w projektowaniu algorytmów z wykresami. Śledzę CLRS i inne wykłady wideo na Youtube, w szczególności z IIT/MIT. Są całkiem dobre i obecnie mam przyzwoite pojęcie o strukturach danych wykresów, wyszukiwaniu, drzewie opinającym itp. Jednak nie mam pojęcia, jak zidentyfikować problem z kodowaniem (takie jak w Topcoder/Codechef) wymaga to podejścia opartego na wykresach. W jakim problemie powinienem użyć minimalnego drzewa opinającego? Gdzie muszę używać algorytmu Prim? Czy jest jakaś książka/zasób, który obejmuje wiele problemów na wykresach, wyjaśniając (no cóż, rodzaj karmienia łyżką), jak rozpoznać, że ten problem wymaga rozwiązania opartego na wykresach i wreszcie, jak to zrobić?


title: Strategia utrzymywania tajnych informacji, takich jak klucze API, poza kontrolą źródła?

text: Pracuję nad stroną internetową, która pozwoli użytkownikom logować się przy użyciu danych uwierzytelniających OAuth, takich jak Twitter, Google itp. Aby to zrobić, muszę zarejestrować się u tych różnych dostawców i uzyskać super tajny klucz API, który posiadam do ochrony zastawami przed różnymi częściami ciała. Jeśli mój klucz zostanie zgankowany, część zostanie wyrwana. Klucz API musi podróżować z moim źródłem, ponieważ jest używany w czasie wykonywania do wykonywania żądań uwierzytelnienia. W moim przypadku klucz musi znajdować się w aplikacji w pliku konfiguracyjnym lub w samym kodzie. Nie stanowi to problemu, gdy buduję i publikuję z jednego komputera. Jednak, gdy dodamy do miksu kontrolę źródła, sprawy się komplikują. Ponieważ jestem tanim draniem, zdecydowanie wolałbym korzystać z bezpłatnych usług kontroli źródła, takich jak TFS w chmurze lub GitHub. To pozostawia mi lekką zagadkę: **Jak mogę utrzymać moje ciało w stanie nienaruszonym, gdy moje klucze API znajdują się w moim kodzie, a mój kod jest dostępny w publicznym repozytorium?** Potrafię wymyślić kilka sposobów na poradzenie sobie z tym, ale żaden z nich nie jest tak satysfakcjonujący. * Mogę usunąć wszystkie prywatne informacje z kodu i edytować je ponownie po wdrożeniu. Byłoby to bardzo trudne do wdrożenia (nie będę wyszczególniał wielu sposobów) i nie jest opcją. * Mogę to zaszyfrować. Ale ponieważ muszę go odszyfrować, każdy, kto ma źródło, może wymyślić, jak to zrobić. Bezcelowy. * Mogę zapłacić za prywatną kontrolę źródła. LOL j/k wydawać pieniądze? Proszę. * Mogę użyć funkcji językowych do oddzielenia poufnych informacji od reszty mojego źródła, a tym samym trzymać je z dala od kontroli źródła. To właśnie robię teraz, ale można to łatwo schrzanić, błędnie sprawdzając tajny plik. Naprawdę szukam gwarantowanego sposobu, aby upewnić się, że nie dzielę się moimi prywatnymi ze światem (z wyjątkiem Snapchata), który będzie działał płynnie podczas programowania, debugowania i wdrażania, a także będzie niezawodny. To jest kompletnie nierealne. **Więc co realistycznie mogę zrobić?** Szczegóły techniczne: VS2012, C# 4.5, kontrola źródła będzie albo usługą TF, albo usługą GitHub. Obecnie używasz częściowej klasy do dzielenia poufnych kluczy w oddzielnym pliku .cs, który nie zostanie dodany do kontroli źródła. Myślę, że GitHub może mieć tę zaletę, że .gitignore może być użyty do zapewnienia, że częściowy plik klasy nie zostanie zaewidencjonowany, ale już to zepsułem. Mam nadzieję na "och, częsty problem, tak to robisz", ale być może będę musiał zadowolić się "to nie jest tak do bani, jak mogło", :/


title: Posiadanie miejsca startowego do kodowania witryny

text: To jest bardziej preferowane pytanie, które chciałem zadać innym programistom, aby dowiedzieć się nieco więcej o innych procesach podczas tworzenia witryny. Za każdym razem, gdy uruchamiam witrynę, czuję, że mógłbym zaoszczędzić dużo czasu, gdybym miał lepszy punkt wyjścia do pracy. Mam folder „starter”, który zawiera folder CSS, folder JS, plik index.html itp., którego używam jako przewodnika, ale wprowadzam poprawki za każdym razem, gdy tworzę witrynę, więc czuję, że kończę przez większość czasu działa od ostatniej strony, którą zbudowałem zamiast folderu startowego. Doszedłem do wniosku, że musi istnieć lepszy sposób na skonfigurowanie miejsca startowego, które pozwoli Ci wydajniej rozpocząć programowanie witryny. Czego używasz do obsługi tego w swoim przepływie pracy? Gdzie/jak zapisać fragmenty kodu do ponownego wykorzystania w różnych witrynach itp.?


title: Nauczyłem się tak dużo o programowaniu OO, że nie mam pojęcia, jak pisać kod proceduralny. Jaki jest dobry sposób na naukę?

text: Kiedy nauczyłem się programować, bardzo wcześnie nauczyłem się programowania obiektowego. Przez chwilę błądziłem z moim pięknym młotkiem, próbując użyć go do wszystkiego, częściowo dlatego, że nie miałem pojęcia, jak rozwiązać problemy w inny sposób. Gdy czytałem więcej, zacząłem zdawać sobie sprawę, że musisz użyć odpowiedniego narzędzia do właściwej pracy, i szybko zdałem sobie sprawę, że nie mam innych narzędzi, ponieważ nigdy nie nauczyłem się żadnego innego stylu! Zajmuję się programowaniem funkcjonalnym i istnieje wiele dobrych książek i artykułów na ten temat. Ale jaki jest dobry sposób na naukę programowania proceduralnego **właściwy sposób?** Mam podstawowe pojęcie o tym, jak tworzyć zmienne globalne i przekazywać stan do funkcji, ale chcę zagłębić się w kod proceduralny. Wiem, że przez większość czasu ludzie muszą uczyć się w inny sposób, a kod proceduralny jest często obwiniany za to, że nie jest w stanie utrzymać go w utrzymaniu, ale i tak chcę się tego nauczyć, więc mam więcej sposobów podejścia do problemu. OOP może być często „lepszym” wyborem, ale dobrze wiem, że to jedyna rzecz, którą znam i chcę się rozwijać. Wiem, że kod proceduralny był praktycznie jedynym dostępnym stylem programowania przez wiele lat, więc większość książek nie mówi „nauczymy cię programowania proceduralnego!” i zamiast tego po prostu powiedz, że nauczą cię programować, i zakłada się procedurę. Ci ludzie mogą po prostu znaleźć książki, które mają OOP w rozmiarze 72 na okładce i wiedzą, że tego uczy. Ale próbuję iść w innym kierunku i czuję się trochę zagubiony... Jak nauczyłeś się programowania proceduralnego? Jakie książki/języki polecacie? Czy są jakieś ważne wskazówki, jak nauczyć się **właściwego** sposobu pisania kodu proceduralnego, tak aby był jak najbardziej łatwy w utrzymaniu i piękny? Jakie wskazówki dałbyś ćpunom OO, jak pisać niesamowity kod proceduralny?


title: Programowanie funkcji w Pythonie

text: Jestem całkiem nowy w programowaniu i zastanawiałem się, czy ktoś może mi pomóc w pracy w Pythonie: Define ![$\\Phi_mx\(mn+r\)=mx\(n\)+\\frac {r}{m}\(x\(n+1\)-x\(n\)\)$](http://i.imgur.com/ZQeqIvx.gif), gdzie bierzemy pod uwagę x(0) =0, r jest zawsze dodatnie i mniejsze niż m, a wszystkie wartości n są dodatnimi liczbami całkowitymi. ![$\\Phi_m$](http://i.imgur.com/JAncAHQ.gif) pobiera ciąg liczb i wyprowadza inny ciąg. Jak mogę to zaprogramować?


title: Mentoring Millenialsi

text: Jestem w trakcie modernizacji programu praktyk programistycznych w naszej firmie, a obszarem, który najbardziej mnie pasjonuje, jest wdrażanie przyjemnego i skutecznego programu mentoringowego dla studentów/stażystów. Mamy spore różnice demograficzne wśród naszych grup programistycznych, jednak zdecydowana większość zostałaby uznana za Generation-Xers. **Z biegiem lat widziałem, jak nasi młodsi studenci/stażyści/pracownicy z pokolenia milenialsów zmagają się z problemami podczas pracy ze starszymi programistami.** Architektura oprogramowania, zasady Agile, znaczenie TDD, wzorce projektowe – wszystko to jest ważne i ja” szukam informacji na temat przekazywania tych rzeczy stażystom/studentom/młodszym profesjonalistom. Chciałbym usłyszeć jakieś dobre wskazówki dotyczące mentoringu dla przyszłych programistów z pokolenia milenialsów, zwłaszcza studentów/stażystów. Co ci się sprawdziło, a co nie? Jakie spostrzeżenia poczyniłeś, które nauczyły Cię czegoś o młodszym programiście, o tym, jak myśli, co cenią itp. Jak możemy sprawić, by było to doświadczenie i branża, której częścią są podekscytowani? Bardzo dziękuję za wszelkie uwagi.


title: Struktura encji oddzielająca jednostki dla wdrożenia specyficznego dla produktu i klienta

text: Projektuję aplikację z zamiarem uczynienia z niej linii produktów. Chciałbym rozszerzyć funkcjonalność na wszystkie warstwy, a pierwsza walka dotyczy modeli domen. Na przykład podstawowa funkcjonalność miałaby encję o nazwie Invoice z kilkoma standardowymi polami, a następnie wymagania klienta dodadzą do niej nowe pola, ale nie chcę dodawać do podstawowej klasy Invoice. Dla każdego klienta mogłem użyć specyficznego dla klienta DbContext i wstrzyknąć poprawny kontekst z wstrzykiwaniem zależności. Również każdy klient otrzyma własną klasę publiczną wdrożenia Product.Domain.Invoice { public int InvoiceId { get; ustawić; } // Inne pola } Jak podejść do tego problemu? Rozwiązanie 1 nie działa, ponieważ Entity Framework nie zezwala na te same proste klasy nazw. public class CustomerA.Domain.Invoice : Product.Domain.Invoice { public User Reviewed By { get; ustawić; } public DateTime? Zrecenzowano w dniu { get; ustawić; } } Rozwiązanie 2 Utwórz oddzielną tabelę i połącz ją z tabelą domen podstawowych. Ponowne korzystanie z usług i kontrolerów może być trudniejsze. public class CustomerA.Domain.CustomerAInvoice { public Product.Domain.Invoice Faktura { get; ustawić; } public Użytkownik zrecenzowany przez { get; ustawić; } public DateTime? Zrecenzowano w dniu { get; ustawić; } }


title: Języki programowania, języki pozycyjne i języki naturalne

text: Niektóre języki programowania są wzorowane na kodzie maszynowym, na przykład języki asemblera. Inne języki są wzorowane na języku naturalnym, języku angielskim. Inne nie są wzorowane ani na kodzie maszynowym, ani na języku naturalnym. Języki takie jak PROLOG, na przykład, nie stosują żadnego z tych modeli. Natknąłem się na moduł Perla Lingua::Romana::Perligata, który pozwala pisać programy w składni bardzo podobnej do łacińskiej. Czy istnieją języki programowania o mniejszej składni pozycyjnej? Czy istnieją inne języki lub moduły, które umożliwiają pisanie w składniach inspirowanych innymi językami naturalnymi, takimi jak francuski, hebrajski czy farsi? Na Wikipedii jest bardzo długa lista, ale większość z tych projektów jest martwa. Jest powiązane pytanie na StackOverflow. Zaakceptowana odpowiedź to „Użyj Google”.


title: Gdzie umieścić test profilu?

text: Mam aplikację z wieloma wątkami, które mogą być uruchamiane na innym sprzęcie. Aby pomóc w dostrajaniu na innym sprzęcie, chciałbym stworzyć "profiler", który może automatycznie uruchamiać ustaloną ilość danych przy użyciu różnej liczby wątków. Myślałem o kilku sposobach zaimplementowania tego: 1. To test, więc umieść go w testach jednostkowych 2. Jest to również część aplikacji, więc uczyń go częścią klasy najwyższego poziomu, w której działa aplikacja 3. Jest pomocnika, więc stwórz zupełnie nową klasę `Profiler` Skłaniam się ku opcji 2, ponieważ uważam, że jest najprostsza do zaimplementowania i wydaje się dobrze pasować. Czy ktoś ma jakieś inne pomysły lub uwagi?


title: Dlaczego wzory GRASP są mniej znane niż wzory GOF?

text: Wzorce projektowe pomagają programistom poprawić jakość ich projektów, ale tylko wzorce GOF są bardzo znane, a wzorce takie jak GRASP, które dają dobre koncepcje, takie jak Information Expert, niskie sprzężenie i wysoka spójność, są mniej znane. Myślę, że wzorce GRASP mogą być dobrym wprowadzeniem do wzorców dla studentów i programistów, lepiej opanują wzorce GOF, jeśli znają wzorce GRASP.


title: Zrozumienie wyjątkowych przypadków

text: Studiowałem użycie wyjątków w różnych projektach php (takich jak Doctrine i Zend Framework). Wydaje się, że wyjątki są zgłaszane, gdy występują nietypowe dane wejściowe/stan. Doskonałym przykładem jest Doctrine zgłaszająca wyjątek, gdy próbujesz użyć nieprawidłowego ciągu zapytania. Myślę, że twórcy doktryny api zrozumieli, że po pierwsze nie można odpytywać danych za pomocą nieprawidłowej instrukcji DQL, a programista powinien natychmiast zostać ostrzeżony, że wystąpił błąd, a nie pozwolić na kontynuowanie wykonywania z możliwością kodu błędu nie sprawdzane. Założę się też, że ułatwia to odczytywanie kodu. Nie mogę wymyślić sytuacji, w której chciałbyś użyć nieprawidłowej instrukcji DQL, z wyjątkiem testów jednostkowych. Ponieważ jest to prawdą, lepiej unikać nękania kodu sprawdzaniem wartości NULL/błędów i używać wyjątków. Czytałem w książkach, że nie należy zgłaszać wyjątków podczas sprawdzania poprawności danych wprowadzonych przez użytkownika. Widziałem przykłady, gdzie złamana jest wytyczna. Jednym z przykładów jest framework Zend. W przypadku podania nieprawidłowego kontrolera lub nazwy akcji zgłaszany jest wyjątek. W przeciwieństwie do doktryny, użytkownik ma bardziej bezpośrednią kontrolę nad tego rodzaju danymi wejściowymi. Wiem, że możesz skonfigurować kontroler błędów i ustawić komunikat 404 lub co masz, ale jestem ciekawy, dlaczego użyli wyjątku w tym scenariuszu? Myślę, że można argumentować, że Zend Framework nie wie, jak kontynuować przetwarzanie żądania. Ostatni przykład Czy napisałem funkcję, która zwraca część html na podstawie danego typu zasobu. Ten typ zasobu jest zakodowany na stałe i wysyłany, gdy użytkownik wchodzi w interakcję ze stroną internetową (np. klikając przycisk, aby wyświetlić formularz w celu wprowadzenia danych). Nie _oczekuję_, że użytkownicy będą grzebać w typie żądania. W normalnych warunkach pracy typ zasobu powinien być prawidłowy. Aby uporządkować logikę, zamierzałem zgłosić wyjątek, jeśli nie znaleziono określonego formularza. Ma to głównie na celu znalezienie poprawnej formy powiązanej z typem zasobu, aby mogła nastąpić prawidłowa walidacja. Czy to brzmi jak prawidłowy przypadek użycia dla wyjątku? W tej chwili jest to dość trywialne, ale planuję zaimplementować spokojnego konsumenta i ponowne użycie funkcji do mapowania zasobów do ich usług walidacji byłoby bardzo przydatne. Mogę wtedy złapać wyjątek i na podstawie konsumenta zwrócić komunikat o błędzie odpowiedni dla typu żądania...


title: Czy drzewo z węzłami, które mają odniesienia do rodzica, nadal jest drzewem?

text: Jeśli odwołujemy się do rodzica dla każdego węzła w drzewie, czy nadal mamy drzewo (z definicji)? Definicja w Wikipedii to: > W informatyce drzewo jest szeroko stosowanym abstrakcyjnym typem danych (ADT) lub > strukturą danych implementującą to ADT, która symuluje drzewo hierarchiczne > struktura z wartością korzenia i poddrzewami potomnymi, reprezentowana jako zbiór > połączonych węzłów. ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/SXgBW.png)


title: Czy duże lub stare bazy kodów powinny być łatwe w nawigacji?

text: Jestem studentem studiów licencjackich informatyki, który obecnie odbywa staż w firmie produkującej i obsługującej duże aplikacje internetowe dla przedsiębiorstw. Cieszę się, że mogę zobaczyć, jak oprogramowanie jest tworzone w prawdziwym świecie, i czuję się bardzo szczęśliwy, że znalazłem firmę, która oferuje szansę nie tylko na utrzymanie i rozszerzenie istniejących funkcji, ale także na opracowanie zupełnie nowych funkcji produktu. Mimo wszystko zdaję sobie sprawę, że jest to bardzo, bardzo mało prawdopodobne, aby był to doskonały przykład prawidłowego rozwoju. Wręcz przeciwnie, w rzeczywistości. Czuję, że dużo się uczę z mojego doświadczenia tutaj i nie chcę uczyć się niewłaściwych rzeczy ani nabierać złych nawyków od kolegów, z których później trudno byłoby się pozbyć. Przeważnie łatwo jest powiedzieć, co jest dobre, a co nie - na przykład zasięg testu jednostkowego tutaj praktycznie nie istnieje z różnych powodów (głównie kiepskie wymówki połączone z jednym lub dwoma ważnymi punktami). Ostatnio jednak zauważyłem regularne zjawisko, którego nie jestem pewien. Za każdym razem, gdy zaczynamy nowy projekt, naturalnie musimy znaleźć odpowiedni kod, który wymaga rozszerzenia, zmiany lub usunięcia. Wydaje mi się, że przez większość czasu, aby znaleźć coś, co nie znajduje się w najczęściej używanych sekcjach aplikacji, ludzie muszą znaleźć się w kodzie. Jest jeden lub dwóch technologów, którzy dobrze znają swoją część kodu, ale nawet oni czasami mają problemy i muszą spędzać dużo czasu na szukaniu tego, czego potrzebują, lub zwrócić się do kogoś, kto ostatnio edytował tę część kodu ( jeśli ktoś) o pomoc. Mówiąc długi czas, nie mam na myśli godzin (zazwyczaj), ale wydaje mi się, że dobry kod bazowy byłby w najgorszym przypadku możliwy do nawigowania do dowolnego punktu w ciągu kilku minut, dla każdego, kto choć trochę zna ten system. Więc moje pytanie. Czy powyższy problem jest spowodowany słabo ustrukturyzowanym kodem? Ewentualnie, czy to zasługa programistów, którzy nie mają wystarczającej wiedzy o kodzie? A może jest to po prostu nieuniknione w dużych aplikacjach, niezależnie od tego, ile pracy trzeba włożyć w utrzymanie przejrzystej struktury plików? A może… czy po prostu marnuję swój czas na temat, który naprawdę nie ma znaczenia?


title: Kierownik techniczny (nie główny architekt) zespołu programistycznego

text: Czy możesz być kierownikiem technicznym zespołu programistów, nie znając technologii, z którą pracują? Jestem bardzo techniczny, przez jakiś czas byłem kierownikiem technicznym, teraz jestem menedżerem, a nowy zespół podlega mi teraz, administracyjnie i technicznie. Problem polega na tym, że duża część używanej technologii jest stara i archaiczna (delphi). Czy jest możliwe, aby ktoś z „zerowym” doświadczeniem kierował tym zespołem? Jakie są twoje doświadczenia?


title: Czy języki dynamiczne są w niekorzystnej sytuacji dla programowania zwinnego?

text: Z tego, co wyczytałem, programowanie zwinne często wiąże się z refaktoryzacją lub inżynierią wsteczną kodu na diagramy. Oczywiście jest o wiele więcej, ale jeśli weźmiemy pod uwagę praktyki, które opierają się na tych dwóch metodach, czy języki dynamicznie typowane są w niekorzystnej sytuacji? Wygląda na to, że języki ze statycznym typowaniem znacznie ułatwiłyby refaktoryzację i inżynierię wsteczną. Czy refaktoryzacja lub (zautomatyzowana) inżynieria wsteczna jest trudna, jeśli nie niemożliwa w dynamicznie typowanych językach? Co mówią realne projekty na temat wykorzystania dynamicznie typowanych języków w metodyce zwinnej?


title: Zwinne pomysły retrospektywne

text: Jestem Juniorem w miejscu pracy i przez ostatni rok byłam na kilku naszych retrospektywach. Poproszono mnie o przeprowadzenie własnej retrospektywy. Do tej pory zrobiliśmy „kapelusze (czerwone, zielone, białe itp.)”, „szalony, smutny, zadowolony”, „wyobrażając sobie przejście do końca następnego sprintu i dyskutowanie, jak mogło się to potoczyć”. Chciałbym spróbować czegoś nowego. Jeśli ćwiczysz agile w swoim miejscu pracy, czego używasz i czy poleciłbyś wypróbowanie tego na retrospektywie? Dzięki, Kohan


title: Co oznacza „przesyłanie strumieniowe w oknie”?

text: Pytałem więc wokół listy dyskusyjnej Mercurial o porównywanie binarne i obsługę łat i otrzymałem następujące przykłady: * podejścia oparte na całym pliku (classic diff, bsdiff, wewnętrzny bdiff Mercurial) * metody przesyłania strumieniowego w oknie (rsync, xdelta, libxdiff) w tym kontekście oznacza „streaming w oknie”? (i na ogół)


title: Kontroler frontowy w PHP

text: Kiedy czytasz o tworzeniu aplikacji internetowych, często spotykasz się ze słowami „kontroler frontowy” i „pojedynczy punkt wejścia”. W moim rozumieniu chodzi o zapewnienie jednej lokalizacji, w której decydujesz, co robić w swoim programie. To wszystko jest ładne i dobrze w teorii, ale jestem zdezorientowany, jak by to wyglądało w rzeczywistości. Przypuszczam, że w OOP twój "kontroler" byłby zwykle tworzony w "index.php" lub innym pliku, który jest twoim "punktem wejścia". Ale jak stąd przejść i jak wygląda klasa kontrolera? Czy jest to coś w stylu tego: //Atrapa-kodu, to tylko stworzenie klasy punktowej Controller { //pierwsza funkcja, która zostanie nazwana public function main() { switch($appAction) { case "login": userLogin( ); przerwanie; case "view" : viewArticle(); przerwanie; //... } } protected function userLogin() { //Oczyszczanie danych wprowadzanych przez użytkownika //tworzenie instancji potrzebnych klas itp. } //... } czy też cała koncepcja była kompletnie błędna? To jedyna rzecz, jaką mogę sobie wyobrazić, ale po prostu nie jestem pewien, czy jest to poważny błąd w takim podejściu do tego, czy po prostu źle zrozumiałem przeznaczenie przedniego kontrolera.


title: Jak zarządzać wieloma poświadczeniami bazy danych w wielu projektach

text: Mamy 10 oddzielnych projektów, które mają dostęp do tej samej bazy danych. Początkowo wszystkie 10 projektów miało zakodowane w nich dane uwierzytelniające bazy danych. Zdecydowałem się przenieść poświadczenia do metody narzędziowej i zamiast tego wywołać ją we wszystkich projektach. Na przykład public String getDBUser() { return "nazwa użytkownika"; } Więc zamiast zakodować go na sztywno w 10 miejscach, koduję go na sztywno w jednym miejscu. Wszystko było w porządku. Przewijam kilka miesięcy do przodu i wpadam na mur z tym rozwiązaniem, ponieważ teraz istnieją różne poświadczenia w zależności od serwera bazy danych, z którym próbujemy się połączyć. Dla kontekstu próbuję ustawić odpowiednio odseparowane środowiska testowe/produkcyjne, ale serwery mają różne nazwy użytkownika i hasła. Jednym z rozwiązań jest po prostu zmiana danych uwierzytelniających, aby były takie same, ale wyobrażam sobie, że czasami nie jest to możliwe i jeśli wpadnę w taką sytuację, chciałbym być przygotowany. Jaki jest dobry sposób zarządzania wieloma poświadczeniami bazy danych w wielu aplikacjach?


title: Klasa jako obiekt pierwszej klasy

text: Czy klasa może być obiektem pierwszej klasy? Jeśli tak, jak wyglądałaby implementacja? Chodzi mi o to, jak mogłaby wyglądać składnia do dynamicznego tworzenia nowych klas? EDYCJA: Mam na myśli, jak mogłaby wyglądać przykładowa składnia (przepraszam, angielski nie jest moim językiem ojczystym), ale nadal uważam, że to pytanie ma sens - jak nadać tę funkcjonalność przy zachowaniu spójności językowej. Na przykład, jak tworzysz odniesienie dla nowego typu. Czy odwołujesz się również do obiektu pierwszej klasy, a następnie używasz czegoś takiego: Reference<newType> r = new Reference<newType>(); r.set(wartość); Cóż, może to być bałaganiarskie, więc możesz po prostu zmusić użytkownika do używania referencji typu Object dla dynamicznie tworzonych klas, ale wtedy tracisz sprawdzanie typu. Myślę, że stworzenie do tego zwięzłej składni jest interesującym problemem, którego rozwiązanie mogłoby doprowadzić do lepszego projektowania języka, być może języka, który sam jest metajęzykiem (zastanawiam się, czy jest to możliwe).


title: Jak bardzo programiści powinni wchodzić w interakcje z klientami?

text: Na moim wydziale pojawiła się dyskusja filozoficzna, na temat której chciałbym uzyskać opinię p.se. Jesteśmy 6-osobowym działem rozwoju w 60-osobowym sklepie IT. Wszystkie inne działy rozwijają się SZYBKO, a nasz od kilku lat jest tej samej wielkości (i nie w pełni zajęty w tym rozmiarze). Mój menedżer i gość od oldschoolowego mainframe'u twierdzi, że programiści nigdy nie powinni mieć ŻADNEGO kontaktu z klientem. Wszystkie interakcje z klientem powinny być łagodzone przez warstwę zarządzania projektami. Twierdzi, że pozwala to koderowi skupić się na KODOWANIU i chroni relacje biznesowe z klientem przed tendencjami do spektrum autyzmu Joe Average Code Monkey. (Moje słowa, nie jego). Jego szef, właściciel firmy, powiedział mu dziś rano, że każda osoba w firmie musi myśleć o sobie jako o rozszerzeniu działu sprzedaży i musi cały czas słuchać możliwości sprzedaży dodatkowej. W tym celu uważa, że klienci powinni mieć mniej lub bardziej pełny dostęp bezpośrednio do programistów, po części po to, aby deweloperzy mieli możliwość usłyszenia o możliwościach sprzedaży. Ja jestem gdzieś pośrodku. Myślę, że fajnie jest do pewnego stopnia osłaniać deweloperów przed klientami, ale w praktyce nigdy nie będzie to całkowite. I tak, każda praca w firmie obejmuje sprzedaż, ale to nie musi oznaczać, że wszyscy mają do tego takie same szanse. EDIT: Nie jesteśmy zwinnym sklepem. Niektórzy z nas (kaszle) chcieliby iść w tym kierunku, ale na razie załóżmy, że jest to tradycyjny sklep ze stałą ofertą. EDIT2: Żart autystyczny nie był śmieszny. Rozumiem. Całkowicie możliwe, że żarty na temat autyzmu nigdy nie są. To powiedziawszy: są programiści, którzy potrafią dobrze reprezentować siebie i swoich pracodawców, oraz programiści, którzy (obecnie) nie mają takiej zdolności. Mój menedżer naprawdę niepokoi się tym, jak firma byłaby reprezentowana, gdyby wszyscy programiści byli strukturalnie upoważnieni do bycia przedstawicielami firmy. Czytając twoje odpowiedzi, staje się coraz bardziej jasne, że prawdziwe pchanie i ciągnięcie występuje tutaj między wodospadem a zwinnością.


title: Elastyczne środowiska programistyczne do tworzenia wspólnej bazy kodu dla tabletów (iPad/Android) i komputerów x86

text: Mam nadzieję, że nie zostanie to oznaczone jako zbyt niejasne, ale naprawdę szukam sugestii od każdego, kto ma doświadczenie w tego rodzaju sytuacji. Pracuję dla grupy, która opracowuje bardzo wyspecjalizowane obliczenia inżynierskie dla platform Intel x86. Nie zamierzamy dalej używać tego istniejącego kodu x86. Zamiast tego chcielibyśmy uruchomić nową bazę kodu, która będzie mogła być ukierunkowana zarówno na komputery PC x86, jak i iPady i/lub tablety z systemem Android. Oczywiście kod interfejsu użytkownika będzie musiał być utrzymywany niezależnie. Podejrzewam jednak, że kod inżynierii backendu, który chcemy zachować wspólny, można udostępnić wszystkim platformom. Chciałbym wiedzieć, czy istnieją jakieś środowiska programistyczne lub techniki uproszczenia tego wieloplatformowego rozwoju ze wspólną bazą kodu backendu, czy też konieczne będzie rozwijanie tego kodu backendu dla każdej platformy niezależnie. Daj mi znać, jeśli potrzebujesz wyjaśnienia! Dzięki **EDYTUJ** Na przykład musielibyśmy napisać dużą ilość kodu w C. Czy to prawda, że zarówno kompilator Object-C pakietu iOS SDK może zbudować natywny kod iOS przy użyciu (względnie) tego samego kodu C, którego używalibyśmy do zbudować natywny kod systemu Windows przy użyciu MSVC? Pamiętaj, że kod nie musiałby polegać na _specjalistycznych_ funkcjach zależnych od systemu operacyjnego. Czy są jakieś narzędzia pomagające w tego rodzaju rozwoju międzyplatformowym, które mogą wymagać wielu kompilatorów? a może jakieś indywidualne kompilatory, które mogą działać na obu platformach?


title: Dlaczego Objective-C nie jest szeroko stosowany poza środowiskami Cocoa?

text: Objective-C cechuje się przyjemną orientacją obiektową, prostotą, elegancją i (jako nadzbiór C) niskim poziomem umiejętności. Mogłoby się wydawać, że jest to prosta, nowoczesna alternatywa dla C++, której wiele osób szuka i próbuje znaleźć w Go. Ale jest używany tylko w środowiskach Cocoa i post-NextSTEP, a nawet w tym przypadku jest postrzegany bardziej jako obciążenie ze względów historycznych niż jako optymalny wybór. Dlaczego nie jest on wtedy szerzej stosowany? Jakie są jego problemy?


title: Dlaczego rodzina c jest standardowym schematem studiów CS dla programów Matematyka/CS zamiast rodziny LISP?

text: Zapoznałem się z LISP-em dla celów samodoskonalenia. Jedną z rzeczy, które zauważyłem, jest to, że LISP mieści się znacznie bardziej w paradygmacie matematyki niż powiedzmy C. Składnia i struktura projektu wydają się bezpośrednio odzwierciedlać rzeczywisty model matematyczny algorytmu. Nie ma dla mnie sensu, dlaczego nawet dobre programy CS oparte na matematyce uczą się C zamiast LISP. Myślę, że LISP bardziej bezpośrednio wykorzystuje wyższe koncepcje matematyczne niż C. Nie mówię, że nie można modelować struktur matematycznych w C. Po prostu zauważam, że LISP wydaje się być zaprogramowany na stałe dla matematyków. Przeczytałem wiele tyrad Joela Spolsky'ego na temat szkół JAVA i innych -- i zgadzam się z jego oceną -- ale moja szkoła nie uczyła JAVA właśnie z tego powodu. Byli rygorystyczni w nauczaniu podstawowych pojęć, takich jak wskaźniki, projektowanie algorytmów, rekurencja, a nawet instrukcje montażu. Jednak zrobili to wszystko w C i c++. Czy ktoś zna przyczyny tego i/lub jego historię?


title: Pytanie o złożoność cyklomatyczną

text: Jestem nowy w statycznej analizie kodu. Moja aplikacja ma Cyclomatic złożoność 17 754 linii kodu. Sama aplikacja to tylko 37 672 linijki kodu. Czy można powiedzieć, że złożoność jest wysoka w oparciu o wiersze kodu? Co dokładnie mówi mi złożoność Cyklomatyczna?


title: Czy jako programista C# nauczyłbyś się Java, aby programować na Androida, czy zamiast tego używał MonoDroid?

text: Uważam się za całkiem dobrze zorientowanego w języku C#. W tej chwili jest to mój język z wyboru i to na nim tkwi w zasadzie całe moje doświadczenie zawodowe. Mimo to dziwi mnie istnienie projektu MonoDroid. Zawsze rozumiem, że C# i Java są _bardzo_ bliskie. Na przykład, jeśli znasz jedno, możesz bardzo szybko nauczyć się drugiego. Tak więc, gdy zastanawiałem się nad stworzeniem mojej pierwszej aplikacji na Androida, po prostu założyłem, że zapoznam się z Javą na tyle, aby zacząć, a potem po prostu się uczyć. Czy nie miałoby to większego sensu niż użycie MonoDroid, który prawdopodobnie jest mniej bogaty w funkcje niż Java Android SDK i i tak wymaga uczenia się własnego interfejsu API (choć interfejsu .NET API)? Po prostu czuję, że lepiej byłoby nauczyć się nowego języka (i to niezwykle popularnego) i zdobyć w nim trochę doświadczenia – kiedy i tak jest tak blisko tego, co już znasz – niż trzymać się technologii, której już znasz bez zdobywania cennych umiejętności. Może rażąco przeinaczam przeciętnego potencjalnego użytkownika MonoDroid. Może to bardziej dla osób, które mają doświadczenie w Javie i .NET i po prostu wolą .NET. A może (w rzeczywistości jest to prawdopodobne) istnieją inne czynniki, których po prostu nie brałem pod uwagę. Zastanawiam się tylko, dlaczego miałbyś używać MonoDroida zamiast po prostu programować na Androida przy użyciu Javy?


Z http://www.microsoft.com/download/en/details.aspx?id=28942 > ASP.NET MVC 4 zawiera również ASP.NET Web API, platformę do tworzenia i > korzystania z usług HTTP, które mogą dotrzeć do szerokiego zakres klientów, w tym > przeglądarek, telefonów i tabletów. ASP.NET Web API doskonale nadaje się do tworzenia > usług zgodnych ze stylem architektonicznym REST, a ponadto obsługuje wzorce RPC >. Jeśli ASP.NET MVC 4 obsługuje komunikację w stylu RPC, co to oznacza dla WCF? Na jakiej podstawie powinniśmy wybrać mechanizm RPC WCF lub ASP.NET MVC Web API?


title: Jak szybko nauczyć się kompilowania linków, makefile? Jakieś rekomendacje książkowe?

text: Jestem bardzo dobry w programowaniu w C++, ale jeśli chodzi o linkowanie i inne ważne rzeczy, czuję się bardzo ignorantem. Chcę uczyć się allegro bez marnowania czasu. Dlatego zasugeruj książkę lub zasób, aby nauczyć się pojęć wymienionych powyżej. Z góry dziękuję.