title: Biblioteki niezależne od języka, które każdy programista powinien rozważyć?

text: Zakładając, że język to zapewnia, jakie są rzeczy do zrobienia lub biblioteki do użycia, które każdy programista powinien wiedzieć? Moja lista to * Wyrażenia regularne * Potoki nazwane * Standardowe IO (std in/out/error) * Wykonywanie zewnętrznych plików wykonywalnych (takich jak imagemagik i własne skrypty) * Jak przechwycić stronę http jako ciąg (głównie w celu aktualizacji i pobierania konfiguracji z serwerów) mam podobne pytania dotyczące narzędzi. Również szukam konkretnych odpowiedzi. nie chcę odpowiedzi, które można zrobić na różne sposoby (na przykład nauczyć się synchronizować wątki). Wiem, jak to zrobić w 3+ językach. Wydaje się, że zawsze są rzeczy, których programiści nie potrafią zrobić, a które mogą ułatwić im życie. Najdłużej nie wiedziałem, co to jest wyrażenie regularne (choć słyszałem o tym) i byłem zaskoczony, jak wiele osób próbowało stworzyć toolchain lub złożoną aplikację i nie wiedziało, jak (lub że można) uzyskać standardowe wyjście z uruchomionego pliku exe (sprawdzili błędy w bardzo dziwny sposób lub po prostu nie zrobili tego i mają nadzieję, że przyniesie oczekiwane rezultaty). Jak myślisz, co jest przydatne, mało znane i powinno być czymś, co powinien wiedzieć każdy starszy (lub początkujący) programista?


title: Czy kandydata można oceniać prosząc o napisanie złożonego programu na „papierze”?

text: Kiedyś w wywiadzie zostałem poproszony o napisanie następującego programu: * * * _W klawiaturze telefonu komórkowego jest mapowanie między cyframi a znakami. np. 0 & 1 odpowiada nic; 2 odpowiada „a”, „b”, „c”; 3 odpowiada „d”, „e”, „f”; ...; 9 odpowiada „w”, „x”, „y”, „z”_. _Użytkownik powinien wprowadzić dowolną liczbę (np. 23, 389423, 927348923747293), a wszystkie kombinacje tych mapowań znaków powinienem zapisać w jakiejś strukturze danych. Na przykład, jeśli użytkownik wprowadzi „23”, to możliwe kombinacje znaków to_ : > ad, ae, af, bd, be, bf, cd, ce, cf _lub jeśli użytkownik wpisze „4676972”, to może być_ , > gmpmwpa, gmpmwpb , ..., hnroxrc, ..., iosozrc * * * Ankieter powiedział, że ludzie napisali na to kod w ciągu 20-30 minut!! Nalegał też, żebym **pisała na papierze**. Jeśli piszę kod, to mam tendencję do pisania kodu produkcyjnego, nawet jeśli nie można tego ode mnie oczekiwać. Dlatego zawsze staram się myśleć o wszystkich aspektach, takich jak _optymalizacja, czytelność, konserwowalność, rozszerzalność_ i tak dalej. Biorąc to wszystko pod uwagę, poczułem, że powinienem pisać na PC i potrzebuje to porządnych 2 godzin. W końcu po 25 minutach udało mi się wymyślić tylko koncepcję i kilka rozbitych fragmentów kodu (nie wspominając o moim odrzuceniu). Moje pytanie nie jest odpowiedzią na powyższy program. Chcę wiedzieć, że **czy to właściwy sposób na ocenę kalibru osoby**? Czy się mylę / zbyt wolno w szacunkach? Czy jestem zbyt idealistyczny?


title: Jak mam obsłużyć przekierowanie do dostawcy tożsamości podczas żądania danych interfejsu API sieci Web?

text: # Scenariusz Mam jednostronicową aplikację internetową składającą się wyłącznie z html, css i javascript. Po początkowym załadowaniu i podczas użytkowania aktualizuje różne widoki danymi z jednego lub więcej interfejsów API RESTful za pośrednictwem wywołań ajax. Wywołania interfejsu API zwracają dane w formacie json. Każde webowe API może być hostowane w niezależnych domenach. # Pytanie Podczas wywołania ajax, jeśli mój token autoryzacyjny nie zostanie uznany za ważny przez webowe API, webowe API przekieruje mnie (302) do dostawcy tożsamości dla tego konkretnego API. Ponieważ jest to objaśnienie ajax dla danych, a niekoniecznie do wyświetlania, muszę znaleźć sposób na wyświetlenie strony uwierzytelniania dostawcy tożsamości. Wygląda na to, że powinienem złapać to przekierowanie i otworzyć inny widok, aby wyświetlić stronę logowania dostawcy tożsamości. Po zakończeniu serii przekierowań Oauth muszę pobrać token i ponownie uruchomić wywołanie danych ajax z dołączonym tokenem. Czy jest to poprawne podejście, a jeśli tak, czy są jakieś przykłady pokazujące obsługę przekierowań przez ajax?


title: Dlaczego strony internetowe ograniczają liczbę i wybór znaków w haśle?

text: Rejestrując się teraz na stronie internetowej towarzystwa ubezpieczeniowego, moje hasło ma 16 znaków, używając różnych liter, cyfr, znaków specjalnych itp. Jednak oto ich lista ograniczeń: > Zanotuj swoje hasło: > > * musi być pomiędzy 6 i 12 znaków > * nie może zawierać spacji, znaków specjalnych/międzynarodowych > * nie może zawierać nazwy użytkownika, imienia ani nazwiska > * uwzględnia wielkość liter > * powinno zawierać co najmniej 1 cyfrę i 1 literę > Rozumiem minimum 6 znaków, nie zezwala na części Twojego imienia, rozróżnia wielkość liter i wymaga co najmniej 1 cyfry i litery. Część, której nie rozumiem, to ograniczenie wyboru postaci, których możesz użyć, i posiadanie górnej granicy. Dlaczego strony internetowe to robią? Jedyne, co mogę o tym pomyśleć, nie znają podstaw haszowania hasła, które zabezpieczyłoby je lepiej niż cokolwiek innego i pozbyłoby się wszelkich obaw związanych z bezpieczeństwem. Jeśli zdecyduję się na wpisanie `DELETE FROM users WHERE 1=1` jako moje hasło, powinno mi się na to pozwolić. Hash MD5 PHP staje się `fe5d54132b51b7d65ab89b739b600b4b`, co nie sądzę, aby cokolwiek zaszkodziło.


title: Jak napisać dobry kod z nowymi rzeczami?

text: Zawsze staram się pisać czytelny kod, który ma dobrą strukturę. Mam szczególny problem, gdy bawię się czymś nowym. Ciągle zmieniam kod, strukturę i wiele innych rzeczy. W końcu patrzę na kod i denerwuje mnie, jak bardzo się skomplikowało, gdy próbowałem zrobić coś tak prostego. Kiedy coś skończę, mocno to refaktoruję, aby było czystsze. Dzieje się tak przez większość czasu po zakończeniu i jest denerwujące, ponieważ im większy kod, tym bardziej denerwujący jest jego przepisywanie. Jestem ciekaw, jak ludzie radzą sobie z taką agonią, zwłaszcza przy dużych projektach dzielonych między wiele osób ?


title: Jak radzisz sobie ze zmianami w frameworkach open source, których używasz w swoich projektach?

text: To może być moje osobiste dziwactwo, ale lubię aktualizować kod w żywych projektach - w tym biblioteki/frameworki, z których korzystają. Częścią tego jest to, że uważam, że aplikacja internetowa jest bezpieczniejsza, jeśli jest w pełni załatana i aktualna. Częściowo jest to po prostu odrobina obsesyjnego przymusu z mojej strony. W ciągu ostatnich siedmiu miesięcy dokonaliśmy gruntownej przeróbki naszego oprogramowania. Porzuciliśmy framework Xaraya, który był powolny i praktycznie martwy jako produkt, i przekonwertowaliśmy go na Cake PHP. (Wybraliśmy Cake, ponieważ dało nam to szansę na bardzo szybkie przepisanie naszego oprogramowania i wystarczająco dużo zwiększenia wydajności w porównaniu z Xarayą, aby było warto.) Wdrożyliśmy testy jednostkowe za pomocą SimpleTest i śledziliśmy wszystkie pliki i bazy danych konwencje nazewnictwa itp. Cake jest teraz aktualizowany do wersji 2.0. I wydaje się, że nie ma realnej ścieżki migracji do aktualizacji. Konwencje nazewnictwa plików uległy radykalnej zmianie i porzucono SimpleTest na rzecz PHPUnit. To zmusi nas do pozostania przy gałęzi 1.3, ponieważ jeśli nie będzie jakiegoś narzędzia do konwersji, nie będzie możliwe aktualizowanie Cake, a następnie stopniowe ulepszanie naszego starszego kodu, aby czerpać korzyści z nowego frameworka Cake . Tak więc, jak zwykle, skończymy ze starym frameworkiem w naszym repozytorium Subversion i po prostu sami go załatamy w razie potrzeby. I to mnie za każdym razem dopada. Tak wiele produktów open source nie ułatwia aktualizowania opartych na nich projektów. Kiedy twórcy zaczną bawić się nową błyszczącą zabawką, kilka krytycznych poprawek zostanie wprowadzonych do starszych gałęzi, ale większość skupią się na nowej bazie kodu. Jak radzisz sobie z radykalnymi zmianami w projektach open source, z których korzystasz? A jeśli tworzysz produkt typu open source, czy masz na uwadze ścieżki aktualizacji podczas tworzenia nowych wersji?


title: Rodzaj sztucznej inteligencji, który rozwiąże ten problem?

text: Opublikowałem to na stackoverflow, ale chcę uzyskać twoje rekomendacje, a także użytkownik na overflow zalecił to tutaj. Od początku powiem, że nie jestem programistą, mam pobieżną wiedzę na temat różnych typów AI i jestem tylko biznesmenem budującym aplikację webową. W każdym razie aplikacja internetowa, w którą inwestuję, jest moim hobby. Istnieje wielu producentów części, producentów produktów, producentów aktualizacji i dodatków itp. dla sprzętu/produktów w branży tego hobby. Obecnie jestem w trakcie budowania platformy crowdsourcingowej dla ludzi, którzy mają wiedzę, aby wejść i zaznaczyć kompatybilność między tymi częściami, ponieważ nie zawsze jest to jasne, jeśli są na przykład: Producent A wytwarza produkt klasy „A”, a producent B wykonuje modernizację/część, która zazwyczaj pasuje do produktów klasy „A”, ale jest z jakiegoś powodu niekompatybilna z konkretnym produktem klasy „A” producenta A. Jednak dobry fragment (>60%-70%) produktów/części w bazie danych może mieć swoją kompatybilność wynikającą z ich właściwości, na przykład: Część 1 to typ „A” z odbiornikiem „X” mm, a część 2 to również typu "A" z interfejsem "X" mm, a zatem obie części są kompatybilne.. lub Część 1 to koło zębate 8 mm, więc wszystkie tuleje 8 mm od dowolnego producenta są kompatybilne z częścią 1. Co więcej, wszystkie koła zębate mogą mieć tylko relacje kompatybilności w bazie danych z tulejami i skrzyniami biegów, ale nie może być znaczącej kompatybilności między przekładnią a szyną lub odbiornikiem, ponieważ te części nie są ze sobą połączone. Teraz to, czego chcę, to sztuczna inteligencja, aby móc uczyć się na podstawie decyzji społeczności platform crowdsourcingowych i móc wnioskować o kompatybilności nowych części/produktów na podstawie ich oznaczonych atrybutów, rodzaju części itp. Co byłoby najlepsze forma sztucznej inteligencji, aby temu zaradzić? Myślałem o systemie eksperckim, ale jawne zaprojektowanie wszystkich reguł wiedzy byłoby zniechęcające ze względu na złożone relacje między dosłownie dziesiątkami tysięcy części, setkami typów części i wieloma producentami. Czy ANN (sieć neuronowa) byłaby idealna do uczenia się na podstawie wielu danych wejściowych/decyzji użytkowników platformy crowdsource? Każda pomoc / wkład są bardzo cenione.


title: Jak lepiej zintegrować środowisko programistyczne uniksowe z systemem Windows

text: Jestem głównie użytkownikiem systemu Windows, ale większość mojego rozwoju (głównie tworzenie stron internetowych) wykonuję za pomocą narzędzi i oprogramowania uniksowego. Od czasu do czasu korzystałem z dedykowanej maszyny wirtualnej lubuntu na Virtualbox, a używaniem niektórych narzędzi bezpośrednio w systemie Windows (msgit, python, django), ale żadne z tych podejść nie jest w pełni satysfakcjonujące. Chciałbym usłyszeć o sposobach innych deweloperów, aby lepiej zintegrować przepływ pracy uniksa z systemem Windows. Na przykład ściślejsza integracja między Linuksem, maszyną wirtualną i Windows. Włóczęgiczne demo pokazało, jak maszyna wirtualna może działać z folderu projektu systemu Windows i uważam, że to miłe. Chciałbym usłyszeć o innych narzędziach i wskazówkach, które pomogłyby naśladować przepływ pracy, który można znaleźć w systemie OS X (oczywiście rozumiem, że nie może być tak ściśle zintegrowany z systemem Windows, ponieważ nie ma tych samych podstaw uniksowych). PS: Próbowałem również cygwin EDIT, aby uzyskać wyjaśnienia na temat tego, czego mi brakuje (dzięki axblount za wskazanie tego): narzędzia unix, takie jak msys i inni, nie działają tak dobrze, jak ich rodzime odpowiedniki unix. Wiele skryptów, instalatorów wymaga dalszej konfiguracji lub w ogóle nie działa. Na przykład uruchomienie virtualenvwrappera nie jest zbyt proste. virtualbox: idealnie chciałbym używać oprogramowania Windows (photoshop, sublime text 2) bezproblemowo z linuxem. Najczęściej używam bankomatu klienta FTP do przenoszenia plików edytowanych po stronie Windows, co jest żmudnym procesem. **PODSUMOWANIE:** Wygląda na to, że nie ma ustalonych rozwiązań. Jako rozwiązanie tymczasowe prawdopodobnie spróbuję użyć natywnych wersji frameworków i bibliotek za pośrednictwem wiersza poleceń systemu Windows, jeśli to możliwe i przełączyć się na narzędzie takie jak vagrant dla niekompatybilnych programów. **WIĘCEJ INFORMACJI Z ODPOWIEDZI I KOMENTARZY:** Problem dotyczący rozróżniania wielkości liter wydaje się działać w przypadku okien, jak wskazał @GlenPeterson


title: Dlaczego rząd USA nie zezwala na używanie języków dynamicznych w bezpiecznych projektach?

text: Znam kilka osób, które obecnie pracują nad projektem dla wojska USA (niski poziom bezpieczeństwa, dane typu non-combat human resources). Początkowy stan kodu projektu został przekazany wojsku do przeglądu, a oni uruchomili program za pomocą jakiegoś narzędzia do analizy bezpieczeństwa. Zwrócił raport o znanych problemach z zabezpieczeniami w kodzie i wymagał zmian, które należało wprowadzić przed dostarczeniem produktu końcowego. Jedną z kwestii, które należało rozwiązać, było usunięcie części projektu, która została napisana w Ruby, ponieważ jest to język dynamiczny. Jakie jest tło/powód, dla którego nie zezwala się na używanie dynamicznego języka w bezpiecznym otoczeniu? Czy to rząd powoli przyjmuje nowe technologie? A może języki dynamiczne stanowią dodatkowe zagrożenie bezpieczeństwa w porównaniu z językami statycznymi (ala C++ lub Java)?


title: Jak wyświetlić błąd, gdy ustalam, jak wyświetlić błąd?

text: Napisałem API, które można skonfigurować tak, aby sygnalizowało błędy na różne sposoby (zwracane wartości, komunikaty debugowania lub wyjątki). Mam kontrolę w miejscu, gdy interfejs API jest po raz pierwszy inicjowany, aby zobaczyć, jakiego typu obsługi błędu żąda klient — co powinienem zrobić, gdy zażądają niezdefiniowanego typu obsługi błędów? Jest to podobne do „Gdzie mam zapisać błąd, którego nie mogę zapisać w pliku dziennika?” Czy idiom języka, czy śmiertelnie? Czy zgłaszam wyjątek, nawet jeśli nie pytają o obsługę wyjątków, prawdopodobnie nie opakowali wywołania w try/catch? Język, który piszę, nie ma typu ENUM, więc nie może to być błąd typu.


title: Przyczyna (post/pre) operatora inkrementacji w Javie lub C#

text: Ostatnio natknąłem się na pytanie dotyczące przewidywania danych wyjściowych kodu, który w dużym stopniu wykorzystuje operatory inkrementacji post/pre na liczbach całkowitych. Jestem doświadczonym programistą C, więc czułem się jak w domu, ale ludzie mówili, że Java po prostu ślepo skopiowała to z C (lub C++) i że jest to bezużyteczna funkcja w Javie. Biorąc to pod uwagę, nie jestem w stanie znaleźć dobrego powodu (zwłaszcza mając na uwadze różnicę między formularzami post/pre) w Javie (lub C#), ponieważ nie jest tak, że będziesz manipulować tablicami i używać ich jako ciągów w Javie . Poza tym to było dawno temu, kiedy ostatnio zaglądałem do kodu bajtowego, więc nie wiem, czy istnieje operacja `INC`, ale nie widzę żadnego powodu, dlaczego to dla(int i = 0; i < n; i + = 1) może być mniej skuteczne niż for(int i = 0; i < n; i++) Czy jest jakaś konkretna część języka, w której jest to naprawdę przydatne, czy jest to tylko funkcja, która ma na celu przyciągnięcie programistów C do miasta?


title: czy istnieje sposób na pozostawienie przy życiu notificationManager i alarmManger, nawet gdy aplikacja jest zamknięta?

text: jak poleciłbyś mi zaprojektowanie aplikacji na Androida, w której chcę 1) wysyłaj aktualizację lokalizacji co 10 minut 2) aby wyświetlić powiadomienie push Chcę, aby obie akcje były dostępne, nawet gdy aplikacja jest zamknięta. Tutaj mogę poprosić o wyjaśnienie, w jakich stanach „zamkniętych” może znajdować się aplikacja? a) usunięto ze stosu ostatnich zadań - zamknąć cały proces łącznie z jego usługami ? b) siły zamknięte - zamknąć cały proces łącznie z jego usługami ? c) inne? Używałem 1) menedżera alarmów, który wysyła oczekujący zamiar do odbiornika transmisji. 2) menedżer powiadomień Próbowałem zarejestrować wszystkich menedżerów przy użyciu kontekstu aplikacji zamiast kontekstu bieżącej aktywności. Teraz obie akcje działają nawet po usunięciu przez użytkownika aplikacji ze stosu „ostatnie zadania”. ale nie jestem pewien co do stanów „zamkniętych”, więc mogę czegoś przeoczyć.


title: Umowa licencyjna na oprogramowanie: czy nasza specyfikacja jest zgodna z licencją?

text: Czy możesz ustalić, czy ta licencja Open Source Winforms UI Library pozwala firmom na używanie tego kodu w komercyjnej aplikacji? > Licencja MIT (MIT) > > Prawa autorskie (c) 2011 Sven Walter, http://github.com/viperneo > > **Zgoda jest niniejszym udzielana** bezpłatnie każdej osobie, która otrzyma > kopię tej oprogramowanie i powiązane pliki dokumentacji („Oprogramowanie”), > **obsługiwać się Oprogramowaniem bez ograniczeń** , w tym bez ograniczeń > prawa do używania, kopiowania, modyfikowania, łączenia, publikowania, rozpowszechniania, > udzielania podlicencji, **i /lub sprzedawać kopie Oprogramowania** i zezwalać na to osobom >, którym Oprogramowanie jest dostarczane, **pod warunkiem spełnienia następujących > warunków** : > > Powyższa informacja o prawach autorskich i niniejsza informacja o pozwoleniu będą zawarte w > wszystkie kopie lub istotne części Oprogramowania. > > OPROGRAMOWANIE JEST DOSTARCZANE „TAK JAK JEST”, BEZ JAKICHKOLWIEK GWARANCJI, WYRAŹNYCH LUB > DOROZUMIANYCH, W TYM MIĘDZY INNYMI GWARANCJI WARTOŚCI HANDLOWEJ, > PRZYDATNOŚCI DO OKREŚLONEGO CELU I NIENARUSZANIA PRAW. W ŻADNYM WYPADKU AUTORZY LUB WŁAŚCICIELE PRAW AUTORSKICH NIE PONOSZĄ ODPOWIEDZIALNOŚCI ZA JAKIEKOLWIEK ROSZCZENIA, SZKODY LUB INNĄ ODPOWIEDZIALNOŚĆ, CZY NA TEMAT UMOWY, CZYNNEGO LUB INNEGO, WYNIKAJĄCEJ > Z OPROGRAMOWANIA LUB Z UŻYTKOWANIEM LUB INNEGO TRANSAKCJE > W OPROGRAMOWANIU. Licencję można znaleźć tutaj Widzę, że uprawnia ona do używania kodu w produktach komercyjnych ale jest to obwarowane warunkami. Zamierzamy użyć interfejsu użytkownika (interfejs wyglądający na Windows 8) w prostej aplikacji, która będzie konwertować pliki ankiet inżynierskich z jednego formatu na inny, który może być w przyszłości sprzedawany komercyjnie. Ci, którzy wiedzą, czy nasze intencje są zgodne z zasadami licencyjnymi?


title: Model-View-Controller: Czy użytkownik wchodzi w interakcję z widokiem czy z kontrolerem?

text: Niedawno dowiedziałem się o wzorcu projektowym MVC. Uczę się z książki Head First Design Pattern. Według tej książki (jeśli dobrze rozumiem): **Model** to większość logiki i danych aplikacji. **Widok** jest w zasadzie graficznym interfejsem użytkownika, który wizualnie reprezentuje model dla użytkownika. **Administrator** jest odpowiedzialny za „mediację” i działanie jako „pośrednik” między Widokiem a Modelem. Widok zgłasza kontrolerowi, że użytkownik wykonał akcję, a kontroler tłumaczy ją na wywołania metod w modelu. **Jednak wiele miejsc w sieci przeczy temu, co rozumiem z tej książki. Twierdzą, że ogólnie użytkownik wchodzi w interakcję z Kontrolerem, a nie z Widokiem.** Który z nich jest prawdziwy czy bardziej powszechny? Czy użytkownik wchodzi w bezpośrednią interakcję z kontrolerem, czy bezpośrednio z widokiem? Czy oba podejścia są akceptowalne? Co jest bardziej powszechne?


title: Jaki jest najlepszy sposób na wymianę plików za pośrednictwem uwierzytelnionej usługi sieciowej?

text: Nie tyle szukam kodu (chociaż jeśli chcesz połączyć się z samouczkami, byłoby to mile widziane), ale próbuję zorientować się, co robią ludzie wtajemniczeni. Nasz system jest napisany w PHP. W ramach Systemu Elektronicznej Dokumentacji Medycznej muszę być w stanie **bezpiecznie** wymieniać dokumenty (Word, PDF itp.) z partnerami biznesowymi. Wraz z dokumentami muszę również przekazać informacje umożliwiające identyfikację (imię i nazwisko pacjenta, numer dokumentacji medycznej itp.). Jeśli Google wymieniam pliki w serwisie internetowym, otrzymuję szereg informacji o różnych metodach. Ale to, co nie jest łatwe do zauważenia, to to, jak stare są informacje, jak często stosowane są metody i czy jest coś, co gdybym tylko wiedział, czego szukam, zdmuchnęłoby moje skarpetki. TLDR - Jeśli zamierzasz używać usługi sieciowej do wymiany plików, a twój system jest napisany w PHP, jak byś to zrobił i dlaczego?


title: Chcę sprzedać swoje oprogramowanie wraz z kodem źródłowym. Czy licencja jest ograniczona do jakichkolwiek zmian poza wewnętrznymi zmianami?

text: Czy istnieje licencja, która: * Pozwala klientowi na dokonywanie wewnętrznych zmian w narzędziu/kodzie źródłowym, jeśli zajdzie taka potrzeba. * Zabrania redystrybucji kodu źródłowego poza firmę. * Zakazuje sprzedaży prac lub usług pochodnych. Zasadniczo zabrania wszystkiego, ale robienie dostosowań do osobistego użytku.


title: Czy można korzystać z innych bibliotek open source podczas tworzenia własnych, czy należy tego unikać?

text: Wydaje się dziwne pytanie, ale sam kwestionuję to od jakiegoś czasu. Powiedziano mi, że jeśli pracujesz nad biblioteką/projektem typu open source, powinieneś unikać dodawania zależności dla innych zewnętrznych bibliotek typu open source, ponieważ spowoduje to, że oprogramowanie, które korzysta z twoich bibliotek, stanie się cięższe ze wszystkimi zależności, zależności wewnętrzne, itp... Ale czasami trochę się o tym staram. Czy naprawdę muszę wymyślać koło na nowo, aby moja biblioteka była z dala od zewnętrznych zależności? Na przykład, obecnie buduję projekt `Objective-C`, który będzie open source na Github i muszę użyć parsera `XML`, aby uzyskać dane z — zgadliście — plików XML. System OS X firmy Apple ma już wbudowane API do parsowania `XML`, ale nie podoba mi się sposób, w jaki to działa, potrzebuje dużo przetwarzania w tle i obejść, aby uzyskać dane, których naprawdę potrzebuję, więc myślałem o używaniu innego parsera `XML`, aby wykonać znacznie czystszą pracę pod względem ułatwienia mi życia jako programisty, ale także poprzez uczynienie kodu bardziej czytelnym dla innych programistów. Jakie są twoje przemyślenia na ten temat? Dziękuję Ci.


title: Architektura systemu zdarzeń dla sieci, gdy chodzi o wydajność

text: Jak zaprojektować system do gry akcji (pomyśl w Golden Axe), w której zdarzenia mogą odbywać się zdalnie? Używam do tego protokołu TCP, ponieważ klient jest we flashu. Jest tak wiele opcji, mogę zrobić protokół binarny (nie podoba mi się ten pomysł, uważam, że jest zbyt trudny do utrzymania), ale myślałem też, że przekazywanie jsonów przez klientów i serwer może być powolne (czy to przesadzone sprawa?). A co z wewnętrzną architekturą serwera? A dla klienta? Jestem naprawdę zagubiony. Jeśli jest to zbyt duże pytanie, podaj mi jakiś materiał, aby następnym razem sformułować lepsze pytanie.


Jaka jest różnica między delegującym a dyspozytorem? Nie jestem do końca pewien obu koncepcji.


title: Czym typy egzystencjalne różnią się od interfejsów?

text: Biorąc pod uwagę typ egzystencjalny T = ∃X.{op₁:X, op₂:X→boolean} i ten ogólny interfejs Javy: interface T<X> { X op₁(); boolean op₂(X coś); } Jakie są podstawowe różnice między typem egzystencjalnym a interfejsem Java? Oczywiście istnieją różnice syntaktyczne i obiektowa orientacja Javy (która obejmuje również takie szczegóły, jak ukryte parametry `tego` itp.). Nie tyle interesują mnie te różnice, co różnice pojęciowe i semantyczne — choć jeśli ktoś chciałby rzucić światło na pewne niuanse (takie jak różnica notacyjna między „T” a „T<X>”), byłoby to być też docenionym.


title: Klucze unikatowe i podstawowe w bazie danych (mysql)

text: Mam tu spore wątpliwości... Jeśli mam tabelę związaną z **logowaniem za pomocą nazwy użytkownika/hasła**, jak mogę zapewnić, że nie będzie więcej dopasowań **tej samej nazwy użytkownika i hasła w tej samej tabeli ** przy użyciu sql? Na przykład: >nazwa użytkownika: nazwa użytkownika >hasło: hasło ^ten użytkownik właśnie się zarejestrował. Obowiązują więc następujące warunki: > **1º nie może być więcej użytkowników o nazwie „nazwa użytkownika”** > > 2º na pewno nie może być więcej użytkowników o nazwie „nazwa użytkownika” **ORAZ z > tym samym hasłem* * więc jak dokładnie mam umieścić nazwy klawiszy w bazie danych? Identyfikator jest podstawowy, czy powinienem umieścić **nazwa użytkownika I hasło** jako **_unique_**, aby utworzyć unikalną parę i uniknąć kolejnego identycznego wstawienia?


title: Czy byłby to prawidłowy sposób użycia wzorca repozytorium w aplikacji ASP .NET MVC implementującej Entity Framework?

text: Ta aplikacja ASP .NET MVC implementuje Entity Framework. Zadeklarowałem repozytoria w DbContext w następujący sposób: public class CompanyDbContext : DbContext { // konstruktor idzie tutaj public DbSet<Klient> Klienci { get; ustawić; } public DbSet<Order> Rozkazy { get; ustawić; } public DbSet<CustomerOrder> CustomerOrders { get; ustawić; } private IGeneralEntityRepository<Klient> customersRepository; private IGeneralEntityRepository<Order> ordersRepository; // ................... } W ten sposób możemy zadeklarować i zainicjować CompanyDbContext w kontrolerze, a następnie uzyskać dostęp do repozytoriów za pomocą instancji CompanyDbContext. Czy to jest poprawne? A może powinienem utworzyć oddzielną klasę "Jednostka pracy", aby uzyskać dostęp do repozytoriów?


title: Czy istnieją języki, które umożliwiają dostęp do statycznego kontekstu wywołania metody w czasie wykonywania?

text: Czy metoda może znać typ metody, w której jest wywoływana? Na przykład w następującym zorientowanym obiektowo pseudokodzie: Instance io = new InstanceSubclass(); io.doStuff(); Czy istnieje język, który pozwala `doStuff()` wiedzieć, że został wywołany jako `Instance`? Pytanie wynikało z faktu, że Java nie zapewnia żadnego wsparcia dla kolizji nazw interfejsów, na przykład jeśli utworzysz klasę implementującą interfejsy A i B, które oba mają sygnaturę metody, taką jak `void doWork()`. być możliwe, aby ciało `doWork()` wykonało coś podobnego do następującego: public void doWork() { Class<?> context = getMethodCallContext(); if(kontekst == InterfejsA.klasa) { doAsInterfaceA(); } else if(context == InterfaceB.class) { doAsInterfaceB(); } else { // Shenanigans i obsługa błędów } } Nie zamierzam pisać żadnego kodu wykorzystującego tę funkcję, ponieważ w tym celu śmierdzi anty-wzorcem, który czeka, aby się wydarzył, chcę tylko wiedzieć, czy MOŻNA to zrobić, jeśli tak, jakie języki na to pozwalają?


title: Dlaczego Railsy konfigurują się w kodzie?

text: Według pragmatycznych programistów kod powinien być dla abstrakcji, podczas gdy konfiguracja i szczegóły powinny żyć w metadanych. Railsy wydają się drastycznie odbiegać od tego wzorca. Wiele konfiguracji odbywa się w plikach kodu, takich jak `application.rb`, `routes.rb` i różne pliki `environment.rb`, podczas gdy inne typy konfiguracji są robione w plikach yaml (np. `database.yml`). Jakie jest myślenie stojące za tą decyzją projektową?


title: Gdyby zmienna zawierająca funkcję dawała zwrot funkcji zamiast odwołania do funkcji, co zwróciłaby tablica funkcji?

text: Tworzę prototypowy język skryptowy podobny do JavaScript. W moim języku każde odwołanie do zmiennej jest w rzeczywistości wywołaniem funkcji (funkcja pobierająca), niezależnie od tego, czy zawiera nawiasy, czy nie. Na przykład, jeśli zrób tak: var foo = 3; var bar = foo; To, co naprawdę się dzieje, to wywołanie foo.set() w pierwszym wierszu, co tworzy nową funkcję pobierającą. W drugim wierszu wywoływana jest nowo utworzona funkcja pobierająca dla foo, która wygląda tak: foo.get() { return 3; } Mogę również przypisać funkcję do zmiennej, w takim przypadku ta funkcja STAJE SIĘ funkcją pobierającą. var foo = { return 4+5; } var bar = foo; // pasek jest teraz równy liczbie 9, a NIE funkcji, którą zawiera foo. Teraz pracuję nad tym, co powinna zwrócić tablica funkcji. Na przykład: function func1 { return 1; } funkcja func2 { return 2; } var foo = nowa tablica(); foo.push(func1); foo.push(func2); var bar = foo; //co zawiera pasek? [func1, func2] czy [1, 2]? Odwołanie do pojedynczej funkcji uruchamia tę funkcję i zwraca wynik funkcji. Próbuję więc zdecydować, czy odwołanie do tablicy funkcji powinno również uruchamiać te funkcje, czy też bardziej korzystne byłoby zwrócenie tablicy funkcji. Innymi słowy, czy funkcja pobierająca dla foo wyglądałaby tak: foo.get() { return [func1.reference, func2.reference]; //zwróciłoby [func1, func2] } Lub tak: foo.get() { return [func1(), func2()]; //zwróciłby [1, 2] } W szczególności pytam, czy ktoś wie, czy istnieją problemy lub rozwiązania, które stworzyłaby jedna lub druga metoda? Czy istnieją jakieś ustalone zasady dobrego projektowania języka programowania, które mają tutaj zastosowanie?


title: Co to są „cele komercyjne”?

text: Patrzę na tę licencję. Mówi, że mogę go używać do „celów niekomercyjnych”. Co to znaczy? Widzę w Stack Exchange, w sekcji Network Profile znajduje się wykres, który śledzi twoje punkty na twoich kontach Stack Exchange. Wykorzystuje kontrolkę o nazwie HighCharts, która ma płatną i licencjonowaną wersję Creative Commons. Czy zatem Stack Overflow stanowiłby witrynę komercyjną? Nie płacimy za korzystanie z tej witryny, ale oczywiście witryna zarabia na reklamach itp. Z drugiej strony jest wiele witryn, które mają reklamy, które niekoniecznie przynoszą zysk, może to jedynie zmniejszać ich koszty. Ale nawet wtedy można argumentować, że nawet jeśli ogranicza to tylko ich koszty, wiele firm IT ponosi straty, aby zbudować wystarczająco dużą bazę klientów. Więc gdzie jest linia? Czy to jakaś strona internetowa w internecie? Czy jest to jakaś witryna, która zawiera reklamy? Czy to jakaś strona internetowa, która przynosi zysk?


title: Czy popieranie języka przez różne platformy (Android, iOS) szkodzi tworzeniu aplikacji?

text: Tworzenie aplikacji opartych na systemie iOS lub OSX zazwyczaj wymaga znajomości celu C, ponieważ XCode jest wysoce dostosowany do tego języka. Z drugiej strony Android wybrał Javę jako preferowany język do tworzenia aplikacji. Teraz wiem, że inne języki programowania mogą być używane do tworzenia aplikacji na obu platformach, ale bądźmy szczerzy, dużo łatwiej (i zachęcamy) do tworzenia aplikacji przy użyciu tych „języków ojczystych”. Jako nowy programista aplikacji wydaje się, że byłoby znacznie łatwiej, gdyby istniał wspólny język i środowisko programistyczne do tworzenia aplikacji na wszystkich głównych platformach. Ta myśl jest prawdopodobnie zbyt idealistyczna na dyskusję programistyczną i nie zdziwiłbym się, gdyby sępy SE przyleciały, aby zamknąć ten temat. Ale oto moje pytanie. Czy uważasz, że aprobowanie języka tworzy nieuzasadnione bariery wejścia dla nowych programistów, czy też uważasz, że korzystne jest w jakiś sposób (jeśli tak, to dlaczego) używanie przez te platformy zupełnie innych środowisk programistycznych i języków do tworzenia aplikacji?


title: Jak nauczyć się elegancko radzić sobie z błędami?

text: Jedną z rzeczy, które zauważyłem jako młodszy programista, jest to, że ludzie, których najbardziej szanuję i podziwiam, to ci, którzy potrafią przyznać się do swoich błędów i jasno/logicznie wymyślić świetny sposób ich rozwiązania. Szczerze mówiąc, aspiruję do tej umiejętności - ale jeszcze jej nie mam. Mając to na uwadze – co robisz, gdy popełnisz błąd? W jaki sposób komunikujesz się ze swoim menedżerem lub bazą użytkowników i czy masz jakieś szczególne punkty, aby ułatwić wszystkim zaangażowanym proces rozwiązywania problemu?


title: W jaki sposób Scrum Master uczestniczy w codziennych stand-upach?

text: Mamy profesjonalnego konsultanta Scrum Mastera [*], który niedawno dołączył do naszego projektu. Niestety, nie znamy jej imienia (nigdy się nam nie przedstawiła, po prostu przyszła pewnego dnia i powiedziała „mamy codzienny stand-up”) i wydaje się, że nie robi nic więcej poza przewodniczeniem codzienne spotkanie stand-up - kiedy pół żartem poprosiłem ją, aby również codziennie udzielała informacji zwrotnej na spotkaniu, była dość urażony, mówiąc, że to praca Scrum Mastera „ułatwiać, a nie brać udział”. Wydaje się to dość anty-Agile (po pracy nad innymi zwinnymi projektami, w których zespoły były samodzielne), co ma być egalitarne, ale nie jestem pewien, jak to działa w Metodologii Scrum. Podejrzewam, że nie robi wiele przez cały dzień i to jest powód jej postawy obronnej w tej sprawie. Czy Scrum Master bierze udział w „wczoraj, dziś, utrudnieniach” podczas spotkania stand-up, czy też jego rolą jest po prostu przewodniczenie („ułatwianie”) spotkania? [*] Tak naprawdę nie powiedziano nam, czym jest jej praca, po prostu zakładamy, ponieważ nazywa siebie Scrum Master


title: Jak zminimalizować utratę danych przy zwalnianiu programisty?

text: Właśnie zostałem zwolniony i był to standardowy proces stosowany w USA: zadzwoń do osoby, aby porozmawiać z personelem i usuń dostęp do sieci, gdy to się dzieje, a następnie poproś kogoś o pomoc, zawsze miej kogoś z tą osobą dopóki nie zostaną odprowadzeni z nieruchomości. Ma to na celu powstrzymanie niezadowolonego programisty przed usunięciem lub uszkodzeniem oprogramowania lub danych: aby zminimalizować utratę danych. Jednak nadal powoduje to utratę dużej ilości danych, ponieważ cała praca, nad którą pracował programista, zostaje porzucona: oprogramowanie niezaewidencjonowane jest prawdopodobnie stracone, niedokończone dokumenty są tracone, wersje w toku są spowolnione lub zatrzymane, a ogromna ilość wiedzy może zostać utracona. Wydaje się, że potencjalna utrata danych jest więcej niż równoważona przez rzeczywistą utratę danych. Jak zminimalizować wszystkie straty, zarówno potencjalne, jak i rzeczywiste?


title: Czy istnieje już struktura danych „Binder”?

text: Myślałem o strukturze danych, której nie potrafię opisać lepiej niż słowem „książka”, a dokładniej „składnik”. Zastanawiałem się, czy zostało to już zaimplementowane w bibliotekach takich jak Boost lub inne. ### Zasada Jest to struktura danych, która umożliwia losowy dostęp w czasie stałym oraz wstawianie/usuwanie zamortyzowanego czasu stałego (o ile sekwencja tych danych jest wykonywana na indeksach niezbyt od siebie oddalonych). Składa się z dwóch stosów „lewy” i „prawy” reprezentujący stan segregatora, który byłby otwarty na danej stronie. Wstawianie i usuwanie elementów w pobliżu tej strony jest dość szybkie, ponieważ polega na wsuwaniu/zsuwaniu stron do/z lewego stosu i przewracaniu niektórych stron, jeśli to konieczne. Oczywiście w najgorszym przypadku należałoby przerzucić się z pierwszej strony na ostatnią (zapełnić jeden stos drugim), np. jeśli użytkownik wstawi coś na początku, a potem coś na końcu. Oto bardzo podstawowa implementacja w C++: #include <iostream> #include <vector> using namespace std; szablon<klasa T> klasa Książka { wektor<T> lewo, prawo; public: inline size_t size() { return left.size() + right.size(); } void push(T t) { insert(size(),t); } T& get(size_t i) { if (i < left.size()) return left[i]; w przeciwnym razie return right[right.size()-i+left.size()-1]; } void insert(size_t i, T t) { reposition(i-1); left.push_back(t); } void usuń(size_t i) { reposition(i); left.pop_back(); } protected: void reposition(size_t i) // umieszcza element na pozycji i na szczycie lewego stosu { while (i < left.size()-1) { right.push_back(left.back()); left.pop_back(); } while (right.size() >= size()-i) { left.push_back(right.back()); prawo.pop_back(); } } }; int main() { Książka<int> b; for (int i = 0; i < 15; i++) b.push(i); b.wstaw(5,42); b.usuń(10); int i = 0; while (i < b.size()) { if (b.get(i)%2 != 0) b.remove(i); w przeciwnym razie i++; } for (int i = 0; i < b.size(); i++) { cout << b.get(i) << " "; } cout << endl; zwróć 0; } Uwaga: Możliwymi fajnymi optymalizacjami byłyby dwa stosy w odwrotnej kolejności, aby umożliwić przenoszenie memcpy całej części z jednego stosu na drugi zamiast przenoszenia elementów jeden po drugim (memcpy jest zwykle znacznie szybsze). ### Użycie Dobrym przypadkiem użycia tego DS byłby algorytm, który przechodzi przez sekwencję elementów i może dla każdego indeksu dodawać nowe elementy lub usuwać stare elementy w pobliżu tego indeksu. Szczególnym przypadkiem tego jest filtrowanie tablicy elementów. Wszystko, co musisz zrobić, to iterować po wszystkich indeksach i po prostu wywołać binder.remove(i), jeśli element o indeksie i ma zostać usunięty. Wydajnym (i optymalnym) sposobem na zrobienie tego, przy danej tablicy elementów, byłoby zwykle przydzielenie innej tablicy o tym samym rozmiarze i skopiowanie tylko tych elementów, które chcemy zapisać. Łatwo zauważyć, że wykonuje on taką samą liczbę operacji, jak nasza implementacja Bindera (jeśli zaczyna się na pierwszej stronie), główną różnicą jest to, że Binder pozwala na prostszy algorytm ukrywający brudne szczegóły implementacji. (I nie kończymy z innym obiektem.) Sprawy stają się jeszcze trudniejsze do zaimplementowania, gdy musimy poradzić sobie z usuwaniem bliskich elementów lub połączeniem usuwania i dodawania, podczas gdy w Binder DS wszystko jest hermetyzowane, a algorytm pozostaje bardzo prosta. Tak więc Binder DS może być postrzegany jako tablica (lub „wektor” w sensie C++), która umożliwia wydajną pracę nad jego zawartością poprzez włączenie bufora roboczego, dzięki czemu nigdy nie trzeba przydzielać dodatkowej przestrzeni ręcznie (co pomaga zredukować dynamikę alokacje pamięci). To sprawia, że cały proces mutacji jest przejrzysty. ### Wnioski Nie testowałem tego w czasie z bardziej konwencjonalnymi algorytmami, ale spodziewam się, że dostęp do elementów byłby nieco wolniejszy niż zwykły wektor z powodu większej złożoności posiadania dwóch buforów zamiast jednego. Czy uważasz, że to dobry pomysł na strukturę danych i okaże się skuteczny? Czy to już zostało zrobione iw jakiej bibliotece? Masz lepszą alternatywę do zaproponowania?


title: OOP i struktury danych w C++?

text: Czy przed przejściem do struktur danych w języku C++ należy uczyć się programowania zorientowanego obiektowo, czy mogę zacząć od list, stosów, kolejek, sortowania ...... itd. i czy programowanie zorientowane obiektowo ma związek ze strukturami danych?


title: Najlepsza praktyka w ustawianiu wartości zwracanej (użyj innego lub?)

text: Ilekroć chcesz zwrócić wartość z metody, ale to, co zwrócisz, zależy od jakiejś innej wartości, zwykle używasz rozgałęzienia: int obliczCoś() { if (a == b) { return x; } else { zwróć y; } } Innym sposobem napisania tego jest: int obliczCoś() { if (a == b) { return x; } zwróć y; } Czy jest jakiś powód, aby unikać jednego lub drugiego? Oba pozwalają na bezproblemowe dodawanie klauzul "inaczej gdyby". Oba zazwyczaj generują błędy kompilatora, jeśli dodasz coś na dole. Uwaga: nie mogłem znaleźć żadnych duplikatów, chociaż istnieje wiele pytań dotyczących tego, czy towarzyszące nawiasy klamrowe powinny znajdować się na własnej linii. Więc nie zagłębiajmy się w to.


title: Czy można stworzyć i pobrać plik wideo za pomocą JavaScript, tylko po stronie klienta?

text: Czy można stworzyć i pobrać plik wideo tylko po stronie klienta? Załóżmy, że mamy animowane płótno, takie jak w tym **JSFIDDLE**. Zobacz ten fragment: ... var stop = false; setTimeout(function() { stop = true; }, 1860); ... if (!stop) { requestAnimationFrame( rysuj, 10 ); } Tak więc mój czas trwania animacji to `1860ms`. Możemy generować pliki tekstowe do pobrania, wiem, że możemy wygenerować obrazy z płótna, ale czy da się wyrenderować i pobrać plik wideo? Czy dodanie dźwięku byłoby możliwe?


title: Wyszukiwanie kolejnego wolnego adresu IP w sieci

text: Mam sieć IP i chcę automatycznie znaleźć wolny adres IP, aby udostępnić nowy serwer. Ze względu na częste dodawanie/usuwanie serwerów używane adresy IP mogą być dość rozdrobnione w całej przestrzeni adresowej. Aby skutecznie sprawdzić, czy adres IP jest wolny, muszę pingować i pytać system DNS, co jest uważane za drogie. Dlatego chcę zminimalizować te wyszukiwania i przechowywać informacje o używanych/wolnych adresach w relacyjnej bazie danych. To powinno dać mi dobrych kandydatów i mam tylko kilka takich wyszukiwań. Pytanie brzmi, jak to zrobić w najprostszy i najskuteczniejszy sposób, jaki może obsłużyć SQL? Pierwszym pomysłem było wygenerowanie wszystkich możliwych adresów i zapisanie ich w bazie danych. Używane po prostu otrzymują kolumnę use ustawioną na true. Następnie po prostu wykonaj zapytanie SQL, które zwróci jak pierwsze 10 adresów, w których wartość use jest fałszywa. Wygląda na to, że uzyskanie nowego adresu jest dość proste. Ale takie podejście może stać się problemem dla dużych sieci. Muszę też generować i usuwać nieużywane adresy dla każdej zmiany sieci. Jeśli przechowuję tylko używane adresy, nie wiem, jak wykonać zapytanie, które zwróci mi bezpłatne adresy. Muszę pobrać całą listę i zaimplementować logikę na kliencie. Miałem jednak nadzieję, że uda mi się przenieść to na serwer bazy danych. Czy są jakieś lepsze alternatywy? Skanuj regularnie w poszukiwaniu bezpłatnych adresów i przechowuj tylko kilka? Posortować listę używanych adresów, może w strukturze przypominającej drzewo, w którym nie-liście przechowują informacje o wolnych adresach w swoim segmencie podrzędnym? Te rozwiązania wydają mi się dość skomplikowane. Wolałbym prosty algorytm bez żadnych dodatkowych działających skanerów/generatorów, a w najgorszym przypadku musiałbym wrócić do innej metody. Czy jest coś, co może mi zapewnić SQL? Na przykład daj mi najmniejszy wolny element z posortowanej listy liczb całkowitych? Twoje zdrowie.


title: czy ten kod powinien być zorganizowany w przechwytywanie zdarzeń i metodę lub umieścić funkcjonalność w przechwytywaniu zdarzeń?

text: Zaadoptowałem trochę kodu jQuery, który ma około 20 przechwytywania zdarzeń, które wyglądają tak // używane w menu#edit $('.show-headers-only-toggle').on('click',function(){ arc_eh. menu_edit.show_headers_only_toggle.call(to); }); które wywołują metodę, która wykonuje tę funkcjonalność. To jedyne miejsce, w którym wywoływana jest ta metoda. Chcę umieścić funkcjonalność po takim zdarzeniu, ponieważ myślę, że nie ma powodu, aby mieć tę inną metodę. Argumentem za posiadaniem tego w metodzie jest to, że zanieczyszczam tę przestrzeń, a obsługa zdarzeń jest jak router, a to jest kontroler. Czuję, że to jest zrzucanie rowerów i nie używamy frameworka, więc po prostu łatwiej jest mieć wszystko na swoim miejscu. Jak myślisz, kto się w tym myli? Czuję, że tracą to na rowerze. // używane w menu#edit $('.show-headers-only-toggle').on('click',function(){ var action=$(this).attr('arc-action'); // byłoby to po prostu to, co znajduje się w powyższej funkcji if(action=='hide-items'){ $('.menu-item-admin').hide(); $(this).text('show items') ; $(this).attr('arc-action','show-items'); }else{ $(this).text('pokaż tylko nagłówki'); $('.menu-item-admin'). show (); $(this).attr('arc-action','hide-items'); } });


title: Projekt bazy danych — za każdym razem przechowuj stan lub stan obliczeniowy?

text: Załóżmy, że mam aplikację relacyjnej bazy danych oraz obiekt „użytkownik” i obiekt „wiadomość”. Teraz chcę pokazać temu użytkownikowi liczbę nieprzeczytanych wiadomości. Jaki jest najlepszy sposób na zarchiwizowanie tego? Czy wprowadzam pole w użytkowniku i liczę je, jeśli użytkownik otrzyma wiadomość i zmniejszam, jeśli ją przeczyta? Czy też za każdym razem wykonuję zapytanie, aby obliczyć liczbę wiadomości dla użytkownika, które są oznaczone jako nieprzeczytane? Myślę, że pierwsze podejście jest bardziej skomplikowane i podatne na błędy, ale będzie działać lepiej niż drugie podejście. Jak to się zwykle robi lub jakie jest lepsze podejście?


title: Enumeratory a zwracanie

text: Czytałem moduł Enumerable w Ruby i zawiera on kilka metod zgodnych ze wzorcem enum.foo(n) {|obj| blok } → nil enum.foo(n) → an_enumerator Oznacza to, że wydają się zwracać iterator po połączeniu w łańcuch i nic poza tym. Jakie jest uzasadnienie przyjęcia takiego podejścia zamiast zwracania sekwencji? (Pytam o ogólne uzasadnienie tego podejścia, niekoniecznie tylko o jego użycie w Ruby)


title: Od czego zacząć, gdy mam do czynienia z moim pierwszym klientem korporacyjnym?

text: Niedawno opracowałem klienta stacjonarnego, który automatyzuje większość pracy związanej z badaniami online. Opracowałem to narzędzie w 2-3 godziny i skróciło ono godzinę pracy do około 5 minut. Oprogramowanie zyskało pewną widoczność, a niektórzy przełożeni w organizacji są podekscytowani oszczędnością czasu i wysiłku. Teraz chodzi o to, że firma jest zainteresowana dystrybucją oprogramowania do każdego sprzedawcy w firmie, być może zechce go nawet kupić ode mnie. Nigdy nie byłem w sytuacji potencjalnej sprzedaży mojego oprogramowania klientowi korporacyjnemu. Pracowałem tylko nad osobistymi projektami lub tworzyłem własne oprogramowanie dla mojego pracodawcy. Nie mam pojęcia, czym jest uczciwa cena, ani nawet jaki jest uczciwy model płatności (np. czy normalne jest przyjmowanie płatności zbiorczych w zamian za dostarczenie statycznej aplikacji lub podpisanie umowy na dalszy rozwój i utrzymanie ta aplikacja przez pewien czas, czy co?). Po prostu nie mam doświadczenia, które dałoby mi podstawy, by wiedzieć, jak podejść do tej sytuacji. Jak mogę zdobyć tę wiedzę, aby móc dokonywać świadomych wyborów?


title: Dokumentacja kodu: publiczna czy niepubliczna?

text: Jestem jednym z tych programistów, którzy myślą, że napisany kod powinien być zrozumiały i czytać jak książkę. JEDNAK, tworząc kod biblioteczny dla innych osób, staram się umieścić jak najwięcej dokumentacji w plikach nagłówkowych; co rodzi pytanie: Czy dokumentowanie metod, które nie są publiczne, jest w ogóle warte czasu? Nie będą ich używać bezpośrednio, w rzeczywistości nie mogą. Jednocześnie, jeśli rozprowadzę surowy kod (choć niechętnie), te niepubliczne metody będą widoczne i mogą wymagać wyjaśnienia. Po prostu szukam pewnych standardów i praktyk, które wszyscy widzicie lub stosujecie w swoich podróżach.


title: Kompatybilność mobilna: tradycyjny wygląd strony internetowej a natywna aplikacja ?

text: Mam pytanie związane z witrynami kompatybilnymi z urządzeniami mobilnymi, widziałem dwa rodzaje witryn Jeden, w którym przyjmują tradycyjny wygląd witryny i dostosowują witrynę do ekranu mobilnego, jeśli mają dużo informacji, których nie można dostosować do ekranu, to się rozwijają wysokość strony, aby użytkownik mógł przewijać stronę, aby zobaczyć więcej informacji... W drugim podejściu wykorzystano natywny wygląd aplikacji, czyli użycie paska nawigacji, paska kart, paska narzędzi, widoku przewijania, tak jak w aplikacjach natywnych . Wysokość i szerokość strony dopasowują się do rozmiaru ekranu, jeśli mają więcej informacji to stosują scroll-view itp... Moje pytanie brzmi: które podejście jest lepsze od innych, w jakim podejściu wygodniej jest korzystać ze strony.


title: W jakich sytuacjach uwierzytelnianie oparte na systemie Windows dla mojej aplikacji sieci Web ASP.NET MVC nie zezwoli użytkownikom na dostęp do aplikacji sieci Web?

text: Moje wymagania to: 1. Zbudowanie aplikacji webowej ASP.NET MVC do korzystania z uwierzytelniania opartego na systemie Windows, ponieważ wszyscy użytkownicy, którzy będą uzyskiwać dostęp do aplikacji są naszymi wewnętrznymi pracownikami i posiadają nazwę użytkownika i hasło w firmowym Active Directory. Czyli, jak rozumiem, uwierzytelnianie Windows wewnątrz ASP.NET MVC jest prawidłowe: 1. Jeśli pracownik uzyska dostęp do aplikacji webowej w intranecie naszej firmy, to będzie mógł zalogować się do aplikacji MVC automatycznie (bez konieczności wpisywania nazwy użytkownika i hasło). 2. Jeżeli użytkownik loguje się do aplikacji za pomocą VPN spoza firmowego intranetu, to nadal ma dostęp do aplikacji automatycznie, bez konieczności podawania nazwy użytkownika i hasła. 3. Ale co się stanie, jeśli użytkownik uzyska dostęp do aplikacji internetowej ASP.NET MVC za pomocą systemu operacyjnego innego niż Windows, takiego jak Linux? Czy uwierzytelnianie oparte na systemie Windows będzie działać w intranecie firmy, czy poza nim? 4. Co się stanie, jeśli użytkownik uzyska dostęp do aplikacji internetowej spoza sieci firmowej za pomocą swojego komputera osobistego z systemem operacyjnym Windows?


title: Rozszerzyć klasę czy utworzyć instancję?

text: Czytam Pro PHP i jQuery i chcę odbudować przykład. Autor tworzy klasę połączenia z bazą danych: class DB_Connect { protected $db; funkcja chroniona __construct($dbo = NULL){ if (is_object($db)) { $this->db = $db; } else { // Stałe są zdefiniowane w /sys/config/db-cred.inc.php $dsn = "mysql:host=" . DB_HOST . ";nazwa_bazy=" . DB_NAME; spróbuj { $this->db = nowe PDO ($dsn, DB_USER, DB_PASS); } catch (Wyjątek $e) { die ($e->getMessage()); } } } Ta klasa jest następnie rozszerzana o główną klasę aplikacji, aby uzyskać dostęp do obiektu bazy danych. Dlaczego robi się to w ten sposób? Czy nie moglibyśmy raczej stworzyć instancji `DB_Connect` w głównej klasie? Jakie są zalety takiego podejścia?


title: Odpowiedzialność za powielanie błędów

text: Tworzę program korzystając z biblioteki wykonanej przez innego programistę (pracuje w tej samej firmie). Niedawno odkryłem wyciek w bibliotece, który zdarza się w określonych warunkach sieciowych po kilku godzinach działania. Zgłosiłem błąd z opisem warunków, w których doszło do tego wycieku. Ten programista odpowiedział, że „to nie wystarczy”, „nie jest odpowiedzialny za powielanie błędów” i muszę stworzyć test jednostkowy, aby odtworzyć ten błąd, w przeciwnym razie nic nie zrobi. 1. Czy ma rację? 2. Co mogę zrobić w tej sytuacji? Tworzenie testów jednostkowych jest niemożliwe, ponieważ zależy to od losowych taktowań sieci.


title: Czy powinienem udostępniać biblioteki klienckie w niektórych wybranych językach wraz z samymi interfejsami API?

text: Powiedzmy, że stworzyłem usługę sieciową opartą na RESTful API. Czy ma sens udostępnianie użytkownikom biblioteki klienckiej dla interfejsu API w niektórych wybranych językach, które prawdopodobnie będą najczęściej używane? Przez bibliotekę klienta rozumiem cienkie opakowanie wokół wszystkich wywołań API, dzięki czemu użytkownicy mogą wywoływać metody w swoim języku i uzyskiwać obiekty w swoim języku, którymi mogą łatwo manipulować. Jeśli nie podam klienta, użytkownicy będą tworzyć własne wersje klientów i będą musieli zajmować się tworzeniem własnych wersji obiektów modelu danych, a także będą musieli zajmować się decyzjami, takimi jak używana biblioteka HTTP. Jeśli udostępniam klienta, najpierw pojawia się pytanie, które języki wspieram. Co więcej, utrzymanie spójności między interfejsem API a bibliotekami klienta może być trudne. Istnieje również argument, że API jest nadmiarowe, jeśli udostępniam bibliotekę klienta. Mogę po prostu dostarczyć samą bibliotekę klienta. Następnie muszę utrzymywać kontrakt API tylko w jednym miejscu, a nie w dwóch. Jestem trochę pod presją, aby udostępnić bibliotekę kliencką, ponieważ wielu użytkowników obawia się korzystania z API (najprawdopodobniej dlatego, że będą musieli samodzielnie napisać tę bibliotekę, jeśli mają korzystać z API). Jaka jest najlepsza droga? Czy są jakieś inne plusy i minusy, których mi brakuje? Doceń wszelkie porady/anegdoty.


title: Wielopoziomowe planowanie kolejek (MQS) z Round Robin

text: Próbuję użyć MQS do utworzenia wykresu Gantta z 5 procesów (P1-P5), a także ich czasów oczekiwania, odpowiedzi i realizacji (i średnich tych metryk) w ramach harmonogramu zadań procesora. Oto podstawowa tabela czasów przybycia i wybuchów: ![tu wpisz opis obrazu](http://i.stack.imgur.com/iyZJx.jpg) Oto moja rzeczywista wersja robocza po zaznaczeniu ukończonych procesów. Kwant czasu dla każdego przedziału czasu wynosi (2 kolejki) TQ1=4 i TQ2=3. Zwróć uwagę, że robię MQS, a NIE MLFQ: ![tutaj wpisz opis obrazu](http://i.stack.imgur.com/7KNh8.jpg) Po prostu nie czuję, że robię MQS właśnie tutaj, Wiem, że to trochę skomplikowane, ale może ktoś może wskazać, gdzie całkowicie się mylę.


title: Jak weryfikować (i grupować) aukcje użytkowników w Marketplace

text: Buduję giełdę hobby (komiksy). Użytkownicy mogą wymieniać posiadane komiksy w celu handlu z innymi członkami. Problem, z którym się spotykam, polega na tym, że chciałbym ujednolicić aukcje, aby móc wyświetlać wiele opcji dla każdego tytułu. Tak: Użytkownik 1 wyświetla listę: „Amazing Spider-man #4” na stronie site.com/amazing-spider-man-4 Użytkownik 2 przechodzi do listy „amazing spider-man 4” -> poproś go, aby umieścił ofertę na stronie site.com/ zamiast tego niesamowity-spider-man-4. Potem zaczyna się to trochę komplikować... więc w teoretycznym przykładzie może być wiele tomów każdej serii. np. Amazing Spider-Man #4 (wydany w 1965) i znowu, z powodu ponownego uruchomienia innego Amazing Spider-Man #4 (wydany w 1981) lub cokolwiek innego. Czy odpowiedzią na to pytanie jest stworzenie bazy danych i wypełnienie jej wszystkimi tytułami serii, liczbą wydań i tomów, a następnie wymaganie od użytkownika wybrania jednego z nich przed dokonaniem zgłoszenia? Takie źródło danych nie istnieje z wiarygodnymi informacjami o „wolumenach”, więc nie jestem pewien, jak bym to zrobił.


title: Jaki jest właściwy sposób kontrolowania wersji archiwum chronionego hasłem?

text: Pracuję z plikiem lokalnym, który zawsze wypakuję z archiwum chronionego hasłem (RAR), dokonam w nim pewnych modyfikacji/dodatków i nadpisuję stary plik wewnątrz archiwum nowym plikiem (nie nadpisuję archiwum. nadpisać znajdujący się w nim plik). RAR jest chroniony hasłem ze względu na poufność i potrzebuję, aby tak było. Rozważałem użycie Git do kontroli wersji, ale od mojego pierwszego użycia Git wydaje się, że jest przeznaczony dla plików, które nie są archiwizowane. Chciałem kontrolować wersję mojego pliku RAR. Ale co, jeśli zdecyduję się dodać więcej plików do RAR-a, a następnie zatwierdzić RAR? Czy to nie rujnuje sensu posiadania kontroli wersji, gdzie można również wykonać porównanie, aby porównać wersje itp.? Czy ma sens używanie kontroli wersji, gdy wyodrębniam pliki z RAR w celu dokonania modyfikacji, a następnie umieszczam je z powrotem w RAR i zatwierdzam RAR? Czy kontrola wersji to właściwy sposób, czy jest coś lepszego?


title: Jaki jest cel zwracania $this w PHP

text: function select($select = '*') { if( is_string($select)) { $select = explode(',', $select) ; } foreach($wybierz jako $s) { $s = przytnij($s) ; if($s != '') { $this->aSelect[] = $s ; } } return $this ; } Co w PHP oznacza `return $this`.


Aby zapewnić pewien kontekst, widziałem ostatnio kilka komentarzy, które utożsamiają dziedziczenie zachowania z nadtypu z dziedziczeniem czystego interfejsu bez zachowania. Ale każdy z nich ma dość znaczące i inne konsekwencje. np. Oto przykładowa klasa bazowa i "czysty" interfejs (pseudokod): class FlyingBird { void fly() { zmień stan ze względu na lot } } interface Flyable { void fly(); } Teraz powiedzmy, że mam Łabędzia i Dove. Będę podklasę Swan z FlyingBird, a Dove zaimplementuję Flyable. Swan extends FlyingBird { (brak definicji dla fly, ponieważ dziedziczymy ją po FlyingBird) } Dove implementuje Flyable { void fly() { ... musi zapewnić implementację dla fly, ponieważ interfejs dostarcza tylko sygnaturę } Teraz mogę wywołać oba swan.fly() i dove.fly(), ale łabędź otrzymuje swoją implementację od FlyingBird. Idiom „Uprzywilejuj kompozycję nad dziedziczeniem” mówi mi, abym faworyzował implementację Dove nad Swan, z jakimś rodzajem wstrzykniętej implementacji, ale „polimorfizm podtypów” nie wydaje się robić takiego rozróżnienia. To rozróżnienie jest ważne, ponieważ na przykład: * Istnieje coraz większy ruch w OO, który ma na celu domyślnie uczynić klasy „finałowymi” lub „niemożliwymi do rozszerzenia”, ze względu na złożoność dziedziczenia zachowania bez naruszania semantyki nadklas. Innymi słowy, niektórzy sugerują, że jedna forma prototypowania podtypów powinna być domyślnie wyłączona. (Nie słyszałem, aby ktokolwiek sugerował pozbycie się interfejsów w Javie.) * „Premiowanie kompozycji nad dziedziczeniem” rozróżnia zachowanie współdzielenia poprzez dziedziczenie klas od zapewniania wspólnego interfejsu wspieranego przez współdzieloną implementację. Innymi słowy, istnieją praktyczne i ważne różnice między dziedziczeniem zachowania a dziedziczeniem interfejsu. Czy polimorfizm podtypów rozróżnia dziedziczenie zachowania od dziedziczenia interfejsu?


title: Śledzenie zmian jednostek/kolekcji przez DbContext

text: Czy ktoś może mi wyjaśnić, jak zmiany jednostek i zmiany kolekcji jednostek są śledzone przez DbContext w Entity Framework 6, gdzie jednostki są typu POCO (nie pochodzą od EntityObject)? Eksperymentowałem z EF6 i zaobserwowałem, że chociaż jednostki są POCO, ale nie generują serwerów proxy (więc bez samośledzenia), ale EntityState jest aktualizowany w czasie rzeczywistym (więc nie ma śledzenia opartego na migawkach). Zastanawiam się, jak te jednostki typu POCO są śledzone w EF6?


title: Czy Clang/LLVM jest gotowy na prime time?

text: Clang może być użyty zamiast gcc? Jakie masz doświadczenie w tej sprawie? Jakie są jeszcze wady? Wydajność kompilacji jest znacznie lepsza niż gcc, ale o wydajność kodu generowanego podczas jej wykonywania? Czy istnieją dobre narzędzia jako front-end (IDE) do uruchomienia w systemie Linux lub Windows? EDYCJA: Mam na myśli kompilator C. C++ jeszcze nie jest tak dobrze.


title: Jakie są znane/powszechne specjalizacje rozwojowe?

text: W odpowiedzi, którą zamieściłem na inne pytanie, zauważyłem, że istnieje prawdopodobieństwo, że będzie się coraz bardziej specjalizować w tworzeniu oprogramowania: są eksperci lub specjaliści od danego rodzaju programowania. Zastanawiam się, jakie specjalności istnieją obecnie w rozsądnych ilościach w branży (nie w środowisku akademickim), które nie są specyficzne dla technologii (np. w tej dyskusji winforms nie jest specjalnością)? Interesuje mnie też branża, w której taki specjalista musiałby pracować w razie potrzeby.


title: Czy Java będzie martwa, jeśli nastąpi podział na darmową/premium JVM?

text: Według http://www.theregister.co.uk/2010/11/06/oracle_dueling_jvms/ istnieje możliwość, że Oracle naprawdę ~~zabije Javę~~ podzieli Javę na JVM _Free_ i _Premium_. **Moje pytania** 1. Czy myślisz, że tak się stanie? 2. Czy to zabije Javę na końcu? Jeśli na oba pytania odpowiesz _Tak_ , co z tym robisz? Jaki język byś wybrał i z jakiej platformy będziesz korzystać? **.NET/Mono**? Zwykłe języki skompilowane, takie jak **Golang**? **Rubin**? A jeśli odpowiesz _Nie_ , dlaczego uważasz, że Oracle nie zaszkodzi Javie i społeczności?


title: Czy kolory >8 bitów na kanał mogą być widoczne w przeglądarce zgodnie z przeznaczeniem?

text: W przypadku, powiedzmy, subtelnego gradientu tła na stronie internetowej, jakie są zalety i wady zapisania go jako 16-bitowego/kanałowego pliku png? Czy kolory reprezentowane przez >8 bitów są wyświetlane w zamierzonych szczegółach we wszystkich przeglądarkach?


title: Czy mogę używać kodu MIT w projekcie MS-PL?

text: Chciałbym zmodyfikować i wykorzystać kod projektu MIT w ramach projektu MS-PL. Czy mogę to zrobić? Szukałem go już w Google i Bing, ale nie mogłem znaleźć czegoś takiego jak "Tak (Nie) możesz (nie) używać kodu MIT w projekcie MS-PL". Nie jestem prawnikiem, więc dosyć trudno jest interpretować jakąkolwiek licencję.


title: Jaki idiom programowania wybrać dla tej biblioteki open source?

text: Mam ciekawe pytanie o to, który idiom programowania jest łatwiejszy w użyciu dla początkujących programistów piszących konkretne klasy parsowania plików. Zajmuję się tworzeniem biblioteki open source, której jedną z głównych funkcjonalności jest parsowanie plików tekstowych i uzyskiwanie z nich uporządkowanych informacji. Wszystkie pliki zawierają ten sam rodzaj informacji, ale mogą być w różnych formatach, takich jak XML, zwykły tekst (każdy z nich ma inną strukturę) itp. Istnieje wspólny zestaw elementów informacyjnych, które są takie same we wszystkich (np. odtwarzacz nazwy, nazwy tabel, niektóre numery id) Istnieją formaty, które są do siebie bardzo podobne, więc możliwe jest zdefiniowanie dla nich wspólnej klasy Base w celu ułatwienia konkretnych implementacji parsera formatów. Mogę więc jasno zdefiniować klasy bazowe, takie jak `SplittablePlainTextFormat`, `XMLFormat`, `SeparateSummaryFormat` itp. Każda z nich podpowiada rodzaj struktury, którą zamierza przeanalizować. Wszystkie konkretne klasy powinny mieć te same informacje, bez względu na wszystko. Aby była w ogóle użyteczna, ta biblioteka musi zdefiniować co najmniej 30-40 takich parserów. Kilka z nich jest ważniejszych niż inne (oczywiście bardziej popularne formaty). Teraz moje pytanie brzmi, który idiom programowania jest najlepszy do wyboru, aby ułatwić rozwój tych konkretnych klas? Pozwólcie, że wyjaśnię: myślę, że programowanie imperatywne jest łatwe do naśladowania nawet dla początkujących, ponieważ przepływ jest stały, zdania po prostu pojawiają się jedno po drugim. W tej chwili mam to: class SplittableBaseFormat: def parse(self): "Przetwarza treść historii rozdań, ale najpierw przeanalizuj nagłówek, jeśli jeszcze nie został przeanalizowany". jeśli nie self.header_parsed: self.parse_header() self._parse_table() self._parse_players() self._parse_button() self._parse_hero() self._parse_preflop() self._parse_street('flop') self._parse_street('turn ') self._parse_street('river') self._parse_showdown() self._parse_pot() self._parse_board() self._parse_winners() self._parse_extra() self.parsed = True Tak więc konkretny parser musi zdefiniować te metody w zamówić w dowolny sposób. Łatwy do naśladowania, ale implementacja każdego indywidualnego parsera zajmuje więcej czasu. A co z deklaratywnym? W tym przypadku klasy bazowe (takie jak `SplittableFormat` i `XMLFormat`) wykonałyby ciężkie zadanie w oparciu o deklaracje wyrażeń regularnych i numerów linii/węzłów w klasie konkretnej, a klasy konkretne nie mają w ogóle żadnego kodu, tylko numery linii i wyrażenia regularne, być może innego rodzaju zasady. W ten sposób: class SplittableFormat: def parse_table(): "Przetwarzaj TABLE_REGEX i pobieraj informacje" # ustaw tutaj atrybuty def parse_players(): "przetwarzaj PLAYER_REGEX i pobierz informacje" # ustaw tutaj atrybuty class SpecificFormat1(SplittableFormat): TABLE_REGEX = re.compile( '^(?P<nazwa_tabeli>.*) inne informacje \d* itp') TABLE_LINE = 1 PLAYER_REGEX = re.compile('^Gracz \d: (?P<nazwa_gracza>.*) ma (.*) w żetonach .') PLAYER_LINE = 16 class SpecificFormat2(SplittableFormat): TABLE_REGEX = re.compile(r'^Tournament #(\d*) (?P<table_name>.*) other info2 \d* etc') TABLE_LINE = 2 PLAYER_REGEX = re.compile(r'^Seat \d: (?P<player_name>.*) ma stos (\d*)') PLAYER_LINE = 14 Więc jeśli chcę umożliwić pisanie tych klas nie-programistom droga wydaje się być deklaratywna, jednak jestem prawie pewien, że nie mogę wyeliminować deklaracje wyrażeń regularnych, co wyraźnie potrzebuje (starszych :D) programistów, więc czy w ogóle mam się tym przejmować? Czy uważasz, że wybór jednego z nich ma znaczenie, czy w ogóle nie ma znaczenia? Może jeśli ktoś chce pracować nad tym projektem, to zrobi, jeśli nie, nieważne, który idiom wybiorę. Czy mogę „nawrócić” nie-programistów, aby pomogli je rozwijać? Jakie są twoje obserwacje? Inne uwagi: imperatyw pozwoli na każdy rodzaj pracy; istnieje prosty przepływ, za którym mogą podążać, ale wewnątrz tego mogą robić, co chcą. Trudniej byłoby wymusić wspólny interfejs z imperatywem z powodu tych arbitralnych implementacji. Deklaratywny będzie znacznie bardziej sztywny, co jest złą rzeczą, ponieważ formaty mogą zmieniać się z czasem bez powiadomienia. Deklaratywny będzie mi trudniej się rozwijał i zabiera więcej czasu. Imperatyw jest już gotowy do wydania. Szukam odpowiedzi na temat tego, których idiomów użyć, kiedy, co jest lepsze dla projektów open source z różnymi scenariuszami, co jest lepsze dla szerokiego zakresu umiejętności programistycznych. * * * TL; DR: * Parsowanie różnych formatów plików (zwykły tekst, XML) * Zawierają ten sam rodzaj informacji * Grupa docelowa: nie-deweloperzy, początkujący * Regex prawdopodobnie nie da się uniknąć * Potrzebne jest 30-40 konkretnych klas parserów * Ułatwienie kodowania tych konkretnych klas * Który idiom jest lepszy?


title: Projektowanie stołów do zapisywania rund w grze

text: Pracuję nad stroną internetową do gry w brydża i jestem w trakcie projektowania stołu do przechowywania licytacji. Krótko o licytacji. 4 osoby przy stole będą licytować zgodnie z ruchem wskazówek zegara, dopóki 3 graczy nie spasuje, więc może być wiele rotacji licytacji z jednym z czterech, aby rozpocząć licytację w ten sposób: Północny wschód Południe Zachód Pas 1H Pas 1NT Pas 3H Pas 3NT Pas Pas Północ Wschód Południowy Zachód 1C 1S Spełnia 3S Spełnia 4S Spełnia Spełnia Tak więc oczywiście muszę zapisać każdą ofertę po kolei, ale mam kilka opcji, jak to zaprojektować. Może mieć taką tabelę i po prostu dodawać wpis na rundę potrzebną: Round, NorthBid, EastBid, SouthBid, WestBid lub: numer sekwencyjny, kto, oferta Może być kilka innych alternatyw, ale chciałbym uzyskać dane wejściowe dotyczące najlepszego podejścia projektowanie struktury tabeli dla takich danych.


title: Potrzebujesz sugestii serwera, aby obsłużyć Twitter API

text: Pracuję nad generowaniem statystyk za pomocą trendów twitterowych i streamingu API. (Dostosowałem słowa kluczowe tak, że ruch, który codziennie otrzymuję z Twittera, ma maksymalny rozmiar 1 GB) Obecnie pracowałem na localhost przy użyciu kombinacji PHP/MySQL (wsadowe wejście do db, również używając Redis w środku). Do celów testowych wszystko jest w porządku, ale moje pytanie brzmi: Czy normalny serwer hostingowy wystarczyłby do obsługi obciążenia (danych strumieniowych z twittera + skryptu cron do pobierania trendów + ruchu użytkowników)? Słyszałem, że silnik aplikacji obsługuje teraz również php. Czy będzie w stanie obsłużyć moc obliczeniową z PHP jako backendem? Pracowałem z nodejs, ale z pewnych powodów chcę, aby było to w PHP, jeśli to możliwe. Proszę zasugerować, czy jest to możliwe w PHP, w przeciwnym razie będę musiał przenieść mój kod do nodejs.


title: Najszybszy sposób sprawdzenia, czy dwie kwadratowe szyki 2D różnią się obrotowo i refleksyjnie

text: Najlepszym pomysłem, jaki mam do tej pory, jest obrócenie pierwszej tablicy o {0, 90, 180, 270} stopni i odbicie jej w poziomie lub/i w pionie. Zasadniczo otrzymujemy 16 odmian [1] pierwszej tablicy i porównujemy je z drugą tablicą. jeśli żaden z nich nie pasuje, dwa układy są rotacyjnie i refleksyjnie odmienne. Zastanawiam się, czy istnieje bardziej optymalne rozwiązanie niż to podejście brute-force? [1] 0deg, brak odbicia 0deg, odbicie nad x 0deg, odbicie nad y 0deg, odbicie nad x i y 90deg, brak odbicia ...


title: Jeśli mam true i/o false lub odwrotnie, czy jest to OBOE?

text: Często popełniam błąd, odwracając moje wartości logiczne w swoim kodzie (np. w moich klauzulach if). Daje mi to takie samo wrażenie, jak przy robieniu OBOE (Off By One Error), chociaż technicznie tak nie jest. Czy nazwalibyście to OBOE, czy jeszcze lepiej, czy istnieje konkretny termin na „off by true value” – błędy? Moje rozumowanie jest takie, że wszystkie możliwe wartości logiczne to „prawda” i „fałsz”. Innymi słowy, możliwe wartości są zawarte w tablicy: `[true, false]`. Jeśli uzyskujesz dostęp do tej tablicy przez indeks, zawsze będziesz przeskakiwany o jeden… wybierając niewłaściwą. Staje się to szczególnie oczywiste, gdy obliczasz swój indeks jako: `index = someInt % 2`. Teraz rozumiem, że zwykle tak nie jest, ale myślę, że zawsze tak jest. Prawie to dostałem, tuż o jeden…


title: Interakcja aplikacji opartej na graficznym interfejsie użytkownika i usługi systemu Windows

text: Pracuję nad osobistym projektem, który ma pomóc w zarządzaniu moją biblioteką multimediów, w szczególności nagraniami utworzonymi przez Windows Media Center. Więc mam zamiar mieć następujące części do tej aplikacji: * Usługa Windows, która monitoruje folder nagrywania. Po zakończeniu nowego nagrania, które spełnia określone kryteria, wywoła kilka aplikacji CLI innych firm, aby usunąć reklamy i ponownie zakodować wideo w formacie bardziej przyjaznym dla dysku twardego. * GUI kontrolera, aby móc modyfikować ustawienia usługi, w szczególności dodawać nowe programy do oglądania i modyfikować parametry aplikacji CLI * Samodzielna (oparta na GUI) aplikacja komputerowa, która może wykonywać wiele takich samych funkcji jak usługa Windows, oczekuj ręcznie na określonych plikach zamiast automatycznie na podstawie określonych kryteriów. (Należy wspomnieć, że mam ograniczone doświadczenie z aplikacją o tej złożoności i absolutnie zerowe doświadczenie z usługami Windows) Ponieważ pierwszy i trzeci punkt mają podobną funkcjonalność, mój plan projektu polega na przeniesieniu wspólnej funkcjonalności do oddzielnej biblioteki współdzielone przez obie części aplikacji, ale te 2 komponenty nie muszą współdziałać w inny sposób. Wydaje się, że drugi i trzeci punktor mają wspólną funkcjonalność, oba będą miały GUI, oba będą musiały pomóc w zdefiniowaniu podobnych parametrów (jeden do wysłania do usługi, a drugi do wysłania bezpośrednio do aplikacji CLI), więc widzę niektóre korzyść z połączenia ich w tę samą aplikację. Z drugiej strony, samodzielna aplikacja (punkt nr 3) naprawdę nie musi w ogóle wchodzić w interakcję z usługą, z wyjątkiem możliwego współdzielenia kilku wspólnych domyślnych parametrów, które można łatwo umieścić w XML we wspólnej lokalizacji, więc wydaje się aby mieć więcej sensu po prostu trzymać wszystko osobno. GUI kontrolera (drugi punkt) to miejsce, w którym w tej chwili utknąłem. * Czy po prostu przeniosę tę funkcję (pozwalam na interakcję użytkownika z usługą w celu aktualizacji ustawień i kryteriów) do samodzielnej aplikacji? A może lepszą decyzją projektową byłoby rozdzielenie ich? W szczególności martwię się dodaniem złożoności komunikacji z usługą Windows do samodzielnej aplikacji, gdy jej nie potrzebuje. * Czy `WCF` jest właściwym podejściem, aby umożliwić interfejsowi GUI kontrolera interakcję z usługą systemu Windows? A może istnieje lepsza alternatywa? W tej chwili nie wyobrażam sobie potrzeby dużej ilości interakcji, może po prostu dodawania nowego zadania raz na jakiś czas i okazjonalnego poprawiania parametru, ale gdy coś się zmieni, oczekuję, że usługa Windows natychmiast użyje nowe ustawienia.


title: Co powinno być pierwsze: testowanie czy przegląd kodu?

text: Jestem całkiem nowy w programowaniu wzorców projektowych i cykli życia i zastanawiałem się, co powinno być pierwsze, przegląd kodu lub testowanie, biorąc pod uwagę, że są one wykonywane przez osobne osoby? Z jednej strony, po co zawracać sobie głowę przeglądaniem kodu, skoro nikt nie sprawdził, czy w ogóle działa? Z drugiej strony, niektóre błędy można znaleźć wcześnie, jeśli zrobisz przegląd przed testowaniem. Które podejście jest zalecane i dlaczego?


title: Od czego zacząć, jeśli chodzi o składanie aplikacji Gnome/Unity Form?

text: Ok, więc jestem zaznajomiony z tworzeniem aplikacji formularzy i konsoli w systemie Windows przy użyciu Visual Studio .Net z C#, ale od czego mam zacząć, jeśli chodzi o dystrybucję Linuksa, taką jak Ubuntu, czy istnieje odpowiednik? Jak można by dopasować to, co mogą zrobić w środowisku Windows z .Net i C# w środowisku Linux bez kodowania .Net w czymś takim jak Java lub C/C++? Jestem świadomy Eclipse, czy Eclipse ma projektanta formularzy, czy też musisz ręcznie kodować projekt dowolnej formy Gnome/Unity? Czy mogę użyć eclipse do napisania linuksowego odpowiednika aplikacji konsolowej, którą wystarczy dwukrotnie kliknąć, aby uruchomić? Wiem też o Mono, ale pomysł jest taki, że chcę nauczyć się tworzyć oprogramowanie bez używania czegokolwiek ze stosu Microsoftu i nie jestem pewien, od czego zacząć. Jaki jest standardowy język/framework używany do tworzenia tego typu aplikacji w systemie Linux? Kiedy staję się coraz bardziej biegły w Visual Studio, C# i .Net, uderzyło mnie, że bez tych narzędzi Microsoftu jestem niczym. Jestem w stanie programować tylko dla systemu Microsoft OS i to mnie przeraża. To nie jest coś przeciwko Microsoftowi, Microsoft tworzy niesamowite oprogramowanie / sprzęt / systemy operacyjne / IDE, ale generalnie złym pomysłem jest umieszczenie wszystkich jajek w jednym koszyku, więc jeśli chcę się nauczyć, jak rozwijać Terminal i Gnome /Aplikacje formularza Unity, gdzie na świecie mam zacząć? Od lat używam Linuksa i wyłączam, ale Windows był moim podstawowym systemem operacyjnym. Jednak obserwowałem, jak Linux staje się coraz lepszy i jak bardzo kocham Windows 7, mam wątpliwości co do Windows 8 (na przykład bardzo tęsknię za moim menu startowym)! Oczywiście stwardnienie rozsiane nigdzie się nie wybiera w najbliższym czasie i mógłbym spędzić następne kilkadziesiąt lat rozwijając .Net bez żadnych problemów, ale tylko dlatego, że możesz coś ujść na sucho, nie zawsze oznacza to, że jest to dobry pomysł. Dziękuję


title: Czy posiadanie pojedynczej instancji `IndexWriter` w Lucene to dobry pomysł?

text: Staram się zrozumieć, jak należy używać Lucene. Z tego, co przeczytałem, tworzenie `IndexReader` jest kosztowne, więc użycie `Search Manager` powinno być właściwym wyborem. Jednak `SearchManager` powinien być tworzony przez `NRTManager`(który, nawiasem mówiąc, powinien zastąpić `IndexWriter` dla każdej wykonanej operacji dodawania lub usuwania). Ale aby mieć `NRTManager`, powinienem najpierw mieć `IndexWriter` i tu pojawia się mój problem. Dokumentacja mówi: * IndexWriter jest bezpieczny dla wątków * Konstruktor tej klasy przyjmuje obiekt `Directory`, więc wydaje się, że tworzenie instancji powinno być kosztowne (jak w przypadku IndexReader) * wszystkie zmiany są buforowane i okresowo opróżniane (więc wydają się zachęcać do używania jednej instancji), ale: * zmiany, mimo że opróżnione, będą widoczne dopiero po `commit` lub `close` * po zakończeniu dokonywania aktualizacji (dodawanie/usuwanie), instancja powinna zostać zamknięta * Ja również znalazłem to: http://stackoverflow.com/questions/5374419/forgot-to-close-the-lucene-indexwriter-after-adding-documents-to-the-index gdzie mówi się, że niezamknięcie pisarza może wszystko zepsuć Więc co tak naprawdę mam zrobić? Czy posiadanie jednej instancji `IndexWriter` to dobry pomysł (użyj tylko `zatwierdź` i nigdy jej nie `zamykaj`)? **EDYTUJ:** Co więcej, jeśli używam `NRTManager`, jak mogę dokonać `commit`? Czy to w ogóle możliwe?


title: Czy programowanie funkcjonalne jest możliwe w Javie?

text: Przeglądałem księgarnię Amazon.com i natknąłem się na książkę "Programowanie funkcyjne dla programistów Java". Znam bardzo podstawowe programowanie funkcjonalne i od 3 lat programuję w Javie. Chciałbym wiedzieć, czy programowanie funkcjonalne jest w ogóle możliwe w Javie?


title: Czy transakcje wycofywania i wycofywania są równoważne pod względem odporności na błędy?

text: Czytałem o systemach, które wykorzystują transakcje w celu zapewnienia odporności na błędy — na przykład SQLite implementuje dziennik, który umożliwia przywrócenie bazy danych do znanego stanu w przypadku awarii. Większość systemów, o których czytałem, zapisuje stan _bieżący_ do dziennika i używa go do przywracania, gdy jest to wymagane. Znalazłem znacznie mniej przykładów, w których stan _następny_ jest zapisywany w dzienniku i używany do zakończenia transakcji po awarii. Czy istnieją dobre przykłady systemów wykorzystujących transakcje roll-forward? Czy istnieją powody, aby wybrać projekt roll-forward zamiast tego, który się cofa?


title: Czy muszę radzić sobie z sytuacją, w której metody prywatne są wywoływane przez refleksję?

text: Czy podczas tworzenia biblioteki muszę upewnić się, że metody prywatne muszą działać zgodnie z oczekiwaniami, gdy są wywoływane nie przez inne metody tej samej klasy, ale **przez inną bibliotekę poprzez odbicie**? Na przykład, jeśli prywatna metoda `private DoSomething(int number)` oczekuje, że: * `number` jest dodatnią niezerową liczbą całkowitą oraz: * prywatna zmienna `string abc` nie jest pusta i nie jest pustym ciągiem, oraz całkowicie, brzydkie kończy się niepowodzeniem, jeśli te dwa warunki nie są spełnione, muszę poradzić sobie z tymi niepowodzeniami, nawet jeśli wiem, że wszystkie metody w klasie **zawsze** przypiszą niepustą wartość do `abc` przed wywołaniem `DoSomething` i przekazać dodatnią niezerową liczbę całkowitą do tej metody? Innymi słowy, **czy kod, który nie jest chroniony przed niebezpiecznymi wywołaniami przez odbicie, może zostać uznany za kod niskiej jakości** , czy też należy do wywołującego, który używa odbicia, aby upewnić się, że wywołanie niczego nie zepsuje? Uwaga: moje pytanie dotyczy tylko standardowego zestawu bibliotek. Nie obejmuje to kodu, który musi być wysoce bezpieczny (tj. gdy ktoś może być zainteresowany użyciem odbicia, aby zachowywał się nieoczekiwanie lub zawieszał się). * * * ¹ Ponieważ klasa jest poprawnie udokumentowana, ponieważ jest wystarczająco dużo testów jednostkowych, aby mieć pewność, że inny programista nie złamie tej metody itp.


title: Jakie są najczęstsze przeszkody, jeśli chodzi o naukę programowania, w kolejności trudności?

text: Wydaje mi się, że pamiętam, że połączone listy, rekurencja, wskaźniki i zarządzanie pamięcią są dobrymi przykładami przeszkód – miejsc, w których początkujący programista zazwyczaj spędza dużo czasu na próbach zrozumienia koncepcji, zanim przejdzie i ulepszy się, a wielu kończy się poddaniem się i nie poprawia. Szukam pełnej/wyczerpującej listy tego typu przeszkód, w przybliżonej kolejności trudności do nauczenia, w celu upewnienia się, że program edukacyjny dla programistów jest tak skonstruowany, aby właściwie poprowadzić uczniów przez nie Czy te informacje są dostępne gdzieś? Najlepiej byłoby, gdyby trudność w nauce była mierzona w jakiś obiektywny sposób (tj. % uczniów, którzy konsekwentnie nie rozumieją tego pojęcia). Jakie źródła są najbardziej odpowiednie do uzyskania tych informacji?


title: Jak wytłumaczyć Wzorce Projektowe osobom spoza Software World?

text: Chcę wyjaśnić mojej siostrzenicy wzorce projektowe, ale zawsze mam z tym trudności. Wynika to w dużej mierze z mojego braku jasnego zrozumienia wzorców projektowych. Jak sugerujesz wyjaśnienie wzorców takich jak MVC, Singleton, Factory, Repository itp. w tak prostych słowach, że nawet dzieci w wieku 10 lat mogą zrozumieć. Szukam przykładów, które mogą ułatwić zrozumienie wzorców. Przykłady z zabawkami, filmami, muzyką itp.


title: SXSSFWorkbook (plik .xlsx) nie może być poprawnie wyświetlany na komputerze Mac

text: Używałem `XSSFWorkbook`, który działał dobrze na wszystkich urządzeniach (nawet dla MAC), ale teraz migruję na `SXSSFWorkbook`, więc teraz mam problem z plikiem xlsx, którego nie można wyświetlić na MAC Szczegółowo Pytanie Jak mogę to osiągnąć to jak w `XSSFWorkbook`.


title: Czy jest jakiś powód, aby zastąpić Równość w encji?

text: Jednostka ma tożsamość, co oznacza, że w pamięci powinien znajdować się tylko jeden obiekt (np. konkretny klient). W związku z tym równość referencji (którą sprawdza podstawowa wersja obiektu object.equals) powinna być jedyną równością, na której nam zależy. Z drugiej strony obiekt wartości musiałby zastąpić Equals, ponieważ w pamięci może być ich wiele. Czy są jakieś problemy z powyższym rozumowaniem? Po prostu nie mogę sobie wyobrazić, dlaczego miałbym mieć dwa obiekty klientów reprezentujące tego samego klienta, a w każdym przypadku, gdy to zrobiłem (np. wziąłem klona, aby coś z nim zrobić), nie mogę wymyślić żadnych okoliczności, w których musiałbym sprawdź, czy był równy oryginalnemu obiektowi. Nawet w środowisku rozproszonym każdy proces klienta powinien zawierać tylko jeden obiekt dla określonego klienta.


title: Program C do przechodzenia przez drzewa bez rekurencji

text: Potrzebuję szczegółowego programu w języku C do przeglądania drzewa bez rekurencji. Program z rekurencją jest zbyt prosty, chcę zrobić to samo bez rekurencji. Znam algorytm, ale nie mogłem go przekonwertować na kod C. Czy możesz mi tutaj pomóc?


title: Wybór między dwoma bardzo podobnymi zawodami

text: Zaraz po studiach dołączyłem do firmy A kilka tygodni temu. Mają dobry produkt, a ja pracuję nad nim od podstaw. Muszę pracować z PHP i zacząć eksperymentować i wdrażać sieci neuronowe. Tydzień temu otrzymałem telefon od innego startupu B, który szukał doświadczonych facetów w dziedzinie Computer Vision/Machine Learning. Jakiś czas temu zgłosiłem się do nich, spodobało im się moje CV, udzielili mi dokładnej rozmowy kwalifikacyjnej i zaoferowali mi pracę, ale za niższą pensję niż to, o czym początkowo wspominali i nieco niższą niż to, co dostaję w A. Tutaj byłbym działająca Java/C++ i podstawowe technologie oprogramowania. Ci faceci mają już produkt, a ja zajmę się optymalizacją tego produktu, zanim zostanę oceniony i zacznę pracę nad ich nowszym. Czy ktoś doświadczony może mi pomóc w pewnych przemyśleniach. 1. Czy w dalszej karierze będzie trudno przejść z języków skryptowych, takich jak PHP, na Java/C++? 2. Jak stabilne jest pole widzenia komputera? 3. Szef B powiedział mi, że będę pracować w wymagającej dziedzinie, która będzie eskalacją kariery… Ludzie dostali ogromne pensje, aby dołączyć do ich firmy… Czy powinienem brać to za dobrą monetę? Wszelkie opinie/sugestie (z wyjątkiem – upewnij się, że później nie pożałujesz) są mile widziane.


title: Jak testować API za pomocą Jmeter

text: moje pytanie brzmi ... jak testować API, w szczególności spokojne API przy użyciu Jmeter? API i przekazane Jmeter do przetestowania ... ale nie jestem pewien, którego języka skryptowego użyć ani jak to zrobić ... Wiem, że istnieją produkty miękkie, takie jak gwarantowana praca i granie ... ale jestem zainteresowany Jmeter jako narzędzie do testowania ... czy ktoś może być na tyle uprzejmy, aby rozwiać moje wątpliwości lub przynajmniej dać mi link do dowolnego samouczka?? Dziękuję Ci :)


title: Jak mogę uruchomić zewnętrzny kod ze środowiska Squeak?

text: O ile mi wiadomo, środowisko Squeak jest dość odizolowane od reszty systemu operacyjnego. Jednak szukam sposobu na wykonanie zewnętrznego kodu, który zostanie napisany w innym języku, z jego wnętrza. Potrzebujemy tego, aby połączyć się ze starą bazą kodu. czy to możliwe? Jakie mam opcje?


title: Dlaczego programiści nadal używają „SAFE_DELETE”?

text: Gdybym miał pensa za każdym razem, gdy widziałem to makro w użyciu, dzisiaj kodowałbym dla zabawy: #define SAFE_DELETE(p) if ((p) != NULL) { delete (p); (p) = NULL; } Dlaczego programiści nalegają na używanie tego makra, gdy `delete` sprawdza, czy ma wartość null? Czy to dlatego, że ustawia wskaźnik na null na końcu? Dlaczego więc nie przynajmniej przepisać go i usunąć nadmiarową kontrolę: #define SAFE_DELETE(p) { delete (p); (p) = NULL; } Mimo to nie wydaje się to dobrą praktyką.


title: Jak wybrać wartości testowe do sparametryzowanych testów dla funkcji bezstanowych?

text: Podczas pisania (sparametryzowanych) testów dla funkcji bezstanowych, _jak określić najbardziej idealny zestaw wartości do testowania?_ Piszę klasę z funkcjami matematycznymi w języku C# i chcę dla nich napisać testy jednostkowe. Dzisiaj chcę napisać tę funkcję (naprawdę!): int Clamp(int value, int lowerBound, int upperBound) { // DO ZROBIENIA: Implementuj. zwróć 0; } Jak nakazuje dobra praktyka TDD, najpierw piszę testy jednostkowe, a implementację później. Mogę napisać sparametryzowany test dla tej funkcji bezstanowej, ale muszę wybrać najlepszy zestaw wartości do testowania. Moja obecna strategia wybierania wartości testowych jest następująca: dla każdego parametru mogę wybrać wartości z całego zestawu 32-bitowych liczb całkowitych ze znakiem. Nie używam losowo generowanych wartości, ponieważ uniemożliwiłoby to powtórzenie testu. Aby przetestować przypadki narożne, wybieram -1, 0, 1, ale także -2147483648 (minimum 32-bitowa liczba całkowita ze znakiem) i 2147483647 (maksymalnie 32-bitowa liczba całkowita ze znakiem). Musiałbym również wybrać „normalną” wartość, na przykład 42, aby upewnić się, że nie testuję tylko narożnych przypadków. Czy wystarczy jedna normalna wartość? I ujemny, powiedzmy -63. Czy przegapiłem jakiś? -2147483648, -63, -1, 0, 1, 42, 2147483647 Jeśli którykolwiek z trzech parametrów może mieć dowolną z tych siedmiu wartości, otrzymam _343 testy dla jednej funkcji_! Zanim napiszę 343 testy, naprawdę muszę zapytać: _Czy są to właściwe wartości do testowania? Ogólnie, jakiej strategii mogę użyć, aby wybrać najskuteczniejsze wartości do użycia?_


title: Jak znaleźć średnią liczbę bitów na symbol za pomocą kodu Huffmana?

text: Próbuję napisać program w c do kodowania Huffmana, ale utknąłem. Dla wejścia mam: Przykładowe wejście: 4 // tutaj skanuję ile mam liter A 00 // i dla każdego skanuję jak są zakodowane w ciągu B 10 C 01 D 11 001010010101001011010101010110011000 //to jest nieoptymalny kod Huffmana Więc najpierw muszę rozszyfrować ten ciąg i dowiedzieć się, ile razy pojawia się każda litera. I już to robię. Ale teraz muszę dowiedzieć się, ile bitów ma każda litera za pomocą drzewa Huffmana, a na wyjściu muszę wydrukować średni bit na symbol. Wyjście dla tego przykładu musi wyglądać następująco: Przykładowe wyjście 1.722 Więc teraz, jak dowiedzieć się, ile bitów ma każda litera z kodowaniem Huffmana?


title: Jak daleko zaszło process-i-fi-cation inżynierii SW w ciągu ostatnich 10 lat?

text: Dawno temu (mniej więcej 15 lat) przeczytałem książkę UML autorstwa wynalazców, którzy powiedzieli, że „inżynieria oprogramowania powinna być jak budowanie domu”. Oznacza to, że architekci produkują niebieskie wydruki, a wyspecjalizowani pracownicy wykorzystują różne ich widoki, aby uzyskać część efektu końcowego. Kiedy to przeczytałem, wydawało mi się to rozsądne, ale z mojego punktu widzenia - nie sądzę, by w tym kierunku poczyniono duże postępy. Możliwe, że cel był zły lub nierealny - nie jestem pewien...


title: wzór obserwatora; wiedząc *co* się zmieniło?

text: Stworzyłem dwie abstrakcyjne klasy Subject i Observer, które definiują klasyczny interfejs wzorca Observer. Czerpię z nich, aby zaimplementować wzorzec Observer. Obserwator może wyglądać tak: void MyClass::Update(Subject *subject) { if(subject == myService_) { DoCoś(); } else if(subject == myOtherService_) { DoSomethingElse(); } } To jest w porządku i mówi mi _kto_ coś zmienił. Jednak nie mówi mi, co się zmieniło. Czasami jest to w porządku, ponieważ zamierzam po prostu zapytać Temat o najnowsze dane, ale innym razem muszę wiedzieć, co dokładnie zmieniło się w temacie. Zauważyłem, że w Javie mają zarówno metodę notyfikowaniaObservers(), jak i metodę notyfikacjiObservers(Object arg), aby przypuszczalnie określić szczegóły dotyczące tego, co się zmieniło. W moim przypadku muszę wiedzieć, czy w temacie miała miejsce jedna z kilku różnych akcji, a jeśli jest to konkretna akcja, znać liczbę całkowitą związaną z tą akcją. Więc moje pytania to: 1. Jaki jest sposób C++ na przekazanie ogólnego argumentu (jak robi to Java)? 2. Czy Observer to nawet najlepszy wzór? Może jakiś system eventowy? **UPDATE** Znalazłem ten artykuł, który mówi o szablonowaniu wzorca Observer: Implementacja wzorca Subject/Observer za pomocą szablonów. To sprawiło, że zacząłem się zastanawiać, czy mógłbyś przygotować argumentację. Znalazłem to pytanie o przepełnienie stosu, które mówi o szablonowaniu argumentu: Wzorzec obserwatora tematu oparty na szablonie - czy powinienem użyć static_cast czy dynamic_cast. Wydaje się jednak, że PO ma problem, na który nikt nie odpowiedział. Inną rzeczą, którą mógłbym zrobić, to zmienić metodę Update tak, aby pobierała obiekt EventArg jak w: void MyClass::Update(Subject *subject, EventArg arg) { ... A następnie utworzyć podklasy EventArg dla określonych danych argumentów, a następnie Wydaje mi się, że oddaj go z powrotem do określonej podklasy w ramach metody aktualizacji. **UPDATE 2** Znalazłem również artykuł O tworzeniu asynchronicznego frameworka c++ opartego na wiadomościach; część 2, w której omówiono przekazywanie przez Temat szczegółów dotyczących tego, co się zmieniło. Teraz poważnie rozważam użycie Boost.Signals. Używanie własnego wzorca obserwatora miało sens, gdy było proste, ale tworzenie szablonu typu i argumentu zaczyna się komplikować. I może potrzebować bezpieczeństwa wątku Boost.Signals2. **UPDATE 3** Znalazłem również kilka interesujących artykułów na temat wzorca obserwatora: Generalizing Observer autorstwa Herba Suttera Implementing the Observer Pattern in C++ - Part 1 Experiences of Implementing the Observer Design Pattern (Część 2) Doświadczenia z implementacji wzorca projektowego Observer ( Część 3) Jednak przestawiłem moją implementację na używanie Boost.Signals, które, choć prawdopodobnie trochę nadęte dla moich celów, z powodzeniem działa. I prawdopodobnie wszelkie obawy dotyczące wzdęcia lub prędkości są nieistotne.


title: Czy DDD-Lite jest językiem wzorcowym do wstrzykiwania zależności?

text: Natknąłem się na przemówienie Grega Younga _7 powodów, dla których projekty DDD nie powiodły się_, gdzie o 7:20 wspomina coś, co nazywa DDD-Lite. Podsumowując, w zasadzie mówi, że niektórzy używają DDD jako języków wzorcowych (jednostki, repozytoria, obiekty wartości, usługi itp.), nie robiąc nic innego związanego z DDD. Postuluje, że 60% lub więcej modeli domen w .Net to DDD-Lite. Uważa, że DDD-Lite w zasadzie buduje język wokół wstrzykiwania zależności, coś, czego tak naprawdę nie musisz robić. Mówi, że albo zrób całkowicie DDD, albo zrób coś prostszego. W przeciwnym razie twierdzi, że człowiek wkłada całą tę pracę w budowanie dobrych abstrakcji, ale bez żadnych realnych korzyści. Muszę przyznać, że nie wiem tyle o DDD, ile bym chciał i jeszcze nie próbowałem go używać. Nie czytałem też książki Erica Evana. _znacznie bardziej_ interesuje mnie Dependency Injection i wiele, wiele książek i blogów na ten temat używa terminów i pojęć referencyjnych z książki DDD Erica Evansa. W tym miejscu poznałem koncepcje DDD. Książki, które czytałem, które to robią obejmują: * Wstrzykiwanie zależności w .NET * Microsoft .Net: architekturę aplikacji dla przedsiębiorstw * Tworzenie aplikacji typu brownfield w .NET Jeśli ktoś chce zrobić wstrzykiwanie zależności, jakie są prostsze alternatywy w stosunku do „DDD -Letni? Wydaje mi się, że budowanie dobrych abstrakcji jest całkiem przydatne, niezależnie od tego, czy używa się pojęć z DDD w sposób „DDD-Lite”. (zobacz wpisy na blogu Marka Seemanna: Interfejsy nie są abstrakcjami i W stronę lepszych abstrakcji). Trudno mi uwierzyć, że wszyscy robiący Dependency Injection robią (lub muszą zrobić) pełnoprawne DDD. Czy jakoś źle zrozumiałem argument Grega Younga o DDD-Lite?


title: Pozyskanie firmy projektowej do czerpania korzyści z dobrego rozwoju

text: Wiem, że są już różne tematy omawiające, co możemy zrobić, aby menedżerowie kupili dobre praktyki programistyczne, ale zastanawiałem się, czy są jakieś konkretne rzeczy, które możemy zrobić, aby wyjaśnić projektantom, że tworzenie stron internetowych to coś więcej niż tylko przekształcenie ich projektu w Strona internetowa. Chcę spróbować zmusić je do projektowania opartego na progresywnym ulepszaniu, responsywnym projektowaniu i ajaxie, ale myślę, że istnieje tendencja do trzymania się zasad projektowania opartego na druku, co jest zrozumiałe, ponieważ jest to ich tło, ale jest frustrujące dla programistów.


title: Asynchroniczne komunikaty między procesami w .NET

text: (Pytam o to tutaj zamiast o SO, ponieważ nie wiem nawet, jaką technologią to otagować :)) Mój zespół ma zamiar rozpocząć projekt konwersji dużej części naszego kodu, aby używał asynchronicznego we/wy pliku, ponieważ nasz nośnik do przechowywania plików jest coraz częściej umieszczany za pośrednictwem połączenia o dużym opóźnieniu. Mamy pewne podstawowe doświadczenie w programowaniu asynchronicznym, ale jest to na większą skalę niż nasza poprzednia praca. W tym momencie nie jestem nawet pewien, od czego zacząć szukać technologii, wzorców czy dokumentacji, jak rozwiązać ten problem. Podstawowa konfiguracja, w której musimy pracować, obejmuje aplikacje klienckie z interfejsem użytkownika, który wysyła żądania plików do lokalnego procesu działającego w tle, który wykonuje rzeczywistą pracę polegającą na komunikacji z usługami przechowywania plików w celu uzyskania danych. (Ta warstwa „proxy” jest potrzebna, ponieważ mamy wiele aplikacji klienckich, które muszą udostępniać usługi plików, buforowane wyniki itp.) Projekt, który mam w głowie, polegałby na tym, aby klient przesyłał żądanie do usługi, co z kolei wysłałoby żądanie do usług przechowywania plików, aby rozpocząć asynchroniczne zadanie we/wy. W miarę postępów pobierania pliku usługa otrzymywała powiadomienia, a następnie uruchamiała pewien mechanizm wywołań zwrotnych do klienta interfejsu użytkownika w celu zgłoszenia procesu i/lub zakończenia. Oznacza to, że potrzebuję pewnego rodzaju mechanizmu między procesami do wykonywania wywołań zwrotnych. Wcześniej korzystaliśmy z usług dupleksowych WCF, aby zaimplementować coś podobnego do tego, ale nie jestem pewien, czy będzie to działać poprawnie w naszym obecnym przypadku. W szczególności chcemy obsłużyć przypadek, w którym klient przesyła żądanie, a następnie wychodzi, gdy pobieranie było w toku. Usługa musi być w stanie wykryć, że klient zakończył działanie, ale _kontynuuj_ pobieranie pliku; to, co wiem o kanałach dupleksu WCF, oznaczałoby, że zamknięcie kanału klienta również zakończy kanał usługi. Ponadto wolałbym nie wymagać od aplikacji klienckiej, aby znajdowała się w jakiejś pętli spin-lock, czekając na zakończenie wywołania asynchronicznego, ale ponownie moje badania doprowadziły mnie do przekonania, że wywołania zwrotne dupleksu działają tylko w kontekście pojedyncze wywołanie WCF, więc musielibyśmy zachować wątek wywołujący przez cały czas trwania. Jakie są inne mechanizmy rejestrowania i wysyłania komunikatów w stylu wywołań zwrotnych w całym procesie? Zespół wolałby w pełni zarządzane rozwiązanie, chociaż z pewnością jestem otwarty na opcje niezarządzane, jeśli są one w jakiś sposób znacznie lepsze.


title: Jak zorganizować szybką i wygodną kompilację rozwiązań w VS 2010?

text: Większość programistów zaangażowanych w rozwój mniej lub bardziej dużych projektów wie, jak uciążliwy może być proces kompilacji. Jest kilka innych rzeczy, które zależą od kompilacji, na przykład testy jednostkowe. TDD wymaga szybkiego wykonania testów, w przeciwnym razie programiści rzadko je uruchamiają. Proces kompilacji całego rozwiązania, nad którym pracuje mój zespół trwa około 5 minut. Nasze rozwiązanie Visual Studio składa się z wielu projektów, więc zazwyczaj nie musimy ponownie kompilować ich wszystkich. Normalnie ta „częściowa” kompilacja zajmuje około 2 minut. Łatwo policzyć, że kompilując rozwiązanie 10 razy tracimy ponad 20 minut! Sytuacja jest jeszcze gorsza, gdy często musimy przebudowywać całe rozwiązanie. Z tego powodu bardzo często rozładowuję wiele projektów ręcznie, ale to niewiele pomaga. **1\. Jak możemy przyspieszyć proces kompilacji?** **2\. Czy możesz polecić dowolne rozszerzenie Visual Studio [2010], które umożliwia ciągłą kompilację rozwiązań w tle?**


title: Czy warto używać enkapsulacji w dynamicznie typowanym, interpretowanym języku programowania?

text: Z tego, co wiem, enkapsulacja jest przydatna, ponieważ: 1. jeśli używasz bezpośrednio atrybutu i zmieniasz jego typ w statycznym języku pisanym, musisz zmienić cały kod, który używa tej klasy. Wręcz przeciwnie, jeśli zadeklarowałeś gettery i settery dla tego atrybutu, nie musisz tego robić 2. ukrywa wewnętrzne funkcjonowanie twojej klasy, przydatne, jeśli na przykład oferujesz API 3. unika tej innej klasy który dziedziczy twoją klasę nadpisze atrybuty lub metody Moje rozważania na temat dynamicznie wpisywanego, interpretowanego języka programowania są następujące: 1. ponieważ typy są dynamiczne, nie ma potrzeby enkapsulacji twojej klasy z tego powodu 2. możesz zobaczyć kod interpretowanego języka, więc Myślę, że nie ma sposobu, aby naprawdę ukryć swoje API 3. może to stanowić problem, gdy jest to niezamierzone, ale moim zdaniem lepiej jest zwrócić uwagę na niezamierzone nadpisywanie zamiast domyślnie ograniczać tę możliwość. Dobrym przykładem jest Python: jeśli zadeklarujesz na przykład nazwę atrybutu lub metody rozpoczynając ją podwójnym podkreśleniem, możesz zadeklarować to również w klasie dziedziczonej, ale są one zagrożone jako dwie różne zmienne, nawet jeśli mają takie same name (dziękuję delnan) ~~nazwa metody, która zaczyna się od znaku "_" powoduje wyświetlenie ostrzeżenia, jeśli zostanie nadpisana przez metodę klasy dziedziczącej.~~ Czy brakuje mi czegoś ważnego?


title: Zaloguj się do aplikacji przy starcie

text: Wersja skrócona: Chcę pole wyboru „Zaloguj się przy uruchomieniu programu”, jak na przykład w Skypie, ale nie wiem, jak bezpiecznie chronić zapisane poświadczenia. * * * Piszę aplikację kliencką, która przed wykonaniem rzeczywistych zapytań do serwera powinna być autoryzowana przez serwer. Autoryzacja przebiega w następujący sposób: użytkownik wypełnia standardowe okno logowania, dane trafiają do serwera przez HTTPS i jeśli była poprawna, serwer wysyła dane uwierzytelniające. Jednak każdorazowe wpisywanie hasła przeszkadza i uniemożliwia uruchomienie aplikacji przy starcie systemu. Chcę zaszyfrować te poświadczenia i zapisać je na dysku. Nie mogłem jednak znaleźć odpowiedniego klucza szyfrującego. Klucz powinien być oczywiście specyficzny dla użytkownika (nie dla całego systemu!) i dość trudny do oszustwa. Na razie po prostu używam hash niektórych informacji o HDD i nazwy użytkownika i wracam do hash środowiska procesu, jeśli wywołanie WinAPI się nie powiedzie (jak złe to?). Piszę dla Windows używając C++/Qt, ale każda rekomendacja jest mile widziana. Dziękuję. * * * **upd1** Ok, żeby wyjaśnić: 1. _Wymagany poziom szyfrowania_ to: nie możesz się zalogować po prostu kopiując plik `credentials.dat` z jednego komputera na drugi (lub z jednego folderu użytkownika na inny); 2. Utrzymanie bezpieczeństwa _hasła_ (które nie jest przechowywane przez aplikację) jest obowiązkiem użytkownika. 3. Chcę przechowywać nie hasło, ale zaszyfrowany token dostępu, który jest `identyfikatorem użytkownika` i `kluczem publicznym` do szyfrowania komunikacji z serwerem. Z twoich odpowiedzi zrozumiałem, że mój autor. system nie jest w porządku. **Rozważę** to ponownie. I tak, mam dostęp zarówno po stronie serwera, jak i klienta. Na razie chcę określić unikalny dla maszyny i użytkownika klucz szyfrowania, który mogę uzyskać z systemu operacyjnego w czasie wykonywania, aby odszyfrować/zaszyfrować dane uwierzytelniające (co jest odpowiedzią serwera na e-mail/hasło wprowadzone przez użytkownika).