title: Minimalne odświeżanie (F5) Tworzenie aplikacji internetowych

text: Chociaż pytania podobne do tego zostały już zadane i być może mogę sobie na nie odpowiedzieć, czytając już zamieszczone materiały. Wciąż kontynuuję to pytanie, ponieważ czuję, że ma elementy nowego smaku i chciałbym poznać opinie innych na temat tego, jak sobie z tym poradzić. Stworzyłem kilka aplikacji internetowych o różnej skali. W niektórych byłem tylko Deweloperem, w innych kierowałem małymi zespołami, aw innym byłem częścią dużego zespołu. Większość z nich została opracowana przy użyciu PHP. Jeden z nich używał Kohana Framework, pozostałe zostały opracowane przy użyciu Raw PHP. Główną trudnością, z którą się spotkałem w odniesieniu do szybkiego rozwoju, było to, że za każdym razem, gdy dokonywano małej zmiany, aby naprawić błąd lub zmodyfikować funkcję, musiałem odświeżyć przeglądarkę internetową, przejść przez kilka stron, aż dotarłem do strony zawierającej poprawkę. Chciałbym wiedzieć, jakie powinno być podejście programistyczne, abym mógł przetestować swój kod bez konieczności, a przynajmniej zminimalizować liczbę odświeżeń potrzebnych do przetestowania zmian w kodzie. Chociaż koncepcje mogą mieć zastosowanie do rozwoju dowolnej natury, w przypadku tego pytania pozostańmy przy PHP i jego frameworku.


title: Korzyści z używania RAII w C++

text: Załóżmy, że jestem nauczycielem i chcę wyjaśnić moim uczniom, jakie są korzyści z używania RAII w C++: potrzebuję bardzo dobrego przykładu, pełnego szczegółów, ale jest to łatwe do zrozumienia. Którego podejścia byś użył?


title: Jak edukujesz swoich klientów?

text: Klienci potrzebują edukacji, ponieważ myślą inaczej. Klienci myślą: * zmiany nie są problemem w dowolnym momencie projektu * szczegóły nie są ważne (wyjątki jeszcze mniej) * czas nie kosztuje (mają ustaloną stałą cenę) * jedno zdanie w specyfikacji można rozszerzyć/przeczytać swobodnie dopasowywać się do rzeczywistych potrzeb - i nie ma to wpływu na umowę. (tu często widzimy dyskusję "zdroworozsądkową" - przykład: "Oczywiście potrzebujemy ekranu zarządzania fakturami, kiedy mówimy o zarządzaniu księgowością - to jest zdrowy rozsądek!") * lista jest długa... Główny problem polega na tym, że klient (nieważne czy zewnętrzny czy wewnętrzny/dział) nie chce lub nie może zrozumieć. Wiele lat zajęło mi zrozumienie procesu tworzenia oprogramowania i wciąż się uczę, więc jak to zrobić w ciągu zaledwie kilku miesięcy. Jakie masz doświadczenie, jakie jest najlepsze podejście do edukacji klientów?


title: Play czy Lift: który z nich jest bardziej wyraźny?

text: Zamierzam zbadać tworzenie stron internetowych za pomocą Scali, a wybór jest między nauką Lift a Play: prawdopodobnie nie będę miał wystarczająco dużo czasu, aby spróbować obu, przynajmniej na początku. Teraz wiele porównań między tymi dwoma jest dostępnych w Internecie, ale chciałbym wiedzieć, jak się one porównują pod względem bycia jednoznacznym i angażującym mniej magii. Pozwólcie, że wyjaśnię, co mam na myśli na przykładzie. Używałem w różnym stopniu CakePHP, symfony2, Django i Grails. Czuję bardzo wyraźne rozróżnienie pomiędzy Django i symfony2, które bardzo wyraźnie mówią o tym, co robisz, a Grails i CakePHP, które starają się jak najlepiej odgadnąć, co próbujesz osiągnąć i często czują się „magicznie”. Podam kilka przykładów porównujących Django i Grails. * W Django widoki to funkcje, które przyjmują żądanie jako dane wejściowe i zwracają odpowiedź. Możesz jawnie utworzyć instancję `HttpResponse` i wypełnić jej treść ciągiem lub użyć funkcji skrótów, aby wykorzystać system szablonów. W każdym razie wartość zwracana z twojego widoku zawsze ma ten sam typ. Natomiast metoda `render` z Grails jest wysoce polimorficzna. Możesz wrzucić do niego kontekst, a on spróbuje wyrenderować szablon, który zostanie znaleziony zgodnie z konwencją przy użyciu tego kontekstu. Możesz też przekazać mu parę ścieżek szablonu i kontekstu i to też będzie działać. Albo sznurek. Lub XML. Grails bardzo stara się zrozumieć, co zwracasz z kontrolera. * W Django ORM każda klasa modelu ma atrybut statyczny reprezentujący menedżera tej klasy. Ten menedżer udostępnia płynny interfejs do budowania zestawów zapytań. W Grails możesz mieć podobną funkcjonalność, tworząc oddzielne kryteria. Jednak najczęstszym sposobem zapytania o obiekty wydaje się być użycie metod generowanych w czasie wykonywania, takich jak `FindUserByEmailNotNull` lub `FindPostByDateGreaterThan`. Nie pójdę dalej, ale chodzi mi o to, że we frameworkach typu Django masz kontrolę nad całym procesem żądania/odpowiedzi, podczas gdy we frameworkach Grails-podobnych czuję, że muszę tylko wyczuć puste miejsca i framework sobie poradzi reszta przepływu dla mnie. To nie jest krytykowanie Grails czy CakePHP; preferowany typ jest głównie kwestią preferencji. W rzeczywistości podobają mi się niektóre aspekty Grails, ale czuję się bardziej komfortowo z frameworkiem, który robi dla mnie mniej. Wracając do sedna pytania: który z Play and Lift jest bardziej jednoznaczny na temat tego, co robisz, a który stara się bardziej uprościć to, co masz do czynienia z warstwą „magii”?


title: Serwery nasłuchiwania gier wieloosobowych: zapewnienie integralności

text: Tworzę prostą grę wieloosobową w Tic Tac Toe w Pythonie przy użyciu Bridge (jest to usługa RPC zbudowana na kolejce wiadomości - RabbitMQ) i chciałbym ją ustrukturyzować tak, aby klient i serwer były tylko jednym plikiem. Gdy użytkownik uruchomi grę, może wybrać, czy chce stworzyć grę, czy dołączyć do istniejącej gry. Tak więc, gdy użytkownik tworzy grę, program stworzy ją, a także dołączy do niego jako gracz w grze. Jest to w zasadzie serwer nasłuchujący (w przeciwieństwie do serwera dedykowanego) - koncepcja znana w grach wieloosobowych. Próbując to zrobić, natknąłem się na naprawdę interesujące pytanie - **jak mogę się upewnić, że gracz hostujący grę nie manipuluje przy niej (lub przynajmniej utrudnia)**? Gracz hostujący grę ma dostęp do tablicy służącej do przechowywania planszy itp., które muszą być przechowywane w pamięci wirtualnej procesu, więc wydaje się to niemożliwe. Z drugiej strony wiele gier wieloosobowych wykorzystuje ten model do gier LAN.


title: Rekurencja – czy to „dziel i rządź” czy „ponowne użycie kodu”

text: _**Rekurencja_** \-- jak wszyscy wiemy – jest jednym z tych problemów – że kręcenie się wokół głowy jest jak osiągnięcie „kamienia milowego” w Twojej podróży programistycznej. Ale jeśli chodzi o rzeczywiste użycie go w rzeczywistych problemach – wiedza o mechanice rekurencji nie wystarczy – należy również zrozumieć naturę problemów, w których rekurencja jest najbardziej odpowiednim rozwiązaniem. Więc moje pytanie brzmi: * jakie są "wzorce problemów", które wymagają rozwiązania rekurencji * czy rekurencja jest formą strategii "dziel i rządź" lub formą "ponownego użycia kodu" - lub jest projektem wzór sam w sobie * czy możesz podać przykład rzeczywistego problemu, w którym rekurencja przychodzi na myśl jako natychmiastowe rozwiązanie _**\-- UPDATE --_** wiele odpowiedzi odnosi się do „prawdziwych problemów” jako przemierzanie drzewa, silnia itp. Wolałbym "PRAWDZIWE prawdziwe problemy" -- podam przykład... Mieliśmy DUŻY plik tekstu (około 30 MB tekstu jako połączonej listy `struktur`) , i musieliśmy zrobić indeks do wyszukiwania pełnotekstowego. Musieliśmy zachować cały indeks w pamięci i ponownie indeksować tekst co 10 minut. Co 10 minut porównywaliśmy cały tekst (dwie połączone listy, wiersz po wierszu) z nowo wygenerowanym fragmentem tekstu — aby zobaczyć, który wiersz został zmieniony — a następnie ponownie indeksowaliśmy tylko ten wiersz — w ten sposób moglibyśmy uniknąć konieczności ponownego indeksowania CAŁEGO tekstu. Pamiętaj - musieliśmy znaleźć punkty różnicowe między dwiema połączonymi listami o rozmiarze 30 MB. Jeden z moich kolegów wymyślił fantastyczny program, który używał CIĘŻKIEJ rekurencji do porównywania linii — a następnie zebrał pozycje, w których uchwyty różniły się w tablicy — tak, wiem, że to brzmi zagadkowo — jak rekurencja może tu pomóc — ale to zrobił. Chodzi o to - jak mógł zobaczyć, że ten problem można mądrze rozwiązać przy intensywnym użyciu rekurencji?


title: DDD + POCO czy to ma sens?

text: DDD promuje bogate modele domen z zachowaniem w nim, POCO nagie obiekty bez żadnych obiektów. **Czy można je połączyć?** Mam rozwiązanie wielowarstwowe * Rdzeń - posiada POCO Entieties, interfejsy dla repozytoriów i usług * Dane - Implementacje repozytoriów * Usługa - Implementacje usług * Infra - IoC Locator/registrar, viewmodels , (może być scalony z webui) * WebUI - warstwa prezentacji asp.net mvc Mówiłem, że używam DDD, ale ostatnio powiedziano mi, że nie, bo moje Encje nie zachowują się, ** czy to prawda ?**


title: Więc opanowałem programowanie aplikacji na iOS, ale jak zostać świetnym programistą?

text: Spędziłem ostatnie 2 lata ucząc się i chodząc na zajęcia z programowania obiektowego. Zrobiłem całkiem sporo programowania w Javie, a ostatnio spędzam dużo czasu na robieniu Object-C. Naprawdę lubię programować, ale zauważyłem (z pewną frustracją) to, że nie jestem niesamowity w znajdowaniu eleganckich rozwiązań problemów. Zaczynam zauważać, że samo rozwiązanie problemu nie wystarczy, ale sposób, w jaki podchodzisz i wdrażasz rozwiązanie, mówi wiele o Tobie jako deweloperze oraz głębi Twojej wiedzy i zrozumienia. Ponieważ chcę zrobić karierę z rozwoju iOS (nadal jestem na studiach), chcę mieć pewność, że robię wszystko, co w mojej mocy, aby nauczyć się elegancji, a nie po prostu to robić. Przykład: w przypadku jednego z moich pierwszych projektów programistycznych dla szkoły (to było dawno temu!) musieliśmy zapełnić tablice tonami informacji. Przeszedłem i dodałem każdy element wiersz po wierszu, po prostu kodując indeks! Kiedy przyszedł TA, śmiał się ze mnie i pytał: „Dlaczego po prostu nie użyłeś for-loop?” i pomyślałem sobie, no kogo to obchodzi? To działa, prawda? **Moje pytanie do twórców iOS:** Jakie rzeczy mogę przestudiować/spróbować wdrożyć, aby zwiększyć elegancję moich nawyków projektowych? Jakie są przykłady rzeczy, które są często wykonywane w świecie tworzenia aplikacji przez nowicjuszy, których po prostu nie powinno się robić? Zamiast po prostu rzucać razem szybkie i brudne hackowanie rozwiązania, chcę być w stanie konsekwentnie wymyślać niesamowite sposoby rozwiązywania problemów! I zdałem sobie sprawę, że tego typu rozwiązania nie zawsze przychodzą mi szybko. Czy ta umiejętność jest czymś, co można zdobyć tylko poprzez doświadczenie i robienie tego wiele razy źle, zanim zdasz sobie sprawę, że istnieje lepszy sposób? Czy są jakieś obszary, które mógłbyś polecić, które staram się omówić i zrozumieć? Chociaż cieszę się, że mogę nadążyć za wieloma pytaniami q publikowanymi na takich stronach, jestem sfrustrowany, gdy widzę niektóre, które są po prostu w zupełnie innym wszechświecie! Chcę wypełnić tę lukę, więc rzucam to wszystkim, którzy mogą być zainteresowani/w stanie pomóc. Dziękuję!!


title: Telefony Java: Jak skonfigurować JTAPI?

text: Chcę użyć JTAPI (1.4 - najnowszy) do stworzenia aplikacji, która będzie dzwonić na mój telefon, kiedy tylko będę tego potrzebować. Pobrałem JSR043 (specyfikacja JTAPI) i czytałem dokumentację API i wydaje się to całkiem proste w odniesieniu do _jak kodować JTAPI_. Jednak poważnie wątpię, czy uzyskanie aplikacji Java na moim laptopie, aby zadzwonić na mój telefon komórkowy, nie wymaga zewnętrznego lub pośredniego dostawcy usług i ewentualnie innych podmiotów/konfiguracji. Pytam więc: oprócz używania JTAPI w moim kodzie Java, co muszę zainstalować lub skonfigurować, aby mieć aplikację Java, która dzwoni na mój telefon? Z góry dziękuję!


title: Czy są jakieś specjalne zalety SQL Server z Visual Studio?

text: Widziałem forum dba.StackExchange, ale to pytanie dotyczy również programu Visual Studio, dlatego chciałem umieścić to pytanie tutaj. Jedna z moich starych aplikacji została zbudowana na zapleczu VS-2008 i MySQL. Po trzech latach nie mam z tym większych problemów, a wydajność bazy danych jest również dobra. Skaluję tę aplikację do aplikacji WPF i chcę wiedzieć, czy SQL Server ma jakieś dodatkowe zalety, gdy jest używany z VS-2010, poza tym, że pochodzi od firmy Microsoft w porównaniu z MySQL? W większości scenariuszy zauważam, że wykonywanie zapytań w MySQL jest szybsze w porównaniu do SQL Server.


title: Aplikacja internetowa niezależna od oprogramowania serwera WWW

text: # Scenariusz Nie spotkałem się wcześniej z tym wymogiem, więc nie jestem pewny swojego rozwiązania. Nasz zespół opracował plan zaprojektowania aplikacji internetowej z wykorzystaniem podstawowego stosu HAT dla projektu z 4 miesięcznym czasem rozwoju. Zaprezentowaliśmy go klientowi, który dodał dwa duże nowe wymagania. Wymagania były następujące: * Aplikacja musi działać na dowolnym serwerze WWW (IIS, Apache, Nginx, Lighttpd, itp...) * Aplikacja musi być w stanie pracować z dowolną bazą danych (MySQL, MongoDB, itp...) Jego rozumowanie jest takie, że nie ma kontroli nad środowiskami, w których aplikacja internetowa zostanie zainstalowana. Planuje odsprzedać nasze rozwiązanie innym klientom. Odepchnęliśmy klienta mówiąc, że wydłużyłoby to czas rozwoju, ale on już zobowiązał się do swoich klientów. Powiedział jednak, że jest gotów zainwestować w to tyle pieniędzy, aby to zrobić. ## Możliwe rozwiązanie? Jedynym rozwiązaniem, o którym mogłem pomyśleć, było zbudowanie aplikacji w skrypcie Perl CGI, ponieważ wydaje się to najbardziej uniwersalne, a następnie posiadanie różnych adapterów baz danych do podłączenia do ORM, który jest dostosowywany za pomocą pliku konfiguracyjnego. ## Pytanie * Jakie są alternatywy dla tworzenia aplikacji internetowej, w której nie mamy kontroli nad tym, jakie moduły itp. są zainstalowane na serwerze WWW? * Czy to w ogóle możliwe?


title: Przepływ pracy kontroli wersji dla oprogramowania częściowo wykonywanego na zamówienie

text: Posiadam aplikację webową (PHP, MySQL), dla której oferuję usługę szytą na miarę. Oznacza to, że możesz kupić główny produkt, który jest dość obszerny, a następnie dostosować go do swoich potrzeb. Może to obejmować nowe funkcje, fundamentalne dostosowanie sposobu działania istniejących funkcji, wyłączanie funkcji, wprowadzanie zmian, które wymagają innego schematu bazy danych itp. Chcę znaleźć rozsądny sposób zarządzania dużą liczbą różnych wydań produktu w kontroli wersji, tak aby Mogę wprowadzać zmiany w rdzeniu i wyciągać zmiany w wydaniach zgodnie z wymaganiami, a także niezależnie wprowadzać zmiany w wydaniu. Czasami mogę chcieć przenieść zmianę z wydania z powrotem do rdzenia. Moim instynktem było używać Gita i mieć wydania jako gałęzie. Możliwe jest wybranie konkretnych zatwierdzeń, które zostaną scalone z powrotem do bagażnika, więc myślę, że to może zadziałać. Jednak wszędzie, gdzie zajrzałem, sugeruje się, że złym pomysłem jest posiadanie na stałe oddzielnego kodu w oddziałach. Sugeruje się użycie jednej bazy kodu i skonfigurowanie wszystkich różnic w funkcjach, tak aby każde wydanie mogło zachowywać się oddzielnie. Brzmi to dobrze w przypadku oprogramowania, które jest sprzedawane w wielu edycjach, które mają włączone różne funkcje, ale myślę, że byłby to kompletny bałagan dla mojego oprogramowania. Szukam dobrego przepływu pracy programistycznej dla takiej konfiguracji, która może, ale nie musi, być oparta na kontroli wersji.


Jakie jest najlepsze podejście do tworzenia aplikacji z jednokrotnym logowaniem, które są lekkie? Przez lekki mam na myśli niezbyt dużo javascriptu. Wiem, że stackexchange używa jednokrotnego logowania. Czy w zasadzie dane logowania są przechowywane jako plik cookie? Lub kombinację adresu IP i innych szczegółowych informacji o zalogowanym użytkowniku?


title: Czy nadal możemy uznać, że prawo Moore'a nadal jest prawdziwe w odniesieniu do konsekwencji dla szybkości procesora?

text: Prawo Moore'a jest prawem empirycznym iw uproszczeniu mówi, że liczba tranzystorów w układach scalonych podwaja się mniej więcej co dwa lata. Jedną z konsekwencji prawa Moore'a jest to, że wydajność procesora podwaja się co 18 miesięcy. Widziałem 'Dlaczego prawo Moore'a jest postrzegane jako prawda absolutna?' i choć ciekawy nie odpowiada na moje pytanie. Obecnie częściowo osiągamy to poprzez produkcję wielordzeniowych procesorów. **Czy nadal możemy brać pod uwagę, że szybkość procesora podwaja się co 18 miesięcy?** Wielordzeniowe procesory można traktować jak przetwarzanie rozproszone. „Stare dobre” jednowątkowe oprogramowanie/algorytm nie będzie w stanie w pełni wykorzystać możliwości takiego procesora jak wcześniej i nie jest prawdą, że wszystkie algorytmy dają się sparaliżować wraz ze wzrostem prędkości.


title: Kryteria wyboru wartości limitu czasu?

text: Sytuacja: oprogramowanie odczytuje ramki danych z pliku w osobnym wątku i umieszcza je w kolejce, opróżniane przez inny wątek. Ten drugi wątek okresowo sprawdza kolejkę i kończy się niepowodzeniem, wyświetlając komunikat o błędzie informujący o przekroczeniu limitu czasu odczytu, jeśli żadne dane nie są dostępne w określonym czasie. Początkowo ten limit czasu był ustawiony na 200mSec. Nie było jednak żadnego uzasadnienia za tą stałą, ale działało to dobrze. Zmierzyliśmy na kilku maszynach i dla dużych ramek danych, większych niż te, które byłyby używane przez klientów, odczyt trwał około 20 ms bez żadnego innego obciążenia maszyny. Jednak jeden klient otrzymuje od czasu do czasu błędy przekroczenia limitu czasu (przy drugiej próbie wszystko jest w porządku, prawdopodobnie plik jest w pamięci podręcznej lub skaner antywirusowy pozostawia go w spokoju). Programiści mówią „no tak, ale maszyna tego klienta jest pełna cruftów, skanerów antywirusowych, tony niepotrzebnych procesów w tle itp”. Oczywiście klient mówi „hej, to powinno po prostu działać, nieprawdaż”? Chociaż programiści mają rację, ponieważ oprogramowanie jest wystarczająco ciężkie, aby potwierdzić potrzebę dedykowanej maszyny, nie uszczęśliwia to klienta. Na przykład zwiększenie limitu czasu do 2 sekund rozwiązuje problem. Ale chciałbym teraz podjąć właściwą decyzję, zamiast po prostu losowo wybrać jakąś magiczną stałą, która prawdopodobnie jest w porządku w 99% przypadków. Jakie kryteria należy do tego zastosować? Moglibyśmy po prostu wybrać dużą liczbę, ale to źle. (a potem otrzymujemy program, który w okropny sposób zawiesza się na przykład podczas próby odczytu z odłączonego dysku, podczas gdy wolelibyśmy, aby od razu wyświetlał błąd). Lub możemy ustawić wartość limitu czasu jako ustawienie użytkownika, ale wtedy musimy to wyraźnie udokumentować, a nawet wtedy nie wszyscy klienci są wystarczająco zaznajomieni z technologią, aby naprawdę zrozumieć, co robi. Lub możemy spróbować poczekać, aż inny klient zgłosi przekroczenie limitu czasu i ponownie zwiększyć wartość. I ponownie. Dopóki nie znajdziemy czegoś ok dla 99,99% przypadków.. Jakieś dobre praktyki dla tego typu sytuacji?


title: DDD: Samodzielne opracowywanie modelu domeny

text: W przykładach DDD wydaje się, że powszechną metodą opracowywania modelu domeny jest spotkanie z ekspertami dziedzinowymi i iteracja nad wersjami modelu, powiedzmy na tablicy, nieustanne modyfikowanie go i zmienianie, dopóki nie zostanie uzgodnione, jak wygląda model. W swoim projekcie spędziłem kilka dni z ekspertem domeny, omawiając domenę, a teraz chcę się zamknąć i stworzyć wersję roboczą modelu w oparciu o moje zrozumienie, zamiast tworzyć model wspólnie z ekspertem domeny. Mógłby go wtedy przejrzeć, a ja mogłem go aktualizować zgodnie z naszymi późniejszymi dyskusjami. Czy ktoś inny pracował w ten sposób, czy ktoś uważa, że to dobry/zły pomysł? Myślę, że może po prostu łatwiej mi myśleć kreatywnie, kiedy jestem sam.


title: Problem w pracy z async i czekaj?

text: Próbuję przesłać pliki do usługi Azure Blob Storage i po pomyślnym przesłaniu dodaję nazwę pliku do listy w celu dalszej operacji. Kiedy robię synchroniczny, działa dobrze, ale kiedy robię asynchroniczny, wystąpił błąd. Błąd: kolekcja została zmodyfikowana; operacja wyliczenia może nie zostać wykonana. foreach(plik var w plikach) { // ..... await blockBlob.UploadFromStreamAsync(fs); listOfMovedLabelFiles.Add(NazwaPliku); } if (listOfMovedLabelFiles.Count > 0) // punkt błędu { // mój kod do dalszej operacji } Czy jest jakiś sposób, aby poczekać, aż wszystkie operacje asynchroniczne zostaną zakończone.


title: Czy dodanie wsparcia dla innego systemu operacyjnego to podrzędna wersja czy łatka?

text: Załóżmy, że w moim projekcie używam wersjonowania semantycznego. Rozwijam go pod FooOS, ale język wykorzystuje maszynę wirtualną (opartą na języku interpretowanym lub kodzie bajtowym), więc każdy system operacyjny może go uruchomić. Chodzi o to, że projekt silnie współdziała z rzeczami zarządzanymi przez system operacyjny (np. potokami, procesami, systemem plików), więc jeśli spróbujesz uruchomić go w innym systemie operacyjnym - BarOS - robi się tak wadliwy i tak wiele rzeczy nie działa, że projekt jest praktycznie bezużyteczny. Teraz w pewnym momencie chcę, aby mój projekt działał dla BarOS i chcę wydać wersję tylko po to, aby dodać tę obsługę. Pytanie brzmi – czy to się liczy jako _wersja pomocnicza_ czy jako _poprawka_? Wygląda na to, że to łatka: * Wszystko, co robię, to naprawiam wszystkie błędy, które pojawiają się podczas uruchamiania projektu pod BarOS. * Użytkownicy mojego projektu nie powinni zauważyć żadnych zmian w funkcjonalności, ponieważ przede wszystkim używają FooOS. * Dla użytkowników BarOS cały mój projekt jest nowy - ale zdobywanie nowych użytkowników nie powinno skutkować przyrostem wersji. Ale nawet przy całym tym rozumowaniu nie wydaje się słuszne określanie wydania tak dużego, jak wsparcie dla nowego systemu operacyjnego jako łatki...


title: Definiowanie kodów błędów

text: Projektujemy framework obsługi błędów dla biblioteki kryptograficznej napisanej w języku C. Podejście, które stosujemy, polega na tym, że stosunkowo niewiele błędów jest propagowanych z powrotem do użytkownika, ponieważ w większości przypadków nie może on nic z nimi zrobić (warty uwagi wyjątek: błędy walidacji parametrów. Oczywiście informujemy użytkownika, jeśli połączenie się powiodło. Tworzymy również wpisy w dzienniku do badania błędów. ) kod błędu. Ponadto, z doświadczenia wiemy, że znaczna część warunków błędu, które wymagają kodów błędów, dotyczy bardzo wąskich obszarów kodu, często zdarza się, że określony błąd jest zwracany tylko z (lub ustawiany przez) jedną funkcję. Dlatego chcielibyśmy zdefiniować kody błędów na możliwie najniższym poziomie. Na przykład, jeśli tylko jedna funkcja może zwrócić/ustawić konkretny kod błędu, zdefiniujemy ten kod w pliku .h, w którym zadeklarowany jest prototyp funkcji. Jednak w takim przypadku możemy otrzymać konflikty kodów błędów - ta sama wartość kodu błędu dla różnych błędów. Czy ktoś może zaproponować eleganckie podejście, aby uniknąć takich konfliktów? A przynajmniej zautomatyzowany mechanizm sprawdzania takich konfliktów (który można następnie naprawić ręcznie)?


title: Radzenie sobie z API i komunikatami o błędach

text: Jesteśmy w trakcie konstruowania API (przy użyciu WCF). Do tej pory zauważyłem 2 sposoby, w których metody mogą się nie udać z powodu problemów z przesłanymi parametrami. 1. błędny format, na przykład mamy parametr daty w postaci ciągu, który powinien mieć określony format, jeśli jest w innym formacie, metoda nie może być kontynuowana. 2. jeśli rolą metody jest wykonanie czegoś zidentyfikowanego przez identyfikator, ale ten identyfikator nie istnieje w aplikacji (DB) Najpierw myśleliśmy o wyrzuceniu wyjątku, ale teraz zdaję sobie sprawę, że nie jest to naprawdę „wyjątkowa” sytuacja, te takie rzeczy są dość powszechne. W tej chwili zajmujemy się tym w następujący sposób: Mamy klasę abstrakcyjną, która nazywa się APIResponse. ma zmienną logiczną sukcesu i tablicę komunikatów dla klienta API. Każda grupa metod ma odpowiednią implementację tej klasy i to będzie zwrócony obiekt. **czy takie podejście jest w porządku?**


title: Czy istnieje limit liczby stałych globalnych używanych, zanim aplikacja zostanie uznana za złe programowanie?

text: Zasadniczo tworzę strony internetowe, niektóre duże z wieloma operacjami crud itp. Jednak nabrałem zwyczaju przechowywania danych wielokrotnego użytku jako stałej w moich aplikacjach PHP. Obecnie mam 44 stałe zdefiniowane w jednej aplikacji. Są to: * Konfiguracja bazy danych * Strona główna dla administratora i gościa * Nazwy slug URL * deklarowanie trybu rozwoju * deklarowanie trybu konserwacji * kilka skrótów do katalogów (zamiast pisania /admin/templates/images źle używam const ADM_IMAGES ) * nazwy sesji * nazwy plików cookie * losowe rzeczy, takie jak MAX_IMAGE_SIZE, THUMB_SIZE i MAX_LOGIN_ATTEMPTS Nie mam żadnych problemów z używaniem tych wszystkich stałych... Posiadanie tych wszystkich w mojej aplikacji jest trochę pomocne. Chciałem tylko wiedzieć, czy używanie ich w nadmiarze jest „dobrą praktyką”. Jeśli nie, w jaki inny sposób te dane mogą być enkapsulowane, aby były przydatne I wystarczająco łatwe, aby można je było uzyskać w mojej aplikacji? Pamiętając również o czytelności.


title: Jak wyjaśnić, że wielkość próbki nie wpływa na długość projektu?

text: Mamy duże projekty korporacyjne, które zwykle obejmują kopiowanie danych ze źródłowej bazy danych do docelowej bazy danych, a następnie konfigurowanie szeregu dodatkowych aplikacji, które synchronizują te dane itp. Ostatni projekt zawierał 250 000 pozycji (wierszy danych). Następny projekt będzie zawierał tylko 4000 pozycji. Menedżerowie projektów / ludzie biznesu uważają, że projekt powinien być ukończony w 1/10 czasu, ponieważ jest to tylko ułamek wielkości ostatniego projektu. Jaka jest dobra **analogia**, którą mogę wykorzystać do wyjaśnienia, że napisanie kodu do przesyłania danych z jednego systemu do drugiego zajmuje tyle samo niezależnie od ilości pozycji - napisanie go dla 1 pozycji lub dla 100 000 000 zajmie mniej więcej tyle samo czas z punktu widzenia programowania.


title: Alternatywne metody utrzymywania źródła JavaScript

text: Szukam innych opcji utrzymania mojej osobistej przestrzeni nazw JavaScript. Problem mam sprowadza kod _Organizacja_ Vs. _Wydajność_. Chciałbym po prostu móc podzielić główne sekcje mojego kodu na bardziej „tradycyjny” styl. Ale nie zrobiłem tego, ponieważ gdybym to zrobił, prawdopodobnie zwiększyłbym czterokrotnie liczbę wysyłanych żądań HTTP. Zasadniczo dołączam dwa różne pliki js. `jQuery/jQueryUI/my namespace` w jednym i moja implementacja w drugim. Świetne dla wydajności w moich aplikacjach internetowych... ale patrzenie na moje źródło JavaScript sprawia, że jestem przerażony, zdezorientowany i przerażony jednocześnie. Czego mi tu brakuje?


title: Aplikacja Rails - jak zoptymalizować/zredukować wywołania bazy danych podczas iteracji po kolekcji

text: Jaki jest najlepszy sposób na optymalizację aplikacji Rails, w której musisz pobrać informacje z bazy danych dla kolekcji elementów? Na przykład, jeśli buduję system forum online... miałbym kilka `postów`, a posty miałyby_wiele `:recommendations` oraz `:comments` i `:favorites`. Kiedy wyświetlam posty w moim widoku, może być konieczne wyświetlenie tych informacji – na przykład liczby komentarzy i tego, czy mój obecny użytkownik dodał post do ulubionych/polecał. Bawiłem się tym i wygląda na to, że wykonywana jest ogromna liczba zapytań do bazy danych! Najpierw chwytam moją kolekcję postów - potem, powtarzając każdy z nich, przechodzę do tabeli komentarzy, tabeli ulubionych itd., aby uzyskać liczby lub sprawdzić, czy istnieją rekordy dla tego konkretnego posta. Więc dla każdego posta, który mam, wykonuję 3 oddzielne zapytania! **Czy istnieje wydajniejszy sposób na uzyskanie tych danych, czy też mnóstwo takich zapytań jest normalnych w scenariuszu, który opisuję?**


title: Obsługa wyjątków w aplikacji internetowej Java

text: Wiem, że obsługa wyjątków to temat często poruszany w świecie Javy. Przeczytałem tutaj kilka wątków i tak samo. http://stackoverflow.com/questions/2169339/exception-handling-in-a-java-web- application Identyfikuję się z zasadami takimi jak _Nie pomijaj ani nie ignoruj wyjątków_ , _Nie łap wyjątków najwyższego poziomu_ i unikaj antywzorce, takie jak _Log i Throw_. http://today.java.net/article/2006/04/04/exception-handling- antipatterns#throwingException http://www.onjava.com/pub/a/onjava/2003/11/19/exceptions.html ?page=2 **Pytanie nr 1, czy istnieje inny standard praktyki, jeśli chodzi o aplikacje internetowe?** Na przykład, czy jest to uzasadniony przypadek użycia, aby złapać `wyjątek` w celu logowania, a następnie wyrzucić go na stos ? function void xyz() wyrzuca wyjątek { try { } catch (wyjątek e) { LOG.error("BŁĄD: " + e); rzut e; } } funkcja void otherFuncA() wyrzuca wyjątek { xyz(); } funkcja void otherFuncB() { spróbuj { xyz(); } catch (Wyjątek e) { LOG.error("BŁĄD: " + e); rzut e; } } Bardzo trudno mi to zaakceptować jako praktykę, ponieważ generuje tak wiele niepotrzebnego kodu (patrz `otherFuncA` i `otherFuncB`), wpływając na wywołania funkcji przez różne warstwy (DAO, Service, Controller, itp. ) **Pytanie #2, czy stracę informacje o błędzie (powiedzmy, co spowodowało wyjątek`NullPointerException`), jeśli wpuszczę nieoczekiwane, niesprawdzone wyjątki do warstwy kontrolera, a następnie, i TYLKO wtedy, obsłużę go tam (catch ` Wyjątek i wyrzucić ślad stosu)? W przeciwieństwie do natychmiastowego rejestrowania i ponownego wyrzucania (patrz powyżej).** Oczywiście nadal będę sprawdzać określone typy wyjątków tam, gdzie ma to zastosowanie. Wydaje mi się, że ślad stosu jest często lepszym wskaźnikiem tego, co poszło nie tak, w porównaniu z konkretnym polem, które spowodowało błąd… Jestem naprawdę zainteresowany danymi wejściowymi od bardziej doświadczonych programistów i najlepszymi praktykami/uzasadnieniami dotyczącymi obsługi wyjątków.


title: Jak zwizualizować partycjonowanie przestrzeni funkcji w losowym lesie?

text: Uczę się o losowym lesie i uważam, że ten film https://www.youtube.com/watch?v=gdnIqGbqiYs&list=UUb9svouAi1XHRqlOs8LXbBg jest bardzo przydatny. Pierwsze 8 minut wyjaśnia, jak zwizualizować partycjonowanie przestrzeni funkcji, gdy drzewo jest zapełniane podczas szkolenia. Jednak w filmie partycjonowanie jest wyjaśnione tylko w odniesieniu do dwóch wektorów cech w całym drzewie. Łatwo było zrozumieć, w jaki sposób przestrzeń funkcji jest podzielona na dwie funkcje, ponieważ wykresy przestrzeni funkcji zawierają funkcję 1 w porównaniu z funkcją 2. Jeśli jednak mam wiele funkcji wybranych losowo do użycia w dowolnym węźle danego drzewa, w jaki sposób mam wizualizować przestrzeń funkcji i sposób jej partycjonowania? Na przykład, jeśli jedna gałąź zawiera 5 węzłów, z 5 funkcjami wybieranymi przed osiągnięciem węzła liścia, w jaki sposób podzielona jest przestrzeń funkcji, aby obejmowała wszystkie 5 funkcji?


title: Pisanie komentarzy java doc dla przypadków testów jednostkowych

text: Moim zdaniem same przypadki testów jednostkowych służą jako dokumentacja kodu. Moja firma chce, abym pisał szczegółowe komentarze do dokumentów java na górze przypadków testów jednostkowych. Czy jest to konieczne? Piszesz takie komentarze?


title: Testowanie systemu - upewnienie się, że system jest zgodny ze specyfikacją. Walidacja?

text: Po tygodniach badań prawie skończyłem pracę, ale nie jestem w stanie wyjaśnić swojego zamieszania zawartego we wszystkich poprzednich wątkach tutaj (i w wielu książkach): Podczas testowania systemu sprawdzamy działanie systemu pod kątem analizy systemowej (projekt funkcjonalny systemu) - ale to pasowałoby do definicji weryfikacji według wielu ksiąg. Ale postępuję zgodnie z normą ISO12207, która traktuje wszystkie testy jako walidację (upewniając się, że produkt roboczy spełnia wymagania dotyczące zamierzonego użycia). **Jak mogę uzasadnić, że testowanie jednostkowe lub testowanie systemowe jest walidacją, nawet jeśli sprawdzam to pod kątem specyfikacji? Który spełnia definicję weryfikacji?** „Przycisk Zapisz” działa, czy to walidacja? To zdjęcie pokazuje moje rozumienie V&V, tak różne od wielu innych źródeł, w tym ISTQB itp. ![To jest moje rozumienie V&V - zdjęcie zaczerpnięte z sieci](http://i.stack.imgur.com/7I040.gif ) Zasadniczym problemem, jaki mam, jest to, że książka używająca tego samego obrazu stwierdza również w innym miejscu, że: > działania testowe w obszarze walidacji to użyteczność, alfa i beta > testowanie. W celu weryfikacji definiowane są testowalne wymagania systemowe, > których poprawna implementacja może być testowana poprzez testy systemowe. Czy nie jest to przeciwieństwo tego, co mówi obrazek? Większość książek przedstawia następujący obraz, gdzie walidacja to po prostu upewnienie się, że potrzeby klienta są zaspokojone. Pamiętaj, że zgodnie z ISO walidacją jest testowanie. ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/0Enyb.gif)


title: jak prawidłowo zaliczyć autorów programu licencyjnego MIT

text: Chociaż znalazłem podobne pytania na tej stronie, nie były one tym, czego szukałem. Zmodyfikowałem kod źródłowy projektu na licencji MIT i dodałem do niego również nowe klasy. Proszę mnie poprawić, jeśli się mylę, ale myślę, że dodanie mojej informacji o prawach autorskich nad licencją i usunięcie drugiej jest legalne. Ale jak powinienem przypisać wkład poprzednich autorów? Czy powinienem użyć osobnego pliku? Są też pliki html bez licencji i informacji o prawach autorskich, które również zmodyfikowałem. Czy muszę sobie z nimi radzić inaczej? Moje pytanie różni się od tego pytania, ponieważ zmodyfikowałem również niektóre pliki projektu, który rozszerzam.


title: NoSQL jako baza danych meta plików

text: Próbuję zaimplementować strukturę wirtualnego systemu plików przed magazynem obiektów (Openstack). Ze względu na dostępność początkowo wybraliśmy Cassandrę, jednak przy projektowaniu modelu danych systemu plików wyglądał on jak struktura drzewa podobna do modelu relacyjnego. Oto dylemat dostępności i tolerancji partycji, której potrzebujemy NoSQL, ale nasz model danych jest relacyjny. Zamierzony system plików musi być w stanie jak najszybciej obsłużyć filtrowane wyszukiwanie na podstawie daty, nazwy itp. Więc jaką ścieżką powinienem obrać? Trzymać się relacyjnych z pewnym mechanizmem indeksowania wspieranym przez narzędzia 3rd, takie jak Apache Solr, lub zagłębić się w NoSQL i znaleźć odpowiedni model i bazę danych, które spełniają ten model? PS: Obecnie z NoSQL Cassandra lub MongoDB to wybory zaproponowane przez moich kolegów.


title: Czy w przypadku danych zdefiniowanych przez użytkownika lepiej jest użyć tabeli tabel, czy tabel tworzonych dynamicznie?

text: W aplikacji, która pozwala użytkownikom definiować własne tabele i kolumny (szczegóły nie są przedmiotem tego pytania, ale wyobraźmy sobie narzędzie, które pozwala użytkownikom tworzyć własne formularze i automatycznie obsługuje pamięć masową, tylko po to, aby uzyskać pomysł) przechowywać każdą tabelę i kolumnę, którą tworzą w tabeli „tabela” i tabela „kolumna”, czy dynamicznie tworzyć tabele i kolumny? To pytanie „jeden stół, aby rządzić wszystkimi” jest nieco powiązane, ale w tym przypadku stół „stół” jest wyraźnie złym pomysłem. W takim przypadku, jeśli nie pójdziesz tą drogą, wszystkie Twoje zapytania będą musiały być generowane dynamicznie. Mimo że argument „nie pisz kolejnego narzędzia do projektowania aplikacji dla osób niebędących programistami, możesz dodawać funkcje, dopóki nie będziesz w zasadzie zmuszać użytkowników do tworzenia aplikacji w słabej wersji, powiedzmy Visual Studio, przy użyciu własnego niestandardowego języka” jest całkiem rozsądne, miałem wiele projektów z jakąś wersją wymagań dotyczących tabel zdefiniowanych przez użytkownika i to pytanie dotyczy _jak_ to zaimplementować. _Czy_ to zaimplementować to inne pytanie, ale prawdopodobnie zbyt specyficzne dla konkretnych aplikacji, aby było dobrym pytaniem w tym miejscu.


title: Zatrudnianie programistów — zabezpieczanie kodu źródłowego

text: Mam popularną aplikację internetową i nagle mój główny programista zniknął. Chociaż znalazłem innych świetnych programistów, ale nie chcę rozpowszechniać kodu źródłowego dla wszystkich. Czy jest jakiś sposób, aby mogli nad tym pracować, zachowując jednocześnie bezpieczny kod źródłowy? Dziękuję


title: Wzorzec projektowy do konfigurowania obiektów

text: ### Kontekst W aplikacji Cocoa, którą tworzę, muszę załadować model danych, który jest zdefiniowany w plikach plist. Mam więc coś takiego: root (Tablica) ---- item (Słownik) -------- name : "objects" (string) -------- prefab : "object" (string) ) -------- children : (Tablica) ... ---- item (Słownik) -------- name : "actions" (string) -------- prefab : "action" (string) -------- children : (Array) Tak więc poprzedni model danych jest ładowany do kodu, aby stać się reprezentacją obiektu przy użyciu prymitywów języka (tablice, słowniki, łańcuchy, ... itp). Nie ma tutaj niestandardowych klas. Kiedy ładuję ten model, wiem, że element w widoku tabeli może mieć dzieci, jeśli ustawiony jest klucz „prefabrykowany”. Po naciśnięciu przycisku „dodaj dziecko” przechodzę do prefabrykatów (jakieś inny plik plist) i pobieram strukturę tego prefabrykatu. np.: root (tablica) ---- item (słownik) -------- name : "object" (string) -------- parametry : (słownik) ------- ----- klucz "object_id" : wartość "" ------------ klucz "x_position" : wartość 0 ... Jak widać, z prefabrykatu w pierwszym modelu, mogę przejdź do drugiej plisty i pobierz strukturę zdefiniowaną w plist. Wszystko ładowane za pomocą biblioteki plist, bez jakiegokolwiek tworzenia podklas. Istnieje pojedyncza klasa fabryki prefabrykatów, która zawiera struktury prefabrykatów oraz tworzy instancję i inicjuje obiekt z prefabrykatów za pomocą danych konfiguracyjnych. ### Problem Mam nadzieję, że widzisz poważne niebezpieczeństwo w tym projekcie. Model zawiera zarówno dane wygenerowane przez użytkownika, jak i dane konfiguracyjne!! _EEEEEK!!!_ ... Och, to takie złe... Problem prześladował mnie, gdy zacząłem eksportować model po tym, jak użytkownik aplikacji wszedł w interakcję z modelem przez interfejs użytkownika. Wyeksportowany model zawierałby dane konfiguracyjne (takie jak klucz prefabrykowany), co sprawia, że eksportowane dane są sztywne i nie można ich aktualizować. Gdybym miał zmienić klucz prefabrykowany w późniejszej wersji aplikacji na coś innego, a Ty załadujesz stary model, ten model załaduje nim stare konfiguracje, w naszym przypadku odwołując się do starego prefabrykatu. ## Pytanie Potrzebuję pomocy w znalezieniu właściwego wzorca projektowego, który kliknie w moim projekcie opartym na danych, dostarczając dane konfiguracyjne z oddzielnego pliku i jakoś łącząc go z modelem danych.


title: Jakie są typowe obowiązki i osiągnięcia zapisane w CV dla pracy programistycznej?

text: Odświeżam swoje CV/życiorys i staram się myśleć o obowiązkach i osiągnięciach z moich poprzednich prac i projektów. Wydaje się, że jest ich niewiele, ale prawdopodobnie są takie, o których po prostu nie uważam, aby były warte wspomnienia pracodawcy. Jakie obowiązki i osiągnięcia obejmuje Twoja praca i które z nich wymieniasz w swoim CV/życiorysie?


title: JavaScript Użycie obiektu Window za pomocą alternatywnych środków

text: Zignoruj tutaj na chwilę swoje zwykłe paradygmaty.... Widziałem kilka witryn, które stosowały następującą logikę: a=[]; b=a["sortuj"]; c=(b)(); c["alert"](1); // zamierzone wyjście: Alert wyświetlający "1"... rzekomo, aby uzyskać dostęp (zgaduję tutaj) do prymitywu funkcji sort, aby uzyskać dostęp do obiektu okna, a następnie użyć go do uzyskania dostępu do "alert"... I próbowałem wykonać to wieki temu i zadziałało to zaklęcie... Ale jakieś dwanaście miesięcy później, próbowałem go uruchomić ponownie... i nie udało się go wykonać, z następującym błędem: TypeError: can't konwertuj undefined na object Moje pytanie brzmi, dlaczego ta logika nie działa? Wydaje się całkiem rozsądne... A może tak? I tak, wiem, że mógłbym po prostu zrobić „alert(1)” i skończyć z tym, ale próbuję zrozumieć alternatywne sposoby kodowania… Pracuję w bezpieczeństwie IT i wiem, że niektórzy ludzie mają sposoby wykorzystania XSS do znalezienia alternatywnych sposobów wykonywania ogólnych funkcji w celu złamania zabezpieczeń systemów...


title: Od czego zacząć naprawianie złożonego błędu?

text: Próbuję rozwiązać złożony błąd w naszej bazie kodu, ale problem wydaje się pochodzić z wielu miejsc do tego stopnia, że nie wiem, co najpierw zmienić. czy masz jakieś procedury lub wytyczne do zrobienia w takiej sytuacji?


title: Konwencja wielkich liter w asemblerze?

text: Czy istnieje jakaś konwencja dotycząca tego, co należy wykorzystać w zestawie (x86)? Na przykład, który z nich „wygląda najlepiej”? (A może żaden z nich nie robi?) [BITS 32] %define MACRO 1 MyLabel: MOV EAX, 2 versus [bits 32] %define macro 1 MY_LABEL: mov eax, 2 versus [Bits 32] %define MACRO 1 MyLabel: mov EAX, 1 a wszystkie inne możliwości?


title: Jak mam wydać moją aplikację jako open source?

text: Stworzyłem własne forum na ASP.NET MVC 3 i Razor. To przyzwoite forum z funkcjonalnością, powiedzmy, wersji 1. Planuję pracować również nad innymi funkcjami po wydaniu tej wersji. 1) Na jakiej witrynie poza Codeplexem mogę opublikować swoją aplikację jako open source? 2) Jakie są wytyczne, których muszę przestrzegać przed opublikowaniem aplikacji dotyczącej mojego kodu itp.? 3) Chcę, aby moja aplikacja była używana przez innych, więc czy muszę się martwić o tworzenie dokumentacji dotyczącej mojego kodu itp.?


title: Gdzie jest społeczność filozofów unixa?

text: Staram się zaimplementować swój system komputerowy zgodnie z filozofią unix, tj. chcę edytować pliki, czytać/wysyłać e-maile, przechowywać dane i przeglądać sieć, a wszystko to przy użyciu narzędzi zgodnych z filozofią unix. Inni zdefiniowali filozofię uniksową lepiej niż ja, ale wystarczy powiedzieć, że mam na myśli narzędzia, które „robią jedną rzecz dobrze”, działają z potokami uniksowymi i można je łatwo oskryptować. Patrzę na narzędzia takie jak ed, edbrowser, nmh i uzbl. Zastanawiam się jednak, gdzie ludzie o podobnych poglądach w internecie „wysiadują” (np. na wiki lub forum)? Czy jest jakaś społeczność internetowa lub społeczność dystrybucyjna linuksa, która ma dużą grupę ludzi, którzy również chcą realizować całą swoją pracę za pomocą narzędzi filozofii unix? Wszelkie sugestie byłyby bardzo mile widziane.


title: Jak zastosować zwinną metodologię tworzenia oprogramowania układowego/systemów wbudowanych?

text: Zawsze zastanawiałem się, jak naprawdę zastosować metody zwinne w dużych, złożonych systemach wbudowanych (ponad 100 inżynierów). Tworzenie oprogramowania układowego ma pewne unikalne cechy, które utrudniają pracę w trybie zwinnym (np. sprzęt jest dostępny dopiero w późnym cyklu rozwojowym; po wydaniu produktu nie można łatwo zaktualizować oprogramowania układowego; itp.). Norma w tego rodzaju rozwój to gęsta dokumentacja i wyczerpujące wzajemne recenzje. Nie można uzyskać prostej poprawki kodu, takiej jak zmiana nazwy zmiennej bez 2-3 podpisów. (Trochę przesadzam, ale to typowe. Poza tym wiele osób idzie na skróty, a Project Managerowie nawet je aprobują, zwłaszcza w obliczu napiętych terminów rynkowych.) Chciałbym usłyszeć jakieś wskazówki lub wytyczne, jak przyjąć agile metodologia dla projektów rozwoju oprogramowania.


title: Czy NoSQL jest dobrym rozwiązaniem dla aplikacji graficznej i jak mogę porównać różne serwery NoSql?

text: Tradycyjnie jestem programistą MsSQL lub MySQL - prototypuję nową aplikację, która polega na przechowywaniu danych z wielu celów. Zauważyłem, że aplikacja wydaje się spowalniać po przeskalowaniu do 10 tys. Po wdrożeniu aplikacji będę musiał dodać około 1k celów miesięcznie i przechowywać jeden punkt danych z każdego na każdą minutę przez około 2 lata. Nigdy nie używałem NoSql, ale z czytania brzmi to jak dobre dopasowanie - stwórz dokument dla każdego celu i dodawaj pola dla każdego celu. Zastanawiałem się więc, czy NoSQL jest właściwą drogą do tego projektu, czy powinienem trzymać się tradycyjnego SQL - i/lub czy ktoś może zaoferować jakąś radę? I druga część - Jeśli NoSQL jest rozwiązaniem, czy ktoś może polecić uczciwe porównanie, ponieważ gubię się w stronniczych recenzjach, które wydają się mówić, że każde rozwiązanie jest lepsze!?


title: Obraźliwe programowanie / kodowanie

text: Ostatnio słyszałem o "obraźliwym programowaniu/kodowaniu". Nie jestem pewien, co to dokładnie oznacza. Dlaczego jest lepszy od programowania defensywnego? Czy ktoś może mi podać kilka przykładów lub odpowiedzi?


title: Jaka branża/programowanie jest odpowiednie dla ostrożnego programisty?

text: Moje podejście do programowania jest bardzo przemyślane. Spędzam dużo czasu na planowaniu i projektowaniu zanim zacznę kodować, nawet do najbardziej podstawowych zadań. Zawsze staram się, aby mój kod był bardzo prosty, projektowałem wszystko bardzo elegancko i zawsze zostawiam miejsce na późniejsze elastyczne zmiany. Niektórzy mogą powiedzieć, że za dużo myślę o tym, co jeszcze mogłoby się wydarzyć. Zastanawiam się, jaka branża i jakie zadania najlepiej pasowałyby do kogoś, kto pracuje tak, jak ja? Czy istnieją prace wymagające dużej precyzji bez dużej presji harmonogramu, a jeśli tak, to gdzie ich szukać?


title: Czy .NET WCF jest warte wysiłku?

text: Może to ja, ale nigdy nie spotkałem się z prawie tyloma problemami, irytującymi wyzwaniami, pośrednimi komunikatami o błędach i ogólnymi frustracjami związanymi z jakąkolwiek inną technologią, jak w przypadku WCF. Jakie są RZECZYWISTE korzyści? Nie MS Press Release korzyści z „ujednoliconej architektury dla czegoś, co i tak nie zadziała”. I czy te korzyści są warte irytujących frustracji? Zwykle jestem tu wielkim fanboyem MS, ale po prostu nie mogę stać za WCF.


title: Dlaczego podczas pisania przypadków testów jednostkowych piszemy atrapy obiektów?

text: Obecnie w naszym projekcie piszemy przypadki testów jednostkowych. Implementacje metod bazodanowych istnieją i działają bez zarzutu. W takim razie dlaczego musimy pisać makiety? Czy jest jakiś konkretny powód? Dlaczego nie mogę bezpośrednio przetestować implementacji DAO?


title: Czy testowanie jednostkowe prowadzi do przedwczesnego uogólnienia (szczególnie w kontekście C++)?

text: ### Uwagi wstępne Nie będę się rozróżniał między różnymi rodzajami testów, na tych stronach jest już kilka pytań na ten temat. Wezmę to, co tam jest, a to mówi: _testowanie jednostkowe w sensie „testowania najmniejszej izolowalnej jednostki aplikacji”_, z której faktycznie pochodzi to pytanie ### Problem izolacji Czym jest _najmniejsza izolowana jednostka_ programu. Cóż, tak jak ja to widzę, to (w dużym stopniu?) zależy od tego, w jakim języku kodujesz. Micheal Feathers mówi o koncepcji _szewu_ : [WEwLC, p31] > Szew to miejsce, w którym możesz zmienić zachowanie w swoim programie bez > edycji w tym miejscu. I nie wchodząc w szczegóły, rozumiem szew -- w kontekście testów jednostkowych -- jako miejsce w programie, w którym twój "test" może łączyć się z twoją "jednostką". ### Przykłady Test jednostkowy -- szczególnie w C++ -- wymaga od testowanego kodu dodania _więcej szwów_, które byłyby ściśle wymagane dla danego problemu. Przykład: * Dodanie wirtualnego interfejsu tam, gdzie niewirtualna implementacja byłaby wystarczająca * Dzielenie -- uogólnianie(?) -- (mała) klasa dalej "tylko", aby ułatwić dodawanie testu. * Podział pojedynczego projektu wykonywalnego na pozornie "niezależne" biblioteki, "tylko" w celu ułatwienia samodzielnego kompilowania ich do testów. ### Pytanie, które wypróbuję z kilkoma wersjami, które, miejmy nadzieję, będą dotyczyć tego samego punktu: * Czy sposób, w jaki testy jednostkowe wymagają stworzenia struktury kodu aplikacji „tylko” jest korzystny dla testów jednostkowych, czy rzeczywiście jest korzystny dla aplikacji Struktura. * Czy uogólnienie kodu, które jest potrzebne, aby można było go testować jednostkowo, jest przydatne do wszystkiego _poza_ testami jednostkowymi? * Czy dodanie testów jednostkowych zmusza do niepotrzebnego uogólniania? * Czy testy jednostkowe kształtu wymuszają na kodzie „zawsze” również ogólnie dobry kształt kodu, jak widać z domeny problemu? Pamiętam praktyczną zasadę, która mówi, że nie uogólniaj, dopóki nie musisz / dopóki nie pojawi się drugie miejsce, które używa kodu. W przypadku testów jednostkowych istnieje _zawsze_ drugie miejsce, w którym używany jest kod — a mianowicie test jednostkowy. Czy to wystarczający powód, by uogólniać?


title: opcje analizy danych dla magazynu szeregów czasowych

text: Tworzę rozwiązanie Internetu Rzeczy, które ma wiele kanałów w czasie rzeczywistym. Muszę podjąć kilka decyzji projektowych dotyczących magazynu danych, raportowania i szukania danych wejściowych. Mam dwa modele wdrażania, lokalny, w którym mały serwer linuksowy przechwytuje wiele strumieni, zwykle nowy punkt danych co sekundę, a długość rekordu jest niewielka, w zasadzie komunikat o stałym formacie około 20 bajtów. Drugi model jest oparty na chmurze, gdzie szybkość transakcji będzie znacznie wyższa, do 1000 punktów danych na sekundę. Koncentrując się najpierw na modelu lokalnym, mój prototyp używa SQLite pod MONO i działa dobrze w tradycyjny sposób RDMS. Zdaję sobie jednak sprawę, że RDBMS nie jest optymalny dla systemów szeregów czasowych i prawdopodobnie rozwiązanie NOSQL może być lepsze. Ponownie zastanawiam się nad podejściem SQL ze względu na moje wymagania dotyczące analityki w czasie rzeczywistym. Chcę mieć możliwość łatwego raportowania SUMA, LICZBA, ŚREDNIA, ŚREDNIA, SD, MIN, MAX dla potencjalnie każdego zestawu danych szeregów czasowych, w zasadzie system przelicza je dla każdego nowego punktu danych. Chociaż nie robiłem żadnych testów wydajności, mogę zobaczyć, czy mam rok lub więcej danych, rozmiar zestawu danych będzie dość duży (20 bajtów na sekundę w ciągu roku to 600 MB i mogę mieć do 30 różnych szeregów czasowych datasets) i nie będzie świetny do obliczania średnich w czasie rzeczywistym itp. w normalnym SQL. Chcę również, aby rozmiar/koszt serwera był niski, więc nie będę mógł dodawać jednostek procesora ani pamięci, ale miejsce na dysku powinno być OK. Inną opcją, jaką mam, jest to, że mój system może przechowywać deltę (zmiany) do kanałów czasu rzeczywistego zamiast zwykłego punktu danych, co pozwoli zaoszczędzić około 80% miejsca na dysku. Jednak nie znam łatwego sposobu wykonywania obliczeń, takich jak bieżące średnie, jeśli przechowuję delty (o ile wiem, nie jest to możliwe w przypadku standardowych instrukcji SQL, ale mogę się mylić). Biorąc pod uwagę mój przypadek użycia powyżej, mam 3 pytania: 1) Czy powinienem poważnie rozważyć magazyn danych NOSQL? Czy masz jakieś sugestie dotyczące zalet sklepu NOSQL dla tego modelu? 2) Jak najlepiej wykonać obliczenia w czasie rzeczywistym, takie jak średnia, bez dużej złożoności lub sprzętu? Mam opcje platformy MONO lub NODE w systemie Linux lub Windows. 3) Jak wykonywać wydajne obliczenia zestawów w czasie rzeczywistym (szczególnie średnie, które będą większością obliczeń) na SQLite lub NOSQL DB, gdy przechowuję delty?


title: Super typ wyjątku abstrakcyjnego

text: Jeśli rzucanie `System.Exception` jest uważane za tak złe, dlaczego `Exception` nie został w pierwszej kolejności uznany za `abstrakcyjny`? W ten sposób nie byłoby możliwe wywołanie: throw new Exception("Wystąpił błąd."); Wymusiłoby to użycie pochodnych wyjątków, aby podać więcej szczegółów na temat błędu, który wystąpił. Na przykład, gdy chcę zapewnić niestandardową hierarchię wyjątków dla biblioteki, zwykle deklaruję abstrakcyjną klasę bazową dla moich wyjątków: public abstract class CustomExceptionBase : Exception { /* tu trochę rzeczy */ } A potem jakiś wyjątek pochodny z bardziej konkretny cel: public class DerivedCustomException : CustomExceptionBase { /* trochę bardziej konkretnych rzeczy tutaj */ } Następnie podczas wywoływania dowolnej metody z biblioteki można użyć tego ogólnego bloku try/catch, aby bezpośrednio przechwycić każdy błąd pochodzący z biblioteki: try { /* library wywołuje tutaj */ } catch (CustomExceptionBase ex) { /* obsługa wyjątków */ } Czy to dobra praktyka? Czy byłoby dobrze, gdyby „Wyjątek” był abstrakcyjny? EDYCJA: Chodzi mi o to, że nawet jeśli klasa wyjątku jest oznaczona jako „abstrakcyjna”, nadal możesz ją złapać w bloku catch-all. Abstrakcja jest tylko sposobem na zabronienie programistom rzucania „super-szerokiego” wyjątku. Zwykle, gdy dobrowolnie zgłaszasz wyjątek, powinieneś wiedzieć, jakiego jest on typu i dlaczego tak się stało. W ten sposób wymuszając zgłoszenie bardziej szczegółowego typu wyjątku.


title: Licencja na oprogramowanie ograniczająca komercyjne wykorzystanie, np. CC BY-NC-SA

text: Chcę rozpowszechniać moje oprogramowanie na licencji Creative Commons Uznanie autorstwa — Niekomercyjne — na tych samych warunkach, tj. * Redystrybucja kodu źródłowego i plików binarnych jest bezpłatna. * Zmodyfikowana wersja programu musi być rozpowszechniana na tej samej licencji. Należy dostarczyć przypisanie do oryginalnego projektu. * Ogranicz wszelkiego rodzaju komercyjne wykorzystanie. Jednak CC nie zaleca używania ich licencji na oprogramowanie. Czy istnieje taka licencja na oprogramowanie, którą mogę zastosować? Lepiej, jeśli licencja publiczna, ale o ile wiem, prawo USA mówi, że tylko EULA może ograniczać korzystanie z otrzymanej kopii?


title: Korzyści z używania plików konfiguracyjnych nad tworzeniem wielu małych klas?

text: Mój przyjaciel i ja budujemy grę mobilną i natknęliśmy się na następujący problem projektowy: Będziemy mieć wiele różnych typów jednostek, wszystkie z różnymi statystykami i umiejętnościami. Jednak wszystkie typy jednostek powinny mieć kilka cech wspólnych (na przykład wszystkie miałyby atrybut totalhealth). Próbowaliśmy zdecydować, jaki byłby najlepszy sposób reprezentowania tych jednostek. Mój przyjaciel zasugerował po prostu stworzenie nowej klasy dla każdego typu jednostki. Czuję, że posiadanie setek różnych klas jest złe, ale nie mogę do końca zrozumieć, co jest w tym tak złego. Moją alternatywą jest umieszczenie informacji o typie jednostki w plikach konfiguracyjnych lub w bazie danych (co rozwiąże również problem wymuszania na każdym typie jednostki posiadania kilku wspólnych atrybutów ze schematem). A następnie miej klasę jednostki głównej do tworzenia instancji typów jednostek z bazy danych. Jaki jest właściwy sposób zaprojektowania tego?


title: Pułapki łączenia zależnych cech i wyjątków w tym samym pliku jako interfejs w php

text: Jakie są potencjalne pułapki łączenia powiązanych klas, takich jak obiekty (interfejsy, cechy, niestandardowe wyjątki) w tym samym pliku źródłowym? Do ponownego wykorzystania kodu i ładowania tylko tego, czego potrzebuję, zawsze oddzielam pełne klasy do oddzielnych plików. Ale interfejsy, cechy i rozszerzone wyjątki nie wymagają tego samego poziomu szczegółowości. Zostałem nauczony, że wszystkie klasy i obiekty podobne do klas (interfejsy, rozszerzone wyjątki itp.) powinny mieć własne pliki źródłowe. Ale teraz zaczynam pracę z cechami i po uzyskaniu porady na temat łączenia cech i interfejsów, aby mieć możliwość posiadania czegoś na wzór wielokrotnego dziedziczenia, łączę interfejs i cechę w tym samym pliku źródłowym. W ten sposób jedynym sposobem uzyskania dostępu do cech jest zaimplementowanie odpowiedniego interfejsu. Gdy klasa wywoła autoloader, aby uzyskać źródło interfejsu, ładuje również cechę. Nie wszystkie klasy, które implementują interfejs, będą używać tej cechy dla funkcjonalności, ale większość to zrobi, a te, które tego nie zrobią, po prostu nie _używają_ tej cechy. Będę również używał rozszerzonych wyjątków dla interfejsu na wzór PDOException. Są to wyjątki zgłaszane tylko przez klasy, które rozszerzają lub implementują klasę. Więc teraz mój plik interfejsu **Stackable.php** wygląda tak: interface Stackable{ public function add($content); funkcja publiczna _registerParent($parent); funkcja publiczna _checkLoop($dziecko); } cecha StackableTrait{ private $container_contents = array(); prywatny $container_parent = NULL; public function add($content){ if(is_a($content, "Stackable"){ $content->_registerParent($this); //uniemożliwia dwukrotne dodawanie i tworzenie pętli. }elseif(!is_string($zawartość)){ $this->_checkLoop($zawartość); } return $this->container_contents[] = $content; } funkcja publiczna _registerParent($parent){ if(empty($this->container_parent)){ $this->container_parent = $parent; zwrócić; } throw new StackableException("Obiekt został już dodany do rodzica"); } public function _checkLoop($child){ if(in_array($child,$this->container_contents,TRUE){ throw new StackableException("Obiekt został już dodany do rodzica"); }elseif(!empty($this- >container_parent)){ $this->container_parent->_checkLoop($child); } } } class StackableException extends Exception{} Jak widać, cała zawartość pliku jest ze sobą powiązana, każda klasa, która chce użyć StackableTrait, trzeba również zaimplementować interfejs, aby sprawdzanie klas w funkcjach cech działało.I tylko rzeczy używające _StackableTrait_ lub implementujące _Stackable_ będą miały dostęp do wyrzucenia _StackableException_.


title: Co to za transformacja?

text: Mam funkcję, która liniowo „przemapowuje” wartość z danego interwału na inny interwał? Funkcja odwzorowuje wartość z danego przedziału [oldMin, oldMax] na inny przedział [newMin, newMax] przy użyciu tego wzoru: newVal = newMin + (newMax - newMin) * (oldVal - oldMin) / (oldMax - oldMin) Jeśli to pomaga określić, jaki to jest rodzaj transformacji, powyższy wzór jest tylko przeformułowaniem poniższego równania. Jedyne, co zrobiłem, to przeorganizowałem terminy tak, aby wyrażały `newVal` po lewej stronie równania, tak aby było ono funkcją wszystkich innych parametrów: ![tutaj wprowadź opis obrazu](http://i.stack.imgur .com/wukZX.png) Czy istnieje standardowa nazwa transformacji mapowania?


title: Jaka jest zaleta maszyny wirtualnej programisty poza przenośnością

text: Rozumiem zalety Java działającej na JVM. Ruchliwość. Ładny prosty powód. Ale zawsze zastanawiało mnie, dlaczego Microsoft wypuścił własną wersję JVM - .NET. C# ma być dobrym językiem (nie używałem siebie), ale czy Microsoft mógł wypuścić produkt do używania natywnego. czyli wygenerować exe? Mój kolega uczy się F#. Powodem, dla którego musi to być język działający na platformie .NET, jest fakt, że interfejs API Microsoft Lync, który będzie używany, jest dostępny tylko na platformie .NET. tzn. nie ma interfejsu API C dla programu Lync. Cyniczny pogląd może polegać na tym, że powodem jest blokada dostawcy. F# będzie działał tylko na platformie Microsoft (lub C# o to chodzi), więc program jest zablokowany. Ale może brakuje mi innej korzyści platformy VM?


title: Mechanika rozumowania podczas wywiadów programistycznych

text: To nie jest zwykłe „nie chcę pisać kodu podczas rozmowy kwalifikacyjnej”, w tym pytaniu założenie jest takie, że * muszę napisać kod podczas rozmowy kwalifikacyjnej (pomyśl o poziomie przepisania quicksort lub mergesort od podstaw) * Wiem jak działa algorytm lub mam podstawowe wyobrażenie jak powinienem zacząć pracę od tego miejsca, tzn. algorytmu nie pamiętam na pamięć Zauważyłem, że nawet na tablicy **zawsze** kończy się pisanie zabugowanego kodu lub kod, który się nie kompiluje. Jeśli jest literówka, cokolwiek zwykle z tym żyję… ale kiedy zdarzy się awaria z powodu jakiegoś niezrealizowanego konkretnego przypadku, tracę wiarę w swoje umiejętności. Zdaję sobie sprawę, że być może ankieterzy mogą chcieć przyjrzeć się temu, jak piszę kod i/lub jak rozwiązuję problemy, zamiast sprawdzać mój kod tablicy, ale chciałbym zapytać **jak mam podejść do powyższego problemu w kategoriach mentalnych, tj. jakie mentalne kroki powinienem wykonać podczas pisania kodu na rozmowę kwalifikacyjną z dwoma punktami powyżej**. Musi istnieć unikalna i uzgodniona seria kroków, które powinienem wykonać, aby uniknąć utknięcia w szczególnych przypadkach wyjątkowych (przypadkach granicznych), które mogą skończyć się marnowaniem mojego czasu i energii, zamiast skupiania się na ogólnym algorytmie dla przypadku ogólnego. Mam nadzieję, że jasno przedstawiłem swój punkt widzenia


title: Czy jako autor i właściciel praw autorskich mogę ponownie licencjonować swój kod na bardziej liberalnej licencji po opublikowaniu go na bardziej restrykcyjnej licencji?

text: Powiedzmy na przykład, że opublikowałem swój kod na licencji GPL. Miesiąc po wydaniu, postanawiam, że złe korporacje (`*`kaszel`*`) mogą mimo wszystko używać mojego kodu, ponieważ jest tak genialny i wolny od błędów. Czy mogę po prostu ponownie licencjonować swój własny kod, czy też nie mam do tego prawa?


title: Rekordy syntetycznej bazy danych

text: Załóżmy, że otrzymujemy od klienta statystyki, które analizujemy i przesyłamy klientowi nasze uwagi. Teraz klient mówi nam, że statystyki, które obliczył między styczniem a marcem, opierają się na niewłaściwej metodologii i przesyła nam poprawione serie. Chcemy przeprowadzać analizy na niewłaściwym i poprawnym zestawie danych, które są ogromne i różnią się tylko od stycznia do marca, aby uniknąć powielania danych. Dlatego potrzebujemy czegoś takiego jak _syntetyczne rekordy bazy danych_ implementujące następującą logikę: syntetyczny[1] = błędne_dane syntetyczny[2] = poprawne_dane między styczniem a marcem, złe_dane w przeciwnym wypadku Dzięki temu możemy łatwo przeprowadzać nasze analizy na syntetycznych rekordach. Czy takie syntetyczne zapisy powinny być zaimplementowane w logice aplikacji czy po stronie bazy danych? Jakie są najczęstsze pułapki takiego wdrożenia?


title: Wartości serializowane czy oddzielna tabela, co jest bardziej wydajne?

text: Mam model Rails `email_condition_string` z kolumną `word` w nim. Teraz mam inny model o nazwie `request_creation_email_config` z następującymi kolumnami 1. admin_filter_group:references 2. vendor_service:references 3. email_condition_string:references `email_condition_string` ma wiele `request_creation_email_config` i `request_creation_email_config` należy do `email_.condition Zamiast tego modelu mój kolega sugeruje, że przechowywanie słowa wewnątrz tego samego modelu jako wartości rozdzielanych przecinkami jest bardziej wydajne niż przechowywanie go w oddzielnym modelu. Czy to w porządku?


title: Jak przetestować czytnik plików?

text: Pracuję nad projektem z kilkoma formatami plików. Niektóre formaty są określone przez .xsds, inne przez dokumentację na odpowiednich stronach internetowych, a niektóre są niestandardowymi formatami wewnętrznymi, które nie mają dokumentacji. Mwahahahaha. **W czym problem?** Chciałbym przetestować czytniki plików, ale nie jestem do końca pewien, jak to zrobić. Przepływ aplikacji jest następujący: file.___ ===> odczytywany przez FileReader.java ===> który tworzy obiekt Model, w którym interfejs `FileReader` jest interfejsem publicznym FileReader { public Model read(String filename); } `Model` ma wiele atrybutów, które są wypełniane podczas czytania pliku. Wygląda jak public class Model { List<String> as; Lista<Ciąg> bs; wartość logiczna toPAin = prawda; // ... } **Czego próbowałem?** Moim jedynym pomysłem było stworzenie "generatorów" plików dla każdego formatu pliku. Generatory te są w zasadzie kreatorami, które pobierają kilka zmiennych (np. liczbę komentarzy do wygenerowania w pliku) i wyprowadzają przykładowy plik, który następnie czytam i porównuję wynikowy `Model` ze zmiennymi, których użyłem do początkowego wygenerowania plik. Ma to jednak kilka problemów: * Pliki, które generuje, nie _wyglądają_ jak prawdziwe pliki. Generator w żaden sposób nie jest świadomy kontekstu. * Trudno jest rozpoznać, czy generator wygenerował przypadki brzegowe, ponieważ to ja ręcznie ustawiam zmienne. Ta metoda jest niewiele lepsza niż tworzenie kilkunastu przykładowych plików. Czy są na to lepsze sposoby? EDYCJA: Zmieniono jednostkę na integrację, ponieważ to właśnie mam na myśli. EDIT2: Oto przykład przypadków brzegowych, o których wspomniałem. Każdy plik reprezentuje wykres złożony z wierzchołków i krawędzi. Te wierzchołki i krawędzie można dołączać na różne sposoby, więc: v1 -- e1 --> v2 <-- e2 -- v3 różni się od v1 -- e1 --> v2 -- e2 --> v3 w tym kierunku krawędzi ma znaczenie. Nie jestem pewien, czy to wchodzi w zakres pytania, ale trudno jest wymyślić wszystkie istotne przypadki krawędzi, gdy ręcznie ustawię liczbę wierzchołków, liczbę krawędzi i po prostu losowo generuję połączenia.


title: Czy fragmentacja stosu jest problemem w ramieniu gołym z g++?

text: Konwertuję projekt z C do mieszanego C/C++. Idzie całkiem nieźle, a nowe funkcje naprawdę ułatwiają pracę. Platforma to ARM SAM4, kompilator to arm-none-eabi-g++. Nie jest to sprzęt związany z bezpieczeństwem, ale nadal może działać przez wiele miesięcy i nie powinien sporadycznie uruchamiać się ponownie. Oryginalny projekt C całkiem dobrze poradził sobie z rozwiązywaniem problemów bez pojedynczego wywołania `malloc`, alokując statycznie wszystkie potrzebne dane. Na przykład tablice o nieznanym rozmiarze są przydzielane do maksymalnego oczekiwanego rozmiaru. Teraz zastanawiam się, czy ujdzie mi na sucho używanie `nowego`. Na przykład wszystkie kontenery STL przechowują swoją zawartość na stercie. Samo dodanie nowego elementu do `wektora` może spowodować cofnięcie alokacji całego regionu sterty i alokację innego. Czy pojawią się problemy z fragmentacją? Powiązane: Co to jest fragmentacja pamięci?


title: Układ systemu plików dla wielu celów kompilacji

text: Poszukuję pomysłów jak zbudować i zainstalować oprogramowanie z pewnymi parametrami. Obejmują one docelowy system operacyjny, szczegóły dotyczące procesora platformy docelowej, wariant debugowania itp. Niektóre części instalacji są współużytkowane, takie jak dokumentacja i wiele plików niezależnych od platformy, inne nie, takie jak biblioteki 64 i 32-bitowe, gdy są one oddzielone, a nie razem w bibliotece wielołukowej. Na dużych platformach sieciowych często mamy wiele komputerów, które dzielą dużą przestrzeń serwerową, więc istnieje powód, aby na tym samym dysku znajdowały się nawet pliki binarne Windows i Unix. Mój produkt ma już ustaloną filozofię instalacji $INSTALL_ROOT/genericname/version/, dzięki czemu wiele wersji może współistnieć. Pytanie brzmi: jak zarządzać układem wszystkich innych rzeczy?


title: Wzorzec kontenera/przedmiotu bez `przyjaciela`

text: Mam klasę `Container` zawierającą obiekty typu `Item`. Są to różne klasy, a zwłaszcza nie mają wspólnej klasy bazowej (np. `Container` sam nie ma `Container`).: class Container { public ICollection<Item> Items { get { /* ... */ } } } class Item { public Container Container { get { /* ... */ } } } Chciałbym wymusić, że każdy `Item` musi mieć dokładnie jeden `Container` i chciałbym się upewnić nigdy nie może być sytuacją niespójną, taką, że np. `i.Container.Items.Contains(i)` zwraca wartość false. Mogłoby to zrobić m.in. dodanie metody `Container.AddItem`, która odpowiednio ustawia właściwość `Container` `Item` lub posiadanie metody `Item.SetContainer`, która zajmuje się `Container.Items`. Przykład: class Item { private Container container; kontener publiczny Kontener { zdobądź { kontener zwrotny; } set { if (container != null) container.Items.Remove(this); pojemnik = wartość; if (wartość != null) value.Items.Add(this); } } } Można to łatwo zrobić z koncepcją „przyjaciela”, ale używam C#, który nie ma znajomych, więc ten przykładowy kod się nie skompiluje. Jednak oczywiście skompilowałoby się, gdyby `Container.Items` miał publiczny seter, ale to znowu pozwoliłoby na niespójności: „użytkownik” klas musiałby wiedzieć, że nie używa settera `Container.Items`, ale ` Zamiast tego Item.Container”. Po dłuższych poszukiwaniach czuję, że nie ma sposobu na wyegzekwowanie tego ograniczenia, które wydaje się tak trywialne. (Użycie „wewnętrznego” może być obejściem problemu, ale nie ma rozwiązania). Czy istnieje elegancki sposób na wymuszenie zasady „jeden kontener na element” bez pojęcia „przyjaciel”?


title: W jaki sposób nowy rozwój Javy wpłynie na jej interoperacyjność z językami takimi jak Scala i Clojure?

text: O ile rozumiem, zarówno Scala, jak i Clojure zostały zaprojektowane jako nowe języki, które 1. zależą od JVM i 2. łatwo integrują się z kodem Java, w tym sensie, że pozwalają na użycie klas Java w kodzie Scala i Clojure. Począwszy od Javy 8 (a może jeszcze mocniej z kolejnymi wersjami Javy) nastąpią zmiany w semantyce języka Java. Chciałem zapytać, jak te zmiany wpłyną na interoperacyjność między Javą a Scala / Clojure i jakie będą tego konsekwencje. Na przykład, ponieważ lambdy w Javie 8 nie są obiektami (zobacz np. tutaj), Scala i Clojure mogą mieć do czynienia z wartościami Javy, które nie są obiektami. Czy to byłby problem? Przychodzą mi do głowy następujące scenariusze: 1. Język Scala lub Clojure zostanie rozszerzony, aby dostosować się do nowej semantyki Javy (w celu obsługi nowych wartości nieobiektowych) i wspierać interoperacyjność z Javą. 2. Język Scala lub Clojure **nie** zostanie rozszerzony. Byłoby to możliwe tylko wtedy, gdyby nowe funkcje Java, takie jak wartości funkcji, można było odwzorować na istniejące koncepcje. Np. w Scali nawet funkcja jest obiektem, więc wydaje mi się, że funkcje Javy zostaną ponownie opakowane w jakiś rodzaj obiektów, gdy staną się widoczne dla Scali. 3. Języki Scala lub Clojure będą nadal wspierać interoperacyjność aż do wersji Java 6 lub 7, bez śledzenia najnowszego rozwoju oprogramowania Java. Wymagałoby to, aby starsze wersje Javy były nadal wspierane (przynajmniej przez OpenJDK lub inny projekt), aby te języki mogły być oparte na bardziej konserwatywnej/stabilnej gałęzi Javy. Podsumowując: czy możemy oczekiwać, że przyszły rozwój Javy będzie miał wpływ na języki takie jak Scala i Clojure, aby zachować interoperacyjność z Javą? Czy trwa już jakaś (link do) dyskusja na ten temat? **Uwaga** Mogę sobie wyobrazić, że Scala, Clojure i inne języki oparte na JVM nie będą miały większych problemów z aktualizacją ich implementacji do nowszych wersji JVM (i że nowe funkcje JVM uczynią tę implementację jeszcze łatwiejszą). Moje pytanie skupia się na cechach Javy jako języka i czy / w jaki sposób inne języki JVM będą w stanie "zobaczyć" / wykorzystać te nowe funkcje, a nie na tym, czy języki oparte na JVM będą działać na najnowszych JVM.


title: Funkcja JavaScript powinna wywoływać logikę Pythona w tworzeniu stron internetowych django bez dodatkowego wyzwalacza

text: Od jakiegoś czasu próbuję rozwiązać ten problem. Dotyczy to tworzenia stron internetowych django. Mam **stronę HTML**, która ma funkcję **Javascript** do przesłania pliku obrazu z komputera lokalnego użytkownika. Po przesłaniu tego pliku do szablonu HTML chcę użyć przesłanego pliku obrazu do dalszego przetwarzania. Wywołuję moją logikę Pythona z `views.py` w celu przetworzenia obrazu przed renderowaniem przetworzonych informacji na inną stronę HTML. Mój problem polega na tym, że chcę, aby moja funkcja przesyłania () wywoływała moją logikę Pythona. (Nie powinno być żadnego dodatkowego wyzwalacza, aby wywołać logikę Pythona, tj. "Jakaś funkcja"() w "funkcji przesyłania()", która może bezpośrednio wywołać moja logika Pythona bez konieczności używania jakiegokolwiek kliknięcia przycisku lub czegokolwiek innego.) Czy mogę w jakiś sposób wywołać logikę Pythona z funkcji javascript (tej, która przesyła obraz)? czy też powinienem zapisać przesłany plik na moim lokalnym komputerze i użyć jego ścieżki do przetworzenia informacji o obrazie? Poszukałem w Google i stwierdziłem, że oba te zadania są wyzwaniem. Nie ma na to bezpośredniej metody, ponieważ jedna z nich to skrypty po stronie klienta, a druga po stronie serwera. Ponadto javascript nie ma funkcji wejścia i wyjścia (do zapisywania/zapisywania przesłanego obrazu na dysk lokalny, który również nie jest wyzwalany). Co należy zrobić w takim przypadku? Czy powinienem wtedy napisać funkcję przesyłania również w pythonie? (Nie chcę, aby tak się stało). Proszę pomóż. Z góry dziękuję :)


title: Czy w tym przykładzie istnieje lepszy sposób obsługi abstrakcji danych?

text: Tworzę aplikację, która pobiera dane listy Sharepoint za pośrednictwem usługi sieciowej `SPlists.Lists`. Aby utworzyć instancję usługi sieciowej, mam następującą klasę: class SharepointServiceCreator { public SPlists.Lists createService() {listsService.Url = "http://wss/sites/SPLists/_vti_bin/lists.asmx"; listsService.Credentials = System.Net.CredentialCache.DefaultCredentials; SPlists.Lists listsService=nowy SPlists.Lists(); } } Obawiam się, że nie jest to dobra abstrakcja OOP, ponieważ aby stworzyć tę usługę w innym miejscu w mojej aplikacji, potrzebowałbym następującego kodu: class someClass { public void someMethod() { SharepointServiceCreator s=new SharepointServiceCreator () SPlists.Lists listService=s.createService() } } Konieczność użycia deklarowania instancji `listService` w `someMethod` jako typu `SPlists.Lists` wydaje się błędna, ponieważ oznacza, że `someClass` musi wiedzieć, jak Zaimplementowano program „SharepointServiceCreator”. Czy to jest w porządku?


title: Jaka gałąź informatyki obejmuje rozpoznawanie obiektów na obrazach?

text: Kilka zastosowań tego to rozpoznawanie tekstu (OCR), rozpoznawanie twarzy (biometria), pociski kierowane kamerą (systemy celowania). Każdy z nich polega na analizie obrazów i sporządzeniu jakiegoś przedmiotu zainteresowania. **Czy istnieje termin opisujący tę gałąź programowania?**


title: Praca z wektorami i transformacjami

text: Zamierzam napisać graficzną aplikację 2D, która pozwala użytkownikowi tworzyć wielokąty i przekształcać je poprzez transformacje, takie jak obrót i tak dalej. Miałem nadzieję, że ktoś może podać argumenty za i przeciw dla różnych wyborów, które mam na myśli. (To wszystko w Javie!) a). Reprezentuj wektory, wypełniając macierze liczbami rzeczywistymi. Oznacza to stworzenie struktury danych macierzowych, która obsługuje mnożenie, transpozycję itp. b). Stwórz własną klasę wektorową, tak abym mógł stworzyć klasę macierzową, która obsługuje te wektory.


title: Problem z kodowaniem arytmetycznym

text: Od kilku dni walczę o implementację kodowania arytmetycznego. Znalazłem naprawdę świetne źródło informacji, które pozwoliło mi zrozumieć, jak to powinno działać. Krótko mówiąc, implementuje kodowanie arytmetyczne na liczbach całkowitych przy użyciu dwóch rejestrów: WYSOKIEGO i NISKIEGO. Te rejestry przechowują ułamek, np. HIGH = 98765 //oznacza 0,98765(9) LOW = 91234 // oznacza 0,91234(0) Potem przychodzi magia, gdy najbardziej znaczące liczby pasują (w tym przypadku byłyby to 9s) są one drukowane. Wszystko jest dla mnie jasne. Jednakże, gdy weźmiemy pod uwagę następujący przykład WYJŚCIE SKUMULOWANE WYSOKI NISKI ZAKRES Stan początkowy 99999 00000 100000 Kod B (0,2-0,3) 29999 20000 Shift out 2 99999 00000 100000 .2 Kod I (0,5-0,6) 59999 50000 .2 Shift out 5 99999 00000 100000 0,25 Kodowanie L (0,6-0,8) 79999 60000 20000 0,25 //tu zaczyna się problem Kodowanie L (0,6-0,8) 75999 72000 0,25 //jak to możliwe? Wyjście 7 59999 20000 40000 0,257 Kod SPACJA (0,0-0,1) 23999 20000 0,257 Wyjście 2 39999 00000 40000 0,2572 Kod G (0,4-0,5) 19999 16000 0,2572 Wyjście 1 99999 60000 40000 0,25721 Kod A (0,1 -0,2) 67999 64000 .25721 Wyjście 6 79999 40000 40000 .257216 Kod T (0.9-1,0) 79999 76000 .257216 Wyjście 7 99999 60000 40000 .2572167 Kod E (0,3-0,4) 75999 72000 .2572167 Wyjście 7 59999 20000 40000 .25721677 Koduj S (0,8-0,9) 55999 52000 .25721677 Wysuń 5 59999 20000 .257216775 Wysuń 2 .2572167752 Wysunij 0 .25721677520 Naprawdę nie wiem jak na komputerze osiąga się zaznaczone linie, na papierze i to proste, ponieważ: /* zakres, WYSOKI, NISKI - liczba całkowita symbol->wysoki, symbol->niski - rzeczywisty */ WYSOKI = WYSOKI - (zakres - symbol->wysoki*zakres) LOW = NISKI + zakres*symbol-> niski Ale na komputerach? Pojawia się niedokładność liczb rzeczywistych i moje interwały są znacznie różne. [0; 99999) 100000 b [0,2; 0,3) [20000; 29999) 100000 ===> 2 [0; 99999) 100000 i [0,5; 0,6) [50000; 59998) 100000 ===> 5 //niedokładność [0; 99989) 99990 l [0,6; 0,8) [59993; 79990) 19998 l [0,6; 0,8) [71991; 75990) 19998 ===> 7 [19910; 59909) 40000 [0; 0,1) [19910; 23908) 3999 g [0,4; 0,5) [21509; 21908) 3999 ===> 2 [15090; 19089) 3999 ===> 1 [50900; 90899) 40000 a [0,1; 0,2) [54900; 58898) 40000 ===> 5 [49000; 88989) 39990 t [0,9; 1) [84991; 88988) 39990 ===> 8 [49910; 89889) 39980 e [0,3; 0,4) [61904; 65900) 39980 ===> 6 [19040; 59009) 39970 s [0,8; 0,9) [51016; 55011) 39970 ===> 5 zakodowano: 257215865 Byłbym wdzięczny za wszelką pomoc.


title: Zapobieganie ewentualnemu wypaleniu u junior dev, a może nie robię wystarczająco dużo?

text: Jestem programistą z 5-letnim doświadczeniem w 3 firmach. W ciągu ostatniego roku u mojego obecnego pracodawcy rozpoczął pracę junior (nowy w branży). Uważam, że jest doskonałym programistą, który zawsze dostarcza i ma umiejętności rozwiązywania złożonych problemów. Jednak obawiam się, że prawdopodobnie przykłada się _za dużo_ z następujących powodów: * Rozpoczyna pracę około 2 godzin przed większością (i jest to oczekiwane) * W wolnym czasie opracował aplikację, która wyraźnie trwała ** miesiące* * wartość pracy, która jest charakterystyczna dla naszego pracodawcy Ja i zespół jesteśmy całkowicie wdzięczni za wszystko, co robi, i wyraźnie stanowimy atut naszego zespołu. Martwię się jednak, że jest to **_nie do utrzymania_**. Niemal widzę, że ma taki sam entuzjazm, jak ja, kiedy zacząłem kodować do pracy, jednak z biegiem lat zdałem sobie sprawę, że zajęcia dodatkowe nie tylko nie rozwijają twojej kariery, ale pochłaniają cały twój ważny wolny czas. Pytanie, które zadaję, brzmi: **Czy powinienem mu doradzić, aby działał trochę wolniej? A może muszę się od niego uczyć i robić więcej dla mojego pracodawcy poza godzinami pracy?**


title: Jak określić lokalizacje, w których klienci mogą rozwiązywać problemy z autoryzacją w REST API?

text: Pracuję nad projektem API, w którym uwierzytelnianie użytkownika będzie weryfikowane przez obecność ważnego biletu uwierzytelniania formularzy w pliku cookie sesji. Istnieją jednak dodatkowe poziomy dostępu, które mogą istnieć dla określonych adresów URL zasobów. Przy próbie uzyskania do nich dostępu wydaje się, że zwrócenie 401 byłoby najwłaściwszą odpowiedzią. Jednak zazwyczaj obsługujemy 401s poprzez przekierowanie na stronę logowania. Nie byłby to prawidłowy sposób postępowania dla klientów na niektórych zasobach, w przypadku których wymagany jest dodatkowy krok (np. weryfikacja poczty e-mail, rejestracja w określonej roli). **Czy istnieje standardowy sposób komunikowania się, gdzie należy się udać podczas odpowiadania za pomocą 401?** Kusi mnie, aby umieścić coś w nagłówku Location, ale wydaje się to odpowiednie tylko dla 302 sekund po POST. Niechętnie też używam adresów URL do określania, dokąd się udać, ponieważ klienci mogą nie być ograniczeni do przeglądarek. **Czy są jakieś dobre przykłady lub dokumenty dotyczące standardów, do których mogę się odwołać?**


title: Jak wykonać pewne czynności w moim programie Java za każdym razem, gdy pojawia się określony interfejs sieciowy?

text: Chciałem wykonać pewne czynności w moim programie Java za każdym razem, gdy pojawia się określony interfejs (np. interfejs sieciowy ppp0). Jednak doszedłem do wniosku, że było to zbyt niezgrabne, aby dalej odpytywać interfejs, aby zweryfikować jego status. Po znalezieniu pliku `if-up.local` w Linuksie, teraz mogę uruchamiać skrypt bash za każdym razem, gdy pojawia się interfejs. Działa dobrze, jednak biorąc pod uwagę mój uruchomiony program Java, jak mogę sprawić, by ten skrypt współdziałał z moim kodem Java? Rozważam następujące opcje: 1. Napisz gniazdo nasłuchujące iz tego skryptu wyślij wiadomość do tego gniazda Java. 2. Wywołaj program w C i za pomocą JNI uruchom mój kod java. Szukam intuicyjnego i mniej zasobochłonnego podejścia.


title: Testy jednostkowe a testy integracyjne

text: Jaka jest różnica między testowaniem jednostkowym a testowaniem integracyjnym, jeśli chodzi o tworzenie stron internetowych (gdzie 90-95% kodu opiera się na bazie danych)? Jedną rzeczą, o której tutaj przez cały czas, jest to, że testy jednostkowe nie powinny zajmować się bazami danych, a testy integracyjne powinny. Problem, jaki mam z tym, polega na tym, że dla mnie oznacza to, że jedyną różnicą między testowaniem jednostkowym a testowaniem integracyjnym jest źródło danych, a jeśli tak jest, testujesz tę samą funkcjonalność. Jeśli testowana funkcjonalność jest taka sama, po co zawracać sobie głowę testowaniem jednostkowym i zawsze testować w oparciu o bazę danych?


title: Podejście do przesyłania formularzy z wieloplatformowej aplikacji natywnej/hybrydowej z niestabilnym połączeniem internetowym

text: Przepraszam za długie pytanie, ale chcę mieć pewność, że jasno zdefiniowałem mój problem. Na potrzeby mojej pracy magisterskiej (inżynieria lotnicza, więc niewielkie doświadczenie w programowaniu) chcę stworzyć (prototypową) aplikację mobilną, która ułatwi zgłaszanie zdarzeń związanych z bezpieczeństwem w lotnictwie afrykańskim. Chociaż treść mojej pracy magisterskiej skupia się na bardziej technicznych i socjologicznych aspektach bezpieczeństwa (zarządzania), postanowiłem zamieścić kilka praktycznych projektów w celach demonstracyjnych. Biorąc pod uwagę kryteria, które przedstawię poniżej, moim pierwszym przypuszczeniem jest stworzenie aplikacji mobilnej przy użyciu PhoneGap lub czegoś podobnego. Ale życie nie może być takie proste, więc będę potrzebować czegoś więcej niż tylko tej pojedynczej struktury. Moje pytanie do Ciebie brzmi, jakie byłoby wygodne i skuteczne podejście, aby spełnić poniższy opis? Po prostu to sobie wyobrażam (w kategoriach laika): * Użytkownik (pilot, obsługa naziemna itp.) doświadcza lub zauważa zdarzenie związane z bezpieczeństwem * Użytkownik wypełnia formularz (Raport Bezpieczeństwa Lotniczego) o zdarzeniu na swoim/ jej telefon * Dodatkowe informacje (zdjęcia/filmy) są załączone * Po uzyskaniu stabilnego połączenia internetowego (jesteśmy w Afryce) raport/formularz jest przesyłany na serwer. Ważnymi uwagami są tutaj: * Ograniczona dostępność internetu -> Potrzebuję natywnego/samodzielnego rozwiązania/aplikacji, aby zgłaszający nie musiał czekać z raportowaniem i który przechowuje dane i przesyła je, gdy tylko jest to możliwe. * Nie chcę - ani nie powinienem - wykluczać potencjalnych użytkowników (z wielu powodów) -> Aplikacja powinna być dostępna na jak największej liczbie platform (zwłaszcza BlackBerry i Symbian są nadal bardzo popularne w Afryce!). * Robię to jako formę pomocy rozwojowej i chcę, żeby była tanio dostępna -> najlepiej open source. W sumie można zdefiniować następujące kryteria: Powinna * być open-source * obsługiwać wiele platform * zezwalać na załączanie plików (głównie zdjęcia) * być samodzielna/natywna * obsługiwać/zezwalać na usługi sieciowe * zapewniać geolokalizację i obsługę daty/godziny ( zautomatyzuj zgłaszanie miejsca pobytu) * zezwalaj na używanie aparatu do bezpośredniego dołączania (opcjonalne, ale preferowane) * identyfikuj połączenie internetowe i przesyłaj dane, gdy tylko jest to możliwe * przechowuj dane do momentu ich wysłania Poza PhoneGap (który nie obsługuje przeglądania biblioteki obrazów? -> najwyraźniej jest to możliwe , patrz dokumentacja pomocnicza), wziąłem pod uwagę następujące frameworki: * Mobl (nie testowano dla wszystkich głównych platform, brak obsługi daty/godziny?) * QuickConnect (nie obsługuje BlackBerry i Symbian) * Rhodes (spełnia moje wymagania jak dla mnie widać) * Appspresso (nie obsługuje BB i Symbiana, brak selektora dat) Przeczytałem następujący wątek na stackoverflow: * jak mogę wysłać dane formularza z natywnej aplikacji mobilnej jquery do remo serwer? * Phonegap - Wybierz obraz z galerii


title: Jak aktualizować działające witryny internetowe za pomocą zmian w kodzie?

text: Wiem, że to bardzo podstawowe pytanie. Gdyby ktoś mógł mnie pocieszyć i powiedzieć, jak sobie z tym poradzi, byłbym wdzięczny. Zdecydowałem się to opublikować, ponieważ mam zamiar zainstalować SynchToy, aby rozwiązać poniższy problem, i czuję się trochę nieprofesjonalnie używając „Zabawki”, ale nie mogę wymyślić lepszego sposobu. Wiele razy stwierdzam, że w takiej sytuacji brakuje mi jakiegoś boleśnie oczywistego sposobu działania – wynika to z bycia jedynym programistą w firmie. * Aplikacja webowa ASP.NET napisana na moim komputerze w pracy * Rozwiązanie posiada 2 projekty: * Strona internetowa (pliki) * WebsiteLib (C#/dll) * Korzystanie z repozytorium Git * Wdrożona na serwerze WWW GoGrid 2008R2 Wdrożenie: 1. Wprowadź zmiany w kodzie . 2. Naciśnij na Git. 3. Zdalny pulpit na serwer. 4. Wyciągnij z Git. 5. Zastąp pliki na żywo, przeciągając / upuszczając za pomocą eksploratora Windows. W kroku 5 usuwam wszystkie pliki z katalogu głównego witryny... to nie może być dobre. Dlatego mam zamiar zainstalować SynchToy... **AKTUALIZACJA:** DZIĘKUJĘ za wszystkie przydatne odpowiedzi. Nie mogę wybrać, na którą z nich zaznaczyć odpowiedź - między korzystaniem z wdrożenia internetowego - wygląda na to, że mam kilka przydatnych sugestii: 1. Projekt Web = cała witryna spakowana w jedną bibliotekę DLL - minusem dla mnie nie mogę przesyłać prostych aktualizacji - będąc samotnym programistą w firmie liczącej 50 osób, pozostaje to czasami prostsze. 2. Przeciągnięcie prosto z SCM do głównego katalogu witryny — początkowo nie robiłem tego z obawy, że mój ukryty katalog SCM może zostać ujawniony, ale odpowiedzi tutaj pomogły mi to przezwyciężyć (chociaż nadal nie lubię o jeszcze jedną rzecz do zmartwienia, zapominając o upewnieniu się, że nadal jest prawdziwa w czasie) 3. Korzystanie z farmy sieciowej i systematyczne wdrażanie do węzłów - jest to idealne rozwiązanie dla zerowego przestoju, na czym właściwie zależy mi, ponieważ strona jest zasadniczo źródło dochodów w czasie rzeczywistym dla mojej firmy – może trudno mi jednak przekonać ich do podwojenia kosztów serwerów. \--> wreszcie, ponowne egzekwowanie podstawowej zasady, że musi być wdrożenie dla witryny jednym kliknięciem LUB JESZCZE COŚ NIEPRAWIDŁOWEGO jest prawdopodobnie najbardziej użyteczną rzeczą, jaką wyciągnąłem z odpowiedzi. **AKTUALIZACJA 2:** Myślałem, że wrócę do tego i zaktualizuję rzeczywistym rozwiązaniem, które działa już od wielu miesięcy i działa idealnie (dla mojego pojedynczego rozwiązania serwera WWW). Proces, którego używam, to: 1. Wprowadź zmiany w kodzie 2. Prześlij do Git 3. Zdalny pulpit na serwer 4. Pobierz z Git 5. Uruchom następujący skrypt wsadowy: cd C:\Users\Administrator %systemroot%\system32\inetsrv\ appcmd.exe zatrzymaj witrynę "/site.name:Default Web Site" robocopy Documents\code\da\1\work\Tree\LendingTreeWebSite1 c:\inetpub\wwwroot /E /XF connectionsconfig Web.config %systemroot%\system32\inetsrv \appcmd.exe strona startowa "/site.name:Default Web Site" Jak widać, powoduje to wyłączenie witryny, wykorzystuje robocopy do inteligentnego kopiowania zmienionych plików, a następnie przywraca witrynę z powrotem. Zwykle działa w mniej niż 2 sekundy. Ponieważ szczytowy ruch w tej witrynie wynosi około 2 żądań na sekundę, brak 4 żądań na aktualizację witryny jest akceptowalny. Odkąd stałem się bardziej biegły w Git, odkryłem, że pierwsze cztery kroki powyżej bycia „procesem ręcznym” są również do zaakceptowania, chociaż jestem pewien, że mógłbym skręcić całość jednym kliknięciem, gdybym chciał. Dokumentacja AppCmd.exe jest tutaj. Dokumentacja Robocopy jest tutaj.


title: Współbieżność ze słuchaczami i przesyłanie: czy to rozwiązanie brzmi?

text: Pracuję nad aplikacją na Androida. Mamy detektory danych pozycji i przechwytywania kamery, które są synchronizowane w wątku w tle (nie usługa). Wątek czasomierza dyktuje, kiedy obraz jest przechwytywany, a także kiedy dane są buforowane w lokalnej bazie danych sqlite. Tak więc moje pytanie brzmi, jak prawidłowo przechowywać dane o lokalizacji, które pojawiają się na podstawie słuchaczy i pobierać te dane, aby baza danych mogła zostać zaktualizowana podczas wykonywania przechwytywania z kamery. Nie mogę umieścić danych o lokalizacji w bazie danych po ich otrzymaniu, ponieważ są one przetwarzane częściej niż obrazy z kamer, a obrazy z kamer dominują w tej chwili w architekturze. (Dane lokalizacyjne są uzupełnieniem). Potrzebuję jednak danych o lokalizacji, aby uzyskać przybliżoną lokalizację miejsca, w którym został przechwycony obraz. Moją pierwszą myślą było, aby singleton przechowywał dane o lokalizacji. I mieć semafor na metodzie getInstance, więc jeśli następuje aktualizacja bazy danych (po przechwyceniu obrazu) nie mamy błędu. Dane lokalizacyjne mogą czekać na aktualizację bazy danych lub mogą zostać utracone w przypadku tego konkretnego zdarzenia, co tak naprawdę nie ma znaczenia. Jakie myślisz? Czy jestem na dobrej drodze? (A czy to jest właściwa podstrona, czy lepiej na stackoverflow?)


title: Ostatni język programowania dla AI?

text: Przez kilkadziesiąt lat preferowanym językiem programowania dla AI był Prolog lub LISP, a także kilka innych, mniej znanych. Większość z nich została zaprojektowana przed latami 70-tymi. Zmiany zdarzają się często w wielu innych specyficznych językach domen, ale w domenie AI nie pojawiły się tak bardzo, jak w specyficznych językach internetowych lub skryptach itp. Czy istnieją ostatnie języki programowania, które miały zmienić grę w AI i nauczyć się z niedostatków dawnych języków?


title: Czy czytanie beletrystyki poprawia umiejętność czytania materiałów technicznych?

text: Czy ktoś wie o badaniu lub osobiście był świadkiem jakiejkolwiek zmiany lub braku zmian w technicznych umiejętnościach czytania po spędzeniu dużej ilości czasu na czytaniu beletrystyki?


title: Obsługa błędów, dziwactw lub irytacji w nagłówkach dostarczonych przez dostawców

text: Jeśli plik nagłówkowy dostarczony przez dostawcę czegoś, z czym kod musi wchodzić w interakcję, jest w jakiś sposób niepełny, w jakich przypadkach lepiej: 1. Obejdź braki nagłówka w kodzie głównym 2. Skopiuj plik nagłówkowy do lokalnego projektu i napraw go 3. Napraw plik nagłówkowy w miejscu, w którym jest przechowywany jako narzędzie dostarczone przez dostawcę 4. Napraw plik nagłówkowy w centralnym miejscu, ale także zrób kopię lokalną i staraj się, aby dwa były zawsze zgodne 5. Czy coś innego Jako przykład, plik nagłówkowy dostarczony przez ST Micro dla serii STM320LF zawiera wiersze: typedef struct { __IO uint32_t MODER; __IO uint16_t OTYPER; uint16_t ZAREZERWOWANE0; .... __IO uint16_t BSRRL; /* Rejestr BSRR jest podzielony na 2 * 16-bitowe pola BSRRL */ __IO uint16_t BSRRH; /* Rejestr BSRR jest podzielony na 2 * 16-bitowe pola BSRRH */ .... } GPIO_TypeDef; W sprzęcie iw dokumentacji sprzętu BSRR jest opisany jako pojedynczy rejestr 32-bitowy. Około 98% czasu, gdy ktoś chce pisać do BSRR, będzie zainteresowany tylko napisaniem górnej lub dolnej połowy; dlatego wygodnie jest móc używać BSSRH i BSSRL jako sposobu pisania połowy rejestru. Z drugiej strony zdarzają się sytuacje, w których konieczne jest zapisanie całego rejestru 32-bitowego jako pojedynczej operacji atomowej. "Optymalnym" sposobem napisania tego (pomijając problemy z białymi odstępami) byłoby: typedef struct { __IO uint32_t MODER; __IO uint16_t OTYPER; uint16_t ZAREZERWOWANE0; .... union // Zezwól na dostęp do BSRR jako rejestr 32-bitowy lub dwa rejestry 16-bitowe { __IO uint32_t BSRR; // 32-bitowy rejestr BSSR jako całość struct { __IO uint16_t BSRRL, BSRRH; };// Dwie 16-bitowe części }; .... } GPIO_TypeDef; Gdyby struktura została zdefiniowana w ten sposób, kod mógłby używać BSRR, gdy jest to konieczne, aby zapisać wszystkie 32 bity, lub BSRRH/BSRRL, gdy zapisywano 16 bitów. Biorąc pod uwagę, że nagłówek nie jest w ten sposób, lepszym rozwiązaniem byłoby użycie nagłówka bez zmian, ale zastosowanie złego rzutowania typu w głównym kodzie, pisząc to, co idiomatycznie zapisano jako `thePort->BSRR = 0x12345678;` jako `* ((uint32_t)&(thePort->BSSRH)) = 0x12345678;`, czy byłoby lepiej użyć załatanego pliku nagłówkowego? Jeśli to drugie, gdzie powinienem przechowywać załatany plik i jak nim zarządzać? **Edycja** W pliku danych tego dostawcy, rejestry urządzeń I/O są definiowane przy użyciu definicji struktur, takich jak powyżej, z definicjami makr, takimi jak `#define GPIOB (*((struct GPIO_TypeDef*)GPIO_BASE + 0x100))`. Ponieważ `GPIOA`, `GPIOB` itp. są zdefiniowane jako makra, a nie jako identyfikatory, każde podstawienie makra `GPIO_TypeDef`, które zacznie obowiązywać po zdefiniowaniu struktury, wpłynęłoby na przyszłe zastosowania tego typu, ale dotyczyłoby również `GPIOA`, ` GPIOB` itp. Tak więc, moim obecnym zamiarem byłoby zdefiniowanie własnego pliku nagłówkowego dla całego projektu, który `#include` jest plikiem dostawcy, a następnie zdefiniowanie mojej własnej struktury i zastąpienie makr nazwą mojej struktury nazwą dostawcy. To pozwoliłoby na napisanie kodu tak, aby używał rejestrów w normalny idiomatyczny sposób, przy użyciu definicji dostarczonych przez dostawcę dla prawie wszystkiego innego i zapewniając jasny punkt poprawek.


title: Czy kolejność uczenia się ma znaczenie w tworzeniu stron internetowych?

text: Muszę się nauczyć wielu rzeczy: CSS, HTML, C#, **JavaScript** , ASP.NET, SQL Czy kolejność ma tu znaczenie? Na przykład, czy lepiej nauczyć się C# przed HTML, czy odwrotność może być lepsza?


title: jaki jest obiektowy odpowiednik haskell / coq

text: Posiadam szczegółowe informacje o najnowszych osiągnięciach w programowaniu funkcjonalnym. Myślę, że haskell jest dość zaawansowanym i wysokopoziomowym językiem programowania. Z coq i agdą staje się to jeszcze bardziej złożone i zaawansowane. Przez „zaawansowany” i „wysoki poziom” mam na myśli wiele odrębnych cech, które można znaleźć tylko w poszczególnych językach. Podobnie jak w przypadku haskella * domyślnie wszystko jest czyste i leniwe * obsługa zaawansowanych pojęć, takich jak GADT, monady, funktory itp. Dla coq / agda * system typów zależnych I zarówno haskell, jak i coq są używane w środowisku akademickim, dobry znak, że są „najnowocześniejszy”. Jednak nie mam pojęcia, jakie są porównywalne osiągnięcia w programowaniu obiektowym. Jakie są najnowsze osiągnięcia w programowaniu obiektowym? Jaki byłby najnowocześniejszy odpowiednik języka OOP dla haskell / coq? (Szukam nawet zaawansowanego języka programowania w google, ale znalazłem głównie informacje związane z haskellem. Jedyny język, o którym mogłem pomyśleć, to D 2.0. Scala jest dla mnie głównie zgodną z javą wersją haskella.)


title: Czy można napisać uogólnioną funkcję odwracania ciągów, która działa dla wszystkich lokalizacji i typów ciągów?

text: Właśnie oglądałem prezentację Jona Skeeta (z Tony the Pony) z DevDays Chociaż „napisz funkcję odwrotną ciągu” to wywiad dotyczący kodowania 101 – nie jestem pewien, czy rzeczywiście można napisać ogólną funkcję odwracania ciągów znaków, na pewno nie taki, który działa we wszystkich lokalizacjach i wszystkich typach stringów. Oprócz wykrywania, czy ciąg wejściowy to ascii, UTF8, UTF16 (stała i zmienna długość) itp. Istnieje kod „zastosuj akcent do następnego znaku” (U+0301), który podświetlił Jon. Są też ligatury, które mogą lub nie mogą być wyświetlane lub zakodowane jako podwójne znaki. Wygląda na to, że „odwrócenie łańcucha” jest w rzeczywistości jednym z trudniejszych zadań informatyki!


title: Czy powinienem zgodzić się na napisanie niezabezpieczonego kodu, jeśli mój pracodawca mnie o to poprosi?

text: Mój pracodawca poprosił mnie o zaimplementowanie funkcji, która wymagałaby przechowywania haseł w postaci zwykłego tekstu w bazie danych (lub korzystania z niejasnej funkcji szyfrowania/odszyfrowywania przechowywanej w postaci binarnej, co jest nieco lepsze, ale także niebezpieczne). Odpowiedziałem, że jestem gotów zaimplementować taką funkcję, pod warunkiem, że klienci będą mieli świadomość konsekwencji związanych z bezpieczeństwem podczas korzystania z niej. Omawiając ten problem z kolegami, ktoś powiedział mi, że jako inżynier oprogramowania jesteśmy osobiście odpowiedzialni (w sensie prawnym) za problemy bezpieczeństwa, które wprowadzamy w naszych produktach. Zajrzałem do mojej umowy, ale nie znalazłem niczego związanego z podobną sprawą. Czy z prawnego punktu widzenia powinienem odmówić wdrożenia takiej funkcji? Czy to prawda, że mój pracodawca może pozwać mnie do sądu, jeśli klient dozna szkody z powodu tej funkcji, nawet jeśli był świadomy obaw związanych z bezpieczeństwem? * * * _EDYTUJ:_ Rozumiem, że na to pytanie można udzielić rzetelnej odpowiedzi tylko od prawnika. To samo dotyczy pytań licencyjnych: ludzie tutaj przekazują swoje zrozumienie i swoje doświadczenie, czasami po konsultacji z prawnikiem, bez gwarancji, że ma to zastosowanie w innej jurysdykcji. Ale licencjonowanie jest wyraźnie akceptowane jako temat tutaj, zobacz Jakie pytania mogę tutaj zadać?. Uważam, że inni programiści mogą mieć ten sam problem, a inni mogli mieć do czynienia z taką sytuacją wcześniej i mogli skonsultować się z prawnikiem w tej sprawie.


title: Co decyduje o tym, kiedy komputer jest uważany za „klienta”?

text: W tworzeniu stron internetowych terminy _"serwer"_ i _"klient"_ są często używane podczas omawiania sposobu żądania stron w sieci. Jest również szeroko stosowany, gdy mówimy o PC, telefonie, tabletach itp. Pytanie, które przyszło mi do głowy, to co kwalifikuje komputer do uznania go za klienta? Spojrzałem na ten artykuł z wikipedii i zauważyłem, że klienci są uważani za _zgłaszających usługi_, podczas gdy serwery są uważane za _dostawców usług_. Jeśli to prawda, czy wszystkie komputery żądające usługi w pewnym sensie nie mogą być uważane za klientów? Zauważyłem stereotyp, że komputer kliencki jest zwykle równoznaczny z komputerem „konsumenckim”, ale według wikipedii nie jest to do końca dokładne. Masz pomysł, jak narysować granicę w tym powszechnym scenariuszu?