title: Jak często powinna odbywać się aktualizacja tokena w zabezpieczeniach CSRF?

text: Na początek w tym poście Jeff Atwood mówi o tokenach CSRF. Na tej samej stronie mówi dalej: > Jeszcze silniejszą, aczkolwiek bardziej złożoną metodą zapobiegania jest wykorzystanie > stanu serwera -- w celu wygenerowania (i śledzenia, z przekroczeniem limitu czasu) unikalnego losowego klucza > dla każdego formularza HTML, który wyślij do klienta. Używamy wariantu > tej metody na Stack Overflow z dużym sukcesem. Ale w tym poście Jeff nigdy nie wspomina, kiedy i jak należy aktualizować tokeny. Podobną technikę zastosowałem w aplikacji internetowej, nad którą pracowałem. Działa to tak: 1. Za każdym razem, gdy użytkownik wysyła dane do mojego serwera, wysyłany jest token csrf. 2. Ten token CSRF jest przechowywany w kryptograficznie silnym pliku cookie w sesji użytkownika. 3. Jeżeli token jest ważny, żądanie użytkownika jest przetwarzane i odwrotnie. 4. Jeśli żądanie jest prawidłowe, odrzuć stary token po stronie serwera i utwórz nowy token. Odpowiedź z serwera zawiera nowy token csrf do wykorzystania w następnym żądaniu. Stary token we wszystkich formularzach na stronie jest aktualizowany nowym, aby następne żądanie zostało poprawnie przetworzone. Czy mądrze jest aktualizować tokeny po każdym żądaniu `POST`, czy też aktualizacja powinna być wykonywana tylko wtedy, gdy użytkownik wysyła żądanie `GET` i zachować ten sam token do następnego żądania GET?


title: W jaki sposób rządowy sklep deweloperski przechodzi na opracowywanie rozwiązań open source?

text: Nasz sklep zidentyfikował kilka powodów, dla których udostępnienie naszych rozwiązań programowych społeczności open source byłoby dobrym pomysłem. Jednak z biznesowego punktu widzenia istnieje kilka powodów, dla których konwersja naszego sklepu na open source byłaby kwestionowana. Potrzebuję pomocy od każdego, kto przeszedł przez to przejście lub jest w trakcie. W szczególności podmiot rządowy. O naszym sklepie: \- Tworzymy i wspieramy aplikacje internetowe i klienckie dla lokalnej społeczności organów ścigania. \- NIE jesteśmy firmą prywatną, raczej podmiotem sektora publicznego Niektóre pytania, które pojawiają się podczas tej dyskusji, to: 1. Jesteśmy agencją rządową, więc czy nasz kodeks nie jest już publiczny? 2. Jak uchronimy się przed „hackowaniem”, jeśli ktoś zajrzy do naszego kodu? (Istnieją oczywiste odpowiedzi na to pytanie, takie jak upewnienie się, że nie kodujesz haseł na stałe itp. Jednak dyskusja musi wziąć pod uwagę publiczność kierownictwa, która ma sumienie bezpieczeństwa.)


title: Czy można wdrożyć skrypty Perl lub Python w taki sam sposób, jak skrypty PHP?

text: Model wdrażania PHP jest niezwykle prosty: prześlij i uruchom. Jest to szczególnie idealne w przypadku aplikacji internetowych, które mają być instalowane na współdzielonym hostingu przez użytkowników końcowych (pomyśl: Wordpress). Porównaj to z instalacją popularnej aplikacji Perl. Chcę przestać pisać rzeczy w PHP, ale chcę zachować ten sam model wdrażania. Czy można to osiągnąć za pomocą Pythona lub Perla w taki sposób, aby działał z większością współdzielonych hostów internetowych? Innymi słowy, jak mogę uruchomić skrypty Pythona lub Perla poza katalogiem cgi-bin na większości współdzielonych hostów, tak jak w przypadku skryptów PHP?


title: Dlaczego szkoły (lub większość szkół) uczą Java jako języka intro?

text: > **Możliwy duplikat:** > Dlaczego uczymy się języka Java na uniwersytecie? To pytanie, nad którym bardzo się zastanawiałem jako młody programista, który właśnie ukończył studia. Dlaczego szkoły uczą języka Java dogłębnie, a nie czegoś takiego jak C? Wielu moich współpracowników narzeka, że nie ma już dobrych programistów C, ponieważ szkoły nie uczą już C w żadnej rzeczywistej formie. Na przykład moje pierwsze 6-8 kursów CS na poziomie licencjackim były w języku Java. Potem miałem dokładnie 2 kursy z wyższej ligi, które używały C i C++, a reszta była w Javie. To było to. Wielu uczniów musiało powtórzyć zajęcia z C/C++, ponieważ nikt nie wprowadził nas w C/C++ ani żadne koncepcje C/C++. Po prostu oczekiwano, że będziemy w jakiś sposób programować od razu w C/C++. Teraz można powiedzieć, że kiedy nauczysz się języka, wszystko w innym języku jest mniej więcej takie samo, ale wielu moich kolegów z klasy miało problemy ze wskaźnikami i alokacją pamięci. Myślę, że uczciwie spędziłem połowę tej ćwiartki, rozumiejąc wskazówki i alokację pamięci, zanim w pewnym sensie to zrozumiałem, a nawet teraz nie jestem na tyle pewny siebie, by powiedzieć, że naprawdę to rozumiem. Dlaczego więc szkoły to robią? Słyszałem, jak wielu programistów mówi, że przejście z C/C++ jako pierwszego języka na Javę jest łatwe, ale odwrotność jest znacznie trudniejsza (to też mój sentyment). Dlaczego więc najpierw nie zrobić C/C++?


title: Piszesz komunikaty commit jako solowy programista?

text: W moich projektach, w których repozytorium jest dzielone między mną a innymi programistami, zawsze piszę komunikaty o zatwierdzeniu, nawet jeśli jestem głównym programistą. Ale w tych projektach, w których jestem samodzielnym programistą pracującym nad projektem, a repozytorium jest hostowane na moim osobistym laptopie, a nawet nie jest hostowane przez klienta, dlatego nikt poza mną nie zobaczy zatwierdzeń, jeśli nadal będę pisał zatwierdzenie wiadomości? Do tej pory je pisałem, ale odkryłem, że nigdy nie wróciłem i nie przeglądałem moich wiadomości o commitach. Biorę czas wolny od prac rozwojowych, aby spisać wiadomości, ale potem nigdy więcej ich nie zobaczę nawet przeze mnie. Czy są jakieś dobre powody, aby pisać komunikaty o zatwierdzeniu jako programista solo, czy po prostu powinieneś je pominąć i skupić się na rozwoju?


title: Jak radzić sobie z użytkownikami, którzy myślą, że ich komputer potrafi myśleć?

text: W swojej karierze miałem do czynienia z użytkownikami, którzy myślą, że ich komputer myśli: > Mój komputer mnie nienawidzi! lub > Zrobił to tylko po to, żeby się ze mnie śmiać! To często żart, ale niektórzy użytkownicy są poważni. Jest to łatwe, gdy znam przyczyny problemu, ale gdy jest to nieoczekiwane zachowanie, jest to bardziej skomplikowane. W takich przypadkach zwykle traktuję to jako żart, obarczając to winą faz księżyca i pływów, ale prawdopodobnie wolą ich wyjaśnienia. Czy masz jakieś sztuczki, aby poradzić sobie z tymi użytkownikami?


title: Tworzenie bloga do zmian oprogramowania

text: Pracuję dla małej firmy, w której jednocześnie prowadzę kilka projektów. Chciałbym utworzyć bloga i notować zmiany/aktualizacje oprogramowania, aby móc śledzić rzeczy. Dodatkowo będzie również służyć jako narzędzie pomocy innym, jeśli potrzebują pomocy. Chciałbym zainstalować coś lokalnie na moim komputerze lub w sieci, ASP lub PHP jest w porządku. **Jakie oprogramowanie polecasz? Czy to dobry pomysł, zły pomysł? Czy ktoś to zrobił? Pracowałem z wordpressem i podoba mi się, ale obawiam się, że nie jest to najlepsze dla fragmentów kodu.** Wszelkie myśli używam kontroli źródła. Nie jestem jednak w tym ekspertem. Używam trzech różnych środowisk programistycznych. 1. Visual Studio 2. Eclipse 3. SQL Server Management Studio


title: Czy użyć nienazwanego obiektu do wywołania metody, czy nie?

text: Jeśli mam klasę tylko z metodą publiczną. Kiedy używam tej klasy, czy dobrze jest użyć nienazwanego obiektu do wywołania jego metody? normalny: TaxFileParser tax_parser(nazwa_pliku_podatku); treść auto = tax_parser.get_content(); lub nienazwana wersja obiektu: auto content = TaxFileParser(nazwa_pliku_podatku).get_content(); Ponieważ powiedziałem, że powinniśmy unikać tymczasowych, jak to tylko możliwe. Jeśli obiekt `tax_parser` jest używany tylko raz, czy mogę nazwać go tymczasowym i spróbować go wyeliminować? Wszelkie sugestie będą pomocne.


title: Programowanie *w* języku a pisanie kodu C w Ruby

text: Code Complete oznacza, że kod powinien być _do_ języka, a nie kod _w_ nim. Rozumieją przez to: > Nie ograniczaj swojego myślenia programistycznego tylko do koncepcji > automatycznie wspieranych przez Twój język. Najlepsi programiści zastanawiają się > co chcą zrobić, a następnie oceniają, jak osiągnąć swoje cele > przy pomocy dostępnych narzędzi programistycznych. (rozdział 34.4) Czy nie prowadzi to do używania jednego stylu programowania w każdym języku, niezależnie od jego mocnych i słabych stron? Lub, aby zadać pytanie w bardziej zrozumiałej formie: Czy zaproponowałbyś, aby spróbować zakodować swój problem tak dokładnie, jak to możliwe, za pomocą szczegółów swojego języka, czy raczej powinieneś szukać najbardziej eleganckiego rozwiązania ogólnie, nawet jeśli oznacza to, że potrzebujesz zaimplementować potencjalnie niezręczne konstrukcje, które nie istnieją natywnie w twoim języku?


title: Czy to zły projekt interfejsu Shape?

text: Tworzę program do edycji wektorów w C++ i potrzebuję interfejsu Shape, który zaimplementują inne konkretne klasy. Istnieje wymóg, aby _brak dziedziczenia implementacji_ był dozwolony. Dokument projektowy mówi, że jeśli potrzebujesz polimorfizmu, **użyj interfejsów**. Jeśli potrzebujesz ponownego wykorzystania kodu, **użyj kompozycji**. Interfejs **Shape** to: class Shape { public: virtual void get_name()=0; wirtualna pustka nazwa_zestawu()=0; wirtualny void get_linewidth()=0; wirtualna pustka set_linewidth()=0; ... ...około 20 innych getterów/setterów ... virtual void draw()=0; wirtualny obszar int()=0; wirtualna pustka rotacja (kąt wewnętrzny) = 0; } Klasa Circle: class Circle: public Shape { string name; int szerokość_linii; int kąt_obrót; promień wewnętrzny; public: string get_name(){ zwraca nazwę; } string set_name(string name){ this->name=name; } ... ...około 20 innych metod pobierania/ustawiania ... int area() { return PI*pow(this->radius,2); } } Nie mam z tym problemu, poza tym, że wspólne właściwości muszą być **powtarzane dla każdego typu kształtu**! Jest to rozwiązane za pomocą dziedziczenia, ale ** nie wolno mi tego używać **. Tak więc tworzę klasę klasy **ShapeProperties** ShapeProperties { string name; int szerokość_linii; int kąt_obrót; public: string get_name(){ zwraca nazwę; } string set_name(string name){ this->name=name; } ... ...około 20 innych pobierających/ustawiających ... } oraz metodę properties() interfejsu: virtual ShapeProperties* properties()=0; Użytkownik zrobiłby wtedy: Shape *shape = new Circle(); kształt->właściwości()->nazwa_zestawu("mój kształt"); kształt->właściwości()->set_line_width(4); int obszar = kształt->obszar(); **Moje pytanie:** Czy to dobry projekt? Czy to zły projekt? Czy są jakieś oczywiste problemy? Jak można go ulepszyć?


title: Jak uprościć moje złożone klasy stanowe i ich testowanie?

text: Jestem w projekcie systemu rozproszonego napisanym w javie, gdzie mamy kilka klas, które odpowiadają bardzo złożonym obiektom biznesowym w świecie rzeczywistym. Obiekty te mają wiele metod odpowiadających akcjom, które użytkownik (lub inny agent) może zastosować do tych obiektów. W rezultacie zajęcia te stały się bardzo złożone. Podejście do ogólnej architektury systemu doprowadziło do wielu zachowań skoncentrowanych na kilku klasach i wielu możliwych scenariuszach interakcji. Jako przykład i żeby wszystko było proste i jasne, powiedzmy, że Robot i Samochód były klasami w moim projekcie. Tak więc w klasie Robot miałbym wiele metod w następującym wzorze: * sleep(); isSleepAvaliable(); * obudzić(); isAwakeAvaliable(); * spacer (kierunek); isWalkAvaliable(); * strzelać (kierunek); isShootAvaliable(); * turnOnAlert(); jest dostępny alert włączenia(); * wyłączAlert(); isTurnOffAlertDostępny(); * doładowanie(); isRechargeDostępna(); * wyłącz(); isPowerOffDostępne(); * stepInCar(Samochód); isStepInCarAvailable(); * stepOutCar(Samochód); jest dostępny StepOutCar(); * samounicestwienia(); isSelfDestructAvailable(); * umrzeć(); isDieAvailable(); * żyje(); jest obudzony(); isAlertOn(); pobierzPoziomBaterii(); pobierzAktualnySamochód(); pobierz amunicję(); * ... W klasie Car byłoby podobnie: * turnOn(); jestWłączDostępny(); * wyłączyć(); jestWyłączonaDostępna(); * spacer (kierunek); isWalkAvaliable(); * tankować(); isRefuelDostępna(); * samounicestwienia(); isSelfDestructAvailable(); * rozbić się(); isCrashDostępna(); * isOperacyjny(); jest włączone(); pobierzPoziomPaliwa(); pobierzAktualnyPasażer(); * ... Każdy z nich (Robot i Samochód) jest zaimplementowany jako maszyna stanów, w której niektóre działania są możliwe w niektórych stanach, a niektóre nie. Akcje zmieniają stan obiektu. Metody akcji wyrzucają `IllegalStateException`, gdy są wywołane w nieprawidłowym stanie, a metody `isXXXAvailable()` informują, czy akcja jest w danym momencie możliwa. Chociaż niektóre z nich można łatwo wywnioskować ze stanu (np. w stanie uśpienia dostępny jest stan czuwania), niektóre nie (aby strzelać, musi być obudzony, żywy, mieć amunicję i nie jeździć samochodem). Ponadto interakcje między obiektami również są złożone. Np. Samochód może pomieścić tylko jednego pasażera Robota, więc jeśli inny spróbuje wejść, należy rzucić wyjątek; Jeśli samochód się rozbije, pasażer powinien umrzeć; Jeśli robot jest martwy w pojeździe, nie może wyjść, nawet jeśli sam samochód jest w porządku; Jeśli Robot znajduje się w Samochodzie, nie może wejść do innego przed wyjściem; itd. W wyniku tego, jak już powiedziałem, te zajęcia stały się bardzo złożone. Co gorsza, istnieją setki możliwych scenariuszy interakcji robota i samochodu. Co więcej, znaczna część tej logiki wymaga dostępu do zdalnych danych w innych systemach. W rezultacie testowanie jednostkowe stało się bardzo trudne i mamy wiele problemów z testowaniem, z których jeden powoduje drugie w błędnym kole: * Konfiguracje przypadków testowych są bardzo złożone, ponieważ muszą stworzyć znacznie złożony świat do ćwiczeń. * Liczba testów jest ogromna. * Uruchomienie zestawu testów zajmuje kilka godzin. * Nasz zasięg testowy jest bardzo niski. * Kod testowy jest zwykle pisany kilka tygodni lub miesięcy później niż kod, który testują, lub wcale. * Wiele testów też jest zepsutych, głównie dlatego, że zmieniły się wymagania testowanego kodu. * Niektóre scenariusze są tak złożone, że kończą się po przekroczeniu limitu czasu podczas instalacji (ustawiliśmy limit czasu w każdym teście, w najgorszych przypadkach 2 minuty i nawet tym razem czas się kończy, upewniliśmy się, że nie jest to nieskończona pętla). * Błędy regularnie trafiają do środowiska produkcyjnego. Scenariusz Robot and Car to rażące uproszczenie tego, co mamy w rzeczywistości. Oczywiście ta sytuacja jest nie do opanowania. Tak więc proszę o pomoc i sugestie, aby: 1, Zmniejszyć złożoność zajęć; 2. Uprość scenariusze interakcji między moimi obiektami; 3. Skróć czas testu i ilość testowanego kodu. EDYCJA: Myślę, że nie miałem jasności co do maszyn stanowych. Robot sam w sobie jest maszyną stanów ze stanami „śpiący”, „obudzony”, „ładujący się”, „martwy” itd. Samochód to kolejna maszyna stanów. EDYCJA 2: W przypadku, gdy jesteś ciekawy, czym właściwie jest mój system, klasy, które wchodzą w interakcje, to takie rzeczy jak Serwer, Adres IP, Dysk, Kopia zapasowa, Użytkownik, Licencja oprogramowania itp. Scenariusz Robot i samochód to tylko przypadek, który znalazłem to byłoby wystarczająco proste, aby wyjaśnić mój problem.


title: Jak często używane jest dziedziczenie?

text: Przyznam się, że jestem junior developerem i do tej pory budowałem tylko proste aplikacje webowe w ASP.NET MVC. Ale nigdy nie musiałem używać aspektu dziedziczenia programowania obiektowego w moich własnych klasach! Co prawda korzystając z ASP.NET MVC nieumyślnie używam dziedziczenia (każdy kontroler, który stworzę, będzie dziedziczył po klasie kontrolera bazowego), ale odnoszę się tutaj do świadomego wykorzystania dziedziczenia w moim projekcie konkretnego systemu webowego. Czy to dlatego, że jestem złym programistą? A może jest tak, że dziedziczenie wchodzi w grę tylko w niektórych sytuacjach? Nie zrozum mnie źle, rozumiem, co to jest dziedziczenie i jak kodować za pomocą dziedziczenia, jeśli musiałem. Po prostu nie mogę znaleźć scenariusza, w którym mógłbym to wykorzystać. W zasadzie zastanawiam się, jak często jest używany w programowaniu OO w ogóle.


title: Czy możesz być jednocześnie programistą i Business Managerem?

text: Myślę, że mam problemy w jakiejś sytuacji! Jesteśmy nowym start-upem z 5 pracownikami (2 Programistów). Jestem kierownikiem technicznym i to było świetne! Teraz widzę, że palce wskazują na mnie, abym przejął kontrolę nad wszystkim, ponieważ mam wielką wizję tego, co robi nasza organizacja i wcielam się w rolę CEO lub General Managera! Chcę, ale nie mam pojęcia, czy podjęcie takiej decyzji byłoby ryzykowne dla naszej organizacji? Jak przerwania menedżerskie wpłyną na produktywność techniczną? Wszelkie wskazówki lub wcześniejsze doświadczenia dotyczące takiej sytuacji pomogłyby :) Z góry dziękuję!


title: Programowanie obiektowe: dlaczego „zorientowane”?

text: Jestem na najlepszej drodze do mojego stopnia programowania gier. To nie jest stopień naukowy z informatyki, więc wiele teorii jest odrzucane na rzecz praktycznego budowania portfolio i tego, co uważam za naukę JIT, która najwyraźniej jest ważniejsza w branży gier. Pierwszym przedmiotem było „Wprowadzenie do programowania obiektowego”. To zdanie nie przeszkadzało mi, dopóki nie dowiedziałem się o różnych paradygmatach programowania (pobieram tę listę z https://en.wikipedia.org/wiki/Comparison_of_programming_paradigms): * imperatywne * funkcjonalne * proceduralne * strukturalne * sterowane zdarzeniami * Zorientowane obiektowo * Deklaratywne * Oparte na automatach Rozumiem, że nie jest to wyczerpująca lista i że nie wszystkie z tych pojęć są równe, a większość z nich nie jest nawet wyłączna, ale nie rozumiem, dlaczego większość z nich zdobądź tylko jedno słowo - imperatyw; funkcjonalny; deklaratywne - ale kiedy mówimy o programowaniu z obiektami, musimy wyjaśnić, że jesteśmy _zorientowani_ wokół tych obiektów. Czy nie możemy po prostu _używać_ obiektów? Czy nie możemy po prostu _mieć_ przedmiotów? Dlaczego muszą nas orientować, jako nasza gwiazda przewodnia? Patrząc tutaj (https://en.wikipedia.org/wiki/Object-orientated_programming), nigdzie nie ma terminu „zorientowany” jako osobnego terminu. Wyjaśniony jest tylko „obiekt”. Widzę też z praktycznych powodów, dlaczego używa się Event-Driven, ponieważ Event Programming jest już rzeczą, którą robisz, gdy prowadzisz konferencję, a Automata Programming sprawia, że brzmi to tak, jakbyś ustawiał zrobotyzowaną linię produkcyjną, więc pomocne jest umieszczenie tam dodatkowych słów wyjaśniających. **Co sprawia, że programowanie obiektowe, jako fraza, nie wystarcza do opisania tego, co robimy, gdy używamy obiektów w naszym programowaniu?** Oczywiście z mojego tonu nie przepadam za słowem „zorientowany”. Przypomina mi to moje czasy jako reporter sądowy, słuchając prawnika po tym, jak prawnik używa frazy „w stosunku do” jako swego rodzaju słownego kleszcza. To nic nie znaczyło; był to tylko termin, którego używali, by wypełniać powietrze, gdy zastanawiali się, co powiedzieć dalej. Nie próbuję jednak opowiadać się za zmianą języka, tylko pytam, dlaczego tak jest. Jeśli ktoś wie, dlaczego z czysto historycznych, szczątkowych powodów zaczęto tak to nazywać, to jest odpowiedź. To będzie amunicja, jeśli kiedykolwiek zdecyduję się marnować czas na rzecz zmiany języka. Z drugiej strony, jeśli rzeczywiście istnieje użyteczny powód, dla którego język lub fragment kodu musi _wskazywać_ na obiekty, z wyłączeniem wszystkich innych kierunków, w przeciwieństwie do posiadania ich w swoim pasku narzędzi, jako _narzędzi_, naprawdę byłbym zainteresowany, aby się o tym dowiedzieć. Lubię uczyć się przydatnych rzeczy.


title: Czy REST API może służyć jako warstwa biznesowa?

text: Używam wzorca projektowego PHP Codeigniter **MVC** i miałem ten projekt z pewnymi specyficznymi procesami biznesowymi W mojej aplikacji będę zajmować się 2 istniejącymi API REST: 1. Google 2. Trello Wpadłem na pomysł stworzenia **REST API** ma działać jako **Business Logic Layer** (BBL), która z kolei ma bezpośredni dostęp do moich modeli w celu pobrania potrzebnych danych do formułowania reguł biznesowych i kontrolera z komunikacją z BLL z klientem REST, ![wstaw opis obrazu tutaj ](http://i.stack.imgur.com/p5rMQ.png) Czy to złe podejście do wydajności? Czy lepiej jest utworzyć **2 warstwy** modeli, jedną jako warstwę dostępu do danych **(DAL)**, a drugą jako warstwę logiki biznesowej **(BLL)**


title: Struktura i organizacja BLL

text: załóżmy, że masz diagram klas http://i.stack.imgur.com/gpb55.png i chciałbyś rozpocząć projekt biblioteki klas w Visual Studio, aby działał jako LOGIKA BLOKOWA, aby przekonwertować ten diagram na rzeczywiste pliki kodu. jak ustrukturyzowałbyś projekt LOGIKI (w eksploratorze rozwiązań), jak uporządkowałbyś pliki klas i ich hierarchię?


title: Długie nazwy klas stanu wzorca stanu

text: W mojej aplikacji używam wzorca stanu na 28 stanach. Stany są dla kart członkowskich, które mają 7 głównych stanów, są 4 atrybuty logiczne dla karty członkowskiej, które faktycznie wpływają na jej zachowanie, więc zdecydowałem się osadzić je w stanach, w ten sposób pomnożyły się do 28 stanów. Teraz problem polega na nazywaniu klas stanów, robi się to szalejące, kończy się na stanie klasy o nazwie takiej jak `Członkostwo-UnderCreation-Printed-Linked-Premium-Frozen` \----- Podzieliłem różne atrybuty To jasne. Czy to w porządku, aby nazwy klas stanowych wyglądały tak?


title: Uniemożliwianie użytkownikom Internetu korzystania z paska adresu w aplikacji

text: Mój szef poprosił mnie o zmodyfikowanie naszej aplikacji internetowej Java, tak aby użytkownicy nie mogli przechodzić do miejsc w naszej aplikacji internetowej, wpisując adresy URL w pasku adresu przeglądarki. Powiedziałem jej, że nie mogę wyłączyć ich pasków lokalizacji. Powiedziałem jej, że zwykle robi się to, uruchamiając aplikację internetową w nowym dostosowanym oknie przeglądarki bez paska lokalizacji. To było dla niej nie do przyjęcia. Mam już klasę Java Filter skonfigurowaną do egzekwowania różnych reguł. Tak więc myślałem o tym podejściu 1. Zaimplementuj ogólnosystemową funkcję javascript „writeFlagCookie”, aby zapisać plik cookie za każdym razem, gdy użytkownik zainicjuje GET, klikając łącze lub przycisk. 2. Wszędzie, gdzie WebApp wykonuje przekierowanie lub forward, umieść zmienną flagową, powiedzmy „wasRedirected” w sesji HTTP. 3. W moim filtrze przechwyć każde żądanie i sprawdź typ żądania. 4. Jeśli jest to POST, wiem, że człowiek nie wpisał adresu URL do swojej przeglądarki, więc automatycznie go przepuszczam. 5. Jeśli jest to GET, poszukaj pliku cookie wygenerowanego w javascript lub flagi przechowywanej w sesji, aby wskazać przekierowanie lub przekierowanie. Jeśli nie znajdę żadnego z nich, odeślij użytkownika z powrotem do strony, z której właśnie próbował opuścić. Choć będzie to wymagało dużo pracy, brzmi zbyt prosto, aby było adekwatne. Czy jednak takie podejście może mnie ugryźć w dupę? Mój szef chce, aby rozwiązano dwa problemy 1. Użytkownicy przechodzą do ekranów poza kolejnością i otrzymują komunikaty o błędach. Obejmuje to formularze wieloekranowe (które musimy zachować) oraz użytkowników korzystających z przycisku Wstecz. 2. Uniemożliwienie użytkownikowi opuszczenia poszczególnych stron i przechodzenia do innych części aplikacji, dopóki nie wypełni tego, co chcemy, aby wypełnił na tych ekranach. Mam pomysły, jak rozwiązać #1 i #2, również pracochłonne, ale mojemu szefowi podoba się pomysł wyłączenia wpisywania adresów URL do nawigacji w celu rozwiązania typu catch-all. Może kiedy zobaczy, ile pracy jest włożone w wyłączenie nawigacji z wpisywanymi tekstami, będę mógł ją sprzedać na samo rozwiązywanie tych problemów. Dzięki Steve


title: jak napisać procedurę składowaną, aby wstawić dane do bazy danych serwera sql w datagridview w formularzu?

text: Muszę wstawić dane przez formularz używając `datagridview` połączonego z bazą danych SQL Server 2008 R2. czy to w porządku, jeśli napiszę pojedyncze zapytanie procedury składowanej wstawiania w pętli while w `form.cs`


title: Jak trudny był dla Ciebie egzamin certyfikacyjny Java

text: Dopiero zaczynam jako programista Java i mam bardzo minimalne doświadczenie. Chciałbym poszerzyć swoją wiedzę i studiować do certyfikacji Java. Zdaję sobie sprawę, że każdy będzie miał inną odpowiedź, ale dla tych, którzy przyjęli certyfikat i zdali go, byłabym wdzięczna za opowiedzenie mi o swoich doświadczeniach. Tylko kilka linijek, aby dać mi znać, jeśli było to dla Ciebie trudne, bardzo trudne. Również ile czasu spędziłeś na nauce. Przepraszam, że to nie jest dobre pytanie. Moim ojczystym językiem nie jest angielski, więc trudno mi powiedzieć, o co chcę zapytać.


title: Posiadanie 2 początkowych akapitów w 1 programie COBOL

text: Projektuję program w języku COBOL, który robi 2 rzeczy. 1 odczytuje określone wiersze z tabeli i wstawia nowy wiersz na podstawie oryginału. 2 odczytuje różne wiersze z tej samej tabeli i aktualizuje te wiersze. Czy to złe standardy mieć 2 procedury inicjalizacji? Muszę zadeklarować 2 kursory SQL, po jednym dla każdego zadania. Myślałem więc: „1 inicjalizuj kursor, 2 proces, 3 inicjuj kursor, 4 proces”. Ale to wydaje się złą logiką. coś mi mówi, że powinno to być bardziej jak: `1 inicjalizacja kursora, 2 proces` Ale mam problem z przemyśleniem tego, ponieważ dla mnie są to 2 oddzielne zadania. Próbowałem wymyślić sposób, w jaki moje zapytanie SQL mogłoby wykonać pracę, a następnie mogłem po prostu przeprowadzić walidację. Ale nie jestem pewien, czy zapytanie byłoby bardziej wydajne niż drugie odczytanie tabeli. Oto moje pomysły na strukturę, które dodałem trzeci wykres, który, jak sądzę, podąża za odpowiedzią udzieloną mi na to pytanie. Czy trzeci wykres wydaje mi się najbardziej logiczny?


title: Czy powinienem przechowywać wszystkie moje definicje klas w tej samej bibliotece klas?

text: Zaczynam pracować z bibliotekami klas w mojej klasie C#. Kazano nam napisać kod, którego można użyć więcej niż jeden raz. Czy powinienem przechowywać wszystkie moje definicje klas w jednej bibliotece klas przez cały okres, czy oddzielić je według projektu?


title: Czy Cel C to rozsądny sposób na naukę C?

text: Chcę się nauczyć C, ale najlepiej się uczę, gdy mam projekt do pracy. Nigdy nie zajmowałem się tworzeniem iPhone'a, więc mam nadzieję upiec dwie pieczenie na jednym ogniu. Czy cel edukacyjny c nauczy mnie również dość dobrze programować c, czy też są one zbyt odmienne? EDYCJA: Zastanawiam się głównie, czy rozwój obiektywnych c/iphone'ów nauczy mnie wszystkich małych łajdaków, które są nieodłączne od c. Pochodzę ze środowiska .Net, więc nie zrobiłem zbyt wiele w zakresie zarządzania pamięcią lub pracy ze wskaźnikami.


title: Znajdowanie maksymalnej liczby przystających liczb

text: Powiedzmy, że mamy multiset (zestaw z możliwymi duplikatami) liczb całkowitych. Chcielibyśmy znaleźć rozmiar największego podzbioru multizbioru taki, że wszystkie liczby w podzbiorze są przystające do siebie modulo niektóre m > 1. Na przykład: 1 4 7 7 8 10 dla m = 2 podzbiory to: ( 1, 7, 7) i (4, 8, 10), oba o rozmiarze 3. dla m = 3 podzbiory to: (1, 4, 7, 7, 10) i (8), większy zestaw o rozmiarze 5 dla m = 4 podzbiorami są: (1), (4, 8), (7, 7), (10), największy zbiór wielkości 2. W tym momencie jest oczywiste, że najlepszą odpowiedzią jest 5 dla m = 3. Mając m możemy znaleźć wielkość największego podzbioru w czasie liniowym. Ponieważ odpowiedź jest zawsze równa lub większa niż połowa wielkości zbioru, wystarczy sprawdzić wartości m upto mediany zbioru. Zauważyłem również, że konieczne jest sprawdzenie tylko wartości pierwszych m. Jednak jeśli wartości w zbiorze są duże, algorytm jest nadal raczej powolny. Czy ktoś ma jakieś pomysły jak to ulepszyć?


title: DDD/SOA w (.NET) MVC i wzorce komunikatów / odpowiedź na żądanie

text: Obecnie zastanawiamy się, czy ma sens (lub czy korzyści są warte dodanego kodu) wprowadzenie wzorca opartego na wiadomości (takiego jak Request Response) do Domain Driven Design / Service Oriented Architecture w aplikacji MVC (z DI i potencjalnie używane przez MVC, WCF, usługi Windows itp.). Zasadniczo (w MVC) kontroler używa wstrzykniętej usługi, która z kolei używa wstrzykniętego repozytorium do zapisywania/aktualizowania/usuwania obiektów. Istnieją usługi aplikacji i usługi domenowe, a usługa aplikacji może korzystać z wielu usług domenowych, aby m.in. zapisz coś, a następnie wyślij wiadomość e-mail o zapisanym elemencie. Biorąc pod uwagę `przykładowy przypadek użycia`, w którym coś jest zapisywane, a następnie wysyłana jest wiadomość e-mail, przydatne może być przedstawienie użytkownikowi wszelkich potencjalnych błędów, takich jak „Zapisywanie powiodło się, ale nie udało się wysłać wiadomości e-mail. Spróbuj ponownie w 5 minut lub skontaktuj się z pomocą techniczną itp." vs tylko ogólny błąd, taki jak „Zapisywanie lub wysyłanie wiadomości e-mail nie powiodło się”. Wzorzec oparty na wiadomości z obiektami Request i Response wydaje się w porządku (teoretycznie) lub przynajmniej obiekty odpowiedzi z np. przydatne może być kilka dziedziczonych pól. public abstract class ResponseBase { public bool Sukces { get; ustawić; } ciąg publiczny Wiadomość { get; ustawić; } } Wtedy mógłby pojawić się obiekt, który rozszerzy go o wynik ViewModel jako właściwość i na końcu kontroler może zdecydować, czy pokazać np. komunikat o błędzie lub uaktualnienie widoku itp. Wydaje się to miłe, ale w "prostych przypadkach", gdy po prostu zapisujesz element i jest jasne, że zapisanie się powiodło lub nie powiodło się, może to również wydawać się przesadą. Tworzenie i przekazywanie dodatkowych obiektów, w których być może potrzebujesz tylko identyfikatora i wartości logicznej, wydaje się sprawiać, że ten wzorzec jest zbędny. Chodzi o to, że ten obiekt musi zostać przeniesiony z kontrolera, przez usługi, do repozytorium iz powrotem. Część żądania można zignorować i martwić się tylko o zwrócenie znaczącego wyniku. Trudno oszacować, czy może być 50-50 czy 40-60, gdzie ten typ systemu mógłby być przydatny, ale jest wiele przypadków, w których mógłby z niego korzystać, a także wiele, które nie są zbyt przydatne. Czy istnieją lepsze podejścia do tego problemu, czy też ten wzorzec okazał się przydatny w przedstawionym scenariuszu? Czy jest warte dodatkowego kodowania dla prostych przypadków (w twoim przypadku)?


title: Rachunek lambda bez typu: dlaczego wywołanie według wartości jest ścisłe?

text: Obecnie czytam „Typy i języki programowania” Benjamina C. Pierce'a. Zanim naprawdę zagłębimy się w teorię typów, wyjaśnia rachunek lambda i strategie oceny. Jestem trochę zdezorientowany wyjaśnieniem _call by name_ vs _call by value_ w tym kontekście. Obie strategie są wyjaśnione w następujący sposób: ### _call by name_ Podobnie jak _normalna kolejność_ w tym, że najpierw wybiera najbardziej lewy, zewnętrzny redeks, ale bardziej restrykcyjny, ponieważ nie pozwala na redukcje wewnątrz abstrakcji. Przykład: id (id (λz. id z)) → id (λz. id z) → λz. id z ### _call by value_ Tylko najbardziej zewnętrzne redeksy są redukowane, a redex jest redukowany tylko wtedy, gdy jego prawa strona została już zredukowana do wartości — termin, który jest już obliczany i nie może być dalej redukowany. Przykład: id (id (λz. id z)) → id (λz. id z) → λz. id z (identyczny z oceną wywołania po nazwie) Ok, jak na razie dobrze. Ale po tym następuje następujący akapit: > Strategia wywołania według wartości to _ścisłe_ , w tym sensie, że argumenty funkcji > są zawsze oceniane, niezależnie od tego, czy są używane przez ciało > funkcji. W przeciwieństwie do tego, strategie _nieścisłe_ (lub _leniwe_ ), takie jak > call-by-name i call-by-need oceniają tylko te argumenty, które są > faktycznie używane. Wiem, co w praktyce oznacza call-by-value i call-by-name, ponieważ używałem (m.in.) C i Haskella, ale nie widzę, dlaczego wyjaśniona powyżej strategia oceny prowadzi do tego w rachunku lambda. Czy jest to dodatkowa zasada, która zawsze towarzyszy call-by-value, czy też wynika z opisanej powyżej strategii redukcji? Zwłaszcza, że kroki redukcji w przykładach są identyczne, nie dostrzegam różnicy między tymi dwiema strategiami i chciałbym, aby ktoś pomógł mi zdobyć intuicję.


title: Jak mogę utworzyć formularz internetowy, który wyświetla i akceptuje język tamilski?

text: Zajmuję się tworzeniem aplikacji PHP, która musi wyświetlać i akceptować treści napisane w języku tamilskim. Na przykład "login" powinien być napisany w formularzu w języku tamilskim. Jak mogę to osiągnąć?


title: Konwencja nazewnictwa dla dedykowanych obiektów blokujących wątki

text: Stosunkowo drobne pytanie, ale nie udało mi się znaleźć oficjalnej dokumentacji ani nawet opinii/dyskusji na blogu na ten temat. Mówiąc prościej: kiedy mam prywatny obiekt, którego jedynym celem jest służenie do prywatnej `blokady`, jak mam nazwać ten obiekt? class MojaKlasa { obiekt prywatny LockingObject = new object(); void DoSomething() { lock(LockingObject) { //zrób coś } } } Jak powinniśmy tutaj nazwać `LockingObject`? Weź również pod uwagę nie tylko nazwę zmiennej, ale także jej wygląd w kodzie podczas blokowania. Widziałem różne przykłady, ale najwyraźniej nie ma solidnej rady: 1. Mnóstwo zastosowań `SyncRoot` (i odmian takich jak `_syncRoot`). * **Przykład kodu:** `lock(SyncRoot)`, `lock(_syncRoot)` * Wydaje się, że ma na to wpływ równoważna instrukcja `SyncLock` VB, właściwość `SyncRoot`, która istnieje w niektórych klasach i części ICollection pewnego rodzaju wzorca projektowego SyncRoot (co prawdopodobnie jest złym pomysłem) * Będąc w kontekście C#, nie jestem pewien, czy chciałbym mieć nazewnictwo VBish. Co gorsza, w VB nazywanie zmiennej jest takie samo jak słowo kluczowe. Nie jestem pewien, czy byłoby to źródłem zamieszania, czy nie. 2. `thisLock` i `lockThis` z artykułów MSDN: C# lock Statement, VB SyncLock Statement * **Przykład kodu:** `lock(thisLock)`, `lock(lockThis)` * Nie jestem pewien, czy zostały nazwane minimalnie tylko dla przykładu lub nie * Trochę dziwne, jeśli używamy tego w `statycznej` klasie/metodzie. * EDYCJA: Artykuł Wikipedii o blokadach również używa tego nazewnictwa w przykładzie 3. Kilka zastosowań `PadLock` (o różnej wielkości liter) * **Przykład kodu:** `lock(PadLock)`, `lock(kłódka)` * Nieźle, ale moja jedyna rzecz polega na tym, że, jak można się spodziewać, przywołuje obraz _fizycznej_ „kłódki”, której zwykle nie kojarzę z _abstrakcyjną koncepcją nawlekania wątków_. 4. Nazywanie blokady na podstawie tego, co zamierza zablokować * **Przykład kodu:** `lock(messagesLock)`, `lock(DictionaryLock)`, `lock(commandQueueLock)` * W przykładzie strony VB SyncRoot MSDN jest to ma przykład `simpleMessageList` z prywatnym obiektem `messagesLock` * Nie sądzę, aby nazwać blokadę według typu, który blokujesz ("DictionaryLock"), ponieważ jest to szczegół implementacji, który może ulec zmianie. Wolę nazewnictwo wokół koncepcji/obiektu, który blokujesz ("messagesLock" lub "commandQueueLock") * Co ciekawe, _bardzo rzadko_ widzę tę konwencję nazewnictwa do blokowania obiektów w przykładach kodu online lub na StackOverflow. 5. (EDYTUJ) Specyfikacja C# w sekcji "8.12 Instrukcja Lock" zawiera przykład tego wzorca i nazywa go `synchronizationObject` * **Przykład kodu:** `lock(SynchronizationObject)`, `lock(synchronizationObject)` * *Pytanie:** Jaka jest Twoja opinia _ogólnie_ na temat nazywania _prywatnych_ obiektów blokujących? Ostatnio zacząłem nazywać je `ThreadLock` (coś jak opcja 3), ale zaczynam kwestionować tę nazwę. Często używam tego wzorca blokowania (w przykładzie kodu podanym powyżej) w moich aplikacjach, więc pomyślałem, że warto uzyskać bardziej profesjonalną opinię/dyskusję na temat solidnej konwencji nazewnictwa dla nich. Dziękuję!


title: Git zmieniający głowę nie ma odzwierciedlenia w gałęzi co-dev

text: Zasadniczo cofnęliśmy historię. Wiem, że to jest złe i już jestem zdecydowany uniknąć tego za wszelką cenę w przyszłości, ale to, co zostało zrobione, zostało zrobione. W każdym razie wydałem git push origin <1_week_old_sha>:master, aby cofnąć niektóre złe zatwierdzenia. Następnie usunąłem zbugowaną gałąź o nazwie release (która również otrzymała kilka błędnych zatwierdzeń) ze zdalnego, a następnie rozgałęziłem nowe wydanie off master. Pchnąłem to na pilota. Tak więc w zasadzie zdalne master i release są klonami i dokładnie tak, jak chcę. Problem polega na tym, że jeśli sklonuję repozytorium od nowa (lub pracuję w moim obecnym repozytorium), wszystko wygląda świetnie .... ale kiedy moi współtwórcy usuną swoją gałąź wydania i utworzą nową opartą na nowym zdalnym wydaniu, które stworzyłem, nadal zobacz wszystkie stare śmieci, które próbowałem usunąć. Czuję, że ma to związek z niektórymi lokalnymi plikami .git, które mylą nowe wydanie gałęzi ze starym wydaniem. jakieś pomysły? Dziękuję.


title: Przydatne komunikaty git commit dla łączonych gałęzi

text: _W ramach kontynuacji tego pytania:_ Jeśli sam pracuję w zespole, mogę zachować przydatne komunikaty o zatwierdzeniu podczas łączenia gałęzi, zgniatając wszystkie zatwierdzenia do jednej różnicy, a następnie scalając tę różnicę. W ten sposób mogę łatwo zobaczyć, jakie zmiany zostały wprowadzone w gałęzi i mam jedno podsumowanie opisujące funkcję/zmianę/cokolwiek, co zostało wykonane w tej gałęzi podczas przeglądania gałęzi master. Moje pytanie brzmi teraz, jak mogę to osiągnąć pracując z zespołem? W takiej sytuacji gałęzie zostaną wypchnięte do zdalnego repozytorium, co oznacza, że nie mogę zmiażdżyć wszystkich zatwierdzeń w gałęzi do jednego zatwierdzenia. Jeśli gałąź jest publiczna, czy nadal mogę mieć jedno użyteczne zatwierdzenie scalające w gałęzi master? (Przez „użyteczne” rozumiem, że zatwierdzenie w linii głównej mówi mi (1) przydatne podsumowanie tego, co zostało zrobione w gałęzi i (2) różnice tego samego.)


title: Optymalizacja hybrydowego schematu paginacji

text: Pracuję nad aplikacją sieci Web przy użyciu node.js, w której buduję częściową kopię bazy danych po stronie klienta, aby zmniejszyć obciążenie mojego serwera. W tej chwili mam taką funkcję (wyrażoną jako pseudokod w stylu Pythona, ale zaimplementowaną w JavaScript): get (nazwa_tabeli, klucz_podstawowy): if primary_key in cache[table_name]: return cache[table_name][primary_key] else: x = get_data_from_server(nazwa_tabeli,klucz_podstawowy) # socket.io return cache[nazwa_tabeli][klucz_podstawowy] = x Chociaż ten schemat doskonale sprawdza się w przypadku buforowania poszczególnych wierszy, chciałbym go rozszerzyć o obsługę tworzenia tabel z podziałem na strony uporządkowanych według klucza podstawowego i ładowanie dodatkowych danych za pomocą powyższej funkcji tylko dla bieżących i ewentualnie sąsiednich stron. Teraz nie chcę przechowywać listy kluczy podstawowych na serwerze do pobrania za każdym razem, gdy potrzebuję zmienić stronę (co z przyczyn wykraczających poza zakres tutaj będzie bardzo częste) i zachować ją na kliencie strona, podlegająca zdarzeniom tworzenia/usuwania w czasie rzeczywistym z serwera, nie wydaje się dobrym pomysłem, nawet po kompresji (za pomocą zakresów zamiast pojedynczych wartości). W jaki sposób najlepiej obliczyć, które elementy mają być wyświetlane na losowej stronie, minimalizując zapotrzebowanie na miejsce i potrzebę komunikacji z serwerem?


title: Czy Agile to nowe mikrozarządzanie?

text: To pytanie od jakiegoś czasu gotuje mi się w głowie, więc chciałem zapytać tych, którzy stosują praktyki zwinne/scrum w swoich środowiskach programistycznych. Moja firma w końcu zaryzykowała wprowadzenie zwinnych praktyk i rozpoczęła pracę z zespołem 4 programistów w grupie zwinnej na zasadzie próbnej. Minęły 4 miesiące z 3 iteracjami i nadal robią to bez pełnej zwinności dla reszty z nas. Wynika to z faktu, że kierownictwo ma zaufanie do spełnienia wymagań biznesowych przy dość dużej ilości żądań typu ad hoc z góry. Niedawno rozmawiałem z twórcami, którzy są częścią tej inicjatywy; mówią mi, że to nie jest zabawne. Nie mogą rozmawiać z innymi programistami przez ich mistrza Scrum i nie mogą odbierać żadnych telefonów w miejscu pracy (co może być w pewnym stopniu wystarczające). Na przykład, jeśli chcę porozmawiać z moim przyjacielem o kopnięciach, który jest w zwinnym zespole, nie wolno mi bez zgody mistrza Scrum; który siedzi tuż obok zwinnego zespołu. Ideą tego wszystkiego lub zwinnego jest zapewnienie kompletnej próżni programistom zwinnym od wszelkich przerw i zapewnienie im dobrych 6+ produktywnych godzin. Cóż, chłopaki, nie jestem guru agile, ale to, co przeczytałem w dokumencie Yahoo agile rollout i podobnych dla innych organizacji, daje mi poczucie, że agile nie jest tanie. Potrzeba zasobów i budżetu, aby zaszczepić w zespołach elastyczność i naprawić problem, gdy przybędą, aby przywrócić je na właściwe tory. Na początek wymaga szkolenia dla programistów i coachingu dla menedżerów itp. Obecny mistrz Scrum był menedżerem, który odbył kilka dni szkolenia zwinnego opłacanego przez kierownictwo, teraz prowadzi ten zwinny zespół. Słyszałem też na spotkaniu, że manifest Agile nie dyktuje, że Agile nie jest osadzony w kamieniu i jest indywidualnie dostosowywany do każdej firmy. Cóż, to wszystko brzmi dobrze i rozsądnie. Podsumowując, zawsze uważałem, że agile ma zapewnić harmonię w zespołach programistycznych, co owocuje szczęśliwymi programistami. Jednak podczas rozmów z twórcami w zwinnym zespole dostaję zupełnie odwrotne odczucie. Są niezadowoleni, że nie mogą rozmawiać o niczym innym, jak tylko pracować, siedzieć spokojnie przez cały dzień, po prostu pracując, i czują, że to po prostu kolejny sposób na to, by kierownictwo zmusiło ich do większej pracy. Powiedz mi proszę, czy jest to jeden z przykładów dobrych praktyk stosowanych w celu uzyskania egoistycznej korzyści za więcej dolarów? A może to tylko my, programiści, tacy jak ja, a ten zwinny zespół czuje, że nie lubi pracować w środowisku, w którym oddychają tylko pracą, ponieważ są w pracy. Dziękuję. Edycja: to firma działająca w branży opieki zdrowotnej, która ma biura w całych Stanach Zjednoczonych. Zdecydowanie czuję się jak agile w stylu kowbojskim, co sprawia, że naprawdę nie chcę w ogóle iść na agile, szczególnie w mojej obecnej firmie. Wszystko to ma związek z całkowicie tanim zarządzaniem. Wycofanie drogiej kawy na tańszą wersję, nacisk na oszczędności i produktywność przy zachowaniu jak największej szczupłości. Mam wrażenie, że ktoś z kierownictwa za drzwiami wyrzucił ten pomysł, że zwinny sprawia, że produkujesz więcej, abyśmy mogli pokazać naszym szefom, że produkujemy więcej przy tym samym zatrudnieniu. A może pozwoli nam to zredukować liczbę pracowników, jeśli tak jest. ZREDAGOWANO: Mają swoje 5-minutowe codzienne spotkanie. Ale nie wolno rozmawiać ani rozmawiać z kimś spoza ich zespołu. Cały nacisk kładziony jest na pracę.


title: Konwersja naszego oprogramowania Windows do sieci

text: Zastanawiamy się nad konwersją pakietu oprogramowania z systemu Windows na przeglądarkę. Jest to system back office składający się z Księgi Głównej, Kontroli Zapasów, Przetwarzania Zamówień itp. i jest napisany w starszym języku (Dataflex). Projekt składa się z ponad 200 tabel baz danych, ponad 100 raportów, ponad 300 widoków, ponad 100 okien dialogowych i około 200 list wyboru. Naprawdę staram się zrozumieć technologie, których będę potrzebować, aby przekonwertować to na bardziej nowoczesny język / framework programowania oparty na sieci. Nawet proste ekrany (Wprowadzanie lokalizacji magazynowej) wydają się zbyt skomplikowane. W bieżącym języku mogę przeciągnąć kilka pól do formularza (a-la VB), podłączyć mały fragment kodu bazy danych i mam ekran, który pozwoli mi znaleźć, usunąć, edytować i zmieniać nagrywa łatwo. 10 minut rozwoju, blaty. Czy ktoś ma jakieś sugestie, jak mogę przejść z mojego obecnego języka programowania w stylu VB na taki, który umożliwia podobną funkcjonalność w sieci? Czy ktoś ma jakiś pomysł, jak mam obliczyć, ile roboczogodzin zajmie przekształcenie tego rodzaju projektu w nowy język w sieci? Jakie opcje Web Framework są dostępne i jak mogę zdecydować między pójściem z czymś takim jak Rails a pójściem z czymś takim jak ASP.Net? Mamy mnóstwo kodu połączonego ze zdarzeniami OnClick i OnChange. (Wiem, że to jest złe). Jakie strategie mogę zastosować, jeśli chodzi o konwersję tego do sieci? Przyznam się - jestem beznadziejnie zdezorientowany niektórymi nowszymi składniami używanymi przez współczesne języki. Czy jest jakiś język, który pozwala mi na dostęp do bazy danych bez konieczności podklasowania wszystkiego za pomocą IEnumerable i różnych dziwnych rzeczy typu Typecasting. Czy ktoś zrobił coś takiego, jak my chcemy? Jakie były pułapki? Przepraszam za niejasność pytania. Byłbym bardziej szczegółowy, ale nie wiem od czego zacząć. Usuń, jeśli pytam niewłaściwą rzecz lub w niewłaściwym miejscu.


title: Nazewnictwo klas w aplikacji do handlu akcjami

text: Jak zwykle nazywasz klasę, która przechowuje otwarte, wysokie, niskie, zamknięte, wolumen i znacznik czasu instrumentu finansowego (np. akcji)? Na przykład na 5-minutowym wykresie intraday ten obiekt zawierałby OHLC i wolumen między 10:00 a 10:05. Czy ktoś pracujący w terenie może mi udzielić porady?


title: Dlaczego istnieją języki nierozstrzygalne? Czy ktoś może mi wyjaśnić rozwiązanie mojej książki?

text: Cóż, w mojej książce jest napisane, że „istnieją języki nierozstrzygalne”. A dowodem jest: > Każdy algorytm jest słowem. Wtedy są tylko policzalne algorytmy. Ale > istnieje niezliczona ilość języków, a zatem więcej niż algorytmy Dlaczego mówi się, że każdy algorytm jest słowem? Słowo jest konkatenacją symboli, elementów alfabetu, to jaka jest relacja między słowem a algorytmem? Czy ktoś może mi to wyjaśnić?


title: Korzystanie tylko z testowania interfejsu użytkownika. Czy to w porządku?

text: Jestem samodzielnym programistą współpracującym z pracodawcą offshore. Zdaję sobie sprawę, jak ważne są testy jednostkowe (chociaż wcześniej tego nie praktykowałem), ale obecnie kod nigdy nie był testowany. Problem z kodem polega na tym, że nie jest to coś, co nazywam „dobrym modułem”, niektóre części są naprawdę niechlujne, rozległe użycie globalnych, a kod tak naprawdę nie pokazuje luźnego sprzężenia. Jeśli się nie mylę, kod może wymagać ciężkiej refaktoryzacji przed testowaniem jednostkowym. Ponadto wydaje się, że pracodawca nie jest do końca zainteresowany testowaniem. Raczej sugeruje spędzenie tego czasu na budowaniu obiektów. Zasugerowałem mu więc testowanie interfejsu użytkownika. Ponieważ testowanie interfejsu użytkownika to coś, co robimy za każdym razem, testowanie funkcji, klikanie, sprawdzanie, czy coś nie jest zepsute, dla nas obojga sensowne było użycie go do zautomatyzowania procesu sprawdzania funkcji i zaoszczędzenia czasu. Ponieważ nigdy wcześniej nie przeprowadzałem testów interfejsu użytkownika, nie wiem, jakie ewentualne wady mogą wiązać się z samym testowaniem interfejsu użytkownika, czy w ogóle będzie to korzystne?


title: Model architektoniczny JavaScript

text: Czy są jakieś oczywiste wady tego modelu architektonicznego OO, który zamierzam zaimplementować za pomocą javascript? Jest podobny do modelu MVP, ale zamiast tego rola modelu jest podzielona na trzy moduły: * pamięć podręczna (przechowuje dane zamiast żądać od serwera) * model (zarządza żądaniami surowych danych, pobiera je z pamięci podręcznej, jeśli są dostępne lub serwer) * modyfikator (obsługuje żądania wymagające danych, które wprowadzają zmiany w danych na serwerze) Dla diagramu pokazującego, jak dane przepływają przez ten model: ![tutaj wprowadź opis obrazka](http://i.stack. imgur.com/sUjYY.png) **view** * konfiguruje i zarządza interfejsem użytkownika, który może wymagać od prezentera żądania danych * konfiguruje kontrolki do zmiany wyświetlanych treści, prawdopodobnie wymagającego żądania danych od prezentera ** cache** * zawiera zapis niektórych pobranych danych w obiektach danych * ma metodę .store() do przechowywania danych w pamięci podręcznej * ma metodę .retrieve() do pobierania danych z pamięci podręcznej * dostępny jest dostęp do przechowywania i pobierania do modelu i modyfikatora (działającego jako szybszy pośrednik) miejsce udostępniania informacji niż serwer) **prezenter** * obsługuje prośby o sformatowane dane z widoku * prosi o dane od Modela (przekazanie callbacku do uzupełnienia) formatuje dane do prezentacji i rozmów callbacki widok **model** * obsługuje żądania danych od prezentera * żąda danych z pamięci podręcznej (cache.retrieve()) * jeśli dane nie znajdują się w pamięci podręcznej, żąda ich od serwera, a następnie przechowuje je w pamięci podręcznej (cache.store()) * dane przekazywane z powrotem do prezentera za pomocą funkcji zwrotnych **modyfikator** * obsługuje żądania z widoku o modyfikacje danych * określa typy żądań publikowania, umieszczania i usuwania * obsługuje tylko określone typy żądań, które mogą być obsługiwane osobno (np. ustawienia) * przechowuje nowe dane w pamięci podręcznej (cache.store( )) * przesyła dane na serwer * wywołuje callback informujący o powodzeniu przechowywania danych Jest to dość duży projekt i będzie nad nim pracowało wielu innych, więc dobrze byłoby zacząć go od razu. **edit 1** Metody cache.store() i cache.retrieve() otrzymują tylko informacje wymagane do odniesienia się do danych w pamięci podręcznej, ale nie określają sposobu ich przechowywania. Metody pamięci podręcznej wykorzystują te informacje do odpowiadania lub przechowywania poprawnych danych, ale wewnętrzna struktura, w której przechowywane są dane, jest utrzymywana w tajemnicy.


title: Jak wykonać wiele połączeń z usługą internetową bez obciążania tej usługi wysokimi opodatkowaniem? Skalowanie pytania

text: czy istnieje dobry wzorzec wysyłania wielu połączeń do usługi sieciowej, ale bez obciążania go i zapewniania, że dane zostaną odesłane? Nie wiem na tyle, aby poprawnie opisać problem, aby nawet zacząć go poprawnie googlować - aktualne wyniki google porównują odpowiedzi strumieniowe i nie strumieniowe wcf? Scenariusz: Pracuję nad aplikacją (jestem jr. dev.), która musi zebrać informacje z kilku źródeł o „kliencie” i domenach, które są jego właścicielami Techniczne: dla jednego ze źródeł muszę wysłać ciąg tablica domen do usługi sieciowej, a ta usługa sieciowa zwraca wpis dla każdej nazwy domeny, ale ta lista nazw domen będzie długa na tysiące - chciałbym spróbować podzielić tę listę na kawałki wielkości jednego kawałka (każda z 1 tys. nazw domen) a następnie... w kolejce do wysłania do tej usługi sieciowej, ale upewnij się, że usługa sieciowa nie pominie żadnego nie wymagają paginacji do nawigacji. Obecna teoria: Czy powinienem wziąć moją ogromną listę 30k, podzielić ją na kawałki o wielkości 1k, wrzucić każdy kawałek o rozmiarze 1k do obiektu „żądania”, złożyć te „kawałki żądań” w „listę fragmentów żądań” i iterować po tej liście (sekwencyjnie / blokowanie, więc nie duszę WS) i dla każdego „fragmentu żądania” odzyskaj „fragment odpowiedzi”, złóż je w listę, a następnie przekaż tę listę z powrotem do interfejsu w celu wyświetlenia? czy to opłacalna metoda? czy istnieje lepszy sposób na kolejkowanie przedmiotów? Czy ktoś zna od ręki jakieś przydatne artykuły dotyczące tego rodzaju kolejek? czy są jakieś „gotchas” lub dodatkowe elementy do rozważenia przed próbą pierwszego przejścia? Dodatkowe edycje: - Nie mam pełnej kontroli nad usługą odbierającą, nie mogę zobaczyć jej kodu, a programiści, którzy nią zarządzają, są... mniej niż reagują na e-maile. Obecnie nie znam limitów testów warunków skrajnych usługi sieciowej. Wysłałem e-mail do właścicieli tego komponentu, ale nie otrzymałem jeszcze odpowiedzi - miałem zamiar opracować swój projekt, czekając na nich.


title: Jak uchwycić przypadek użycia „Reklama displayowa”?

text: Jaki byłby przypadek użycia, aby „pokazać reklamę w części widoku”? Z kim mógłby być aktor, z którym można by się utożsamiać? Użytkownik czy system? Ponieważ użytkownik nie ma konkretnego celu, aby zobaczyć reklamy, zastanawiam się, jaki jest najlepszy sposób na uchwycenie tego na diagramie przypadków użycia? Każda pomoc będzie pomocna


title: Schemat przechowywania danych binarnych (zapisywanie plików przesłanych przez użytkownika)

text: W naszej aplikacji obecnie zapisujemy dane binarne do bazy danych (okropne, wiem; ale to są rzeczy starsze i nie była to moja decyzja). Próbujemy przenieść te dane na urządzenie zewnętrzne i wymyślić schemat zapisywania tych plików. Mamy wielu najemców, chciałbym mieć katalog na najemcę. Mój schemat to zbudowanie ścieżki z pierwszych trzech liter najemcy. Więc jeśli masz dzierżawcę o nazwie `apple`, jego pliki będą znajdować się w `/a/p/p/apple`. W tych katalogach zapiszę pliki. W przypadku plików chcę wygenerować losową 6-znakową nazwę alfanumeryczną (na razie tylko małe litery z przyczyn wewnętrznych). Więc jeśli wygenerujemy nazwę pliku o nazwie `6a8jxo`, zostanie on zapisany jako `<tenant>/6/a/6/6a8jxo`. Dzięki tej strategii każdy dzierżawca może mieć maksymalnie około 916 miliardów unikalnych plików (nie chodzi o to, że próbujemy zapisać tyle), z maksymalnie 46 656 plikami na katalog. Jeśli wybiorę nazwę składającą się z 5 znaków, będziemy mieć maksymalnie 60,5 miliarda unikalnych plików, po 1296 plików na katalog. Czy są jakieś wady tego podejścia? Zdaję sobie sprawę, że niektóre katalogi mogą zawierać tylko jeden lub dwa pliki, ale moim zdaniem nie jest to duży problem. Mój kolega nie chce tego robić w ten sposób; chce użyć pola z autoinkrementacją w bazie danych, a następnie oprzeć strukturę katalogów na wartości szesnastkowej (zakładam 32-bitowej) tego, zamiast korzystać z dzierżawy. W jego strategii wartość szesnastkowa byłaby używana w następujący sposób: plik będzie przechowywany w katalogu znajdującym się w `<tenant>/aa/bbb` gdzie `aa` to pierwsze dwa znaki (najbardziej znaczące części) wartości szesnastkowej, a bbb to kolejne trzy. Jego rozumowanie jest takie, że chce tworzyć nowe katalogi tylko wtedy, gdy jeden się zapełni, zamiast mieć liczne, częściowo wypełnione katalogi. Takie podejście wprowadza wiele trudności po stronie kodu i nie widzę całkowicie wypełnionych katalogów jako argumentu, który uzasadniałby dodatkowy wysiłek wymagany do tego. Czy są jakieś inne strategie lub podejścia, których nie brałem pod uwagę?


title: Czy istnieje odniesienie do Django?

text: Jestem nowy w Django. Uważam, że oficjalne przewodniki tematyczne https://docs.djangoproject.com/en/1.3/ to doskonałe miejsce do nauki. Ale teraz jestem w miejscu, w którym potrzebuję szybkiego odniesienia, aby zobaczyć, jakie metody ma obiekt, jakie przyjmuje argumenty, co zwraca itp., podobnie jak w dokumentacji Pythona lub dokumentacji Java. Więcej odniesienia niż samouczek. Oficjalne dokumenty mają charakter samouczków i niekoniecznie zawierają odniesienia do wszystkich metod. Czy coś mi umyka? Czy oficjalna dokumentacja Django wystarczy dla wszystkich?


title: Dlaczego wszystkie środowiska graficzne oprócz KDE używają GTK?

text: Niedawno włamałem się w Qt i uznałem to za całkiem przyjemne. Potem kilka razy zmieniłem dystrybucje na moim laptopie i zauważyłem, że tylko KDE używa Qt, wszystkie inne używają Gnu Image Manipulation Program Tool Kit. GTK to przede wszystkim zestaw narzędzi widgetów, chociaż wydaje się, że istnieją porty Windows i Mac. Nie wiem, dlaczego ktoś miałby budować DE na bazie zestawu narzędzi do edytora obrazów. Qt bardziej wieloplatformowego frameworka, w tym wątków, sieci i innych funkcji innych niż GUI. Słyszałem, że licencjonowanie jest uważane za problem. Czy właśnie odpowiedziałem na moje własne pytanie, czy są jeszcze inne rzeczy poza gorliwością w kwestii wolności? **aktualizacja** Chciałbym doprecyzować, że nie chodzi mi o opinie, ale _obserwacje_. "Qt nie jest prawdziwym C++" to spostrzeżenie, podobnie jak "GTK było powszechne przez bardzo długi czas". Poza tym, > Ale oprogramowanie i programowanie również nie zawsze jest trudną nauką. Gdy > przejdziesz przez pytania, czy ten kod się kompiluje, czy nie, masz do czynienia z problemami > najlepszych praktyk, doświadczeń i zachowań. Być może dlatego, że nasze społeczności stały się tak przyzwyczajone do uzyskiwania szybkich, dokładnych i aktualnych odpowiedzi, że czują, że nawet subiektywny Stack Overflow jest lepszy niż alternatywy. Do tego stopnia, że nasi koledzy programiści stworzyli siostrzaną stronę > specjalnie dla swoich stłumionych subiektywnych pytań. Weź jeden stos > subiektywnych pytań, zabutelkuj go na ponad dwa lata i… kablooey!


title: Jak odwieść klienta, który dopiero poznał technologię i chce z niej korzystać wszędzie?

text: Mój klient niedawno odkrył, czym jest przepisywanie adresów URL, nie rozumiejąc do końca, co to jest, jak działa oraz jakie są jego wady i zalety. Teraz prosi o wiele dziwnych zmian w rzeczywistych wymaganiach obecnych projektów i zmian w starych projektach, aby zaimplementować to, co uważa za przepisywanie adresów URL. **Z jednej strony denerwuje mnie, że proszono mnie o robienie rzeczy, które nie mają sensu** zamiast wykonywać prawdziwą pracę. **Z drugiej strony nie mogę powiedzieć klientowi, że nic nie rozumie z tematu** pomimo jego zainteresowania. Myślę, że wiele osób miało sytuacje, w których ich menedżer lub ich klient właśnie nauczył się nowego modnego hasła lub nowej technologii, a on pokochał to tak bardzo, że chciał go użyć w każdym projekcie, wszędzie, przepisać całą bazę kodu tylko po to, by użyć tego nowego coś, itp. Niedawno przeczytałem coś związanego z Programmers.SE, gdzie ludzie opowiadali o swoich doświadczeniach, gdy wokół XML było dużo szumu, a niektórzy menedżerowie prosili o wprowadzenie XML w każdym projekcie tylko po to, aby pokazać wszystkim, że użyłem go. Więc ci, którzy byli w podobnej sytuacji, jak sobie z tym poradziliście?


title: Czy jest jakaś okoliczność, w której ścisły projekt kaskadowy może odnieść sukces, gdy wymagania nie są jasno określone?

text: Nie widzę, w jaki sposób projekt oprogramowania może osiągnąć jakikolwiek znaczący postęp w ramach metodologii kaskadowej, jeśli wymagania nie mogą być jasno określone od samego początku. Czy coś mi brakuje?


title: Jak często wypuszczać w sprincie Scrum

text: Jak często puszczasz podczas sprintu. Dopiero pod koniec sprintu lub za każdym razem, gdy funkcja jest gotowa. A jak radzić sobie z wydaniami naprawiającymi błędy?


title: Parametryzacja symulacji opartej na agentach (pytanie OOP)

text: Chciałbym usłyszeć opinie moich kolegów programistów na temat parametryzacji symulacji opartych na agentach: Rozważ: * Rdzeń symulacji, w tym geometria, testy kolizyjne, niektóre zasady * Różne agenty (modelowane w stylu OOP: has-a, is-a , abstrakcyjne interfejsy) * Agenci mają różne czujniki, różnych aktorów, różne kontrolery, ... Wszystkie połączone ze sobą przez referencje/wskaźniki i dostępne za pomocą abstrakcyjnych interfejsów. Zatem zasadniczo każdy agent składa się z drzewa własności (agent jest właścicielem czujników, kontrolera, aktorów), nałożonego na wykres przepływu danych (czujnik połączony z kontrolerem, połączony z aktorem). Drzewo, wykres plus parametryzacja elementów razem tworzą **ustawienie symulacji**. Przeprowadzenie symulacji sprowadza się do: * Wczytania ustawień symulacji * Zestawienia obiektów, sparametryzowania i połączenia ich ze sobą w celu utworzenia drzewa i wykresu * Przeprowadzenia symulacji * Wyprowadzenia pewnych danych (statystyki, sygnały, cokolwiek) Pytanie brzmi, jak najlepiej zapisz konfigurację symulacji oraz sposób tworzenia instancji i parametryzacji rzeczy. Wymagania (niektóre z nich sprzeczne): 1. Parametryzacja powinna być prawdopodobnie ustrukturyzowana wzdłuż drzewa własności, ponieważ jest to najbardziej naturalne. 2. Wiele razy chciałbym utworzyć instancję wielu podobnych agentów z tylko 1 lub 2 parametrami zmienianymi między instancjami. To musi być łatwe. 3. Chciałbym, aby parametryzacja i kod były blisko siebie. Eksperymentując z algorytmami, na które wpływa parametryzacja, nie chciałbym, aby zmiany były rozłożone na zbyt wiele miejsc. 4. Odwrotnie, chciałbym zachować parametryzację poza kodem, aby łatwo zautomatyzować przebiegi symulacji w celu systematycznego przechodzenia przez przestrzenie parametrów. 5. Parametry mają metadane: typ, zakres wartości, jednostka fizyczna, opis tekstowy, zależności logiczne (np. jeśli podasz X, nie musisz podawać Y) 6. Parametry wpływają nie tylko na dane (zmienne składowe), ale także na kod (wykorzystanie szczególna specjalizacja bazy abstrakcyjnej) * * * Teraz moje uczelnie i ja mamy za zadanie zbudowanie nowej symulacji opartej na agentach: * Czy znasz jakieś frameworki/biblioteki/techniki? * Czy jakieś wzory mają zastosowanie? Najlepszych praktyk? * Metaprogramowanie? * Całkowicie porzucić OOP? Czekam na twoje myśli.


title: Czy można bezpiecznie pobrać VS11/.NET4.5 beta i nadal wdrażać na serwerach z .NET 4.0?

text: Chciałem wypróbować VS2011 i .NET 4.5 beta, ale ścieżka aktualizacji jest w najlepszym razie niejasna. Jeśli rozumiem, co przeczytałem, platforma .NET 4.5 nadpisuje biblioteki .NET 4.0 na komputerze lokalnym, więc biblioteki takie jak mscorlib.dll i System.dll zostaną zastąpione wersją 4.5 — w pełni zgodną wstecz, ale nadal różne. Jeśli tworzę witryny ASP.NET z VS2011 i zakładając, że nie używam żadnej z nowych funkcji 4.5 w kodzie, czy znasz jakieś problemy, które mogę mieć, wdrażając na serwerze sieci Web tylko z .NET 4.0 struktura? Nie spodziewałbym się żadnych problemów, ponieważ to ten sam CLR, ale chciałbym wiedzieć na pewno, zanim to zrobię. Zawsze istnieje opcja utrzymania oddzielnej maszyny wirtualnej dla programistów 2011/4.5, abym mógł programować na 4.5, ale wracam do mojej oryginalnej maszyny 4.0, aby skompilować i opublikować, ale wolę nie iść tą drogą, jeśli tego nie zrobię musieć. Dziękuję


title: Czy powinienem dołączyć jeszcze nieopublikowane projekty do mojego CV/CV?

text: Ukończyłem projekt strony internetowej z nowymi technologiami takimi jak HTML5 i CSS3. Ale moja firma nie dopuści do produkcji. Planują uruchomić nową witrynę w nowej funkcji wersji projektu. Czy powinienem umieścić taki projekt, który nie jest jeszcze dostępny online w moim CV/CV? Może z dodatkowym wyjaśnieniem typu „ten projekt nie został wydany”?


title: Dlaczego główna pamięć do alokacji obiektów jest nazywana „stertą”?

text: Czy ktoś wpadł na pomysł, dlaczego obszar pamięci głównej, w którym alokowane są obiekty, nazywa się stertą. Rozumiem uzasadnienie dla stosu LIFO, ale chciałbym wiedzieć, jakie jest uzasadnienie dla nazwy „sterty”.


title: Czy moja logika logowania powinna być częścią kontrolera czy usługi w aplikacji internetowej MVC?

text: Używam Shiro jako mojego menedżera bezpieczeństwa dla aplikacji sieci web Spring MVC. Logowanie odbywa się zasadniczo w tych wierszach: Subject user = SecurityUtils.getSubject(); user.login(nowy UsernamePasswordToken(nazwa użytkownika, hasło)); Gdzie powinienem umieścić tę logikę? `login()` może zgłaszać wyjątki, jeśli żądany użytkownik nie istnieje lub podano nieprawidłowe hasło itp. Czy powinienem wywołać kod z mojego kontrolera i wykonać tam obsługę błędów, czy powinienem wywołać go z poziomu mojej warstwy usług, złap wyjątki i wrzucić własne do kontrolera?


title: Czy istnieje wykres z licencjami FOSS wyszczególniający, co można z czym połączyć?

text: Szukam wykresu takiego: ![tekst alt](http://i.stack.imgur.com/MmRTg.jpg) Zasadniczo coś, co mówi Ci, czy aplikację z daną licencją można połączyć z biblioteką danej licencji. Czy coś takiego istnieje?


title: Radzenie sobie z podstawową wadą projektową, gdy jesteś nowy w projekcie

text: Właśnie rozpocząłem pracę nad projektem open source z około 30 programistami. Pracuję nad naprawieniem niektórych błędów, aby dostać się do "pętli" i stać się regularnym commiterem projektu. Problem polega na tym, że myślę, że odkryłem podstawową wadę projektową, która powoduje jeden z błędów, nad którymi pracuję. Ale czuję, że jeśli wyślę to na liście dyskusyjnej, wyjdę na arogancką, a niektóre dyskusje, które odbyłem na ten temat, są sprzeczne z niektórymi ludźmi. Jak mam się do tego zabrać?


title: Najłatwiejszy język do prostych aplikacji Windows dla początkującego programisty Windows?

text: Specjalizacja: 11 lat programowania w PHP Chciałbym zająć się prostym programowaniem Windows dla projektu kiosku. Jaki język wybrać? **Moje kryteria:** * łatwy do nauczenia, język "wyższego" poziomu (np. nie C++, nie mam roku na to, aby się tego nauczyć) * szybkie uruchomienie (to właśnie uwielbiam w PHP ) * dobrze udokumentowane i wiele zasobów społeczności * łatwe tworzenie GUI * klient chce komputerów z systemem Windows, więc Linux nie jest opcją **To, co zebrałem z innych odpowiedzi Stackexchange i Google, ale nie mam doświadczenia w używaniu:** 1. QT + Python (chciałbym, żeby PHP-Qt było bardziej dojrzałe - wydaje się, że nie ma zbyt dużej społeczności) 2. C# (wydaje się przesadą dla prostego kiosku) 3. Firefox + rozszerzenie kiosku + AMP dla GUI i oprogramowanie makr do manipulowania oknami, plikami, rzeczami niższego poziomu.


title: Składnia zapytania SQL — formatowanie?

text: Patrzę na bardzo dużą (5-6 cyfr LOC), bardzo złożoną bazę kodu, pełną interakcji nieporęcznych, współzależnych widoków i procedur składowanych (wiele silosów liczących 4-5 cyfr). Źródłowy kod SQL był wielokrotnie dotykany przez wiele różnych osób i nie zostały narzucone żadne ograniczenia formatowania. Doprowadziło to do szalenie odmiennego formatowania SQL, nawet w ramach jednej procedury składowanej/definicji widoku. Nad kodem nadal pracuje kilka grup, głównie starszych programistów, i widzimy stały strumień drobnych zmian i ulepszeń. * * * W tych warunkach: Jaki jest rozsądny standard, którego należy przestrzegać przy formatowaniu (np. czy powinniśmy używać wszystkich wersalików dla słów kluczowych? wydaje się, że małe korzyści wynikające z tego, że tak wielu programistów nie musi naciskać klawisza Shift, w rzeczywistości przyczyniają się do znacznych oszczędności czasu/kosztów). czy warto opowiadać się za głównym refaktorem w celu ujednolicenia formatowania (tj. czy koszt szkolenia dużej grupy programistów/zmiany ich zachowania/złej woli w egzekwowaniu nowego ograniczenia jest wart korzyści w dłuższej perspektywie?)


title: Kod źródłowy stosu TCP/IP

text: Szukam kodu open source dla stosu TCP/IP. Wyjaśnienie na wzór stosu pomogłoby mi również w zrozumieniu różnych modułów i ich interakcji. Próbowałem szukać, ale jest bardzo mniej informacji dotyczących tylko stosu TCP/IP.


title: Jasne nazwy obiektów i właściwości bez ujawniania szczegółów implementacji

text: Przebudowuję aplikację mobilną na iOS, która wykorzystuje interfejs API z nieco przypadkową i często powolną wydajnością. Powodem powolności jest to, że API jest w rzeczywistości warstwą nad wieloma innymi usługami na poziomie platformy, z których niektóre działają powoli. Następnie dostajesz się do sytuacji typu najsłabszego łącza, w której czas potrzebny na odpowiedź interfejsu API jest ograniczony przez najwolniejszą odpowiedź usługi niższego poziomu. Podczas korzystania z API mam do czynienia z obiektem, nazwijmy go `Foo`, który wyświetlam w tabeli, a także na ekranie szczegółów, jeśli to konieczne. Kompromis dokonany przez projektanta/realizatora API polegał na udostępnieniu wywołania w celu pobrania listy `Foo` z pominięciem niektórych określonych właściwości (pobieranie tych właściwości dla więcej niż 1 lub 2 obiektów na raz jest bardzo powolne) i " szczegółowy widok”, aby dostarczyć pojedynczy obiekt z wypełnionymi wszystkimi właściwościami. Początkowy schemat modelu zawierał dwa obiekty modelu `Foo` i `FooDetails`. Czując, że ujawnia to niepotrzebne szczegóły implementacji, połączyłem zarówno `Foo` jak i `FooDetails` w `Foo`, ale wciąż potrzebny jest sposób na łatwe określenie, czy `Foo` jest kompletny czy nie. (To znaczy, czy `Foo` ma dodatkowe właściwości obecne, czy nie.) Najlepsze, co mogłem wymyślić, to enum: typedef enum : NSUInteger { ELYFooAbridgedState, ELYFooCompletedState } ELYFooCompletenessState; Nie chciałem używać `BOOL` ze względu na możliwość wielu stanów "pomiędzy" w przyszłości, ponieważ niektóre usługi niższego poziomu są dostrojone. Czy ktoś może podać alternatywne nazewnictwo lub reprezentację tej sytuacji? Czy są wady w.r.t. do przyszłej korekty przy takim podejściu? To może być jedyny raz, kiedy możliwe jest całkowite zrefaktorowanie schematu modelu aplikacji i chciałbym, aby był on tak odporny, jak to tylko możliwe.


title: Kiedy używasz dziedziczenia do ponownego użycia kodu, czy uważasz, że to zbyt trudne, aby połykać korzyści z ponownego użycia?

text: Koduję od około 8 lat, jednak nadal uważam, że dziedziczenie jest zbyt elastyczne i czasami całkowicie myli Cię z kodem, który napisałeś. Najprostszym przykładem może być: abstract class AClass { protected void method1() { if(check()) { do1(); } inny { do2(); } } chronione streszczenie void do1(); chronione streszczenie void do2(); } Intencją klasy jest to, aby ludzie mogli zaimplementować metody do1() i do2(), aby można było wykonać dalszą logikę, jednak czasami ludzie decydują się na przeciążenie metody1() i wtedy sprawy natychmiast się komplikują. Odnajduję tylko we wzorcu strategii, kod jest dobrze ponownie używany poprzez dziedziczenie, w większości przypadków projektant klasy bazowej bardzo dobrze zna jej podklasy, a dziedziczenie to jest całkowicie opcjonalne. Mam klasę, która jest dziedziczona przez 4 klasy - IoHandler, i jest to podklasa po stronie serwera, po stronie klienta, serwer brzegowy, serwer pochodzenia i zaczyna doprowadzać mnie do szaleństwa. Zawsze zajmowałem się refaktoryzacją kodu, zawsze wychodziłem z pomysłami, które moim zdaniem zadziałają, a potem okazało się, że nie. Mówi się, że ludzki mózg może jednorazowo pomieścić tylko 7 informacji, czy mam ich za dużo?


title: Pisanie dokumentacji dla dobrze rozumianych metod, takich jak equals w Javie

text: Czy dobrą praktyką jest pisanie komentarzy do powszechnie znanych metod, takich jak equals, CompareTo itp.? Rozważ poniższy kod. /** * Ta metoda porównuje równość bieżącego obiektu z obiektem tego samego typu */ @Override public boolean equals(Object obj) { //code for equals } Moja firma stara się wprowadzać komentarze takie jak powyżej. Wymagany komentarz Javadoc? Czy nie jest oczywiste i dobrze zrozumiane, co robi metoda równości i polubienia (porównaj, porównaj z) itp.? Jakie są twoje sugestie?


title: Jak sprawić, by strona internetowa ASP .NET MVC miała ciągły uruchomiony proces?

text: Ta strona ma być grą, w której gracze mają jakieś „budynki” i te budynki produkują surowce. Np. kopalnia żelaza może wyprodukować 30 sztuk rudy żelaza na minutę i automatycznie dodać ją do inwentarza użytkownika. Nie ma znaczenia, czy użytkownik jest online, czy nie, powinien działać 24/7. Kiedy więc użytkownik zaloguje się na swoje konto, zobaczy, że jego stos rudy żelaza nagromadził się w zależności od tego, jak długo to trwało. Niektóre wskazówki we właściwym kierunku byłyby bardzo mile widziane :)


title: Na jakie czynniki należy zwrócić uwagę, aby zwiększyć wydajność zmiany rozmiaru obrazu?

text: Konfiguruję aplikację internetową, w której ludzie będą przesyłać obrazy. Po przesłaniu obrazy zostaną oznaczone znakiem wodnym, a następnie będą zmieniane wielokrotnie (miniaturki, różne rozmiary itp.), A następnie przesłane do Amazon S3 w celu przechowywania. Aplikacja internetowa jest napisana w Pythonie z frameworkiem Tornado, tak naprawdę nie chcę blokować wątków Tornado z przetwarzaniem obrazu, więc wyślę go do oddzielnego skryptu (i być może nawet oddzielnych serwerów) za pomocą Gearmana (Opracowałem klienta async-gearman dla Pythona/Tornado). Jedną z zalet Gearmana jest to, że możliwe jest uruchamianie zadań w wielu językach, więc faktyczne przetwarzanie i przesyłanie obrazu może odbywać się w eterze Python, Ruby, PHP, Perl, Java, C lub coś innego. Pozostaje pytanie, czy jeden jest lepszy do pracy? Czy istnieją pewne biblioteki dostępne tylko dla określonych języków, które są szczególnie dobre w zmianie rozmiaru obrazu? Najważniejsza będzie wydajność: chcielibyśmy mieć możliwość uruchamiania jak największej liczby zadań na serwerze. Czy są inne czynniki, na które powinienem zwrócić uwagę? Wolałbym trzymać się Pythona, Ruby lub PHP, ponieważ to jest to, co znam, ale jeśli zysk na wydajności z robienia tego w Javie/C jest wystarczająco dobry, byłbym w porządku z zaimplementowaniem tego w ten sposób. **Nie szukam** przykładów kodu, sam mogę je znaleźć, ale chciałbym wiedzieć, czy są jakieś duże różnice między bibliotekami przetwarzania obrazu. Wiem, że PHP ma prawdopodobnie najłatwiejsze w użyciu GD, a wcześniej używałem kilku bibliotek Pythona i wydają się w porządku. Nigdy nie robiłem niczego z obrazami w Ruby.


title: Odwrócenie zależności zawsze obejmuje wstrzykiwanie zależności?

text: To jest pytanie o pracę domową. Przeglądałem moje notatki i nawet nie widzę, jak te dwie rzeczy są ze sobą powiązane. Googlowanie daje mi pytania/odpowiedzi na jedno lub drugie, ale nigdy na oba.


title: MVVM i wzorzec usług

text: Buduję aplikację WPF przy użyciu wzorca MVVM. W tej chwili moje viewmodels wywołują warstwę usług, aby pobrać modele (w jaki sposób nie ma znaczenia dla viewmodel) i przekonwertować je na viewmodels. Używam iniekcji konstruktora, aby przekazać usługę wymaganą do viewmodelu. Jest łatwo testowalny i działa dobrze dla viewmodeli z kilkoma zależnościami, ale jak tylko próbuję stworzyć viewModels dla złożonych modeli, mam konstruktora z wstrzykiwanym DUŻO usług (jedna do pobrania każdej zależności i lista wszystkich dostępnych wartości na przykład do powiązania z itemsSource). Zastanawiam się, jak obsłużyć wiele takich usług i nadal mam viewmodel, który mogę łatwo testować jednostkowo. Zastanawiam się nad kilkoma rozwiązaniami: 1. Stworzenie singletona usług (IServices) zawierającego wszystkie dostępne usługi jako interfejsy. Przykład: Services.Current.XXXService.Retrieve(), Services.Current.YYYService.Retrieve(). W ten sposób nie mam wielkiego konstruktora z mnóstwem parametrów usług. 2. Stworzenie fasady dla usług używanych przez viewModel i przekazanie tego obiektu w ctor mojego viewmodelu. Ale wtedy będę musiał stworzyć fasadę dla każdego z moich złożonych modeli widokowych, a może to być trochę za dużo... Jak myślisz, jaki jest "właściwy" sposób na zaimplementowanie tego rodzaju architektury?


title: Jak utworzyć jedną wartość indeksu liczb całkowitych na podstawie dwóch liczb całkowitych, gdzie pierwsza jest nieograniczona?

text: Mam dane tabeli zawierające wartość całkowitą X z zakresu od 1.... nieznaną i wartość całkowitą Y z zakresu od 1..9. Dane należy przedstawić w kolejności „X, a następnie Y”. Dla jednego komponentu wizualnego mogę ustawić wiele nazw indeksów: X;Y Ale dla innego komponentu potrzebuję _jednowymiarowej wartości całkowitej_ jako indeksu (porządek sortowania). Gdyby X było ograniczone do górnej granicy powiedzmy 100, jednowymiarowa wartość mogłaby po prostu wynosić X*100 + Y. Gdyby jednowymiarowa wartość mogła być rzeczywista, mogłaby to być X + Y/10. Ale jeśli chcę, aby X był nieograniczony, czy istnieje sposób na obliczenie pojedynczej wartości „indeksowania” liczby całkowitej z X i Y? [Dodano] **Informacje w tle**: Mam składnik Gantt/TreeList, w którym zadania są uporządkowane według liczby całkowitej TaskIndex. Nie musi to być prawdziwe pole bazy danych, mogę uczynić je polem obliczeniowym w bazowym zestawie danych klienta. Moje dane tabeli to m.in. w następujący sposób: ID Baseline ParentID 1 0 0 (zadanie) 5 2 1 (bazowy) 8 1 1 (bazowy) 9 0 0 (zadanie) 12 0 0 (zadanie) 16 1 12 (bazowy) Zadanie 1 ma dwa poziomy bazowe o numerach 1 i 2 (ID 8 i 5) Zadanie 9 nie ma linii bazowych Zadanie 12 ma jedną linię podstawową o numerze 1 (ID 16) Linie bazowe numer 1-9 (zmienna Y z mojego pytania); 0 lub null identyfikują identyfikatory zadań są nieograniczone (zmienna X) Użytkownik bawi się widocznością linii bazowych, np. chce widzieć wszystkie zadania i wszystkie linie bazowe oznaczone jako 1. Odbywa się to poprzez aktualizację filtra w tabeli. W tej chwili muszę ciągle przeliczać TaskIndex po zmianie filtra (przewijanie rekordów z licznikiem). Byłoby miło, gdyby TaskIndex mógł być obliczany w locie dla każdego rekordu, znając tylko dane _ID_ i _Baseline_ w bieżącym rekordzie (pracuję w Delphi, gdzie zestaw danych klienta ma obsługę zdarzeń OnCalcFields, która jest uruchamiana dla każdego rekordu w razie potrzeby) . Nie mam kontroli nad wewnętrznym działaniem komponentu wizualnego.


title: Pytanie inżyniera na poziomie podstawowym dotyczące zarządzania pamięcią

text: Minęło kilka miesięcy, odkąd zacząłem pracę jako programista dla początkujących. Teraz, gdy mam już za sobą kilka krzywych uczenia się (np. język, żargon, składnia VB i C#), zaczynam skupiać się na bardziej ezoterycznych tematach, aby pisać lepsze oprogramowanie. Na proste pytanie, które zadałem koledze z pracy, odpowiedziałem: „Koncentruję się na niewłaściwych rzeczach”. Chociaż szanuję tego współpracownika, nie zgadzam się, że jest to „niewłaściwa rzecz”, na której należy się skupić. Oto kod (w VB), a po nim pytanie. Uwaga: Funkcja GenerateAlert() zwraca liczbę całkowitą. Dim alertID as Integer = GenerateAlert() _errorDictionary.Add(argErrorID, NewErrorInfo(Now(), alertID)) vs... _errorDictionary.Add(argErrorID, New ErrorInfo(Now(), GenerateAlert())) Pierwotnie napisałem to drugie i przepisałem go z „Dim alertID”, aby ktoś inny mógł go łatwiej przeczytać. Ale oto moja troska i pytanie: jeśli ktoś napisze to za pomocą Dim AlertID, w rzeczywistości zajmie to więcej pamięci; skończone, ale więcej, a czy ta metoda powinna być wywoływana wiele razy, czy może prowadzić do problemu? Jak platforma .NET obsłuży ten obiekt AlertID. Poza .NET należy ręcznie usunąć obiekt po użyciu (w pobliżu końca podrzędnego). Chcę mieć pewność, że zostanę doświadczonym programistą, który nie polega tylko na zbieraniu śmieci. Czy nad tym się zastanawiam? Czy skupiam się na niewłaściwych rzeczach?


title: Czy trudno byłoby sprawdzić, czy w przesłanych formularzach (np. komentarzach) nie ma słów/zdań?

text: Ostatnio dużo myślałem o potrzebie lepszego zabezpieczenia formularzy i dobrych sposobach, aby to osiągnąć. Obecnie używamy kodów captcha do wykrywania botów, ale jest to irytujące dla użytkowników i może nie działać w nieskończoność. Myślę, że potrzebujemy bardziej intuicyjnego, organicznego systemu do sprawdzania złych komentarzy/przesłań formularzy kontaktowych. Jedną z opcji, która przyszła mi do głowy, byłaby próba sprawdzania komentarzy pod kątem rzeczy, które oczywiście nie są słowami, oprócz sprawdzania duplikatów komentarzy. Np. gdy spamer na Facebooku, Twitterze lub w sekcji komentarzy nie może po prostu publikować tego samego wiele razy, dodaje gdzieś we wpisie nieczytelne litery i/lub cyfry, aby uczynić go „wyjątkowym”. Gdyby było możliwe odfiltrowanie oczywistego braku tekstu, można by to przezwyciężyć. Gdybyś mógł pójść o krok dalej i odfiltrować posty, które oczywiście zawierają słowa bez powodu, z wyjątkiem tego, aby post był „wyjątkowy”, możesz zmusić spamera/scam artystę do korzystania tylko z powtarzalnych opcji postów, które faktycznie mają sens gramatyczny . Przynajmniej możesz mieć posty oznaczone do uwagi moderatora, jeśli wyglądały podobnie, ale do których dodano losowe śmieci bez powodu. To znacznie zmniejszyłoby możliwość spamowania przez spamera, nawet na wielu kontach. Czy jest możliwe, aby wyświetlić wyniki pól formularza pod kątem losowych kombinacji słów i liczb oraz słów wrzuconych tylko po to, aby post był „unikalny”?


title: Stabilność odwiedzających a instancja elastyczności

text: Pracuję nad aplikacją GUI, która generuje plik konfiguracyjny. Mam hierarchię klas dla modelu konfiguracji i używam drzewa obiektów tej hierarchii w kilku różnych kontekstach. Obecnie używam wzorca Visitor, aby uniknąć zanieczyszczania klas modeli kodem specyficznym dla kontekstu. interface IConfigurationElement { void acceptVisitor(IConfigurationElementVisitor gość); } We wcześniejszej wersji używałem łańcuchów warunków `instanceof` zamiast Visitor. Porównując te dwa podejścia, widzę następujące kompromisy. _Odwiedzający_ * Łatwiej i bezpieczniej jest dodać nowy `IConfigurationElement`. Wystarczy dodać nową deklarację do `IConfigurationElementVisitor`, a kompilator wygeneruje błędy dla wszystkich implementacji odwiedzających. W przypadku łańcuchów `instanceof` musisz zapamiętać wszystkie miejsca, które musisz rozszerzyć o nowy element konfiguracyjny. Zasadniczo „instanceof” narusza zasadę DRY, ponieważ powiela logikę w kilku miejscach. * Wzorzec odwiedzających jest bardziej wydajny niż łańcuch `instancji`warunków _instanceof_ * Wielką zaletą `instanceof` jest jego elastyczność. Na przykład `instanceof` pozwala mi zdefiniować specjalne rozwiązania dla różnych podzbiorów implementacji `IConfigurationElement`, które w niektórych przypadkach muszą być obsługiwane podobnie. Natomiast Visitor za każdym razem zmusza mnie do zaimplementowania metody dla każdej klasy implementacji. Czy istnieje wspólne rozwiązanie tego rodzaju problemu? Czy mogę jakoś dostosować Odwiedzającego, abym mógł podać wspólne rozwiązanie w niektórych przypadkach?


title: „Języki ograniczone” Fernando J. Corbató

text: W swoim przemówieniu przyznanym przez Turinga w 1990 r. Fernando J. Corbató wymienił powody, dla których złożone systemy nieuchronnie zawiodą. W swoim podsumowaniu podaje kilka sugestii dotyczących zmniejszenia prawdopodobieństwa niepowodzenia. Wymienia jedną ideę w następujący sposób: > [U]życie ograniczonych języków do projektowania lub syntezy jest potężną > metodologią. Nie pozwalając programiście lub projektantowi na wyrażanie nieistotnych > pomysłów, dziedzina możliwych błędów staje się znacznie bardziej ograniczona. Co rozumie przez „ograniczony język”? Przez chwilę zastanawiałem się nad programowaniem z ograniczeniami. Jednak programowanie z ograniczeniami polega na ograniczaniu przestrzeni rozwiązań programu. Jest to narzędzie, które wzmacnia programistę. Funkcja, do której odnosi się Corbató, wydaje się być czymś, co w rzeczywistości ogranicza programistę, a przynajmniej sprawia, że jest on bardziej skłonny do pisania bardziej zwięzłego kodu. Moją drugą myślą jest to, że odnosi się do konserwatywnych języków programowania. Corbató otrzymał nagrodę Turinga za pracę wykonaną w latach 60. i 70. XX wieku. W moim rozumieniu miał do czynienia z wieloma kartami dziurkowanymi. Nigdy nie widziałem karty perforowanej, więc na pewno nie wiem, jak ją zaprogramować, ale mogę się domyślać, że programowanie kart perforowanych jest bardzo liberalne. Podejrzewam, że pojęcia sprawdzania typu, analizy statycznej i tak dalej po prostu nie istniały. Czy zatem Corbató może nawiązywać do idei języków, które ograniczają programistę przed popełnianiem głupich błędów? Wydaje się, że tak nie jest. Sprawdzanie bezpieczeństwa i modelowanie danych nie mają nic wspólnego z lapidarnością, o czym zdaje się mówić, gdy wspomina o „nie dopuszczaniu… nieistotnych pomysłów”.


title: Opisowe blokowanie i współbieżność

text: Zastanawiam się, jak można by zaprojektować opisowy model współbieżności dla języka OOP, który pomaga uprościć scenariusze współbieżności dla programistów (nie ma łatwego zadania, współbieżność jest trudna). Czytałem sporo o programowej pamięci transakcyjnej, modelu aktora, niezmienności itp. itp., Ale nie wydają się one również oferować łatwego modelu, i chociaż programowanie funkcjonalne jest świetne w przypadku niektórych scenariuszy współbieżności i równoległych, czasami po prostu trzeba zmutować jakiś stan. Chociaż blokowanie jest uważane przez niektórych przynajmniej za złe, dość łatwo jest to rozumować na podstawowym poziomie (dopóki nie wpadniesz w obszar impasu). odpowiedzialny za własne bezpieczeństwo wątków na podstawie metody/właściwości. Oznacza to, że inne klasy mają dostęp tylko do właściwości i metod, nie mogą tak naprawdę niczego blokować, ani nie powinny. Jednym ze sposobów, aby to ułatwić, byłoby opisywanie metod i właściwości dla współbieżności z ich wcięciem, a nie blokowaniem. Kompilator spróbuje następnie wydedukować z tego najskuteczniejszą blokadę. Więc zakładając atomowość, jak myślisz, jakie byłyby dobre adnotacje? i jakie są potencjalne problemy z tym podejściem, zdaję sobie sprawę, że nie rozwiąże ono wszystkich scenariuszy (takich jak transakcje), ale powinno to pomóc kompilatorowi w egzekwowaniu intencji programistów, a nawet może być w stanie ostrzec o potencjalnych scenariuszach zakleszczenia/wyścigów. Oto niektóre z atrybutów, o których myślałem do tej pory (zauważ również, że żaden z nich nie jest obowiązkowy, ale ściśle kompilator) <property preferences="none|read|write|fair"> <get access="free|exclusive|shared" load="nieznane|wiele|kilka" duration="nieznane|nano|krótkie|długie"/> <set access="bezpłatne|wyłączne|współdzielone|możliwe do aktualizacji" load="nieznane|wiele|kilka" duration="nieznane|nano |brief|long" /> </property> Na przykład, jeśli get and set były ustawione na dostęp współdzielony, możesz skończyć z blokadą odczytu i zapisu. (czy potrzebuję atrybutu do kontrolowania widoczności.) Jeśli czas trwania zapisu jest ustawiony na nano, być może użyje blokady spinlock. Jeśli jest wiele odczytów i mało zapisów, być może kompilator użyłby innej blokady, niż gdyby było wiele zapisów i mało odczytów itd. itd. Metody można łączyć w pary odczyt/zapis podobnie do właściwości (w przypadku, gdy potrzebujesz więcej niż jednego parametru) . W przypadku właściwości liczbowych, które zazwyczaj aktualizują się na podstawie pewnego warunku ich wartości, myślałem również, że zamiast przekazywać tylko nową wartość, można przekazać operator i kwotę. W ten sposób możesz zablokować, obliczyć nową wartość, sprawdzić, czy spełnia jakiś warunek wewnętrzny iw takim przypadku zaktualizować. W każdym razie, mam problemy z wymyśleniem dobrych atrybutów / notacji, które są dość łatwe do zrozumienia dla programisty, a każda pomoc i opinie są głęboko doceniane. Przepraszam za długą tyradę, jak powiedziałem to nie jest łatwy temat :)


title: Formalny termin określający web-ifikację fragmentu istniejącego oprogramowania, programu lub modułu?

text: Istnieje oprogramowanie, które uruchamiamy jako usługa systemu Windows. Obecnie nie jest przeznaczony do przenoszenia dużego obciążenia. Dlatego potrzebujemy, aby ta usługa była hostowana przez http, aby wielu klientów mogło z niej korzystać. Nie jest to cała usługa Windows jako taka, ale niektóre moduły, z których korzysta. Te moduły nie są obecnie zaprojektowane do pracy jako "usługa sieciowa" (w sensie ogólnym). Jakie byłoby oficjalne słowo na to?


title: język oparty na teorii kategorii

text: Może to zabrzmieć naiwnie, ale czy istnieje jakiś język programowania lub jego badania, oparte całkowicie na teorii kategorii? Mam na myśli to w przeciwieństwie do osadzania koncepcji CT jako dodatkowej funkcji (jak w przypadku Haskella lub scala). Czy byłoby to podejście zbyt abstrakcyjne lub zbyt złożone, czy też są jakieś znane powody, które uniemożliwiają lub niepraktyczne? Mam tylko względne zrozumienie teorii związanej z programowaniem, więc proszę o wyjaśnienie, jeśli pytanie w ogóle nie ma sensu EDYTUJ Mam na myśli zdefiniowanie języka, w którym kategorie są pojęciami pierwszej klasy, zamiast powiedzmy typy. Np. haskell jest zdefiniowany w kategoriach _typów_ i _funkcji_ nad nimi. Czy ma sens projektowanie języka, w którym podstawowe byty to _kategorie_ i _strzałki_? Stamtąd mógłbyś, na przykład, zdefiniować operacje algebraiczne na liczbach jako pojedyncze "instancje" odpowiedniej kategorii algebraicznej (pierścień, monoid, grupa...) zamiast zaczynać od standardowych operacji na liczbach całkowitych/zmiennoprzecinkowych i definiować odpowiednią typeklasę kategoryczną. Czy to ma sens?


title: Potrzebujesz danych wejściowych dotyczących architektury, które pomogą w bieżących i przyszłych (nieznanych) wymaganiach :-)

text: **TŁO:** Rozpoczynam projektowanie projektu internetowego przy użyciu asp.net mvc. Będę używał bardzo popularnej architektury, w której mam następujące warstwy: 1. Usługa 2. Biz 3. Dane 4. Domena Warstwa Usługi współdziała z warstwami Biz, Danych i Domeny. Kontrolery mvc będą miały wstrzykniętą do nich warstwę usług przy użyciu struktury DI. Kontrolery będą musiały znać interfejsy warstwy usług i będą odwoływać się do obiektów domeny (POCO). Fronton będzie HTML5 + Javascript. Powiedziano mi, że muszę pamiętać, że musimy udostępnić _części_ tej witryny na urządzenia mobilne. Należy zdefiniować _porcje_ do udostępnienia za pomocą urządzeń mobilnych :-). Podczas renderowania witryny mogę po prostu mieć układ mobilny, który renderuje się na urządzeniu mobilnym. Ale zarząd powiedział mi, że użytkownicy mobilni mogą potrzebować dodatkowych funkcji, których witryna nie udostępnia. Może chcą uzyskać dostęp do funkcji, którą może zapewnić tylko natywna aplikacja mobilna. Hej, nie wymyślam tych wymagań, tak mi powiedziano :-). **MYŚLI:** Moja warstwa usług jest bramą do przechowywania obiektów w mojej bazie danych. W przypadku potencjalnych natywnych urządzeń mobilnych myślałem o użyciu Web API do owijania mojej warstwy usług. To, co chcę teraz zrobić, to skupić się na mojej aplikacji asp.net mvc i martwić się o natywne aplikacje mobilne, gdy te wymagania staną się bardziej zdefiniowane. **PYTANIE:** czy kodowanie warstwy Web API przyniesie teraz jakieś korzyści i czy moje kontrolery mvc będą z niej korzystać? * * * Zalety tworzenia Web API teraz 1. Zostanie zakodowany i gotowy, jeśli / kiedy natywna aplikacja mobilna zostanie uruchomiona. Wady tworzenia Web API teraz 1. Jest to niepotrzebne obciążenie, zwłaszcza jeśli hostuję WebAPI w osobnym procesie lub w innej witrynie niż moja oryginalna witryna asp.net mvc. 2. Technologia jest dość nowa i pojawią się ulepszenia. Jeśli poczekam do później, niektóre problemy zostaną rozwiązane. 3. Kto wie, moi użytkownicy mogą nigdy nie chcieć natywnego urządzenia mobilnego, a funkcja nigdy nie jest używana. 4. Kod staje się bardziej złożony ze względu na konieczność utrzymywania warstwy web api już teraz. Patrzę na to, aby na razie nie martwić się o warstwę Web API i po prostu ją kodować, gdy jest to konieczne. Zazwyczaj nie przejmuję się pisaniem pod kątem funkcjonalności, która nie została jeszcze zdefiniowana. Ale pomyślałem, że nie zaszkodzi zapytać, nigdy nie wiesz, co jakiś genialny, niezależny programista robi na wolności :-).


title: Czy wykorzystanie person w Agile ma jakąkolwiek wartość podczas wdrożenia?

text: Chodzi o wykorzystanie person, przede wszystkim w sferze zwinnego rozwoju. Jaką wartość, jeśli w ogóle, dają persony podczas wdrażania? W modelowaniu zwinnym dyskusja na temat person pozostaje w kontekście badania wymagań. W Wikipedii korzyści są opisane jako „pomagają w burzy mózgów, specyfikacji przypadków użycia i definicji funkcji”. Znam postacie używane podczas pisania historyjek użytkownika, takie jak: > Jako Willow chcę zamówić posiłek łączony, aby dać mi możliwość wyboru > alternatywnych stron. > Jako Xander chcę, aby domyślna strona była wybierana, gdy zamawiam kombi > posiłek. W tych przykładach Willow jest świadomym odżywianiem się użytkownikiem oprogramowania do zamawiania posiłków, a Xander jest głodnym, niecierpliwym użytkownikiem, który myśli, że „fast food powinien być _szybki_”. Przy opracowywaniu tych wymagań pomocne może być uwzględnienie person. Wyobrażam sobie możliwą dyskusję: > Osoba 1: Willow musi mieć więcej opcji niż frytki na posiłek złożony, > inaczej nigdy by nie zamówiła zestawu. > Osoba 2: Ale Xander nie chce przesiewać różnych opcji > przy zamawianiu zestawu! Chce tylko frytki i prawdopodobnie zawsze będzie chciał > frytki. Ta dyskusja mogła stworzyć dwa powyższe wymagania, ale po utworzeniu wymagań, dlaczego oznaczamy każde wymaganie za pomocą persony? Nie kodowałbym inaczej wymagania „strony domyślnej”, wiedząc, że jest on przeznaczony dla Xandera. Jaką wartość ma zachowanie „As Willow” i „As Xander” w stosunku do wymagań po ich napisaniu? Jaką wartość daje persona realizującemu wymaganie?


title: Czy są jakieś twarde dane na temat (wady pracy w domu?

text: Czy są jakieś twarde dane (badania, porównania, nie tylko analiza intuicyjna) na temat zalet i wad pracy w domu? Moi twórcy pytali m.in. praca z domu jeden dzień w tygodniu, szefowi się to nie podoba z różnych powodów, z niektórymi się zgadzam, ale myślę, że niekoniecznie mają one zastosowanie w tym przypadku. Mamy prawdziwe biura (po 2…3 osoby), rozpraszacze są nadal powszechne. IMO byłoby to korzystne dla skupienia, a przy 1 dniu w tygodniu nie byłoby dużej straty w interakcji i komunikacji. Poza tym byłby to świetny dodatek i zaoszczędzenie na dojazdach. * * * Powiązane: Plusy i minusy pracy zdalnej/z domu (ciekawe punkty, ale bez twardych faktów) * * * Wyjaśnienie: to nie moja decyzja, zgadzam się, że istnieją za i przeciw w zależności od okoliczności, a my _są_ naciskają na „po prostu spróbuj”. Zadałem to konkretne pytanie, ponieważ (a) fakty są dobrym dodatkiem do przemyśleń podczas kłótni z szefem inżyniera i (b) my, jako programiści, powinniśmy opierać się na faktach, jak każda szanowana branża.


title: Wzór obiektów rozszerzenia

text: W tym artykule MSDN Magazine Peter Vogel opisuje partten obiektów rozszerzeń. Nie jest jasne, _czy rozszerzenia mogą być później zaimplementowane przez kod klienta rezydujący w osobnym asemblerze_. A jeśli tak, to _jak w takim przypadku rozszerzenie może uzyskać dostęp do prywatnych członków przedłużanego obiektu_? Często muszę ustawić różne poziomy dostępu dla różnych klas. Czasami naprawdę potrzebuję, aby potomkowie nie mieli dostępu do mebmera, ale osobna klasa ma. (stare dobre klasy przyjaciela) Teraz rozwiązuję to w C#, eksponując właściwości wywołania zwrotnego w interfejsie klasy zewnętrznej i ustawiając je metodami prywatnymi. Pozwala to również na dostosowanie dostępu: tylko do odczytu lub do odczytu|zapisu w zależności od pożądanego interfejsu. class Parent { private int foo; public void AcceptExternal(IFoo external) { external.GetFooCallback = () => this.foo; } } interface IFoo { Func<int> GetFooCallback {get;set;} } Innym sposobem jest jawne zaimplementowanie konkretnego interfejsu. Ale podejrzewam, że istnieje więcej podejść. **Aktualizacja 1** Nowy artykuł Piotra wyjaśnia to nieco.


title: Podejście do dostarczania „Logging API”

text: Spotkałem się z pytaniem w wywiadzie .NET. Jako klient potrzebuję LoggingAPI. Jak wygląda podejście do projektowania i rozwoju oraz dostarczania Logging API do klienta? Nie obchodzi mnie WPF ani specyficzny język. Potrzebuję LoggingAPI, które musi rejestrować niektóre dane? jakie jest twoje podejście w dostarczaniu tego samego. Nie odpowiedziałem na to pytanie. Proszę poinstruować, jak postępować, aby odpowiedzieć na tego typu pytania.


title: Jak możemy śledzić, jak dobrze zapobiegamy i unikamy luk w zabezpieczeniach?

text: Łatwo jest śledzić, kiedy naprawiamy luki w zabezpieczeniach istniejącego kodu. Ale aby upewnić się, że cały zespół jest na nogach w zakresie pisania bezpiecznego kodu, chciałbym również śledzić, jak dobrze zapobiegamy i unikamy pisania nowych luk w zabezpieczeniach. Jaki jest właściwy sposób, aby to zmierzyć?


title: Czy są jakieś argumenty, które mogą skłonić wykonawcę do ponownego rozważenia pracy przy stałej cenie?

text: Pracowałem dla wykonawcy, który przynosi dobre projekty, ale wszystkie mają stałą cenę i często są na czas określony. W rezultacie zawsze każe mi sporządzać wycenę luźnych wymagań, co nigdy nie przestaje przynosić napięcia z powodu pełzania funkcji. Twierdzi, że nigdy nie dostałby kontraktu, gdyby nie mógł najpierw uzgodnić ceny ze swoimi klientami, ale jeśli o mnie chodzi, nie chcę przechodzić przez kolejny projekt na tych warunkach. Czy jest jakiś argument, który mógłbym wysunąć, żeby płacił mi za godzinę, czy też powinienem po prostu ssać mniej przy szacowaniu?


title: Czy aplikacje mogą znacząco wpływać na zużycie energii?

text: Czy jest coś, co można zrobić, aby pojedyncza aplikacja ogólnego przeznaczenia wpłynęła na zużycie energii przez urządzenie, na którym działa? Nie wiem, jak optymalizacje poszczególnych aplikacji mogą ogólnie wpływać na zużycie energii, czy ktoś może wyjaśnić, czy różne podejścia do pisania aplikacji wpływają na zużycie energii przez urządzenie, na którym są uruchomione? To znaczy, czy pojedynczy program, który robi dokładnie to samo funkcjonalnie, napisany na różne sposoby, może drastycznie wpływać na zużycie energii przez urządzenie, a nie na to, jak różne niezwiązane programy mogą wpływać na zużycie energii przez urządzenie.


title: RDBMS ten sam typ opcjonalnych danych dla wielu tabel

text: Mam wbudowaną bazę danych (SQLite), która przechowuje informacje o zdarzeniach i odsłonach, jej celem jest śledzenie podróży użytkownika w mojej aplikacji. Muszę zapewnić obsługę opcjonalnych właściwości niestandardowych w moich wydarzeniach i wyświetleniach stron. W kodzie nie jest to problem, jednak jestem rozdarty między dwoma rozwiązaniami do przechowywania tych informacji. Tak więc mam tabele Events i PageViews, moją pierwszą opcją utrwalania opcjonalnych właściwości niestandardowych jest posiadanie tabeli EventsCustomProperties, która ma tylko kolumnę nazwy i wartości oraz odwołanie (klucz obcy) do zdarzenia. W tym rozwiązaniu miałbym również PageViewCustomProperties o takiej samej strukturze. Problem, jaki mam z tym, polega na tym, że dwie tabele są identyczne, poza ich relacjami z innymi tabelami. W innym moim rozwiązaniu miałbym jedną tabelę CustomProperties, a oprócz nazwy, wartości i klucza relacji miałabym również kolumnę typu, której powinienem użyć ręcznie w kodzie, aby zmapować identyfikator relacji na zdarzenie lub widok strony . W tym rozwiązaniu faktyczne użycie kluczy obcych jest zbędne. Mój dylemat polega na tym, że w pierwszym rozwiązaniu przestrzegam jednej reguły normalizacyjnej powtarzania grup danych, w drugim łamię inną zasadę, chociaż nie mogę sobie przypomnieć nazwy reguły. Wygląda więc na to, że cokolwiek zrobię, złamię zasady. Czy ktoś może zaproponować lepszy sposób lub preferencję dla pierwszego lub drugiego rozwiązania.


title: Czy powinienem podzielić klasę Pythona z wieloma metodami na wiele klas?

text: Mam klasę, która będzie miała ponad ~30 metod. Wszystkie mają sens należeć do tej samej klasy, ponieważ wymagają dostępu do tych samych danych. Jednak czy ma sens dzielenie dużej klasy na kilka mniejszych klas abstrakcyjnych (według funkcjonalności, typu, użycia itp.) i rozszerzenie głównej klasy (tj. wielokrotne dziedziczenie) ze wszystkich mniejszych klas?