title: Dlaczego SQL jest znany jako język oparty na relacjach/funkcjonalny?

text: Dowiadujemy się, że większość języków jest klasyfikowana jako jeden z dwóch, „oparty na relacji” lub „wysoki poziom”. Nigdy wcześniej nie używałem SQL, ale czytając jego składnię, wydaje się bardziej, że jest to składnia imperatywna / wysokiego poziomu niż oparta na funkcji / relacji (Lisp, Haskell)? Albo może być tak, że moja interpretacja notatek z wykładów mojego profesora jest błędna... ale zdecydowanie wymienia SQL jako jeden z języków opartych na relacjach (w przeciwieństwie do języków wysokiego poziomu) i utożsamia relacyjny z funkcjonalnym... a może dlatego, że nie rozumiem **dlaczego fakt, że SQL zajmuje się relacyjnymi bazami danych sprawia, że język funkcjonalny powinien być implementowany? (i dlaczego „oparte na relacji” równa się „funkcjonalne” przy kategoryzowaniu języków programowania?)** Dzięki :)


title: Stos WWW C++, czy istnieje?

text: Java to jsps i serwlety (lub framework, taki jak Spring) działający na JVM i tomcat (lub glassfish itp.). C# byłoby asp i C# uruchomione w ramach dot.net i IIS? (Nie mam doświadczenia z tym, proszę poprawić i ulepszyć moją terminologię) Czy istnieje odpowiednik dla C++? Mógłbym szczęśliwie wywołać C++ z serwletu/kontrolera java, ale zastanawiałem się, czy istnieją istniejące frameworki i biblioteki specjalnie do tworzenia logiki biznesowej w C++ z interfejsem internetowym.


title: Czy są jakieś dobre biblioteki Pythona do programowania GUI na MAC i Windows?

text: Potrzebuję zestawu narzędzi / frameworka, którego mogę użyć do tworzenia aplikacji GUI zarówno na Macu, jak i Windowsie, bez zbytniego napychania się. Jacyś ewidentni kandydaci?


title: Jak nauczyć się i wprowadzić scrum w małym startupie?

text: Za kilka miesięcy znajomy założy swoją startową firmę programistyczną, a ja będę architektem oprogramowania z jednym dodatkowym programistą. Chociaż nie mamy prawdziwego codziennego doświadczenia ze zwinnymi metodami, przeczytałem o nich wiele „przeglądowych” materiałów i mocno wierzę, że są dobrym - jeśli nie jedynym - sposobem tworzenia oprogramowania. Więc w tej firmie chcę iść na iteracyjny, zwinny rozwój od pierwszego dnia, najlepiej coś lekkiego. Myślałem o Scrumie, ale pytanie brzmi: jaki jest najlepszy sposób dla mnie i moich kolegów, aby się o nim dowiedzieć, wprowadzić (jakie techniki, kiedy itp.) i ocenić, czy powinniśmy go zachować? Tło, które może być istotne: wszyscy jesteśmy doświadczonymi programistami w tym samym wieku i podobnym profesjonalnym nastawieniem. Pracowaliśmy razem w przeszłości, a później w kilku różnych firmach, głównie z naciskiem na Java/.NET. Niektórzy są trochę zaznajomieni z ogólnymi ideami z ruchu agile. W tym startupie mam ogromną władzę nad narzędziami, metodami i procesem. Produkt startupu będzie rozwijany od podstaw i może być klasyfikowany jako middleware. Mamy kilka kontaktów z „klientami” w branży, którzy mogą wnieść wkład, gdy tylko dojdziemy do etapu alfa.


title: Czy mogę używać biblioteki LGPL bez zwalniania źródła dla reszty mojej aplikacji, jeśli dynamicznie się do niej odwołuję?

text: Jestem trochę zdezorientowany co do tego, czego nie wolno mi robić z biblioteką LGPL, której zamierzam używać w małej komercyjnej aplikacji C++, którą rozwijam. Moje obecne rozumienie, chociaż nie wiem, czy mam rację, jest takie, że wolno mi korzystać z biblioteki bez zwalniania źródła dla reszty mojej aplikacji, jeśli dynamicznie odwołuję się do biblioteki. Czy ktoś wie, czy to prawda? Czy są jakieś ograniczenia dotyczące sposobu odwoływania się do biblioteki? Dziękuję! Nie jestem native speakerem i nie rozumiem w pełni licencji.


title: Języki programowania inne niż angielski

text: Czy istnieje ostateczna lista języków programowania, w których słowa kluczowe i wyrażenia w kodzie języka nie są używane w języku angielskim? Na przykład wiem, że Rosjanie w czasach zimnej wojny rozwijali własne komputery na swojej architekturze. Jestem zainteresowany, czy istnieje lista języków programowania, które nie są oparte na języku angielskim?


title: Dlaczego metody są uważane za atrybuty klasy w Pythonie?

text: Przeczytałem w książce, że zarówno _metody_, jak i _pola_ są uważane za _atrybuty_ klasy w Pythonie. Jednak ostatnio mój przyjaciel powiedział mi, że metody **nie** mogą być uważane za _atrybuty_ klasy. Potem postanowiłem sprawdzić to ponownie i znalazłem to pytanie wymienione na Wikipedii, mówiące, że jest to „tradycja” Pythona, aby odnosić się do metod jako atrybutów, w przeciwieństwie do innych języków programowania obiektowego. Więc moje pytanie brzmi: dlaczego metody są uważane za atrybuty klasy wraz z polami w Pythonie w przeciwieństwie do innych języków? Dziękuję Ci!


title: Dynamiczne generowanie HTML i CSS

text: Ręczne pisanie CSS jest dla mnie niezwykle żmudne. Natknięcie się na koncepcję, taką jak _fluid_ , sprawia, że chcę pisać wszystkie moje witryny tak, aby CSS ładnie zmieniał rozmiar i wyglądał tak samo w różnych przeglądarkach. Moje pytanie do Ciebie brzmi: **Czy mój projekt można wygenerować programowo?** np.: #include <css> #include <html> #include <wektor> #include <string> int main(void) { HTML::HTML page ; page.title("mój tytuł"); strona.nagłówek.czcionka(15); std::vector<std::string> para = <wektor akapitów>; CSS:: układ CSS; układ.siatka(2,2); layout.fill(xcoords_as_percentage, ycoords_as_percentage); page.use_css(układ); for(int i=0; i<para.size() && y!=grid.y.size()+1; i++, x++) { if(x==grid.x.size()) x=0, y++; page.grid[x][y]=para[i]; } page.header1("Jestem header1"); page.footer("Jestem stopką strony"); layout.order(page.header1[0], page.grid.all(), page.footer()); generate_html("indeks.html"); generate_css("układ.css"); } Pozwoli mi to skoncentrować się na rzeczywistej zawartości, abstrahując od „Och, IE7 nie obsługuje tej opcji, więc zrób ten hack…” FYI: Koduję rzeczywistą witrynę w Django (Python), więc Generator HTML/CSS nie musi być w C++. Mam świadomość, że praca w tym kierunku jest wykonywana w frameworku C++ Wt


title: Zgłoś się do mojego kodu źródłowego na podstawie kodu GPL

text: Prowadzę publiczną stronę internetową opartą na Drupalu. Drupal jest licencją GPL 2 lub 3. Oczywiście napisałem własny kod, który współdziała z kodem Drupala (moduły). Czy ktoś może napisać do mnie e-mail i poprosić o kod źródłowy tego mojego niestandardowego kodu? Innymi słowy, czy muszę gdzieś opublikować mój kod?


title: Przetwarzanie plików csv (alternatywa dla logiki biznesowej w DB)

text: Pracujemy nad systemem realizacji dla księgarni internetowej. Codziennie otrzymujemy kilkadziesiąt plików CSV (około 90 plików) z danymi o zakupionych zamówieniach. **Przykład:** Identyfikator zamówienia | Tytuł Książki | Ilość | Cena | Nazwa kupującego | ... 1 |Igrzyska głodowe | 1 | 10 | Jan Kowalski | ... 1 | Egzorcysta | 2 | 25 | Jan Kowalski | ... 2 | Superman | 1 | 5,5 | Jane Nos | ... **Co obecnie robimy:** Dane muszą zostać przetłumaczone na naszą domenę na encję `Order`, `OrderItem`,...itd. Wczytujemy plik do fikcyjnych tabel, a następnie używamy bardzo złożonych zapytań do wypełniania tabel `Orders` i `OrderItems`. **Problem:** Cała logika biznesowa znajduje się w bazie danych (w zapytaniach), więc ich testowanie jednostkowe to koszmar. Ponadto poproszono nas o zmianę używanej bazy danych (nie dokładnie, ale coś przerażająco podobnego) **Co próbowaliśmy:** Przechodzimy na podejście DDD, w którym model domeny jest rdzeniem aplikacji, która przechowuje wszystkie logika i walidacja. Próbowaliśmy przeanalizować plik wiersz po wierszu i utworzyć odpowiednie jednostki oraz odpowiednio je zweryfikować, a następnie zapisać w bazie danych. Spowodowało to tysiące wywołań do bazy danych, a czasami serwerowi zabrakło pamięci, bo tysiące rekordów (około 90 tysięcy rekordów/pliku) w jednym pliku. Wiem, że ta domena jest bardzo stara i ktoś musiał znaleźć lepszy sposób na poradzenie sobie z takim zadaniem. Jak przetwarzasz tak duże pliki w swojej domenie bez pogorszenia wydajności? AKTUALIZACJA * Używamy bazy danych MySql z PHP i Apache. * Plik CSV jest ładowany do fikcyjnej tabeli przy użyciu czegoś podobnego do tego: załaduj dane lokalny plik 'orders.csv' do tabeli dummyOrders pola zakończone ',' ujęte w '"' wiersze zakończone '\n' (orderId, bookkTitle ,Ilość, Cena,Nazwa Kupującego,...)


title: Jak obsłużyć zawartość statyczną z sieci CDN z uwierzytelnianiem?

text: Posiadam witrynę internetową, która umożliwia przesyłanie treści przez użytkowników. Część projektu do tej pory obejmuje przechowywanie zawartości użytkownika na serwerze NAS, który został skonfigurowany z oddzielną pulą aplikacji w usługach IIS, która ma wyłączone skrypty, krótszą żywotność, brak plików cookie itp. dla zachowania typu CDN jako subdomeny (statyczna). domena.com a www.domena.com). Mam pełną kontrolę nad tym procesem i wszystkimi instancjami. Decyzją projektową za tym było umożliwienie tańszego przechowywania przesłanych dokumentów (zamiast wwwroot lub bazy danych) i pomoc w złagodzeniu niektórych problemów związanych z bezpieczeństwem poprzez uniemożliwienie skryptów. Obawiam się teraz, że sieci CDN i ta konfiguracja są z natury bardzo liberalne i nie wymagają sprawdzania ani walidacji. Czy istnieją jakieś _racjonalnie skuteczne_ środki zniechęcające do bezczynnego udostępniania treści tego użytkownika? Wiem, że nic nie powstrzyma zdeterminowanych lub złośliwych osób, ale chcę przynajmniej uniemożliwić dostęp do tej zawartości użytkownika na dużą skalę dla ogólnej populacji. Wszystkie linki do treści będą znajdować się za zaporą w subdomenie „www”, ale sama treść będzie znajdować się za subdomeną „static”. Pomysły, które miałem do tej pory: 1. Sprawdzanie referera HTTP 2. Zaciemnione nazwy plików (wiem, wiem...) 3. Testowanie plików cookie z przepisywaniem URL? (IIS8) 4. ... 5. Zapytaj o wymianę stosu


title: Złożona sytuacja serializacji i deserializacji xml

text: Rozważam przekazywanie xml tam iz powrotem dla komunikatów o błędach, ale każdy błąd ma różne scenariusze. jedna sytuacja polega na przekazaniu porównania z tekstem diffed, podczas gdy inne są tak proste, jak przekazanie wiadomości tekstowej. Jakiego rodzaju strategii serializacji/deserializacji mogę użyć w takim scenariuszu? Głównym problemem w takim scenariuszu jest to, że obiekt różni się w zależności od przypadku i musi istnieć mechanizm identyfikacji jego typu. Serializacja xml jest dość prosta: * http://stackoverflow.com/questions/11283040/deserialize-xml-string-to-complex-type * http://stackoverflow.com/questions/1212742/xml-serialize-generic- lista-obiektów-serializowalnych Od samego początku przychodzą mi do głowy trzy niechlujne pomysły: 1. Stwórz jakąś superklasę, która zawiera wszystkie możliwe typy zawartych. 2. Stwórz jakiś mechanizm do czytania xml najpierw, aby zidentyfikować, co w nim jest. 3. Użyj opcji 2 i przekonwertuj wewnętrzny plik xml na obiekt. Bardziej eleganckim podejściem byłoby zaimplementowanie pewnego rodzaju wzorca akcji, w którym po zidentyfikowaniu obiektu można by stworzyć odpowiednią akcję do wykonania. Niektóre pomysły składają się ze wzorca Action/Executor lub IoC: * http://msdn.microsoft.com/en-us/library/cc984279.aspx * http://msdn.microsoft.com/en-us/library/aa973811 .aspx Oto przykładowy pomysł na wzorzec, który działa równolegle do tego, o czym myślę: * http://stackoverflow.com/questions/298976/is-there-a-better-alternative-than-to-to-switch-on -type Nie dla trwałości danych, ale dla obsługi błędów przez klienta: Klient decyduje, jak obsłużyć otrzymany błąd, na podstawie akcji z biblioteki podstawowej, która ma miejsce po deserializacji. mój rozważany format xml wyglądałby mniej więcej tak: błąd diff: <errorMessage> Nagłówek nie jest poprawny  <diffErrorArray> <diffItem message="NoChange"> <customMessage>Poprawnie</customMessage> <source>HeaderColumn1</source> <destination>HeaderColumn1</destination> </diffItem> <diffItem message="Zamień"> <customMessage>Zmieniono</customMessage> <source>HeaderColumn1</source> <destination>Header_Column_1</ miejsce docelowe> </diffItem> <diffItem message="AddDestination"> <customMessage>Nieznane</customMessage> <source></source> <destination>Header_Column_1</destination> </diffItem> <diffItem message="DeleteSource"> < customMessage>Brak</customMessage> <source>HeaderColumn2</source> <destination></destination> </diffItem> </diffErrorArray>  </errorMessage> błąd ciągu: <errorMessage> Ba d news  <stringErrorMessage>Stało się coś naprawdę złego.</stringErrorMessage>  </errorMessage>


title: Czy mieszanie testu jednostkowego z testem sieciowym jest antywzorcem?

text: Jest to pytanie agnostyczne językowe, m.in. Mam test jednostkowy, taki jak # Test jednostkowy User user = User.create('john'); attachEquals("Nazwa użytkownika to jan", "jan", użytkownik.getName()); # Test sieciowy zaczyna się stąd goTo("/user/john"); attachTitleEquals("Jan"); Czy uważasz, że to antywzór? Chociaż mogę napisać pełne zestawy testów selenu, aby zrobić to samo, ale używając powyższego kodu oszczędzam dużo czasu (np. nie musisz już klikać('Login'); waitUntil itp. i nie muszę się martwić, jeśli mój interfejs użytkownika w ogóle się zmieniło, brzmi jak szybkie i stabilniejsze podejście do testów?


title: kiedy kpić w testach jednostkowych

text: Próbuję napisać testy jednostkowe w javascript dla aplikacji wykonanej w nodejs. To, co chcę wiedzieć, to - Powiedzmy, że istnieje klasa Pojazdy, która jest zależna od innej klasy Drogi. 1. Czy powinienem zakpić klasę Drogi i wysłać ją jako parametr do Pojazdów do testów jednostkowych? LUB Czy powinienem po prostu utworzyć nowy obiekt i wysłać go jako parametr do Pojazdów? 2. Jeśli zmienię klasę Roads, będę musiał zmienić prześmiewstwo wszędzie? 3. Czy powinienem używać fabryki do tworzenia wyśmiewanych obiektów?


title: (Dlaczego) ważne jest, aby test jednostkowy nie testował zależności?

text: Rozumiem wartość testów automatycznych i używam ich wszędzie tam, gdzie problem jest na tyle dobrze określony, że mogę wymyślić dobre przypadki testowe. Zauważyłem jednak, że niektórzy ludzie tutaj i na StackOverflow kładą nacisk na testowanie **tylko** jednostki, a nie jej zależności. Tutaj nie widzę korzyści. Mocowanie/stubbing w celu uniknięcia zależności testowych zwiększa złożoność testów. Dodaje sztuczne wymagania dotyczące elastyczności/oddzielenia do kodu produkcyjnego, aby wspierać mockowanie. (Nie zgadzam się z każdym, kto twierdzi, że to promuje dobry projekt. Pisanie dodatkowego kodu, wprowadzanie takich rzeczy jak frameworki wstrzykiwania zależności lub w inny sposób dodawanie złożoności do bazy kodu, aby uczynić rzeczy bardziej elastycznymi/możliwymi do podłączenia/rozszerzalnymi/oddzielonymi bez rzeczywistego przypadku użycia jest przesadą, nie dobry projekt.) Po drugie, testowanie zależności oznacza, że krytyczny kod niskiego poziomu, który jest używany wszędzie, jest testowany z danymi wejściowymi innymi niż te, o których wyraźnie pomyślał ktoś, kto napisał jego testy. Znalazłem wiele błędów w funkcjonalności niskiego poziomu, uruchamiając testy jednostkowe na funkcjonalności wysokiego poziomu bez wyśmiewania funkcjonalności niskiego poziomu, od której zależało. Najlepiej byłoby, gdyby zostały one znalezione w testach jednostkowych dla funkcjonalności niskiego poziomu, ale zawsze zdarzają się pominięte przypadki. Jaka jest druga strona tego? Czy to naprawdę ważne, aby test jednostkowy nie testował również jego zależności? Jeśli tak, dlaczego? Edycja: Potrafię zrozumieć wartość mockowania _zewnętrznych zależności_ takich jak bazy danych, sieci, usługi sieciowe itp. (Dzięki Annie Lear za zmotywowanie mnie do wyjaśnienia tego.) Miałem na myśli _zależności wewnętrzne_, czyli inne klasy, funkcje statyczne itp. które nie mają żadnych bezpośrednich zależności zewnętrznych.


title: Czy każda aplikacja sieci Web ASP.NET ma jedną domenę aplikacji?

text: Jestem trochę zdezorientowany. Czy istnieje tylko jedna domena aplikacji dla każdej aplikacji sieci Web ASP.NET, czy może istnieć od 1 do 100 domen aplikacji w jednej puli aplikacji aplikacji sieci Web


title: Jak nauczyć się standardowego frameworka/API/funkcjonalności języka?

text: Rozumiem, jak kodować. Wiem, jak poruszać się w podstawach języków, których regularnie używam. Umiem pisać nieco powyżej podstawowe wyrażenia regularne, umiem rozmawiać z bazami danych, umiem akceptować dane wejściowe, drukować dane wyjściowe, obsługiwać pliki itp. Jestem mniej lub bardziej pewny mojej podstawowej umiejętności wypluwania kodu źródłowego umiarkowanie złożony program. Mój problem polega na tym, że nigdy nie czuję, że to wystarczy. Czuję, że znam tylko niewielką część standardowej biblioteki mojego języka i dopóki nie zrozumiem wszystkiego, przynajmniej mimochodem, nie mam prawa nawet próbować znaleźć pracy przy jej użyciu. Właśnie skończyłem (społeczność/młodzież/cokolwiek) college, a moi znajomi dostają pracę w branży, ale nadal czuję się jak podróbka lub pozer i że po prostu nie jestem wystarczająco dobry. Czy istnieje przyzwoity znacznik dla „wiem wystarczająco”, bym mógł się upewnić, że umiem kodować? Czy powinienem wziąć fakt, że jestem w stanie przynajmniej zakodować FizzBuzz jako wskaźnik, że mogę ubiegać się o różne rzeczy? Jak stosunkowo łatwo mogę dowiedzieć się więcej o tych standardowych bibliotekach, frameworkach i/lub interfejsach API? Regularnie koduję, czytam książki, ale moja wiedza wciąż wydaje mi się płytka. WSPARCIE!


title: _zmienna - dlaczego to podkreślenie na początku?

text: Czasami widzę ludzi, którzy piszą takie nazwy zmiennych: > int _zmienna; IMO To naprawdę brzydkie. O co chodzi?


title: Najskuteczniejszy sposób przechowywania tej kolekcji modułów i reszt?

text: Mam ogromną kolekcję różnych modułów i związaną z każdym modułem dość dużą listę reszt. Chcę przechowywać te wartości, aby móc skutecznie określić, czy liczba całkowita jest równoważna jednej z pozostałych w odniesieniu do dowolnego z modułów (nie ma znaczenia, które, chcę tylko zwrotu prawda/fałsz). Myślałem o przechowywaniu tych wartości jako połączonej listy zrównoważonych drzew binarnych, ale zastanawiałem się, czy istnieje lepszy sposób? **EDYTUJ** Być może przydałoby się trochę więcej szczegółów. Jeśli chodzi o rozmiar tej struktury, będzie ona zawierać około dziesiątek tysięcy (prime-1) modułów i związana z każdym modułem będzie zmienna ilość reszt. Większość moduli będzie miała tylko jedną lub dwie pozostałości, ale bardzo rzadkie będą miały kilkaset powiązanych z nim. Jest to część większego programu, który obsługuje liczby składające się z kilku tysięcy (dziesiętnych) cyfr. Ten program bardziej skorzysta na tym, że ta tabela będzie jak największa i będzie można ją szybko przeszukiwać. Oto mała część zbioru danych, w której moduły są w nawiasach, a pozostałe są oddzielone przecinkami: (46) k = 20 (58) k = 15, 44 (70) k = 57 (102) k = 36, 87 (106 ) k = 66 (156) k = 20, 59, 98, 137 (190) k = 11, 30, 68, 87, 125, 144, 182 (430) k = 234 (520) k = 152, 282 (576 ) k = 2, 11, 20, 29, 38, 47, 56, 65, 74, ...(dodaj za każdym razem 9), 569 Powiedziałem, że moduły są pierwsze, ale myliłem się, każdy z nich jest poniżej pierwsza.


title: Śledź czas spędzony w witrynie

text: Będziemy śledzić zaangażowanie użytkowników (tj. czas spędzony w witrynie, najczęściej oglądana część/strona systemu itp.). Nie wydaje mi się, aby Google Analytics / MixPanel mógł to zrobić, ponieważ musimy analizować na podstawie czynników występujących tylko w NASZYM backendzie (takich jak użytkownicy, którzy chodzą do określonej szkoły, użytkownicy określonego typu itp.) - a nie ogólne rzeczy, takie jak Kraj, Płeć, itp. Przychodzi mi do głowy NAPRAWDĘ proste rozwiązanie, ale nie jestem pewien, czy jest, jeśli chodzi o serwer, złe. Masz tabelę, która wygląda mniej więcej tak: CREATE TABLE `log` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `uri` int(11) DEFAULT NULL, `date` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `user` int (11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; A potem za każdym razem, gdy strona jest ładowana, do tabeli „log” dodawany jest wiersz z bieżącym znacznikiem czasu, identyfikatorem użytkownika i identyfikatorem uri. Teraz mam potrzebne dane, co jest świetne. Mogę dowiedzieć się, kiedy użytkownik był ostatnio online i ile minut spędzają średnio. ALE. Czy to źle dla serwera? Będzie dodawał wiersz przy każdym załadowaniu strony, co stanowi wiele wierszy, jeśli masz 500 lub 1000 aktywnych użytkowników. Ale czy to będzie miało znaczenie? Jakie są Twoje myśli?


title: Korzyści z buforowania liczby elementów w strukturze danych w porównaniu z obliczeniami na żądanie?

text: Biorąc pod uwagę strukturę danych, chcę udostępnić metodę API `Size`, która zwraca liczbę elementów. Wahałem się między dwoma podejściami: 1. Utrzymanie licznika i zwiększenie/zmniejszenie go odpowiednio w odpowiedzi na wywołania Dodaj/Usuń 2. Wykonaj przechodzenie w celu obliczenia licznika, gdy zostanie wywołane `Size`. Podejście #2 zajmie O(n) vs O(1) dla podejścia #1. Inne niż wydajność, czy są jakieś inne korzyści z #1 nad #2 ?


title: Generowanie plików PDF przy użyciu poszczególnych komponentów szablonu

text: **EDYTUJ: Zaktualizowano diagram przepływu, aby lepiej wyjaśnić (prawdopodobnie niepotrzebną) złożoność tego, co robię.** * * * W firmie, w której pracuję, próbujemy **tworzyć złożone pliki PDF za pomocą Java iText** ( darmowa wersja 2.1 linii). Dokumenty są **budowane kawałek po kawałku z pojedynczych plików "szablonów"** , które są dodawane do dokumentu końcowego jeden po drugim za pomocą klasy `PdfStamper`, a także wypełniane za pomocą AcroForms. ![Przykład wizualny](http://i.stack.imgur.com/9pyck.png) Bieżący projekt wykonuje pętlę, która działa dla każdego szablonu, który należy dodać w kolejności (jak również niestandardową logikę potrzebną do wypełnienia każdy). W każdej iteracji pętli wykonuje następujące czynności: 1. Tworzy `PdfReader`, aby otworzyć plik szablonu 2. Tworzy `PdfStamper`, który odczytuje z `PdfReader` i zapisuje do „bufora szablonu” 3. Wypełnia AcroForm pola, a także mierzy wysokość szablonu, pobierając lokalizację „zakończenia” `AcroField`. 4. Zamyka `PdfReader` i `PdfStamper` 5. Tworzy `PdfReader` do odczytu „bufora roboczego”, który przechowuje bieżący dokument końcowy w toku 6. Tworzy `PdfStamper`, który odczytuje z `PdfReader` i zapisuje do "bufor pamięci" 7. Zamyka `PdfReader`, otwiera nowy `PdfReader` do "bufora szablonu" 8. Importuje stronę z "bufora szablonu", dodaje ją do `ContentByte` `PdfStamper` 9 Zamyka `PdfReader` i `PdfStamper` 10. Zamienia „bufor pamięci” na „bufor roboczy”, aby być gotowym do powtórzenia. Oto diagram wizualnie wyjaśniający powyższy proces, który jest wykonywany dla każdej iteracji „pętli” wykonującej każdy szablon: ![Schemat przepływu](http://i.stack.imgur.com/FUSSn.png) Jednakże, jak odkryto w tym pytaniu Stack Overflow (gdzie można również zobaczyć przykładowy kod) i odpowiedzi autora iText Bruno Lowagie, ta metodologia używania `PdfStamper` może powodować poważne problemy. „Nadużywanie” `PdfStamper` poprzez zbyt częste tworzenie i zamykanie stempla może spowodować uszkodzenia w pliku wynikowym, które wpływają tylko na niektóre programy, generując pozornie dobry dokument, który może zawieść w pewnych kontekstach. **Jaka jest alternatywa?** Odpowiedź pana Lowagie sugeruje, że istnieje prostszy lub bardziej bezpośredni sposób użycia `PdfStamper`s, chociaż sam jeszcze tego nie rozumiem. Czy można to zrobić za pomocą tylko jednej stempla? Czy można to zrobić bez użycia rotacyjnej serii buforów?


title: Najlepsze praktyki / powody stosowania stałych String w JavaScript

text: W językach statycznych, takich jak Java/C#, zwykle używam stałych dla ciągów lub liczb, zamiast wstawiać je do samego kodu. Jednak staram się unikać tej praktyki w JavaScript. Niedawno, gdy inni programiści wokół mnie przyjęli takie podejście w JS, zdecydowałem, że prawdopodobnie powinienem utrwalić swoje rozumowanie lub ich rozumowanie. W JavaScript nie ma rzeczywistej składni deklaracji "const". Zwykle zadowalamy się nieformalną polityką niezmieniania właściwości pisanych wielkimi literami. Ale moim zdaniem zwykle należy ich całkowicie unikać, ponieważ większość ich zalet jest tracona w JavaScript. W Javie błędnie napisany ciąg spowoduje, że program nie powiedzie się, gdy spróbujesz go uruchomić, po czym poprawisz go i przejdziesz dalej. Posiadanie statycznego kontrolera, w którym obie instancje wskazują tę samą stałą, eliminuje ten problem, ponieważ można go znaleźć w czasie kompilacji. Ale JavaScript po prostu będzie miał ten problem wszędzie, ponieważ ZAWSZE odkryjesz poprawność swojej pisowni _w czasie wykonywania_ : Library = { doThing: function() } setTimeout(function() Liberry.doThing() // Nie taki obiekt: Liberry }, 0); Najlepszym zabezpieczeniem przed tym jest zwykle „stosuj ściśle”. Dla programistów, którzy to preferują, nie przeszkadza mi to, że używają tego do szybszego znajdowania problemów z niezadeklarowanymi zmiennymi. Ale moja opinia jest taka, że dostarczanie stałych łańcuchowych dla interfejsów API REST itp. W rzeczywistości nie chroni cię przed niczym. Inny przykład: CompanyAPI.constants.ENROLL_URL = "/rest/enroll"; CompanyAPI.constants.FIRST_NAME = "imię"; ajax({url: CompanyAPI.constants.ENROLL_URL, dane: CompanyAPI.constants.FIRST_NAME }); // vs. ajax({url: "/rest/enroll", data: "firstName" }); ...Chciałeś napisać powyższe, ale potem popełniłeś literówki. Ups. ajax({url: CompanyAPI.constants.ENROL_URL, dane: CompanyAPI.constants.FIRS_NAME }); // vs. ajax({url: "/rest/enrol", data: "firsName" }); Ten oparty na stałej nadal będzie dostarczał _undefined_ , podczas gdy "firsName" nie jest lepszy. W tym celu zwykle postrzegam to jako zaletę języków statycznych i nie zawracam sobie głowy posiadaniem systemu, który to naprawi (poza być może zaczynam używać "use strict" do debugowania). Czy inni ludzie mogą mi powiedzieć, jaka jest ich preferowana praktyka w zakresie stałości ciągu/liczby całkowitej? EDYCJA: Aby wyjaśnić, moją preferencją jest zwykle umieszczanie ciągów takich jak "firstName" bezpośrednio w linii bez deklaracji stałej najwyższego poziomu - kary za błędy w pisowni są takie same. Ciągi, które mogą być długie, takie jak URL REST, będę umieszczał na górze pliku.


title: Dlaczego budowniczy miałby być klasą wewnętrzną zamiast we własnym pliku klasy?

text: Wiele przykładów typu „Builder Pattern” sprawia, że „Builder” jest wewnętrzną klasą budowanego obiektu. Ma to sens, ponieważ wskazuje, co buduje `Builder`. Jednak w statycznym języku typu statycznego wiemy, co buduje `Builder`. Z drugiej strony, jeśli `Builder` jest klasą wewnętrzną, _powinniście_ wiedzieć, jaką klasę buduje `Builder` bez zaglądania do wnętrza `Builder`. Ponadto posiadanie konstruktora jako klasy wewnętrznej zmniejsza liczbę importów, ponieważ może się do niego odwoływać klasa zewnętrzna — jeśli Ci na tym zależy. Są też praktyczne przykłady, w których `Builder` znajduje się w tym samym pakiecie, ale nie jest klasą wewnętrzną, jak np. `StringBuilder`. Wiesz, że `Builder` _powinien_ zbudować `String`, ponieważ jest tak nazwany. Biorąc to pod uwagę, jedynym dobrym powodem, jaki przychodzi mi do głowy, aby uczynić klasę „Builder” klasą wewnętrzną, jest to, że wiesz, czym jest klasa „Builder”, nie znając jej nazwy ani nie polegając na konwencjach nazewnictwa. Na przykład, jeśli `StringBuilder` był wewnętrzną klasą String, prawdopodobnie wiedziałbym, że istnieje wcześniej niż ja (spekulacje). Czy są jakieś inne powody, by uczynić z „Budowniczych” klasę wewnętrzną, czy też sprowadza się to tylko do preferencji i rytuałów?


title: Proste sposoby dynamicznego tworzenia plików wykonywalnych systemu Windows

text: Staram się zbudować dodatek do Firefoksa, który pozwala tworzyć pliki wykonywalne, które można skojarzyć z domyślnym programem lub dodać do listy "Otwórz za pomocą" i posiadać własną ikonę. Miałem nadzieję, że uniknę kompilacji plików dodatków do plików exe, ale... 1. Nie wydaje się, aby pliki wsadowe miały własne ikony. 2. Chociaż można przekazać instrukcje wsadowe do cmd.exe za pomocą skrótu (a skróty mogą mieć własne ikony), a skrót może nawet akceptować argumenty (jak w przypadku upuszczania na niego plików), najwyraźniej nie można dodawać skrótów do „Otwórz za pomocą” menu (okno dialogowe Otwórz za pomocą traktuje skrót jako odpowiednik pliku wykonywalnego, do którego się odwołuje, w tym przypadku .exe i bez dodatkowych parametrów). Więc chciałbym wiedzieć, jakie inne podejścia mogą być dla mnie dostępne do tworzenia plików wykonywalnych (lub czegoś, co naprawdę działa jak plik wykonywalny) w prosty i przejrzysty sposób? Skłaniam się ku pakowaniu konwertera wsadowego do pliku typu open source, takiego jak http://sourceforge.net/projects/bat2exe/ (chociaż naprawdę mam nadzieję, że znajdę taki, który sam może być kontrolowany za pomocą wiersza poleceń), więc mogę programowo zbuduj plik wsadowy, a następnie przekształć go w pełnowymiarowy plik wykonywalny z ikoną. **UPDATE** Głównym powodem, dla którego chcę to zrobić, jest https://github.com/brettz9/webappfind . WebAppFind umożliwia otwieranie plików pulpitu (gdy jesteś na pulpicie) w aplikacjach internetowych i obecnie zawiera gotowe pliki wykonywalne, które można skojarzyć z danym rozszerzeniem pliku (do pracy z funkcją Otwórz za pomocą lub jako domyślny program obsługi). Te pliki wykonywalne będą używane do wywoływania Firefoksa (i mojego dodatku, WebAppFind) z pewnymi flagami, które pozwalają WebAppFind otworzyć plik w aplikacji internetowej (zgodnie z innymi czynnikami, takimi jak plik filetypes.json w tym samym katalogu co plik lub wcześniej zarejestrowany program obsługi protokołu skorelowany z rozszerzeniem pliku, jak wyjaśniono w repozytorium). Jednak to, czego nie mogę wstępnie wbudować w plik wykonywalny, to wszystkie możliwe kombinacje dyrektyw konfiguracyjnych, które użytkownik może chcieć dostarczyć do dodatku lub, co ważniejsze, konkretny profil Firefoksa, w którym chce, aby aplikacja (z plikiem na pulpicie) została załadowana . Możliwość otwierania aplikacji internetowej w dowolnym profilu może pozwolić aplikacjom internetowym działać bardziej jak pliki wykonywalne — mają własną ikonę na pasku zadań, nie muszą zmuszać użytkownika do załadowania wielu kart lub dodania- jeśli np. chcą po prostu otworzyć w osobnym procesie swój lokalny plik HTML w opartym na JavaScript edytorze HTML WYSIWYG lub plik SVG w aplikacji internetowej do edycji SVG (i nie chcę też, aby użytkownicy musieli przejść przez problem z ręcznym powiązaniem ikony z plikiem exe.)


title: Jaka jest różnica między pozyskiwaniem wymagań a analizą wymagań w świecie rzeczywistym?

text: Moje pytanie ma na celu wytyczenie cienkiej granicy między pozyskiwaniem wymagań a analizą wymagań. Jaka jest różnica między tymi dwoma?


title: Jak pogodzić moje wsparcie dla oprogramowania open source z potrzebą wyżywienia i domu?

text: Mam mały dylemat i chciałem zasięgnąć opinii innych deweloperów, a może i wskazówek. Stworzyłem więc od podstaw grę 2D na Androida, ucząc się i refaktoringując. Zrobiłem to dla doświadczenia i jestem dumny z wyników. Udostępniłem go za darmo, ponieważ reklama jest obsługiwana przez AdMob, nie spodziewając się po nim wiele, ale jestem ciekaw, co się stanie. Od premiery minęło już kilka miesięcy i stało się bardzo popularne (>250 tys. pobrań!). Dodatkowo przychody z reklam są świetne i motywują mnie do tworzenia większej liczby dobrych gier, a nawet pozwalają mi mniej pracować, abym mógł skupić się na własnych pracach. Kiedy zacząłem pracować nad grą, byłem całkiem nowy w współbieżności i zupełnie nowy w Androidzie (miałem jednak doświadczenie w Javie). Standardową radą, jaką otrzymałem przy uruchamianiu gry na Androida, było przyjrzenie się przykładowym grom od Google (Snake, Lunar Lander, ...), więc to zrobiłem. Moim zdaniem te przykładowe gry na Androida od Google są przyzwoite, aby ogólnie zobaczyć, jak powinien wyglądać twój kod, ale w rzeczywistości nie są aż tak świetne do naśladowania. Dzieje się tak, ponieważ niektóre z ich funkcji nie działają (zapisywanie stanu gry), współbieżność jest zarówno niewyjaśniona, jak i kłopotliwa (nie ma rzeczywistego oddzielenia wątku gry od wątku interfejsu użytkownika, ponieważ synchronizacja blokuje się nawzajem przez cały czas, a Wątek interfejsu użytkownika uruchamia kod wątku gry). To sprawiło, że jako nowicjuszowi współbieżności trudno było mi zrozumieć, w jaki sposób została zorganizowana i co tak naprawdę działa, jaki kod. **Oto mój dylemat:** Po spędzeniu ostatnich kilku miesięcy na powolnym ulepszaniu kodu, czuję, że może to być bardzo korzystne dla programistów, którzy są w tej samej sytuacji, w której byłem, kiedy zaczynałem. (Ponieważ nie jest to skomplikowana gra, ale moim zdaniem wyraźnie zakodowana.) Chcę otworzyć źródło, aby inni mogli się z niego uczyć, ale nie chcę stracić strumienia przychodów z reklam, który, gdybym otworzył źródło, obawiam się, że zrobiłbym to, gdyby ludzie wypuszczali wersje z okrojoną reklamą lub drobnymi poprawkami, które podzieliłyby moją publiczność itp. Jestem studentem CS na studiach i te pieniądze dają mi swobodę pracy mniej w pracy letniej, a zatem dając mi czas i wolę do pracy nad większą ilością własnych projektów oraz doskonalenie własnych umiejętności, przy jednoczesnym płaceniu rachunków. Więc co mam zrobić? Otworzyć źródło z osobistym poświęceniem dla większego dobra, czy trzymać je zamknięte i być rodzajem hipokryzji zwolennikiem otwartego oprogramowania?


title: Który zapewnia lepszą podstawową Java lub .Net (C#, ASP.NET)?

text: Nie zadaję tego pytania, aby rozpocząć kłótnie (ludzie często uważają Javę i .Net za religie), ale co zapewnia lepszą podstawę i pomaga zdobyć prawdziwe umiejętności programistyczne (informatyki i tworzenia stron internetowych), pracowałem z ASP.NET i C#, ale większość czasu spędzam na przeciąganiu i upuszczaniu, jestem programistą C ++ i przeciąganie i upuszczanie mnie irytuje. Nie próbowałem Javy, więc chcę zapytać, czy Java również przypomina rodzinę .Net (przeciągnij i upuść)?


title: Jaka alternatywa jest lepsza, aby zobrazować ten scenariusz?

text: Tworzyłem i omawiałem diagram zajęć z moim partnerem. Aby uprościć sprawę, zmodyfikowałem rzeczywistą domenę, nad którą pracujemy i stworzyłem następujący diagram: ![jeden](http://i.stack.imgur.com/8Q7WX.png) Zasadniczo firma pracuje konstrukcje, które różnią się od siebie, ale nadal są konstrukcjami. Uwaga Dodałem jedno pole dla każdej klasy, ale powinno być ich znacznie więcej. Teraz myślałem, że to jest droga, ale mój partner powiedział mi, że jeśli w przyszłości pojawią się nowe klasy konstrukcyjne, będziemy musieli zmodyfikować klasę Company, co jest poprawne. Więc nowy proponowany diagram klas byłby taki: ![dwa](http://i.stack.imgur.com/C2cCj.png) Teraz zastanawiałem się: 1. Czy fakt, że w żadnym miejscu aplikacji czy będą mieszane listy samolotów i mostów w jakikolwiek sposób wpłyną na projekt? 2. Kiedy mamy wymienić tylko samoloty dla firmy, jak mamy je odróżnić od innych elementów na liście bez sprawdzania ich nazw klas? 3. W związku z poprzednim pytaniem, czy słuszne jest założenie, że ten typ diagramu powinien być wysokopoziomowy i nie powinno to mieć znaczenia na tym etapie, ale raczej być przemyślanym i zdecydowanym w czasie wdrażania? Wszelkie uwagi będą mile widziane.


title: Czy „warunkowe” zasady buforowania są rzeczywiście przydatne?

text: Projektuję abstrakcję nad wbudowanym buforowaniem ASP.Net, aby nie był tak straszny w użyciu. Jedną z decyzji projektowych, na którą muszę się zwrócić, jest to, czy powinienem ograniczyć ludzi do używania tylko jednej polityki pamięci podręcznej dla każdego elementu. Załóżmy na przykład, że buforujesz kod HTML wygenerowany przez post na blogu lub coś podobnego. Czy kiedykolwiek chciałbyś buforować go czasami przez 30 minut, a czasami przez 2 godziny? Uwaga: to nie jest unieważnianie pamięci podręcznej. Oto dostępne zasady: * Priorytet * Bezwzględne wygaśnięcie * Przesuwane wygaśnięcie (gdzie każdy dostęp podważa wygaśnięcie o tyle) Czy istnieją przypadki użycia, w których ktoś chciałby dodać element do pamięci podręcznej z jednym zestawem zasad, a w innej części aplikacji internetowej używa innego zestawu polityk po dodaniu (ale oczywiście, jeśli już istnieje, zachować starą politykę)? Czy są jakieś zastosowania w prawdziwym świecie, aby na to pozwalać?


title: Dlaczego mogę przełączyć się z ASP MVC na Node/Express?

text: Dlatego chciałem wypróbować Node i Express. Nie wspominając o Jade i Stylusie. Webstorm ma moim zdaniem niesamowite wrażenia z użytkowania i chcę z niego korzystać oraz z tych technologii. Tutaj jednak się rozłączam. ASP ma kilka fajnych wbudowanych funkcji, które wydają się nie istnieć w tym innym świecie. Wybiorę uwierzytelnianie. Uwierzytelnianie może być dość skomplikowane. Szczerze mówiąc, fajnie jest mieć coś wbudowanego, przetestowanego i solidnego dla czegoś tak ważnego dla niektórych aplikacji. Lub jeśli uwierzytelnianie jest zbyt małostkowe. Co powiesz na skompilowany kod? Dlaczego chcę używać JavaScript po stronie serwera, jeśli znam c#. Czy nie jest miło mieć bezpieczeństwo typu? czego mi brakuje? te technologie są popularne z jakiegoś powodu, ale po prostu nie widzę remisu? Chciałbym jednak.


title: Czy refaktoryzacja na potrzeby testów jednostkowych to zapach kodu?

text: Pozwolę sobie poprzedzić to pytanie, mówiąc, że potrzebuję testów jednostkowych. Boleśnie to rozumiem. Musisz to zrobić, aby przyszłe modyfikacje nie wpłynęły negatywnie na aplikację w sposób, którego się nie spodziewałeś. Dobrą praktyką jest również wykorzystanie metodologii opartej na testach, aby upewnić się, że bieżące modyfikacje działają zgodnie z oczekiwaniami, zapewniając jednocześnie solidną bazę testową do późniejszego dodawania przypadków brzegowych (błędów). Rozumiem również, że testowanie jest wymogiem dla każdej firmy, która będzie lub planuje podlegać audytowi informatycznemu. I na koniec rozumiem, że jeśli twój kod jest testowalny, to prawdopodobnie jest napisany przy użyciu solidnych zasad projektowania. Problem, który mam, polega na tym, że kodowanie do interfejsu w celu wspierania samych testów jednostkowych wydaje się wymyśloną złożonością. Weźmy pod uwagę przypadek, w którym masz aplikację bazodanową, która nie wymaga bycia niezależnym od bazy danych. Zakodowałeś już DAL, który komunikuje się z tą bazą danych i BL, który używa tego DAL do trwałości. Testy integracyjne są przeprowadzane z obecną architekturą, która wykorzystuje rozwojową bazę danych dla danych testowych. Aby wesprzeć 100% pokrycie kodu w testach jednostkowych, musisz teraz wprowadzić interfejsy zarówno dla DAL, jak i BL, mieć konkretne implementacje tych interfejsów i użyć wstrzykiwania zależności lub konstruktora, aby wykorzystać te interfejsy w oparciu o kontekst środowiska wykonawczego. Czy to nie wprowadza wymyślonej złożoności? Pobocznym pytaniem, jak sądzę, jest to, gdzie przebiega granica między testowaniem jednostkowym a testowaniem integracyjnym w takich przypadkach? Z pewnością jest możliwe, że model danych może się zmienić i oprócz testów jednostkowych chciałbyś testować integrację, ponieważ jasne jest, że testowanie jednostkowe zakończy się sukcesem tam, gdzie w takim przypadku testy integracyjne mogą zakończyć się niepowodzeniem.


title: Wzór gościa

text: Niedawno otrzymałem następujące zadanie i nie powiodło się, ponieważ źle zrozumiałem pytanie Utwórz interfejs „LibraryItem”. Utwórz 3 konkretne implementacje LibraryItem: 'Książka', 'CD', 'DVD'. Zastosuj wzorzec odwiedzających do swojego modelu danych. Napisz MaximumBorrowTimeVisitor, który oblicza maksymalny czas wypożyczenia elementu LibraryItem. Utwórz dowolne wystąpienie modelu danych i zastosuj MaximumBorrowTimeVisitor. Myślałem, że to proste, a jednak nie udało mi się. Jak byś rozwiązał to zadanie?


title: Czy dobrą praktyką jest posiadanie oddziału zdalnego dla każdego dewelopera?

text: Czy dobrą praktyką jest posiadanie oddziału zdalnego dla każdego dewelopera w projekcie? Używamy Gita z następującymi gałęziami: * master * release * development Gdyby każdy programista miał swoją własną gałąź, mógłby wepchnąć kod do swoich gałęzi, a inni mogliby scalić te zmiany we własnych gałęziach.


title: Czy istnieją języki LOP?

text: Przeczytałem kilka artykułów związanych z paradygmatem **Programowanie zorientowane na język**. Dlatego doszedłem do wniosku, że paradygmat LOP może pozwolić programistom na większą produktywność ze względu na jego rozszerzalność. Czy są jakieś języki programowania, które są już zaimplementowane LOP lub w stanie rozwoju?


title: Podejście do algorytmów kodowania w celu zminimalizowania przeróbek

text: Często przerabiam swój kod, zwłaszcza gdy uczę się pisać algorytmy, które wymagają śledzenia wielu atrybutów i etykiet. Czuję, że napisanie pseudokodu, wypracowanie małego przykładu numerycznego i kilku przypadków testowych to zazwyczaj dobre podejście. Jednak ciągle popełniam błędy i przerabiam kod. Czy istnieje lepsze podejście lub ustrukturyzowana metodologia, którą powinienem stosować? Bardzo doceniam radę.


title: Czy można napisać oprogramowanie, którego nie trzeba ciągle modyfikować?

text: Napisałem dużo oprogramowania w wielu różnych językach, a także "napisałem" sprzęt do użytku z FPGA przy użyciu Verilog i VHDL. Lubię pisać sprzęt bardziej niż oprogramowanie i myślę, że jednym z głównych powodów jest to, że można napisać sprzęt, który jest „skończony” i nigdy nie musi być modyfikowany: definiujesz interfejsy i funkcjonalność, piszesz stanowisko testowe , zaimplementuj moduł sprzętowy, a następnie przetestuj go za pomocą symulatora. Następnie możesz polegać na tym module sprzętowym jako bloku konstrukcyjnym, aby stworzyć coś większego i lepszego: jeśli potrzebujesz dodać funkcję do tego modułu, tworzysz drugi moduł i dodajesz tam funkcjonalność. Nigdy nie wyrzucasz oryginalnego modułu, ponieważ działa dobrze i nadal może być przydatny. Jedną z moich głównych frustracji związanych z oprogramowaniem jest to, że nigdy się to nie kończy. Zawsze jest jeszcze jedna funkcja do dodania. Często podczas dodawania funkcji wprowadza błąd w innym miejscu, które wcześniej działało dobrze. Nie dzieje się tak w przypadku sprzętu, o ile interfejsy nie są naruszane. Żeby było jasne, nie opowiadam się za budowaniem jednej wersji czegoś z listą funkcji i to na zawsze: jestem za iteracjami i wielokrotnymi wydaniami w czasie, aby dodać nowe funkcje. Po prostu nie chcę grzebać w kodzie po lewej stronie i znaleźć błędu po prawej, a wydaje się, że dzieje się to po dodaniu nowej funkcji. Czy można pisać oprogramowanie w podobny sposób, w jaki sprzęt jest „pisany”? Czy istnieje dobra metodologia tworzenia oprogramowania, która umożliwia ciągły postęp i umożliwia dodawanie nowych funkcji bez konieczności przepisywania istniejącego kodu i wprowadzania nowych błędów?


title: Jakie są możliwe akredytacje, które mogę uzyskać w ciągu 4 miesięcy, aby zostać programistą?

text: Mamy firmę rodzinną i muszę być w Indiach, Delhi na 4 miesiące w ramach podróży służbowej. Przez cały dzień niewiele będę robił. Mam już dyplom z ekonomii, ale uwielbiam też oprogramowanie. Przez lata uczęszczałem na różne kursy. Zrobiłem nawet dyplom z inżynierii oprogramowania, ukończyłem pierwsze 2 lata, ale potem odszedłem z powodów rodzinnych. Nie miało to na mnie wpływu, ponieważ miałem już dyplom, a także rodzinny biznes. Teraz zastanawiam się, jakie są rzeczy, które mogę zrobić w ciągu 4 miesięcy, kiedy tam będę. Jedną z nich są lekcje programowania, w niektórych językach, których nie znam, ale co jeszcze? Czy są jakieś certyfikaty, które mogę uzyskać?


title: Ile powinien zrobić użytkownik końcowy, pisząc bibliotekę?

text: Po pierwsze, to pytanie wykracza poza mój przykład (nie chcę, aby było to zbyt zlokalizowane lub przeniesione do Stack Overflow), ale natknąłem się na to, gdy myślałem o czymś, co chciałem wypróbować w C, więc pomyślałem, że tego użyję jako przykład. Więc moim pomysłem jest stworzenie ogólnej połączonej listy w C i uruchomiłem ją zeszłej nocy, i całkiem nieźle wygląda jak nowa w C. Problem, na który natknąłem się, to rzutowanie typów i prowadzi mnie to do pytania: ile pracy powinno projektant biblioteki oczekuje, że użytkownik końcowy zrobi podczas korzystania z biblioteki? Jeśli weźmiesz mój przykład, w tej chwili nie wykonuję żadnych rzutów i zwracam Object (który jest typem void*). Czy rozsądne jest upewnienie się, że użytkownik końcowy śledzi ich typy, czy też projektant biblioteki powinien upewnić się, że lista jest bezpieczna dla typów (myślę, że mam ogólny pomysł, jak zaimplementować to przynajmniej dla wbudowanych typów danych) ? Czy rozsądne jest oczekiwanie przy projektowaniu biblioteki określonej ilości pracy ze strony użytkowników końcowych w celu korzystania z biblioteki, czy też należy ją maksymalnie uprościć? Czy istnieją czynniki, które wpłynęłyby na tę decyzję, takie jak język?


title: Jakie funkcje są wymagane do orientacji obiektów?

text: Zastanawiam się tylko, jakie dokładnie cechy musi posiadać język lub biblioteka, aby można było określić je jako „zorientowane obiektowo”. Czy orientacja obiektowa jest czymś, co można mniej więcej osiągnąć w **dowolnym** języku programowania ogólnego przeznaczenia z przyzwoitymi funkcjami? A może jest to coś, co można osiągnąć tylko w językach, które wyraźnie reklamują, że obsługują programowanie zorientowane obiektowo? Na przykład spójrz na następujący kod C: SDL_Surface* screen = SDL_SetVideoMode( 640, 480, 16, SDL_HWSURFACE); SDL_FreeSurface( ekran ); lub kod omówiony tutaj. Teraz powyższy kod nie używa dziedziczenia, polimorfizmu runtime (?), funkcji wirtualnych itp. Ale wydaje mi się, że jest to dość OOP. Czy Object-Orientation to po prostu pisanie kodu, który jest oparty na tworzonych i zniszczalnych strukturach danych, takich jak obiekty, klasy, struktury itp., który nie wymaga żadnych specjalnych wzorców ani funkcji zapewnianych przez język programowania lub bibliotekę?


title: Jaki jest skuteczny sposób pobierania liczby produktów na wielu poziomach hierarchii?

text: Pracuję nad stroną e-biznesową do sprzedaży książek, a także chcę wyświetlić liczbę dostępnych książek na liście kategorii. Lista kategorii zawiera gatunek i format (kieszonkowy, ebook, audiobook itp.). W każdym elemencie w gatunku i formacie chciałbym wyświetlić liczbę dostępnych produktów z listy magazynowej. Oczywiście, gdy zagłębisz się w hierarchię, uzyskasz bardziej szczegółowe informacje o dostępnych książkach na tym poziomie. Na przykład dostępnych jest 2000 książek z gatunku „medycyna”, a jeśli wybiorę format „kieszonkowy”, pozostaje 200 dostępnych książek. Innymi słowy, połączyłeś „kieszonkę” z „medycyną” i wiesz już, że w gatunku „medycyna” dostępnych jest w sumie 200 książek kieszonkowych. Moje pytanie brzmi: jak stworzyć tę funkcjonalność bez dużego wysiłku, aby zapytać bazę danych o ilość dostępnych produktów w każdym elemencie? Potrzebujesz kupić specjalną aplikację lub wtyczkę? Proszę pamiętać, że baza danych zawiera miliony książek. ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/MJ4eh.png)


title: Jak określić liczbę zasobów do przydzielenia w projekcie oprogramowania?

text: Ostatniego dnia przeprowadzono ze mną wywiad, który zapytał mnie, biorąc pod uwagę zarys projektu, w jaki sposób możemy określić liczbę zasobów potrzebnych do tego samego? Nie wiem, jak to zrobić. Czy można to zrobić w standardowy sposób? czy jest to oparte na doświadczeniu? Albo jak? Jestem całkiem nowy w tej działalności i moja wiedza wynosi obecnie zero .... więc każde jasne wyjaśnienie z pewnym przykładem (prostym) pomoże mi (i ludziom takim jak ja) to zrozumieć.


title: Kopia zapasowa różnicowa w chmurze

text: Odpowiadam za projekt i rozwój aplikacji do backupu w chmurze. Obecnie używamy xDelta do wykonywania kopii różnicowych, dzięki czemu przesyłane są tylko zmienione części plików. Ogranicza to koszty zarówno dla nas, firmy, jak i użytkownika. Jednym z problemów, z jakim mamy do czynienia w tym podejściu, jest to, że w celu wykonania różnicowej kopii zapasowej zmodyfikowany plik musi zostać porównany z oryginalnym plikiem. Aby rozwiązać ten problem, zdecydowaliśmy się na szybkie rozwiązanie, które polega na buforowaniu oryginalnych plików na komputerze użytkowników w celu szybkiego odniesienia. Teraz to rozwiązanie działa znakomicie dla użytkowników komputerów stacjonarnych / domowych, w których rozmiary plików są stosunkowo małe. Problem pojawia się, gdy administrator serwera próbuje wykonać kopię zapasową bazy danych sql, która ma na przykład rozmiar 100 GB. Chociaż obecnie buforujemy plik na dysku, zdecydowanie nie jest to doceniane przez administratorów serwerów, ponieważ wypełniamy ich dyski plikami z pamięci podręcznej. Zastanawiam się, czy istnieje inne podejście do tworzenia różnicowych kopii zapasowych bez konieczności stałego przechowywania oryginalnych plików na dysku.


title: Najważniejsze złe praktyki w MySQL

text: Był inny post, w którym ludzie mogli publikować swoje najlepsze złe praktyki w PHP. Miałem narzekać na praktyki MySQL i pomyślałem, że będzie to interesujący temat, aby usłyszeć najlepsze złe praktyki w MySQL. Głosuj na tych, z którymi się zgadzasz


title: Jakie są standardowe układy katalogów dla kodu źródłowego?

text: Jestem w trakcie proponowania nowego standardowego układu katalogów, który będzie używany we wszystkich projektach w naszej organizacji. Projekty mogą zawierać skompilowany kod źródłowy, skrypty konfiguracyjne, skrypty kompilacji, biblioteki innych firm, skrypty baz danych, zasoby, usługi sieciowe, strony internetowe itp. Jest to częściowo zainspirowane odkryciem standardowego układu Mavena. Czy istnieją inne standardowe układy, które są ogólnie akceptowane w branży?


title: Jakie (bezpłatne) konferencje on-line lub strony wideo o tematyce technologicznej znasz?

text: Zamiast telewizji wolę oglądać (bezpłatne) konferencje lub filmy on-line. Jako programista moimi ulubionymi są: * InfoQ * MSDN Channel 9 * Google TechTalks * LinkedIn TechTalks * TED * Blog Business Of Software (ja też lubię przedsiębiorczość) Może tracę inne cenne źródła (o oprogramowaniu i startupach) tych rodzaj treści. Czy możesz zaproponować inne wyspecjalizowane witryny, takie jak te?


title: Czy ma sens używanie osobistego Amazon Cloud Drive do hostowania repozytorium SVN?

text: Mam 5 GB wolnego miejsca w usłudze Amazon Cloud Drive, z której nie korzystam, więc zastanawiam się: czy możliwe jest utworzenie repozytorium SVN i możliwość zatwierdzania/aktualizowania przez TortoiseSVN? Mam konto na Assembla.com i używam go do wszystkich moich osobistych/szkolnych projektów i uwielbiam to, ale Assembla ma limit 2 GB.


title: Konfiguracja hibernacji dla początkujących

text: Uczę się hibernacji (mapowanie OR). Używam Mavena do zarządzania projektami. Jednak obecnie czytam książkę Hibernate autorstwa O'Reilly'ego, a oni używają ANT jako swojego przykładu. Więc moje pytanie brzmi, czy jest jakaś różnica między konfiguracją hibernacji z ANT i Maven? Z góry dziękuję!


title: typedefs i #defines

text: Wszyscy zdecydowanie używaliśmy raz na jakiś czas `typedef` i `#define`. Dzisiaj pracując z nimi, zacząłem się nad czymś zastanawiać. Rozważ poniższe 2 sytuacje, aby użyć typu danych `int` z inną nazwą: typedef int MYINTEGER i #define MYINTEGER int Podobnie jak w powyższej sytuacji, możemy, w wielu sytuacjach, bardzo dobrze osiągnąć coś za pomocą #define, a także zrobić to samo za pomocą typedef, chociaż sposoby, w jakie robimy to samo, mogą być zupełnie inne. #define może również wykonywać akcje MAKRO, których typedef nie może. Chociaż podstawowy powód ich używania jest inny, jak różne jest ich działanie? Kiedy należy preferować jeden nad drugim, skoro można zastosować oba? Czy w jakich sytuacjach jeden z nich będzie szybszy od drugiego? (np. #define to dyrektywa preprocesora, więc wszystko jest robione dużo wcześniej niż podczas kompilacji lub uruchomienia).


title: Jak należy przechowywać powtarzalne zadania kalendarza w bazie danych?

text: To jest dla małego osobistego projektu do mikrozarządzania. Zasadniczo przechowuję zadania w bazie danych SQLite3, która wygląda tak: id INTEGER PRIMARY KEY AUTOINCREMENT label TEXT deadline INTEGER Każde zadanie ma więc termin (deadline), który jest przechowywany jako Unix Time Stamp. Jak na razie dobrze, mogę robić wpisy takie jak "jutro: odwiedź babcię" i tworzony jest nowy wiersz z "odwiedź babcię" jako etykietą i _jutro_ przekształcone jako uniksowy czas na ostateczny termin. Teraz chciałbym wprowadzić nowy typ zadań: rutyny - zadania powtarzane w układzie czasowym, np. „codziennie: czysta kuchnia”. Jak takie zadania mogą być przechowywane lub modelowane? Na razie myślę, że w przypadku zadania, które trzeba wykonać codziennie, wygenerować nowe wiersze w mojej tabeli, które miałyby taką samą etykietę, a pole terminu powiększone o jeden dzień. W takim przypadku muszę w przyszłości ustalić limit. Na przykład, jeśli stworzę rutynę na każdy dzień, tworzy nowy wiersz na każdy dzień pozostałego roku. Czy jest na to prostszy sposób? Czy brakuje mi pewnych oczywistych zasad projektowania baz danych?


title: O jakich technikach należy pamiętać, aby projektować wydajne algorytmy w PHP?

text: Staram się rozwiązywać wyzwania programistyczne na www.interviewstreet.com używając PHP. Czy istnieją pewne techniki, o których należy pamiętać, które zoptymalizują wydajność algorytmu? Na przykład przeczytałem, że używanie konstrukcji języka PHP w porównaniu z wywołaniami funkcji jest szybsze. Czy to prawda? Jakieś inne wskazówki?


title: Delegaci i wydarzenia

text: Jaka jest różnica między publicznym delegatem void SecondChangedHandler(Object clock, TimeInfoEventArgs ti); wydarzenie publiczne SecondChangedHandler OnSecondChanged; i zdarzenia publiczne EventHandler<TimeInfoEventArgs> OnSecondChanged; Kiedy należy skorzystać z której i czy jest jakaś najlepsza praktyka?


title: Obliczanie obrotu 3d wokół losowej osi

text: To właściwie rozwiązany problem, ale chcę zrozumieć, dlaczego moja oryginalna metoda nie zadziałała (mam nadzieję, że ktoś z większą wiedzą może to wyjaśnić). (Należy pamiętać, że nie mam zbyt dużego doświadczenia w programowaniu 3d, bawiłem się tylko bardzo podstawowymi funkcjami… ani nie mam dużego doświadczenia matematycznego w tej dziedzinie). Chciałem animować punkt obracający się wokół innego punktu na losowej osi, powiedzmy 45 stopni wzdłuż osi y (pomyśl o elektronu wokół jądra). Wiem, jak obracać się za pomocą macierzy transformacji wzdłuż osi X, Y i Z, ale nie arbitralnej (45 stopni) osi. W końcu po kilku badaniach znalazłem sugestię: obróć punkt o -45 stopni wokół Z, aby był wyrównany. Następnie obróć o pewien przyrost wzdłuż osi Y, a następnie cofnij o +45 stopni dla każdego taktu klatki. Chociaż to z pewnością działało, czułem, że wydaje się, że jest to więcej pracy niż potrzeba (zbyt wiele wywołań metod, matematyki itp.) i prawdopodobnie będzie dość powolne w czasie wykonywania z wieloma punktami do pokonania. Pomyślałem, że może udało się połączyć wszystkie macierze rotacji w jedną macierz rotacji i użyć jej jako pojedynczej operacji. Coś takiego: [ cos(-45) -sin(-45) 0] [ sin(-45) cos(-45) 0] obróć o -45 wzdłuż Z [ 0 0 1] pomnóż przez [ cos(2) 0 - sin(2)] [ 0 1 0 ] obróć o 2 stopnie (mój przyrost) wzdłuż Y [ sin(2) 0 cos(2)] następnie pomnóż ten wynik przez (w tej kolejności) [ cos(45) -sin(45 ) 0] [ sin(45) cos(45) 0] obróć o 45 wzdłuż Z [ 0 0 1] Otrzymuję 1 bałagan macierzy liczb (odkąd pracowałem z niewiadomymi i 2 kątami), ale miałem na to ochotę powinno działać. Tak się nie stało i znalazłem rozwiązanie na wiki używając innego matirxa, ale to jest coś innego. Nie jestem pewien, czy może popełniłem błąd w mnożeniu, ale moje pytanie brzmi: jest to rzeczywiście realny sposób rozwiązania problemu, wziąć wszystkie oddzielne przekształcenia, połączyć je przez mnożenie, a następnie użyć tego, czy nie?


title: Czy mogę użyć kodu projektu, który ma licencję New BSD, ale używa biblioteki licencji GPL?

text: Chcę użyć kodu źródłowego projektu ICSOpenVpn w mojej aplikacji komercyjnej. Jeśli widzimy projekt ICSOpenVpn, stwierdza, że jego licencja to New BSD, ale używana przez niego biblioteka libopenvpn.so jest objęta licencją GNU GPLv2. Zgodnie z FAQ dla wersji 2 GNU GPL „Jeśli biblioteka jest wydana na GPL (nie na LGPL), czy to oznacza, że każdy program, który jej używa, musi być objęty GPL?” Odpowiedź brzmi: „Tak, ponieważ program w takiej postaci, w jakiej jest uruchomiony, zawiera bibliotekę”. Ponadto, w jaki sposób ICSOpenVpn może zmienić licencję na New BSD?


title: Licencjonowanie open source utworów pochodnych

text: Wyprowadziłem dzieło o otwartym kodzie źródłowym, Service-Nucleus, oparte na Karyon (licencja Apache) firmy Netflix i AngularJS (licencja MIT) firmy Google. Chcę mieć pewność, że istnieją odpowiednie licencje i prawa autorskie, i nie jestem pewien, jak honorować te projekty i jednocześnie postępować zgodnie z prawem. Zbadałem to do pewnego stopnia i jest tam niezły bałagan. Każda rada byłaby bardzo mile widziana. Obecnie udostępniam licencję Apache z NetFlix w katalogu głównym.


title: Przytłoczony na stażu

text: Mój najlepszy przyjaciel właśnie rozpoczął staż miesiąc temu. Problem w tym, że jest zniechęcony. Był dobrym uczniem A+ w szkole i czuje, że w ogóle nic nie wie. „Zagadnienia, nad którymi pracuje, choć dotyczą języków, w których czuje się swobodnie, wydają mu się tak obce” – powiedział. Zaczyna się naprawdę zniechęcać, jakby w ogóle nie znał bazy kodu. Próbuję mu powiedzieć, że zajmie to trochę czasu i oczekuje się od niego, że będzie miał wiele pytań. Co mam mu powiedzieć?


title: Uruchomić funkcję, gdy wykonywana jest funkcja z listy?

text: **Cel** : Obecnie robię projekt MVC i mam tę metodę, aby zaktualizować ViewBag (na podstawie poprzednich działań użytkownika). Chciałbym wywołać tę funkcję za każdym razem, gdy wywoływana jest pewna lista akcji MVC (większość z nich). **Pytania** : 1. Czy wzorzec obserwatora pasowałby do mojego problemu? (Czytam o nich w tej chwili, zaczynając tak brzmieć). 2. Jeśli tak, czy byłoby to przesadą dla czegoś tak prostego, czy byłoby to w dobrej praktyce? 3. Czy patrzę we właściwym kierunku, czy jest to lepszy sposób na osiągnięcie mojego celu? Użytkownik ma w sesji „ActiveEntity” po wybraniu jednego i muszę wyświetlić nazwę podmiotu, datę itp., gdy większość stron jest ładowana (jako część informacji nagłówka). Połów polega na tym, że używam innych danych dla modelu, ponieważ mam dużą hierarchię danych do wyświetlenia (części/poziomy na raz), a ViewBag jest akceptowalną lokalizacją do przechowywania danych, które działają podobnie do informacji nagłówka ( Myślę?). Czy moje podejście jest prawidłowe? Czy ktoś mógłby wskazać mi dobry kierunek?


title: W przypadku korzystania z „Github Flow”, co jeśli moja następna funkcja zależy od kodu z oczekującego żądania ściągnięcia?

text: Eksperymentujemy z „Github Flow”, jak zdefiniowano tutaj. Krótko mówiąc, każda zmiana zaczyna się od dobrze nazwanej gałęzi od mastera. Kiedy to się skończy, otwierasz PR dla tej gałęzi, zostaje ona przejrzana, a następnie scalona z masterem. To bardzo prosty przepływ pracy. Jednak kilka razy natknęliśmy się na to: opracowuję funkcję X i otwieram dla niej PR. Czekając na sprawdzenie PR dla X, chcę rozpocząć pracę nad inną funkcją Y, ale potrzebuję kodu z PR X. Czy powinienem po prostu uruchomić gałąź z gałęzi funkcji X, czy mam już rozpoczęto funkcję Y, po prostu scalisz funkcję X z gałęzią funkcji Y? Wydaje się, że tak, ale chciałem sprawdzić z innymi zespołami, które stosują ten model, aby zobaczyć, jak radzili sobie z wieloma PR i funkcjami, które są od siebie zależne.


title: SVN - Czy można używać jakiegokolwiek posmaku SVN w zespole?

text: Czy to w porządku, jeśli w zespole programiści używają różnych odmian SVN? Powiedz, że jeden przy użyciu SVN żółwia, a drugi przy użyciu SVN Versionsapp.com?


title: Windows Azure vs GAE vs AWS — dla aplikacji opartych na procesach

text: Piszę aplikację, która będzie indeksować strony internetowe i analizować dane, i zastanawiam się, czy mogę udostępnić to jako usługę w chmurze. Głównym powodem, dla którego szukam hostingu w chmurze, jest to, że użytkownicy mogą przetwarzać tysiące stron jednocześnie, a ja muszę jak najszybciej zwracać dane. Użytkownik będzie miał zainstalowane na swoim komputerze oprogramowanie, które będzie komunikować się z tą aplikacją. Jeśli na przykład przetworzenie każdej strony zajmuje 10 sekund, czy można ustawić automatyczne skalowanie, aby użytkownik mógł przetworzyć 1, 10 lub 10 000 stron w tym samym czasie (tj.: 10 sekund), po prostu dodając i usuwając instancje w razie potrzeby? Uwaga: Każdy proces wymaga niewielkich zasobów pamięci RAM/CPU, więc możliwe będzie przetwarzanie wielu stron w jednej instancji, ale w tym przykładzie uprościmy go do 1 instancji na proces. Jeśli tak, jaka usługa w chmurze najlepiej nadaje się do tego zadania?


title: Czy dokumentowanie kodu nie zapewnia bezpieczeństwa pracy?

text: > **Możliwy duplikat:** > Czy powinieneś napisać dobrą dokumentację i czysty kod, aby zwiększyć współczynnik „Bus > Factor”? Często pytam młodych programistów, dlaczego nie dokumentują swojego kodu. Ich odpowiedzi, być może żartobliwie, często zawierają „bezpieczeństwo pracy”. Słyszę to również od doświadczonych profesjonalistów. I to nie tylko w programowaniu; Inżynierowie sieciowi i administratorzy systemów powszechnie zgadzają się z tym przekonaniem. Czy naprawdę możesz zapewnić bezpieczeństwo pracy, przechowując szczegóły swojej pracy w głowie, a nie na papierze (lub w aktach)? Jakie masz doświadczenie?


title: Inicjalizacja obiektów w systemie za pomocą wstrzykiwania zależności

text: To jest pytanie uzupełniające do następującego postu: Wstrzykiwanie zależności (DI) w aplikacjach c++ W systemie, który używa DI, ktoś, gdzieś powinien być odpowiedzialny za tworzenie różnych obiektów i "połączenie" ich. Trudno mi wymyślić, kto powinien to zrobić. Czytałem o jednej opcji, że powinna to być „klasa root”. Jednak w tym przypadku wydaje się, że klasa główna może być odpowiedzialna za tworzenie bardzo dużej liczby obiektów. Pomyślałem o opcji użycia mniejszych klas konstruktorów, które będą używane jako klasa główna - czy to dobry sposób na zrobienie tego? Uwaga: W tym pytaniu oznaczyłem „C++”, ponieważ rozwijam się w C++. Nie jestem pewien, czy to ma jakiekolwiek znaczenie w odpowiedzi.


title: Wzór do bezpiecznego ustanowienia dwukierunkowej relacji jeden do jednego

text: Załóżmy, że mamy dwie klasy, `Pilot` i `Plane`, będące w opcjonalnej relacji jeden do jednego. Tak więc „samolot” może mieć pilota podczas lotu, ale gdy stoi w hangarze, nie ma go. Podobnie w przypadku „Pilota”. Byłoby po prostu logiczne trzymać wskaźnik do „Plane” w „Pilocie” i wskaźnik do „Pilota” w „Plane”, dostępnym przez gettery i settery. Konstruowanie seterów w taki sposób, aby wywołanie któregokolwiek z nich ustanawiało dwukierunkową relację, jest zaskakująco trudne. Byłem jeszcze bardziej zaskoczony, że nie mogłem znaleźć odpowiedniego rozwiązania w sieci, ponieważ ta konstrukcja wydaje mi się wspólna. Czy ktoś zna koncepcje, które zawierałyby taką relację wewnątrz klasy? Lub idiom polegający na trzymaniu się normalnych getterów/setterów i nawiązywaniu relacji za pomocą jednego wywołania setPilot/setPlane?


title: Która poprzednia wersja Netbeans IDE, która ma lekkość prawie równą lub lepszą niż Eclipse Indigo?

text: Obecnie od dawna korzystam z Eclipse, ponieważ moje przeszłe i obecne firmy zawsze zajmują się zaćmieniem. Ostatnio spotkałem się z przykładowymi kodami java stworzonymi przy użyciu netbeans. Pobrałem i wypróbowałem Netbeans 7.xi 6.9.x, ale są one cięższe i pochłaniają więcej zasobów pamięci niż Eclipse Indigo. Więc ktoś wie, która poprzednia wersja Netbeans IDE, która ma lekkość prawie równą lub lepszą niż Eclipse Indigo (3.7), ale może obsługiwać Java SDK v1.6?


title: Ogranicz dostęp do backendu

text: To może być jedno z tych pytań „bez odpowiedzi” lub „tylko opinie”, ale pomyślałem, że spróbuję. Opracowuję aplikację z informacjami o opiece zdrowotnej z przyjacielem, który jest lekarzem. Podstawy aplikacji są gotowe, a informacje w bazie danych kształtują się, więc teraz doszedłem do pytania o pogodę, a jeśli tak, to w jaki sposób powinienem ograniczyć dostęp do tych informacji tylko do mojej aplikacji. Na pytanie czy mogę odpowiedzieć, ale wszelkie opinie są mile widziane. Pytanie jak jest gdzie potrzebuję twojej pomocy. Aplikacja jest napisana w Javie na Androida, a backend w Django, jakie widzisz sposoby ograniczania dostępu do backendu, aby inne skrypty/aplikacje nie miały do niego dostępu? Jednym z moich pomysłów było, aby telefon zażądał klucza API przy pierwszym uruchomieniu i powiązał go z numerem IMIE, który moim zdaniem jest unikalny dla każdego telefonu, a następnie śledził te krotki na serwerze. My (tak jak ja) prawdopodobnie przeniesiemy to na iOS na pewnym etapie, więc musi to być dość wieloplatformowe, myślałem o powiązaniu z kontami Google zamiast numeru IMIE wcześniej.


title: Czy Linq ma oszałamiający wpływ na programistów .NET?

text: Wielu z nas zaczęło dostrzegać to zjawisko w jQuery około rok temu, kiedy ludzie zaczęli pytać, jak zrobić absolutnie szalone rzeczy, takie jak pobieranie ciągu zapytania za pomocą jQuery. Różnica między _biblioteką_ (jQuery) a _językiem_ (JavaScript) jest najwyraźniej zagubiona przez wielu programistów i skutkuje pisaniem wielu nieodpowiednich, zawiłych kodów tam, gdzie nie jest to konieczne. Może to tylko moja wyobraźnia, ale przysięgam, że zaczynam dostrzegać wzrost liczby pytań, w których ludzie proszą o zrobienie podobnie szalonych rzeczy za pomocą Linq, na przykład znajdowanie zakresów w posortowanej tablicy. Nie mogę przeboleć, jak bardzo nieodpowiednie są rozszerzenia Linq do rozwiązania tego problemu, ale co ważniejsze, fakt, że autor po prostu _założył, że idealne rozwiązanie będzie obejmowało Linq_ bez faktycznego _myślenia_ o tym (na tyle, na ile mogę to stwierdzić). Wydaje się, że powtarzamy historię, wychowując nową generację programistów .NET, którzy nie potrafią odróżnić języka (C#/VB.NET) od biblioteki (Linq). Co jest odpowiedzialne za to zjawisko? Czy to tylko szum? Sroki skłonności? Czy Linq zyskał reputację jako forma magii, w której zamiast pisać kod, wystarczy wypowiedzieć odpowiednią inkantację? Nie jestem zadowolony z tych wyjaśnień, ale tak naprawdę nie mogę wymyślić nic innego. Co ważniejsze, czy to naprawdę problem, a jeśli tak, to jaki jest najlepszy sposób na oświecenie tych ludzi?


title: Czy mogę usunąć logo firmy z oprogramowania objętego licencją Mozilla Public License w wersji 1.1?

text: Próbowałem szukać odpowiedzi na to pytanie, ale nie mogłem znaleźć niczego związanego. Mówiąc w skrócie, chcę rozwidlić istniejący projekt Komodo Edit, który jest licencjonowany na licencji MPL w wersji 1.1, i utworzyć nowy projekt/oprogramowanie pochodne. Chciałbym usunąć niektóre funkcje z bieżącego projektu, w tym logo ActiveState, ale nie rozumiem technicznego żargonu na licencji. Planuję również, aby projekt pochodny był całkowicie darmowy i open-source. Byłbym naprawdę wdzięczny, gdyby ktoś mógł mi to wyjaśnić. Oto link do licencji: https://github.com/Komodo/KomodoEdit/blob/trunk/LICENSE.txt


title: Obsługa indirection i utrzymywanie warstw wywołań metod, obiektów, a nawet plików xml

text: Jak zachować wszystko prosto, gdy zagłębiasz się w oprogramowanie za pomocą wielu wywołań metod, konstruktorów obiektów, fabryk obiektów, a nawet okablowania sprężyn. Uważam, że 4 lub 5 wywołań metod jest łatwych do zapamiętania w mojej głowie, ale gdy przejdziesz do 8 lub 9 wywołań głęboko, trudno jest wszystko śledzić. Czy istnieją strategie, dzięki którym wszystko będzie proste? W szczególności mogę szukać sposobu wykonania zadania x, ale potem, gdy śledzę w dół (lub w górę), tracę orientację w tym celu lub stwierdzam, że wiele warstw wymaga zmian, ale potem tracę śledzenie zmian podczas śledzenia do samego dołu. Lub mam wstępne plany, które okazały się nieważne, ale podczas śledzenia zapominam, że plan jest nieważny i próbuję rozważyć ten sam plan od nowa, zabijając czas .... Czy istnieje oprogramowanie, które może być w stanie pomóc ? grep, a nawet zaćmienie mogą mi pomóc w przeprowadzeniu rzeczywistego śledzenia od połączenia do definicji, ale bardziej martwię się śledzeniem wszystkiego, w tym de facto planem tego, co musi się zmienić (który może się różnić w miarę schodzenia w dół / w górę i uświadomić sobie, że poprzedni plan był kiepski). W przeszłości miałem do czynienia z kilkoma dużymi metodami, które można śledzić i prawie można dowiedzieć się, co się dzieje w ciągu kilku wywołań. Ale teraz istnieją dziesiątki naprawdę małych metod, wiele z nich to tylko pojedyncze wywołanie innej metody/konstruktora i trudno jest je wszystkie śledzić.


title: Czego powinienem się nauczyć po Pythonie?

text: Mam 12 lat i opanowałem podstawy Pythona dzięki Learn Python The Hard Way autorstwa Zeda Shawa (chyba) i dobrze mi to poszło. Co powinienem zrobić dalej? Czy masz jakieś polecane książki lub dobre tutoriale do stron internetowych? Co musisz wiedzieć przed nauką C?


title: Korzyści z używania mapowania dokumentów obiektowych (ODM)

text: Tworzę aplikację internetową na Flask i planowałem użyć mongodb. Większość przykładów używających tego stosu, z którymi się spotkałem, używała pewnego rodzaju ODM i chciałem dowiedzieć się, czy ja również powinienem. Pracowałem wcześniej z ORM dla aplikacji internetowej Java i stwierdziłem, że jej użyteczność jest ograniczona i poza preferowaniem samego używania JDBC i samodzielnego pisania sql, natknęliśmy się na kilka przypadków, w których nasze ręcznie napisane zapytania znacznie zwiększyły wydajność. Zdaję sobie sprawę, że baza danych NoSQL to inna bestia, więc zastanawiałem się, czy istnieje wiele podobieństw między ORM i ODM a problemami, które zaobserwowałem z ORM. Czy w niektórych przypadkach przy użyciu ODM z mongodb mogą wystąpić spadki wydajności? Czy jedyną korzyścią jest łatwość użycia/naturalne tłumaczenie między kodem a obiektami db? Nie mam żadnych wątpliwości Zasadniczo, chcę wiedzieć, czy tracę zbyt wiele, po prostu używając zwykłego starego „pymongo” w aplikacji do kolby, a nie ODM? PS. Jeśli jest to ważne, oczekuję, że moja aplikacja będzie mieć dużą głośność, ale zrównoważoną z natury.


title: MIT i prawa autorskie

text: Współtworzę bibliotekę licencjonowaną na licencji MIT. W licencji i w każdym pliku klasy ma u góry komentarz o treści: > Copyright (c) 2011 Joe Bloggs <joe.bloggs@example.com> Zakładam, że jest właścicielem praw autorskich do pliku i może zmienić licencję tego pliku, jak uzna za stosowne. Jeśli tworzę bibliotekę nową klasą całkowicie przeze mnie pisaną, czy mogę rościć sobie prawa autorskie do tego pliku. I umieść: > Copyright (c) 2011 Petah Piper <petah.piper@example.com> na górze?


title: Dzielenie i ukrywanie nagłówków w bibliotece statycznej

text: Piszę bibliotekę statyczną dla C/C++ (projekt osobisty). Ponieważ moje nagłówki stały się dość duże, pomyślałem, że dzielenie nagłówków byłoby dobrym pomysłem. W tej chwili nagłówek wygląda tak: * **MainClass.hpp** : * impl namespace: szczegóły implementacji zamknięte w przestrzeni nazw `impl` * deklaracje forward klas zadeklarowanych poniżej (jeśli są potrzebne) * deklaracja `MainClass` * `MainClass` deklaracje wolnych funkcji * Deklaracja specjalizacji `MainClass` * Deklaracje wolnych funkcji specjalizacji `MainClass` * Deklaracja `AuxiliaryClass1` * Deklaracje wolnych funkcji `AuxiliaryClass1` * … * Deklaracja `AuxiliaryClassN` * Deklaracje wolnych funkcji `AuxiliaryClassN` * Definicja `MainClass` * ` Definicje wolnych funkcji MainClass` * Definicja specjalizacji `MainClass` * Definicja wolnych funkcji specjalizacji `MainClass` * Definicja `AuxiliaryClass1` * Definicje wolnych funkcji `AuxiliaryClass1` * … * Definicja `AuxiliaryClassN` * Definicje wolnych funkcji `AuxiliaryClassN` Gdzie: * `AuxiliaryClassK ` jest klasą logicznie lub strukturalnie związane z „MainClass” (np. iterator dla `MainClass`, klasy zagnieżdżonej w `MainClass`, klasy pochodnej `MainClass` itp.) * Wolne funkcje `ClassX` zgodnie z zaleceniami w Jak funkcje niebędące członkami poprawiają enkapsulację i monolity nagłówek, ponieważ są to szablony. Robi się bardzo tłoczno i trudno mi się nawigować, więc pomyślałem, że podzielenie na wiele nagłówków pomoże. Jednak nie wiem, jak to zrobić dobrze. Oto jak myślę, że struktura mogłaby wyglądać tak: * **MainClass.hpp** : * deklaracje forward (w razie potrzeby) * definicje i deklaracje małych klas/struktur * `#include` inne nagłówki * **_Class.hpp* * : * Deklaracja `_Class` * Deklaracje wolnych funkcji `_Class` * **_Class.inl** : * Definicja `_Class` * `_Class` Definicje wolnych funkcji Z `_Class` dla każdej: `MainClass`, `MainClass` specjalizacja, `Klasa Pomocnicza K`. Moje pytania brzmią: * Czy rozsądnie jest chcieć podzielić nagłówek (wszystkie są funkcjonalnością `MainClass`) (mam nagłówki dłuższe niż 1000 linii i przewiduję jeszcze dłuższe) czy powinienem zostawić go tak, jak jest? * Czy powyższy schemat podziału jest w porządku? Czy powinienem dalej dzielić klasę i związane z nią bezpłatne funkcje? Czy istnieją inne rozwiązania, które sprawią, że kod będzie łatwiejszy w utrzymaniu? * Jak ukryć inne nagłówki (nie w sensie zaciemniania / czynienia kodu niedostępnym, ale unikaj ujawniania nagłówków, które widzą użytkownicy (np. w GUI z autouzupełnianiem)? Powinny one zawierać i być świadomym tylko `MainClass.hpp` Wyświetlenie innych nagłówków bez jasnego określenia, że są one zakulisowe, spowoduje niepotrzebne zamieszanie. Jednym z pomysłów jest dodanie przedrostka, takiego jak „_” (podkreślenie) lub umieszczenie ich w folderze „impl”. nie chodzi tu o ukrywanie klas (robię to z przestrzenią nazw), ale o ukrycie podziału za nagłówkiem, którego powinny używać).


title: Implementacja pól Java Singleton

text: Mam singletona w Javie i zdałem sobie sprawę, że mógłbym uczynić jego pola statycznymi i działałby tak samo jak zwykłe pola instancji. Czy byłaby różnica między wydajnością a optymalizacją? Jeśli tak, co byłoby lepsze? Czy istnieje preferowany sposób implementacji pól singleton? (znowu mówię o polach, a nie metodach)


title: Zasoby do głębokiego zrozumienia języka programowania, jego specyfikacji i gramatyki

text: Jestem inżynierem komputerowym i wszystkie nasze kursy dotyczące programowania i języków komputerowych były wprowadzeniem do C/Java i OOP. Teraz mam ochotę przeczytać specyfikację języka Java, aby nauczyć się głębokiego zrozumienia języka Java, ale rozumiem, że w specyfikacjach jest coś w rodzaju opisu gramatycznego, o którym nie mam pojęcia. Co powinienem studiować, aby móc dogłębnie zrozumieć język programowania (w szczególności elementy specyfikacji, takie jak gramatyka)? Czy przegapiłem niektóre kursy informatyki? czy powinienem wszystko rozumieć intuicyjnie? Zastanawiałem się nad przeczytaniem kilku książek o kompilatorach, ale pomyślałem, że lepiej zapytać ekspertów!


title: Jak nazwać tablice lub listę, gdy rzeczowniki są zarówno w liczbie pojedynczej, jak i mnogiej?

text: Generalnie zmienne są nazywane w liczbie pojedynczej `Car car;` oraz tablice i listy z liczbami: `List<Car> cars;` lub `Car[] cars;` Ale co z rzeczownikami, takimi jak `fish` czy `media`* są już w liczbie mnogiej? *już przegrali bitwę o klasę `Medium`.


title: Scrum: Jak bardzo Właściciel Produktu może wstrząsnąć Backlogiem Produktu?

text: Przez ostatnie 3 sprinty obserwowałem, jak nasz Product Owner nagle wrzucał nowe historie – historie, których nie było wcześniej w Product Backlog – na początek Product Backlog. Z tego powodu istniejące pozycje w backlogu nigdy nie zostaną przepracowane. Nowe historie stale przejmują ster i trafiają do naszego Backlogu Sprintu. Moje pytanie brzmi – jak bardzo Właściciel Produktu może naprawdę wstrząsnąć Backlogiem Produktu? Czy to naprawdę uczciwa gra, aby ignorować to, co już jest w zaległościach i ciągle wypychać nowe historie na szczyt? Próbowałem argumentować, że to bzdury, ale często słyszę kontrargumenty, takie jak „dostosowywanie się do często zmieniających się potrzeb biznesowych”, „poruszamy się tak szybko – jesteśmy super zwinni” i nie wiem co powiedzieć na te argumenty, chociaż czuję, że Scrum nie jest taki, jaki miał być. EDYCJA: Rozumiem, że właściciel produktu jest właścicielem zaległości produktu. Jednak w moim zespole obserwuję to, że PO stale umieszcza nowe pozycje na szczycie listy zaległości, całkowicie ignorując istniejące pozycje zaległości. Załóżmy na przykład, że budujemy samochód, a PO tworzy 10 historii, aby tak się stało. Decydujemy się na 3 historie w naszym backlogu sprintu – w ten sposób 7 historii nadal pozostaje w backlogu produktu. Jak dotąd wszystko jest w porządku. Jednak przy planowaniu następnego sprintu PO twierdzi, że musimy zbudować kij baseballowy i stworzyć wokół tego 5 historii – które są następnie umieszczane na szczycie naszego backlogu (tj. najwyższy priorytet); nieważne te historie o samochodach, które już mieliśmy w zaległościach.


title: Jakiego stylu użyć do powtarzalnego kodu (w java)

text: Mam projekt napisany w Javie, który wymagał powtarzalnego kodu. Zasadniczo sednem tego jest to, że biorę jeden obiekt i kopiuję go do dwóch różnych obiektów -- do czego użyłbym po prostu clone(), ale wiąże się to z przenoszeniem niektórych zewnętrznych mapowań. Moje pytanie brzmi, w języku takim jak Java, jeśli wykonujesz długą serię podobnych działań na dwóch obiektach, który z poniższych sposobów (lub być może inny) jest bardziej pożądany: Albo grupowanie według wykonywanej AKCJI... UnitStack usStart = new UnitStack(typ, (int)Math.ceil(str / 2d), właściciel); UnitStack usStop = new UnitStack(typ, str / 2, właściciel); Map<String, Cloneable> logStart = usStart.getActionLog(); Map<String, Cloneable> logStop = usStop.getActionLog(); logStart.putAll(usOrig.getActionLog()); logStop .putAll(usOrig.getActionLog()); MoveFlags mfStop = (MoveFlags) logStop.get("przenieś"); mfStop = ((mfStop == null) ? nowe MoveFlags(usStop) : mfStop.clone()); mfStop.addMoves(b.distanceBetween(początek, koniec, właściciel)); logStop.put("przenieś", mfStop); hcStart.setUnit(usStart); hcStop .setUnit(usStop); Czy powinienem grupować według obiektu, nad którym pracujemy? UnitStack usStart = new UnitStack(typ, (int)Math.ceil(str / 2d), właściciel); Map<String, Cloneable> logStart = usStart.getActionLog(); logStart.putAll(usOrig.getActionLog()); hcStart.setUnit(usStart); UnitStack usStop = new UnitStack(typ, str / 2, właściciel); Map<String, Cloneable> logStop = usStop.getActionLog(); logStop.putAll(usOrig.getActionLog()); hcStop.setUnit(usStop); // Odzwierciedlaj, że ruch miał miejsce... MoveFlags mfStop = (MoveFlags) logStop.get("move"); mfStop = ((mfStop == null) ? nowe MoveFlags(usStop) : mfStop.clone()); mfStop.addMoves(b.distanceBetween(początek, koniec, właściciel)); logStop.put("przenieś", mfStop); Oczywiście mógłbym wymyślić jakiś sposób, aby napisać pętlę, a może wyodrębnić ją do metody, ale w takim przypadku nie wydaje mi się, żeby były to dobre rozwiązania. (Usunąłem wiele rzeczy z obu – głównie komentarze, a także kontekst, ponieważ żadne z nich nie ma związku z pytaniem)


title: Analiza leksykalna bez wyrażeń regularnych

text: Przyglądałem się kilku lekserom w różnych językach wyższego poziomu (m.in. Python, PHP, Javascript) i wszyscy zdają się używać wyrażeń regularnych w takiej czy innej formie. Chociaż jestem pewien, że wyrażenia regularne są prawdopodobnie najlepszym sposobem na zrobienie tego, zastanawiałem się, czy istnieje jakiś sposób na uzyskanie podstawowego leksykania bez wyrażeń regularnych, może jakiś rodzaj bezpośredniego parsowania ciągów lub coś takiego. Więc tak, czy możliwe jest zaimplementowanie jakiegoś podstawowego leksykania w języku wyższego poziomu* bez używania wyrażeń regularnych w jakiejkolwiek formie? *Języki wyższego poziomu, takie jak Perl/PHP/Python/Javascript itp. Jestem pewien, że jest na to sposób w C


title: Co oznacza zakres zmiennej?

text: Myślę o zakresie zmiennej jako - "Zakres określonej zmiennej to zakres w kodzie źródłowym programu, w którym ta zmienna jest rozpoznawana przez kompilator". To stwierdzenie pochodzi z "Zakresu i czasu życia zmiennych w C++", który przeczytałem wiele miesięcy temu. Ostatnio natknąłem się na to na kursach _LeMoyne-Owen College_: ![http://sankofa.loc.edu/CHU/WEB/Courses/Cosi350/Ch4/scope.13.gif](http://i.stack.imgur .com/Krcsi.gif) Jaka dokładnie jest różnica między zakresem zmiennych w C# i (C99, C++, Java), gdy > Jednak zmienna nadal musi być zadeklarowana, zanim będzie można jej użyć


title: Dlaczego nie można odtworzyć drzewa AVL za pomocą przechodzenia w przedsprzedaży?

text: Biorąc pod uwagę drzewo wyszukiwania binarnego, rozumiem, dlaczego mogę użyć przechodzenia wszerz i przechodzenia w przedsprzedaży, aby wyświetlić wpisy drzewa w taki sposób, aby zrekonstruować drzewo w kolejności, w jakiej jest przemierzane. Jeśli jednak teraz rozważymy drzewo AVL i chcemy przejść przez drzewo w taki sposób, aby odtworzyć to samo drzewo AVL (podobnie do tego, co zrobiliśmy ze zwykłym drzewem binarnym), to dlaczego pierwsze przechodzenie wszerz zawsze działa i dlaczego zamówienie w przedsprzedaży nie działa w tym przypadku, biorąc pod uwagę, że działa dla standardowych drzew binarnych?


title: Dlaczego odwołanie do obiektu nie powinno mieć dostępu do statycznego elementu członkowskiego w C#

text: Kontekst mojego pytania: 1. Czytam C#. 2. Próba zrozumienia słowa kluczowego Static. 3. Rozumiem, że gdy Static jest stosowany do elementu klasy, może być modyfikowany tylko przez klasę, a nie przez odwołania do obiektów klasy. Podam tutaj przykład. public class BluePrint { public statyczny ciąg BluePrintCreatorName; } Jeśli muszę znać nazwę BluePrintCreator, mogę zadzwonić do BluePrint.BluePrintCreatorName; Ale jeśli dom utworzony na podstawie planu chce znać Nazwę Twórcy BluePrint, nie ma dostępu. BluePrint NewHouse = nowy BluePrint(); NewHouse.BluePrintCreatorName; //To jest niedostępne Błąd kompilatora mówi: Nie można uzyskać dostępu do elementu członkowskiego „AccessModifier.BluePrint.BluePrintCreatorName” za pomocą odwołania do wystąpienia; zamiast tego zakwalifikuj go nazwą typu. Rozumiem, że tak to działa. Ale chcę poznać podstawową koncepcję, dlaczego słowo kluczowe Static było w ogóle wymagane? Co pójdzie nie tak, jeśli odwołanie do obiektu klasy będzie miało dostęp do statycznego elementu członkowskiego?


title: Które repozytorium NoSQL jest najbardziej odpowiednie dla architektury typu Twitter?

text: W nadchodzącym projekcie muszę stworzyć aplikację internetową podobną do Twittera, w której podstawową ideą jest czytanie / pisanie krótkich wiadomości i aktualizacji statusu (podobnie jak w tweetach) oraz grupowanie tych wiadomości (podobnie jak hashtagi) Również użytkownicy mogą mieć obserwujących i widzieć ich aktualizacje statusu. Szacuję, że od 10 do 50 milionów wiadomości zostanie napisanych w ciągu 1-2 miesięcy, a odczyty to może być cokolwiek w milionach. Czytane z pewnością będą wyższe niż pisane. **Zdecydowałem już, że jakiś rodzaj NoSQL jest prawdopodobnie najlepszym podejściem do przechowywania tych danych, ale nie wiem, który z nich najlepiej pasuje do moich potrzeb.** **Spojrzałem na Hadoop / Cassandra / HBase, ale wydaje się to trochę przesadą. Rozważam również MongoDB.** Cała aplikacja internetowa zostanie skonfigurowana na Nginx, PHP z architekturą RESTful (front-end tylko na telefonach komórkowych)


title: Radzenie sobie z niedopasowaniem kultury klienta / dewelopera w zwinnym projekcie

text: Jedną z zasad agile jest... _Współpraca z klientem nad negocjacjami umowy_ ... inna to... _Osoby i interakcje nad procesami i narzędziami_ Ale tak, jak to widzę, przynajmniej jeśli chodzi o interakcję z klientem, jest jest podstawowym problemem: _Sposób myślenia klienta różni się od sposobu myślenia inżyniera oprogramowania_ To może być trochę uogólnienie, tak. Zapewne _są_ domeny biznesowe, w których niekoniecznie jest to prawdą — jest to jednak niewiele i jest ich bardzo mało. Jednak w wielu dziedzinach typowy klient to: 1. Zainteresowany codziennymi sprawami operacyjnymi – taktykami krótkiego zasięgu… niekoniecznie strategią; 2. Zrozumiałe, że dotyczy tylko natychmiastowego rozwiązania; 3. Praktyczni myśliciele, a nie abstrakcyjni myśliciele; 4. O wiele bardziej zainteresowany „wykonaniem pracy” niż rozważaniem, w jaki sposób rozwiązanie będzie wspierać przyszłe obawy. Z drugiej strony, _w ideale_, inżynierowie oprogramowania, którzy praktykują Agile to: 1. Ludzie, którzy dużo myślą o jakości; 2. Osoby, które doceniają, jak odrobina pracy z góry może zaoszczędzić mnóstwo wysiłku na dalszych etapach; 3. Doświadczeni, analityczni myśliciele. Wydaje się więc, że istnieje rozbieżność kulturowa, która hamuje „współpracę z klientami”. Jaki jest najlepszy sposób na rozwiązanie tego problemu?


title: Nauczanie Eclipse: w nowych projektach, w jakim trybie: debugowanie czy wydanie?

text: Zostałem poproszony o nauczanie moich uczniów Eclipse. Wykłady już się skończyły i widzę, że nauczyciel prosi uczniów, aby **zawsze** rozpoczynali nowy projekt w trybie „Release”. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/p8mqk.jpg) Czy to normalne? Jeśli „tak” lub „nie”, dlaczego?


title: dwa podejścia do modelowania baz danych - które zastosować, gdy

text: ostatnio zauważyłem nowe podejście do modelowania danych w porównaniu z tym, z czego korzystałem do tej pory. Wydaje się, że jest to sposób na zajęcie się modelowaniem podmiotu, który ma bardzo duży zestaw pól i często wiele z nich jest pustych. Pierwsze podejście - to, którego użyłem wcześniej: * Główna tabela dla głównego zestawu pól (a,b=1,c=2) * Dodatkowa tabela z podzbiorem pól (a,e='foo',f='bar ',...) - połączona z główną relacją 1-1 * Kolejna dodatkowa tabela z podzbiorem pól (a,j=3,k='baz',...) - połączona z główną relacją relacja 1-1 * I jeszcze jedna z resztą pól (a,n=12.4, o='foobarbar', ...) - połączona z głównym relacją 1-1 Ta, którą ostatnio widziałem to : * Główna tabela z prawie żadnymi danymi z wyjątkiem identyfikatora (a) * Tabela, która zawiera wszystkie możliwe pola (b,'to jest parametr b') * tabela, która łączy główną ze wszystkimi polami, które ma (a, b,1) i (a,c,2) i (a,e,'foo') i tak dalej. Rozumiem, że możesz zapytać o te same wyniki z obu modeli, ale nie rozumiem, jakie jest uzasadnienie drugiego - czy istnieją wyraźne przypadki, w których jeden z nich powinien być użyty w porównaniu z innym? Dzięki za radę. PS. Drugi jest używany na Oracle 11 - moje ostatnie prawdziwe doświadczenia z SQL były w czasach Postgres 7.x, ale w międzyczasie coś się zmieniło :)


title: Od TFS do Gita

text: Jestem programistą .NET i wielokrotnie używałem TFS (serwera fundacji zespołu) jako mojego oprogramowania do kontroli źródła. Dobre cechy TFS to: 1. Dobra integracja z Visual Studio (więc prawie wszystko robię wizualnie; bez poleceń konsoli) 2. Łatwe wyewidencjonowywanie, proces ewidencjonowania 3. Łatwe łączenie i rozwiązywanie konfliktów 4. Łatwe automatyczne kompilacje 5. Rozgałęzianie Teraz chcę używać Git jako szkieletu, repozytorium i kontroli źródła moich projektów open source. Moje projekty są w języku C#, JavaScript lub PHP z bazami danych MySQL lub SQL Server jako mechanizmem przechowywania. Właśnie skorzystałem w tym celu z pomocy github.com i stworzyłem tam profil oraz pobrałem GUI dla Gita. Aż do tej części było tak łatwo. Ale prawie utknąłem w dążeniu dalej. Chcę tylko wykonać kilka prostych (naprawdę prostych) operacji, w tym: 1. Tworzenie projektu na Git i mapowanie go do folderu na moim laptopie 2. Wyewidencjonowywanie/zapisywanie plików i folderów 3. Rozwiązywanie konfliktów To wszystko, czego potrzebuję Zrób teraz. Ale wydaje się, że GUI nie jest tak przyjazny dla użytkownika. Spodziewam się, że GUI będzie miał opcję „Połącz z…” lub coś w tym rodzaju, a następnie oczekuję, że zostanie wyświetlona lista projektów, a kiedy wybiorę jeden, oczekuję, że zobaczysz listę plików i folderów tego projektu , podobnie jak eksplorowanie projektu TFS w programie Visual Studio. Następnie chcę móc kliknąć plik prawym przyciskiem myszy i wybrać opcję „zamelduj...” lub „wyewidencjonuj” i takie tam. Czy dużo oczekuję? Co powinienem zrobić, aby łatwo używać Git tak jak TFS? Czego mi tu brakuje?


title: MVC wydaje się tworzyć zależności, które po prostu „nie czują się dobrze”

text: Mogę nie rozumieć MVC, więc wybacz mi, jeśli tak jest. To jest moja struktura programu (Java/Swing): Mam JTable (Widok), który jest wskazywany przez niestandardową połączoną listę (Model). Gdy użytkownik próbuje dodać coś do tabeli JTable, detektor akcji (kontroler) aktualizuje połączoną listę (model), która aktualizuje tabelę JTable (widok). Oto mój problem: Połączona lista powinna być w stanie funkcjonować niezależnie od JTable, ale tak nie jest. Powiedzmy, że zdecydowałem się pozbyć interfejsu użytkownika i po prostu użyć połączonej listy do wewnętrznych rzeczy w programie (połączona lista ma inne właściwości i funkcje poza zakresem MVC). To powinno działać, ponieważ FUNKCJA połączonej listy jest niezależna od funkcji JTable, ale musiałbym edytować dużo kodu, aby to zrobić (lub mieć trochę kodu, który już nic nie robi) z powodu MVC. Czy więc całkowicie źle rozumiem MVC, tylko trochę, czy też zależności są ceną, którą muszę zapłacić? UWAGA: To jest uproszczony widok mojego projektu. W rzeczywistości w modelu znajdują się inne obiekty i nie tylko JTable w moim interfejsie. Połączona lista zawiera również inne elementy, które otrzymują aktualizacje inne niż liczba obiektów.


title: czy istnieje metoda algebry formalnej do analizy programów?

text: Czy istnieje formalny/akademicki związek między programem imperatywnym a algebrą, a jeśli tak, gdzie mógłbym się o tym dowiedzieć? Przykład, o którym myślę, to: if(C1) { A1(); A2(); } jeśli(C2) { A1(); A2(); } Reprezentowane jako suma terminów: (C1)(A1) + (C1)(A2) + (C2)(A1) + (C2)(A2) = (C1+C2)(A1+A2) Chodzi o to, że manipulacja może prowadzić do programowej refaktoryzacji - „faktoring” jest powszechną koncepcją w tym przykładzie.


title: Jak łatwo zaktualizować Entity Model z bazy danych, gdy napisano już wystarczającą ilość kodu?

text: Jestem nowym użytkownikiem Entity Framework. Wiem, że istnieje możliwość aktualizacji modelu z bazy danych, ale chcę wiedzieć, jak łatwe i skuteczne jest to zadanie. Być może będę musiał zaktualizować swój model za kilka tygodni, ale do tego czasu wiele linijek kodu zostało już wepchniętych do środka. Czy trudno jest śledzić zmiany i sprawić, by kod działał?


title: Czy można sprawdzić, czy plik MS Word jest napisany ręcznie lub automatycznie wygenerowany za pomocą jakiegoś konwertera?

text: Dostałem jeden projekt z pewnymi wymaganiami. Zasadniczo mój klient zapewnia prace związane z wprowadzaniem danych. W tym celu konwertuje pliki graficzne (skanowanie kopii artykułów, formularzy itp.) do pliku dokumentu (słowo MS), wpisując ręcznie. Aby utrzymać jakość tej pracy, wyznaczył pewne role w formatowaniu tekstu dokumentów, takie jak konkretna czcionka, rozmiar czcionki, rozmiar papieru itp., a także porównuje pliki graficzne z konkretnym dokumentem w celu korekty, co jest bardzo czasochłonnym zadaniem, a jego niektórzy **sprytni pracownicy ** użyj konwertera obrazu na słowo dla tej konwersji, zamiast pisać ręcznie. Dużo płaci we wpisie danych i nie chce zautomatyzowanych konwertowanych plików przy użyciu jakiegoś oprogramowania do konwersji. Tak więc w zasadzie chce mieć w swoim projekcie dwie funkcje, które: 1. automatyzują proces sprawdzania standardowego formatu i 2. automatycznie odrzucają obrazy do przekonwertowanych plików tekstowych. to jest cały scenariusz, a teraz **moje pytanie** brzmi: 1. Czy można dowiedzieć się, który plik jest ręcznie wpisywany przez zatrudnienie, a który jest konwertowany za pomocą oprogramowania do konwersji? 2. Czy jest możliwe, że możemy sprawdzić plik pod kątem określonego standardowego formatu?


title: Dlaczego wzorzec wstrzykiwania zależności nie został uwzględniony w Gang of Four?

text: Dlaczego wzorzec wstrzykiwania zależności nie został uwzględniony w czteroosobowym gangu? Czy BÓG wyprzedził powszechne testy automatyczne? Czy wstrzykiwanie zależności jest teraz uważane za wzorzec podstawowy?


title: Dlaczego „programista” jest definiowany jako projektant, a „programista” jako twórca?

text: Podczas gdy szukałem definicji niektórych popularnych terminów w _en.wiktionary.org_ , byłem zaskoczony tym, co znalazłem. Definiuje **programistę** jako > Tego, który projektuje oprogramowanie. - _wiktionary.org_ i **developer** jako > Programista; osoba lub firma, która tworzy lub modyfikuje komputer > oprogramowanie. - _wiktionary.org_ Mam licencjat z informatyki i prawie rok zawodowo pracuję w dziale IT i zawsze uważałem, że ich definicje są przeciwne. Czy to jest prawdziwa definicja programisty i programisty, czy tylko dlatego, że jest krótko zdefiniowana _(ale mimo to wydaje mi się, że powinno być odwrotnie)_?


title: Architektura klasy C# dla usług REST

text: Integruję się z zestawem usług REST wystawionych przez naszego partnera. Jednostka integracji jest na poziomie projektu, co oznacza, że dla każdego projektu stworzonego po stronie naszych partnerów wyeksponują oni unikalny zestaw usług REST. Dla jasności załóżmy, że istnieją dwa projekty — projekt1 i projekt2. Usługi REST dostępne w celu uzyskania dostępu do danych projektu to: /project1/search/getstuff?etc... /project1/analysis/getstuff?etc... /project1/cluster/getstuff?etc... /project2/search /getstuff?etc... /project2/analysis/getstuff?etc... /project2/cluster/getstuff?etc... Moim zadaniem jest umieszczenie tych usług w klasie C#, która będzie używana przez naszego programistę aplikacji. Chcę uprościć programistę aplikacji i myślę o udostępnieniu czegoś takiego jak następująca klasa. class KlientProjektu { KlientWyszukiwarki _klientWyszukiwania; KlientAnalizy _klient analizy; ClusterClient _clusterclient; ciąg Projekt {get; set;} ProjectClient(ciąg _projekt) { Projekt = _projekt; } } SearchClient, AnalysisClient i ClusterClient to moje klasy do obsługi odpowiednich usług pokazanych powyżej. Problem z tym podejściem polega na tym, że ProjectClient będzie musiał zapewnić publiczne metody dla każdego interfejsu API udostępnianego przez SearchClient itp. public void SearchGetStuff() { _searchclient.getStuff(); } Jakieś sugestie, jak mogę to lepiej zaprojektować?


title: Wyszukiwanie binarne wydaje się lepsze, dlaczego komisja C++ nadal ma Find w bibliotece algorytmów?

text: Chcę wyszukać liczbę całkowitą w wektorze liczby całkowitej. Mam dwóch kandydatów do pracy: 1. Wyszukiwanie binarne 2. Wyszukiwanie Wygląda na to, że **Wyszukiwanie binarne** jest najlepszym kandydatem do tego zadania, ponieważ chociaż muszę posortować wektor, całkowity czas działania wyniesie `O(NLog2N )` zakładając, że szybkie sortowanie zajmuje `O(NLog2N)`, a wyszukiwanie bierze `O(Log2N)`. Czas działania **Znajdź** to „O(N)”. Wydaje się tak jasne, że **Binary Search** jest lepsze od **Find** , dlaczego komisja C++ nadal ma Find w bibliotece algorytmów? Jestem pewien, że komisja C++ miała swoje powody, aby uwzględnić **Find** , jakich korzyści z **Find** mi brakuje lub w jaki sposób **Find** jest lepsze od **Binary Search**? EDYTOWANO: Zmieniono czas działania funkcji szybkiego sortowania na NLog2N


title: Jak zatrudnić testerów, udostępniając im wadliwą aplikację do testowania ich wydajności?

text: Mój szef chce rekrutować testerów na podstawie ich wydajności testowania (liczba zidentyfikowanych błędów). Tak więc znalazł się na krótkiej liście 5 osób i muszę dać im aplikację pełną błędów i zobaczyć, jak radzą sobie w zgłaszaniu oczywistych i ukrytych błędów. Wiem... to trochę dziwnie brzmi. Myślę, że to jest jak świat kodowania, w którym zatrudniasz programistę, oceniając jego umiejętności programowania (co jest trochę łatwiejsze). Po zatrudnieniu testerzy testowaliby aplikację typu swing Java, więc ich znajomość frameworków/narzędzi testowych nie jest tak naprawdę wymagana. Tak więc, moje pytanie brzmi: Jak mam znaleźć aplikacje zawierające błędy (internetowe/nie-internetowe), najlepiej Java, które mogą wypróbować testerzy z krótkiej listy? Jak byś wykonał to zadanie, gdyby szef Cię o to poprosił? W tym momencie nie mam pojęcia - trochę googlowałem, myślałem o znalezieniu nowych aplikacji na sourceforge z wieloma błędami, ale oba podejścia nie działały dla mnie.


title: W jaki sposób aktualizowane są zmienne limitu i pozycji Java ByteBuffer?

text: Istnieją dwa scenariusze: pisanie i czytanie **Writing** : Za każdym razem, gdy piszę coś do ByteBuffer, wywołując jego metodę `put(byte[])`, zmienna `position` jest zwiększana jako: `bieżąca pozycja + rozmiar bajtu[ ]` i `limit` pozostają na max. Jeśli jednak umieszczę dane w buforze widoku, będę musiał ręcznie obliczyć i zaktualizować `pozycję` Zanim wywołam metodę `write(ByteBuffer)` kanału, aby coś zapisać, będę musiał ` flip()` Bytebuffer tak, że pozycja `position` wskazuje na zero, a `limit` na ostatni bajt, który został zapisany w ByteBuffer. **Czytanie** : Za każdym razem, gdy wywołuję metodę `read(ByteBuffer)` w celu odczytania czegoś, zmienna `position` pozostaje na 0, a zmienna `limit` ByteBuffer wskazuje na ostatni odczytany bajt. Tak więc, jeśli ByteBuffer jest mniejszy niż odczytywany plik, zmienna `limit` jest ustawiana na maksimum. Oznacza to, że ByteBuffer jest już odwrócony i mogę przystąpić do wyodrębniania wartości z ByteBuffer. **Proszę, popraw mnie tam, gdzie się mylę** :)


title: Czy można właściwie zlecić projektowanie?

text: Pracuję w firmie przechodzącej proces redukcji zatrudnienia. Zakłada się, że wiele „odpuszczonych” prac programistów zostanie ostatecznie zleconych na zewnątrz. Niektórzy z tych programistów mieli jakiś projekt do wykonania. Czy można właściwie zlecić zarówno projektowanie, jak i tworzenie/kodowanie? Uważam, że przez outsourcing projektowania tracimy wszelkie wewnętrzne możliwości prawdziwego „posiadania” kodu. Bardzo trudno będzie go utrzymać. Również będzie nam ciężko zapewnić prawidłowy rozwój. Jak mogę rozwiązać te problemy?


title: Czego mi brakuje w PHP?

text: To jak ta mityczna rzecz, o której dominująca część programistów mówi, że jest po prostu najlepszą opcją dla back-endowego rozwoju, części, o której praktycznie nic nie wiem poza absolutnymi podstawami. Więc przeglądałem kilka razy tutoriale PHP, próbując dowiedzieć się, dlaczego jest tak potężny i powszechny, ale jest to denerwujące jak diabli -- wszystkie tutoriale traktują cię jak nowego programistę. Wiesz, w ten sposób tworzysz instrukcję If Else, oto pętla for itp. „Zaawansowane tematy” pokazują, jak tworzyć instrukcje POST i GET i tak dalej. Ale musi być w tym coś więcej! Nie rozumiem! To praktycznie nie różni się od JavaScript. Czego mi brakuje w tym języku? Co jeszcze może zrobić? Gdzie jest moc i wszechstronność? Słyszałem, że nazywa się to zupą funkcyjną; gdzie są wszystkie funkcje? Proszę, zbesztaj mnie. Wyraźnie czegoś mi brakuje.