title: przejście od tworzenia oprogramowania do analizy biznesowej

text: Jestem doświadczonym analitykiem/programistą, który od starszego programisty stał na czele małego zespołu pracującego nad aplikacjami biznesowymi dla dużej firmy. W ciągu ostatnich dziesięciu lat pracowałem w tym samym obszarze domeny biznesowej i zdobyłem sporo wiedzy i doświadczenia domenowego pracując bezpośrednio z użytkownikami końcowymi (biznesowymi). Ze względu na moją znajomość domeny biznesowej zaproponowano mi rozmowę kwalifikacyjną na stanowisko analityka biznesowego (BA). Nie chcę przez to powiedzieć, że znudziło mnie samo tworzenie oprogramowania, wcale nie, w rzeczywistości w ciągu ostatnich dwóch lat odkryłem je na nowo i nauczyłem się więcej technologii niż w poprzednich ośmiu latach, ale raczej postrzegaj ten ruch (od analityka/dewelopera do ba) jako rozwój kariery. Będę miał szansę nauczyć się nowych rzeczy, ale **co ważniejsze, będę mógł mieć większy wpływ na proces rozwoju, co powinno zaowocować, no cóż, lepszym oprogramowaniem**. Płaca też jest nieco lepsza. To właśnie motywuje mnie… do pójścia na rozmowę kwalifikacyjną. **Jednak:** Gdybym zdał sobie sprawę, że kilka lat później, że nie jestem stworzony do bycia dobrym licencjatem, czy byłbym w stanie wrócić i zacząć programować od nowa, biorąc pod uwagę, że w ogóle bym nie programował podczas wykonywania pracy licencjackiej? To mnie niepokoi w najbliższym czasie. Myślę, że w dłuższej perspektywie bycie licencjatem sprawia, że wiedza zawodowa jest mniej (lub nie) transferowalna. Nie jestem jednak pewien, czy tak jest naprawdę, więc jeśli możesz podzielić się swoimi przemyśleniami – proszę, zrób to. Jako programista, jeśli sprawy mają się potoczyć naprawdę źle, zawsze mogę zmienić pracę i zacząć programować coś, co ma ogromne zapotrzebowanie, np. na programowanie. aplikacje mobilne na dziś. Ale myślę, że licencjaci różnią się w pewnym sensie, ponieważ ich doświadczenie/wiedza jest tak powiązana z konkretną branżą, że są wartościowe tylko dla niewielkiej liczby firm w tej samej branży/branży. Moją kolejną obawą jest to, że bycie licencjatem sprawi, że będę samotnym jeźdźcem, pomiędzy osobami wszystkich innych zespołów/działów (biznesu, IT, zarządzania), co byłoby trudną pozycją do ... na co dzień. Wreszcie, wiele razy widziałem, jak BA zostali zdegradowani do pisania / testowania / pracy wsparcia technicznego, zamiast wyciągania wymagań od biznesu / użytkowników i rozumowania z IT na temat tego, co można zrobić i jak (co uważam za „prawdziwe BA ” powinien robić). Moje pytanie brzmi – czy powinienem spróbować przejść do BA, czy moje założenia (które można wywnioskować z tego, co napisałem powyżej) dotyczące roli BA w procesie rozwoju są błędne i lepiej pozostać tam, gdzie jestem teraz? Dziękuję Ci.


title: Czy "Viaweb" działał w przeglądarce bez JavaScriptu i jakoś używał tylko Lispa?

text: Właśnie przeczytałem Beating the Averages, a pan Graham pisze, że mieli znaczną przewagę nad konkurentami, ponieważ używali Lispu. Z tego, co rozumiem, Viaweb był edytorem WYSIWYG, który działał w przeglądarce, aby klienci mogli tworzyć własne „sklepy”. Jest to oczywiście nie do pomyślenia bez JavaScriptu, ale w tym artykule nie ma o tym mowy. Pan Graham mówi tylko o Lisp i nic więcej. Czy więc (było?) jest w jakiś sposób możliwe ominięcie JavaScriptu i użycie Lispa na przednim i tylnym końcu?


title: Dlaczego aplikacja Java miałaby wywoływać do siebie RPC?

text: W mojej nowej pracy pracuję z wielowątkową, domową, wielomodułową aplikacją. Używamy protokołu `Thrift` do komunikowania wywołań `RPC` między różnymi samodzielnymi aplikacjami w systemie rozproszonym. Jeden z nich nasłuchuje na wielu portach i właśnie zauważyłem, że faktycznie wykonuje wywołanie RPC do siebie z jednego wątku wywołanego z jednego gniazda, którego nasłuchuje (wywołanie usługi internetowej) do innego portu w tej samej aplikacji. Sprawdziłem, że mógłby osiągnąć to samo, gdyby po prostu poszedł i bezpośrednio wywołał metodę, którą ostatecznie wywołuje zdalna procedura, ponieważ wszystko znajduje się w tej samej aplikacji, tej samej JVM. Aby było jeszcze bardziej tajemnicze, połączenie jest całkowicie synchroniczne, tj. nie ma żadnych wywołań zwrotnych. Pierwszy wątek całkowicie siedzi i czeka, aż wykona połączenie przez przewód do siebie i wróci. Teraz jestem zakłopotany, dlaczego ktokolwiek miałby to zrobić w ten sposób. Wygląda na to, że dzwonisz do kogoś, kto siedzi w tym samym pokoju, co ty. Czy ktoś może wyjaśnić, dlaczego deweloper przede mną wymyślił powyższy model? Może jest jakiś powód i czegoś mi brakuje.


title: Czy powinienem używać git i mercurial w tym samym katalogu?

text: Poszukuję rozwiązania umożliwiającego jednoczesne kontrolowanie wersji kodu frameworka i kodu projektu. Jeśli używam frameworka MVC, mogą istnieć określone katalogi, w których powinienem umieścić kod projektu. Chcę łatwo stosować aktualizacje struktury za pomocą kontroli wersji, jednocześnie zachowując kod projektu w osobnym repozytorium. Rozwiązaniem, które wymyśliłem, jest sklonowanie repozytorium frameworka za pomocą git, a następnie utworzenie na nim repozytorium Mercurial i utworzenie .gitignores i .hgignores, aby nie wychwytywały nawzajem kodu. Moja struktura katalogów teoretycznie wyglądałaby mniej więcej tak: * Framework/ (git) * Framework_Code/ (git) * Models/ (git) * projectModel.php (hg) * Views/ (git) * projectView.html (hg) * Kontrolery/ (git) * projectController.php (hg) * Front_Controller.php (git) Zakładając, że mam poprawne .gitignores i .hgignores, kiedy są aktualizacje frameworka mogę zrobić prosty git pull A kiedy muszę zatwierdzić kod projektu Mogę zrobić hg commit Czy to zły przepływ pracy? Czy są jakieś _łatwiejsze_ sposoby na skonfigurowanie czegoś takiego za pomocą git lub mercurial? Jestem otwarty na alternatywne rozwiązania, ponieważ wydaje się, że ktoś mądrzejszy ode mnie miałby rozwiązanie.


title: Jaka jest właściwa licencja na sprzedaż aplikacji internetowej bez rezygnacji z ponownego wykorzystania kodu?

text: Tworzę aplikację internetową dla klienta, który prawdopodobnie będzie używał jej do użytku komercyjnego. Nie jestem ze mną powiązany, ani nie jesteśmy partnerami handlowymi. Jednak chociaż tworzę ten projekt dla tego klienta, chcę mieć pewność, że będę mógł ponownie wykorzystać ten sam kod w przyszłych projektach. Wiem, że jest wiele licencji (GPL itp.), ale nie jest dla mnie jasne, która z nich spełnia następujące wymagania: * Kod mogę sprzedać klientowi (więc on płaci mi za kod) * Klient może użyć kod do użytku komercyjnego * Nadal jestem właścicielem kodu, tj. mogę ponownie wykorzystać kod do przyszłych prac, zarówno w pracach o otwartym kodzie źródłowym, jak i innych projektach (które mogę sprzedawać) Ponadto nie jest dla mnie jasne: kiedy wybiorę Licencjonuję, jak mogę go "zastosować"? Mam na myśli: kto „zaświadcza”, że moja aplikacja jest objęta tą konkretną licencją i czy muszę płacić za ten „certyfikat”? Z góry dziękuję :)


title: Identyfikowanie elementów z plików danych generowanych przez witryny stowarzyszone

text: Pracuję z plikami danych z witryn stowarzyszonych. Podstawową ideą jest zapewnienie interfejsu, w którym użytkownik może wkleić link do źródła danych XML (są to ogromne btw, około 60 mb), który następnie byłby przesyłany strumieniowo, analizowany na małe fragmenty i wydobywany w celu uzyskania wymaganych danych, które następnie byłyby przechowywane w bazie danych. Problem polega na tym, że różne witryny partnerskie mają różne schematy dla swoich plików XML. Trochę trudno jest odwzorować elementy w XML-u na atrybuty Twojej bazy danych, gdy tak naprawdę nie wiesz, który element zawiera co. Moje rozwiązanie: Użyj XPath, aby przejść przez pierwszy zestaw elementu nadrzędnego i jego elementów podrzędnych, pobrać elementy, a także dane i poprosić użytkownika o zmapowanie tych danych do atrybutów w bazie danych, wybierając z zestawu przycisków opcji, które reprezentują atrybuty z bazy danych. Będzie to zrobione tylko raz dla każdego nowego kanału, gdy system będzie wiedział, co jest, automatycznie prześle dane z XML do bazy danych. Czy to brzmi realnie? Czy jest lepsze rozwiązanie? Zdaję sobie sprawę, że to pozostawia niewygodną lukę dla ludzkiego błędu.. Dzięki.


title: Sprawdzanie odporności programu za pomocą statycznej analizy kodu

text: (Opierając się na tym pytaniu) Jeśli masz statyczny analizator kodu, taki jak Checkstyle, czy możliwe jest powiązanie jakichkolwiek elementów, które sprawdza, z rzeczywistą odpornością? Niektóre z rzeczy, które sprawdza Checkstyle to np.: * **Projektowanie klas** : Widoczność elementów klasy, wymuszanie _public_ tylko statycznych elementów końcowych, brak publicznych konstruktorów dla klas użytkowych, wyjątki są niezmienne itp. * **Kodowanie** : Inline warunkowe, bez pustych instrukcji, bez nielegalnego tworzenia instancji i magicznych liczb * **Duplikacja** : Sprawdza duplikację kodu, * **Import** : Sprawdza, czy pakiety są importowane poprawnie * **Metryki** : Sprawdza wszystko z numeru razy operatory logiczne zostały użyte w instrukcji do liczby klas, na których dana klasa opiera się na innych klasach (sprzężenie) itp. * **Konwencje nazewnictwa** : Sprawdza wiele właściwości nazwy zmiennej, nazw pakietów, nazw metod, klasy nazwy itp. To tylko niektóre z głównych rzeczy, które sprawdza Checkstyle. Czy którykolwiek z tych obszarów może rzeczywiście pomóc „poprawić” niezawodność kodu poprzez wykrywanie „błędów”? Mam na myśli, że pomaga to w czytelności i innych zapachach kodu, ale nie widzę, jak mogę odnieść to do odporności. Czy musisz spojrzeć na kod w czasie wykonywania, aby faktycznie sprawdzić problemy z odpornością?


title: Nazwij poprawnie obiekt użytkownika i tabelę użytkowników

text: Może to proste, ale myślę o tym za każdym razem, gdy buduję nową aplikację. Jak nazwać klasę dla _bieżącego_ użytkownika aplikacji i dla klasy _orm_ tabeli użytkowników? Zwykle mam coś w stylu * **CurrentUser** : Zalogowany użytkownik, zapisany w sesji, informacje o ostatniej aktywności itp. * **User** : Klasa ORM (C# EF CodeFirst, ale to nie ma znaczenia) I tak, mogą mieć tę samą nazwę w różnych przestrzeniach nazw, ale tak naprawdę to mi się nie podoba.


title: Jak sprawić, by mój zespół był podekscytowany pisaniem bloga?

text: Mój zespół zgodził się, że pisanie bloga o rozwoju firmy to dobry pomysł. Istnieje wiele udokumentowanych korzyści z blogowania, zarówno dla osób prywatnych, jak i dla firmy. Jednak choć wszyscy zgadzają się, że blog to teoretycznie dobry pomysł, nikt nie wydaje się chcieć usiąść i napisać wpisu. Pomiędzy posiadaniem i niekończącym się napływem innej pracy do wykonania, większość zespołu to introwertycy, którzy na ogół nie lubią się tam pojawiać, oraz przekonanie, że istnieje duża szansa, że blog nie przyjmie się i zostanie pozostawiony w każdym razie gnić w jakimś zakątku internetu, nie jestem do końca pewien, jak sprawić, by ludzie byli podekscytowani tym, że faktycznie zaczynają. Nie chcę po prostu zmuszać kogoś do rozpoczęcia pisania, jeśli nie chce, nikomu nie pomaga posiadanie pospiesznie napisanego, mało informacyjnego, nudnego bloga. Co mogę zrobić, aby mój zespół był podekscytowany tym, że faktycznie napisze jakiś artykuł?


title: Gdzie wstawić dane do bazy danych?

text: Tworzę całkiem standardowy formularz rejestracji PHP, który sprawdzi dane wprowadzone przez użytkownika, a następnie przekieruje do strony z komunikatem o sukcesie. Chciałbym przechowywać te dane w bazie danych. Czy powinienem wstawić te informacje do bazy danych przed przekierowaniem strony czy po jej przekierowaniu?


title: Jak obsłużyć wersjonowanie z wieloma niezależnymi pull requestami w repozytorium Git?

text: Załóżmy, że Alicja ma repozytorium Git, a wersja jest śledzona wewnątrz repozytorium (powiedzmy `package.json` dla npm). Bob wysyła żądanie ściągnięcia do Alicji, które zwiększa numer wersji z `0.1.0` do `0.1.1` Karolina wysyła również żądanie ściągnięcia do Alicji (niezależnie od żądania Boba), które zwiększa numer wersji do `0.1.1` jako dobrze. Jak Alicja może poradzić sobie z tą sytuacją?


title: Zagnieżdżone obiekty w REST

text: Mam prosty zestaw zasobów, nie więcej niż 10 typów, z pewnymi relacjami jeden-do-wielu. Na przykład * Zamówienie ma wiele wpisów * Wpis ma wiele komentarzy * Z maszyną może być powiązanych wiele wpisów * Z materiałem może być powiązanych wiele zamówień Wszystkie obiekty modelu są identyfikowane przez unikalny klucz podstawowy, który komunikuję się za pomocą wywołań HTTP REST. Jak należy modelować obiekty? ### Opcja 1: Zagnieżdżanie obiektów Relacje mogą skutkować zagnieżdżonymi obiektami: entry{ PK: '_', prop1: '_', prop2: '_', machine:{ PK: '_', prop3: '_' }, order: { PK: '_', material: { PK: '_', prop4: '_' } } } I podobnie dla pozostałych obiektów ### Opcja 2: Referencja przez PK To podejście "spłaszcza" obiekty : entry{ PK: '_', prop1: '_', prop2: '_', machinePK: '_', orderPK: '_' } Jakie jest najlepsze podejście? oczywiście oba mają wyraźne zalety i wady. Czy podejście hybrydowe to opłacalne rozwiązanie? Jeśli tak, to jakimi kryteriami powinienem się kierować, aby wybrać między obiektami „płaskimi” lub „zagnieżdżonymi”? Czy to może zależeć od technologii, której używam do wdrożenia tego (zmiana modelu z powodu technologii wydaje się jednak złą praktyką...)? Aby nadać kontekst, używam ASP.NET WebApi 2 dla backendu i AngularJS w Typescript dla frontendu


title: Wstawianie danych do bazy danych z Androida

text: Muszę zbudować aplikację, w której wymaga się, aby moi klienci wysyłali dane ze swojego urządzenia z Androidem i muszę je zapisać w bazie danych. Zrobiłem część kodowania, która wstawia dane z emulatora Androida do mojej bazy danych XAMPP na localhost, teraz muszę zaimplementować prawdziwą rzecz. Jak mogę połączyć urządzenia, na których zostanie zainstalowana moja aplikacja, z utworzoną przeze mnie bazą danych XAMPP, aby można było do niej wstawiać wysyłane dane?


title: Jak obliczyć, ile adresów IP znajduje się w danym zakresie?

text: Zastanawiam się, czy istnieje formuła na obliczenie ilości adresów IP w danym zakresie. Mam system, który przyjmuje albo pojedynczy adres IP, albo początkowy i końcowy adres IP: * Pojedynczy może być: `145.16.23.241` * Zakres może być następujący: `145.16.23.122 - 145.16.23.144` Osoby wprowadzające nie są one techniczne ani nie otrzymują tych szczegółów od osób technicznych, więc sugerowanie używania notacji CIDR nie jest dla mnie odpowiedzią. Chcę być w stanie podkreślić, że wprowadzając zakres taki jak: `122.100.10.12 - 128.10.200.140` może to nie być zakres, a raczej 2 pojedyncze adresy IP ponieważ taki zakres składałby się z `x` (duża liczba z) adresy IP. Czy istnieje podstawowa formuła, która pomoże mi to podkreślić?


title: Jak kompilator optymalizujący reaguje na program z zagnieżdżonymi pętlami?

text: Załóżmy, że masz kilka zagnieżdżonych pętli. public void testMethod() { for(int i = 0; i<1203; i++){ //niektóre obliczenia for(int k=2; k<123; k++){ //jakieś obliczenia for(int j=2; j <12312; j++){ //jakieś obliczenia dla(int l=2; l<123123; l++){ //jakieś obliczenia dla(int p=2; p<12312; p++){ //jakieś obliczenia } } } } } } Kiedy powyższy kod dojdzie do etapu, w którym kompilator będzie próbował go zoptymalizować (chyba, że jest to moment, w którym język pośredni musi zostać przekonwertowany na kod maszynowy?), co kompilator spróbuje zrobić? Czy nastąpi jakaś znacząca optymalizacja? Rozumiem, że optymalizator rozbije pętle za pomocą rozszczepienia pętli. Ale to tylko na pętlę, prawda? Mam na myśli moje pytanie, czy podejmie jakiekolwiek działania wyłącznie w oparciu o zobaczenie zagnieżdżonych pętli? A może po prostu zoptymalizuje pętle jedna po drugiej? Jeśli Java VM komplikuje wyjaśnienie, załóżmy, że jest to kod C lub C++.


title: Konwersja bazy danych 1 000 000 wierszy

text: Jeśli mam bazę danych, która przechowuje dane logowania 1 000 000 użytkowników w PLAINTEXT, ile wysiłku zajmie mi zaszyfrowanie tych haseł przez md5?


title: Jak piszesz blogi techniczne?

text: Zazwyczaj czytam dużo o rzeczach związanych z programowaniem. Gdy temat, który czytam nie jest bezpośrednio związany z moją pracą (powiedzmy czytając o niektórych algorytmach, których nie używam w codziennej pracy), zapominam o nich. Jednym ze sposobów wzmocnienia tego, czego się nauczyłeś, jest pisanie blogów. Jestem początkującym w pisaniu blogów. Kiedy zacząłem pisać, zorientowałem się, że to bardzo trudne. Nawet samo odtworzenie treści zajmuje około dwóch godzin. Napisanie przemyślanego bloga często zajmuje cały dzień, a czasem nawet weekend. Czy to normalne? Jakieś wskazówki dotyczące pisania samouczków technicznych/blogów technicznych?


title: JavaScript: testowanie z niezdefiniowaną wartością

text: Dowiedziawszy się więcej o właściwości documentMode w IE, natknąłem się na jakiś kod sniffujący, który z przyczyn nie działa w przeglądarkach takich jak Firefox. Jednak uproszczona wersja testu brzmiałaby następująco: if(undefined < 9) planA(); w przeciwnym razie planB(); Teraz w Firefoksie przechodzi do planB(), ale robi to: if(undefined > 9) planA(); // uwaga: większy niż inny planB(); Pytanie brzmi, czy jest to udokumentowane zachowanie? To znaczy, czy niezdefiniowana wartość powoduje zwarcie testu?


title: Przetwarzaj każdy wiersz względem siebie, ile by to kosztowało?

text: Jeśli mam `n` wierszy w bazie danych i chcę porównać każdy wiersz ze sobą, ile pętli (lub procesów) musiałbym zrobić. Czy to **n 2**? (więc jeśli mam 30 000 wierszy, to byłoby 900 000 000) Czy jest to: for (i = 0; i < 30000; i++) { for (j = i + 1; j < 30000; j++) [ // Przetwarzanie } } Jeśli jest to później, to ile to procesów (i czy istnieje równanie, które to rozwiąże, biorąc pod uwagę `n`)? Również jeśli muszę przetworzyć każdy wiersz „y” razy, jak to wpływa na obliczenia? Muszę sprawdzić bazę firm pod kątem ewentualnych duplikatów. Aby to sprawdzić, chcą sprawdzić podobieństwo wspólnych pól, takich jak nazwa firmy, numer telefonu itp. Jeśli różnica w polu jest poniżej określonego progu procentowego, oznacz je jako potencjalny duplikat. Sam potrafię to dobrze zakodować, ale jestem ciekaw, jakie będą konsekwencje jego wydajności.


title: Jak kanonizować sieć dróg

text: Pracuję na danych geograficznych, które reprezentują sieć dróg jakiegoś miasta i muszę automatycznie poprawiać nieścisłości w danych. Dane zostały wygenerowane ręcznie poprzez „rysowanie” sieci dróg na rzeczywistej nakładce mapy z systemem geograficznym, takim jak `qgis`. W rezultacie wiele odcinków dróg, które łączą się w rzeczywistości, nie jest połączonych w danych, to znaczy punkty końcowe połączonych dróg mogą być oddalone o kilka centymetrów, a czasem kilka metrów. W rezultacie sieć drogowa jest „błędnie” digitalizowana jako wykres lub obiekt kombinatoryczny — to znaczy prosty algorytm zakładający, że drogi są połączone, gdy mają wspólny punkt końcowy, jest zbyt optymistyczny i pomija wiele połączeń. Jak mogę przetworzyć i poprawić dane geograficzne, aby odzyskać prawidłową kombinacyjną sieć dróg?


title: Web services, J2EE, wiosna, pomysły na projekty integracji DB - może związane z data mining?

text: Jestem absolwentem CS (eksploracja danych i uczenie maszynowe) i mam dobrą znajomość podstawowej JAVA (>3 lata). Przeczytałem sporo rzeczy na temat wzorców projektowych J2EE Web services (mydło i odpoczynek) wiosennych i hibernacji Java Concurrency - zaawansowanych funkcji, takich jak Task i Executors. Chciałbym teraz zrobić projekt łączący te rzeczy (w wolnym czasie Corse), aby lepiej zrozumieć te rzeczy i stworzyć kompletne oprogramowanie (aby nauczyć się najlepszych zasad projektowania itp. + svn, maven) . Wszelkie dobre pomysły na projekty byłyby naprawdę mile widziane. Chcę tylko zbudować te rzeczy do nauki, więc naprawdę nie mam nic przeciwko ponownemu wymyślaniu koła. Ponadto wszystko związane z eksploracją danych byłoby dodatkowym bonusem (pasuje do moich badań), ale absolutnie nie jest konieczne (ponieważ ten projekt jest bardziej do nauki tworzenia oprogramowania na dużą skalę)


title: Aplikacja internetowa a aplikacja komputerowa w odniesieniu do wdrażania

text: Korzystam z okazji, aby lokalna firma opracowała małego, prostego menedżera ewidencji czasu pracy (nadal rejestruje czas ręcznie) i jestem obecnie w fazie planowania. Będzie zawierał podstawowe funkcje, takie jak zarządzanie informacjami o pracownikach, rejestrowanie przepracowanego tygodniowo czasu do listy płac oraz generowanie raportów dla administracji. Od jakiegoś czasu opracowuję aplikacje Windows Forms i jestem całkiem pewien, że moje umiejętności kodowania są tam, gdzie powinny być w tym projekcie, ale jestem całkiem nowy zarówno w ASP.NET, jak i koncepcji tworzenia pełnego systemu komputerowego, w przeciwieństwie do indywidualne aplikacje, więc moje pytania prawdopodobnie zabrzmią bardzo elementarnie. Zmagam się głównie ze zrozumieniem, jak wybrać między ASP.NET i Windows Forms w odniesieniu do wdrażania w dół drogi. Mam nadzieję, że możecie zaoferować jakiś wgląd. Wciąż nie rozumiem, jak działa hosting baz danych/aplikacji internetowych. Jeśli programuję dla komputerów stacjonarnych, czy baza danych będzie potrzebować fizycznego serwera, jeśli więcej niż jedna stacja robocza/klient chce uzyskać dostęp? Czy jedna ze stacji roboczych może działać jako serwer (w danym momencie pracuje mniej niż 20-30 pracowników, więc rozmiar danych nie powinien być problemem)? Czy system ASP.NET wymagałby zakupu hosta internetowego? Lub czy pliki sieci Web mogą być hostowane na lokalnym komputerze/serwerze z usługami IIS jako intranetem? Czy wirtualizacja może się gdzieś w tym wszystkim zmieścić? Wydaje mi się, że sprowadza się to do: Czy mogę je uruchomić i przejść za darmo, czy też sugerowany jest koszt serwera/hostingu? Z góry dziękuję!


title: Jaki jest związek między interpreterami metakołowymi, maszynami wirtualnymi i zwiększoną wydajnością?

text: Czytałem o interpreterach metakolistych w sieci (w tym SICP) i zajrzałem do kodu niektórych implementacji (takich jak PyPy i Narcissus). Czytałem sporo o dwóch językach, które świetnie wykorzystywały ocenę metakołową, Lisp i Smalltalk. O ile zrozumiałem, Lisp był pierwszym samo-hostującym się kompilatorem, a Smalltalk miał pierwszą „prawdziwą” implementację JIT. Jedną rzeczą, której nie do końca zrozumiałem, jest to, w jaki sposób te interpretery/kompilatory mogą osiągnąć tak dobrą wydajność lub innymi słowy, dlaczego PyPy jest szybszy niż CPython? Czy to z powodu refleksji? Ponadto moje badania Smalltalk doprowadziły mnie do przekonania, że istnieje związek między JIT, maszynami wirtualnymi i odbiciem. Maszyny wirtualne, takie jak JVM i CLR, pozwalają na wiele introspekcji typów i wierzę, że świetnie je wykorzystują w kompilacji Just-in-Time (i AOT, jak przypuszczam?). Ale o ile wiem, maszyny wirtualne są trochę jak procesory, ponieważ mają podstawowy zestaw instrukcji. Czy maszyny wirtualne są wydajne, ponieważ zawierają informacje o typie i referencji, które umożliwiają refleksję niezależną od języka? Pytam o to, ponieważ wiele zarówno interpretowanych, jak i kompilowanych języków używa teraz kodu bajtowego jako celu (LLVM, Parrot, YARV, CPython), a tradycyjne maszyny wirtualne, takie jak JVM i CLR, zyskały niesamowity wzrost wydajności. Powiedziano mi, że chodzi o JIT, ale o ile wiem, JIT nie jest niczym nowym, ponieważ Smalltalk i własne Ja Suna robili to przed Javą. Nie pamiętam, aby VM działały szczególnie dobrze w przeszłości, nie było zbyt wielu nieakademickich poza JVM i .NET, a ich wydajność zdecydowanie nie była tak dobra jak teraz (chciałabym móc pozyskać to twierdzenie, ale ja mówić z własnego doświadczenia). Potem nagle, pod koniec 2000 roku, coś się zmieniło i wiele maszyn wirtualnych zaczęło pojawiać się nawet dla ustalonych języków i z bardzo dobrą wydajnością. Czy odkryto coś na temat implementacji JIT, co pozwoliło niemal każdej nowoczesnej maszynie wirtualnej zwiększyć wydajność? Może gazeta czy książka?


title: Jeśli wyślę IPA przez TestFlight, czy można go użyć do wdrożenia w sklepie z aplikacjami?

text: Obecnie pracuję dla małego startupu. Wcześniej byłam na kontrakcie, teraz pracuję na własny rachunek (bez wynagrodzenia). Chodzi o to, że nie ma jeszcze podpisanej umowy, ponieważ szczegóły są dopracowywane. Mogę zakończyć prace rozwojowe zanim umowa będzie gotowa. Obecnie nie jestem związany żadną umową ani umową, więc druga strona nie ma żadnych roszczeń prawnych (o których wiem) do kodu, który piszę teraz, poza NDA (co po prostu uniemożliwia mi wycięcie go i uwolnienie na własną rękę). Ma już stary kod, który napisałem w ramach umowy. Wyjaśniłem drugiej stronie, że nie prześlę aplikacji ani nie przekażę kodu, dopóki nie zostanie podpisane coś, co chroni moje interesy. Przestałem przesyłać commity do firmowego repozytorium (jestem obecnie jedynym deweloperem aktywnie pracującym nad projektem). Jednak nadal chciałbym wysyłać kompilacje przez TestFlight w celu uzyskania opinii i testów. Druga strona ma dostęp do portalu deweloperskiego i iTunes Connect do podpisywania kodu itp. Sprawy są polubowne i nie przewiduję, że się na tym spalę, ale nie zamierzam stawiać się w takiej sytuacji. Obawiam się, że jeśli wyślę gotową kompilację za pośrednictwem TestFlight, może ona zostać wyodrębniona i przesłana do sklepu z aplikacjami bez mojego udziału. Oczywiście nie mieliby źródła do przyszłej konserwacji i aktualizacji, ale mogliby zostać zrekonstruowani przez innego programistę, później pracującego ze starej bazy kodu. Czy jest to w ogóle wykonalne technicznie? Jeśli tak, to czy mogę wysłać kompilacje do testów, jednocześnie chroniąc swoje interesy?


title: Łączenie systemów płatności

text: Jestem kompletnym nowicjuszem w korzystaniu z systemów płatności online w projektach internetowych i naprawdę nie mogę wymyślić, od czego zacząć. Załóżmy, że system webowy musi generować jakiś dochód w sieci, pomysł/funkcjonalność biznesowa już istnieje, a jedynym nierozwiązanym problemem jest organizacja przepływu gotówki. Punkty zainteresowania to sposób, w jaki opracowane na zamówienie oprogramowanie łączy się z systemami płatności i jak uzyskany dochód jest dostępny dla właściciela. Rozumiem, że prawdopodobnie istnieją setki systemów, ale żeby być bardziej konkretnym, który z nich pasuje, musiałbym wiedzieć, jak działają, i właśnie tam nie mam ochoty zbyt wiele rozumieć. Z góry dziękuję.


title: Dobry przykład złożonego kodu przy użyciu TDD

text: Jaki byłby dobry przykład wykorzystania TDD w dużych, rzeczywistych, złożonych projektach? Wszystkie przykłady, które do tej pory widziałem, to projekty zabawek na potrzeby książki lub artykułu... Czy możesz wymienić projekt open-source, który intensywnie wykorzystuje TDD? Najlepiej w C++, ale potrafię czytać Javę i C# lub inne podobne języki.


title: Przestrzeń nazw Boga tak samo zła jak obiekt Boga?

text: Mamy około 3/4 różnych projektów, z których każdy ma określony poziom danych. Niektóre dane nie są udostępniane, ale dostęp do wszystkich danych znalazł się w jednej przestrzeni nazw, która jest zawarta w każdym projekcie. Metody narzędziowe i inne „współdzielone funkcje” są stale dodawane do tej głównej przestrzeni nazw i ostatecznie są dość dobrze zorganizowane, ale wszystko kończy się w jednej bibliotece dll, która zostanie włączona do projektów. Wydaje mi się, że jest to zbyt scentralizowane, ale czy kwalifikuje się do nazwania przestrzenią nazw Boga? (czy ten termin ma sens?)


title: Jak zrozumieć kod źródłowy jądra Linuksa dla początkującego?

text: Jestem studentem zainteresowanym pracą nad Zarządzaniem Pamięcią, w szczególności komponentem zastępującym strony w jądrze linux. Jakie są różne przewodniki, które mogą mi pomóc w zrozumieniu źródeł jądra? Próbowałem przeczytać książkę _Understanding the Linux Virtual Memory Manager_ autorstwa Mela Gormana oraz _Understanding the Linux Kernel_ autorstwa Cesatiego i Boveta, ale nie wyjaśniają one przepływu kontroli przez kod. Kończą się tylko wyjaśnieniem różnych używanych struktur danych i pracy wykonywanej przez różne funkcje. To sprawia, że kod jest bardziej zagmatwany. Mój projekt zajmuje się ulepszaniem algorytmu zastępowania stron w głównym jądrze i analizowaniem jego wydajności dla zestawu obciążeń. Czy jest jakiś smak jądra linuksa, który byłby łatwiejszy do zrozumienia (jeśli nie jądro linux-2.6.xx)?


title: Najlepsze podejście do wyboru języków programowania i API grafiki 3D do symulacji eksperymentów fizycznych

text: Rozpoczynam projekt badawczy i potrzebuję dopracowania języka programowania i API grafiki 3D, w którym będę tworzył środowisko w dziedzinie biologii molekularnej komórki, w którym będę symulował szeroki zakres eksperymentów in silico. Będzie to projekt ciągły, który będzie się rozwijał i powiększał. Eksperymenty będą przeprowadzane w dyskretnym czasie i będą obejmować złożony silnik fizyczny. Ładna grafika nie ma znaczenia, podobnie jak dźwięk. Używam Ubuntu i to jest środowisko, w którym będę się rozwijał. Pary, które do tej pory zbadałem to: **java** : elastyczna, skalowalna, lib/organizacja zależnościowa (maven), oo * jogl: pełna kontrola nad grafiką * jMonkeyEngine: pełna biblioteka gier, zawiera jBullet, może trochę przesada na to, czego potrzebuję. **c++** : Wysoka prędkość, niski poziom, oo * opengl: pełna kontrola nad grafiką * maya: wbudowany silnik fizyki, infrastruktura już na miejscu, zastrzeżone, nie za darmo **matlab** : Mocno oparty na matematyce, ale trudny do utrzymuj i skaluj * simulink : zastrzeżony, nie darmowy. Najsłabiej znam Mayę, ale znajomy zasugerował mi to jako dobre podejście. Kiedy Maya byłaby dobrym rozwiązaniem i czy byłaby dobrym wyborem dla tego typu sprawy? Tak jak myślenie, że jMonkey byłoby przesadą, to moje odczucie w stosunku do Mayi. Czy są jakieś inne pary, które powinienem zbadać? Czy ktoś miał również doświadczenie w modyfikowaniu istniejącej biblioteki fizyki i elastyczności lub złożoności tego (np. Bullet, JBullet, jinngine)? W tym momencie nie jestem pewien, czy powinienem zacząć od zera, czy spróbować zmodyfikować/rozszerzyć istniejący. Wszelkie przemyślenia, opinie, uwagi lub inne sugestie byłyby bardzo mile widziane. Dziękuję


title: Jak zorganizować kurs programowania?

text: Otrzymałem zadanie wyszkolenia naszych testerów manualnych, aby stali się programistami w testach (napisz automatyzację testów!). Niektórzy mają podstawową wiedzę programistyczną (albo parają się PHP lub czytają różne rzeczy), a inni nie mają doświadczenia. Zwróć uwagę, że mam doświadczenie w nauczaniu, ale z prawdziwymi studentami, a nie pracownikami, i jedną z obaw jest to, że nie poświęcą dodatkowych godzin, z wyjątkiem 20% kierownictwa, które dało im na przejście. Język, którego należy uczyć i używać: C# Mamy na to 8 godzin tygodniowo i powinniśmy zdecydować, czy zdążą w ciągu 2 miesięcy. Myślę o podejściu łączonym: * użyj podręcznika, takiego jak Head First C# (chociaż nie jestem zadowolony z laboratoriów, to głównie gry i nie chcę dodawać zawiłości UI) * poproś o ich przeczytanie z podręcznik * zrób z nimi ćwiczenia, rozwiązując coraz trudniejsze problemy i wyjaśniając również zagadnienia teoretyczne * zlecaj im pod koniec większy projekt Kilka pytań: * czy masz lepszą propozycję jeśli chodzi o podręczniki? * czy masz lepsze podejście? Skupiasz się mniej na laboratoriach? * jakiego rodzaju ocen powinienem używać i jak często? * czy powinienem pozwolić im zrobić większy projekt (system bankowy czy mała gra) i ile czasu powinienem w to zainwestować? * pomysły w laboratoriach? * inne zasoby ? Wszelkie inne wskazówki byłyby mile widziane! Dziękuję!


title: Jaki jest najlepszy sposób udostępnienia formularzy do pobrania/przesyłania?

text: Muszę zezwolić niektórym moim użytkownikom na projektowanie i przesyłanie pustych formularzy, które mogą być pobierane, wypełniane i przesyłane przez innych użytkowników. Byłoby miło, gdybym mógł zweryfikować kompletność przesłanych formularzy, ale nie jest to absolutnie konieczne. Respondenci są zmotywowani do wypełniania formularzy, ale byłoby miło, gdybym mógł ich ostrzec, gdy jeden jest niekompletny. Jeśli nie mogę zweryfikować treści, chciałbym przynajmniej sprawdzić, czy przesłany formularz jest poprawny. Nie zamierzam wdrażać projektanta formularzy. Czy ktoś może polecić technologię, która by to ułatwiła? Obecnie mój kod w ogóle nie musi rozumieć formularzy; Po prostu przekazuję dane jako usługę dla użytkowników.


title: Przyszłość Golangu. Obsługa wielu języków?

text: Golang wydaje się obiecujący. Śledzę ten język od pierwszego wydania. Bycie dobrym konkurentem dla innych języków programowania może zająć trochę czasu. Jednym z genialnych aspektów Java i .NET, które widzę, jest to, że ich projektanci zdecydowali się stworzyć własną maszynę wirtualną, aby mogły na niej działać inne języki programowania. Teraz widzę, że Scala wydaje się być bardzo dobrym konkurentem Javy. Może działać na JVM i ma lepszą składnię/koncepcję i bardzo obiecujący postęp wykresów na Tiobe. Aby uściślić ten temat, _Future_ określam jego skalowalne zastosowanie tylko w **różnych znanych branżach** oraz w **kampusie** i **rządu**. Gdy golang kompiluje się do kodu maszynowego, moje pytanie brzmi **czy golang będzie obsługiwać wiele języków?** Podobnie jak wiele języków może działać na Java i .NET VM. Nie mogę znaleźć innych niż te 2 przykłady środowisk, które nie mają VM, ale bezpośrednio kompilują się do kodu maszynowego, takiego jak C/C++ lub Go Lang. Na blogu Golang przeczytałem, że Google tak dużo zainwestowało w golang. Zastanawiam się, jaką strategię przyjęłoby Google, aby zwiększyć penetrację golangu. Widziałem archiwum z listy mailingowej Golang o Golang Roadmap, ale nikt nie odpowiedział na to pytanie. Albo czy golang przekształciłby swoją hybrydę w inną formę, tak jak JavaScript może oderwać się tak daleko od swojej duszy Lisp głęboko pod JavaScript, cytując z JS The Good Parts Book autorstwa Douglasa Crockforda: > Funkcje JavaScript są obiektami pierwszej klasy z (głównie) leksykalny > scoping. JavaScript jest pierwszym językiem lambda, który wszedł do głównego nurtu. Głęboko w dół JavaScript ma więcej wspólnego z Lispem i Scheme niż z Javą. To > Lisp w ubraniu C. To sprawia, że JavaScript jest niezwykle potężnym językiem >. Lub prawdopodobnie jak języki FP inspirowały do tej pory tak wiele innych języków. Jeśli golang naprawdę jest obiecujący (tak jak Scala), zainwestowałbym jednego lub dwóch naszych programistów w naukę golanga. Do tej pory po prostu wspieram ich, aby wzmocnić swoje koncepcje zamiast OO(A)D, FP i teoretycznego CS, aby ich fundamentalne umiejętności były wystarczająco silne, aby stawić czoła wszelkim postępom językowym w przyszłości.


title: Wskazówki dotyczące debugowania z bardzo małą ilością informacji?

text: Odziedziczyłem projekt z dość dużą bazą kodu, a oryginalny programista rzadko, jeśli w ogóle, odpowiada na e-maile. Jest mnóstwo różnych sposobów na zrobienie w nim pewnych rzeczy i nie znam ich wszystkich. Dużo zduplikowanego kodu wzdłuż tych ścieżek (zamiast funkcji zawartych na, powiedzmy, 5 stronach, które robią względnie to samo, jest to kod skopiowany na 5 stron) i kilka subtelnych problemów w bazie danych (wszyscy słyszeliśmy o kodzie spaghetti , ale czy słyszałeś kiedyś o bazie danych spaghetti?) Z tym wszystkim mogę sobie poradzić przez większość czasu bez problemu. Problem polega na tym, że klient znajdzie gdzieś błąd. Zazwyczaj wysyłają zrzut ekranu z kończącym się numerem i pytają: „Możesz na to spojrzeć?”. jednocześnie podkreślając konkretną rzecz na stronie, która jest nieprawidłowa, a czasem to, czego oczekiwano. Podaje się niewiele więcej informacji, a próba rozmowy z nimi i uzyskania więcej (takich jak to, co zrobili, aby uzyskać wynik) jest jak wyrywanie zębów. Zasadniczo sprowadza się to do tego: * Duża i złożona baza kodu, której nie znam w 100% * Wiele rzeczy może pójść nie tak * Bardzo mało informacji o tym, jak powstał błąd Czy ktoś ma jakieś wskazówki, triki, sugestie , itp. jak debugować tego typu rzeczy?


title: Wpływy na projektowanie obiektów Dynamic autorstwa Alana Kay

text: Alan Kay w swoim artykule, The power of Context link pdf, strona 8, wylicza niektóre z jego motywacji dla obiektów dynamicznych. Niektóre wpływy, takie jak Paper on seplenienie, wczesny artykuł o projektowaniu funkcjonalnych komputerów, biologia molekularna genu (wyobraził sobie obiekty jako komórki biologiczne) są dość jasne i rozumiem, o co chodzi. Jednak niektóre z wpływów, takie jak 1. Paul Halmos, Skończenie wymiarowe przestrzenie wektorowe (Wskazówka: Algebra in the Large, mówi). Chcę wiedzieć, jak algebra wpłynęła na obiekty dynamiczne? Czy w obiektach są jakieś przykłady struktury algebraicznej? 2. Carnap, Rudolf, Znaczenie i konieczność, studium semantyki i logiki modalnej. Jak logika modalna jest pomocna w definiowaniu obiektów dynamicznych. Jak ta praca była pomocna? 3. Kleinrock, Leonard, Sieci komunikacyjne: stochastyczny przepływ komunikatów i opóźnienie. Wygląda na to, że ta praca wpłynęła na wczesne wdrożenia smalltalk. Czy ma to coś wspólnego z analogią między wiadomościami. Każde wyjaśnienie byłoby naprawdę pomocne. Krótko mówiąc, chcę zrozumieć, w jaki sposób te prace wpłynęły na projektowanie dynamicznych obiektów, zgodnie z wizją Alana Kay. Naprawdę byłbym wdzięczny za jakąkolwiek pomoc w tej sprawie. Rozumiem, że punkty widzenia są bardzo subiektywne, ale byłbym również wdzięczny za nowe spostrzeżenia/domysły na temat tego, jak Twoim zdaniem te prace pomogłyby.


title: 3 wątki drukujące numery o różnym zakresie;

text: To pytanie zostało zadane w wywiadzie dla Electronic Arts: Istnieją 3 wątki. Pierwszy wątek drukuje liczby od 1 do 10. Drugi wątek drukuje liczby od 11 do 20. Trzeci wątek drukuje liczby od 21 do 30. Teraz wszystkie trzy wątki są uruchomione. Liczby są drukowane w nieregularnej kolejności, np. 1, 11, 2, 21, 12 itd. Jeśli chcę, aby liczby były drukowane w kolejności posortowanej, np. 1, 2, 3, 4..., co mam zrobić z tymi nitkami?


title: hash z plikiem zamiast tablicy

text: Czy można użyć funkcji skrótu, ale z plikiem zamiast tablicy, i zapisze rekord w pozycji pliku, a następnie wyszukiwanie będzie szukać tej pozycji, ale nie jestem pewien, jak otworzyć plik z powiedzmy 1000 wierszem , czy myślisz, że ta metoda może zadziałać?


title: Jak zaprojektować serwer proxy SOCKS (OOP)

text: Pracuję nad aplikacją serwera skarpetek napisaną w języku C#. Ale tak naprawdę nie wiem, jak to zaprojektować w ładny sposób. Mam to dla Socks V4 i V4A: ![tutaj wpisz opis obrazu](http://i.stack.imgur.com/xCHbP.png) _Nie jestem pewien, czy to wyjaśnia, ale myślę, że łatwiej wyjaśnij, kiedy spojrzysz, jakie klasy istnieją._ _SOCKSServer_ jest opakowaniem nad instancją _Server_. Gdy klient się łączy, czeka na żądanie SOCKS4, oto jak to wygląda: var remoteEnd = eventArgs.Client.RemoteEndPoint.ToString(); bufor var = nowy bajt[1024]; var zadanie = eventArgs.Client.ReceiveTaskAsync(bufor, 0, bufor.Length); if (await Task.WhenAny(task, Task.Delay(Timeout)) != task) // Osiągnięto limit czasu { Trace.WriteLine(String.Format("[{0}] Upłynął limit czasu ({1} ms)"), remoteEnd , Koniec czasu)); eventArgs.Client.Disconnect(); zwrócić; } HandleRequest(eventArgs.Client, bufor); //.... private void HandleRequest(klient klienta, żądanie byte[]) { var remoteEnd = client.RemoteEndPoint.ToString(); var connectionRequest = ConnectionRequest.CreateInstance(request); if (connectionRequest == null) //nieprawidłowa wersja { Trace.WriteLine(String.Format("[{0}] Nieprawidłowa wersja ({1})", remoteEnd, request[0])); zwrócić; } if (connectionRequest.Version == 0x04) // Może być V4 lub V4A { HandleRequestV4(client, (ConnectionRequestV4) connectionRequest); zwrócić; } //Jest V5 } private void HandleRequestV4(Klient, ConnectionRequestV4 connectionRequest) { var remoteEnd = client.RemoteEndPoint.ToString(); Trace.WriteLine(String.Format("[{0}] (Id: {3}) SOCKS4(A) Żądanie do: {1}:{2}", remoteEnd, connectionRequest.IpAddress, connectionRequest.Port, connectionRequest.Id )); Trace.Write(String.Format("[{0}] (Id: {3}) Trying {1}:{2}.. ", remoteEnd, connectionRequest.IpAddress, connectionRequest.Port, connectionRequest.Id)); var RemoteHost = nowy Klient(); if (remoteHost.ConnectTaskAsync(new IPEndPoint(connectionRequest.IpAddress, connectionRequest.Port)).Result) { Trace.WriteLine("Sukces :D"); bajt[] odpowiedź; if (connectionRequest to ConnectionRequestV4A) { Trace.WriteLine(String.Format("[{0}] (Id: {2}) Request to SOCKS4A to: {1}", remoteEnd, ((ConnectionRequestV4A) connectionRequest).Domain, connectionRequest .ID)); ConnectionRequestV4A.AllowConnection(out response, connectionRequest.IpAddress); } else { ConnectionRequestV4.AllowConnection(out response); } klient.Wyślij(odpowiedź, 0, odpowiedź.Długość); var tunnel = new TunnelV4(RemoteHost, client) {BufferSize = BufferSize}; tunel.Odbiór danych += Odbiór danych; tunel.Wysyłanie danych +=Wysyłanie danych; tunel.Otwórz(); Trace.WriteLine(String.Format("[{0}] (Id: {1}) Tunel SOCKS4 otwarty =D", remoteEnd, connectionRequest.Id)); } else { Trace.WriteLine("Failed :("); byte[] response; ConnectionRequestV4.RefuseConnection(out response); client.Send(response, 0, response.Length); } } Pakiet żądania wygląda następująco: /* * +-----+-----+------+------+--------+ * | VER | CMD | Port | IP | ID | * +-----+-----+------+------+--------+ * | 1 | 1 | 2 | 4 | *'\0 ' | * +-----+-----+------+------+--------+ */ Liczby są wielkością oktetu (1 bajt = 8 bitów).Ale jak mogę zaprojektować SOCKS V5?Jest to bardziej skomplikowane, istnieją 3 metody uwierzytelniania (bez uwierzytelnienia, GSSAPI i nazwa użytkownika/hasło).Kiedy klient się połączy, wysyła wiadomość powitalną zawierającą metodę uwierzytelniania (id tylko) następnie serwer odpowiada z jakiego uwierzytelnienia wybrać (lub 0xFF, aby powiedzieć, że nie było akceptowalnej metody).I wtedy zaczyna się protokół uwierzytelnienia, który jest inny nie dla wszystkich metod. Następnie serwer proxy klienta wysyła żądanie połączenia. Pełną dokumentację można znaleźć tutaj: RFC1928 lub Wikipedia Jak więc zaprojektować tę aplikację do obsługi SOCKSV4, V4A i V5 w sposób OOP? **Edytuj:** Pełne źródło można znaleźć tutaj: Github


title: Utwórz pętlę, która odwiedza każdy link w witrynie

text: Chcę utworzyć zgarniacz HTML w Ruby on Rails i chcę zaimplementować pasek postępu i możliwość wznowienia tam, gdzie zostało przerwane, jeśli zostanie przerwane podczas zdrapywania. Myślę, że najlepszym sposobem, aby to zrobić, jest utworzenie tabeli bazy danych z rekordem dla każdej strony, z kolumną logiczną o nazwie „scraped?” Myślę, że mój skrobak miałby dwie główne części. Pierwsza część przejdzie przez całą witrynę, podążając za wszystkimi linkami i zapisując ich adresy URL w tabeli, wraz z atrybutem „false” dla atrybutu „scraped?”. Spowodowałoby to również zresetowanie sekwencji pk bazy danych, co oznacza, że kolumna id dokładnie wskazywałaby, pod jakim numerem znajduje się rekord (więcej o tym później!) `ActiveRecord::Base.connection.reset_pk_sequence!('strony')` Wtedy druga część przechodzić przez tę tabelę, odwiedzając każdy link, a po zakończeniu skrobania strony zmienia swój atrybut „scraped?” na true. Ta druga część rozpocznie się od pobrania pierwszej strony, która nie została jeszcze zeskrobana: first_page = Page.where(:scraped? = false).first Pasek postępu będzie działał na następującej zasadzie: total_page = Page.count done_pages = first_page .id # (pierwszy wynik to zawsze 1, ponieważ pierwsza część resetuje sekwencję) procent = gotowe_strony / suma_stron * 100 Właściwie nie rozumiem, dlaczego to by nie zadziałało, ale nadal nie rozumiem, jak skrobak przeskakuje i odwiedza każdy link na stronie internetowej. Jakie byłyby twoje pomysły na ten temat? Potrzebuję tylko kilku wskazówek, zanim zanurkuję: Skąd miałby wiedzieć, żeby nie zbaczać z bieżącej strony? (Myślę o wyrażeniu regularnym na adresie URL, aby upewnić się, że zawiera określoną domenę, zanim ją odwiedzi) Jak nie odwiedza nieskończonych pętli? Na przykład link do strony głównej na stronie głównej? (Domyślam się, że warunkowy załatwiłby sprawę tutaj): if new_uri != current_uri odwiedź new_uri end Jak pierwsza część faktycznie poszłaby na temat pająka, zapisując indeks każdego pojedynczego łącza? Tworząc tablicę każdego pojedynczego linku na stronie, a następnie iterując przez nią, aż znajdzie uri, który nie istnieje w bazie danych? (to jest właściwie moje największe zmartwienie.) Jeśli powyższe jest prawdą, skąd miałby wiedzieć, kiedy przestać? Zgaduję, że sprawdziłby każdy new_link z istniejącymi linkami w bazie danych? To jest tylko lokalny program, który zostanie wykonany raz, więc nie przejmuję się zbytnio wydajnością, ale czy masz lepszy pomysł na poniższe: if new_uri != current_uri # technicznie nie jest to konieczne, ale zaoszczędziłoby to kilka baz danych interakcje, jeśli strona.istnieje?( uri: new_uri) == false odwiedź new_uri end end


title: Czy powinienem używać platformy .NET? (IronPython?)

text: Zapytałem w innym pytaniu, gdzie jest dobre miejsce do rozpoczęcia nauki programowania i doszedłem do wniosku z wieloma pomocnymi odpowiedziami, że chciałbym iść z Pythonem. Więc teraz, czy byłoby korzyści z używania implementacji .NET, takiej jak IronPython, czy powinienem po prostu zrobić Pythona? Rozumiem, że mógłbym lepiej zrozumieć podstawy _bez_ polegania na .NET, czy to dokładne?


title: Jak zaoferować niestandardowy edytor tekstu, taki jak moc edycji z aplikacji?

text: Mam bardzo złożoną aplikację Java, która renderuje tabele arkuszy kalkulacyjnych i dokumenty podsumowujące w oknie. Te dane wyjściowe są niestandardowe w tym sensie, że na przykład tabela arkusza kalkulacyjnego nie jest tak naprawdę arkuszem kalkulacyjnym, w rzeczywistości nie każdy wiersz jest instancją jednostki, a każda kolumna atrybutem. Niektóre wiersze mogą być na przykład tytułami tabel podrzędnych. Teraz użytkownik chce wydrukować te ekrany, więc generalnie oferujemy eksportowanie tych ekranów do dokumentów edytora tekstu lub arkuszy kalkulacyjnych, aby mógł dostosować czcionkę, liczbę kolumn, szerokość kolumn itp. Problem polega na tym, że kierownictwo nie jest zadowolone z tym rozwiązaniem, ponieważ chociaż elastyczne, zmusza użytkownika do dostosowania dokumentu do każdego wydruku i za każdym razem musi zaczynać od początku. Musieliśmy więc umieścić w naszym programie pewne funkcje edycyjne i jeśli użytkownik chce czegoś więcej (na przykład koloru tła wiersza), zawsze może wyeksportować to, co ma do tej pory i dodać pożądane dodatkowe funkcje do dokumentu za pomocą swojego edytora tekstu lub procesor arkusza kalkulacyjnego. To rozwiązanie działa, ale nie podoba mi się, ponieważ im więcej czasu mija, tym bardziej nasz bardzo złożony program musi radzić sobie z edycją jak funkcje w punkcie, w którym w przyszłości będzie tak złożony, jak standardowy edytor tekstu lub Excel. Czy nie ma żadnego rozwiązania, które pozwoliłoby oddzielić nasz program od funkcji edycyjnych, ale w jakiś sposób pozwoliłoby zapamiętać wybory, gdy użytkownik chce wyeksportować dane i nie pozwalać mu na ponowne robienie wszystkiego? To rozwiązanie powinno być na tyle przenośne, aby współpracować przynajmniej z OpenOffice, Libre Office i Microsoft Word... Dziękuję


title: Zachowanie aplikacji na różnych rozmiarach ekranu

text: Moja firma opracowuje aplikację .NET, która musi współpracować z monitorami 17- i 24-calowymi, używając tej samej rozdzielczości na obu. Moje pytanie brzmi, czy powinienem oczekiwać innego zachowania lub układu na dwóch rozmiarach ekranu. Teoretycznie, ponieważ jest to ta sama rozdzielczość, nie powinno być przycinania, nadmiernego rozciągania ani żadnych innych problemów z interfejsem użytkownika. Chociaż może WPF zachowuje się inaczej z różnymi DPI? Teraz oczywiście trudniej będzie przeczytać część tekstu na 17-ekranowym monitorze, a może niektóre niskiej jakości fragmenty obrazu będą lepiej widoczne na większym ekranie, ale czy powinienem spodziewać się innych niespodzianek?


title: BDD w .NET - Kurczak czy Jajko czy...?

text: _Predykat: Jestem zupełnie nowy w BDD / TDD, ale odrobiłem pracę domową._ Staram się zastosować w praktyce wszystko, co przeczytałem / nauczyłem się z VS2010, SpecFlow i NUnit. Wszystko działa, ale szybko staje się scenariuszem kurczak / jajko w rozmyciu testów jednostkowych i akceptacyjnych. Mam nadzieję, że rozwiązanie tych PODSTAWOWYCH pytań sprawi, że wszystko _klik_. Z mojego czytania spodziewałem się: 1. Napisać cechę 2. Zdefiniować testy akceptacyjne, które nie powiodły się 3. Zdefiniować testy jednostkowe, które nie powiodły się 4. Sprawić, że testy jednostkowe zakończą się pozytywnym wynikiem 5. Teraz test akceptacyjny zaliczy się 6. Napisz następną cechę, która sprawi, że wszystko będzie idealne sens, po prostu trudno mi zobaczyć, co jest w kodzie... W praktyce: 1. Napisz funkcję ze scenariuszami - dobrze. 2. Generowanie definicji kroków - dobrze. 3. Ach. Czy wypełnienie definicji kroków (podanie kontekstu w GIVEN, ustawienie rzeczy w WHEN i dokonywanie asercji w THEN) stanowi ukończony test akceptacyjny? Czy najpierw piszesz tutaj klasy i metody, jakbyś je już zdefiniował, i generujesz szkielet kodu za pomocą IDE? Przypuszczalnie do działania asercja wymaga jakiejś implementacji, ale wtedy kod implementacji nie będzie testowany jednostkowo? Ach. Przyjrzałem się wielu przykładowym projektom i bazom kodu, ale ponieważ wszystkie są gotowe, nie ma sensu porządkować procesu rozwoju. Jakiekolwiek wyjaśnienie kroków, przykładów itp. byłoby świetne!


title: Liczba zmiennoprzecinkowa jest niepożądana w bardzo krytycznym kodzie?

text: Pytanie 11 w sekcji Software Quality "IEEE Computer Society Real-World Software Engineering Problems", Naveda, Seidman, wymienia obliczenia fp jako niepożądane, ponieważ _"dokładność obliczeń nie może być zagwarantowana"_. Ma to miejsce w kontekście obliczania przyspieszenia dla systemu hamowania awaryjnego dla pociągu dużych prędkości. To myślenie wydaje się przywoływać możliwe błędy w małych różnicach między pomiarami poruszającego się obiektu, ale małe różnice przy małych prędkościach nie stanowią problemu (lub nie powinno), małe różnice między dwoma pomiarami przy dużych prędkościach są nieistotne - czy mogą być problem z małymi błędami zaokrąglenia podczas hamowania awaryjnego układu hamulcowego? Ten problem zaobserwowano w przypadku układów hamulcowych samolotu, które powodowały aquaplaning, ale czy rzeczywiście może się to zdarzyć w przypadku pociągu dużych prędkości? Obawa o błędy fp wydaje się w tym kontekście nieuzasadniona. Jakiś wgląd? fp jest używany do przyspieszania, więc może problemem jest przekroczenie limitu prędkości? Ale fp powinno być w porządku, jeśli używa double w dowolnym języku implementacji. Rzeczywisty problem w tekście brzmi: Podczas kontroli kodu dla systemu hamowania awaryjnego nowego pociągu dużych prędkości (wysoce krytyczne zastosowanie w czasie rzeczywistym) zespół przeglądowy identyfikuje kilka cech kodu. Które z tych cech są ogólnie postrzegane jako niepożądane? 1. Kod zawiera trzy funkcje rekurencyjne (no cóż, jedna jest oczywista). 2. Obliczanie przyspieszenia wykorzystuje arytmetykę zmiennoprzecinkową. 3. Wszystkie inne obliczenia wykorzystują arytmetykę liczb całkowitych. 4. Kod zawiera jedną połączoną listę, która wykorzystuje dynamiczną alokację pamięci (drugi oczywisty problem). 5. Wszystkie dane wejściowe są sprawdzane w celu ustalenia, czy mieszczą się w oczekiwanych granicach, zanim zostaną użyte.


title: Najlepsze praktyki dotyczące używania kontrolki użytkownika w wielu projektach

text: Mam komunikator User Control, który jest używany w 4 projektach i dla każdej zmiany muszę ją propagować w 4 miejscach. Jest to oczywiście sprzeczne z zasadą DRY. Jednak scentralizowanie kontrolek użytkownika również nie jest łatwym zadaniem, ponieważ masz zarówno znaczniki, jak i kod, a wiemy, że znaczniki nie zostaną skompilowane do żądań w czasie wykonywania. Oznacza to, że nie można po prostu umieścić Kontroli użytkownika w jednym projekcie, skompilować jej i użyć jej wynikowego pliku DLL w wielu miejscach. A więc, co proponujesz jako dobre, schludne podejście do scentralizowania korzystania z kontroli użytkownika?


title: Czy istnieje stała dla "końca czasu"?

text: W niektórych systemach wartość czasu 9999-12-31 jest używana jako „koniec czasu” jako koniec czasu, który komputer może obliczyć. Ale co, jeśli to się zmieni? Czy nie byłoby lepiej zdefiniować ten czas jako zmienną wbudowaną? W C i innych językach programowania zwykle istnieje zmienna taka jak `MAX_INT` lub podobna, aby uzyskać największą wartość, jaką może mieć liczba całkowita. Dlaczego nie ma podobnej funkcji dla `MAX_TIME`, tj. Ustaw zmienną na „koniec czasu”, który dla wielu systemów zwykle wynosi 9999-12-31. Aby uniknąć problemu zakodowania na sztywno roku (9999), czy systemy te mogłyby wprowadzić zmienną na „koniec czasu”? **Prawdziwy przykład ** `Koniec daty ważności: 31/12/9999.` (oficjalne dokumenty są wymienione w ten sposób) Bloger chce napisać stronę, która zawsze będzie na górze, stronę powitalną. Więc jest podana data jak najdalej w przyszłości: > 3000? Tak, strona powitalna, z którą się spotykasz, została opublikowana 1 stycznia > 3000\. Tak więc ta strona pozostanie na szczycie bloga na zawsze =) Została > opublikowana 31 sierpnia 2007.


title: Jak mam zorganizować drzewo źródłowe?

text: Jestem indywidualnym programistą pracującym głównie nad projektami internetowymi (W/LAMP) i czasami nad projektami C/C++ (bez GUI) o średniej skali. Często zmagam się ze strukturą drzewa kodu źródłowego. W rzeczywistości zwykle nie kończę projektu bez zrzucenia całego drzewa i przestawienia elementów trzy-cztery razy, co naprawdę wymaga wiele wysiłku, a ponadto efekt końcowy wydaje się być kompromisem. Czasami kończy się to przesadną klasyfikacją źródła - bardzo długie drzewo folderów i podfolderów. Innym razem po prostu koncentruję wszystkie pliki w określonym folderze na podstawie większego celu, któremu służą, co prowadzi do „chaotycznych” folderów w źródle. Chciałbym zapytać: * Czy istnieją jakieś zasady/logika/najlepsze praktyki, które mogą pomóc mi lepiej ustrukturyzować drzewo źródłowe? * Czy istnieją jakieś techniki graficzne/diagramatyczne (np.: DFD w przypadku przepływu danych), które mogą pomóc mi wcześniej zwizualizować moje drzewo źródłowe na podstawie analizy projektu? * Jaką strategię przyjąć, aby ustrukturyzować drzewo plików multimedialnych związane z projektem? **O bounty**: Doceniam istniejące odpowiedzi, gdy członkowie dzielą się swoimi praktykami, jednak chciałbym zachęcić do bardziej ogólnych i pouczających odpowiedzi (lub zasobów) oraz większej liczby odpowiedzi od członków.


title: Testowanie projektów wizualizacyjnych

text: Opracowujemy małe i duże projekty wizualizacji dla różnych zadań i branż, a czasami podczas kilkukrotnego przepisywania ich w trakcie procesu trafiamy na ściany, ponieważ odkrywamy, że musimy dodać dużo kodu, aby obsłużyć nowe wymagania. Teraz ustaliliśmy proces projektowania, który wydaje się działać dobrze (przynajmniej nieco skróciliśmy czas tworzenia każdego nowego projektu), ale wciąż drapiemy się po głowie wokół pytania: co dokładnie powinniśmy testować podczas testowania wizualizacji ? * Czy wszystko, co chcemy eksplorować, znajduje się na ekranie (wizualizacje ograniczone)? * Czy dane są w porządku — czy dane są prawidłowe (to jedna z fajnych rzeczy w wizualizacjach, w których można zauważyć błędy w swoich zbiorach danych)? * Użyteczność? * Interakcja z użytkownikiem? * Jakość kodu? Z całą pewnością mogę powiedzieć, że proste sprawdzenie jakości kodu z pewnością nie wystarczy! Czy istnieje klasyczny artykuł/książka o tym, jak testować wizualizacje? Czy znasz też przypadki klasycznych wzorców projektowych do wizualizacji (poza tak oczywistymi jak Pub-Sub)?


title: Najlepsza książka, artykuły i literatura na temat testów jednostkowych

text: W mojej walce o wprowadzenie testów jednostkowych w mojej grupie roboczej spotykam wielu ludzi, którzy mają niewielką lub żadną wiedzę na temat tej koncepcji. Czy możesz zasugerować: * najlepsze artykuły lub samouczki do szybkiego wprowadzenia ludzi w dany temat * najlepsze obszerne książki do dogłębnego poznania testów jednostkowych * prace naukowe i badania udowadniające skuteczność testów jednostkowych


title: Zgłaszanie usterek w Agile

text: Pracuję w sprincie. Na koniec sprintu muszę wysłać raport o usterce na sprint. Biorąc pod uwagę poniższy scenariusz, proszę o przedstawienie swoich poglądów. Dwa zespoły (A i B) pracują w różnych lokalizacjach w Sprincie-2, a ja jestem testerem Zespołu A i zgłaszam wady elementów opracowanych przez Zespół A w każdym sprincie **Pytanie** 1\. Zgłosiłem kilka defektów w Sprint-2 dla funkcjonalności opracowanej przez Team-B w poprzednim sprincie. Czy muszę uznać to za obserwację lub wadę i zgłosić się do Zespołu A? 2\. Zgłosiłem 5 defektów Sprint-2 dla funkcjonalności opracowanej przez team-A. Wszystkie usterki są naprawiane i zamykane przeze mnie w tym samym sprincie. Przed końcem sprintu zaobserwowałem, że z jakiegoś powodu ponownie otworzyły się 2 defekty. Teraz liczba defektów powinna wynosić 5, czy 7(5+2) powinno być brane pod uwagę w tym sprincie? Dzięki Khan


title: Wysyłanie żądania serwera z wysokim priorytetem

text: Muszę połączyć się z serwerem i wykonać manipulację w odniesieniu do HTTP GET i POST dla mojej aplikacji, a serwer jest zwykle używany do obsługi wielu użytkowników z dużym obciążeniem, a wielu użytkowników może wysyłać wiele żądań w dowolnym momencie. Mam tutaj 3 pytania. Serwer jest skonfigurowany z ASP.NET Używam Java do wykonywania moich żądań HTTP POST i GET. Czy jest jakiś sposób, aby moje dane żądania miały wyższy priorytet niż inne? Przeczytałem też jakiś artykuł w internecie i jest wspomniane, że użycie proxy pomoże przyspieszyć proces i da nam dużą szansę na uzyskanie połączenia z serwerem. Czy to prawda ? Jeśli tak, dlaczego? Z góry dziękuję.


title: Pochodzenie wspólnych nazw funkcji przetwarzania list

text: Niektóre funkcje wyższego rzędu do operowania na listach lub tablicach były wielokrotnie przyjmowane lub odkrywane na nowo. Funkcje **map** , **fold** [ **l** | **r** ] i **filter** występują razem w kilku językach programowania, takich jak Scheme, ML i Python, które wydają się nie mieć wspólnego przodka. Idę z tymi trzema nazwami, aby skupić się na pytaniu. Aby pokazać, że nazwy nie są uniwersalne, oto próbka nazw dla równoważnej funkcjonalności w innych językach. C++ ma _transform_ zamiast _map_ i _remove_if_ zamiast _filter_ (odwrócenie znaczenia predykatu). Lisp ma _mapcar_ zamiast _map_ , _remove-if-not_ zamiast _filter_ i _reduce_ zamiast _fold_ (Niektóre współczesne warianty Lispa mają _map_, ale wydaje się to być formą pochodną.) C# używa _Select_ zamiast _map_ i _Where_ zamiast _filter_. Nazwy C# pochodzą z SQL za pośrednictwem LINQ i pomimo zmian nazw, na ich funkcjonalność wpłynął Haskell, na który wpłynął ML. Nazwy _map_ , _fold_ i _filter_ są powszechne, ale nie uniwersalne. Sugeruje to, że zostały zapożyczone z wpływowego źródła do innych współczesnych języków. Skąd wzięły się te nazwy funkcji?


title: Jak nazwać metodę, która zarówno wykonuje zadanie, jak i zwraca wartość logiczną jako status?

text: Jeśli istnieje metoda bool DoStuff() { spróbuj { // robi coś... return true; } catch (SomeSpecificException ex) { return false; } } czy powinien raczej nazywać się `IsStuffDone()`? Obie nazwy mogą zostać błędnie zinterpretowane przez użytkownika: Jeśli nazwa to `DoStuff()`, dlaczego zwraca wartość logiczną? Jeśli nazwa to `IsStuffDone()`, nie jest jasne, czy metoda wykonuje zadanie, czy tylko sprawdza jego wynik. Czy istnieje konwencja w tej sprawie? Lub alternatywne podejście, ponieważ to jest uważane za wadliwe? Na przykład w językach, które mają parametry wyjściowe, takie jak C#, zmienna stanu logicznego może zostać przekazana do metody jako jeden, a typem zwracanym metody będzie `void`. EDYCJA: W moim konkretnym problemie obsługa wyjątków nie może być bezpośrednio delegowana do wywołującego, ponieważ metoda jest częścią implementacji interfejsu. W związku z tym dzwoniący nie może być obciążany za obsługę wszystkich wyjątków różnych implementacji. Nie zna tych wyjątków. Jednak osoba wywołująca może poradzić sobie z niestandardowym wyjątkiem, takim jak `StuffHasNotBeenDoneForSomeReasonException`, jak zasugerowano w odpowiedzi i komentarzu npinti.


title: Kompilator zamknięć Google – co oznacza nazwa?

text: Jestem ciekawy kompilatora zamknięć Google. Dlaczego tak to nazwali? Czy ma to coś wspólnego z domknięciami leksykalnymi? **EDYTUJ:** Próbowałem znaleźć to w FAQ i dokumentacji, a także wyszukiwać w Google, takie jak „nazwa kompilatora zamykania”. Nie mogłem znaleźć nic konkretnego, stąd powód, dla którego pytam. Nie sądzę, że otrzymam dogłębnie pomocną odpowiedź, ale miałem nadzieję, że przynajmniej zaspokoję swoją ciekawość. Nie próbuję rozwiązać konkretnego problemu. Jestem po prostu ciekaw.


title: Opisywanie różnicy między biblioteką internetową a frameworkiem internetowym

text: Namówiłem się na dziurę w pracy i potrzebuję dobrych pomysłów, które pomogą mi lepiej opisać, dlaczego powinniśmy uwzględnić zarówno Dojo **, jak i** Knockout w naszym nowym projekcie internetowym. Trochę tła: podczas programowania zajmuję się głównie interakcjami komputer-komputer; aktualizowanie stanów, odczytywanie/zapisywanie do bazy danych — Knockout jest dokładnie tam, gdzie chcę być. Powiedziałem więc: „Nie chcę używać Dojo”... co oznacza, że „nie chcę programować po stronie klienta doświadczeń użytkownika/efektów wizualnych”. Myślę, że wspaniale jest wykorzystywać pracę innych ludzi i uważam, że ponowne wynajdowanie koła jest generalnie złą rzeczą. Po prostu nie lubię tego procesu tak bardzo. Ale teraz zamieniło się to w decyzję „wszystko albo nic”. Pomóż mi wymyślić dobry sposób na opisanie różnicy między biblioteką a frameworkiem internetowym, a nie w ten techniczny sposób. Potrzebuję czegoś prostszego, aby przekazać mój punkt widzenia. # EDYTUJ Używamy mustache.js, ponieważ pochodzi z samouczka PhoneGap. Dobry wygląd, PhoneGap. Źle się czułbym zamykając to pytanie, ponieważ ktoś może chcieć przeczytać je później. Zapraszam do opublikowania kilku odpowiedzi później, ale powinno być w porządku, dzięki!


title: Jakaś dobra strona, która uczy C++?

text: Szukam jakiejkolwiek dobrej strony, która uczy C++, która może wyjaśnić wszystko na ten temat (ogólnie) i ma przyzwoitą aktywną społeczność. O mnie: Jestem nowicjuszem w programowaniu (nic o tym nie wiem, więc proszę się ze mną obnażyć), nauczyłem się tylko (w bardzo podstawowej formie) języka skryptowego LUA, więc tak, jestem kompletnym nowicjuszem. Zainteresowałem się programowaniem, od skryptów w LUA, więc można powiedzieć, że to była moja mała odskocznia, w zasadzie chodziłoby się na kurs na studiach, ale nie każdy jest na to dobrze finansowany i nie mogę kupić książek na to samo powiedział powód(tak jestem trochę biedny, tylko pieniądze na niezbędne rzeczy i rachunki), nie staram się o współczucie, tylko stwierdzam swoje warunki. i proszę o coś pomiędzy wierszami 'Programming for Dummies' (nie jestem najjaśniejszą kredką w pudełku), wiem, że to nie będzie łatwe, ale twoja pomoc będzie jak najbardziej doceniona. Nauczyłbym się dla Windows i/lub Linux/Unix. Używam obu. Strony, które znam: Cplusplus.org (dość nieaktywne, a samouczki są trochę dla doświadczonych programistów.


title: Aplikacja .NET — czy powinniśmy używać programu SQL Server i duplikować niektóre dane referencyjne z zewnętrznej bazy danych Oracle? Lub skorzystać z Oracle i mieć łącze do bazy danych?

text: Zamierzamy przeprowadzić migrację niektórych istniejących procesów Excel/Access do nowego systemu, który zapewni użytkownikom interfejs Silverlight do uruchamiania i przeglądania raportów zamiast korzystania z MS Access. Pierwotnym pomysłem było posiadanie SQL Server 2008 jako RDBMS. Problem polega na tym, że mamy pewne statyczne dane, takie jak kody krajów, kontrahenci itp., które znajdują się w istniejącej bazie danych Oracle. Ponieważ nie chcemy duplikować tych danych (jeśli to możliwe), myśleliśmy o łączu DB między SQL Serverem a Oracle, ale nasza firma na to nie pozwala. Tak więc opcje to albo zduplikowanie danych, albo użycie Oracle jako RDBMS - niespodzianka, firma zezwala na połączenia DB między bazami danych Oracle. Początkowym pomysłem było również użycie WCF RIA Services, Entity Framework itp., Co do których nie jesteśmy pewni, czy dobrze współpracują z Oracle, dlatego w pierwszej kolejności zdecydowano się na SQL Server. Czy radziłbyś wybrać Oracle, abyśmy mogli po prostu połączyć dane statyczne? Lub użyć SQL Server 2008 i zreplikować go, ponieważ „bezpieczniej” jest pozostać w świecie Microsoftu? Aby w ogóle używać lub nie używać Entity Framework i WCF RIA Services? Pozdrowienia. AKTUALIZACJA: Dziękuję wszystkim za odpowiedzi. Nic jeszcze nie jest osadzone w kamieniu. Spróbujemy zaimportować dane zamiast łączyć, tak jakby druga baza danych uległa awarii, nasz system może nadal działać. Prawdopodobnie użyjemy SQL Server tylko dlatego, że większość programistów ma w tym większe doświadczenie. Nawet jeśli korzystaliśmy z RIA Services, możemy wymienić warstwę dostępu do danych i skorzystać z innych frameworków, takich jak wymienione poniżej.


title: Problem vb.net z poleceniem aktualizacji sql

text: Szukam pomocy, próbując dowiedzieć się, dlaczego widzę błąd SQL w poleceniu aktualizacji w vb.net, zauważając, że moje doświadczenie SQL jest bardzo ograniczone. Jestem w trakcie tworzenia systemu profili, który będzie używany w kilku innych narzędziach w naszej firmie, w ramach systemu profili informacje o użytkowniku są odpytywane w naszym katalogu LDAP po załadowaniu strony, a dane przechowywane w zmiennych wyświetlanych w etykiety na stronie. Użytkownik ma wówczas możliwość utworzenia nowego profilu, jeśli taki nie istnieje, lub zaktualizowania istniejącego, jeśli już taki istnieje. Kod określa właściwą akcję na podstawie zapytania do tabeli przy użyciu identyfikatora pracownika użytkownika. Moje polecenie wstawiania działa dobrze, ale aktualizacja nie działa, poniżej znajduje się mój aktualny kod i błąd. To jest instrukcja INSERT służąca do utworzenia nowego wpisu, działa to poprawnie. Protected Sub btnInsert_Click (nadawca jako obiekt, e jako EventArgs) Obsługuje btnInsert.Click Try Dim con As New SqlConnection Dim cmd As New SqlCommand con.ConnectionString = "Data Source="server" Catalog=usertable;Integrated Security=True" con.Open () cmd.Connection = con cmd.CommandText = "WSTAW Profil (Imię, Nazwisko, E-mail, Telefon, IDPracownika, NTLogin) WARTOŚCI ('" & lblImię.Text & "','" & lblNazwisko.Text & "', '" & lblEmail.Text & "','" & lblPhone.Text & "','" & lblEID.Text & "','" & lblNT.Text & "')" cmd.ExecuteNonQuery() btnInsert.Enabled = False lblValid.Text = "Rekord wstawiono pomyślnie" con.Close() Catch ex As System.Exception lblValid.Text = (np.Message) End Try Poniżej znajduje się kod aktualizacji, który powoduje błąd: Protected Sub btnUpdate_Click(sender As Object e As EventArgs) Obsługuje btnUpdate.Click Spróbuj Dim con As New SqlConnection Dim cmd As New SqlCommand con.ConnectionString = "server;Initial Catalog=usertable;Integrated Security=True" con.Open() cmd.Connection = con cmd.CommandText = " AKTUALIZUJ profil (Imię, Nazwisko, E-mail, Telefon, IDPracownika, NTLogin) WARTOŚCI ('" & lblFirstName.Text & "','" & lblLastName.Text & "','" & lblEmail.Text & "','" & lblPhone.Text & "','" & lblEID.Text & "','" & lblNT.Text & "') Gdzie [EmployeeID] = '" & lblEID.text & "'" cmd.ExecuteNonQuery() btnUpdate.Enabled = False lblValid.Text = "Rekord zaktualizowany pomyślnie" con.Close() Złap ex As System.Exception lblValid.Text = (np. Wiadomość) Koniec Spróbuj End Sub Zwrócony błąd wyjątku to [SqlException (0x80131904): Nieprawidłowa składnia w pobliżu ' ('.] System.Data.SqlClien t.SqlConnection.OnError(wyjątek SqlException, Boolean breakConnection, Action`1 wrapCloseInAction) +392 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean TdrysRClars.Data RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +4515 System.Data.SqlClient.SqlCommand.on.Runy. SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 ukończenie, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) +538 System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +290 newprofile.btngsSystemsender. Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgumen t) +155 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3804 Jestem zagubiony i doceniam każdą pomoc, której mogę udzielić.


Czy metoda przeciąża rodzaj polimorfizmu? Wydaje mi się, że jest to po prostu zróżnicowanie metod o tej samej nazwie i różnych parametrach. Tak więc `rzeczy(Rzecz t)` i `Rzeczy(Rzecz t, int n)` są całkowicie różnymi metodami, jeśli chodzi o kompilator i środowisko wykonawcze. Stwarza to iluzję po stronie dzwoniącego, że jest to ta sama metoda, która różnie działa na różne rodzaje obiektów - polimorfizm. Ale to tylko iluzja, ponieważ w rzeczywistości `rzeczy(Rzecz t)` i `Rzeczy(Rzecz t, int n)` to zupełnie różne metody. Czy metoda przeciąża coś więcej niż cukier składniowy? Czy czegoś mi brakuje? EDYCJA: Powszechną definicją cukru składniowego jest to, że jest on _czysto lokalny_. Oznacza to, że zmiana fragmentu kodu na jego „słodki” odpowiednik lub odwrotnie obejmuje lokalne zmiany, które nie wpływają na ogólną strukturę programu. I myślę, że przeciążanie metod dokładnie pasuje do tego kryterium. Spójrzmy na przykład do zademonstrowania: Rozważmy klasę: class Reader { public String read(Book b){ // .. przetłumacz książkę na tekst } public String read(File b){ // .. przetłumacz plik na tekst } } Rozważmy teraz inną klasę, która używa tej klasy: /* może nie być najlepszym przykładem */ class FileProcessor { Reader reader = new Reader(); public void process(File file){ String text = reader.read(file); // .. zrób coś z tekstem } } OK. Zobaczmy teraz, co musi się zmienić, jeśli zastąpimy przeciążanie metod zwykłymi metodami: Metody `read` w `Reader` zmienią się na `readBook(Book)` i `readFile(file)`. Tylko kwestia zmiany ich nazwisk. Kod wywołujący w `FileProcessor` zmienia się nieznacznie: `reader.read(file)` zmienia się na `reader.readFile(file)`. I to wszystko. Jak widać, różnica między używaniem przeciążania metod a nieużywaniem jej jest _czysto lokalna_. I dlatego uważam, że kwalifikuje się jako czysty cukier składniowy. Chciałabym usłyszeć twoje obiekcje, jeśli masz jakieś, może coś przeoczam.


title: Czy korzystanie z nowych technik zmniejsza produktywność?

text: Wydaje się, że wraz ze wzrostem doświadczenia z określonym zestawem narzędzi, z którymi musisz pracować, słabnie zachęta do wypróbowywania nowych rzeczy. Kiedy byłem nowy w tej pracy programistycznej, wypróbowywanie nowych rzeczy, poszukiwanie informacji online, czyniło mnie _bardziej_ produktywnym, ponieważ często znajdowałem sposób (lub bibliotekę), który ułatwiał to zadanie niż już istniejący framework kodu. Tak więc użycie czegoś nowego - zarówno dla mnie, jak i w kontekście danej bazy kodu - uczyniło mnie bardziej produktywnym. Teraz zauważyłem, że jest coraz więcej przypadków, w których dla danego problemu _wiem_, że prawdopodobnie _jest_ lepsze rozwiązanie "tam", a znalezienie go - przypuszczalnie - poprawiłoby kod. Jednak biorąc pod uwagę moją teraz dogłębną wiedzę o kodzie, zdecydowanie łatwiej jest korzystać z nieoptymalnych narzędzi, które posiadamy, i uzyskać działające rozwiązanie (w tym testy), niż znaleźć coś nowego, „lepszego” i „ulepszyć” bazę kodu. Pojawia się więc napięcie: „zrób to dobrze” kontra „wykonaj _przyzwoicie_ pracę”. Czy to coś, co zdarza się wielu programistom? Czy jest to znany konkretny problem? (Czy to w końcu prawdziwy problem?) Czy rzeczywiście ma to związek z rosnącym poziomem doświadczenia? Aha, i uwaga: nadal lubię swoją pracę i lubię ją zachować. Po prostu wydaje się, że -- zawsze interesujące! -- część badawcza staje się coraz mniejsza, gdy poznaję bazę kodu i zestawy problemów, z którymi mamy do czynienia w naszej aplikacji.


title: Dlaczego platforma .NET nie ma koncepcji klas jako typów pierwszej klasy?

text: Osoby znające historię dobrze wiedzą, że C# i framework .NET rozpoczęły się jako zasadniczo „Delphi przepisane, aby poczuć się jak Java”, zaprojektowane przez głównego programistę stojącego za Delphi, Andersa Hejlsberga. Od tego czasu sprawy nieco się rozeszły, ale na początku podobieństwa były tak oczywiste, że pojawiły się nawet poważne spekulacje, że .NET był pierwotnie produktem Borlanda. Ale ostatnio przyglądałem się niektórym rzeczom .NET i wydaje się, że brakuje jednej z najbardziej interesujących i użytecznych funkcji Delphi: koncepcji klas jako pierwszorzędnego typu danych. Dla tych, którzy go nie znają, typ `TClass` reprezentuje odniesienie do klasy, podobnie jak typ `Type` w .NET. Ale tam, gdzie .NET używa `Type` do odbicia, Delphi używa `TClass` jako bardzo ważnej wbudowanej części języka. Pozwala na różne przydatne idiomy, które po prostu nie istnieją i nie mogą bez niego istnieć, takie jak zmienne podtypów klas i metody klas wirtualnych. Każdy język OO ma metody wirtualne, w których różne klasy implementują tę samą podstawową koncepcję metody na różne sposoby, a następnie właściwa metoda jest wywoływana w czasie wykonywania na podstawie rzeczywistego typu instancji obiektu, na której jest wywoływana. Delphi rozszerza tę koncepcję na klasy: jeśli masz odwołanie do TClass zdefiniowane jako określony podtyp klasy (np. `klasa TMyClass` oznacza, że zmienna może przyjąć każde odwołanie do klasy, które dziedziczy po `TMyClass`, ale nie wszystko poza hierarchią), to ma dołączone do niej metody wirtualne o zakresie klasy, można je wywołać bez instancji przy użyciu rzeczywistego typu klasy. Na przykład zastosowanie tego wzorca do konstruktorów sprawia, że implementacja Factory staje się trywialna. Wydaje się, że w .NET nie ma nic równoważnego. Czy ktokolwiek powiedział coś o tym, dlaczego zostały pominięte, skoro są tak przydatne, jak odwołania do klas (a zwłaszcza wirtualne konstruktory i inne metody klas wirtualnych!)? ## Konkretne przykłady ### Deserializacja formularzy Delphi VCL zapisuje formularze w formacie `DFM`, DSL do opisu hierarchii komponentów. Kiedy czytnik formularzy analizuje dane DFM, przechodzi przez obiekty, które są opisane w następujący sposób: Nazwa obiektu: NazwaKlasy właściwość = wartość właściwość = wartość ... obiekt Nazwa Podobiektu: NazwaKlasy ... koniec koniec Ciekawą rzeczą jest tutaj część `NazwaKlasy` . Każda klasa komponentu rejestruje swoją klasę `TClass` w systemie przesyłania strumieniowego komponentów w czasie `inicjalizacji` (pomyśl o konstruktorach statycznych, tylko nieznacznie różniących się, które gwarantowane są natychmiast po uruchomieniu). To rejestruje każdą klasę w ciągu znaków->TClass hashmap z nazwą klasy jako klucz. Każdy komponent wywodzi się od `TComponent`, który ma wirtualny konstruktor, który przyjmuje pojedynczy argument, `Owner: TComponent`. Każdy składnik może przesłonić ten konstruktor, aby zapewnić własną inicjalizację. Kiedy czytnik DFM odczytuje nazwę klasy, wyszukuje nazwę we wspomnianym hashmapie i pobiera odpowiednie odwołanie do klasy (lub zgłasza wyjątek, jeśli go nie ma), a następnie wywołuje na nim wirtualny konstruktor TComponent, który jest znany jako dobry ponieważ funkcja rejestracji pobiera odwołanie do klasy, które jest wymagane, aby pochodzić z TComponent, a ty otrzymujesz obiekt odpowiedniego typu. Bez tego, odpowiednik WinForms jest… cóż… wielkim bałaganem, mówiąc wprost, wymagającym od każdego nowego języka .NET całkowitego ponownego zaimplementowania własnej (de)serializacji. To trochę szokujące, gdy się nad tym zastanowisz; ponieważ cały sens posiadania CLR polega na tym, aby wiele języków korzystało z tej samej podstawowej infrastruktury, system w stylu DFM miałby sens. ### Rozszerzalność Napisana przeze mnie klasa menedżera obrazów może być wyposażona w źródło danych (takie jak ścieżka do plików obrazów), a następnie automatycznie ładować nowe obiekty obrazów, jeśli spróbujesz pobrać nazwę, która nie znajduje się w kolekcji, ale jest dostępna w źródło danych. Ma zmienną klasy opisaną jako `class of` bazowej klasy obrazu, reprezentującej klasę każdego nowego obiektu, który ma zostać utworzony. Pochodzi z domyślnym ustawieniem, ale jest kilka punktów przy tworzeniu nowych obrazów do specjalnych celów, że obrazy powinny być konfigurowane na różne sposoby. (Tworzenie go bez kanału alfa, pobieranie specjalnych metadanych z pliku PNG w celu określenia rozmiaru ikonki itp.) Można to zrobić, pisząc obszerną ilość kodu konfiguracyjnego i przekazując specjalne opcje do wszystkich metod, które mogą zakończyć się utworzeniem nowy obiekt ... lub możesz po prostu utworzyć podklasę podstawowej klasy obrazu, która zastępuje metodę wirtualną, w której dany aspekt jest konfigurowany, a następnie użyć bloku try/finally, aby tymczasowo zastąpić właściwość "klasy domyślnej" w razie potrzeby i następnie przywróć go. Robienie tego za pomocą zmiennych odwołań do klas jest znacznie prostsze i nie jest czymś, co można zrobić za pomocą generycznych.


title: Dlaczego miałbyś używać wzorca projektowego?

text: Robię trochę badań do mojego artykułu i mam do was ogólne pytanie. Zastanów się nad wzorcem projektowym lub dowolnym **powszechnie akceptowanym rozwiązaniem wielokrotnego użytku** dla konkretnego problemu. Nie musi mieć nazwy ani być sklasyfikowany jako rzeczywisty wzorzec projektowy. **Dlaczego** miałbyś go używać? W czym ci to pomaga? Podaj swoje powody i argumentuj je.


title: Czy istnieją jakieś ważne przypadki użycia dla gorliwej oceny logicznej?

text: Dzisiaj dowiedziałem się o gorliwych ocenach logicznych. W poniższym przykładzie, `Bar()` zostanie ocenione nawet wtedy, gdy `Foo()` ma wartość true. if (Foo() | Bar()) Ta odpowiedź na SO ma przykład: if ((pierwszy = (i == 7)) & (drugi = (j == 10))) { //zrób coś } -przypadek tutaj byłby taki, że chcesz ponownie wykorzystać wyniki, ale wolałbym napisać to w ten sposób: first = (i == 7); drugi = (j == 10); if (pierwszy && drugi) { //zrób coś } Innym przypadkiem użycia byłoby to, że `Bar()` ma efekt uboczny, który powinien zostać wykonany niezależnie od tego, czy `Foo()` jest prawdziwe czy fałszywe. Pytanie brzmi, czy to może być dobry kod, czy też wskazuje na zapach kodu?


title: iOS: wiele obrazów lub pojedynczy obraz skalujący

text: W biurze toczy się zażarta debata. Mamy aplikację z dwoma przyciskami o różnej wielkości. (Jeden ma szerokość 40 pikseli, a drugi 150 pikseli). Wyglądają dokładnie tak samo, jeśli chodzi o obraz tła. Chciałbym wiedzieć, jaka jest najlepsza praktyka: 1: Zrób jeden obraz jako tło o szerokości 40 pikseli, a drugi obraz o szerokości 150 pikseli. LUB 2: Zrób jeden obraz (150px), zmniejsz go i użyj ponownie dla przycisku 40px. Nie jestem pewien, jaki narzut wydajności ma operacja skalowania, i muszę zrównoważyć to z rozmiarem aplikacji, jeśli przejdziemy z oddzielnymi obrazami dla każdej kontrolki o różnym rozmiarze. Dziękuję!


title: Edytory tekstu kodu obsługujące domeny

text: Ogólne edytory tekstu nie zmieniają się znacząco. Podświetlanie składni i zwijanie kodu nie są tak naprawdę dużymi zmianami. Jeśli redaktor jest świadomy struktury lub domeny, zwykle ma to inny układ — widoki drzewa, menu kontekstowe, przeciąganie i upuszczanie i tak dalej. Czy jest więc dobry przykład na dodanie większej kontroli domeny podczas edycji za pomocą karetki, zaznaczania tekstu i tak dalej? Kiedy myślę o wyjaśnieniu tego na przykładzie, co przychodzi mi do głowy: * Kontrola synchronizacji (kiedy najpierw usuwasz i w `<div>...</div>` to automatycznie zmienia się na `<dv></dv>` * Kontrola tylko do odczytu (jesteś w "/" w powyższym fragmencie, którego nie możesz edytować, ale jeśli wybierzesz `<div>` i naciśniesz Del, oba zostaną usunięte * Nawigacja warstwowa. Prawdopodobnie różne tryby, gdy kursor omija nieistotne warstwy, gdy naciśniesz Lewo, Prawo itd. Na przykład, jeśli jesteś w nawigacji tekstowej dla html, to wszystkie tagi są pomijane * Kontrola kopiuj-wklej. Wybrany fragment powinien zawierać prawidłowe zdanie dla domeny i miejsce do wstawienia powinno być również z nim zgodne.To tylko przykłady, aby przypomnieć sobie edytory świata rzeczywistego, w których spotkałeś coś podobnego.Prawdopodobnie istnieją edytory, które pozwalają na jedną lub kilka rzeczy z tej listy, ale przypuszczam, że częściowe rozwiązania nie są pomocne i może nawet zaszkodzić i spowodować niedogodności, więc pytanie dotyczy bardziej kompleksowego rozwiązania przeznaczonego dla ogólna poprawa wydajności w ogólnych edytorach tekstu.


title: Jak można dowiedzieć się, czy w produkcie komercyjnym użyto kodu open-source?

text: Niektóre licencje open source nie pozwalają na jego użycie w produktach komercyjnych, ale założę się, że niektórzy ludzie/firmy i tak z niego korzystają. Czy można udowodnić, że produkt komercyjny o zamkniętym kodzie źródłowym nielegalnie zawiera kod open source? Jeśli tak to jak? Przykład: powiedzmy, że Microsoft po prostu pobiera jądro Linuksa, umieszcza na nim nowy GUI i nazywa go „Windows 9.” Czy można by to udowodnić?


title: Czy krojenie projektu w PS tworzy okropny CSS?

text: Jestem początkującym programistą i bardzo chcę mieć dobre nawyki i praktyki. Muszę jeszcze pokroić PSD i go zakodować. Czy to zła praktyka? Słyszałem, że tworzy zły kod, który i tak trzeba było naprawić, więc po co to robić? Chcę stworzyć czysty kod, nawet jeśli trwa to dłużej. Zastanawiam się tylko, czy jest tak źle, jak słyszałem. Czy są jakieś korzyści z robienia tego w ten sposób? Dziękuję.


title: Jak obsługiwać długie nazwy metod na diagramie sekwencji?

text: Mam aplikację C#, która została opracowana w programie VS 2010 pro. Ostateczna wersja miałaby funkcję diagramu sekwencji. Ponieważ „tworzę” mój diagram sekwencji ręcznie, jak mam sobie radzić z dość długimi nazwami metod? object.createPathForCustomerIDblablablabla_click() Czy po prostu używam już podanych nazw metod? Użyć krótszej nazwy na diagramie sekwencji? Chciałbym, żeby zmieściło się na stronie A4.


title: Plik istnieje a plik nie istnieje. Czy jest różnica w wydajności?

text: Powiedzmy, że sprawdzam katalog pod kątem istnienia pliku, a następnie w zależności od tego, czy plik istnieje, postępuję odpowiednio. Na przykład zobacz dwa fragmenty kodu Pythona poniżej. if os.path.isfile(nazwa_pliku): # wykonaj zadanie A else: # wykonaj zadanie B lub jeśli nie os.path.isfile(nazwa_pliku): # wykonaj zadanie B else: # wykonaj zadanie A Czy istnieje różnica między tymi dwoma lub czy to tylko semantyka? Chociaż podany przeze mnie przykład używa Pythona, czy zasady będą miały zastosowanie do innych języków?


title: Czy JavaScript po stronie klienta może replikować system ładowania modułu Node.JS?

text: Podoba mi się styl JavaScript Node.JS, w którym mogę zapisać wszystkie moje funkcje w mniejszych plikach, a następnie wymagać ich zgrabnie z mojego kodu. Myślę nawet o próbie napisania frameworka, który naśladuje to zachowanie w JS po stronie klienta. Moim celem byłoby jak najdokładniejsze zaimplementowanie `systemu ładowania modułów` — patrz Dokumentacja modułu. W przypadku `require()` mogę użyć rzeczy wyszczególnionych w odpowiedziach na to pytanie, w szczególności `$.getScript()` w JQuery. Wydaje mi się, że inne aspekty systemu ładowania modułów powinny być również możliwe. Więc najpierw pytam bardziej doświadczonych programistów, zanim stracę swój czas: **Czy jest coś, czego mi brakuje, co spowoduje, że taka próba nie powiedzie się, czy można to zrobić z powodzeniem?**


title: WPF: Ponowne ładowanie części aplikacji w celu obsługi trwałości, a także zarządzania pamięcią

text: Stworzyłem aplikację przy użyciu WPF firmy Microsoft. Zajmuje się głównie odczytywaniem i wprowadzaniem danych oraz kojarzeniem relacji między danymi w ramach określonych parametrów. Jako zupełnie początkujący podjąłem złą decyzję projektową (nie tyle decyzje, co użycie pierwszej rzeczy, którą miałem do pracy), ale teraz lepiej rozumiem WPF, mam ochotę zrefaktoryzować mój kod z lepszymi zasadami projektowania. Miałem kilka problemów, ale chyba każdy zasługuje na własne pytanie dla jasności. Tutaj proszę o właściwe sposoby obsługi samych danych. W oryginale zawinąłem każdy wiersz w obiekt po pobraniu z bazy danych (przy użyciu LINQ to SQL ) podobnie jak Active Record po prostu nieaktywny lub trwały (każda instancja aplikacji miała własną część obsługi danych). Aplikacja posiada podjednostki obsługujące różne aspekty. Jednak zgodnie z konfiguracją ładował wszystko po uruchomieniu. Stwarza to kilka problemów, na przykład często nie byłoby konieczne ładowanie części, chyba że specjalnie zamierzaliśmy pracować z tą częścią, więc nie chcę jakiejś formy leniwego ładowania. Pojawił się również problem z wewnętrzną trwałością, ponieważ można było utworzyć nowy obiekt/wiersz w jednym aspekcie i być może ustawić relację między nim a innym obiektem, ale nowy obiekt nie pojawiłby się, dopóki program nie został ponownie uruchomiony. Trwałość pomiędzy instancjami aplikacji nie będzie dużym problemem ze względu na małą liczbę osób korzystających z programu. Chociaż mógłbym to teraz rozwiązać za pomocą brudnych sztuczek, wolałbym przerobić program i zrobić to elegancko. Teraz pytanie brzmi, jak. Wiem, że jest kilka sposobów, a kilka przychodzi mi do głowy: 1) Każdy aspekt programu to jego własna kontrola użytkownika, która jest ponownie ładowana/wywoływana za każdym razem, gdy do niego przechodzisz. Gwarantuje to, że ładujesz tylko potrzebne dane i uzyskujesz pewną trwałość. Serwer DB znajdujący się w tej samej sieci LAN i tabele są małe, więc nie powinno to być dużym problemem. Drobną wadą jest to, że musiałbyś pamiętać stan każdego aspektu, więc nie zawsze zaczynałbyś od początkującego kwadratu. 2) Posiadanie obiektu typu ViewModel na podstawowym poziomie aplikacji z leniwym ładowaniem i pewnym limitem czasu. Następnie propagowałbym ten obiekt w dół drzewa wizualnego, aby upewnić się, że każdy aspekt pobiera dane z tej samej instancji 3) Półaktywna warstwa danych rekordu ze statycznymi metodami ładowania. 4) Inny pomysł Co według Ciebie jest najbardziej praktycznym sposobem w WPF, co zakłada MVVM?


title: Jaka jest dobra praktyka, aby w tym przypadku powiadomienia push z opóźnieniem „prawie w czasie rzeczywistym”?

text: Chcę włączyć powiadomienia w czasie rzeczywistym o działaniach znajomego (sieć społecznościowa). Kontekst techniczny to: Webapp wywołujący backend (interfejs API REST). Scenariusz to: _Kevin podąża za Bobem. Gdy Bob opublikuje nowy komentarz, Kevin powinien zostać o tym natychmiast powiadomiony (prawie w czasie rzeczywistym). Poza tym, gdy Kevin się zaloguje, powinien zobaczyć niektóre wcześniejsze powiadomienia, podobne do tego, co robi Facebook. Oznacza to, że powiadomienia powinny być gdzieś przechowywane._ Oto techniczny przepływ pracy: 1. Publikowanie przez Boba nowego komentarza wiąże się z wstawieniem tego nowego komentarza do bazy danych. 2. Podobnie jak w przypadku projektowania opartego na domenie, wyzwalane jest zdarzenie `CommentedItemEvent`. 3. Odrębny pracownik w tym samym ograniczonym kontekście (długotrwały proces, co sekundę odpytujący bazę danych), nasłuchujący tego zdarzenia, przechwytuje je. Pod koniec 3 widzę 2 możliwości: * Utworzenie odpowiedniego powiadomienia, zapisanie go w bazie danych, a NASTĘPNIE wysłanie go do Redis Pub/sub. Ten przekazałby niektórym określonym subskrybentom działającym na połączeniu WebSocket, aby wysłać powiadomienie do klienta Kevina. * Utworzenie odpowiedniego powiadomienia, a następnie wysłanie go do Redisa NASTĘPNIE przechowywanie ich w bazie danych. Jeśli chodzi o pierwszą możliwość, zaletą byłby aspekt transakcyjny. Rzeczywiście, żadne powiadomienie nie mogło zostać wysłane, jeśli nie zostało wcześniej zapisane. => Uczciwość. Wadą jest jednak to, że wstawianie bazy danych może spowolnić proces „powiadomienia w czasie zbliżonym do rzeczywistego”. Jeśli chodzi o drugą możliwość, powiadomienia są wysyłane natychmiast, ale jeśli wystąpi jakaś awaria związana z wstawianiem bazy danych, Kevin mógł się zastanawiać: „Humm… Otrzymałem powiadomienie od Boba, jestem pewien, że je widziałem. Dlaczego więc zwykłe odświeżenie strony nie już go pokazywać?" => Rzeczywiście, nie został pomyślnie utrwalony, więc nie można go odpytywać. Jaka jest dobra praktyka w odniesieniu do tego przypadku użycia? Oczywiście szybszym sposobem byłoby nie angażowanie w tym przypadku detektora zdarzeń, ale naruszałoby to pewne zasady dotyczące projektowania opartego na domenie. IMHO, baza danych sondowania słuchacza we własnym ograniczonym kontekście jest konieczna. (przywołany przez Vaughna Vernona w tej książce IDDD – „Budowanie sklepu z wydarzeniami”)


title: Zarządzanie schematem bazy danych dla aplikacji C++

text: Mam projekt open source (Cockatrice), który używa mysql dla składnika serwera. Planuję kilka zmian w schemacie, ale w tej chwili jedynym zarządzaniem, jakie mam, jest skrypt, który uruchamia odpowiednie instrukcje `CREATE TABLE`. Zanim zacznę wprowadzać zmiany, chciałbym uzyskać rozwiązanie do zarządzania schematami. Aplikacja jest napisana w C++ z użyciem Qt i nie udało mi się znaleźć niczego takiego jak migracje railsowe lub granie w ewolucje dla C++. Mógłbym ich po prostu użyć, ale wprowadziłoby to zupełnie niepowiązaną zależność, której nie chcę do tego używać. Wymyśliłem podejście i chciałbym uzyskać informację zwrotną na temat tego, czy ma sens, czy ma jakieś wady. Dodaj nową tabelę do zarządzania schematem z kolumną wersji. Nowe migracje byłyby dodawane z wersją wyższą, niższą i pełnym skryptem tworzenia (np. 2.up.sql, 2.down.sql i 2.full.sql). Skrypt up zawierałby sql do wykonania aktualizacji, skrypt down odwracałby go, a pełny tworzyłby bazę danych od zera w tej wersji. Myślałem, że napiszę skrypt uruchamiany przez administratora, który wykonałby coś takiego: * Odczytaj bieżącą wersję z bazy danych * Skanuj w poszukiwaniu nowych łatek * Zablokuj całą bazę danych * Migawka db minus tabele ulotne * Rozpocznij transakcję * Zastosuj każdy plik sql w celu przywrócenia go do najnowszej wersji * utwórz bazę danych scratch i zastosuj pełną bazę tworzenia sql * porównaj zaktualizowany schemat z bazą danych scratch * jeśli schemat nie pasuje, wyeliminuj błąd i przerwij transakcję * jeśli pasuje, usuń schemat scratch * odblokować


title: Co to jest „ładny i właściwy OO” sposób obsługi sesji i uwierzytelniania?

text: Czy łączenie tych dwóch koncepcji to złe podejście? W tej chwili deleguję całą obsługę sesji i to, czy użytkownik chce się wylogować w moim pliku config.inc. Kiedy pisałem moją klasę Auth, zacząłem się zastanawiać, czy moja klasa Auth powinna zajmować się większością logiki w moim pliku config.inc. Niezależnie od tego jestem pewien, że istnieje bardziej elegancki sposób obsługi tego ... Oto, co mam w moim config.inc (również duża część tego kodu jest oparta na odpowiedzi, którą znalazłem w SO, z wyjątkiem tego, że nie mogę znaleźć źródło ._.): ini_set('nazwa.sesji', 'SID'); # zarządzanie sesją session_set_cookie_params(24*60*60); // ustaw czas życia cookie SID session_start(); if(isset($_SESSION['LOGOUT']) { session_destroy(); // zniszcz dane sesji $_SESSION = array(); // zniszcz kontrolę poprawności danych sesji setcookie('SID', '', time() - 24 *60*60); // zniszcz dane cookie sesji #header('Lokalizacja: '.DOCROOT); } elseif(isset($_SESSION['SID_AUTH'])) { // sprawdź, czy użytkownik został uwierzytelniony, jeśli (!isset($ _SESSION['SID_CREATED'])) { $_SESSION['SID_CREATED'] = time(); } elseif (time() - $_SESSION['SID_CREATED'] > 6*60*60) { // sesja rozpoczęła się więcej niż 6 godzin temu session_regenerate_id(); // zresetuj wartość SID $_SESSION['SID_CREATED'] = time(); // zaktualizuj czas utworzenia } if (isset($_SESSION['SID_MODIFIED']) && (time() - $_SESSION[ 'SID_MODIFIED'] > 12*60*60)) { // ostatnie żądanie było ponad 12 godzin temu session_destroy(); // zniszczenie danych sesji $_SESSION = array(); // zniszczenie sprawdzania poprawności danych sesji se tcookie('SID', '', time() - 24*60*60); // zniszcz dane cookie sesji } $_SESSION['SID_MODIFIED'] = time(); // zaktualizuj znacznik czasu ostatniej aktywności }


title: Czy istnieje teoria dla „transakcyjnych” sekwencji niepowodzeń i działań bez niepowodzenia?

text: Moje pytanie dotyczy pisania funkcji podobnych do transakcji, które wykonują sekwencje działań, z których niektóre mogą się nie powieść. Jest to związane z ogólną zasadą C++ „destruktory nie mogą rzucać”, właściwością bezbłędną, a być może także z transakcjami wielofazowymi lub bezpieczeństwem wyjątków. Myślę jednak o tym w kategoriach językowo neutralnych. Martwię się o poprawne zaprojektowanie obsługi błędów w funkcjach C++, które muszą być niezawodne. Chciałbym wiedzieć, jak nazywają się poniższe pojęcia, abym mógł dowiedzieć się o nich więcej. Przepraszam, że nie mogę zadać pytania bardziej bezpośrednio. Ponieważ nie znam tego obszaru, podałem przykład, aby wyjaśnić moje pytanie. Pytanie jest na końcu. Oto przykład: Rozważ sekwencję kroków lub akcji wykonywanych sekwencyjnie, gdzie akcje należą do jednej z dwóch klas: tych, które zawsze się udają, i tych, które mogą zakończyć się niepowodzeniem. W poniższych przykładach: * `S` oznacza akcję, która zawsze się powiedzie (w niektórych ustawieniach nazywana "no-fail"). * `F` oznacza akcję, która może się nie powieść (na przykład może nie przydzielić pamięci lub wykonać I/O, które może się nie powieść). Rozważ sekwencję działań (wykonywanych sekwencyjnie od lewej do prawej): S->S->S->S Ponieważ każda akcja w powyższej sekwencji się powiedzie, cała sekwencja się powiedzie. Z drugiej strony, następująca sekwencja może się nie powieść, ponieważ ostatnia akcja może się nie powieść: S->S->S->F Tak więc **claim:** sekwencja ma właściwość no-fail (S) wtedy i tylko wtedy, gdy wszystkie jego działania są nieudane. Teraz interesują mnie sekwencje akcji, które tworzą „transakcje atomowe”, z „niepodzielnością niepowodzeń”, tj. gdzie albo cała sekwencja kończy się pomyślnie, albo nie ma żadnego efektu. Tj. jeśli jakaś akcja się nie powiedzie, wcześniejsze muszą zostać wycofane. Wymaga to, aby wszystkie pomyślnie wykonane akcje przed nieudaną akcją zawsze mogły zostać wycofane. Rozważmy sekwencję: S->S->S->F S<-S<-S W powyższym przykładzie pierwszy wiersz to ścieżka transakcji, a drugi wiersz to działania odwrotne (wykonywane od prawej do lewej) które można wykorzystać do wycofania, jeśli ostatnie działania w górnym wierszu nie powiedzie się. Wydaje mi się, że aby transakcja obsługiwała niepowodzenie niepowodzenia, następujący niezmiennik musi zawierać: **Claim:** Aby obsługiwać _niepodzielność niepowodzeń_ (albo pomyślne zakończenie, albo całkowite wycofanie w przypadku niepowodzenia) wszystkie działania poprzedzające ostatnią nieudaną (F ) działanie na ścieżce do przodu (oznaczone * w poniższym przykładzie) musi mieć odwrotności bez niepowodzenia (S). Poniżej znajduje się przykład sekwencji, która obsługuje niepodzielność niepowodzeń: * S->F->F->F S<-S<-S Ponadto, jeśli chcemy, aby transakcja mogła próbować anulować w połowie, ale nadal zagwarantować pełne zakończenie lub pełne wycofanie, wtedy potrzebujemy następującej właściwości: **Roszczenie:** W celu obsługi _podzielności niepowodzeń i anulowania_ w połowie wykonywania, w obliczu błędów na ścieżce odwrotnej (anulowania), wszystkie działania następują najwcześniej Failable (F) odwrotny na ścieżce zwrotnej (oznaczony *) musi być no-fail (S). F->F->F->S->S S<-S<-F<-F * Uważam, że te dwa warunki gwarantują, że transakcja, którą można przerwać/anulować, nigdy nie utknie. Moje pytania to: _Jak nazywa się badanie i teoria tych właściwości? czy moje roszczenia są prawidłowe? i co jeszcze warto wiedzieć?_ AKTUALIZACJA 1: Zaktualizowana terminologia: to, co wcześniej nazwałem „solidnością”, w literaturze bazodanowej nazywa się **atomowością**. AKTUALIZACJA 2: Dodano wyraźne odniesienie do niepowodzenia, które wydaje się być rzeczą.


title: Jak tworzyć wieloplatformowe aplikacje mobilne z natywnym interfejsem użytkownika i backendem Javascript?

text: Chcę zbudować wieloplatformową aplikację mobilną (Android, iOS, Windows). Chcę, aby UX aplikacji był inny na różnych platformach, aby był bardziej specyficzny dla platformy i nie zmuszał użytkowników różnych platform do trzymania się wspólnego interfejsu użytkownika, ponieważ ten wspólny interfejs użytkownika może nie działać dobrze pod względem wyglądu i działania z innymi natywnymi aplikacjami na swojej platformie. Jednak ponieważ jest to ta sama aplikacja, którą próbuję zbudować na wszystkich platformach, mój backend będzie w większości taki sam. Ten obraz przedstawia to, co staram się osiągnąć. ![tutaj podaj opis obrazu](http://i.stack.imgur.com/FkOO4.png) Czy można zbudować inny interfejs użytkownika dla każdej platformy przy użyciu natywnych technologii, takich jak Storyboard (w iOS), XML (w Android), XAML(w systemie Windows), a następnie powiąż te elementy interfejsu użytkownika z kontrolerami natywnymi. I sprawić, by ten kontroler używał wspólnego backendu javascript dla wszystkich platform. Znam koncepcję aplikacji natywnych i hybrydowych. Problem, z którym musiałbym się zmierzyć, jest następujący: 1. Czyste aplikacje natywne zmuszą mnie do dostosowania całej platformy kodu źródłowego do specyfiki, co sprawi, że będę pisać mój backend trzykrotnie w 3 różnych językach. (Najmniej wielokrotnego użytku) 2. Aplikacje hybrydowe (takie jak te zbudowane na PhoneGap) pozwolą mi pisać kod w javascript i html, ale stworzą wspólny interfejs użytkownika z HTML5/CSS3, który powinien być używany na wszystkich platformach, chcę mieć inny interfejs użytkownika i aby interfejs użytkownika był bardziej natywny niż ogólny. Czy ten typowy kod backendu javascript jest osiągalny. A jeśli tak, to jest sposób, w jaki mogę stworzyć cały ten kod javascript niezależnie i spakować go jako biblioteki specyficzne dla platformy, takie jak .a (dla iOS), .jar (dla Androida), .dll (dla Windows). A może powinienem zastosować inne podejście? Z góry dziękuję


title: Czy test, który dotyka nazw plików w katalogu, jest rodzajem testu jednostkowego?

text: Powiedziano mi, że test jednostkowy jest szybki, a testy, które dotykają DB, w sieci i dotykają FileSystem, nie są testami jednostkowymi. W jednym z moich przypadków testowych jego danymi wejściowymi są nazwy plików (ok. 300~400) w określonym folderze. Chociaż te dane wejściowe są częścią systemu plików, czas wykonania tego testu jest bardzo szybki. Czy powinienem przenieść ten test, który jest szybki, ale dotyka systemu plików, do testu wyższego poziomu?