title: Czy są jakieś dobre przykłady projektów open source C# z dużą liczbą refaktoryzacji?

text: Prowadzę badania nad ewolucją oprogramowania i C#/.NET, w szczególności nad identyfikacją refaktoryzacji z zestawów zmian, więc szukam odpowiedniego (podobnego do XP) projektu, który może służyć jako przedmiot testowy do wyodrębniania refaktoryzacji z historii kontroli wersji. **Które projekty open source C# przeszły dużą (liczbę) refaktoryzacji?** **Kryteria** Odpowiedni projekt ma publicznie dostępną historię zmian, ma kompilowalny kod na większości commitów i co najmniej kilka refaktoryzacji zastosowanych w przeszłości. Nie musi być dobrze znany, a jakość kodu czy liczba błędów nie ma znaczenia. Najlepiej, jeśli kod znajduje się w repozytorium Git lub SVN. Wynikiem tych badań będzie narzędzie, które automatycznie tworzy pouczające, zwięzłe komentarze do zbioru zmian. Powinno to poprawić powszechną praktykę programistyczną polegającą na nie pozostawianiu w ogóle żadnych komentarzy.


title: Struktura danych gry 2D w OpenGL ES 2.0

text: Próbuję wymyślić niektóre struktury danych do renderowania mojej mapy w OpenGL. Będzie to łącznie ~ 100x100 bloków (kwadratów), przy czym każdy blok będzie miał około 100 pikseli. Jednak ekran wyświetli tylko około 20x10 tych bloków na raz, w zależności od lokalizacji postaci. Więc z tego postu: http://stackoverflow.com/questions/19979031/android-only-game-in-opengl-performance-in-c-ndk-vs-java-dalvik?newreg=53760d542cb94d05afe42faa39d1aef6 t zrobić dużo alokacji z ByteBuffers. Oto podejścia, które wymyśliłem: 1. Przydziel wszystkie 10 000 bloków i po prostu zmień wierzchołki w każdej klatce na te, które muszę wyświetlić. Więc nie ma dynamicznej alokacji, ale dużo miejsca z góry. 2. Przydziel bloki tylko wtedy, gdy ich potrzebuję. Więc jeśli w ramce przesunę się w lewo i będę musiał wyświetlić nowe bloki, przydzielę 10 bloków w OpenGL. W ten sposób mam przydzieloną mniej pamięci na raz. Jednak istnieje alokacja dynamiczna i muszę ustawić tekstury na każdej klatce. 3. Przechowuj kilka bloków każdego typu w pamięci podręcznej i aktualizuj dla nich informacje o wierzchołkach, gdy ich potrzebuję, w ten sposób nie muszę alokować dużo na początku i nie muszę alokować niczego dynamicznie. (Tak więc miej 100 bloków ściennych, 100 bloków drzwi, 100 bloków podłogowych, wszystkie ustawione od początku) Czy którekolwiek z tych podejść jest właściwą drogą do zrobienia tego? Albo jak można by wyświetlić kilka bitmap i zaktualizować ich lokalizację w każdej klatce? A może Java to zły pomysł od samego początku, nawet jak na prostą grę 2D?


title: Czy często zdarza się, że twórca aplikacji internetowej nie ma wiedzy technicznej, aby ją skalować?

text: Kiedy patrzę na takie rzeczy jak Twitter, wydaje mi się, że pomysł jest na początku tak prosty do wdrożenia, że założyciel nie musi być bardzo utalentowany technicznie. W zasadzie to tylko facet z dobrym pomysłem. Ale kiedy aplikacja / oprogramowanie wybucha i pociąga za sobą znacznie trudniejsze problemy inżynieryjne, jak radzi sobie z tym założyciel? Czy widzieliśmy przypadki, w których oryginalny facet z dobrym pomysłem w jakiś sposób odpada z firmy, ponieważ staje się bardziej związany z wyzwaniami technicznymi, a mniej z pomysłami?


title: Czy powinienem nalegać, abyśmy wykonali przeglądy kodu przed połączeniem z powrotem do trunka?

text: Poproszono o ponowne opublikowanie ze StackOverflow: Pracuję w krótkim czasie rozwoju z bardzo ograniczonym czasem na rozwój. Opracowujemy narzędzie, które jest ważne dla wyniku naszej pracy, ale nie jest używane na co dzień. Jestem jedyną osobą w zespole, która ma doświadczenie jako programista. Mój problem polega na tym, że przez ponad rok naciskałem na przeglądy kodu przed ponownym połączeniem z bagażnikiem. Wszyscy się z tym zgodzili, ale wciąż tylko mój kod został zrecenzowany. Wracając z długich wakacji wracam do bagażnika z komentarzami do kodu jako "to brzydkie rozwiązanie - usuń jak najszybciej" i "szybka naprawa". Nowością jest również wyznaczenie faceta do odpowiedzialności za narzędzie. (Zaoferowano mi tę rolę, ale odmówiłem z powodów niezwiązanych z pracą.) A on uważa, że jest to dobry sposób pracy: Ponieważ mamy tak ograniczony czas na rozwój, powinniśmy w ten sposób iść na skróty. Obawiam się, że inni programiści piszą brzydki kod: często łamiąc enkapsulację, pisząc duże klasy, dodając klasy wewnętrzne w dziwnych miejscach, mając niewiele testów jednostkowych lub wcale, i tak dalej. Ostatecznie dalszy rozwój narzędzia będzie niemożliwy. Czy powinienem nalegać, abyśmy wykonali przeglądy kodu przed połączeniem z powrotem do trunka, czy jestem tylko dziwką jakości kodu?


title: Jak zarządzać projektem w szkole?

text: Właśnie zacząłem robić doktorat i mamy zrobić projekt dla klasy, na zajęcia chodzi 14 osób i mamy razem opracować system. Nie byłem wcześniej w środowisku akademickim i pracowałem w branży i wiem, że bardzo trudno jest zarządzać nawet kilkoma osobami w celu osiągnięcia tego samego celu. Za kilka tygodni mamy zamiar zrobić pierwsze spotkanie. Najpierw zasugeruję użycie systemu kontroli wersji, takiego jak SVN. Po drugie, spróbuję przejąć inicjatywę w zakresie architektury systemu, ponieważ myślę, że mam większe doświadczenie. Ponieważ zajęcia dotyczą _wizji komputerowej_ i przypuszczam, że większość ludzi związana jest z badaniami, więc istnieje duża szansa, że mam większe doświadczenie. Chętnie przekażę architekturę komuś innemu, jeśli ma większe doświadczenie. Co jeszcze powinniśmy zrobić, aby robić postępy bez większych problemów? PS. Możesz założyć, że każdy z nas będzie pracował zdalnie i spotykać się najlepiej raz w tygodniu (choć nie wszyscy będą uczestniczyć). A projekt musi być ukończony za 2 miesiące. Nie musi to być doskonały, kompletny produkt, wystarczy wykonać prototyp. PPS. Aspekty grupy przypominają mi grupy projektowe open source, być może odpowiedzi będą pomocne również dla tych grup.


title: Czy istnieją funkcjonalne generyki i jaka jest dla nich prawidłowa nazwa, jeśli tak jest?

text: Rozważ następującą klasę ogólną: public class EntityChangeInfo<EntityType,TEntityKey> { ChangeTypeEnum ChangeType {get;} TEntityKeyType EntityKey {get;} } Tutaj `EntityType` jednoznacznie definiuje `TEntityKeyType`. Byłoby więc miło mieć jakąś mapę typów: public class EntityChangeInfo<EntityType,TEntityKey> z mapą < [ EntityType : Person -> TEntityKeyType : int] [ EntityType : Car -> TEntityKeyType : CarIdType ]> { ChangeTypeEnum ChangeType { get;} TEntityKeyType EntityKey {get;} } Kolejny przykład to: public class Foo<TIn> z mapą < [TIn : Person -> TOut1 : string, TOut2 : int, ..., TOutN : double ] [TIn : Car -> TOut1 : int, TOut2 :int, ..., TOutN : Cena ] > { TOut1 Prop1 {pobierz;ustaw;} TOut2 Prop2 {pobierz;ustaw;} ... TOutN PropN {pobierz;ustaw;} } Rozsądny pytanie: jak może to zinterpretować kompilator? Cóż, dla mnie to tylko skrót do dwóch strukturalnie podobnych klas: public sealed class Foo<Person> { string Prop1 {get;set;} int Prop2 {get;set;} ... double PropN {get;set;} } public sealed class Foo<Car> { int Prop1 {get;set;} int Prop2 {get;set;} ... Cena PropN {get;set;} } Ale poza tym moglibyśmy sobie wyobrazić jakąś aktualizację `Foo< >`: public class Foo<TIn> z mapą < [TIn : Osoba -> TOut1 : string, TOut2 : int, ..., TOutN : double ] [TIn : Samochód -> TOut1 : int, TOut2 :int, .. ., TOutN : Cena ] > { TOut1 Prop1 {pobierz;ustaw;} TOut2 Prop2 {pobierz;ustaw;} ... TOutN PropN {pobierz;ustaw;} public override string ToString() { return string.Format("prop1= {0}, prop2={1},... propN={N-1}, Prop1, Prop2,...,PropN); } } To wszystko może wydawać się dość powierzchowne, ale pomysł pojawił się, gdy projektowałem wiadomości dla naszego systemu. Pierwsza klasa. Wiele wiadomości o tej samej strukturze powinno być rozróżnianych przez `EntityType`. Pytanie więc, czy taka konstrukcja istnieje w jakimkolwiek języku programowania?


title: Dobra praktyka lub usługa monitorowania nieobsługiwanych błędów aplikacji dla małej organizacji

text: Pracuję z wieloma programami z różnymi sposobami monitorowania błędów. Kiedy tworzę oprogramowanie, zwykle wysyłam e-mail ze śladem stosu do administratorów (zazwyczaj mnie). Niektóre oprogramowanie klienta jest monitorowane przez zespół, który sprawdza, czy dana partia przebiegła pomyślnie. Inne oprogramowanie może w ogóle nie mieć żadnego monitorowania (ktoś zadzwoni, gdy coś pójdzie nie tak). Wysyłanie e-maili jest dobre, z wyjątkiem sytuacji, gdy coś zaczyna się nie udać, moja poczta szybko się zapełnia. Nie chcę też rozwiązywać tego samego problemu w kodzie dla każdego oprogramowania. Czy istnieje jakieś stosunkowo tanie i mało wymagające w utrzymaniu oprogramowanie lub praktyka, aby sobie z tym poradzić. Chcę, żeby był tani/nie wymagający konserwacji, ponieważ zwykle pracuję sam lub w zespołach 5 lub mniejszych. Na przykład byłoby wspaniale, gdyby błędy były agregowane, dzięki czemu nie otrzymuję 10 000 e-maili, gdy wydarzy się coś nieoczekiwanego... Dla wyjaśnienia: Przez nieobsłużone błędy rozumiem wyjątki, które były nieobsłużone przez kod aplikacji, które były propagowane do Tomcat lub Jboss. Nie potrzebuję pomocy, jak wyłapać te błędy. Potrzebuję pomocy, co z nimi zrobić. Czy jest jakaś aplikacja w chmurze, do której mogę wysłać swoje błędy? A może jakiś prosty serwer do zainstalowania? Lub jakąś bibliotekę, która może obsługiwać błędy przy użyciu plików konfiguracyjnych. Używam Javy, jeśli to jakaś pomoc.


title: Jak sprawdzić, czy mój kod jest zoptymalizowany?

text: Jestem tylko programistą pracującym nad projektem. Funkcjonalność, którą zakodowałem, działa zgodnie z oczekiwaniami (pożądany efekt), ale ponieważ jestem jedyną osobą, nie wiem, czy mogę zrobić z nią coś lepszego. Jak określić, czy mój kod jest zoptymalizowany (chcę zwiększyć wydajność niektórych funkcji)? Jedna rzecz, która przychodzi mi na myśl, to _Code Review_, ale nie ma tu nikogo, kto mógłby przejrzeć mój kod. Po prostu próbuję z alternatywną logiką, ale czasami rzeczy stają się stagnacją i są naprawdę brudne. Czy jest inny możliwy sposób?


title: Struktura danych dla wzorca fabryki w praktyce

text: Wdrażam coś, co w zasadzie jest systemem dziennika zdarzeń dla większego systemu. Do zbudowania tabeli użyłem dziedziczenia jednotabelowego. Problem, który mam, polega na ustaleniu, jak zbudować klasy z bazy danych. Dość łatwo jest mi rozgryźć, czym one są, aby załadować je do bazy danych, ale wyciągnięcie ich i utworzenie z nich obiektów i kolekcji jest trochę trudniejsze. Jedynym sposobem, jaki znam, jest posiadanie instrukcji switch i mam nadzieję, że jeśli ktoś zaimplementuje nowy obiekt, zaktualizuje przełącznik, ale nie wydaje się to praktyczne. Jestem pewien, że coś nie tak myślę o tym, jak myślę o wzorcu fabrycznym.


title: Wybór licencji dla projektów open source

text: Zrobiłem kilka projektów open source i planuję zrobić więcej w przyszłości. Do tej pory wydałem cały mój kod na licencji GPL, ale przeczytałem kilka artykułów, w których twierdzi się, że GPL jest zbyt restrykcyjna, aby jakikolwiek kod mógł być używany w środowisku korporacyjnym. To podobno zmniejsza składki. Oto, co chciałem osiągnąć: Dla **pełnych aplikacji**: * nie używać komercyjnego, z wyjątkiem sprzedaży _wsparcia_ dla aplikacji (tj. aplikacja nie może być sprzedana, ale wszystko wokół niej może) Dla **bibliotek** (komponenty , wtyczki, ...): * mogą być uwzględnione w projektach komercyjnych **bez modyfikacji** * każda modyfikacja biblioteka/komponent musi być open source (przysyłany z powrotem) - reszta projektu, komercyjna lub nie, nie jest Dotyczy aplikacji GPL nadal wydaje się logicznym wyborem. W przypadku bibliotek moje prymitywne rozumienie licencji sprawia, że uważam, że LGPL jest dobrym dopasowaniem, ale nie jestem pewien. Przyjrzałem się licencji MIT i wydaje mi się to zbyt liberalne. Przez większość czasu chcę, aby ludzie używali mojego kodu w dowolnym miejscu, pod warunkiem, że zostaną wprowadzone jakiekolwiek ulepszenia. To prowadzi mnie do moich pytań: czy LGPL jest logicznym wyborem dla bibliotek open source, komponentów, wtyczek itp.? Czy istnieje lepsza alternatywa? Czy GPL to dobry wybór dla moich aplikacji, czy jest coś lepszego? **Aktualizacja:** Dla tych, którzy są zainteresowani moją ostateczną decyzją, zdecydowałem się wydać moje biblioteki w ramach schematu wielu licencji, MPL, LGPL i GPL. Pozwala to praktycznie _każdemu_ używać mojego kodu bez zobowiązań, chyba że zmodyfikują go w ramach MPL, w którym to przypadku musiałby zostać wniesiony z powrotem. Oznacza to, że kod może być używany zarówno przez FSF, jak i oprogramowanie własnościowe, ale zapobiega to „złej” komercyjnej eksploatacji (a przynajmniej tak mi się wydaje).


title: Przechowywanie adresów dawców w relacyjnej bazie danych

text: Tworzę bazę danych dawców dla organizacji non-profit i jedną z kwestii, nad którą się rozmyślam, jest sposób przechowywania niektórych danych dawców. Są rodziny, dla których zapisujemy imiona obojga małżonków, stąd każdy małżonek otrzymuje swój własny wpis w DB i oczywiście mają ten sam adres. Ponieważ może się zdarzyć, że w bazie danych będzie istniało wiele osób z rodziny, które będą dzielić ten sam adres (mąż, żona, dzieci), rozważam przechowywanie adresów w osobnej tabeli i posiadanie Address_ID jako klucza obcego na stole Roster. Zmniejszyłoby to ilość duplikatów danych, a jeśli chodzi o zmiany, byłoby znacznie łatwiej obsługiwać wielu dawców, którzy są częścią rodziny. Tabela: Kolumny spisu: Roster_ID (PK) PrimaryRoster_ID (FK, referencje Roster_ID głowy gospodarstwa domowego) Address_ID (FK) Imię Nazwisko Telefon Tabela: Adres Kolumny: Address_ID Ulica Apt Miasto Stan Kod pocztowy Nie zbudowałem jeszcze GUI do wprowadzania dane – nadal buduję bazę danych i wypełniam ją za pomocą skryptów, ale pomysł jest taki, że kiedy tworzony jest nowy dawca, jest on przypisywany do głównego dawcy, a każdy inny dawca, który jest częścią tej samej rodziny, będzie miał Roster_ID głównego dawcy wypełniane w kolumnie PrimaryRoster_ID, aby można było utworzyć łącze między członkami rodziny. Osoby w tej samej rodzinie nie muszą mieć tego samego adresu (jeśli nie, dla tego dawcy zostanie sporządzony osobny rekord adresu), ale jeśli w rodzinie są 4 osoby, wszystkie mają oddzielne rekordy DB i użytkownik, który wprowadza dane, przypisuje ten sam rekord adresu do wszystkich z nich, tylko jeden rekord będzie istniał w tabeli Adres, a 4 rekordy w tabeli Roster mają ten rekord adresu jako FK, aby powiązać każdą osobę z tym adresem. Czy ktoś może pomyśleć o lepszym sposobie radzenia sobie z tym, czy ten projekt byłby wystarczający? Rozmiar bazy danych w tej chwili wynosi około 150 rekordów w tabeli Roster, z maksymalnie 1000 rekordów w przyszłości. Edycja: Nieznacznie zmieniono projekt tabeli - zdałem sobie sprawę, że Address_ID powinien tak naprawdę być FK w Roster zamiast mieć tabelę Roster_Address.


title: Historia użytkownika a wymagania

text: User Story rejestruje to, co użytkownik chce zrobić z systemem na wysokim poziomie. Rozumiem, że historyjka użytkownika wpłynęłaby na szereg wymagań niskiego poziomu. Czy historyjka użytkownika jest taka sama jak wymagania wysokiego poziomu dla systemu?


title: Czy potrzebujemy cotygodniowego spotkania na temat statusu projektu w Agile?

text: Pracuję w małej firmie liczącej około 15 osób (dev i qa). Staramy się praktykować Agile w naszej firmie. Prowadzimy codzienne spotkania stand-up. Odbywamy również cotygodniowe spotkanie z naszym CTO na temat statusu projektu. Tam informujemy naszego CTO o zadaniach z ostatniego tygodnia i ogólnym statusie projektu. Moje pytanie brzmi, czy robienie tego cotygodniowego spotkania statusowego z naszym CTO jest obsługiwane w Agile, czy nie?


title: Struktura danych dla gry planszowej Peg

text: Jaka struktura danych sprawdziłaby się w grze planszowej z trójkątnymi kołkami? To trójkąt 5x5x5 z 15 otworami.


title: Czym są frameworki, stosy i oprogramowanie pośredniczące?

text: Hej, jestem studentem programisty pracującym obecnie w Javie. Często spotykam się z kilkoma terminami i byłoby bardzo pomocne, gdyby ktoś wyjaśnił różnice. Skłoniły mnie moje badania, które przeprowadziłem podczas czytania tego pytania. W każdym razie tutaj są warunki (i linki wiki), przeczytałem ich wiki, ale nadal nie jestem pewien. Software Stack Software Framework/framework aplikacji - czy jest jakaś różnica? czym oni są? Oprogramowanie pośredniczące


title: Przechowywanie informacji o karcie kredytowej: Szukasz kreatywnego rozwiązania

text: Niedawno stwierdziłem, że muszę regularnie wystawiać faktury. Jestem bardzo niechętny do przechowywania informacji o kartach kredytowych ludzi i odmawiam podejmowania ryzyka w tym zakresie. Jednak utknąłem między młotem a kowadłem. Korzystanie z bramki w mojej okolicy i walucie jest zbyt drogie. Zasadniczo, w obecnym stanie rzeczy, nie możemy prowadzić interesów przez bramę. Jednak potrzebujemy powtarzających się rachunków i pojawiła się potrzeba przechowywania informacji o kartach kredytowych. Pomyślałem o przechowywaniu numerów kart kredytowych (zaszyfrowanych), częściowo lub w całości, a następnie zapisaniu numeru CCV lokalnie na maszynie bezprzewodowej. Aby rozliczać klientów, generowałbym tymczasowe tabele rozliczeń i ręcznie uruchamiałem formularz dla każdego klienta, który musi zostać rozliczony. Ręcznie wypełniłbym CCV i przesłałby formularz do mojego procesora płatności (nie będą przechowywać danych, niestety - tylko przetworzą płatność). Jest to ręczna PITA i pokonuje punkt automatyzacji, ale jest to mój najlepszy zakład poza przechowywaniem danych wprost. Czy możesz mi udzielić porady na temat mojego programu?


title: Filtrowanie popularnych znaków początkowych/końcowych z tablicy/listy ciągów

text: Ok, więc na przykład mam tablicę ciągów z każdym ciągiem, jak poniżej: 364VMS1029 364VMSH920 364VMSH192 364VMSU839 364VMN2382 364VMR223 364VMR2X3 364VMN829 364VMN8757 364VMN831 `364VM` i odfiltrować je? Jeśli nie ma wspólnego charakteru, nie rób nic.


title: Jakieś sugerowane podejścia do śledzenia błędów/defektów?

text: Jaki jest najlepszy sposób śledzenia źródeł defektów w tfs? Mamy różne zespoły do projektu, takie jak zespół ds. luk w zabezpieczeniach, klient, przedsprzedaż itp. Dajemy build, a te zespoły niezależnie go testują. Nie mają dostępu do naszego systemu tfs. Dlatego zwykle wysyłają swoje wady e-mailem. Zazwyczaj zostanie wysłany w formacie Excel. Nasz zespół testerów pobiera je i loguje do tfs. Czasami modyfikują oryginalny opis wady (w Excelu) i dodają oczekiwane/rzeczywiste wyniki. Czasami nie podają źródła. Mówię o zarządzaniu różnymi źródłami jako takimi. Czy istnieje sposób na dodanie tych źródeł do tfs i powiązanie tego konkretnego źródła z defektami, z indywidualnymi komentarzami z nimi związanymi (mówiącymi, gdzie w źródle możemy znaleźć rzeczywisty materiał dla defektu). Edycja: nie wiem, czy istnieje sposób na zarządzanie różnymi źródłami. Rozważ to: zespół oceny podatności wyszedł z defektami/sugestiami. Przechwycili go w Excelu i przekazali zespołowi testowemu (w moim przypadku). Zespół testowy bierze odpowiedzialność za opracowanie defektu i zalogowanie go w tfs. Teraz powiedz, że Excel ma 20 wadliwych elementów. To jest moje źródło. (Odpowiada na pytanie _skąd wzięła się ta wada_ ). Więc ostatecznie, kiedy patrzę na błąd, wiem, skąd się wziął – ostatecznie będę patrzeć na e-mail wysłany od zespołu VA, który ma plik Excel lub sam plik Excela wysłany przez zespół VA. Może to być jeden z 20 elementów tego programu Excel. W jaki sposób tester powinien połączyć się z tym źródłem tylko raz? Wręcz przeciwnie, nie ma sensu, aby tester dołączał tego samego excela 20 razy (tj. dołączał ten sam excel dla 20 defektów podczas logowania do tfs), prawda? Mam nadzieję, że rozumiesz mój punkt widzenia.


title: Kiedy dodać nowy projekt do rozwiązania?

text: Uporządkuję wytyczne dotyczące kontroli wersji mojej firmy. Jednym z moich zadań jest określenie, jak powinny być zorganizowane rozwiązania w bardzo szerokim znaczeniu. Niejako doszedłem do własnego wniosku, że jednym ogólnym wymogiem do udokumentowania jest to, że w większości projekty CSProj/VBProj powinny funkcjonować samodzielnie na tym samym poziomie w oddziale. Istnieje jednak wymierna liczba projektów, które nie są niezależne i są ściśle ze sobą powiązane. Na przykład projekt testów jednostkowych sam w sobie nie ma działalności, ponieważ istnieje tylko w celu wsparcia jednego innego projektu. Więc może (i powinien) być bezpośrednio dodany do rozwiązania z projektem, który obsługuje. To samo z indywidualnym interfejsem użytkownika, którego jedynym istnieniem jest testowanie jednego projektu. Albo testowy projekt wdrożeniowy... i prawdopodobnie podobne przykłady. Więc moim celem jest nakazanie, aby projekty nie były dodawane bezpośrednio do rozwiązania, z wyjątkiem takich przykładów. **Zastrzeżenie** Nie mówię, że jedna aplikacja nie może mieć rozwiązania z wieloma projektami, które zostały „Dodaj istniejący projekt” do rozwiązania. Ale w takich przypadkach każdy z tych projektów powinien być dodawany/usuwalny, ponieważ wszystkie istnieją na tym samym poziomie przestrzeni nazw lub organizacji folderów. Byłoby to najłatwiejsze, gdybym mogła znaleźć dokumentację z historią lepszego sformułowania. Ale wszelkie wyszukiwania, które wykonuję, kończą się samouczkami How-To, aby dodać projekty do rozwiązania. Nie ma najlepszych praktyk, które się w to wchodzą.


title: Hermetyzuj wiele właściwości w jedną klasę do użycia jako niestandardowa DependencyProperty

text: Moja aplikacja jest projektem WPF zaimplementowanym w C# .NET (4.5) przy użyciu architektury MVVM bez kodu w widoku. Aby wyeliminować sprzężenie między View a ViewModel, implementuję niektóre zachowania specyficzne dla WPF jako niestandardowe DependencyProperties, które można powiązać z „prostymi” właściwościami eksponowanymi przez ViewModel. Zestaw View ma teraz kilka z tych DependencyProperties, które są powiązane przez „Windows” najwyższego poziomu w widoku. Nie widzę żadnego oczywistego powodu, aby zebrać je razem w jedną klasę „Kontroler”, poza tym, że kiedy to robię, kod nagle wygląda ładniej, ale powoduje to niepotrzebne sprzężenie między tymi właściwościami tylko dlatego, że mogą być powiązane przez Widok najwyższego poziomu, ponieważ nie wszystkie obiekty ViewModel wymagają wszystkich zachowań. Czy należy poświęcić pewną redukcję sprzężenia, wymagając, aby obiekty ViewModel najwyższego poziomu uwidaczniały spójną właściwość "Controller", aby widok był powiązany z pojedynczą, niestandardową DependencyProperty? Czy nie byłoby lepiej zaimplementować wiele, jednofunkcyjnych niestandardowych właściwości DependencyProperties dla każdego z zachowań? Czy istnieje zupełnie inne podejście, z którego mógłbym skorzystać, na przykład zapewnienie pewnego rodzaju „kontenera zachowań”? Podejście z jednym kontrolerem: korzystanie z systemu; za pomocą System.Threading; za pomocą System.Windows; za pomocą FrameworkMVVM.BindingControllers; // For TopLevelViewController namespace FrameworkMVVM.ViewBehaviours { public static class WindowBindableProperties { // Jedna właściwość, która hermetyzuje zachowania w klasie kontrolera #region WindowControllerProperty private static DependencyProperty _windowControllerProperty = DependencyProperty.RegisterTttachedo typu "ViewlerAttached"(Winper(indow) ), nowy PropertyMetadata(null, WindowControllerPropertyChanged) ); public static DependencyProperty WindowControllerProperty { get { return _windowControllerProperty; } } private static void WindowControllerPropertyChanged( DependencyObject d, DependencyPropertyChangedEventArgs e) { // Przechwytywanie zdarzeń, EventHandlers, SynchronizationContext, // DialogResult itp. tutaj. } #endregion } } Podejście do wielu właściwości: using System; za pomocą System.Threading; za pomocą System.Windows; namespace FrameworkMVVM.ViewBehaviours { public static class WindowBindableProperties { // Wiele właściwości, po jednej dla każdego zachowania. #region CloseViewEventProperty prywatne statyczne DependencyProperty _closeViewEventProperty = DependencyProperty.RegisterAttached ( "CloseViewEvent", typeof(EventHandler), typeof(WindowBindableProperties), new PropertyMetadata(null, CloseViewEventPropertyChanged) ); // Pozostała część implementacji CloseViewEvent trafia tutaj. #endregion #region DialogResultProperty prywatne statyczne DependencyProperty _dialogResultProperty = DependencyProperty.RegisterAttached ( „DialogResultProperty”, typeof(Boolean?), typeof(WindowBindableProperties), nowa PropertyMetadata(null, DialogResultPropertyChanged) // Pozostała część implementacji DialogResultProperty trafia tutaj. #endregion #region ViewContextProperty prywatny statyczny DependencyProperty _viewContextProperty = DependencyProperty.RegisterAttached ( „ViewContextProperty”, typeof(SynchronizationContext), typeof(WindowBindableProperties), new PropertyMetadata(null, ViewContextPropertyChanged) ); // Pozostała część implementacji ViewContextProperty trafia tutaj. #endregion // Itd., itd., itd. } }


title: Algorytm wyszukiwania podzbioru spełniającego kryteria?

text: Niedawno wpadłem na problem, o którym chciałbym się podzielić z kimś przemyśleniami na tym forum. Odnosi się to do znalezienia podzbioru. W rzeczywistości jest to bardziej skomplikowane, ale starałem się to przedstawić za pomocą prostszych pojęć. Aby było łatwiej, stworzyłem ten koncepcyjny model DB: ![Model receptury](http://i.stack.imgur.com/M9mvd.jpg) Załóżmy, że jest to DB do przechowywania przepisów. Przepis może mieć wiele instrukcji i wiele składników. Składniki są przechowywane w szafce i wiemy, ile każdego składnika mamy. Teraz, kiedy tworzymy przepis, musimy określić, ile każdego składnika potrzebujemy. Gdy chcemy skorzystać z przepisu, po prostu sprawdzimy, czy wymagana ilość jest mniejsza niż dostępna ilość dla każdego produktu, a następnie zdecydujemy, czy możemy ugotować obiad - jeśli wymagana ilość co najmniej jednego składnika jest mniejsza niż dostępna ilość - przepis nie może być gotowany. Proste zapytanie sql, aby uzyskać wynik. To proste, ale zastanawiam się, jak mam działać, gdy problem występuje odwrotnie, czyli jak znaleźć przepisy, które można ugotować tylko z dostępnych składników? Mam nadzieję, że moje wyjaśnienie jest jasne, ale jeśli potrzebujesz więcej wyjaśnień, zapytaj.


title: Zastosowania inżyniera odwrotnego i bardzo ogólny przegląd procesów

text: Jako student-programista mam bardzo ograniczoną wiedzę na temat działania większości oprogramowania konsumenckiego. Bardzo chciałbym, aby pewnego dnia móc dokonać inżynierii wstecznej oprogramowania, aby dowiedzieć się, co je napędza i zaimplementować je na różne sposoby. Moje prawdziwe pytanie, jaki jest ogólny proces, którego wymaga inżynieria odwrotna. Zdaję sobie sprawę, że jest to bardzo szerokie. Właśnie zastanawiałem się nad narzędziami, takimi jak dekompilatory, których ludzie używają.


title: Jakie umiejętności są potrzebne do stworzenia aplikacji na Androida?

text: Jakiej wiedzy potrzeba do stworzenia aplikacji na Androida? Jak łatwo jest opublikować je na rynku aplikacji? Myślałem o wypróbowaniu jednego, gdy będę miał mocniejsze zrozumienie Javy. Na jakich umiejętnościach powinienem się skupić, aby osiągnąć ten cel? Czy myślenie, że mógłbym w niedalekiej przyszłości opracować aplikację taką jak edytor zdjęć (którą już mogę w Javie) z średniozaawansowanym doświadczeniem w Javie, czy też aplikacje są bardziej dla małych zespołów lub komercyjnych firm programistycznych? To pytanie służy jako osobista lista rzeczy do zrobienia na temat tego, czego się nauczyć. Chciałbym w niedalekiej przyszłości stworzyć aplikację na Androida, na której mógłbym zarabiać.


title: Który algorytm jest szybszy?

text: Tworzę małą grę, w której komputer generuje pseudolosową liczbę w podanym zakresie, a użytkownik musi ją odgadnąć. Wprowadziłem również opcję gry komputer vs komputer. Mam na myśli to, że komputer generuje losową liczbę i komputer powinien ją odgadnąć. Najłatwiejszym sposobem, jaki znalazłem, było utworzenie pętli for i zwiększenie zmiennej o 1, dopóki nie zgadnie. Ale postanowiłem spróbować stworzyć własny algorytm na ten temat. Zasadniczo zmienna przechowująca liczbę zgadywania jest równa zakresowi / 2, a następnie program wchodzi w pętlę while, w której jeśli liczba losowa > liczba generowana przez logikę (ta, która jest = do zakresu /2), to 2 do dwóch i dodaj do niego 1. Jeśli liczba to < program * o 2 i dodawaj do niego jeden, aż odgadnie liczbę. Oto kod w C++: void aiVsAI(int range){ // argument zakresu jest używany do podania generatora losów func int random_number = generate_random_number(range); // przypisanie liczby losowej do zmiennej int odgadnięcie = zakres / 2; // liczba przypuszczeń komputera int try = 0; // ile prób komputer potrzebował, aby odgadnąć liczbę while(guess != random_number){ // gdy odgadnięcie nie jest takie samo jak liczba losowa if(guess > random_number){ // jeśli zgadnięcie jest > niż liczba losowa liczba zgadywanie = zgadywanie / 2 + 1; // stwórz wartość 2 i dodaj do niej jeden } else if(guess < random_number){ // jeśli liczba jest < niż liczba, to zgadnij = zgadnij * 2 + 1; // * to z 2 i dodaj jeden } try++; // zwiększ liczbę opon } std::cout << prób; } generate_random_number to funkcja, która wygeneruje liczbę pseudolosową. _Moje pytanie brzmi, który algorytm jest szybszy, czy po prostu używa pętli for i zwiększania zmiennej o jeden, aż zgadnie liczbę?_ * * * Oto pełny kod, jeśli ktoś go do czegoś potrzebuje: #include <iostream> #include <string > #include <cstdlib> #include <time.h> //funkcja generująca liczbę losową int generate_random_number(int range){ // argument range służy do reprezentowania maksymalnej wartości liczby if(range < 10){ // zakres nie może być < 10, ale może być == std::cout << "zakres nie może być mniejszy niż 10"; wyjście (1); } std::srand(czas(NULL)); // upewnienie się, że liczba losowa będzie za każdym razem inna return rand() % range; // zwrócenie losowo wygenerowanej liczby z określonego zakresu } //komputer w grze kontra komputer void aiVsAI(int zakres){ // argument zakresu jest używany do podania generatora liczb losowych func int random_number = generate_random_number(range); // przypisanie liczby losowej do zmiennej int odgadnięcie = zakres / 2; // liczba przypuszczeń komputera int try = 0; // ile prób komputer potrzebował, aby odgadnąć liczbę while(guess != random_number){ // gdy odgadnięcie nie jest takie samo jak liczba losowa if(guess > random_number){ // jeśli zgadnięcie jest > niż liczba losowa liczba zgadywanie = zgadywanie / 2 + 1; // stwórz wartość 2 i dodaj do niej jeden } else if(guess < random_number){ // jeśli liczba jest < niż liczba, to zgadnij = zgadnij * 2 + 1; // * to z 2 i dodaj jeden } try++; // zwiększ liczbę opon } std::cout << prób; } // Gra człowiek vs człowiek void humanVsAI(int zakres){ // do funkcji generowania losowej podawany jest argument zakresu int random_number = generate_random_number(range); // przypisanie liczby losowej do zmiennej int input = 0; // ta zmienna reprezentuje dane wejściowe użytkownika int try = 0; // liczba prób, które użytkownik podjął, aby odgadnąć liczbę while(input != random_number){ std::cout << "Wprowadź numer: "; // powiadomienie użytkownika o wpisaniu liczby std::cin >> input; // pobranie liczby if(input < random_number) // sprawdzenie, czy dane wejściowe > niż losowa liczba std::cout << "Nie zgadłeś, jesteś za niski..., spróbuj ponownie!\n" ; // powiadomienie użytkownika else{ // inaczej będzie > niż liczba std::cout << "Nie zgadłeś, jesteś za wysoko..., spróbuj ponownie!\n"; // alarmowanie użytkownika } try++; // zwiększanie prób o jeden dla każdej próby// } std::cout << "\n\nDomyślasz się! Aby to zrobić, potrzebujesz " << prób << ".\n\n"; } //gra Człowiek kontra Człowiek void człowiek kontra Człowiek(int zakres){ int number_to_guess; // liczba, którą należy odgadnąć int user_guess; // wprowadzane przez użytkownika int zgadnij; std::cout << "Wpisz liczbę z zakresu 1- "<< zakres<<": \n"; // powiadomienie użytkownika o wpisaniu numeru std::cin >> number_to_guess; // wpisanie liczby for(int i = 0; i < 100;i++){ //Wyczyszczenie ekranu std::cout << "\n"; } while(user_guess != number_to_guess){ zgadnij++; std::cout << "Proszę podać numer:\n"; // powiadomienie użytkownika std::cin >> user_guess; // Pobieranie danych wprowadzonych przez użytkownika if(user_guess < number_to_guess) std::cout << "Nie zgadłeś, jesteś za niski..., spróbuj ponownie!\n"; else if(user_guess > number_to_guess) std::cout << "Nie zgadłeś, jesteś za wysoko..., spróbuj ponownie!\n"; } std::cout << "Zgadujesz liczbę\n"; } int main(){ std::string game_type; znak gra_gra; zakres wewnętrzny = 0; while(1){ std::cout << "Wprowadź zakres (wpisz 100, aby pozostawić domyślny)\n"; std::cin >> zakres; std::cout <<"W co chcesz grać AI kontra człowiek, człowiek kontra człowiek czy AI kontra AI?\n"; std::cin.ignore(); // pobranie linii std::getline(std::cin, game_type); // pobieranie danych wejściowych użytkownika std::cin.clear(); // wyczyszczenie if(game_type == "AI vs AI" || game_type == "ai vs AI"){ // jeśli użytkownik wybrał AI vs AI std::cout<<"Wybrałeś AI vs AI\n"; aiVsAI(zakres); // wywołanie funkcji AI } else if(game_type == "człowiek kontra AI" || game_type == "ai kontra człowiek" || game_type == "człowiek kontra AI" || game_type == "Człowiek kontra AI" || game_type == "Człowiek kontra AI" ){ // jeśli użytkownik wybrał AI kontra człowiek std::cout << "Wybrałeś człowieka kontra AI\n"; człowiekVsAI(zakres); // wywołanie funkcji człowiek kontra człowiek } else if(game_type == "człowiek kontra człowiek" ||game_type == "Człowiek kontra człowiek" ||game_type == "Człowiek kontra człowiek" ||game_type == "człowiek kontra człowiek" ){ // jeśli użytkownik wybrał człowieka vs człowieka std::cout <<"Wybierasz człowieka vs człowieka\n"; człowiekVsCzłowiek(zakres); // wywołanie funkcji człowiek kontra człowiek } else{ // W przypadku jakiegokolwiek błędu std::cerr << "Wystąpił błąd!"; } std::cout << "Chcesz zagrać w inną grę?\n"; // chcesz kolejną grę???? std::cin >> gra_gra; if(play_game == 'y' || play_game == 'Y') std::cout <<" rozpoczynanie innej gry\n"; inaczej złamać; // na razie dość gry. } zwróć 0; }


title: Zdobywanie doświadczenia w pracy z zespołem

text: Od zawsze programowałem solo i chciałbym zdobyć doświadczenie w pracy w zespole. Gdzie są miejsca, do których mogę się udać, aby zdobyć doświadczenie z zespołem, zakładając, że jestem gotów pracować za darmo w projekcie open source po prostu dla zdobycia doświadczenia. (SIDENOTE) Myślę, że to pytanie można wzmocnić, ponieważ nie sądzę, aby w obecnej formie było jasne i zwięzłe. Zasadniczo proszę o zasoby, jak znaleźć zespół do rozwoju, aby nauczyć się pracować z innymi. Zmień to pytanie według własnego uznania. Przepraszam, w tej chwili nie mam wystarczającej liczby punktów, aby zrobić z tego wiki


title: Tworzenie natywnych aplikacji mobilnych — jak ustrukturyzować swoje historyjki użytkownika?

text: Mam zamiar rozpocząć projekt, który będzie obejmował tworzenie prototypowych natywnych aplikacji mobilnych (początkowo na iOS i Androida), a także internetowego interfejsu administratora i interfejsu API do komunikowania się tych aplikacji. Mamy już przygotowaną listę historii, jednak wiele z nich jest w formacie: Jako użytkownik mobilny chcę mieć możliwość wyświetlenia ekranu logowania, aby móc zalogować się do aplikacji. pojedyncza platforma, nie widziałbym problemu. Ponieważ jednak celujemy w wiele platform, nie jestem pewien, czy powinny one być teraz duplikowane, np. „Jako użytkownik Androida” lub podobne. Wydaje się, że to powielanie, ale jest to praca, którą trzeba będzie wykonać osobno dla każdej platformy. Jest to pierwszy projekt mobilny, dla którego staliśmy się natywni — wcześniej był to Phonegap i wszystkie historie wrzuciliśmy do kategorii „Jako użytkownik mobilny”. Ponieważ zasadniczo była to aplikacja internetowa opakowana w natywny kod, nie stanowiło to zbytniego problemu, ale jestem świadomy, że całkowicie natywne aplikacje to inna gra w piłkę!


title: Jak działa licencja na platformę LGPL open source?

text: Nic nie wiedząc, napisałem dużą aplikację, prawie 1 rok kodowania. Robi wideo/audio, takie jak softphone do użytku komercyjnego (sprzedajemy go). Użyłem frameworka, który był na licencji LGPL, pomniejszej Publicznej Licencji Gnu. Teraz, zanim wypuszczę go do produkcji, ponieważ użyłem kodeka wideo `H.264` i frameworka 'LGPL', co powinienem wiedzieć i co powinienem zrobić? Czy nie muszę nic robić? To jest mój pracodawca, który wypuszcza i sprzedaje aplikację, po prostu wykonałem swoją pracę, tworząc aplikację i uruchamiając ją bez awarii. Czy muszę ubiegać się o licencję do sądu? Czy mogę ubiegać się o licencję do programistów ramowych? Jak sprawić, bym stała się ważna, zanim przekażę to kierownictwu mojej firmy. **Kontynuacja:** Koder H.264 posiada licencję GPL Dekoder H.264 posiada licencję LGPL Gdzie kupić licencję kodera? http://www.x264licensing.com/features Gdzie mogę kupić licencję na dekoder? http://www.mpegla.com/main/programs/AVC/Pages/AgreementExpress.aspx Ile kosztuje licencja? http://www.zdnet.com/blog/bott/h264-patents-ile-do-they-really-cost/2122


title: Jakie są zalety modelu kompilacji GLSL?

text: GLSL zasadniczo różni się od innych rozwiązań shaderów, ponieważ serwer (sterownik GPU) jest odpowiedzialny za kompilację shadera. Cg i HLSL są zazwyczaj kompilowane _a priori_ i wysyłane do GPU w ten sposób. Powoduje to pewne praktyczne problemy w świecie rzeczywistym: * wiele sterowników dostarcza kompilatory z błędami * kompilatory różnią się pod względem ścisłości (jeden GPU może zaakceptować program, a inny nie) * również nie możemy wiedzieć, w jaki sposób zostanie zoptymalizowany kod asemblera. jakie są zalety obecnego podejścia GLSL? Czy warto?


title: Czy istnieje jakieś niebezpieczeństwo w zapisywaniu surowych bajtów do pliku?

text: Pracuję nad problemem w Perłach Programowania -- konkretnie nad implementacją programu, który sortuje plik zawierający co najwyżej 10 000 000 liczb całkowitych (kolumna 1, zadanie 3). Ponieważ książka nie określa, w jaki sposób dane powinny być przechowywane w pliku, rozważam przechowywanie liczb całkowitych jako surowych bajtów (istnieją inne ograniczenia, które sprawiają, że surowe bajty są dobrą opcją). Nigdy wcześniej nie pracowałem na tak niskim poziomie, więc chcę wiedzieć, czy jest coś niebezpiecznego, na co powinienem uważać. Czy muszę się martwić o przypadkowe użycie jakiejś sekwencji końca pliku, na przykład podczas zapisywania nieprzetworzonych bajtów do pliku? Edycja: Teraz zdaję sobie sprawę, jak szerokie było moje pytanie. Naprawdę miałem na myśli problemy bardziej katastrofalne, jak przypadkowe nadpisanie innych plików na dysku. Przepraszam, że początkowo nie byłam jaśniejsza.


title: Jak powinien działać mój lokalny przepływ pracy git?

text: W domu mam serwer, na którym działa jakieś oprogramowanie (na stosie LAMP, ale dostępny tylko wewnętrznie). Mam inną maszynę i laptopa, których używam do tworzenia wspomnianego oprogramowania. Jaki jest dla mnie najlepszy przepływ pracy? Czy powinienem mieć repozytorium na moim lokalnym serwerze, utworzyć gałąź na żywo, gałąź pomostową i gałąź deweloperską, a następnie pobrać gałąź deweloperską z mojego laptopa/komputera deweloperskiego do pracy, zatwierdzić to z powrotem, gdy skończę, a następnie scalić gałąź deweloperską z gałęzią pomostową do testowania, przed dalszym połączeniem z gałęzią na żywo? Czy po prostu wyewidencjonowałbym gałąź produkcyjną na moim /www/var/ na moim serwerze? A może myślę/podchodzę do tego wszystkiego źle? Dziękuję.


title: VB.net - Nie można usunąć/nadpisać plików w środowisku Netapp

text: Od jakiegoś czasu pracuję nad aplikacją do wydawania zmian. Przepływ pracy jest następujący: 1. Zarchiwizuj plik pomostowy 2. Zarchiwizuj bieżący plik prod 3. Przenieś pomost do prod * Usuń plik prod * Skopiuj plik pomostowy do prod dir * Usuń oryginalny plik pomostowy Gdy wykonuję mój kod na serwerze Windows Server przy użyciu UNC (tj.: \Server1\d$\Production) działa idealnie. Mój problem polega na tym, że większość naszych zmian dotyczy systemu plików Net App. Kiedy wykonuję przeciwko temu, otrzymałem wiele różnych błędów w zależności od struktury mojego kodu. Obecnie otrzymuję komunikat „Proces nie może uzyskać dostępu do pliku '\Netapp\share\files\FILE_NAME.ext', ponieważ jest używany przez inny proces”. Oto mój obecny kod: Private Sub ReleaseToProd_Click(sender As Object, e As EventArgs) Obsługuje ReleaseToProd.Click Dim fs As System.IO.StreamWriter = My.Computer.FileSystem.OpenTextFileWriter(LogPath, True) Dim i = 1 fs.WriteLine ("---" & Now) TextBox1.Text += "Zwalnianie do produkcji:" & vbNewLine dla każdego elementu w ListBox1.SelectedItems If My.Computer.FileSystem.FileExists(Path.Combine(ProdDir, element)) Następnie 'Usuń istniejący plik produkcyjny Try File.Delete(Path.Combine(ProdDir, item)) fs.WriteLine("Deleting " & Path.Combine(ProdDir, item)) 'Skopiuj etapy do produkcji Try File.Copy(Path.Combine(StageDir, item), Path.Combine(ProdDir, item)) fs.WriteLine("Copying " & Path.Combine(StageDir, item) & "\nTO: " & Path.Combine(ProdDir, item)) Spróbuj File.Delete(Path .Com bine(StageDir, item)) fs.WriteLine("Usuwanie " & Path.Combine(StageDir, item)) Catch ex As Exception MsgBox(item & ": problem z usuwaniem ze przemieszczania!" & vbNewLine) TextBox1.Text += item & ": usuwanie problemu ze przemieszczania!!" fs.WriteLine("--- Zwalnianie błędu - Krok 3 ---" & vbNewLine) fs.WriteLine("Ślad stosu:" & vbCrLf & ex.StackTrace & vbNewLine) fs.WriteLine("Ślad stosu:" & vbCrLf & ex.Message & vbNewLine) End Spróbuj Catch ex As Exception MsgBox(item & ": problem z kopiowaniem pliku do produkcji!!" & vbNewLine) TextBox1.Text += item & ": problem z kopiowaniem pliku do produkcji!!" fs.WriteLine("--- Zwalnianie błędu - Krok 2 ---" & vbNewLine) fs.WriteLine("Ślad stosu:" & vbCrLf & ex.StackTrace & vbNewLine) fs.WriteLine("Ślad stosu:" & vbCrLf & ex.Message & vbNewLine) End Spróbuj Catch ex As Exception MsgBox(item & ": problem z usunięciem pliku produkcyjnego!!" & vbNewLine) TextBox1.Text += item & ": problem z usunięciem pliku produkcyjnego!!" fs.WriteLine("--- Usuwanie błędu — krok 1 ---" & vbNewLine) fs.WriteLine("Ślad stosu:" & vbCrLf & ex.StackTrace & vbNewLine) fs.WriteLine("Ślad stosu:" & vbCrLf & ex.Message & vbNewLine) Wreszcie TextBox1.Text += pozycja + " wydany" & vbNewLine End Spróbuj jeszcze TextBox1.Text += pozycja + " wydany" & vbNewLine fs.WriteLine("Releasing Stage:" & vbNewLine & StageDir & "\ " & pozycja & vbNewLine & "Do:" & vbNewLine & ProdDir & "\" & pozycja & vbNewLine & "With Overwrite" & vbNewLine) My.Computer.FileSystem.MoveFile(StageDir & "\" & item, ProdDir & "\ " & item, True) End If i = i + 1 Next ListBox1.Items.Clear() fs.Close() End Sub Wiem, że wszystkie moje zmienne/stałe są takie, jak powinny. Mam pełną kontrolę nad katalogami docelowymi i uruchomiłem aplikację jako administrator. Oto otrzymane ślady stosu: > \--- Error Releasing - Krok 1 --- > > Stack Trace: at System.IO.__Error.WinIOError (Int32 errorCode, String> możeFullPath) w System.IO.File.Delete(String path) w> ChangeManagementApp.Form1.ReleaseToProd_Click(Object sender, EventArgs e)>> Stack Trace: Proces nie może uzyskać dostępu do pliku> '\Netapp\ share\files\FILE_NAME.ext', ponieważ jest używany przez inny > proces. Wygląda to oczywiście na blokadę, ale zapewniam, że nasza aplikacja, która odczytuje te pliki, nie ma blokad... dodatkowo mogę ją ręcznie nadpisać bez żadnych problemów. Jakieś pomysły, jak mogę rozwiązać ten problem? * * * Błędny kod znajduje się tutaj: If My.Computer.FileSystem.FileExists(Path.Combine(ProdDir, item)) Then 'Usuń istniejący plik produkcyjny Try File.Delete(Path.Combine(ProdDir, item)) fs.WriteLine ("Deleting" & Path.Combine(ProdDir, item)) 'Kopiuj inscenizację do produkcji Wypróbuj


title: Czy mogę użyć mojej nazwy użytkownika w legalnej licencji?

text: Mam projekt open source, ale nie chcę używać mojego prawdziwego imienia i nazwiska w pliku licencji. Czy zgodnie z prawem mogę zamiast tego użyć mojej nazwy użytkownika hostującego projekt? Wiem, że programiści nie są prawnikami™, ale szukam porady od osób, które mogły mieć do czynienia z podobnymi problemami.


title: Najlepsza praktyka: dynamicznie obsługuj zmienne dane, przesyłanie wielu plików i kodowanie za pomocą jQuery, AJAX, PHP i MySQL

text: Obecnie piszę aplikację internetową do e-learingu. Przykro mi, jeśli to przesada informacyjna, ale myślę, że lepiej opisać to szczegółowo, aby mieć pomysł. Zastanowiłem się nad każdym punktem i chciałbym tylko wiedzieć, czy moje podejście jest w porządku, czy całkowicie chybione, ponieważ po raz pierwszy przetwarzam tak dużo danych „w locie”. Kursy e-learningowe zawierają pliki różnego typu, m.in. Pliki Word, PDF, Flash (tak, niestety nie da się tego obejść), filmy itp. i mają 1 lub więcej zestawów testów, z których każdy zawiera pytania, do których można dołączyć obrazy (po jednym na każde pytanie) i oczywiście odpowiedzi (pojedyncze lub wielokrotne -wybór), które mogą również zawierać obrazy (po jednym) dodatkowo lub zamiast czystego tekstu. Po zakończeniu tworzony jest plik PDF (certyfikat) i przechowywany na serwerze, który użytkownik może pobrać w dowolnym momencie. Planowany przepływ pracy: 1. Tworzenie kursu odbywa się podobnie do kasy w sklepach internetowych, co oznacza, że klikasz „Nowy kurs” i pojawia się okno, a na górze pojawia się schemat pokazujący, w którym miejscu procesu tworzenia aktualnie się znajdujesz. Cały proces powinien być dynamiczny, aby informacje były przechowywane tylko w końcowej „kasie”. Każda część procesu znajduje się na osobnej „stronie”, ale możesz wrócić i edytować rzeczy. Będzie to zobrazowane tak (oczywiście dodam opisy tekstowe do punktów): ![Workflow](http://i.stack.imgur.com/eFTwX.png) 2. Pierwsza strona zawiera tylko podstawowe informacje, np. Nazwa, wersja, krótki opis oraz lista tematów nauczanych na tym kursie. 3. Druga strona to początek zabawy: Prześlij wiele plików z opisem. Takie przesyłanie plików nie powinno uniemożliwiać korzystania z formularza. Filmy należy przesyłać i kodować w tle. 4. Trzecia strona: Tworzone są zestawy testowe, co oznacza kategorie (zestawy testowe) z podkategoriami (pytania) i podkategoriami (odpowiedzi) również z wieloma plikami wgrywanymi (obrazami). 5. Czwarta strona: przegląd końcowy i potwierdzenie. Jak chcę sobie poradzić: **Przechowywanie danych** Chciałbym w tym przypadku użyć tabel tymczasowych do przechowywania ścieżek plików i podstawowych danych. Ponieważ proces tworzenia można anulować w dowolnym momencie, wszystkie pliki należące do wpisów w bieżącym procesie tworzenia zostaną usunięte. Oznacza to, że rozpoczyna się tworzenie --> Proces jest tworzony w tabeli tymczasowej `creation-processes`. Po wypełnieniu pierwszej strony dane są przechowywane w tabeli tymczasowej z fk do identyfikatora procesu, to samo dotyczy każdego przesłanego pliku. **Kodowanie wideo** Jak tylko plik wideo zostanie przesłany, uruchomię w tle skrypt php, który ustawi wpis bazy danych w tabeli tymczasowej dla pliku wideo i rozpocznie kodowanie za pomocą ffmpeg (3 pliki dla każdego pliku wideo: mp4 , ogg, webm). Przesyłane pliki mogą mieć 4 stany: „Przesyłanie”, „Przetwarzanie”, „Zakończono” i „Błąd”. **Przechowywanie na stałe** Po zakończeniu Dane z tabel tymczasowych są przenoszone do tabel stałych, a następnie usuwane. Pliki, które są nadal przetwarzane (ponieważ kodowanie wideo może zająć trochę czasu) również będą miały swój stan przeniesiony do stałej tabeli. Skrypt kodowania w tle sprawdza nazwę pliku (która jest unikalna: znacznik czasu+md5-skrót nazwy pliku) najpierw w tabeli tymczasowej, a następnie w tabeli stałej. Jeśli żaden wpis nie istnieje w obu, usuwa utworzone pliki. **Zbieranie śmieci** Oprócz używania tabel tymczasowych będę miał stałą tabelę "tmp_files" zawierającą informacje o ścieżce WSZYSTKICH przesyłanych plików. Wpisy i pliki wymienione w tej tabeli są usuwane po anulowaniu procesu, również po zakończeniu wpisy są usuwane (ale nie pliki), ponieważ są teraz przechowywane w zwykłej tabeli (pliki kursów). Więc jeśli coś pójdzie nie tak, mogę co godzinę uruchamiać zadanie cron, które porównuje wpisy "tmp_files" z plikami w zwykłej tabeli i tabeli tymczasowej, a jeśli zawiera wpis, którego nie ma w żadnej z pozostałych tabel, oznacza to istnieje plik zombie, który należy usunąć (wraz z wpisem oczywiście). Cóż, na razie to wszystko. Nie wiem, czy pytania dotyczące planowania oprogramowania są tutaj mile widziane, ale naprawdę chciałbym wiedzieć, czy jest to dobry sposób na podejście do tego procesu, czy nie i czy brakuje mi czegoś istotnego.


title: W jakim stopniu wybór określonej pracy może ograniczyć przyszłe możliwości?

text: Jestem na początku kariery i aktualnie szukam pracy. Wiem, że im dalej od ukończenia college'u, tym bardziej pracodawcy przyglądają się twojemu doświadczeniu, a nie twojemu faktycznemu dyplomowi. Zastanawiam się, czy mając na uwadze ostateczny cel, jakim jest inżynieria oprogramowania / informatyka, czy podjęcie pracy w branży IT ograniczy moje możliwości dostania się do inżynierii oprogramowania? Podobnie, czy podjęcie pracy w zapewnianiu jakości oprogramowania ograniczyłoby mnie do późniejszego zajmowania stanowiska programisty, mimo że obaj zajmują się inżynierią oprogramowania?


title: jak przekonać innych, że powinniśmy przejść na hadoop?

text: Wszystko, co przeczytałem o Hadoop, wydaje się być dokładnie tą technologią, której potrzebujemy, aby nasze przedsiębiorstwo było bardziej skalowalne. Mamy terabajty nieprzetworzonych danych, które są w postaci nierelacyjnej (jakieś pliki tekstowe). Szybko zbliżamy się do górnych granic tego, co może obsłużyć nasz scentralizowany serwer plików i wszyscy są tego świadomi. Większość osób w zespole technicznym, zwłaszcza młodszych członków zespołu technicznego, opowiada się za przejściem z centralnego systemu plików na HDFS. Problem polega na tym, że jest jeden kluczowy (najstarszy, itd.) członek zespołu, który sprzeciwia się tej zmianie i za każdym razem, gdy pojawia się Hadoop, mówi nam, że możemy po prostu dodać kolejny serwer plików i mieć jasność. Tak więc moje pytanie (i tak, to naprawdę subiektywne, ale potrzebuję więcej pomocy w tym zakresie niż w przypadku innych moich pytań) dotyczy tego, jakie kroki możemy podjąć, aby skłonić wyższe kierownictwo do dalszego rozwoju Hadoop pomimo wahania jednego z członków zespołu ?


title: Jak dogłębnie programista powinien rozwijać swoją wiedzę na temat Zunifikowanego Procesu i UML?

text: Wiem, że wiele miejsc używa UML i zunifikowanego procesu jako modelu rozwoju... ale jest też wiele, które tego nie robią. Czy ważne byłoby posiadanie czegoś więcej niż tylko podstawowego i funkcjonalnego zrozumienia tych przedmiotów, czy też lepiej byłoby skupić się na rozwijaniu umiejętności programowania w innych obszarach (np. rozwój języka, IDE itp.)?


title: Jak skojarzyć nowy/zmodyfikowany zestaw zmian z istniejącą recenzją w programie Visual Studio 2012

text: Wypróbowuję nowe narzędzie Code Review w Visual Studio 2012. Co wydaje się w większości w porządku, ale uderzyłem w ścianę, jeśli chodzi o to, kiedy wymagane są zmiany. Jak to powinno być obsługiwane w przeglądzie kodu w ziemi VS2012? 1. Joe przesyła przegląd kodu 2. Fred przegląda i prosi o pewne zmiany 3. Joe wprowadza żądane zmiany 4. ????? W jaki sposób Joe powiąże nowy zestaw zmian z recenzją, aby Fred mógł go zobaczyć? Porzucić istniejącą recenzję (tracąc tym samym wszystkie oryginalne komentarze) i utworzyć nową? A może istnieje sposób na dołączenie nowych zmian do istniejącej recenzji?


title: Kod projektu poza środowiskiem IDE?

text: Czy ktoś projektuje kod poza IDE? Myślę, że projektowanie kodu jest świetne i wszystko, ale jedyne miejsce, w którym faktycznie projektuję kod (oprócz mojej głowy), jest w samym IDE. Ogólnie myślę o tym trochę wcześniej, ale kiedy idę to wypisać, zawsze jest to w IDE; nie ma UML ani nic w tym stylu. Teraz myślę, że posiadanie UML twojego kodu jest naprawdę dobre, ponieważ możesz zobaczyć o wiele więcej kodu na jednym ekranie, jednak problem polega na tym, że po wpisaniu go w UML, muszę wpisać rzeczywisty kod i to jest dla mnie tylko dużym duplikatem. Dla tych, którzy pracują z C# i kodem projektu poza Visual Studio (lub przynajmniej poza edytorem tekstu Visual Studio), jakich narzędzi używasz? Czy te narzędzia umożliwiają konwersję projektu do rzeczywistego kodu szkieletowego? Możliwe jest również przekonwertowanie kodu na projekt (kiedy aktualizujesz kod i potrzebujesz zaktualizowanego diagramu UML lub co nie)?


title: Jak usprawnić środowisko pracy programistów

text: Zarządzam zespołem sześciu programistów, pracujących na różnych systemach. Pracujemy w biurze na planie otwartym, a członkowie siedzą w boksach. Wiele osób na tych forach zajmuje się prywatnymi biurami, ale to nie jest dla mnie opcja. Ale zastanawiałem się, czy są pomysły na inne sposoby na poprawę i wzmocnienie środowiska pracy i doświadczenia. Jedna sugestia to więcej roślin. Wszelkie sugestie byłyby bardzo mile widziane.


title: Którą bazę danych preferować podczas tworzenia systemu inwentaryzacji medycznej WPF?

text: Mam projekt stworzenia systemu inwentaryzacji dla sklepu medycznego. Do tej pory stawiałem czoła prostym wymaganiom, które spełniał XML jako backend db. Moja wiedza na temat interakcji z XML jest całkiem dobra i mogę zrobić prawie wszystko z XML za pomocą LINQ-TO-XML. Ponieważ jest to system inwentaryzacji, jestem nieco zdezorientowany, z której bazy danych powinienem korzystać. Czy mogę pozostać przy XML lub kontynuować z SQL Server 2008. Jeśli używam SQL Server, czy będę musiał zainstalować SQL Server również na komputerze klienckim. Jest to ważna informacja, ponieważ SQL Server jest produktem komercyjnym, dlatego muszę to uwzględnić w kosztach szacowania mojego projektu.


title: Dlaczego różne komponenty „platformy internetowej” nie są zmodularyzowane?

text: Platforma internetowa jest obecnie modna. Ale platforma internetowa składa się z wielu części, które są koncepcyjnie oddzielone, rozwijane w różnym czasie i tempie i (dla mnie najważniejsze) mogą być użyteczne same w sobie. Zasadniczo platforma internetowa to „przeglądarka”, ale przeglądarka łączy kilka rzeczy: * renderer HTML/CSS * DOM * skrypty na rendererze i DOM (JavaScript) * sandboxing (w tym ograniczenia cross-site scripting, ograniczony dostęp do lokalnych plików , itp.) * samą przeglądarkę, która jest aplikacją z interfejsem graficznym o własnym wyglądzie i działaniu Moje pytanie brzmi: czy naprawdę jestem jedyną osobą, która uważa, że przydałoby się mieć każdy z nich jako oddzielne komponenty, które można używać samodzielnie , które można mieszać i łączyć z różnymi wersjami siebie i innymi narzędziami programistycznymi? Renderer/DOM to te, które naprawdę chciałbym widzieć jako abstrakcyjne, ponieważ HTML/CSS to bardzo fajny sposób opisywania interfejsów, ale denerwujące jest to, że można go używać tylko do opisywania interfejsów na stronie internetowej. Przede wszystkim powiązanie między silnikiem renderującym, JavaScript i graficznym interfejsem przeglądarki wydaje się prawie nieprzeniknione. To sprawia, że używanie HTML/CSS do projektowania interfejsu jest naprawdę denerwujące, ponieważ twój interfejs zawsze będzie działał w przeglądarce, której nie kontrolujesz, i musisz używać JavaScript. Porównaj to z innymi zestawami narzędzi interfejsu (takimi jak Tk, Qt, Wx), które często mają powiązania z wieloma językami programowania i mogą być wykorzystywane w samodzielnych aplikacjach, nad którymi masz całkowitą kontrolę. (Oznacza to na przykład, że preferencje użytkownika dotyczące czcionek w całej przeglądarce mogą zakłócać prezentację, a to oznacza, że wszelkie menu, skróty klawiaturowe lub inne elementy interfejsu użytkownika, które tworzysz, muszą konkurować z tymi w przeglądarce, w której się znajdujesz). moda, bardzo trudno jest napisać coś, co ma interfejs HTML/CSS, ale przechowuje dane na lokalnym komputerze, ponieważ przeglądarki uważają, że jest to niezabezpieczona aplikacja internetowa, nawet jeśli chcesz, aby była tylko „zwykłą aplikacją”. Wiem, że istnieją _historyczne_ powody, dla których ludzie robili to wszystko razem, ale zastanawia mnie, że w żadnym momencie ludzie nie myśleli, że warto stworzyć oddzielny, podłączany silnik renderujący, który mógłby być używany z wieloma językami programowania lub „przeglądarką”. maker”, który uruchamiałby pojedynczą aplikację internetową w swoim własnym oknie lub coś w tym rodzaju. A może takie rzeczy już istnieją? Jestem świadomy takich rzeczy, jak widżety internetowe w zestawach narzędzi GUI i XULRunner, ale o ile widzę, wciąż wydają się osadzić podobny do przeglądarki amalgamat kilku komponentów. (W szczególności wydaje się, że nie ma stabilnego, dojrzałego silnika renderującego z powiązaniami dostępu DOM dla języków innych niż JavaScript.) To sprawia, że są one cięższe i mniej integrowalne z aplikacją, niż gdyby można było po prostu pobrać HTML renderowanie biblioteki w ten sam sposób, w jaki pobierasz Qt lub bibliotekę PNG lub cokolwiek innego.


title: Właściciele produktów z więcej niż jednym produktem?

text: Czy to normalne i nadal właściwe (w przypadku tworzenia oprogramowania opartego na zwinnym/SCRUM), aby właściciel produktu był odpowiedzialny za więcej niż jeden produkt?


title: Optymalny wzorzec komunikacji do aktualizacji subskrybentów

text: Jaki jest optymalny sposób aktualizacji modelu lokalnego abonenta o zmiany C w modelu centralnym M? ( M + C -> M_c) Aktualizacji można dokonać następującymi metodami: 1. Opublikuj zaktualizowany model M_c wszystkim subskrybentom. Wada: jeśli model jest duży w przeciwieństwie do zmiany, skutkuje to znacznie większą ilością danych do przekazania. 2. Opublikuj zmianę C dla wszystkich subskrybentów. Subskrybenci zaktualizują następnie swój model lokalny w taki sam sposób, jak robi to serwer. Wada: Klient musi znać logikę biznesową, aby aktualizować model w taki sam sposób jak serwer. Należy upewnić się, że subskrybowany model pozostaje równy modelowi centralnemu. 3. Oblicz deltę (lub łatkę) zmiany (M_c - M = D_c) i przenieś deltę. Wada: Wymaga to, aby obliczanie i stosowanie delty (M + D_c = M_c) było tanią/łatwą operacją. Jeśli klient na nowo zasubskrybuje, należy go zainicjować. Wiąże się to z przesłaniem aktualnego modelu M. Tak więc metoda 1 jest zawsze wymagana. Pomyśl o grze w szachy jako konkretnym przykładzie: subskrybenci wysyłają ruchy i chcą zobaczyć ostatni stan szachownicy. Serwer sprawdza poprawność ruchu i przykłada go do szachownicy. Serwer może wtedy wysłać zaktualizowaną szachownicę (metoda 1) lub po prostu wysłać ruch (metoda 2) lub wysłać deltę (metoda 3): usuń pionek na polu D4, umieść wieżę na polu D8.


title: Dlaczego Clean Code sugeruje unikanie chronionych zmiennych?

text: Clean Code sugeruje unikanie chronionych zmiennych w sekcji „Odległość pionowa” rozdziału „Formatowanie”: > Pojęcia, które są blisko powiązane, powinny być trzymane blisko siebie w pionie >. Oczywiście ta reguła nie działa w przypadku pojęć, które należą do oddzielnych plików >. Ale wtedy ściśle powiązane koncepcje nie powinny być rozdzielane na > różne pliki, chyba że masz bardzo dobry powód. Rzeczywiście, jest to **jeden z > powodów, dla których należy unikać chronionych zmiennych**. Jakie jest uzasadnienie?


title: Jakie są wymagania licencyjne dotyczące publikowania i dystrybucji aplikacji ASP.net

text: Zacząłem tworzyć strony internetowe w PHP. Wiele razy czytałem, że PHP jest darmowym i otwartym kodem źródłowym, co jest przewagą nad ASP.net. Jednak ze względu na moje obecne wymagania zawodowe musiałem przejść na ASP.net, co jest całkiem niezłe. Teraz po opracowaniu kilku aplikacji zastanawiam się, jak mogę je opublikować za darmo. Ponieważ PHP jest wolne i otwarte, nigdy nie stanowiło to dla mnie problemu. Martwi mnie to. Załóżmy, że stworzyłem aplikację internetową przy użyciu Visual Studio Express (lub wersji Professional lub dowolnej innej wersji) * Czy potrzebuję specjalnych uprawnień/licencji od firmy Microsoft, aby hostować moją aplikację w Internecie * Jeśli tworzę aplikację komputerową i chcę ją rozpowszechniać za darmo w Internecie, czy wymagana jest jakakolwiek licencja. * Jeśli nie, to na czym polegają licencje Microsoft i w jaki sposób PHP jest wolne, a ASP nie jest wolne Dzięki!


title: Logowanie do bazy danych: Najpierw loguj czy najpierw akcja?

text: Krótko mówiąc, pracuję nad interfejsem internetowym, który współdziała z bazą danych, a jedną z funkcji jest to, że każda akcja na określonej tabeli jest rejestrowana, aby zachować pełną historię wszystkich zmian w tej tabeli. Wcześniejsza próba użycia wyzwalaczy w postgreSQL do obsługi logowania automatycznie naruszyła kilka innych wymagań oprogramowania, które będzie używać tej bazy danych jako zaplecza, więc wracam do ręcznego tworzenia wpisów dziennika i ich zapisywania. Moje pytanie brzmi: jaka jest najlepsza praktyka? Najpierw tworzysz i przechowujesz dziennik, a potem wprowadzasz zmiany, czy najpierw wprowadzasz zmianę, a potem przechowujesz dziennik? Zdaję sobie sprawę, że jest to w zasadzie kwestia sporna, ponieważ cały proces i tak pakuję w transakcję, ale nagle zastanawiam się, czy istnieją argumenty przemawiające za którąś z metod.


title: Jaka jest wartość narzędzi przepływu pracy?

text: Jestem nowy w rozwoju Workflow i nie sądzę, że naprawdę otrzymuję „duży obraz”. A może ujmując to inaczej, te narzędzia obecnie nie „klikają” w mojej głowie. Wygląda więc na to, że firmy lubią tworzyć rysunki biznesowe w celu opisania procesów, a w pewnym momencie ktoś zdecydował, że może użyć programu typu maszyna stanów, aby faktycznie kontrolować procesy z linii i pudełek, takich jak diagram. Dziesięć lat później te narzędzia są ogromne, niezwykle skomplikowane (moja firma obecnie bawi się WebSphere, a ja uczestniczyłem w niektórych szkoleniach, to potwór, nawet tak zwane „minimalistyczne” wersje tych narzędzi przepływu pracy, takich jak Activiti, są ogromny i skomplikowany, choć nie aż tak skomplikowany, jak bestia, którą jest WebSphere). Jaka jest wielka korzyść z robienia tego w ten sposób? Rozumiem, że proste diagramy linii i pudełek są przydatne, ale te rzeczy, o ile wiem, są w tym momencie wizualnymi językami programowania, wraz z warunkami warunkowymi i pętlami. Wydaje się, że tutejsi programiści wykonują znaczną ilość pracy w warstwie linii i pudełek, która dla mnie wygląda po prostu jak naprawdę kiepski, naprawdę podstawowy wizualny język programowania. Jeśli masz zamiar posunąć się tak daleko, dlaczego nie użyć jakiegoś języka skryptowego? Czy ludzie wylali na to dziecko z kąpielą? Czy kwestia linii i pudełek została podniesiona do absurdalnego poziomu, czy po prostu nie rozumiem wartości w tym wszystkim? Naprawdę chciałbym zobaczyć argumenty w obronie tego ze strony ludzi, którzy pracowali z tą technologią i zrozumieć, dlaczego jest przydatna. Nie widzę w tym wartości, ale zdaję sobie sprawę, że również jestem w tym nowy i może jeszcze tego nie rozumiem.


title: Jaka jest najlepsza praktyka nazywania przesyłanych obrazów?

text: Załóżmy, że mam formularz w mojej aplikacji internetowej, w którym użytkownicy mogą przesłać zdjęcie profilowe. Mam kilka wymagań dotyczących rozmiaru pliku, wymiarów itp., ale kiedy użytkownik przesyła obraz, jak powinienem je nazwać w moim systemie? Przypuszczam, że musiałby być spójny, a także wyjątkowy. Może GUID? a5c627bedc3c44b7ae7c06a44fb3fcf8.jpg Znacznik czasu? 129899740140465735.jpg Hasz? Np.: md5 b1a9acaf295cf14ffbc5b6538294562c.jpg Czy jest to standardowy lub zalecany sposób? Może powinienem użyć frameworka ASP.NET?


title: Wieloprocesowe projektowanie architektury RPC

text: Obecnie pracuję nad projektem, w którym aplikacje klienckie komunikują się z procesem serwera. Aplikacje klienckie mogą znajdować się lokalnie na tej samej maszynie co proces serwera, w tej samej sieci lub przez Internet. Napisałem jednowątkowy asynchroniczny moduł RPC dla procesu serwera przy użyciu Boost ASIO, podczas gdy Google Protobuf był używany do serializacji wiadomości RPC. Architektura była dość prostym modelem klient-serwer, w którym klient pakował żądanie do wiadomości protobuf i wysyłał ją do serwera, który odesłał odpowiedź. Proces serwera jest napisany w C++, a aplikacje klienckie były w różnych językach. Głównym zastosowaniem tego było przedstawienie graficznego interfejsu użytkownika, aby umożliwić użytkownikom monitorowanie i interakcję z procesem serwera. W przyszłości proces serwera zostanie podzielony na funkcjonalnie odrębne procesy zamiast jednego procesu monolitycznego. To przedstawia problem, w którym mam teraz wiele procesów, z którymi mogą się łączyć aplikacje klienckie. Nie sądzę, że byłby to problem w przypadku aplikacji klienckich lokalnych lub LAN, ale w Internecie może to stać się nieporęczne, jeśli liczba procesów wzrośnie. Co więcej, mogę chcieć włączyć IPC między procesami serwera, wysyłając sobie nawzajem komunikaty RPC. Nie jestem pewien, jaka architektura aplikacji rozproszonych najlepiej pasowałaby do tego systemu w przyszłości. Nie chcę wymyślać koła na nowo, jeśli nie jest to konieczne, więc pobieżnie rzuciłem okiem na D-bus i ZeroMQ, ale widząc, że nie mam jeszcze ustalonej architektury, pomyślałem, że zapytam was, kolegów programistów. Czy byłoby mądrze mieć pojedynczy proces serwerowy obsługujący komunikację między aplikacjami klienckimi a procesami serwerowymi, czy też powinienem rozważyć lepszy styl architektury? Jeśli chcę włączyć IPC między procesami serwera, czy powinienem je bezpośrednio wysyłać do siebie nawzajem, czy powinienem użyć wspomnianego wcześniej procesu pojedynczego serwera? Czy powinienem patrzeć na coś takiego jak model publikowania/subskrypcji?


title: Dotkliwość i związek ze zdarzeniem – priorytet?

text: Przeglądałem kilka stron internetowych związanych z testowaniem i znalazłem jedną, która dotyczy metryk testowania. Mówi: > Poziom istotności defektu wskazuje potencjalny wpływ na biznes dla > użytkownika końcowego (wpływ na biznes = wpływ na użytkownika końcowego x częstotliwość > występowania). Nie sądzę, że to jest poprawne lub czego mi brakuje? Zwykle jest to priorytet, który jest wynikiem takiego obliczenia (poważny błąd, który występuje rzadko, jest nadal poważny, ale nie musi być natychmiast naprawiany). Również na podstawie tego opisu, jaka jest różnica między wpływem na użytkownika końcowego a wpływem na biznes?


title: Kodowanie: zwięzłość/wydajność vs czytelność

text: Jestem całkiem nowy w C# i próbuję poznać najlepsze praktyki. W ciągu ostatniego tygodnia spotkałem się z wieloma sytuacjami, w których muszę dokonać wyboru między dłuższym i prostszym kodem lub krótszym kodem, który łączy kilka działań w jedną instrukcję. Jakie są standardy, których używają doświadczeni programiści, próbując pisać jasny, zwięzły kod? Oto przykład kodu, który piszę z dwiema opcjami. Który jest lepszy? A) if (ncPointType.StartsWith("A"))//analog points { string[] precisionString = Regex.Split(unitsParam.Last(), ", "); precyzja = int.Parse(precisionString[1]); } else { precyzja = null; } B) if (ncPointType.StartsWith("A"))//dokładność punktów analogowych = int.Parse(Regex.Split(unitsParam.Last(), ", ")[1]); w przeciwnym razie precyzja = null; C) precyzja = ncPointType.StartsWith("A") == true ? int.Parse(Regex.Split(unitsParam.Last(), ", ")[1]) : null;


title: Jak łączyć klasy w różnych pakietach (na różnych stronach)?

text: Rozszerzając odpowiedź na to pytanie, podzieliłem duży system na kilka klas na pakiet. Każdy pakiet jest teraz pokazywany na innej stronie dla czytelności, ale teraz jak mam pokazać relację dwóch klas w osobnych pakietach (oddzielne drukowane strony)? **Przykład dla wyjaśnienia:** ![E ma skojarzenie z A, ale są w osobnych pakietach](http://i.stack.imgur.com/b6Hs4.jpg) E ma skojarzenie z A, ale są w osobnych paczki (co oznacza, że znajdują się na różnych stronach)


title: Jak postępować zgodnie z SRP z walidacją i oszczędzaniem podmiotów?

text: Czytałem ostatnio Clean Code i różne artykuły online na temat SOLID i im więcej o tym czytam, tym bardziej czuję, że nic nie wiem. Załóżmy, że buduję aplikację internetową przy użyciu ASP.NET MVC 3. Załóżmy, że mam kontroler `UsersController` z akcją `Create` w ten sposób: public class UsersController : Controller { public ActionResult Create(CreateUserViewModel viewModel) { } } In ta metoda akcji Chcę zapisać użytkownika w bazie danych, jeśli wprowadzone dane są prawidłowe. Teraz, zgodnie z zasadą pojedynczej odpowiedzialności, obiekt powinien mieć jedną odpowiedzialność, a odpowiedzialność ta powinna być całkowicie zawarta w klasie. Wszystkie jej usługi powinny być ściśle powiązane z tą odpowiedzialnością. Ponieważ walidacja i zapisywanie do bazy danych to dwa oddzielne obowiązki, myślę, że powinienem utworzyć oddzielną klasę, aby obsłużyć je w następujący sposób: public class UsersController : Controller { private ICreateUserValidator validator; prywatna usługa IUserService; public UsersController (walidator ICreateUserValidator, usługa IUserService) { this.validator = walidator; this.service= usługa; } public ActionResult Create(CreateUserViewModel viewModel) { ValidationResult wynik = validator.IsValid(viewModel); if (result.IsValid) { service.CreateUser(viewModel); return RedirectToAction("Indeks"); } else { foreach (var errorMessage w result.ErrorMessages) { ModelState.AddModelError(String.Empty, errorMessage); } return View(viewModel); } } } To ma dla mnie _trochę_ sensu, ale wcale nie jestem pewien, czy jest to właściwy sposób radzenia sobie z takimi sprawami. Na przykład jest całkowicie możliwe przekazanie nieprawidłowej instancji `CreateUserViewModel` do klasy `IUserService`. Wiem, że mógłbym użyć wbudowanych adnotacji danych, ale co, jeśli nie wystarczą? Obraz, na którym mój `ICreateUserValidator` sprawdza bazę danych, aby zobaczyć, czy istnieje już inny użytkownik o tej samej nazwie... Inną opcją jest pozwolenie `IUserService` na zajęcie się walidacją w następujący sposób: public class UserService : IUserService { private walidator ICreateUserValidator ; public UserService (walidator ICreateUserValidator) { this.validator = walidator; } public ValidationResult CreateUser(CreateUserViewModel viewModel) { var wynik = validator.IsValid(viewModel); if (result.IsValid) { // Zapisz użytkownika } zwróć wynik; } } Ale czuję, że naruszam tutaj zasadę pojedynczej odpowiedzialności. Jak mam sobie z tym poradzić?


title: Zaawansowane tematy nauczania dla młodszych programistów

text: Jestem młodszym programistą w firmie, która poprosiła mnie o ustalenie celów akademickich na najbliższą przyszłość. Nie zdawałem sobie sprawy, jak trudne było to pytanie, dopóki nie mogłem wymyślić tylko jednej odpowiedzi, z góry: Dowiedz się więcej Wzorców projektowych Jakich przedmiotów, których nauczyłeś się po ukończeniu szkoły, które znacząco ci pomogły?


title: Czy generatory liczb losowych są lukami w zabezpieczeniach?

text: Jeśli wezmę losową liczbę z bazy danych (np. RAND() w SQL Server) lub użyję języka programowania i wyślę ją w jakiejś formie z powrotem do komputera klienckiego, czy istnieje ekonomiczna szansa, że wyślę wskaźnik tego, co jest w moim pamięć serwera, która może stwarzać problem z bezpieczeństwem (np. ujawnianie mojego schematu itp.)?


title: Kiedy mogę zacząć używać Jquery dla JavaScript?

text: Powiedziano mi, abym nie używał Jquery jako początkujący, ponieważ utrudniłoby mi to naukę JavaScript. Teraz przeczytałem kilka książek o JavaScript, przeczytałem mnóstwo witryn i stworzyłem aplikację internetową JavaScript. Czy jestem gotowy na Jquery? Jeśli nie, to skąd będę wiedzieć, że jestem gotowy?


title: Progresywne ulepszanie a aplikacje jednostronicowe

text: Właśnie wróciłem z konferencji w Bostonie o nazwie An Event Apart. Bardzo popularnym tematem wśród prelegentów był pomysł progresywnego ulepszania - zawartość witryny powinna być umieszczona w kodzie HTML, a JavaScript powinien być używany tylko w celu poprawy zachowania. Argumenty, jakie podali mówcy za stopniowym ulepszaniem, były bardzo przekonujące. Nie tylko jest to solidny wzorzec do obsługi starszych przeglądarek i urządzeń w sieci o niskiej przepustowości, ale HTML zawodzi znacznie lepiej niż JavaScript (tj. Nieobsługiwane znaczniki są po prostu ignorowane, a jeśli przeglądarka zgłosi wyjątek podczas wykonywania twojego skrypt - jesteś podlany). Jeremy Keith wygłosił na ten temat szczególnie wnikliwą przemowę. Ale co z jednostronicowymi aplikacjami internetowymi, takimi jak Backbone i Angular? Cały projekt stojący za tymi frameworkami wydaje się skłaniać programistę do przenoszenia treści z HTML do czegoś w rodzaju API JSON. Wydaje mi się, że nie mogę pogodzić tych dwóch wzorców projektowych: progresywne ulepszanie i jednostronicowe aplikacje internetowe. Czy zdarzają się przypadki, kiedy jedno jest lepsze od drugiego? A może nie są to nawet antagonistyczne technologie i coś mi tu brakuje z moim modelem mentalnym?


title: Pochodzenie wParam i lParam

text: Biorąc pod uwagę standardową funkcję procedury systemu Windows: `LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);` Skąd pochodzą nazwy wParam i lParam i jaka jest ich historia?


title: W jaki sposób FDS (płaska pamięć masowa w centrum danych) sprawia, że optymalizacja lokalizacji jest niepotrzebna?

text: Czytałem następujący artykuł o systemach komputerowych: https://www.usenix.org/system/files/conference/osdi12/osdi12-final-75.pdf I próbowałem zrozumieć, dlaczego twierdzi, że nie potrzebuje lokalizacji danych bo dobrze się sprawuje. Zasadniczo, w skrócie, mówi: "...FDS multipleksuje we/wy na dużą skalę aplikacji przez dostępną przepustowość i budżet opóźnień każdego dysku bliżej. FDS sprawia zatem, że wiele optymalizacji wokół lokalizacji danych jest niepotrzebnych." Nie byłem pewien, dlaczego multipleksowanie operacji we/wy aplikacji na serwerach w centrum danych sprawia, że nie ma potrzeby optymalizacji pod względem lokalizacji danych?


title: Jak wyjść z awarii maszyny skończonej?

text: Moje pytanie może wydawać się bardzo naukowe, ale myślę, że jest to powszechny problem i mam nadzieję, że doświadczeni programiści i programiści będą mieli jakieś rady, jak uniknąć problemu, o którym wspominam w tytule. Btw., to, co opisuję poniżej, to prawdziwy problem, który staram się aktywnie rozwiązać w moim projekcie iOS, chcę go za wszelką cenę uniknąć. Przez maszynę skończoną mam na myśli to > Mam interfejs użytkownika z kilkoma przyciskami, kilkoma stanami sesji związanymi z tym interfejsem użytkownika i tym, co reprezentuje ten interfejs użytkownika, mam pewne dane, których wartości są częściowo wyświetlane w interfejsie użytkownika, otrzymuję i operuję niektórymi wyzwalaczami zewnętrznymi (reprezentowane przez wywołania zwrotne z czujników). Zrobiłem diagramy stanu, aby lepiej odwzorować odpowiednie scenariusze, które są pożądane i dozwolone w tym interfejsie użytkownika i aplikacji. W miarę powolnego wdrażania kodu aplikacja zaczyna zachowywać się coraz bardziej tak, jak powinna. Nie jestem jednak przekonany, czy jest wystarczająco solidny. Moje wątpliwości wynikają z obserwowania mojego własnego procesu myślenia i wdrażania. Byłem pewien, że mam wszystko załatwione, ale wystarczyło zrobić kilka brutalnych testów w interfejsie użytkownika i szybko zorientowałem się, że nadal są luki w zachowaniu..Załatałem je. Ponieważ jednak każdy składnik zależy i zachowuje się w oparciu o dane wejściowe z innego składnika, pewne dane wejściowe użytkownika lub zewnętrznego źródła wyzwalają łańcuch zdarzeń, zmiany stanu..itd. Mam kilka komponentów i każdy zachowuje się tak Wyzwalacz odebrany na wejściu -> przeanalizowany wyzwalacz i jego nadawca -> coś wyjściowego (komunikat, zmiana stanu) na podstawie analizy Problem polega na tym, że nie jest to całkowicie samowystarczalne, a moje komponenty (a element bazy danych, stan sesji, stan niektórych przycisków)... MOŻNA zmienić, wpłynąć, usunąć lub w inny sposób zmodyfikować, poza zakresem łańcucha zdarzeń lub pożądanym scenariuszem. (telefon ulega awarii, bateria jest rozładowana, telefon nagle się wyłącza) Wprowadzi to do systemu nieprawidłową sytuację, z której system potencjalnie NIE MOŻE BYĆ W stanie odzyskać. Widzę to (chociaż ludzie nie zdają sobie sprawy, że jest to problem) w wielu aplikacjach mojej konkurencji, które są w Apple Store, klienci piszą takie rzeczy> "Dodałem trzy dokumenty i po przejściu tam i tam nie mogę ich otworzyć, nawet jeśli je zobaczę." lub „Nagrywałem filmy codziennie, ale po nagraniu zbyt logowanego wideo nie mogę wyłączyć napisów na nich…, a przycisk napisów nie działa”. To tylko skrócone przykłady, klienci często opisują to bardziej szczegółowo ..z opisanych w nich opisów i zachowania zakładam, że dana aplikacja ma awarię FSM. Więc ostateczne pytanie brzmi: jak mogę tego uniknąć i jak chronić system przed zablokowaniem się? EDIT> Mówię w kontekście jednego widoku viewcontrollera na telefonie, mam na myśli jedną część aplikacji. Rozumiem wzorzec MVC, mam oddzielne moduły dla odrębnej funkcjonalności..wszystko, co opisuję, dotyczy jednego płótna w interfejsie użytkownika.


title: Trzymasz się protokołu i jednocześnie jesteś podklasą?

text: W celu C mam sytuację, w której chciałbym mieć abstrakcyjny protokół (interfejs) z 5 metodami i 4 właściwościami, ale jednocześnie chciałbym mieć wspólną implementację 3 z tych 5 metod. Więc moje pytanie brzmi, czy jest w porządku, aby 1) mieć tylko deklarację interfejsu ze wszystkimi deklaracjami metod i właściwości, 2) mieć klasę bazową, która jest zgodna z tym protokołem (implementuje ten interfejs), ale także zapewnia wspólną implementację niektórych z nich klasy i ma tylko puste implementacje metod pośredniczących dla pozostałych metod, a na końcu 3) ma kilka podklas (z tej klasy bazowej), które będą zgodne z tym protokołem - ale - także dziedziczą wspólne implementacje metod - i - samodzielnie wdrożyć te metody skrótów?


title: Jaka jest najlepsza biblioteka PHP ORM?

text: Chcę zbudować aplikację internetową PHP, ale zawsze napotykam problem, że muszę połączyć się z bazą danych i zajmować się powiązanymi obiektami. Więc wypróbowałem codeigniter i używa on specjalnego sposobu łączenia się z bazą danych o nazwie Active Record i wiem, że jest to technika ORM i istnieje wiele bibliotek ORM. Jaki jest najlepszy, najłatwiejszy i najszybszy z nich?


title: Backbone vs Angular/Ember dla 1-3-osobowego sklepu deweloperskiego?

text: Jesteśmy naprawdę małym (1-3) sklepem Ruby budującym aplikację Railsową i musimy wybrać jeden z 3 (zawęziliśmy do) frameworków JS. Załóżmy ogólnie dużo doświadczenia w programowaniu, ale bardzo małe doświadczenie w zakresie frontendu w JS Framework (niewiele z Backbone, ale absolutnie nic z pozostałymi dwoma). Jeśli produktywność i szybkość rozwoju (oraz potrzeba mniejszych zmian w dalszej części drogi – gdzie droga może trwać 6-12 miesięcy) wraz ze wsparciem społeczności są kluczowymi wskaźnikami, jaka byłaby rozsądna rekomendacja spośród tych 3? A przez Backbone zakładam potrzebę Marionette lub Chaplina (najprawdopodobniej tego pierwszego). Muszę powiedzieć, że podoba mi się fakt, że Backbone zaczyna się w dość minimalistyczny sposób, umożliwiając stopniowe dodawanie niezbędnych modułów, w przeciwieństwie do zaczynania od nich wszystkich (podobnie jak Sinatra vs Rails), ale powiedziawszy, wybrałem Railsy (również znane w tym momencie z Sinatry) po prostu nie martwią się o dodawanie zależności jeden po drugim. Tak więc, nie jestem pewien, jaki jest właściwy wybór i po prostu obawiam się utraty kilku miesięcy wysiłku programistycznego w przypadku, gdy Backbone straci trakcję w społeczności i/lub trudno będzie znaleźć niezbędne dodatki lub coś w tym rodzaju. (Wybacz błądzenie - zgadnij, co się dzieje po 2-3 nieprzespanych nocach porównań JS Framework).


title: Czy z powodu zasiedziałych patentów można bezpiecznie tworzyć dowolne oprogramowanie bez ryzyka działań prawnych?

text: Weźmy ten System i metodę ograniczania praw dostępu użytkowników w Internecie na podstawie informacji o ocenach przechowywanych w relacyjnej bazie danych. Istnieją ich setki tysięcy. Więc w zasadzie nie można zaprogramować niczego naprawdę bez naruszania jednego z tysięcy patentów na oprogramowanie. Jeśli Twój program się powiedzie, zostaniesz przez kogoś pozwany! Czy zdarza się to cały czas i ludzie są uciszani? Czy takie rzeczy uderzają w modne startupy? Z pewnością wszystkie główne usługi internetowe zostałyby dotknięte powyższym przykładem przez AT&T?


title: Co można zrobić, gdy jesteś jedyną osobą, której zależy na spójności?

text: Po przeczytaniu tego pytania mogę mieć częściową odpowiedź na ten problem, ale chciałbym go dokładniej zbadać. Wydaje mi się, że jako jedyna osoba w moim zespole (zespół 6 osób pracujących nad oprogramowaniem Enterprise) dba o spójność. Czasami mówię o tym głośno, ale są też członkowie mojego zespołu, którzy tak samo głośno się temu sprzeciwiają. Mogę złożyć bilety, jak sugeruje pytanie, które połączyłem. Brzmi świetnie. Ale myślę, że problem, który mam, ma związek z mentalnością lub nastawieniem mnie i moich współpracowników. Jakie konkretne kroki można podjąć, jeśli koledzy z zespołu nie dbają o spójność? Czy zatykam je statystykami z przeprowadzonych badań łączących spójność kodu z szybkością, z jaką kod można odczytać? Czy zalewam nasze i tak już nadmiernie pełne zaległości problemy ze spójnością, które można następnie rozwiązać lub zapisać jako „niewystarczająco ważne”? Czy powinienem się po prostu zamknąć, usiąść, napisać kod i przestać się tym martwić? Jak najlepiej poradzić sobie z tą sytuacją?


title: Czy przeprojektowałbyś całkowicie pod .Net?

text: Bardzo rozbudowana aplikacja rozpoczęła się jako system oparty na Access (do przechowywania baz danych). Formularze zostały napisane w VB5 i/lub VB6. Ponieważ .Net stał się stałym elementem społeczności programistów, niektóre moduły zostały napisane od nowa. Wydaje się to bardzo niewygodne i potencjalnie kosztowne w utrzymaniu ze względu na różne technologie i dodatkową pracę, aby te dwie technologie były ze sobą szczęśliwe. Oczywiście aplikacja korzysta z kombinacji ~~ODBC~~ OleDb i MySql. ~~Czy uważasz, że poświęcenie czasu i zasobów na całkowite przeprogramowanie aplikacji w .Net byłoby bardziej opłacalne?~~ Czy nie byłoby sensu używać .Net w celu opracowania bardziej stabilnej aplikacji? Lub kontynuować tropienie błędów Access, dodając nowe funkcje w .Net (które mogą, ale nie muszą, tworzyć nowe błędy między .Net i Access) i przepisywać stare moduły Access w moduły .Net w ramach ograniczeń czasowych, które uniemożliwiają prawidłowe projektowanie i rozwój? **Aktualizacja** Aplikacja korzysta z OleDb i MySql - poprawiłem poprzednią wypowiedź. Ponadto, aby jeszcze bardziej wesprzeć przepisywanie: od tamtej pory dowiedziałem się, że kiedy rozpoczęło się _"portowanie"_ do .Net, istniejący kod VBA/VB6 został w zasadzie przetłumaczony na odpowiednik .Net. Z mojego zrozumienia nie zrobiono nic, aby poprawić wydajność lub skorzystać z nowych bibliotek lub technologii. Moim zdaniem tworzy to bardzo delikatną i niestabilną aplikację. Z każdą nową aktualizacją staje się to coraz bardziej widoczne. Jako technik pomocy technicznej zauważyłem wzrost zgłaszanych problemów. Klienci korzystający z oprogramowania zauważyli wzrost problemów i komentują to.


title: Czy każdy członek zespołu powinien używać tego samego IDE?

text: Czy uważasz, że ma sens wymuszanie, aby każdy członek zespołu używał tego samego IDE? Na przykład wszyscy inżynierowie, którzy są już w zespole, używają IDE X. Dwóch nowych inżynierów przyjeżdża i chce zamiast tego używać IDE Y, ponieważ używa ich już od kilku lat. Czy masz jakieś doświadczenie z zespołami „mieszanymi IDE”? Jeśli tak, co to jest?


title: Ile w przybliżeniu jest warta solidna i szeroka wiedza na temat struktur danych i algorytmów na rynku pracy?

text: Zastanawiam się, jak bardzo mógłbym podnieść swoją pensję, gdybym miał uzyskać mocne i szerokie zrozumienie struktur danych i algorytmów. Znam prawdziwe podstawy, ale istnieje tak wiele struktur danych, że zastanawiam się, jakie korzyści finansowe przyniosłoby dogłębne ich omówienie?


title: Problem algorytmiczny: Wybieranie kart

text: Poniższy problem pojawił się na ostatnim konkursie programistycznym Code Sprint 2 (już się skończyło). Podstawowe przypadki są jasne, ale opracowanie algorytmu, który rozwiąże wszystkie możliwe przypadki, było jak dotąd wyzwaniem. > Na stole znajduje się N kart, a każda z nich ma liczbę od 0 do N. > Oznaczmy liczbę na N-tym Ni. Chcesz odebrać wszystkie karty, > ale możesz wybrać tylko konkretną N-tą kartę, jeśli już wybrałeś karty Ni > wcześniej. (Na przykład, jeśli karta ma wartość 3, nie możesz podnieść > tej karty, chyba że wcześniej podniosłeś już 3 karty) Na ile > sposobów można podnieść wszystkie karty? > > Dane wejściowe to karty z ich odpowiednimi numerami, a wyjściem powinna być > całkowita liczba możliwych sposobów ich pobrania. Wejście próbki: 0 0 0 Wyjście próbki: 6 Wejście próbki: 0 0 0 0 Wyjście próbki: 24 Wejście próbki: 0 0 1 Wyjście próbki 4 Wejście próbki: 0 3 3 Wyjście próbki: 0


title: Jak traktować aspekty aplikacji w odniesieniu do funkcji i historyjek użytkownika?

text: Tworząc backlog mam kilka wymagań, które dotyczą bardzo wielu historyjek użytkownika, czyli takich aspektów aplikacji, jak obsługa błędów i informacja zwrotna. Jak je uwzględnić (bez używania dyrektywy #include w każdej historyjce użytkownika)? Czy powinienem traktować prezentację błędów jako funkcję, a następnie mieć historyjki użytkownika dotyczące tej funkcji, takie jak „system przechwytuje wyjątek i wyświetla informacje użytkownikowi”?


title: Czy łatwa dekompilacja Javy jest czynnikiem wartym rozważenia?

text: Rozważamy język programowania aplikacji desktopowej z rozszerzonym wykorzystaniem GUI (tabele, okna) i intensywnym wykorzystaniem bazy danych. Rozważaliśmy użycie Javy, jednak powstrzymuje nas fakt, że można ją bardzo łatwo zdekompilować z powrotem do kodu źródłowego. Oczywiście dostępnych jest wiele zaciemniaczy, ale są to tylko zaciemniacze. Jedyne zaciemnianie, które warto zrobić, to rozbieranie funkcji i zmiennych nazw na bezsensowne litery i cyfry, tak aby przynajmniej ukradzenie kodu i zmiana jego nazwy z powrotem na coś sensownego to zbyt dużo pracy i jesteśmy w 100% pewni, że nie da się tego cofnąć w żaden zautomatyzowany sposób . Jednak jeśli chodzi o ochronę elementów wewnętrznych (takich jak skróty haseł lub sensowna zawartość zmiennych), stwierdziliśmy, że naprawdę brakuje zaciemniaczy. Czy istnieje sposób, aby aplikacje Java były tak trudne do odszyfrowania jak ich odpowiedniki .exe? I czy jest to czynnik, który należy wziąć pod uwagę przy podejmowaniu decyzji o napisaniu w Javie aplikacji desktopowej?


title: Czy platforma API powinna wymuszać tylko odbieranie żądań JSON?

text: Buduję platformę API. Zapewniłem już, że platforma zawsze zwraca odpowiedzi JSON. Moje pytanie brzmi: **Czy moja platforma API powinna egzekwować zasadę, że wszystkie żądania muszą być w formacie JSON? Jakie są korzyści z przekształcenia wszystkich żądań w JSON?** Rozumiem korzyści z przekształcenia wszystkich odpowiedzi w JSON, ponieważ oznacza to spójność dla aplikacji klienckich korzystających z interfejsu API. Nie widzę również korzyści płynących z przesyłania wszystkich żądań do formatu JSON. Pytam o to, ponieważ wydaje się, że GitHub API v3 wymusza tę regułę. Moja platforma API będzie obejmować przesyłanie plików w żądaniach. O ile mi wiadomo, żądania JSON nie działają dobrze z przesyłaniem plików. A może zrobię hybrydę? Wymusić na wysyłaniu żądań, które NIE mają nic wspólnego z przesyłaniem plików, w formacie JSON? I zezwolić na wyjątek dla przesyłania plików?


title: Relacja częstotliwości CPU i szybkości sieci w klastrach

text: W zestawieniu z prawem Amdahla istnieje prawo Gustafsona. Pomyślałem, że może istnieć jakieś prawo określające zależność między częstotliwością CPU a szybkością sieci: maksymalna szybkość sieci, po której żaden dodatkowy Mb/s nie zwiększy obliczeń. Czy takie ograniczenia istnieją i od czego to zależy?


title: Minimalne oprogramowanie do nauki C#, ASP.NET, WinForm

text: Jaka jest minimalna lista oprogramowania, na którą należy patrzeć, aby uczyć się C#, ASP.NET, WinForms. Mam system z zainstalowanym systemem Windows 2003. Patrzę na coś takiego jak WAMP dla rozwoju C#.NET. Czy mamy wykaz? Coś w następujący sposób 1. Visual Studio 2010 Express Edition 2. IIS 3. Mój SQL (coś specyficznego dla C#.NET czy zdecydowanie powinien to być SQL Server 2005/2008 Express Edition) 4. LINQPad 5. Coś jeszcze?


title: Planowanie między procesem dziecka i rodzica

text: Kiedy procesy potomne są tworzone przy użyciu wywołania systemowego fork, jakie są priorytety planowania? Czy są takie same? jeśli tak, to zawsze najpierw będzie uruchamiany proces potomny, a potem rodzic... czy też istnieje manipulacja tym wzorcem. Mam implementację, która najwyraźniej najpierw uruchamia proces nadrzędny. Czy tego się oczekuje?


title: O co należy zadbać przed umieszczeniem aplikacji w Android Market?

text: Opracowałem małą aplikację na Androida. Planuję wydać go w Google Android market. O czym powinienem wiedzieć, zanim to zrobię?


title: Jakie problemy programistyczne wymagają opóźnienia w przetwarzaniu żądania anulowania subskrypcji poczty?

text: Za każdym razem, gdy wypisuję się z listy mailingowej, widzę, że pojawiają się komunikaty typu „Zmiana wejdzie w życie za 10/30 dni/itd”. Zakładam, że rezygnacja z subskrypcji to po prostu usunięcie mojego e-maila z jakiejś bazy danych. Jaki jest pomysł, żebym czekał tyle dni? Edycja: Ponieważ to pytanie jest tutaj blisko jako nie na temat, otworzyłem je tutaj w Superuser. Zamknięty również w Superuser. Tak więc przeformułuję pytanie tutaj.


title: Czy ten wymóg dotyczący danych odpowiadałby bazie danych zorientowanej na dokumenty?

text: Mam wymóg umożliwienia użytkownikom wypełniania wpisów do dziennika/dziennika. Chcę podać kilka znanych szablonów dziennika z x kolumnami do wypełnienia. Przykładem może być dziennik myśli; użytkownik musi zapisać myśl w jednej kolumnie, opisać sytuację, ocenić, jak się czuł itp. Drugim wymogiem jest to, aby użytkownik mógł tworzyć własne szablony dziennika. Mogą potrzebować wpisu do dziennika z 10 kolumnami dziennie i mogą wymagać oceny jakiegoś aspektu z 50 zamiast 10. W RDBMS widzę, że staje się to dość skomplikowane. Mogę mieć osobne tabele dla moich znanych szablonów, ponieważ pola zostaną naprawione. Ale w przypadku niestandardowych szablonów dziennika wyobrażam sobie, że potrzebowałbym tabeli przechowującej custom_field_types (kolumny dziennika), tabeli przechowującej wpisy odwołujące się do ich typów pól (custom_entries), a następnie trzeciej tabeli custom_diary, która przechowywałaby wiersze pasujące do pamiętników. Pomijając wydajność / skalowanie, czy nie byłoby prościej lub bardziej sensownie używać bazy danych zorientowanej na dokumenty, takiej jak MongoDB, do przechowywania tych danych? Jest to aplikacja internetowa, która może później wymagać interfejsu API dla urządzeń mobilnych.


title: Czy jest jakaś korzyść z nauki C najpierw?

text: Mam trochę historii z programowaniem, ponieważ zacząłem pracę z Visual Basic. Pozwoliłem mu prześlizgiwać się jako hobby od trochę po VB6 aż do około roku temu, kiedy zacząłem korzystać z iPhone'a, kiedy zdecydowałem się zająć programowaniem w Objective-C. Mam teraz to, co uważam za średni poziom znajomości języka, ale nie mogę oprzeć się wrażeniu, że istnieje znaczna luka w miejscu, w którym jest moja wiedza, biorąc pod uwagę, że wydaje się, że jest znaczna część języka, którego nie znam nie czuję, że rozumiem. Czy skorzystałbym z przeglądu podstawowej struktury C, czy też lepiej byłoby kontynuować praktykę wyłącznie w Objective-C podczas przeglądania dokumentacji pod kątem różnych funkcji? **Edytuj:** chociaż zaakceptowałem pierwszą podaną odpowiedź, osoby z dodatkowymi lub przeciwstawnymi poglądami zawsze doceniają większą wiedzę.


title: Techniki refaktoryzacji aplikacji webforms asp.net

text: Pracuję nad dużą aplikacją napisaną w formularzach internetowych asp.net. Został opracowany pod asp.net 1.0 i nadal używa DataGrid, chociaż fragmenty zostały zaktualizowane. Większość kodu znajduje się w kodzie lub w klasach kontrolerów, których nie można utworzyć poza uruchomionymi usługami IIS. (Schemat kontrolera, którego używamy, zapewnia zarządzanie przez cały okres życia powiązane ze stanem sesji). Dostęp do danych odbywa się za pośrednictwem niestandardowego DAL, co oznacza, że większość tego kodu wymaga również działającej bazy danych z odpowiednimi danymi. Chcę oddzielić kod od bazy danych i serwera WWW, aby móc go uruchomić pod uprzężą testową. Czy istnieją dobre strategie przejścia od tego rodzaju kodu do bardziej testowalnej struktury?


title: Postępowanie z jednostkami w operacjach arytmetycznych (mnożenie i dzielenie)

text: Muszę zaprojektować funkcję wykonującą podstawowe operacje arytmetyczne, takie jak „dodawanie (+)”, „odejmowanie (-)”, „mnożenie (x)” i „dzielenie (/)” między 2 liczbami. Ta funkcja przyjmuje 3 argumenty: -`liczba1`: składa się z `wartości` i `jednostki`. -`liczba2`: składa się z `wartości` i `jednostki`. -`operacja_typ`: jedna z 4 wyżej wymienionych operacji. i powinien zwrócić: -`liczba3`: składa się z `wartości` i `jednostki`. Zwrócenie wartości `liczba3` jest łatwe, ponieważ wszystko, co muszę zrobić, to użyć instrukcji warunkowych, aby wykonać odpowiednią operację (np. `if (typ_operacji == 'dodanie') { liczba3.wartość = liczba1.wartość + liczba2.wartość ; }` ). Jednak mam trudności z ustaleniem, jak powinienem reprezentować i radzić sobie z `jednostką` ( _dla `mnożenia` i `odejmowania`, ponieważ w przypadku `dodawania` i `odejmowania` pozostają takie same_) w sposób, który mogę połącz wiele operacji i za każdym razem odpowiednio aktualizuj wynikową „jednostkę”. Oto przykład: typ operacji: mnożenia liczba1.jednostka: Kw liczba2.jednostka: h / użytkownik / rok numer3.jednostka: Kwh / użytkownik / rok _ | liczba1.jednostka: kWh / użytkownik / rok <- liczba2.jednostka: numer użytkownika3.jednostka: kWh / rok _ | number1.unit: Kwh / year <- number2.unit: year number3.unit: Kwh ... Moim jedynym ograniczeniem jest to, że `unit` musi być początkowo reprezentowany jako `string`, ponieważ jest przechowywany w bazie danych, a następnie może przeanalizować go w razie potrzeby do „obiektu/tablicy”. Niektóre z problemów, z którymi się borykam: **P1: jak zapewnić spójną kolejność w jednostce wynikowej (np. `h x Kw` i `Kw x h` powinny dawać jednocześnie `Kwh`)?** **P2: jak sobie radzić ze złożonymi jednostkami (np. `foo / Kw x h / bar`)?** A ponieważ nadzieja umiera ostatnia: **P3: Czy są jakieś znane algorytmy/wzorce projektowe, które radzą sobie z tym?**


title: Czy można sobie wyobrazić miliony list danych w pamięci w Pythonie?

text: Przez ostatnie 30 dni rozwijałem aplikację w Pythonie, która wykorzystuje bazę danych MySQL (w szczególności o adresach norweskich) do sprawdzania poprawności i poprawiania adresów. Baza danych zawiera około 2,1 miliona wierszy (43 kolumny) danych i zajmuje 640 MB miejsca na dysku. Myślę o optymalizacji prędkości i muszę założyć, że podczas walidacji ponad 10 000 adresów, każda walidacja uruchamiająca do 20 zapytań do bazy danych, sieć jest wąskim gardłem prędkości. Nie wykonałem jeszcze żadnych pomiarów ani pomiaru czasu i jestem pewien, że obecnie istnieją prostsze sposoby na optymalizację szybkości aplikacji, ale chcę tylko uzyskać opinie ekspertów na temat tego, jak realistyczne jest ładowanie takiej ilości danych w strukturę wierszy wierszy w Pythonie. Poza tym, czy byłoby to w ogóle szybsze? Z pewnością MySQL jest zoptymalizowany do wyszukiwania rekordów wśród ogromnych ilości danych, więc jak bardzo pomogłoby usunięcie kroku sieciowego? Czy możesz sobie wyobrazić inne realne metody usunięcia etapu networkingu? Lokalizacja serwera MySQL będzie się różnić, ponieważ aplikacja może być uruchamiana z laptopa w domu lub w biurze, gdzie serwer byłby lokalny.


title: Dlaczego bazy danych zorientowane obiektowo nie są używane w takim samym stopniu jak relacyjne bazy danych?

text: Zetknąłem się z wieloma systemami zarządzania relacyjnymi bazami danych (RDBMS). Ale ostatnio użyłem hibernacji, co sprawiło, że zacząłem się zastanawiać, dlaczego bazy danych zorientowane obiektowo nie są bardziej popularne. Skoro języki zorientowane obiektowo, takie jak Java lub C#, są tak popularne, to dlaczego systemy zarządzania bazami danych zorientowane obiektowo (OODBMS) nie są również bardziej popularne?


title: Jak mogę przetestować jednostkowo moją usługę sieciową REST?

text: Jestem nowy w testowaniu jednostkowym, mam jedną metodę sieci web REST, która po prostu wywołuje DB i wypełnia DTO. Pseudo kod jest obiektem publicznym GetCustomer(int id) { CustomerDTO objCust = //pobierz z DB return objCust; } Wątpię, jak pisać testy dla tych metod i rodzaju testów (integracja/jednostka), które mają być uwzględnione. A dla testów jednostkowych, czy musi trafić w DB. Gdyby tak było, a ja przekażę identyfikator klienta i wykonam kilka asercji, dane mogą się ostatecznie zmienić, powodując awarie. Myślę, że czegoś mi tu brakuje rozumiejąc te pojęcia.


title: Jak zostać współtwórcą Eclipse?

text: Nie sądzę, że mam wystarczająco dużo programowania w pracy, więc myślę o wniesieniu wkładu do Eclipse. Wygląda na to, że to jedyny sposób na naprawienie niektórych moich błędów :) Ale jak mam zacząć? Jakie są wymagania dotyczące używanego oprogramowania? Jaki jest typowy proces? Jakieś specjalne rzeczy, o których nie musisz wiedzieć?


title: Co myślisz o edytorach internetowych?

text: Obecnie jestem użytkownikiem Emacsa (jestem przyzwyczajony do poleceń i na co dzień pracuję w wielu różnych językach, z których jednym jest Common Lisp, więc jest to naturalny wybór), ale niedawny Wypowiedź Steve'a Yegge'a sprawiła, że pomyślałem, że internetowy edytor/IDE (jeśli zrobiony dobrze) może przynieść wiele korzyści. Zarówno pod względem śledzenia dużych baz kodu, jak i pod względem obsługi edycji na tym samym, wysoce interaktywnym poziomie dla wielu języków. Mapa drogowa Bespin sprawia, że brzmi to tak, jakby zmierzały w tym samym kierunku, a ponadto istnieją implementacje internetowe zarówno Emacsa, jak i vi (z żadną z nich nie mam żadnego doświadczenia). Moje pytanie jest dwojakie. Po pierwsze, czy któryś z tych redaktorów jest gotowy na premierę? To znaczy, czy są przynajmniej na równi z edytorami opartymi na komputerach stacjonarnych? Jeśli nie, czy niezawodnie przynoszą jakiekolwiek korzyści, które implementacja oparta na serwerze mogłaby obsłużyć (takie jak w pełni połączony VCS/edytor/podgląd/przechowywanie po stronie serwera, prawdziwa obsługa na poziomie IDE dla wielu różnych języków, obsługa kodowania zespołowego/ zdalne programowanie par itp.)? Bardziej interesuje mnie doświadczenie niż spekulacje. Po drugie, dokąd zmierza ta koncepcja? Czy edytory w końcu przekształcą się w usługi, czy pozostaną na pulpicie, czy też dojdziemy do hybrydowego systemu, który obsługuje edycję lokalną, ale zapewnia pewne, przyjazne dla klastrów elementy za pośrednictwem połączenia sieciowego? Zapraszam do spekulacji na temat tej części.