title: Czy pliki widoków PHP powinny być nazywane inaczej niż '.php'?

text: Domyślnie każdy plik, którego dotyka PHP, ma zwykle przyrostek `.php`. Jest powszechnie rozumiany przez Apache / Nginx jako domyślny dla plików PHP i większość instalacji oczekuje, że pliki PHP kończą się tym rozszerzeniem. Krótko mówiąc, `.php` jest standardem dla wszystkiego, co PHP. Zastanawiam się jednak, czy może pliki widoków powinny mieć inne rozszerzenie, aby pomóc odróżnić je od innych plików PHP. Po pierwsze, jeśli chodzi o widoki, odkryłem, że prawie wszystkie frameworki MVC używają pasującego pliku widoku o nazwie kontrolera lub metody. Ponadto zazwyczaj masz również pasujący model o tej samej nazwie. Powoduje to problem z większością IDE i edytorów. Na przykład możesz mieć kontroler „użytkownik”, widok „użytkownik” i model „użytkownik”. Powoduje to, że otwarte są trzy pliki o nazwie „user.php”, co utrudnia poruszanie się i klikanie niewłaściwych kart. Po drugie, oddzielenie widoków jako fundamentalnie innego rodzaju pliku PHP (typu prezentacji) jest kolejnym argumentem za zmianą rozszerzenia plików widoków na coś innego niż `.php`. Coś, co natychmiast mówi Twojemu mózgowi, jaki rodzaj treści do niego należy. Po trzecie, niektóre aplikacje udostępniają części (lub wszystkie) plików PHP w webroot i jego katalogach. Zamiast dodawać coś takiego jak `<?php if(!defined(ABC)) die('nie dozwolone');` byłoby miło mieć łatwy sposób na zabronienie dostępu do widoków, jednocześnie zezwalając na inne pliki, takie jak zwyczajowy `indeks. php`. **Czy są jakieś inne dobre/złe powody, by sądzić, że zmiana rozszerzenia plików widoku jest dobrym pomysłem?**


title: Integracja Javy typu Lua z C++

text: Jestem więc ciekaw: już kilka razy implementowałem Lua w C++ i chociaż było to stosunkowo proste, nadal nie wykorzystywało mocy, której bym chciał. Uwielbiam działanie Eclipse, w tym lokalizacje javadoc itp. Zastanawiałem się, czy istnieje sposób na zintegrowanie Javy z natywną aplikacją (czyli oczywiście międzyplatformową), aby robić to, co robi Lua, ale z Javą. Oznacza to, że będę w stanie zbudować własne klasy bazowe itp. Po prostu ciekawa myśl! Jakiś wgląd? EDYCJA: A co z MonoDevelop? Czy integracja jest stosunkowo łatwa? Czy jest skompilowany? Czy jest to możliwe na wielu platformach?


title: Używasz punktów funkcyjnych jako miernika szybkości zespołu Scrumowego?

text: Wpadłem na pomysł wykorzystania punktów funkcyjnych jako miernika prędkości zespołu Scrumowego. Widziałem to w zespole i znalazłem dwa artykuły wspominające o powiązaniu między oszacowaniami a punktami funkcyjnymi (http://www.ifpug.org/ISMA5-2010/Amol%20Keote-FunctionPointsAndAgile-Hand-in-Hand.pdf i http: //www.cosmicon.com/portal/public/FromStoryPointsToCOSMIC.pdf). Nie jestem pewien, jak to może działać, ponieważ jeśli dobrze rozumiem, punkty funkcyjne mierzą _wartość_ funkcji (np. z perspektywy użytkownika), podczas gdy prędkość mierzy _wysiłek_ gotowych funkcji. I moim zdaniem nie ma między nimi bezpośredniego związku. Innymi słowy: jeśli masz (powiedzmy) stabilny Zespół Scrumowy, który pracuje w 2-tygodniowych sprintach, liczba punktów funkcji, które dostarczają na sprint, powinna się różnić (możliwe szalenie), co sprawiłoby, że prędkość oparta na punktach funkcyjnych byłaby zupełnie bez znaczenia (np. do celów planowania)... Czy czegoś mi tu brakuje?


title: Czy kiedykolwiek musiałeś „źle” kodować dla swojego zespołu?

text: Byłem na ciągłej drodze uczenia się nowych koncepcji w OOP, projektowaniu oprogramowania, architekturze itp. Ale są chwile, kiedy jesteś w zespole, w którym te koncepcje są im obce i nie mają czasu lub tego samego chęć uczenia się tak jak ty. Problem polega na tym, że jeśli zaprojektujesz swój kod we „właściwy” sposób, ludzie, którzy kodują z klasami 2kLOC, nie zrozumieją tego. Czy poświęciłbyś dobre zasady kodowania, aby wesprzeć swój zespół? A co ze scenariuszem, w którym będzie to umowa długoterminowa?


title: Czy korzystanie z zaawansowanych funkcji językowych zmniejsza łatwość konserwacji?

text: Podczas przeglądu kodu natknąłem się na ciekawy pomysł, którego sam nie potrafię właściwie ocenić. Czy można poprawić czytelność kodu za pomocą mało znanej składni języka? Kiedy oryginalny autor nie używał specjalnej składni przeznaczonej do rozwiązywania konkretnego problemu z kodowaniem, a rozwiązał go poprzez symulację z obejściami — czy warto ją przefaktoryzować dla jasności i zwięzłości? Co by było, gdyby nawet recenzent kodu nie wiedział o funkcji językowej? Mówiąc konkretnie, przedstawię dokładnie problem, który spotkałem podczas przeglądu kodu — ale pamiętaj, że to tylko przykład. Tak więc oryginalny kod był małą usługą internetową w Pythonie. W pewnym momencie pojawiło się wymaganie, aby kilka programów obsługi żądań było chronionych mechanizmem uwierzytelniania. Ktoś rozwiązał to za pomocą dziedziczenia: class AuthOnlyAccess: def GET(self, *args): if not hasattr(self, 'PROTECTED_GET'): podnieś web.Nomethod() if check_auth(): zwróć self.PROTECTED_GET(*args) else: podnieś web.Unauthorised() def POST(self, *args): jeśli nie hasattr(self, 'PROTECTED_POST'): podnieś web.Nomethod() if check_auth(): zwróć self.PROTECTED_POST(*args) else: podnieś web. Unauthorized() ... class FooHandler(AuthOnlyAccess): def PROTECTED_GET(self, a, b, c): handle_foo_get(a, b, c) def PROTECTED_POST(self, x, y, z): handle_spam_eggs() ... <więcej handlerów wywodzących AuthOnlyAccess> Refactorer uznał ten kod za brzydki i wprowadził dekorator: z functools import wraps ... d ef require_auth(wrapped_func): """ (mały dokument mówiący, że to jest dekorator i jak go używać) """ @wraps(wrapped_func) def decorator(*args): if check_auth(): return wrapped_func(*args ) else podnieść web.Unauthorized() return dekorator ... class FooHandler: @requires_auth def GET(self, a, b, c): handle_foo_get(a, b, c) @requires_auth def POST(self, x, y, z ): handle_spam_eggs() ... <więcej zrefaktoryzowanych programów obsługi> Recenzent twierdzi, że ta zmiana faktycznie **zmniejsza** łatwość utrzymania, ponieważ większość zespołu nie zna składni dekoratorów. Tak więc następna osoba odwiedzająca zrefaktoryzowany kod może być zdziwiona konstrukcją — ale nie poprzednią wersją. Istnieje również przekonujący argument, że **większość kodu nie jest w Pythonie** (język jest dostępny tylko dla tej małej usługi sieciowej), a zatem członkowie zespołu nie muszą mieć nawet płytkiej wiedzy o Pythonie. Jednak, aby pracować z kodem, trzeba znać jego język, prawda? A jeśli masz pokusę, aby powiedzieć, że dekoratory Pythona nie są _tak_ zaawansowaną składnią — pamiętaj, że to tylko przykład. Każdy język ma swoje ciemne zakamarki. (Ale poznanie tych zakamarków oznacza stanie się lepszym.) Więc pytanie brzmi... Czy potrafisz odczytać nieznaną składnię? Czy elegancja jest warta niespodzianki? Przynajmniej jakie kompromisy i/lub wytyczne możesz wymienić? Naprawdę potrzebuję opinii od społeczności programistów.


title: Jak zainicjować mapę Scala z więcej niż 4 początkowymi elementami w Javie?

text: Dla 4 lub mniej elementów coś takiego działa (lub przynajmniej się kompiluje): import scala.collection.immutable.Map; Mapa<String,String> HAI_MAP = new Map4<>("Witaj", "Świat", "Szczęśliwego", "Urodziny", "Wesołych", "Boże Narodzenie", "Bye", "Na razie"); Dla piątego elementu _mogłbym_ to zrobić: Map<String,String> b = HAI_MAP.$plus(new Tuple2<>("Później", "Aligator")); Ale chcę wiedzieć, jak zainicjować niezmienną mapę z 5 lub więcej elementami, a ja jestem w piekle typu. # Częściowe rozwiązanie Myślałem, że szybko to rozwiążę, kompilując to, co chciałem w Scali, a następnie dekompilując wynikowe pliki klas. Oto skala: object JavaMapTest { def main(args: Array[Ciąg]) = { val HAI_MAP = Map(("Witaj", "Świat"), ("Szczęśliwego", "Urodziny"), ("Wesołych", " XMas"), ("Bye", "For Now"), ("Później", "Aligator")) println("Moja mapa to: " + HAI_MAP) } } Ale dekompilator dał mi coś, co ma dwie kropki w wiersz i dlatego nie skompiluje się (nie sądzę, że jest to poprawna Java): scala.collection.immutable.Map HAI_MAP = (scala.collection.immutable.Map) scala.Predef..MODULE$.Map().apply (scala.Predef..MODULE$.wrapRefArray( scala.Predef.wrapRefArray( (Object[])new Tuple2[] { new Tuple2("Witaj", "Świat"), new Tuple2("Szczęśliwy", "Urodziny") , nowa Tuple2("Wesołych", "Boże Narodzenie"), nowa Tuple2("Do widzenia", "Na razie"), nowa Tuple2("Później", "Aligator") })); Jestem naprawdę zaskoczony dwoma okresami w tym: scala.Predef..MODULE$ Zapytałem o to na `#java` na Freenode i powiedzieli, że `..` wygląda jak błąd dekompilatora. Wygląda na to, że nie chce się kompilować, więc myślę, że prawdopodobnie mają rację. Wpadam na to, gdy próbuję przeglądać interfejsy w IntelliJ i ogólnie się gubię. Na podstawie moich eksperymentów prawidłowe jest następujące: Tuple2[] x = new Tuple2[] { new Tuple2<String,String>("Hello", "World"), new Tuple2<String,String>("Happy", " Urodziny")), nowa Tuple2<String,String>("Merry", "XMas"), nowa Tuple2<String,String>("Bye", "For Now"), nowa Tuple2<String,String>("Later" , "Aligator") }; scala.collection.mutable.WrappedArray<Tuple2> y = scala.Predef.wrapRefArray(x); Istnieje nawet metoda `WrappedArray.toMap()`, ale typy sygnatur są skomplikowane i tam też napotykam problem podwójnego okresu, gdy próbuję badać interfejsy z Javy.


title: testowanie jednostkowe zmienne stany jawne testy w językach dynamicznie typowanych

text: Słyszałem, że pożądaną jakością testów jednostkowych jest to, że testują one każdy scenariusz niezależnie. Pisząc dzisiaj testy zdałem sobie sprawę, że kiedy porównujesz zmienną z inną wartością w wyrażeniu takim jak: attachEquals("foo", otherObject.stringFoo); Tak naprawdę testujesz trzy rzeczy: 1. Testowana zmienna istnieje i mieści się w zakresie. 2. Testowana zmienna jest oczekiwanym typem. 3. Wartość zmiennej, którą testujesz, jest taka, jakiej oczekujesz. Co dla mnie rodzi pytanie, czy należy testować każdy z tych elementów w sposób niejawny, aby wynik testu zakończył się niepowodzeniem w określonej linii, która testuje ten problem: attachTrue(stringFoo); attachTrue(stringFoo.typeOf() == "Ciąg"); attachEquals("foo", otherObject.stringFoo); Na przykład, jeśli zmienna byłaby liczbą całkowitą, a nie łańcuchem, niepowodzenie przypadku testowego byłoby w wierszu 2, co dałoby więcej informacji na temat tego, co poszło nie tak. Czy powinieneś testować tego rodzaju rzeczy wyraźnie, czy też przemyślam to?


title: Wzorzec projektowy do powiązania danych obiektu (z podklasami) z kontrolą użytkownika asp.net

text: Mam klasę abstrakcyjną o nazwie Adres i wyprowadzam trzy klasy; Adres domowy, adres służbowy, adres NextOfKin. Mój pomysł polega na tym, aby powiązać to z kontrolką użytkownika i na podstawie typu adresu powinien on powiązać się poprawnie z kontrolką użytkownika ASP.NET. Moim pomysłem jest to, że kontrolka użytkownika nie wie, który adres będzie prezentować, i na podstawie typu będzie odpowiednio analizować. Jak mogę zaprojektować taką konfigurację, w oparciu o fakt, że kontrolka użytkownika może przyjąć dowolny typ adresu i odpowiednio powiązać. _Znam jedną metodę, taką jak :-_ Zadeklaruj obiekty klasy dla wszystkich trzech typów (Dom, Praca, NextOfKin). Zadeklaruj wyliczenie do przechowywania tych typów i na podstawie typu tego wyliczenia przekazanego do kontroli użytkownika utwórz wystąpienie odpowiedniego obiektu na podstawie iniekcji ustawiającej. W ramach mojego ogólnego projektu właśnie stworzyłem strukturę klas taką jak ta :- ![Przykładowy UML](http://i.stack.imgur.com/DyML8.png) Wiem, że brakuje mi wielu elementów w projekt. Czy ktoś może dać mi pomysł, jak podejść do tego we właściwy sposób.


title: Którą książkę o systemie operacyjnym polecasz?

text: Chcę przeczytać dobrą książkę o systemach operacyjnych. Mówiąc dokładniej, chcę przeczytać o tym, jak zwykle rozwiązywane są typowe problemy - takie jak zarządzanie pamięcią wirtualną, obsługa pułapek, przełączanie kontekstu, zarządzanie procesami i wątkami itp. To znaczy, nie szukam książki o tym, jak programować _w kierunku_ systemu operacyjnego; Szukam książki o tym, jak _napisać_ system operacyjny. Mam nadzieję, że to wyjaśnia pytanie. Proszę napisać tylko **jedną książkę na odpowiedź** , do celów głosowania.


title: Czym jest „potężny” język?

text: Często widziałem ludzi walczących o to, że ich ulubiony język jest bardziej „potężny” niż inne. Jeśli chodzi o opisywanie języka programowania, mogę zrozumieć, czym jest język zorientowany obiektowo lub czym jest język dynamiczny, ale nadal nie mogę zrozumieć, czym dokładnie jest „potężny” język. Jakie są Twoje myśli?


title: Czy dobrym pomysłem jest rysowanie się obiektów JS podczas ładowania strony?

text: Więc normalnie używałbym JS tylko do modyfikowania dom po interakcji użytkownika z czymś lub po jakimś zdarzeniu. Z jakiegoś powodu wydaje się to słuszne. Ale pracuję nad aplikacją opartą na widżetach, w której widżety potrzebują możliwości samodzielnego rysowania (drukowania) i wydaje się, że wysyłanie html widżetu za pośrednictwem początkowego żądania http jest zbędne, gdy mogę po prostu wydrukować je za pomocą metody js podczas ładowania strony. Czy z reguły powinienem unikać drukowania elementów HTML z JS podczas ładowania strony, czy jest to tylko kwestia optymalizacji?


title: Stopniowe przejście od zielonego do żółtego do czerwonego

text: Mam mentalną blokadę algorytmu w projektowaniu sposobu na przejście z zielonego na czerwony, tak płynnie, jak to możliwe, z potencjalnie nieznanym czasem do przejścia. Do celów testowych będę używał 300 jako przedziału czasowego mojego modelu, ale projekt algorytmu metodologii musi być wystarczająco elastyczny, aby uwzględnić większe lub nawet mniejsze przedziały czasowe. Rysunek przy użyciu RGB byłby prawdopodobnie najlepszy do przejścia, ale otwarty na inne typy tworzenia kolorów, zakładając, że jest natywny dla .Net (VB/C#). Obecnie mam: t = 300 x = t/2 z = 0 niski = zielony (0, 255, 0) średni = żółty (255, 255, 0) wysoki = czerwony (255, 0, 0) Wreszcie, rodzaj opcjonalnym elementem, jest uwzględnienie możliwości, że kolory `low`, `mid` i `high` są również elastyczne. Zakładam, że należałoby sprawdzić, czy ktoś nie wstawia `low = (255,0,0)`, `mid=(254,0,0)` i `high=(253,0) ,0)". Poza tą anomalią, którą sam zajmę się w oparciu o najlepsze podejście do oceny koloru. ### Pytanie: * Jakie byłoby najlepsze podejście do przejścia z „niskiego” na „średni”, a następnie od „średniego” do „wysokiego”? * Jakie byłyby potencjalne pułapki związane z wdrożeniem tego typu projektu, jeśli w ogóle?


title: Jaki jest odpowiedni język do wyrażania początkowych etapów udoskonalania algorytmu?

text: Po pierwsze, nie jest to zadanie domowe, ale można je tak traktować ;). W opublikowanym artykule Wielbłąd ma dwa garby znalazłem następujące pytanie. Nie byłem specjalistą z CS i chodziłem do college'u (ukończyłem MIS/Zarządzanie), ale mam pracę, w której często koduję. > W przypadku nietrywialnego problemu programowania, który z poniższych jest > odpowiednim językiem do wyrażania początkowych etapów algorytmu > udoskonalenia? > > (a) Język programowania wysokiego poziomu. > > (b) angielski. > > (c) Kod bajtowy. > > (d) Natywny kod maszynowy procesora, na którym zostanie uruchomiony program. > > (e) Strukturalny angielski (pseudokod). Wiem tylko, że _zazwyczaj_ chcesz rozpocząć implementację projektu od zapisania pseudokodu, a następnie przeniesienia/zapisania w pożądanej technologii (ponieważ wszyscy to robimy, prawda?) Ale nigdy nie myślałem o tym w kategoriach **udoskonalenia* *. To znaczy, gdybyś był oryginalnym projektantem, mógłbyś mieć dostęp do oryginalnego pseudokodu. Ale realistycznie, kiedy muszę utrzymać/refaktorować/ **dopracować** czyjś kod, po prostu kontynuuję pracę z językiem, w którym obecnie się znajduje. **Ktoś ma na to ostateczną odpowiedź?** Na marginesie, ja zrobiłem szybki skan papieru, ponieważ nie przeczytałem każdego szczegółu. Przedstawia różne statystyki wyników, nie może znaleźć odpowiedzi na papierze.


title: Czy interfejsy powinny rozszerzać (i w ten sposób dziedziczyć metody) innych interfejsów?

text: Chociaż jest to ogólne pytanie, dotyczy ono również problemu, którego obecnie doświadczam. Obecnie mam interfejs określony w moim rozwiązaniu o nazwie interfejs publiczny IContextProvider { IDataContext { get; ustawić; } IReaContext { pobierz; ustawić; } } Ten interfejs jest często używany w całym programie, dzięki czemu mam łatwy dostęp do potrzebnych mi obiektów. Jednak na dość niskim poziomie części mojego programu potrzebuję dostępu do innej klasy, która będzie używać _IAreaContext_ i wykonywać na niej pewne operacje. Stworzyłem więc inny interfejs fabryczny do tego tworzenia o nazwie: interfejs publiczny IEventContextFactory { IEventContext CreateEventContext(int eventId); } Mam klasę, która implementuje _IContextProvider_ i jest wstrzykiwana przy użyciu NinJect. Problem, który mam, polega na tym, że obszar, w którym muszę użyć tego _IEventContextFactory_, ma dostęp tylko do _IContextProvider_ i sam używa innej klasy, która będzie potrzebować tego nowego interfejsu. Nie chcę ** inicjować ** tej implementacji _IEventContextFactory_ na niskim poziomie i wolę pracować z interfejsem _IEventContextFactory_ w całym tekście. Jednak nie chcę również wstrzykiwać kolejnego parametru przez konstruktory tylko po to, aby został przekazany do klasy, która tego potrzebuje, tj. // przykład problemu public class MyClass { public MyClass(IContextProvider context, IEventContextFactory event) { _context = kontekst; _zdarzenie = wydarzenie; } public void DoCoś() { // jedynym miejscem, w którym _event jest używane w klasie, jest przekazanie go przez var myClass = new MyChildClass(_event); mojaKlasa.Wykonywanie Kalkulacji(); } } Więc moje główne pytanie brzmi, czy jest to akceptowalne, czy jest to nawet powszechna lub dobra praktyka, aby zrobić coś takiego (interfejs rozszerza inny interfejs): interfejs publiczny IContextProvider : IEventContextFactory czy powinienem rozważyć lepsze alternatywy dla osiągnięcia tego, czego potrzebuję. Jeśli nie podałem wystarczających informacji, aby dać sugestie, daj mi znać, a mogę podać więcej.


title: Zwracasz wyniki metody na liście partii?

text: Tytuł jest nieco niejasny, więc postaram się go rozwinąć. Mam funkcję makeFoo(int bar) -> zwraca Foo lub rzuca Exception. Mam również wersję wsadową tego makeFoos(int[] bars) -> zwraca Foo[], które w zasadzie zapętla się przez paski i uruchamia na nich makeFoo(). Problem polega na tym, że jeśli podczas uruchamiania makeFoos(), makeFoo() zgłasza Wyjątek, co mam zrobić? Nie chcę wyłamywać się z makeFoos(), ponieważ chcę kontynuować przetwarzanie pozostałych pasków. Ale także chcę zachować zgłoszony wyjątek. Moje początkowe rozwiązanie polega na tym, że zamiast zwracać Foo[], zwracam Result<Foo>[]. Gdzie Result jest klasą opakowania: class Result<T>: T data; Wyjątek e; Czy jest lepszy sposób, żebym do tego podszedł? * * * Edytuj: Przepraszamy, jeśli jest to uważane za zduplikowany post, ale opublikowałem bardziej ogólną wersję tego pytania tutaj: Obiekt wynikowy a wyjątki


title: W jaki sposób pliki .so pozwalają uniknąć problemów związanych z przekazywaniem szablonów zawierających tylko nagłówki, takich jak pliki MS dll?

text: Na podstawie dyskusji wokół tego pytania. Chciałbym wiedzieć, jak pliki .so/format ELF/toolchain gcc pozwalają uniknąć problemów z przekazywaniem klas zdefiniowanych wyłącznie w plikach nagłówkowych (takich jak biblioteka std). Według Jana w tej odpowiedzi dynamiczny linker/loader wybiera tylko jedną wersję takiej klasy do załadowania, jeśli jest zdefiniowana w dwóch plikach .so. Więc jeśli dwa pliki .so mają dwie definicje, być może z różnymi opcjami kompilatora/itd., dynamiczny linker może wybrać jedną do użycia. Czy to jest poprawne? Jak to działa z inliningiem? Na przykład agresywnie wbudowane szablony MSVC. To sprawia, że rozwiązanie, które opisałem powyżej, jest nie do utrzymania dla bibliotek dll. Czy Gcc nigdy nie zawiera wbudowanych szablonów zawierających tylko nagłówki, takich jak biblioteka std, tak jak robi to MSVC? Jeśli tak, czy to nie sprawi, że opisana powyżej funkcjonalność ELF nie będzie w takich przypadkach nieskuteczna?


title: Przejrzystość projektu programu a wygoda

text: Niedawno spierałem się z kolegą o następującą sytuację: opracowałem framework, który przetwarza zasoby (w javie, chociaż nie jest to zbyt ważne). To wygląda (uproszczony, pseudokod) tak: class Algorytm { Procesor procesora = ...; execute() { forEach(Resource r : readResourceNamesFromFileSystem()) { DomainObject do = convertResourceToDomainObject(r); procesor.proces(do); } } } interfejs Procesor { process(DomainObject do); } Klasa **Algorytm** jest punktem wejścia do mojego frameworka. Zasób to reprezentacja jakiejś zawartości w systemie plików (posiada metody odczytu danych z pliku i nazwy pliku, co jest ważne) Klasa **DomainObject** (deklaracja jest pominięta) to reprezentacja zawartości pliku w javie przedstawiony przez Zasób. DomainObject zawiera tylko dane i nie ma wewnątrz nazwy pliku. Klasa **Processor** reprezentuje warstwę logiki biznesowej, obiekt DomainObject może być przetwarzany, przechowywany w bazie danych i tak dalej. Dane treści są dostarczane przez innych, wiemy tylko, że te pliki zawierają dane, które można przekonwertować na obiekt(y) domeny, który jest rzeczywistym obiektem, z którym pracujemy w ramach frameworka. Przechowujemy jeden obiekt DomainObject w jednym pliku. Teraz kłócimy się o nazwę pliku. Mój kolega chce, aby nazwa pliku była propagowana do procesora i potencjalnie do wszystkich warstw, ponieważ łatwo jest wydrukować komunikat rejestrowania / zgłosić wyjątek zawierający nazwę pliku, jeśli coś pójdzie nie tak podczas przetwarzania, lub może napisać wiadomość jak „obiekt domeny przechowywany w pliku ( **tutaj__comes__nazwapliku** ) został pomyślnie przetworzony”. Widzę punkt kolegi (wygoda), ale jestem pewien, że psuje to projekt i enkapsulację, ponieważ moduł procesora tak naprawdę nie powinien być świadomy „pochodzenia” DomainObject (dzisiaj przechowujemy je w plikach jeden DomainObject na plik , jutro może użyjemy czegoś innego, czegoś, co niekoniecznie ma nazwę pliku). Twierdzę, że lepiej złapać wyjątek w metodzie Algorithm.execute i ponownie zgłosić wyjątek z nazwą pliku/zalogować nazwę pliku. Plik dziennika będzie mniej czytelny, ale enkapsulacja nie zostanie zerwana. W moim rozumieniu to projekt a jasność. Czy mógłbyś podzielić się swoją opinią, kto ma rację, a kto się myli? Czy powinienem poświęcić projekt dla przejrzystości kłód? BTW obiecałem mojemu koledze zadać to pytanie, więc wspólnie przeczytamy możliwe odpowiedzi :) Z góry bardzo dziękuję i życzę miłego dnia


title: Udostępniony deskryptor pliku FIFO

text: czy można otworzyć fifo z jednym FD i dzielić się nim z wieloma wątkami? czy może lepiej mieć otwartych wiele plików fd dla tego samego fifo i udostępniać je wątkom? BTW, będę pisać i czytać. Środowisko to linux, C, pthreads


title: Używanie programu Visual Studio jako IDE skoncentrowanego na zadaniach

text: Czy istnieją wzorce lub biblioteki lub jakikolwiek oficjalny zestaw Microsoft SDK do korzystania z programu Visual Studio jako interfejsu użytkownika skoncentrowanego na zadaniach? Na przykład, zarówno Revolution R (IDE dla języka R), jak i SQL 2012 (i myślę, że SQL 2008 i prawdopodobnie 2005) używają Visual Studio jako bazowego frameworka IDE. Czy istnieje oficjalnie obsługiwany pakiet SDK i/lub przykłady/przykłady do robienia tego typu rzeczy? Tworzę Parser językowy dla istniejącego języka - którego jedyne dostępne IDE jest NIESAMOWITE drogie - używając Irony (i ostatecznie wygeneruję również usługę językową). Wszelkie bezpośrednie lub pośrednie sugestie/odpowiedzi są mile widziane.


title: Względny projekt enkapsulacji

text: Załóżmy, że tworzę aplikację 2D o następującym projekcie: Istnieje obiekt Level, który zarządza światem, i istnieją obiekty świata, które są bytami wewnątrz obiektu Level. Obiekt świata ma lokalizację i prędkość, a także rozmiar i teksturę. Jednak obiekt świata ujawnia tylko właściwości `get`. Właściwości `set` są prywatne (lub chronione) i są dostępne tylko dla klas dziedziczonych. Ale oczywiście Level jest odpowiedzialny za te światowe obiekty i musi w jakiś sposób być w stanie manipulować przynajmniej niektórymi swoimi prywatnymi twórcami. Ale jak na razie Level nie ma dostępu, co oznacza, że obiekty świata muszą zmienić swoje prywatne ustawiacze na publiczne (z naruszeniem enkapsulacji). Jak poradzić sobie z tym problemem? Czy powinienem po prostu wszystko upublicznić? Obecnie to, co robię, to posiadanie wewnętrznej klasy wewnątrz obiektu gry, która wykonuje działanie `set`. Kiedy więc Level potrzebuje zaktualizować lokalizację obiektów, wygląda to mniej więcej tak: void ChangeObject(GameObject targetObject, int newX, int newY){ // targetObject.SetX i targetObject.SetY nie mogą być ustawione bezpośrednio var setter = new GameObject.Setter(targetObject ); seter.SetX(nowyX); seter.SetY(nowyY); } Ten kod wydaje się przesadą, ale nie wydaje się właściwe, aby wszystko było publiczne, aby na przykład cokolwiek mogło zmienić lokalizację obiektu.


title: Co się stanie, jeśli jakiekolwiek języki potraktują niedysponowane zasoby jako błąd?

text: Widziałem dużo kodu, takiego jak w poniższym przykładzie. Jest w Pythonie, ale ten sam błąd jest popełniany we wszystkich językach z zarządzanymi zasobami: f = open('foo.txt', 'rb') for line in f: print line To wszystko. Błąd polega na tym, że `close(f)` nie zostało wywołane, więc uchwyt pliku pozostaje otwarty do pewnego niedeterministycznego czasu w przyszłości, kiedy zarządzanie pamięcią środowiska wykonawczego zdecyduje się odzyskać pamięć. Python ma `with`, a c# `using`, aby ułatwić czyszczenie zasobów, ale pomińmy te funkcje na chwilę. Biorąc pod uwagę, że: 1. Błędem programowania jest jawne nie zamykanie otwartych plików. 2. Środowisko wykonawcze może wykryć, że otwarty plik nie został zamknięty. Dlaczego zatem środowisko wykonawcze nie zgłasza błędu, zamiast być „pomocnym” i zamykać plik dla programisty? To byłaby strategia szybkiej porażki i wczesnej porażki. Czy jest jakiś techniczny powód, dla którego nie może? Czy są jakieś języki, które to robią? Czy pomysł był rozważany wcześniej (wygooglowałem, ale niczego nie znalazłem)? Oto jak **prawie** zaimplementujesz tę funkcję w Pythonie: class mustclose: def __init__(self, f): self.f = f def __del__(self): if not self.f.closed: podnieś Exception("Ty zapomniałem zamknąć() mnie!") k = mustclose(open('foo.txt', 'wb')) #k.f.close() Dwa problemy: Wymaga wrapperów, Python nie lubi wyrzucać wyjątków od destruktorów. (Przeczytaj to http://stackoverflow.com/questions/2807241/what-does-the- expression-fail-early-mean-and-when-would-you-want-to-do-so SO, aby dowiedzieć się, dlaczego często pożądana jest szybka porażka)


title: Jak wyświetlić podgląd mojej mobilnej aplikacji internetowej na komputerze z systemem Windows 7?

text: Zajmuję się tworzeniem mobilnej aplikacji webowej, którą można przeglądać na iPhonie. Chciałbym przetestować tę aplikację, ale brakuje mi mobilnego urządzenia webowego. Jak mogę przetestować tę aplikację mobilną na komputerze z systemem Windows 7?


title: Co powinienem polecić małej firmie szukającej programistów C#

text: Oto problem. Jestem starszym programistą, a jeden ze start-upów, które zaprojektowałem dawno temu system (system zarządzania/baza danych/web), rozrósł się i potrzebuje aktualizacji oprogramowania. Zostawiłem ich system innemu programiście już dawno temu, ale najwyraźniej zrezygnował z pracy, więc pytają mnie, czy mogę im zasugerować, gdzie znaleźć nowy. Problem w tym, że firma nie ma pojęcia, że IT nie jest tanie. Oczekują dodania wielu funkcji za 40 $, więc to jest problem. Właściwie jeden z powodów, dla których opuściłem projekt, kiedy to zrobiłem. Dużo oczekiwań, mało zarobków, znam też tych ludzi poza pracą, więc postanowiłem nie stresować się związkami pozazawodowymi i z wdziękiem wyszedłem z projektu. Dzisiaj poprosili mnie o radę i powiedziałem im, że lista funkcji, którą chcą, prawdopodobnie będzie trochę kosztować, jeśli zatrudnią do tego starszego programistę. Sądzę więc, że najlepszym rozwiązaniem jest znalezienie kogoś, kto kocha kodowanie i właśnie ukończył szkołę. Co dałoby komuś szansę na kodowanie za pieniądze, które są dobre dla studenta, a jednocześnie pozwoliłoby studentowi zdobyć trochę doświadczenia. Z drugiej strony, system nie jest dokładnie 20-liniowym programem konsoli, jest baza danych MSSQL, strona internetowa ASP.NET i system zarządzania treścią ze wszystkimi rzeczami AJAX i kilkoma innymi rzeczami. Więc uczeń prosto ze szkoły może mieć z tym pewne problemy. Ale myślałem o tym trochę więcej i myślę, że młodszy programista to trudna sprawa, bez mentoringu, może albo schrzanić po królewsku, albo po prostu zrobić to, o co go poproszono. Poza tym wygląda na to, że nikt w ogóle nie przychodzi na wywiady, co jest dziwne, a może nie. Co mam im zasugerować?


title: Utrzymywanie podpisów metod w różnych językach?

text: Kończę port, który zrobiłem, części biblioteki Java. Biblioteka oblicza wschód i zachód słońca dla danej szerokości i długości geograficznej. Oryginalna biblioteka Java również obliczała różne czasy na podstawie wschodu i zachodu słońca, do czego planuję później. To powiedziawszy, pracuję z Objective-C i frameworkiem dotykowym Cocoa. Wszystkie oryginalne metody, będące Javą, zaczynały się od `get` i umieszczały swoje argumenty w nawiasach. Jednak Objective-C ma inną strukturę metod, więc metody wyglądają inaczej. Na przykład, `public double getUTCSunset(AstronomicalCalendar astronomicalCalendar, double zenith, boolean adjustForElevation)` przyjmuje postać: `- (double) getUTCSunsetForDate:(NSDate*)date andZenith:(double)zenith adjustForElevation:(BOOL)adjustForElevation`. Problem jest dwojaki. Po pierwsze, zgodnie z konwencją dotyczącą kodowania w Dokumentacji Apple, nazwy metod (i „gettery”) nie powinny zawierać w nich słowa „get”. Jednak druga kwestia pojawia się, gdy odrzucimy polecenie „get”. Kończymy z podpisem metody, który zaczyna się od dużej litery, co również nie powinno mieć miejsca. Jak przepisałbyś tę metodę, zachowując jednocześnie wystarczająco podobne sygnatury metod, aby były rozpoznawalne?


title: Przygotowanie do nowego projektu programistycznego

text: Uważam się za początkującego programistę – taki noob jest taki, jak lubisz. W związku z tym nadal nie jestem pewien, jak zacząć projekt, w którym będę robił rzeczy, których nigdy wcześniej nie robiłem. Na przykład chciałbym napisać program, który może pobierać filmy z YouTube i konwertować je do formatu określonego przez użytkownika. Nigdy wcześniej czegoś takiego nie robiłem i naprawdę nie mam pojęcia, od czego zacząć. Raczej nie mam pojęcia, czego powinienem szukać. Jeśli wyszukuję „YouTube Downloader”, trafiam na kilka bezużytecznych linków do istniejących witryn YouTube Downloader, z których większość nie działa. Chcę wiedzieć, jak rozpocząć projekt, o którym nic nie wiem. Jak mogę się dowiedzieć, co jest wymagane do tego projektu? Jak mogę się dowiedzieć, jakie języki najlepiej się do tego nadają? Jak mogę się dowiedzieć, czy istnieją jakieś interfejsy API, które byłyby szczególnie przydatne? Jakie jeszcze pytania powinienem sobie zadać, przygotowując się do nowego projektu?


title: Optymalizacja programów poprzez identyfikowanie i przyjmowanie skrótów oceny (obliczenia)

text: Ostatnio pracuję nad projektem, który obejmuje wiele prostych obliczeń numerycznych stosowanych na dużych tablicach. Wartości liczbowe są bardzo proste, ale istnieje wiele różnych typów, takich jak dodatnie liczby całkowite, ujemne liczby całkowite, małe liczby zmiennoprzecinkowe i tak dalej. Techniki programowania SIMD (takie jak SSE) są szeroko stosowane. Zauważyłem, że wiele razy szybkość przetwarzania można poprawić, jeśli znajdę skróty w obliczeniach. Na przykład, jeśli dane wejściowe są liczbami całkowitymi, a dane wyjściowe są również liczbami całkowitymi, powinienem starać się unikać konwersji na liczby zmiennoprzecinkowe, jeśli to możliwe. W przypadku prostych obliczeń łańcuchowych jest to łatwe. Jednak gdy zwiększymy liczbę operacji, które można połączyć, okaże się, że musimy ręcznie zakodować te instrukcje SIMD dla każdego przypadku. Przestudiowałem podejścia stosowane przez różne biblioteki wektoryzacji i zauważyłem, że chociaż ich podejście jest bardzo eleganckie w kodzie przy użyciu technik metaprogramowania, większość kompilatorów nie jest w stanie wygenerować zoptymalizowanych instrukcji maszynowych na podstawie wyników. Jeśli przedstawię obliczenia za pomocą obiektów poleceń, czy będę miał większą szansę na dopasowanie małych odcinków łańcucha poleceń i zastąpienie ich skrótami?


title: Kiedy robić przeglądy kodu podczas ciągłej integracji?

text: Próbujemy przejść na środowisko ciągłej integracji, ale nie jesteśmy pewni, kiedy przeprowadzać przeglądy kodu. Z tego, co wyczytałem o ciągłej integracji, powinniśmy próbować sprawdzać kod tak często, jak wiele razy dziennie. Zakładam, że oznacza to nawet funkcje, które nie są jeszcze kompletne. Więc pytanie brzmi, kiedy robimy przeglądy kodu? Nie możemy tego zrobić przed zaewidencjonowaniem kodu, ponieważ spowolniłoby to proces, w którym nie będziemy mogli wykonywać codziennych zameldowań, nie mówiąc już o wielokrotnych zameldowaniach dziennie. Ponadto, jeśli kod, który sprawdzamy, po prostu się kompiluje, ale nie jest kompletny, wykonanie przeglądu kodu jest bezcelowe, ponieważ większość przeglądów kodu najlepiej przeprowadzać, gdy funkcja jest sfinalizowana. Czy to oznacza, że powinniśmy robić przeglądy kodu po zakończeniu funkcji, ale ten niesprawdzony kod dostanie się do repozytorium?


title: Obliczanie kamieni milowych/listy zadań

text: Mój kierownik projektu przydzielił mi zadanie oszacowania czasu rozwoju aplikacji na iPada. Załóżmy, że podałem oszacowanie 15 dni roboczych. Uważał, że liczba dni, w których zbyt wiele i klient pilnie potrzebował zmian w aplikacji (jak w większości przypadków). Powiedział mi więc: „Zamierzam przypisać **dwóm** programistę, w tym ciebie, i zgodnie z moim zrozumieniem i doświadczeniem, nie zajmie to więcej niż **siedem** dni roboczych”. **Objaśnienia** Otrzymałem zadanie oszacowania czasu rozwoju jednostki. Skąd mogę mieć pewność, że 2 programistów zakończy to w ciągu 7 dni? (Jestem nowy w zespole i prawie nie znam innych umiejętności) **Pytania** * Dlaczego większość kierowników projektów / liderów zespołów ma takie zrozumienie: * Jeśli jeden programista potrzebuje N dni, * Wtedy dwóch programistów wymaga N/2 dni, * Czy myślą coś w stylu `deweloper = maszyny produkcyjne s/w`? * Czy członek zespołu (programista, a nie kierownik zespołu lub osoba zajmująca wyższe stanowisko) powinien oceniać pracę innych programistów? Nie zaprzeczyłem niczego na spotkaniu i nie powiedziałem, ale jaka powinna być właściwa odpowiedź, aby przekonać ich, że formuła N/2, którą stosują, jest nieprawidłowa?


title: Czy komentarze TODO mają sens?

text: Pracuję nad dość dużym projektem i dostałem zadanie wykonania kilku tłumaczeń. Było mnóstwo etykiet, które nie zostały przetłumaczone i kiedy przekopywałem się przez kod, znalazłem ten mały fragment kodu //Tłumaczenia TODO To sprawiło, że pomyślałem o znaczeniu tych komentarzy dla ciebie (i innych?), ponieważ zrozumiałem poczucie, że większość programistów po wykonaniu określonego fragmentu kodu i zrobieniu tego, co powinno, nigdy na to nie patrzy, dopóki nie będą musieli go utrzymywać lub dodawać nowej funkcjonalności. Aby to „TODO” przepadło na długi czas. Czy pisanie tych komentarzy ma sens, czy też powinny być napisane na tablicy/papieru/coś innego, na czym pozostają w centrum zainteresowania programistów?


title: Wymaganie, narzędzie do przechwytywania danych o architekturze

text: Czy są dostępne jakieś narzędzia dla następującego przypadku użycia: Planuję napisać złożoną aplikację, a teraz wiem już tylko o podstawowych wymaganiach funkcjonalnych. Dopracowuję funkcjonalność dodając coraz więcej szczegółów. Piszę też, jak to zaimplementować w perspektywie architektury oprogramowania. Jestem w sytuacji, w której istnieje wiele sposobów realizacji określonej funkcjonalności i w oparciu o wybrane podejście zmienią się również inne części programu. W tej chwili nie chcę decydować o podejściu do zastosowania, chcę tylko spisać wszystkie opcje, zaprezentować szerszej publiczności i doprowadzić do finalizacji. Czy są do tego jakieś standardowe narzędzia programowe? Wiem, że mogę używać MS excel lub niektórych narzędzi do mapowania myśli, ale myślę tylko o standardowych narzędziach (nie tylko dla programistów, ale dla menedżerów i innych) dostępność Dzięki, Den


title: Jaka byłaby to relacja i jak ją wdrożyć

text: Mam projekt dla zwierząt, w którym tworzę aplikację dziennika ocen, aby lepiej uczyć kilku różnych tematów w DB, OOP i Planowaniu. Mam problemy z planowaniem bazy danych. Dla przypomnienia, uczę się tego wszystkiego, korzystając z zasobów internetowych, książek i prób i błędów, w żaden sposób nie jestem profesjonalistą. Mam 3 tabele (nauczyciele, kursy i zadania). 1) Wielu nauczycieli może uczyć wielu kursów - więc byłaby to relacja M2M, w której potrzebowałbym trzeciej tabeli, aby porównywać nauczycieli i kursy według ich PK. Czy to w porządku, aby ta trzecia tabela zawierała dodatkowe kolumny pokazujące unikalne dane o kursach, takie jak Tytuł kursu, czy też powinny one trafić do tabeli kursów? A jeśli to zależy, skąd miałbyś wiedzieć, który sposób jest najlepszy? 2) Jeden kurs może mieć wiele zadań, czy może wiele kursów może mieć wiele zadań? Czuję, że to głupie pytanie, ale nie mogę pojąć, które byłoby prawidłowe stwierdzenie faktu? 3) Czy ktoś zna jakieś diagramy bazy danych, które pokazywały przykład bardzo prostego układu dziennika ocen, szukałem w google, ale nie mogłem znaleźć niczego, co nie było w moim królestwie.


title: Algorytm sekwencyjny/równoległy do wyodrębniania zewnętrznego obwodu/długości konturu plamki

text: Połączone komponenty oznaczyłem w obrazie binarnym i znalazłem ich obszary i obwiednie. Elementy niekoniecznie są wypełnione i mogą zawierać dziury. Chciałbym zidentyfikować komponent, który najbardziej przypomina ucznia. W tym celu chciałbym również wyodrębnić ( **tylko** ) ich zewnętrzne długości obwodu, aby obliczyć kołowość, ponieważ są to dobre cechy do wykrywania źrenic. Planuję zrobić to sekwencyjnie, a następnie przenieść algorytm do CUDA, więc algorytm powinien być do pewnego stopnia zrównoleglony. Powinienem zauważyć, że ta praca jest dla mojej pracy magisterskiej i nie proszę o rozwiązywanie czegokolwiek dla mnie, po prostu o informację zwrotną na temat moich dotychczasowych badań. Zbadałem mnóstwo artykułów dotyczących tego problemu, ale wydaje się, że większość z nich dotyczy etykietowania połączonych komponentów, a nie wyodrębniania funkcji. Niestety, znalazłem trzech kandydatów i ~~dwóch~~ jednego według mojego własnego projektu: 1. **Algorytm marszowych kwadratów**. Brzmi obiecująco (również żenująco równolegle), ale wydaje się, że wyodrębnia wszystkie długości obwodu, w tym kontury wewnętrzne, bez modyfikacji, co prawdopodobnie spowoduje przeszacowanie długości obwodu. Ponieważ jednak szukam źrenicy, jednorodnie zabarwionego obszaru, prawdopodobnie nie przecenię źrenicy. Przeszacowanie może również dać złe wyniki w przypadku innych nieregularnie ukształtowanych plamek, co powinno wystarczyć, jeśli nie zostaną one następnie wybrane. 2. **Algorytm kodu łańcuchowego** (używany przez funkcję findContours OpenCV): również wydaje się całkiem dobry, a rozwiązania równoległe istnieją, ale obawiam się, że może się nie powieść, jeśli kryterium zatrzymania nie jest wystarczająco dobre (patrz tutaj, na na dole w pobliżu kryterium zatrzymania Jacoba). Powinien jednak być w stanie wydobyć tylko kontur zewnętrzny i dać dobre przybliżenia. 3. **Algorytmy Convex Hull** : Chociaż istnieją równoległe rozwiązania, obawiam się, że może to sprawić, że plama będzie bardziej okrągła, niż jest w rzeczywistości, jeśli punkty są rozrzucone w sposób, który sprzyja temu. Powinno to jednak dać dobre wyniki dla kropelki źrenicy. 4. ~~**Algorytm 1** : Możesz uruchomić kilka wątków, które biegną z każdej strony obwiedni obiektu bloba w kierunku przeciwnej strony. Gdy wątki „uderzają” w piksel z etykietą bloba, oznaczają go jako odwiedzony i sumują trafienia. Kiedy śledzona jest druga strona, odwiedzany piksel jest ignorowany, piksele trafienia są ponownie sumowane itd., a suma jest zwracana.~~ 5. **Algorytm 2** : Próbowałem również policzyć liczbę pikseli z pikselem tła w ich Sąsiedztwo Moore'a, ale to zawyża kontur, jeśli jest wystarczająco dużo dziur. Byłbym wdzięczny za kilka sugestii, zanim spróbuję wszystko zakodować, ponieważ mam harmonogram. Znowu proszę tylko o radę, a nie rozwiązania.


title: W jakich sytuacjach sensowne jest używanie enumeracji podczas pisania kodu obiektowego?

text: Wyliczenia1 są często kojarzone z kodem proceduralnym, a nie kodem obiektowym. Mają tendencję do powodowania podobnych instrukcji switch rozproszonych w kodzie i generalnie są one zastępowane przez polimorfizm w kodzie zorientowanym obiektowo. Na przykład zobacz _Zamień kod typu na klasę_ , _Zastąp kod typu na podklasy_ i _Zamień kod typu na stan/strategię_ w _Refaktoryzacji_ autorstwa Martina Fowlera. Ściśle powiązane, zobacz _Zamień warunkowe na polimorfizm_ w tym samym tomie; Bob Martin ma również sporo do powiedzenia na temat wad instrukcji switch w _Clean Code_ (na przykład heurystyka G23 _Prefer Polymorphism to If/Else lub Switch/Case_ ). Ponieważ jednak orientacja obiektowa, jak każdy inny dobry paradygmat, może być potężnym narzędziem, ale nie jest srebrną kulą, czy zdarza się, że użycie wyliczenia jest dobrą decyzją? * * * 1 Używam tego terminu szeroko; nie tylko dla czegoś, co jest ściśle „enum” w języku opartym na C, ale dla dowolnego zestawu encji, który jest używany do jego reprezentowania (klasa ze zbiorem statycznych elementów, itp.).


title: W Asp.net, skąd przeglądarka wie, że pole tekstowe jest zarejestrowane ze zdarzeniem TextChanged po stronie serwera?

text: Kiedy oceniam zdarzenia kontroli asp.net, nie jestem w stanie określić, w jaki sposób przeglądarka jest świadoma, że pole tekstowe asp.net jest subskrybowane do zdarzenia textchanged po stronie serwera, czy nie. Kiedy patrzę na kod HTML wygenerowany przez serwer, nie ma informacji o zdarzeniu TextChanged. **Deklaracja ASP.Net** <asp:TextBox ID="txtInput" runat="server" OnTextChanged="txtInput_OnTextChanged" AutoPostBack="false" /> **Kod HTML wygenerowany przez serwer** <input name="ctl00$MainContent $txtInput" type="text" value="SivaText Zmienione Zmienione tekstowe.V Zmienione.V Zmienione" id="MainContent_txtInput">


title: Jak być lepszym w recenzowaniu kodu?

text: Po pierwsze mocno wierzę w proces przeglądu kodu i zawsze chcę, aby ktoś inny zrecenzował mój kod. Moje pytanie naprawdę koncentruje się na tym, jak mogę lepiej wykonać przegląd kodu dla kogoś innego? Wiem, że aby wykonać przegląd kodu, trzeba mieć wiedzę o tym, jak działa istniejący kod i jaki jest lokalny standard, co czuję, że znam bardzo dobrze. Mimo to czuję, że nigdy nie robię wystarczająco dobrego przeglądu kodu dla innych ludzi. Wiem też, że niektórzy ludzie wydają się lepiej wykonywać kod recenzji pracy niż inni, więc zastanawiam się, dla tych, którzy są świetnymi recenzentami kodu, jakich technik używasz?


title: Obsługa wielu klientów za pomocą jednej aplikacji

text: Tworzymy aplikację internetową ERP z wykorzystaniem frameworka Vaadin, gdzie każda z potencjalnych firm-klientów będzie miała własne przechowywanie danych i plików. Obecna implementacja pozwala na posiadanie tylko jednej firmy klienckiej na instancję aplikacji, co w konsekwencji wymaga oddzielnego schematu bazy danych i przechowywania plików. Niektórzy klienci mogą chcieć konkretnych dostosowań w oparciu o ich potrzeby. Posiadanie kilku klientów nie sprawia większych problemów, ale jeśli liczba klientów będzie rosła, to utrzymanie kilkudziesięciu instancji aplikacji będzie nie lada wyzwaniem. Dochodzimy do punktu, w którym musimy wybrać jedną z tych opcji: 1. Poprawić naszą architekturę, aby umożliwić wszystkim firmom klienckim zarządzanie swoimi danymi na jednej instancji aplikacji i ograniczyć osobiste dostosowania do aplikacji; 2. Trzymaj się obecnej implementacji i po prostu zwiększaj liczbę uruchomionych instancji aplikacji na serwerze. Która z tych opcji jest uważana za lepszą praktykę i ułatwia utrzymanie systemu? Czy istnieje inne rozwiązanie tego rodzaju sytuacji? Edycja: Aplikacja jest obecnie w fazie rozwoju. Serwer ze wszystkimi potencjalnymi instancjami aplikacji będzie prowadzony samodzielnie. Każda instancja zostanie wdrożona w pakiecie WAR za pośrednictwem serwera Apache Tomcat.


title: Jakie technologie są używane do interakcji aplikacji na Androida/iPhone'a z bazą danych?

text: Czy aplikacje na Androida/iPhone'a używają AJAX do interakcji z backendem? Jeśli tak, czy jest to powszechne? Lub czy większość aplikacji używa innej metody pobierania informacji z bazy danych. A jeśli tak, jakie są inne metody? Czy języki po stronie serwera są kiedykolwiek zaangażowane, a jeśli tak, czy jest to bardziej powszechne w przypadku tworzenia aplikacji?


title: Co się dzieje, aby uzyskać informacje o bazie danych po stronie serwera za pomocą AJAX?

text: Jestem nieco zdezorientowany, jak działa AJAX. Głównie rozumiem model PHP/MySQL pobierania informacji z bazy danych dla użytkownika, ale jak to robi AJAX? Z tego, co rozumiem, silnik AJAX wysyła żądanie HTTP do zaplecza, które robi trochę magii i zwraca dane XML do silnika AJAX, który tłumaczy je na HTML + CSS, aby użytkownik mógł je zobaczyć, ale co się dzieje, gdy wysyła pierwsze żądanie HTTP do backend? Czy język po stronie serwera działa jako pośrednik w pobieraniu danych z bazy danych do końca procesu? Poza tym, czy HTML5 ma dodatkowy wpływ na korzystanie z AJAX?


title: Znaczące zwięzłe wskazówki dotyczące nazewnictwa metod

text: Niedawno zacząłem wypuszczać projekt open source, będąc jedynym użytkownikiem biblioteki, nie dbałem o nazwy, ale wiem, że chcę przypisać sprytne nazwy do każdej metody, aby ułatwić naukę, ale muszę też używać zwięzłe nazwy, dzięki czemu można je również łatwo napisać. Myślałem o kilku wskazówkach dotyczących nazewnictwa, znam wiele wskazówek, które dotyczą tylko wielkości liter lub prostych notatek. Tutaj szukam wskazówek dotyczących sensownego, ale jednocześnie zwięzłego nazewnictwa. Na przykład może to być część wytycznych, którymi się opiekuję: * Użyj Dodaj, gdy istniejący element ma zostać dodany do celu, Użyj Utwórz, gdy nowy element jest tworzony i dodawany do celu. * Użyj Usuń, gdy istniejący element ma zostać usunięty z celu, Użyj usuwania, gdy element ma zostać trwale usunięty. * Sparuj metody AddXXX z metodami RemoveXXX i Sparuj metody CreateXXX z metodami DeleteXXX, ale nie mieszaj ich. Jak pokazują powyższe przykłady, chciałbym znaleźć materiały online, które pomogą mi w metodach nazewnictwa i innych elementach zgodnych z angielską gramatyką i znaczeniami słów. Powyższe wskazówki mogą być intuicyjne dla rodzimych użytkowników języka angielskiego, ale dla mnie, że angielski jest moim drugim językiem, muszę o tym mówić.


title: WCF a Web API, głębsze szczegóły?

text: **Zanim będę kontynuował, chcę tylko wspomnieć, że prowadziłem intensywne badania i poszukiwania na ten temat, ale potrzebuję opinii osób, które pracowały/lub mają praktyczną wiedzę na ten temat.** Obecnie przyglądamy się opracowanie interfejsu API, aby klienci mogli z niego korzystać. Zdecydowanie jesteśmy nastawieni na REST w przeciwieństwie do SOAP, ale nadal nie jestem pewien, na czym dokładnie polega różnica, jeśli przejdziesz do mikroskopijnych szczegółów. Patrząc na msdn (Wybór technologii do użycia), poniższy link: http://msdn.microsoft.com/en-us/library/jj823172.aspx Różnice są jasne. Jednak pierwszy punkt stanowi dla **WCF** : umożliwia tworzenie usług obsługujących wiele protokołów transportowych (HTTP, TCP, UDP i transporty niestandardowe) i umożliwia przełączanie między nimi. Dla **ASP.NET Web Api**: tylko HTTP. Pierwszorzędny model programowania dla HTTP. Bardziej odpowiedni do dostępu z różnych przeglądarek, urządzeń mobilnych itp., co umożliwia szeroki zasięg. Tak więc oba obsługują protokół HTTP, ale WCF obsługuje dodatkowo więcej protokołów. Co sprawia, że ASP.NET Web API jest bardziej odpowiednie, cytuję: „Bardziej odpowiedni dla dostępu z różnych przeglądarek, urządzeń mobilnych itp., co umożliwia szeroki zasięg”. jeśli oba obsługują HTTP? Do tej pory w dużym stopniu polegaliśmy na korzystaniu z komputera. Do czego dochodzę, a na koniec moje pytanie: Planujemy przejść na urządzenia mobilne i przenieść dużo więcej na wiele urządzeń, przeglądarek itp. Ale po prostu nie chciałbym korzystać z usługi na podstawie fragmentu tekstu mówiącego „Web API” jest bardziej odpowiednie? CZY jest bardziej wydajny, mniej zasobochłonny itp.? W odniesieniu do przyszłej korekty? Czy byłoby lepiej z WEB API i dlaczego? Na koniec mamy już istniejące usługi SOAP, wszystko, co mamy, jest zbudowane w SOAP. Nie wahaj się wchodzić w szczegóły, nie jestem doświadczonym programistą, tylko próbuję wnieść swój wkład w ten projekt. Tylko kilka ostatnich wymagań: 1) Planujemy wykorzystać JSON. 2) Jesteśmy ograniczeni do .NET 3.5/4. 3) Musi być ODPOCZYNEK.


title: operacje logiczne w C przy użyciu pól bitowych

text: Próbuję zaimplementować typ danych logicznych w C. Zasadniczo pracuję z zestawami. Poniższy kod może być użyty do uzyskania dostępu do każdego bitu, ale nie jestem pewien, czy mogę reprezentować zestawy za pomocą tej metody. Czy ktoś może mi to wyjaśnić? struct SET { unsigned int b0 :1; // bit 0 pojedynczy bit bez znaku int b1 :1; // bit 1 pojedynczy bit bez znaku int b2 :1; unsigned int b3 :1; }; Mogę zdefiniować dwie struktury s1 i s2.. i będę mógł uzyskać dostęp do każdego bitu tych struktur (traktowanych jako ciągi logiczne). Będę musiał wykonać określone operacje, takie jak UNION, INTERSECTION i CZŁONKOSTWO. Czy to w ogóle możliwe w C? Uwaga: nie mogę używać Javy, tylko C.


title: Czy ma sens wdrażanie OAuth w systemie firm zewnętrznych?

text: Mam wrażenie, że OAuth służy do uwierzytelniania między trzema stronami. Czy ma sens implementacja OAuth w kontekście, w którym jest tylko klient i serwer? Mamy serwer i klienta (HTML/javascript). Obecnie uwierzytelniamy się za pomocą zwykłej metody „prześlij dane uwierzytelniające do serwera, pobierz plik cookie, użyj pliku cookie do uwierzytelnienia wszystkich kolejnych żądań”. Czy wdrożenie OAuth będzie korzystne w tej sytuacji?


title: Czy uważasz, że mainframe jest częścią dużych wdrożeń aplikacji?

text: Czy konfigurując środowisko systemowe pod kątem wdrożeń dużych i/lub wielu aplikacji, bierzesz pod uwagę komputer mainframe? Jeśli nie, dlaczego nie? Jeśli tak, jakie czynniki bierzesz pod uwagę. Jeśli przyjrzysz się _prawdziwemu_ całkowitemu kosztowi posiadania (TCO) na duże środowiska ERP i/lub skonsolidowane aplikacje, mainframe jest w rzeczywistości całkiem opłacalny. Moje własne konsultacje obejmowały zalecenia dotyczące systemów typu scale-up/mainframe/średniej wielkości w odniesieniu do pewnych specyficznych potrzeb. Szczerze mówiąc, nigdy nie miałem klienta, który by przyjął tę rekomendację, raczej domyślnie korzystałem z niezliczonych skalowalnych maszyn wirtualnych na pudełkach Intela (w nietrywialnych kosztach), a mimo to do dziś mam problemy z zarządzaniem systemem i wydajnością. Ciekawe, jakie masz na to zdanie. Musimy pamiętać, że wirtualne maszyny, którymi dziś zarządzamy (i najwyraźniej uwielbiamy je w działach IT), od dziesięcioleci są wykonywane na komputerach mainframe. Większość sklepów średniej wielkości i mainframe'ów ma niewielką część osób wspierających, które zarządzają większymi i bardziej złożonymi aplikacjami. Twoje myśli doceniły.


title: Czy bazy danych NoSQL zastąpią relacyjne bazy danych? Czy SQL zniknie?

text: Czy ktoś ma doświadczenie z bazami danych NoSQL (CouchDB, MongoDB, Google BigTable, Dynamo, Cassandra...)? Jak było? Czy to była rzeczywista produkcja/doświadczenie w pracy? Co się stanie z relacyjnymi bazami danych za 5 lat? 10 lat?


title: Kiedy należy korzystać z biblioteki korporacyjnej firmy Microsoft (EntLib)?

text: Nie jestem do końca pewien, kiedy korzystać z Biblioteki Przedsiębiorczości, a kiedy nie... i to sprawia, że w ogóle się jej nie uczę. Czuję, że mam wystarczający powód, aby **zacząć się uczyć** i być może któregoś dnia **użyję** tego. Czy są chwile, kiedy powinienem używać EntLib? Kiedy nie powinienem go używać?


title: Czy obiekty zostały dostarczone pod kątem ponownego wykorzystania kodu?

text: Często słyszałem, jak mówiono, że obiekty nie zostały dostarczone pod względem ponownego wykorzystania kodu. Czy sie zgadzasz? Jeśli uważasz, że nie, dlaczego nie?


title: Jak wybrać nową technologię do opanowania, aby nie stracić poczucia rzeczywistości i praktyczności?

text: Jak wybrać właściwy kolejny krok w nauce programowania i opanowaniu nowych technologii? Mam doświadczenie z aplikacjami WinForms w C# .NET. Kolejnym dobrym obszarem do poszerzania wiedzy jest ASP.NET. Język, który już znam, C#, więc myślę, że teraz bardziej chodzi o opanowanie nowych technologii. Również interesuję się WPF. Być może najlepiej jest pracować jednocześnie na ASP.NET i WPF. Czasami problem jest, gdy nie mamy motywacji, ale też wiadomo, że stajemy się problemem, gdy chcemy za dużo :) Jak wybrać nową technologię do opanowania i nie stracić poczucia rzeczywistości i praktyczności?


title: Implementacja interfejsu przełączania za pomocą konfiguracji

text: Chcemy, aby ta sama usługa podstawowa mogła zostać w pełni zaimplementowana lub, jako inna opcja, być serwerem proxy w stosunku do starszego systemu klienta (na przykład za pośrednictwem WSDL). W ten sposób mamy zarówno implementację (proxy & full), jak i przełączamy, której użyć w konfiguracji aplikacji. Krótko mówiąc, kilka pożądanych funkcji: * Dwie różne implementacje (proxy, pełna) zamiast jednej implementacji z przełącznikiem w środku * Implementacja przełącznika przy użyciu konfiguracji: wstrzykiwanie zależności? odbicie? * Nice-to-have: pakiet dostarczony do klienta nie musi się zmieniać w zależności od wyboru między proxy lub pełnym * Nice-to-have: Klient może opracować własną implementację interfejsu podstawowego i skonfigurować aplikację do użycia ten jeden Na tym tle pojawia się pytanie: Jakie mamy alternatywy, aby wybrać jedną lub drugą implementację interfejsu zmieniającego konfigurację? Dziękuję


title: jak stworzyć model danych dla następującego problemu

text: Jak radzić sobie z przestrzenią 2D i 3D w danych? powiedzmy, że pracujesz nad problemem z siecią energetyczną. Musisz reprezentować Wieże; linie przesyłowe; transformatory i wszystko inne w przestrzeni 2D. Jak zaprojektowałbyś model danych dla tej przestrzeni 2D? Mogę użyć wieży klasy { int x_cor; int y_cor; string power_properties } Ale jak reprezentować ... powiedzmy mapę samej sieci energetycznej? czy istnieje jakieś standardowe rozwiązanie tego problemu? jakiś logiczny szablon, który ludzie tu stosują? chcę móc podzielić tę mapę według kształtu lub obszaru itp.; powinienem być w stanie komponować małe mapy, aby zrobić dużą. Więc jakie jest tutaj rozwiązanie? Nawiasem mówiąc, nie pracuję nad projektem sieci energetycznej (LOL), więc proszę zachować ogólne odpowiedzi. non-noobs, pomóż mi ulepszyć pytanie.


title: Możliwe problemy w zespole programistów

text: Jestem programistą "jeden zespół człowiek" ASP.NET C#, SQL, HTML, JQuery, który chce podzielić obciążenie z dwoma innymi facetami. Ponieważ nigdy nie myślałem o możliwym problemie w zespole programistów, tak naprawdę kilka przyszło mi do głowy. delegowanie zadań (kto pracuje nad tym, co też jest bardzo związane z bezpieczeństwem). Odkryłem, że usługa Team Foundation Service może być pomocna w rozwiązaniu tego problemu i zaczęłam o tym czytać. Czy są jakieś alternatywy? bezpieczeństwo (chcesz teraz, aby oryginalny kod był ponownie używany poza projektem) Jak uniemożliwić programistom dostęp do wszystkich części kodu i jak uniemożliwić im używanie tego kodu poza projektem? Czy zaufanie lub kontrakt to jedyny sposób?


title: Czy istnieją jakieś przeszkody techniczne w implementacji składni `function*()``

text: W Pythonie mamy `yield`, który jest bardzo podobny do tego, który jest proponowany w ES6 (w rzeczywistości współprogramy pythoniczne były głównym źródłem inspiracji do implementacji współprogramów, zastanawiam się, jakie są powody wyboru oddzielnego ` składnia function* ()` dla generatorów w porównaniu do definiowania "zwykłych" funkcji z yeildami - tak jak w pythonie nawiasem mówiąc? Mówię stricte o kwestiach technicznych i osobliwościach. Dlaczego zdecydowano, że osobny formularz będzie bardziej właściwy?


title: Jak prezentujesz oprogramowanie bez interfejsu użytkownika w przeglądzie sprintu?

text: Zajmujemy się zwinnym tworzeniem oprogramowania, w zasadzie za Scrumem. Próbujemy robić przeglądy sprintów, ale jest to trudne. Nasze oprogramowanie dużo przetwarza dane, a historie często dotyczą zmieniania różnych zasad wokół tego. Jakie są opcje demonstrowania zmian, które wystąpiły w sprincie, gdy nie ma interfejsu użytkownika ani widocznej zmiany przepływu pracy, ale zamiast tego zmiana jest subtelną regułą biznesową w zadaniu przetwarzania, która może zająć 10 minut lub nawet kilka godzin ?


title: Jak właściwie chronić Product Ownera od zewnątrz?

text: **Aktualizacja:** Jesteśmy bardzo małym zespołem (3 osoby) i dlatego ja (Scrum Master) i Product Owner jesteśmy również programistami zajmującymi się kodowaniem. Jesteśmy świadomi tej sytuacji i aktywnie staramy się pozyskać nowe talenty. Ale to trudne! * * * Tymczasem... musimy się dostosować... więc moje pytanie: Właściciel produktu skarży się na zbyt duży hałas z zewnątrz (głównie prośby interesariuszy o funkcje) i nie może skupić się na realizacji sprintu. Zgadzamy się, że powinniśmy starać się edukować ludzi na temat naszych konsekwencji dla procesów (czas trwania sprintu i zaległości produktowe), aby zmniejszyć hałas. Ale jako Scrum Master, jak mam chronić PO z zewnątrz? Czy nie powinien być w kontakcie z zarządem i biznesem? Ponadto, jeśli ludzie z zewnątrz nie chcą tracić zbyt wiele czasu na naukę Agile, jaki jest najlepszy sposób na ich edukację?


title: Jak poradzić sobie z problemem (kompilacji) dużej bazy kodu?

text: Chociaż potrafię programować, nie mam jeszcze doświadczenia w pracy nad dużymi projektami. To, co do tej pory robiłem, to albo kodowanie małych programów, które są kompilowane w ciągu kilku sekund (różne ćwiczenia c/c++, takie jak algorytmy, zasady programowania, pomysły, paradygmaty lub po prostu wypróbowywanie api...) lub praca nad mniejszymi projektami, które były wykonane w językach skryptowych (python, php, js), w których nie jest wymagana kompilacja. Chodzi o to, że kiedy koduję w języku skryptowym, kiedy chcę spróbować, czy coś działa - po prostu uruchamiam skrypt i widzę, co się dzieje. Jeśli coś nie działa, mogę po prostu zmienić kod i wypróbować go ponownie, uruchamiając skrypt ponownie i rób to dalej, aż uzyskam pożądany wynik. Chodzi mi o to, że nie musisz czekać na wszystko do skompilowania i dzięki temu dość łatwo jest wziąć dużą bazę kodu, zmodyfikować ją, dodać coś do niej lub po prostu się nią bawić - zmiany widać od razu. Jako przykład wezmę Wordpress. Bardzo łatwo jest spróbować i wymyślić, jak utworzyć do niego wtyczkę. Najpierw zaczynasz od stworzenia prostej wtyczki "Hello World", potem tworzysz prosty interfejs do panelu administracyjnego, aby zapoznać się z API, potem budujesz go i robisz coś bardziej złożonego, w międzyczasie zmieniając wygląd kilku razy .. Pomysł konieczności ponownego kompilowania czegoś tak dużego jak WP w kółko, po każdej drobnej zmianie, aby spróbować "jeśli to działa" i "jak to działa/czuje się", wydaje się po prostu nieefektywny, powolny i błędny. Jak mogę to zrobić z projektem napisanym w skompilowanym języku? Chciałbym przyczynić się do niektórych projektów open-source i to pytanie ciągle mnie wkurza. Sytuacja prawdopodobnie różni się w zależności od projektu, gdzie niektóre z nich, które wcześniej pomyślano mądrze, będą w pewien sposób „modułowe”, podczas gdy inne będą po prostu jednym wielkim blobem, który trzeba będzie ponownie kompilować. Chciałbym dowiedzieć się więcej o tym, jak to się robi właściwie. Jakie są wspólne praktyki, podejścia i projekty (wzory?), aby sobie z tym poradzić? Jak ta "modułowość" jest nazywana w świecie programistów i po co powinienem google, aby dowiedzieć się więcej na ten temat? Czy często projekty wyrastają z pierwszych myślowych proporcji, które po jakimś czasie stają się kłopotliwe? Czy jest jakiś sposób na uniknięcie **długiego kompilowania** niezbyt dobrze zaprojektowanych projektów? Sposób na ich modularyzację (może z wyłączeniem nieistotnych części programu podczas tworzenia (jakieś inne pomysły?))? Dziękuję.


title: W jaki sposób można zmodernizować dużą, opartą na Fortranie bazę kodów do przetwarzania liczb?

text: Znajomy ze środowiska akademickiego poprosił mnie o radę (jestem programistą aplikacji biznesowych C#). Ma przestarzałą bazę kodów, którą napisał w Fortranie w dziedzinie obrazowania medycznego. Wykonuje ogromną ilość obliczeń liczbowych za pomocą wektorów. Używa klastra (30 rdzeni) i teraz poszedł w kierunku pojedynczej stacji roboczej z 500 procesorami graficznymi. Jednak gdzie dalej iść z bazą kodu, aby: * Inni ludzie mogli utrzymywać ją przez następny 10-letni cykl * Szybciej ulepszać oprogramowanie * Może działać na różnych infrastrukturach bez ponownej kompilacji Po kilku badaniach ode mnie (to bardzo interesujący obszar) trochę Opcje to: * Użyj Pythona i CUDA z Nvidii * Przepisz w funkcjonalnym języku. Na przykład F# lub Haskell * Przejdź do chmury i użyj czegoś takiego jak Hadoop i Java * Learn C Jakie masz z tym doświadczenia? Na co powinien patrzeć mój przyjaciel, aby zmodernizować swoją bazę kodu? AKTUALIZACJA: Dziękuję @Mark i wszystkim, którzy odpowiedzieli. Powodem, dla którego mój przyjaciel zadaje to pytanie, jest to, że jest to idealny moment w cyklu życia projektu na dokonanie przeglądu. Przyspieszenie asystentów badawczych w Fortranie wymaga czasu (lubię C#, a zwłaszcza narzędzia i nie wyobrażam sobie powrotu do starszych języków!). nowszy. Być może Python jako taki wydaje się zdobywać silną pozycję w środowisku akademickim jako język programowania ogólnego przeznaczenia, który jest dość łatwy do opanowania. Zobacz _Medical Imaging_ i faceta, który napisał opakowanie Fortran dla CUDA, _Czy mogę legalnie opublikować moje opakowania Fortran 90 w bibliotece CUFFT firmy Nvidias (z pakietu CUDA SDK)?_.


title: Potrzebuję porady, jaką trasę powinienem wybrać, aby przenieść aplikację z Androida na iOS

text: Opracowałem tę aplikację na Androida i chcę ją przenieść na iOS. Moje pytania brzmią: 1) Planuję sfinansować rozwój iOS z pieniędzy zarobionych na sprzedaży Androida, które w tej chwili wynoszą około 200 USD. Czy rozsądne byłoby wykonanie projektu za tę kwotę, nawet jeśli jest on zlecony firmie elance lub odesk itp.? 2) Słyszałem, że jakość kodu dla zleconych projektów iOS jest zła, nie chcę żadnych wycieków pamięci i awarii z powodu przepełnień itp. 3) Obecnie nie mam pracy na pełny etat, więc technicznie mogę sam wykonać projekt, jednak nie masz komputera Apple PC ani iPhone'a (tak naprawdę nie chcę ich też mieć). Znam C całkiem dobrze, ale tak naprawdę nie wydałem dużego projektu C, który musi być w 100% stabilny. Ile godzin na naukę iOs i wykonanie portu? I czy warto byłoby poświęcić swój czas, biorąc pod uwagę, że jeśli mi się to spodoba, to mogę zająć się tym na pełny etat. 4) Jakie byłoby zapotrzebowanie na kogoś, kto potrafi robić Androida i iOS? Dziękuję


title: Szyfrowanie/ochrona danych — gdzie znaleźć informacje o najlepszych praktykach wysokiego poziomu

text: Czuję, że nikt w grupie, w której pracuję, w tym ja sam, _naprawdę_ nie zbiera szyfrowania i bezpieczeństwa, ani powodów podejmowania pewnych decyzji. Na przykład ostatnio rozmawialiśmy na temat szyfrowania danych, które obsługujemy dla innej grupy, z którą pracujemy - dane trafiają do bazy danych, która znajduje się w naszej bezpiecznej sieci firmowej (pracuję w małej grupie w dużej firmie programistycznej, więc integralność sieci korporacyjnej jest bardzo wysoka), podobnie jak wszystko inne, z czym mamy do czynienia. Oczywiście standardowe wytyczne wymagają „szyfrowania” tych danych. Oczywiście może to oznaczać wiele rzeczy - połączenia IPSec/szyfrowane, zaszyfrowane udziały plików, szyfrowanie zaimplementowane w bazie danych (cała baza danych lub kolumna), szyfrowanie rzeczywistych bitów w pliku itp. - a niektóre osoby w grupie są objęte wrażenie, że jedynym rodzajem szyfrowania, który naprawdę się liczy, jest bezpośrednie szyfrowanie przechowywanych bitów, argumentem jest to, że wszystko inne jest zbyt łatwe do obejścia - „jeśli baza danych jest zaszyfrowana, nadal mógłbym się do niej zalogować i zobaczyć tam dane; jeśli udział pliku jest zaszyfrowany, tak długo, jak mam uprawnienia do folderu, mogę po prostu pobrać plik; ale jeśli bity są bezpośrednio zaszyfrowane, nie będę mógł go odczytać”. Mój instynkt podpowiada, że to stwierdzenie opiera się na ograniczonym zrozumieniu: widzą, jak logują się do SQL Server Management Studio, aby zobaczyć dane, ale ponieważ nie wiedzieliby, jak pobrać strumień lub tablicę zaszyfrowanych danych i użyć certyfikatu, który prawdopodobnie mieć dostęp do odszyfrowania go, prawdopodobnie jest bezpieczny. Czy mają rację? Czy mam rację? Wydaje się, że nikt tak naprawdę nie wie, więc decyzje podejmowane są na podstawie opinii najgłośniejszej lub najlepiej opłacanej osoby. W każdym razie, to tylko rozszerzony przykład tego, o czym mówię. Czuję, że to ślepiec prowadzi ślepego tutaj, podejmując decyzje oparte na ograniczonym zrozumieniu, co jest frustrujące. Nie jestem ekspertem od technicznych bitów szyfrowania, ale wiem, jak używać standardowych bibliotek do szyfrowania strumieni i tablic i tym podobnych - tam, gdzie naprawdę potrzebuję więcej wiedzy, jest projektowanie bezpieczeństwa danych i informacji, na których mogę oprzeć decyzje, takie jak nad. Gdzie mogę przeczytać o tego rodzaju rzeczach?


title: Dlaczego nie używamy wykrywania przeglądarki i CSS specyficznego dla platformy?

text: W dzisiejszych czasach powszechnym zjawiskiem jest tworzenie strony internetowej na przeglądarkę, a następnie odpowiednich aplikacji na telefony z Androidem, iPhone'y, tablety i tak dalej. Skoro wszystkie platformy są wyposażone w przeglądarkę, dlaczego firmy nie używają CSS do ich obsługi? Z pewnością możemy wykryć na podstawie żądania, która przeglądarka została użyta i z jakiej platformy nadeszło żądanie. Czytając te wartości, dlaczego po prostu nie zaimplementujemy odpowiedniego CSS dla różnych platform. Podobnie jak w przypadku IE, Chrome i Safari. W ten sposób możemy wykorzystać możliwości przeglądarki platform i nie musimy tworzyć kolejnych aplikacji na platformę.


title: Dlaczego wzorzec repozytorium jest potrzebny w NHibernate?

text: Czytam oficjalną aplikację opartą na Twoim pierwszym NHibernate. Chociaż samouczek jest dobry i łatwy do naśladowania, zastanawiam się, dlaczego używany jest wzorzec Repozytorium. W różnych metodach `Add`, `Update`, `Remove` w implementacji `ProductRepository` kod jest prawie identyczny - wszystkie używają transakcji, a różnica polega na "mięsie", tj. wywołaniu `session.Save` w metodzie `Add`, `session.Delete` w metodzie `remove`. ( _Strona nie zawiera kotwic HTML, ale możesz przeszukać stronę w celu znalezienia odpowiedniego kodu, takiego jak `public void Usuń`, `public void Dodaj`_) Ten kod po prostu „wydaje się błędny”. Dlaczego autor używa wzorca Repozytorium - czy jest to tylko demonstracja użycia NHibernate, czy jest to wymagane lub z innego powodu? Ps. Moje tło jest z Ruby on Rails przy użyciu ActiveRecord, więc próbuję zrozumieć, jak działa/jest używany NHibernate.


title: Najlepsze projekty ilustrujące mocne strony języków, w których są realizowane?

text: Szukam Who's Who lista projektów (open source), które naprawdę ilustrują siłę języków, w których są napisane. Idealnie projekt powinien wykorzystywać niektóre cechy danego języka, które w innym przypadku byłyby niezgrabne lub trudne do wykonania w innym języku.


title: Scrum i Scrum Master w globalnym zespole

text: Pracuję w firmie, która działa w modelu wykorzystania jednego programisty jako lidera technicznego (ja), z koordynatorem/deweloperem onshore, który koordynuje zespół offshore, a w zespole offshore jest koordynator offshore . Brzmi dziwacznie, ale w zasadzie działa. Reszta deweloperów jest na morzu. Tak się składa, że pracuję teraz nad projektem, który ma dodatkowego dewelopera na lądzie. Moje pytanie brzmi, czy uważasz, że mogę tutaj użyć metodologii Agile w luźnym sensie (jesteśmy firmą typu wodospad, ale może mógłbym robić scrum, sprinty, planować pokera itp.)? Ponadto, czy myślisz, że przydałby się nam scrum master? A gdybym nie miał dodatkowego programisty onshore (więc w zasadzie byłbym wtedy jednym z dwóch programistów onshore i żaden z nas nie mógłby być w projekcie na pełny etat)? A co ze mną, że zrezygnuję z kodowania i zostanę scrum masterem i liderem technologicznym? Zobacz mój komentarz poniżej dla moich obowiązków teraz.


title: Czy elastyczność i niespójność, niebezpieczeństwo nakładają się na siebie?

text: Ostatnio robiłem badania na temat różnych języków programowania. Interesowało mnie zwłaszcza poznanie unikalnych cech popularnych języków programowania i sytuacji, w których te zasoby błyszczą. Uważam, że może to pomóc mi zdecydować, jakiego języka użyć w zależności od problemu do rozwiązania. Zauważyłem, że wiele języków oferujących wysoki poziom elastyczności ("może dostosowywać się do nowych, różnych lub zmieniających się wymagań") jest również niespójnych, na przykład w JavaScript (tylko przykład, bez obrazy dla ludzi js), argumenty funkcji są manipulowane albo przez nazwanie ich w deklaracji funkcji (podejście klasyczne): function max(x,y) albo przez użycie zmiennej `arguments`: function max() { if (arguments[0] < argumenty[1]) return arguments[ 1]; w przeciwnym razie zwróć argumenty[0]; } c = max(1,2); Zmienna arguments jest użyteczna w wielu sytuacjach, takich jak przeciążanie funkcji, jednak niweczy cel prototypowania funkcji (czyli dostarczenie informacji o funkcji), a widziałem wiele przykładów JavaScript, w których zmienna argument jest używana pomimo braku tego potrzebujesz, co wyraźnie utrudnia zrozumienie i debugowanie kodu. Wiem, że zależy to w dużej mierze od użytkowników języka, ale zwykle kod napisany w języku oferującym dużą elastyczność jest niebezpieczny, trudniejszy do zrozumienia, optymalizacji i debugowania. Czy elastyczność i niespójność nakładają się na siebie? Jak dokonują wyboru projektanci języków? Edycja: Nie krytykuję tu żadnego konkretnego języka, raczej skupiam się na relacji między Elastycznością, Bezpieczeństwem, Spójnością języków programowania.


title: Jak zrobić licencję GPL z bardziej surowymi karami?

text: Rozważam otwarte pozyskiwanie oprogramowania, ale kiedy czytam odpowiedzi na te pytania, wydaje mi się, że kara za zignorowanie licencji GPL jest raczej niewielka w porównaniu z kosztami strony pozwanej w celu udokumentowania, że druga strona dołączyła kod GPL w ich zastrzeżonym kodzie oraz koszty procesu. Dlatego chciałbym wiedzieć, czy istnieje sposób na zawarcie licencji lub jakiejś umowy przed uzyskaniem dostępu do kodu źródłowego, co jest bardziej rygorystyczne niż GPL. To, co chcę osiągnąć, to to, że firma zawierająca kod GPL w swoim zastrzeżonym kodzie musi na licencji GPL cały swój kod, a nie tylko przepisać kod GPL. czy to możliwe?


title: Czym dokładnie jest „Web API” w ASP.Net MVC4?

text: Wiem, czym jest Web API. Napisałem API w wielu językach (w tym w MVC3). Mam również dobre praktyki w ASP.Net. Właśnie odkryłem, że MVC4 ma "Web API" i bez przechodzenia przez przykłady wideo nie mogę znaleźć dobrego wyjaśnienia, czym dokładnie JEST. Z moich wcześniejszych doświadczeń wynika, że technologie Microsoft (zwłaszcza ASP.Net) mają tendencję do przyjmowania prostej koncepcji i owijania jej bezużytecznymi narzutami, które mają sprawić, że wszystko będzie „łatwiejsze”. Czy ktoś może mi wyjaśnić, czym dokładnie jest Web API w MVC4? Po co mi to? Dlaczego nie mogę po prostu napisać własnego API?


title: Jaka użyteczna ekspresja będzie niemożliwa w języku, w którym wyrażenie nie jest stwierdzeniem?

text: Rozważam napisanie języka programowania. Większość gramatyk definiuje wyrażenia jako rodzaj wypowiedzi. Ale tak naprawdę nie mogę wymyślić ani jednego przykładu żadnego użytecznego wyrażenia, które mogłoby uchodzić za stwierdzenie. Zobacz http://stackoverflow.com/questions/19132/expression-versus-statement, aby zapoznać się z łatwą definicją wyrażenia a instrukcja. EDYCJA: Dlaczego tak wiele gramatyk dokonuje rozróżnienia między wyrażeniem a stmt, gdy jak zauważono w odpowiedziach, nie ma to sensu.


title: Wybór restrykcyjnej licencji na pracę open source

text: Jeśli umieszczałeś jakąś swoją pracę online (powiedzmy, projekt badawczy wciąż w fazie rozwoju lub coś podobnego) i **_musiała_** być udostępniona publicznie, ale żałowałeś, że jeśli ktoś z niej korzysta, musi to potwierdzić oryginalny autor (tj. nie chcesz, aby ktokolwiek pchał twoje badania jako własne), jaka byłaby dobra licencja do wykorzystania? Innymi słowy, chcesz chronić swoją własną pracę, która bez pewnych zasad nigdy nie zostałaby upubliczniona.


title: Stopnie naukowe uzupełniające programowanie

text: Mam nadzieję, że to nie zostanie zamknięte, zwłaszcza, że myślę, że wiele osób może skorzystać na tym pytaniu, które są na podobnych stanowiskach do mojej. Programuję od dłuższego czasu (bo miałam około 13/14 lat, teraz mam 22 lata) i teraz jestem na tym etapie życia, kiedy zastanawiam się czy i co studiować. Ponieważ programuję od dłuższego czasu, jestem prawie pewien, że nie będę studiował informatyki/inżynierii oprogramowania, ponieważ myślę, że wiele materiałów będzie dotyczyło rzeczy, które już znam. Nawet jeśli przyniesie mi to korzyść, myślę, że stracę dużo motywacji, ponieważ będę się nudzić na zajęciach i zawsze będę myślał, że „marnuję czas” lub „tak naprawdę nie wykorzystam tego materiału który jest nauczany w tej klasie”. Interesuje mnie nauka, zwłaszcza fizyka, ale interesuje mnie również chemia/biologia. możliwe jest również studiowanie dwóch razem, jak licencjat z fizyki i chemii lub chemii i biologii, które są oferowane na uniwersytecie, na który chcę iść. Więc pytanie brzmi, jaki stopień naukowy może przynieść mi najwięcej korzyści w karierze programisty? Czy istnieją dziedziny obejmujące inżynierię oprogramowania oraz fizykę/chemię/biologię i na które istnieje duże zapotrzebowanie? czy oczekuje się od nich dużego popytu? Czy znasz jakieś konkretne kariery, które obejmują inżynierię oprogramowania i fizykę/chemię/biologię? To nie jest pytanie, czy studiować, czy nie, jest to pytanie „jeśli zdecyduję się na studia naukowe, które nie są informatyką/inżynierią oprogramowania, ale które przyniosą mi korzyści jako programistom lub poszerzą moje możliwości , który polecacie?”


title: Dlaczego ankieterzy chcą optymalnych algorytmów

text: W rozmowie z firmą programistyczną zadali mi kilka pytań dotyczących projektowania algorytmów. Będąc silnym w matematyce, udało mi się rozwiązać go matematycznie, ale za każdym razem, gdy proponowałem mój algorytm, mieli wątpliwości co do jego działania i muszę to udowodnić na przykładach. Nie dostałem zaproszenia do dalszych rund, uważam, że moje rozwiązania były poprawne. Po googlowaniu znalazłem odpowiedzi na większość pytań, ale zostały one zaimplementowane w inny sposób. Dlaczego ankieterzy szukają optymalnych odpowiedzi, a nie rozwiązań, które wyszły z naszych przemyśleń, a nie zapamiętywania optymalnej odpowiedzi i jej udzielania.


title: Jakie znaczenie ma testowanie jednostkowe w środowisku „często publikuj wczesne wydania”?

text: W ciągu ostatniego roku kierowałem swój zespół w kierunku rozwoju wczesnej wersji, często wydawanej (AKA: Rapid Application Development, a nie Agile). Aby uzyskać więcej informacji na temat sposobu, w jaki zamykamy kompilację, zobacz moją odpowiedź tutaj: Proste sposoby na poprawę jakości wydania w środowisku RAD Kiedy przyjęliśmy RAD, ludzie byli dość niezależni i najpierw robili testy jednostkowe; zintegrowane testy miały miejsce znacznie później. Był to dla nich naturalny proces bez większego formalnego egzekwowania. Teraz sytuacja jest zupełnie inna: 1. Cała platforma jest dobrze zintegrowana z ustalonymi kompilacjami/wydaniami działającymi po stronie klienta bez żadnych hot spotów. 2. Ciągle pojawiają się nowe wymagania dotyczące funkcjonalności, które stopniowo budujemy w miarę upływu czasu. 3. Ogólna dynamika systemu jest bardzo ważna, ponieważ podczas gdy niezależne grupy rozwojowe mogą prawidłowo postępować zgodnie z procesami, poważne awarie pojawiły się z powodu skomplikowanych, nieoczywistych okoliczności. 4. Wiele części systemu obejmuje nowe algorytmy i dane wejściowe badawcze, więc wyzwania (a co za tym idzie mechanizm testowania) nie zawsze są przewidywane prawidłowo, tak jak testowanie funkcji w dobrze zdefiniowanym oprogramowaniu. Ostatnio próbowałem uzyskać lepszy ogólny obraz, aby zobaczyć, czy potrzebujemy poprawy procesu. Kiedy usiadłem z moim zespołem, wielu z nich wzdrygnęło się: „Nie robimy już testów jednostkowych!” podczas gdy inni uważali, że nie powinniśmy zaczynać teraz, ponieważ nigdy nie będzie to skuteczne. Czy testy jednostkowe są przydatne w stosunkowo dojrzałym systemie? Czy powinniśmy przynajmniej ważyć zakres testów w zależności od dojrzałości jednostek? Czy testy jednostkowe spowolnią tempo rozwoju? Czy istnieje potrzeba oceny testów jednostkowych w inny sposób? Jakie są najlepsze praktyki testowania dojrzałej platformy w środowisku wydań-wczesne-często?


title: Aplikacja internetowa: łączenie warstwy widoku między PHP i JavaScript-AJAX

text:
Zajmuję się tworzeniem aplikacji internetowych przy użyciu PHP z frameworkiem CodeIgniter MVC z ogromnymi potrzebami funkcjonalności po stronie klienta w czasie rzeczywistym. Po raz pierwszy buduję aplikację kliencką na dużą skalę. Łączę więc PHP z dużą ilością modułów Javascript w jednym projekcie. Jak już wiesz, framework MVC rozdziela moduły aplikacji w Model-View-Controller. Moje obawy dotyczą warstwy Widok. Mogę wyświetlić dane we wbudowanym tagu skryptu DOM przez PHP, ładując niektóre dane do kontrolera. W przeciwnym razie mógłbym użyć AJAX do pobrania danych — traktować kontroler tylko jako usługę — i wyświetlić je za pomocą JavaScript. Oto wizualizacja, w której mogę umieścić dane bezpośrednio z kontrolera: Nazwa użytkownika <input type="text" id="nazwa użytkownika" value="<?=$userData['username'];?>" >
 Data urodzenia <input type="text" id="dob" value="<?=$userData['dob'];?>">
 Adres <input type="text" id="address" value="<?=$userData['address'];?>"> Lub przeciągnij je za pomocą AJAX: $.ajax({ type: "POST", url: config.indexURL + "user", dataType: "json", success: function(data) { $('#username').val(data.username); $('#dateOfBirth'). val(dane.dob); $('#adres').val(dane.adres); } }); Więc, które podejście jest lepsze, jeśli moja aplikacja ma złożoną funkcjonalność po stronie klienta? Z drugiej strony PHP-CI ma domyślny mechanizm umieszczania danych bezpośrednio z kontrolera, więc po co używać AJAX?


title: Przykład oszczędzającego czas użycia metaprogramowania w czasie kompilacji?

text: Strona internetowa Converge stwierdza, że: > Converge ma funkcję podobną do makr, która może osadzać języki specyficzne dla domeny > z dowolną składnią w plikach źródłowych. Najbardziej intryguje mnie możliwość tworzenia języków domenowych. Moje rozumienie przeznaczenia takich języków polega na tym, że umożliwiają one programiście zwiększenie wydajności podczas rozwiązywania problemów specyficznych dla danej domeny. Przeszedłem więc do sekcji „O”. Są tu dwa przykłady użycia, ale żaden z nich nie opisuje, w jaki sposób programista może skrócić czas programowania dzięki wykorzystaniu Converge. Czy ktoś może wymyślić przykład lub odesłać mnie do przykładu? Chętnie czytam przykłady w innych językach niż Converge.


title: Jak obsługiwać kolumny statusu w projektowaniu tabel

text: Jak obsłużyć wiele statusów dla wpisu w tabeli, na przykład tabela towaru może mieć status aktywny, nieaktywny, szybko poruszający się i/lub wsadowy. A chciałem je obsłużyć w jednej kolumnie z typem VARCHAR. Mogę też ustawić każdy z tych atrybutów jako wartość logiczną z różnymi kolumnami. Ale nie jestem pewien, do jakich konsekwencji może to prowadzić. Więc jeśli doświadczyłeś takich sytuacji, który z nich byłby najlepszym sposobem na poradzenie sobie z tym?


title: Ponawianie instrukcji lub wywołania w bloku catch — zapach kodu czy antywstrząs?

text: Zastanawiam się, jak lepiej wykonać tę operację dla dużej ilości plików. Nieco chciałbym przemyśleć ** czy ta kopia / wklej jest wystarczająca do zaakceptowania **. * spróbuj napisać plik * jeśli katalog docelowy nie istnieje, utwórz go * spróbuj ponownie zapisać plik. Jeśli coś innego wyrzuci i wyjątek, niech podniesie. spróbuj{ File.Copy("@D:\foo.txt", @"C:\mojkatalog\foo.txt"); } catch (DirectoryNotFoundException){ CreateDirectoryForFile(@"C:\mydir"); Plik.Copy("@D:\foo.txt", @"C:\mojkatalog\foo.txt"); //kopiuj wklejone z bloku try } Istnieje prostszy blok, który jest łatwiejszy do odczytania, ale prowadzi do większej liczby wywołań we/wy dysku, co jest konieczne: CreateDirectoryForFile(@"C:\mydir\foo.txt"); Plik.Copy("@D:\foo.txt", @"C:\mojkatalog\foo.txt"); Czy wzór 1 można poprawić?


title: Czy delegaci sprzeciwiają się OOP?

text: Próbuję zrozumieć OOP, dzięki czemu mogę napisać lepszy kod OOP i jedną rzeczą, która wciąż się pojawia, jest koncepcja delegata (przy użyciu platformy .NET). Mógłbym mieć przedmiot, który jest całkowicie samowystarczalny (zamknięty); nie wie nic o świecie zewnętrznym... ale potem dołączam do niego delegata. W mojej głowie jest to nadal dość dobrze rozdzielone, ponieważ delegat wie tylko, do czego ma się odnieść, ale to samo w sobie oznacza, że musi wiedzieć o czymś innym poza swoim światem! Że metoda istnieje w innej klasie! Czy mam tutaj totalne zamieszanie, czy jest to szara strefa, czy też jest to właściwie kwestia interpretacji (a jeśli tak, to przepraszam, bo to na pewno nie na temat). Moje pytanie brzmi, czy delegaci przeciwstawiają się/zamulają wzorzec OOP?


title: Debuguj wieloprocesorowość w Pythonie

text: Jakie są dobre praktyki w debugowaniu programów wieloprocesorowych w Pythonie?


title: Algorytm wykrywania gestu przekręcania pokrętła?

text: Jaka jest matematyka, aby zidentyfikować gest dla ruchu wykonanego przez dwa palce obracające pokrętło (śledzenie dwóch zestawów dla xycoords)? Czy istnieje biblioteka/api, którą każdy zna, zawierająca dobrą bibliotekę gestów dla aplikacji wielodotykowych?


title: Raw Sql vs SqlAlchemy, gdy Django ORM to za mało

text: W projekcie django, jeśli dojdzie do sytuacji, że Django ORM nie jest w stanie wykonać niektórych skomplikowanych zapytań, to są 2 opcje: 1. Użyj zapytań Raw Sql 2. Użyj SqlAlchemy Chcę wiedzieć, czy istnieją jakieś zasady, takie jak niektóre wady i zalety z obu, które mogą mi pomóc wybrać jedną z powyższych 2 opcji. Czy to całkowicie zależy od tego, co lubimy?


title: Notacja theta na stałym czasie. Dlaczego używamy 1?

text: W notacji asymptotycznej, gdy stwierdza się, że jeśli rozmiar problemu jest wystarczająco mały (np. `n<c` dla pewnej stałej `c`), rozwiązanie zajmuje stały czas i jest zapisywane jako `Theta(1)`. Dlaczego piszemy „1” w „Theta”? Co oznacza „1”? Dlaczego nie „Theta(c)”?


title: Generowanie pliku CMakeLists.txt

text: Mam kilka plików źródłowych i nagłówków `C++`. Mogą korzystać z zewnętrznych bibliotek, takich jak Boost m.in. Interesuje mnie proces budowania binariów dla Windows i *nix. * Pliki Makefile (*nix) i .vcproj (Windows) wywołują kompilatory z pewnymi specyfikacjami, takimi jak kolejność kompilacji, opcje kompilacji i inne. * CMakeLists.txt może być używany przez CMake do budowania plików makefile lub .vcproj i używania bardzo pomocnych poleceń, takich jak rekurencyjne wyszukiwanie plików, automatyczne łączenie ze znanymi bibliotekami, instalatorami, zmiennymi, które mogą być używane w plikach źródłowych... Czy są jakieś istniejące narzędzie, które wygeneruje CMakeLists.txt z określonych opcji ? Opcje mogą być takie: przeskanuj ten folder i utwórz z niego bibliotekę, a następnie przeskanuj ten inny folder i stwórz plik wykonywalny i automatycznie połącz zarówno za pomocą Boost, jak i przyjaznego dla użytkownika instalatora z wygenerowanym plikiem INSTALL.txt i README.txt. Coś tak potężnego.


title: Wyjdź z mojej głowy

text: Spędziłem ostatni rok jako jednoosobowy zespół rozwijając aplikację dla bogatych klientów (35 000+ LoC, za ile to jest warte). Obecnie jest stabilny iw produkcji. Wiem jednak, że moje umiejętności były zardzewiałe na początku projektu, więc bez wątpienia w kodzie są poważne problemy. W tym momencie większość problemów dotyczy architektury, struktury i interakcji – łatwe problemy, nawet problemy związane z architekturą/projektem, zostały już wyeliminowane. Niestety, spędziłem tak dużo czasu przy tym projekcie, że trudno mi myśleć poza nim – podchodząc do niego z nowej perspektywy, aby zobaczyć wady głęboko ukryte lub nieodłączne od projektu. **Jak wyjść poza swoją głowę i poza mój kod, aby uzyskać świeży wygląd i ulepszyć go?** Czy jest to mniejszy problem, niż mi się wydaje, czy też doświadczają go inni?


title: Czy istnieje przyzwoity system nagród pieniężnych za oprogramowanie open source?

text: Osobiście byłbym skłonny zapłacić 10 USD komuś, kto może zaoferować, że sterowniki mikrofonu będą działać z jednym z moich laptopów pod Ubuntu 10.10. Pomyślałem, że inni użytkownicy mogą przyczynić się do tego samego, a tym samym znaleźć chętnego programistę. Czy istnieje taki projekt (projekty)?


title: Czy GCC umiera bez obsługi wątków w systemie Windows?

text: Potrzebuję opinii. GCC zawsze był bardzo dobrym kompilatorem, ale ostatnio traci „atrakcyjność”. Właśnie odkryłem, że w systemie Windows GCC nie obsługuje `std::thread`, zmuszając użytkowników Windows do używania innego kompilatora, ponieważ wciąż brakuje najbardziej ekscytującej funkcji. Ale dlaczego tak naprawdę GCC nadal nie obsługuje wątków pod Windows? Problemy z licencją? Niezgodności ABI? (Cóż, istnieje już kilka wieloplatformowych bibliotek korzystających z wielowątkowości: boost, POCO, SDL, wxwidgets, itp. Czy nie byłoby łatwo użyć już istniejącego i licencjonowanego przez MIT/libpng kodu pasującego do tej dziury zamiast dostarczania wydań GCC bez obsługi wątków?) Ostatnio, patrząc na porównania kompilatorów, GCC ma najszersze wsparcie dla funkcji C++11 w porównaniu z innymi kompilatorami, z wyjątkiem faktu, że w Windows nie jest to prawdą, ponieważ wciąż brakuje nam atomów, muteksów i wątki :/ Chciałbym dowiedzieć się więcej na ten temat, ale jedyne, co mogę znaleźć, to ludzie proszący o pomoc, ponieważ: > „wątek” nie istnieje w przestrzeni nazw std Patrząc na śledzenie zgłoszeń i dyskusje mailowe GCC/TDM- GCC, od 2009 roku pojawiały się prośby o obsługę wątków. Możliwe, że po 4 latach nadal nie ma rozwiązania? Co się naprawdę dzieje?


title: Niestandardowa animacja iOS

text: Widziałem animację i nie wiem, jak zrobić coś takiego jak w tym filmie (youtube). Chcę omówić, jak to się robi. Nie sądzę, żeby używali sprite'ów. Mam jeden pomysł, jak to zrobić: na przykład chcę stworzyć animację "chodzącego" zwierzęcia (kiedy zwierzę się porusza, jego nogi "biegną" animację ruchu), powinienem utworzyć customView z imageView z animalBody 3 i dwa imageViews z nóg zwierzęcia 2. Następnie tworzę twardą animację poruszających się nóg i voila, mam własną animację. Kiedy przenoszę customView, powinienem rozpocząć animację nóg. Ale czy istnieje lepsze podejście do tego? Dziękuję! ![tu wpisz opis obrazu](http://i.stack.imgur.com/f1mdB.png) ![tu wpisz opis obrazu](http://i.stack.imgur.com/wSdey.png)


title: Projektowanie schematu interfejsu API sieci Web

text: Jestem w trakcie projektowania interfejsu API dla bardzo podstawowej aplikacji do obsługi fiszek do celów edukacyjnych i zastanawiam się, czy wszyscy uważacie, że można coś ulepszyć. W aplikacji folder zawiera foldery i zestawy. Zestaw zawiera karty. Strona główna zawiera listę wszystkich utworzonych przeze mnie zestawów i folderów najwyższego poziomu (ale nigdy kart). Oto schemat URI, który wymyśliłem: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/r8lES.png) Czy to wydaje się w porządku? Moim celem jest zachowanie zwięzłych/zwięzłych/prostych identyfikatorów URI i przekazywanie metadanych relacji (parentFolderId, parentSetId itp.) do treści żądania. Myśli?


title: Co muszę zawrzeć w moim dokumencie projektowym OOP?

text: Jestem absolwentem inżynierii lotniczej. Wiele z mojej pracy magisterskiej dotyczyło opracowania architektury oprogramowania OOP w MATLAB, aby ułatwić sterowanie pojazdami opartymi na Arduino (sterowce, samochody, quadrotory itp.). Cały mój kod jest mocno udokumentowany, ale moja teza sama w sobie musi być czymś więcej niż odniesieniem do każdej klasy i metody - musi opisywać na wysokim poziomie, jak każdy element działa razem i _dlaczego_ moja architektura jest taka, jaka jest. Mam tylko niewielkiego stopnia w inżynierii komputerowej i uważam się za całkiem kompetentnego programistę, ale nie mam doświadczenia w pisaniu tego rodzaju dokumentów. Jakie rzeczy muszą być zawarte w dokumencie? (Schematy, objaśnienia akapitów dotyczące działania każdej klasy itp.)? Nie chcę po prostu przehaszowywać moich komentarzy do kodu (chociaż na początku każdego pliku znajdują się akapity komentarzy o tym, jak ta klasa odnosi się do innych klas). Zastanawiam się też, czy jest to konieczne, aby uzyskać raczej techniczne (implementuję kilka dość zaawansowanych koncepcji MATLAB [czyli zaawansowanych dla inżynierów niekomputerowych], takich jak słuchacze i wywołania zwrotne); moja publiczność również wywodzi się z inżynierii lotniczej. Przykłady byłyby mile widziane, gdyby istniały. **EDYTUJ** : Część, na której naprawdę zależy moim odbiorcom, nie jest architekturą oprogramowania (rzeczy, które pociąga za sobą to pytanie); ten dokument jest naprawdę dla ludzi, którzy będą korzystać z mojej pracy w przyszłości - którzy **nie** są inżynierami komputerowymi! Więc myślę, że głównym pytaniem jest, co musi być w dokumencie, aby osoby, które nie są na bieżąco z projektem (a możemy założyć, że są kompetentne w języku) mogą zrozumieć architekturę, utrzymywać i korzystać z oprogramowania?


title: Programowanie funkcjonalne i algorytmy stanowe

text: Uczę się programowania funkcjonalnego z **Haskell**. W międzyczasie studiuję teorię automatów i ponieważ wydaje się, że te dwie rzeczy dobrze do siebie pasują, piszę małą bibliotekę do zabawy z automatami. Oto problem, który sprawił, że zadałem pytanie. Studiując sposób oceny osiągalności stanu, wpadłem na pomysł, że prosty algorytm rekurencyjny byłby dość nieefektywny, ponieważ niektóre ścieżki mogą dzielić pewne stany i mogę ocenić je więcej niż raz. Na przykład tutaj, oceniając **osiągalność** _g_ z _a_ , musiałbym wykluczyć _f_ zarówno podczas sprawdzania ścieżki przez _d_, jak i _c_ : ![digraf reprezentujący automat](http://i.stack.imgur .com/4JG7I.png) Mój pomysł jest taki, że algorytm działający równolegle na wielu ścieżkach i aktualizujący wspólny zapis wykluczonych stanów może być świetny, ale to dla mnie za dużo. Widziałem, że w niektórych prostych przypadkach rekurencji można przekazać stan jako argument i to właśnie muszę tutaj zrobić, ponieważ przekazuję dalej listę stanów, przez które przeszedłem, aby uniknąć pętli. Ale czy istnieje sposób na przekazanie tej listy również wstecz, na przykład zwrócenie jej w krotce wraz z wynikiem logicznym mojej funkcji `canReach`? (chociaż wydaje się to nieco wymuszone) **Oprócz słuszności mojego przykładowego przypadku** , jakie inne techniki są dostępne do rozwiązywania tego rodzaju problemów? Wydaje mi się, że te muszą być na tyle powszechne, że muszą istnieć rozwiązania, takie jak to, co dzieje się z `fold*` lub `map`. Jak dotąd, czytając learnyouahaskell.com, nie znalazłem żadnego, ale pamiętaj, że jeszcze nie tknąłem monad. ( _jeśli jestem zainteresowany, opublikowałem kod oncodereview_)


title: Czy zgłaszanie wyjątku z właściwości jest złą formą?

text: Zawsze byłem przekonany, że właściwości (tj. ich operacje set/get) powinny być szybkie/natychmiastowe i bezawaryjne. Nigdy nie powinieneś próbować/łapać w poszukiwaniu lub ustawianiu nieruchomości. Ale szukam sposobów na zastosowanie zabezpieczeń opartych na rolach do właściwości niektórych obiektów. Na przykład właściwość Employee.Salary. Niektóre z rozwiązań, na które natknąłem się, a które wypróbowali inni (w szczególności przykład AOP) obejmują wyrzucenie wyjątku, jeśli akcesor nie ma odpowiednich uprawnień – ale jest to sprzeczne z osobistą regułą, którą miałem już od dłuższego czasu. Pytam więc: czy się mylę? Czy coś się zmieniło? Czy przyjęto, że właściwości powinny mieć możliwość zgłaszania wyjątków?


title: Arkusze sprite w PyGame?

text: Więc trochę googlowałem i nie znalazłem dobrego rozwiązania mojego problemu. Mój problem polega na tym, że używam PyGame i chcę użyć arkusza sprite dla mojego gracza. To wszystko jest dobre i dobre, i tak byłoby, gdybym nie używał paska Sprite Sheet. Zasadniczo, jeśli nie rozumiesz, mam pasek 'ramek' 32x32. Wszystkie te ramki znajdują się na obrazie, obok siebie. Tak więc mam 3 klatki na 1 obrazie. Chciałbym móc używać ich jako arkusza sprite i nie muszę ich przycinać. Użyłem niesamowitego, popularnego i łatwego w użyciu frameworka do gier dla Lua o nazwie LÖVE. LÖVE ma te rzeczy zwane „Quads”. Są podobne do regionów tekstur w LibGDX, jeśli wiesz, czym one są. Zasadniczo quady pozwalają uzyskać fragmenty obrazu. Definiujesz, jak duży jest czworokąt iw ten sposób definiujesz części obrazu lub „regiony” obrazu. Chciałbym zrobić coś podobnego do tego w PyGame i użyć pętli "for", aby przejść przez całą szerokość i wysokość obrazu i oznaczyć każdy obszar 32x32 (lub cokolwiek, co użytkownik określi jako pożądaną szerokość i wysokość ramki) i zapisać to na liście lub coś do wykorzystania później. Zdefiniowałbym szybkość animacji i takie tam, ale to na później. Rozglądam się po sieci i nie mogę znaleźć niczego, co by to zrobiło. Znalazłem 1 skrypt na stronie PyGame, ale PyGame zawiesił się, gdy próbowałem go uruchomić. Próbowałem godzinami, próbując to naprawić, ale bez powodzenia. Czy jest na to sposób? Czy istnieje sposób na uzyskanie regionów obrazu? Czy zabieram się do tego w niewłaściwy sposób? Czy jest na to prostszy sposób? Dziękuję! :-)


title: zdobądź całą kombinację danego zestawu liczb

text: Próbuję uzyskać możliwe kombinacje danego zestawu liczb, powiedzmy na przykład 123 Możliwe kombinacje to 123 132 213 231 312 321 W tym celu napisałem kod jak poniżej - import java.util.ArrayList; /* Nazwa klasy musi być "Main" tylko wtedy, gdy klasa jest publiczna. */ public class Main { /** * @param argumentuje argumenty wiersza poleceń */ static ArrayList list; public static void main(String[] args) { // Logika aplikacji kodu TODO tutaj Main nm = new Main(); nm.list = new ArrayList(); /* for(int i=1; i<= 4; i++) { lista.add(i); } list.remove(list.indexOf(1)); for(int i=0; i<= 2; i++) { System.out.print(list.get(i)); } */ nm.test1(); } public void test1() { for(int i=1; i<= 4; i++) { if(!list.contains(i)) { lista.add(i); test1(); list.remove(list.indexOf(i)); } } if(list.size() == 4) { for(int i=0; i< 4; i++) { System.out.print(list.get(i)); } System.out.println(""); } } } Daje to poprawne dane wyjściowe, jak pokazano w linku o którym myślałem, czy jest to właściwe podejście lub czy można dokonać jakiejkolwiek optymalizacji, aby ten kod mógł zostać użyty do uzyskania kombinacji liczb od 10 do 20 cyfr lub więcej . Pozdrowienia